diff --git a/.gitignore b/.gitignore index 48e79f8..b8134ce 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,5 @@ test-annotation.md .venv/ _obsidian_test_vault/ _tmp_obsidian_check.png +/audit-report-ai-model-workbench-* +/*.gif diff --git a/8d4b37e96ad92bf2230cd5c6ead86aa7.gif b/8d4b37e96ad92bf2230cd5c6ead86aa7.gif deleted file mode 100644 index c8ebd25..0000000 Binary files a/8d4b37e96ad92bf2230cd5c6ead86aa7.gif and /dev/null differ diff --git a/CHANGELOG.md b/CHANGELOG.md index b7cdd51..3177b87 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,15 +2,21 @@ ## Unreleased +- Rendering: add a Three.js capability profile and quality snapshot for direct-format visual fidelity diagnostics. +- Rendering: improve Three.js STL/PLY/OBJ color handling, adaptive PLY point-cloud sizing, and tiny-model camera precision. +- Performance: add Three.js smoothness metrics and enter interactive pixel-ratio throttling on pointer, wheel, and orbit input before the next frame renders. +- Testing: add Three.js color-fidelity and small-parts fixtures to the preview success suite. - Performance: preserve original STEP/OCCT material colors while reducing GLB size by trying the OCCT glTF writer before the existing XDE component fallback. - Performance: reuse existing `.ai3d-converted.*` files only when they are newer than the source model, avoiding stale geometry while skipping unnecessary conversions. - Refactor: move FreeCAD/CadQuery conversion Python into bundled script templates while keeping TypeScript responsible for invocation and output validation. - Routing: align production direct file view with the default Three.js edit-preview path while keeping converted workbench inputs on the conservative Babylon.js route. - UI: improve ruler measurements with calibrated units, per-axis deltas, Markdown copy export, and shared Three.js/Babylon.js formatting. +- UI: keep completed ruler measurements visible when leaving measurement mode, cancel unfinished endpoints cleanly, and verify copy/clear/export behavior in the preview harness. - Stability: increase default conversion timeout from 120s to 300s so large STEP models can complete without timing out. - Security: sanitize remote draft output and model-derived metadata before writing generated notes. - Security: redact vault-relative model, report, index, and folder paths from copied diagnostics reports by default. - Security: validate converter command paths and reject shell metacharacters. +- Diagnostics: surface whether the last knowledge generation needs attention for pending, failed, or warning-completed runs. - Stability: flush pending plugin store state on unload and log previously swallowed folder-creation errors. - Stability: mark knowledge-note generation as pending before vault writes, then success or failed after required artifacts finish. - Stability: bound optional remote draft requests with a timeout so local knowledge-note generation can continue when a draft service hangs. @@ -23,6 +29,7 @@ - Testing: cover knowledge-note generation markers for success, partial-write failure, and stale pending recovery warnings. - Testing: verify remote-draft timeout behavior in unit tests and the remote-draft verification script. - Testing: cover converted asset cache normalization and FreeCAD converter script generation/output validation. +- Testing: cover renderer capability guards so toolbar controls only appear for callable preview methods. - Build: remove unused `@babylonjs/gui`, `@babylonjs/materials`, and `@babylonjs/serializers` dependencies. ## 0.5.8 diff --git a/audit-report-ai-model-workbench-2026-06-14.html b/audit-report-ai-model-workbench-2026-06-14.html deleted file mode 100644 index 706fec7..0000000 --- a/audit-report-ai-model-workbench-2026-06-14.html +++ /dev/null @@ -1,1529 +0,0 @@ - - - - - -AI Model Workbench Audit Report - - - -
- -
-

Fuck My Shit Mountain Audit Report

-

Project: AI Model Workbench(Obsidian 3D 模型预览与知识笔记插件) Audit mode: full Date: 2026-06-14 Reviewer: Kimi Code CLI

-
-

1. Executive Summary

-

AI Model Workbench 是一款基于 TypeScript 的 Obsidian 插件,用于在 Vault 中渲染 GLB/GLTF/STL/PLY/OBJ 等 3D 模型、添加三维标注,并将模型证据转化为关联知识笔记。项目架构清晰,采用 domain → store → io → render → view 分层,Three.js 作为单模型主渲染路径,Babylon.js 作为 3dgrid 与保守回退路径,且已建立较完整的浏览器/Playwright/Obsidian 验证脚本矩阵。

-

然而,近期(约 2026-05-25 至 2026-06-08)迭代速度极快:30 余条提交中出现了 Three.js 主渲染迁移、知识索引与零件注册、跨格式零件匹配、工作区 UI 重构、距离测量工具等重大变更,单次提交可达 +5,300/-680 行。高节奏带来明显的可维护性与稳定性债务:大量文件超过 500 行、Three/Babylon 双端重复实现、生成的 main.js 被纳入版本控制且当前处于 dirty/锁定状态导致本地构建失败、package-lock.json 仍停留在 0.4.3 而 manifest 已经是 0.5.5 等。

-

主要风险集中在:发布流程阻塞(package-lock 版本不一致、dirty bundle)、稳定性(store 在卸载时未 flush、多处错误静默吞没、缺少 WebGL 上下文恢复)、性能(3.8 MB 双运行时 bundle、Babylon 渲染循环不息、标注投影 O(n²) 布局抖动)、测试(无单元测试、集成测试依赖 CSS 类与文案)、安全(esbuild 存在 RCE 漏洞、远程草稿内容未做 HTML 转义、转换器命令路径可被任意指定)。

-

亮点包括:本地优先的知识生成默认策略、Babylon 网络请求守护、GitHub Actions 产物签名与 release 校验、丰富的 i18n、较完整的预览路由文档与决策记录。

-

总评:Overall 5.2 / B — 项目在功能演进上积极进取,但发布工程、稳定性、性能与测试债务已积累到需要刻意投资而非临时修补的程度。

-

Score Dashboard

-
Security        ██████░░░░  6.0  B   本地优先与网络守卫较好,但 esbuild 漏洞、远程草稿注入、任意转换器命令削弱信任
-Stability       █████░░░░░  5.5  B   有序列化锁与单适配器超时,但 store 未 flush、错误吞没、缺 WebGL 恢复
-Performance     █████░░░░░  5.0  B   Three.js 有帧预算与视口暂停,但双运行时 bundle、Babylon 不息循环、O(n²) 投影
-Testing         ████░░░░░░  4.5  C   无单元测试;集成脚本覆盖广但易碎,转换管道 uncovered
-Maintainability █████░░░░░  5.5  B   分层清晰,但神类文件、双端重复、混合换行、store 暴露 raw setState
-Design          █████░░░░░  5.5  B   渲染器抽象良好,但 SRP 违反、重复、大量 as 与非空断言
-Release         ████░░░░░░  4.5  C   CI 带产物签名,但 package-lock 版本阻塞、dirty bundle、changelog 缺 0.5.3/0.5.5
-─────────────────────────────────────
-Overall         █████░░░░░  5.2  B
-

每个维度按 0.0–10.0 评分,越高越好。评分基于整体工程判断,非机械扣分。详见 rubrics/scoring.md

-

Finding Statistics

-
SeverityCountConfirmedSuspected
Critical000
High1080
Medium36270
Low16120
Info100
Total63470
-
-

2. Project Map

-

2.1 组件与职责

-
src/
-├── main.ts                    # 插件生命周期、命令注册、视图/处理器注册
-├── settings.ts                # 设置页 UI 与诊断控件
-├── domain/                    # 共享类型与常量
-├── store/                     # createStore 原语 + Obsidian loadData/saveData 桥接
-├── io/                        # 格式注册、模型管线、转换器、缓存
-├── render/                    # 渲染器抽象 + Three.js/Babylon.js 实现
-├── view/                      # direct-view、inline、workbench
-├── i18n/                      # 中英双语
-└── utils/                     # 路径、日志、DOM、设备、note-reader 等
-

2.2 运行时入口与初始化顺序

-
    -
  1. main.ts:onload() 加载 PluginStore、创建转换缓存、注册命令/文件视图/代码块处理器/实时预览扩展、安装 heading pin observer。
  2. -
  3. 用户触发模型预览时,src/io/model-pipeline.ts 根据扩展名与格式能力决定 direct/convert 策略。
  4. -
  5. src/render/preview/routing.ts 选择 Three.js 或 Babylon.js 路径;factory.ts 动态导入对应渲染器。
  6. -
  7. 渲染器实现 WorkbenchPreview / ModelPreview 接口,通过 AnnotationManager 叠加标注。
  8. -
  9. 知识笔记生成在 src/view/workbench/knowledge-note.ts 中完成,写入报告、sidecar、索引、零件草稿与预览图。
  10. -
-

2.3 状态所有权

- -

2.4 持久化

- -

2.5 外部接口

- -

2.6 安全边界

- -

2.7 高风险区域

- -

Coverage Matrix

-
DimensionCoverageEvidence inspectedExclusions / limits
ArchitectureHighsrc/main.ts, src/settings.ts, src/domain/, src/store/, src/io/model-pipeline.ts, src/io/formats/, src/render/preview/, docs/development-handoff.md, docs/preview-routing-matrix.md未做运行时架构验证
SecurityHighsrc/render/babylon/network-guard.ts, src/view/workbench/remote-draft.ts, src/io/conversion/*, src/diagnostics/report.ts, src/main.ts, src/settings.ts, SECURITY.md, package.json, package-lock.json, .github/workflows/release.yml, npm audit, eslint未在真实 Obsidian 中做动态渗透测试
StabilityHighsrc/store/plugin-store.ts, src/main.ts, src/io/conversion/manager.ts, src/io/conversion/conversion-service.ts, src/render/three/scene.ts, src/render/babylon/scene.ts, src/render/preview/annotations.ts, src/view/direct-view.ts, src/utils/log.ts, src/diagnostics/report.ts未在 iOS/Android 真机测试 WebGL 上下文丢失
PerformanceHighsrc/render/three/scene.ts, src/render/babylon/scene.ts, src/render/babylon/grid.ts, src/render/preview/annotations.ts, src/view/inline/helper-buttons.ts, src/view/inline/code-block.ts, src/view/direct-view.ts, package.json, esbuild.config.mjs, main.js未使用性能分析器采样真实用户场景
TestingHighscripts/verify-*.mjs, package.json, eslint.config.mjs, npm run typecheck, npm run build, npm audit未执行完整的 verify:obsidian(需要 macOS + Obsidian)
MaintainabilityHigh全部 src/**/*.ts 文件大小、导入方向、重复模式、TODO 标记、换行符未逐行阅读最大文件的全部实现
DesignHigh渲染器抽象、scene 类职责、类型断言、非空断言、原则交叉检查同上
ReleaseHigh.github/workflows/release.yml, scripts/verify-release-assets.mjs, manifest.json, package.json, versions.json, CHANGELOG.md, main.js git 状态未触发真实 release workflow
DocumentationHighREADME.md, README.zh-CN.md, CHANGELOG.md, docs/*.md, FORMAT_SUPPORT_DESIGN.md, AGENTS.md, SECURITY.md未验证所有安装步骤
ConfigurationHighsrc/settings.ts, src/domain/constants.ts, src/store/plugin-store.ts未在全部平台测试配置默认值
ObservabilityMediumsrc/utils/log.ts, src/diagnostics/report.ts未在运行时检查日志输出与指标持久化
Data IntegrityHighsrc/store/plugin-store.ts, src/io/cache/converted-asset-cache.ts, src/io/conversion/conversion-service.ts, src/view/workbench/knowledge-note.ts未做异常断电/崩溃测试
PrivacyHighsrc/view/workbench/remote-draft.ts, src/diagnostics/report.ts, src/view/workbench/analysis-result.ts, README.md 隐私声明未审计远程服务端行为
AccessibilityMediumsrc/settings.ts, src/view/inline/helper-buttons.ts, src/render/preview/annotations.ts未使用屏幕阅读器或 axe-core 运行时测试
Supply ChainHighpackage.json, package-lock.json, .github/workflows/release.yml, npm audit, esbuild.config.mjs未做全量传递依赖审计
CostMediumsrc/view/workbench/remote-draft.ts, package.json未测量远程草稿实际 token/API 花费
AI SafetyHighsrc/view/workbench/remote-draft.ts, src/view/workbench/analysis-result.ts, src/view/workbench/knowledge-note.ts未在真实 LLM 服务上做提示注入评估
FallbackHighsrc/main.ts, src/io/conversion/, src/render/babylon/scene.ts, src/view/ 的 catch 分支未穷尽所有错误路径
Testing AuthenticityHighscripts/verify-*.mjs 断言内容未在 CI 外多次运行验证稳定性
Type SafetyHighsrc/**/*.ts 中的 anyas!、返回类型未启用 no-non-null-assertion 跑全量检查
Frontend StateHighsrc/render/three/scene.ts, src/render/babylon/scene.ts, src/render/preview/annotations.ts, src/view/direct-view.ts, src/view/inline/helper-buttons.ts未使用 React DevTools(项目未用 React)
Backend APINot assessedN/A本项目为 Obsidian 插件,无服务端 API
Dependency WeightHighpackage.json, src/**/*.ts import 模式,main.js 大小未做 bundle 分析树状图
Code ConsistencyHigh命名、import 组织、错误处理模式、换行符未运行 formatter 全量检查
Comment CoverageMediumsrc/render/preview/types.ts, src/render/preview/component-identity.ts, src/render/three/scene.ts, src/render/babylon/scene.ts未统计注释行比例
-
-

3. Top Risks

-
    -
  1. package-lock.json 版本 0.4.3 与 manifest 0.5.5 不一致,阻塞 release 校验(Release,High)
  2. -
  3. PluginStore 在 onunload 时不 flush 待保存状态,可能导致标注/零件注册/最近生成元数据丢失(Stability,High)
  4. -
  5. esbuild 存在 GHSA-gv7w-rqvm-qjhr 漏洞,CI/build 环境可被 compromised registry 远程代码执行(Security/Supply Chain,High)
  6. -
  7. 远程草稿返回内容未经 HTML/Markdown 转义即写入 Vault 笔记(Security/AI Safety,High)
  8. -
  9. Babylon 预览渲染循环不息,无可见性/脏检查,持续消耗 GPU/电池(Performance,High)
  10. -
  11. 生产产物同时打包 Three.js 与 Babylon.js 两个完整运行时,main.js 约 3.8 MB(Performance/Release,High)
  12. -
  13. 转换器命令路径可被任意指定,可能执行恶意程序(Security/Configuration,Medium)
  14. -
  15. main.js 被纳入版本控制且当前 dirty/锁定,本地构建失败(Release,Medium)
  16. -
  17. 无单元测试;集成测试断言 CSS 类与文案,易碎(Testing,Medium)
  18. -
  19. Three/Babylon scene 文件为 2,099 / 1,661 行神类,重复实现测量/聚焦/爆炸/拆卸(Maintainability/Design,Medium)
  20. -
  21. 标注投影存在 O(n²) DOM layout thrashing(Performance,High)
  22. -
  23. CHANGELOG 缺失 0.5.3 / 0.5.5 条目,development-handoff/README 版本示例陈旧(Documentation/Release,Medium)
  24. -
-
-

4. Detailed Findings

-

4.1 Release

-

Finding: package-lock.json 版本与 manifest/package.json 不一致,阻塞 release 校验

- -

Finding: main.js 被纳入版本控制且当前 dirty/锁定,本地构建失败

- -

Finding: CHANGELOG 缺失 0.5.3 / 0.5.5 条目

- -

Finding: 文档中的版本示例陈旧

- -

Finding: release workflow 的 tag 触发模式过于宽松

- -

Finding: release workflow 中 tag 输入直接插值到 shell

- -
-

4.2 Stability

-

Finding: PluginStore 在 onunload 时不 flush 待保存状态

- -

Finding: 多处错误被静默吞没

- -

Finding: 缺少 WebGL 上下文丢失 / 恢复处理

- -

Finding: 转换管道缺少外层超时

- -

Finding: 命令回调中的异步错误未处理

- -

Finding: 部分模块缺少结构化加载错误反馈

- -
-

4.3 Security

-

Finding: esbuild 存在 GHSA-gv7w-rqvm-qjhr RCE 漏洞

- -

Finding: 远程草稿返回内容未做 HTML/Markdown 转义即写入 Vault

- -

Finding: 模型派生元数据注入笔记时缺少 HTML 转义

- -

Finding: 转换器命令设置允许任意可执行文件

- -

Finding: 持久化转换缓存可引用任意文件系统路径

- -

Finding: 远程草稿 endpoint 接受私有/内部 URL

- -

Finding: AI 提示注入风险

- -

Finding: 安全相关失败被静默吞没(与 STB-2 关联)

- -

Finding: 手动 token 扫描未在 CI 中强制执行

- -

Finding: Babylon 网络守卫延迟安装且依赖内部实现

- -
-

4.4 Performance

-

Finding: 生产产物同时打包 Three.js 与 Babylon.js

- -

Finding: Babylon 预览渲染循环不息

- -

Finding: Babylon 3dgrid 每帧重绘每个 cell

- -

Finding: 标注投影导致 O(n²) 布局抖动

- -

Finding: 测量与标注集合无上限增长

- -

Finding: AnnotationManager 中存在 effect 扩散

- -

Finding: helper-buttons 中 DOM 即状态

- -

Finding: OBJ 纹理内联导致纹理内存翻倍

- -

Finding: Three.js 像素比快速变化导致 render target 重复分配

- -
-

4.5 Testing

-

Finding: 无单元测试框架或单元测试

- -

Finding: 验证脚本断言实现细节

- -

Finding: 浏览器 harness 存在脆弱性风险

- -

Finding: 转换管道缺少自动化覆盖

- -

Finding: release workflow 未执行 eslint

- -
-

4.6 Maintainability & Design

-

Finding: scene 文件为神类,违反单一职责

- -

Finding: Three 与 Babylon 渲染器之间存在重复逻辑

- -

Finding: settings.ts display() 是巨型 UI 构建器

- -

Finding: main.ts 包含大量视图逻辑

- -

Finding: direct-view.ts loadModel() 职责过多

- -

Finding: PluginStore 暴露 raw setState,缺少 actions

- -

Finding: 视图层直接修改持久化 profile

- -

Finding: 标注编辑器与投影为单体

- -

Finding: 混合 CRLF/LF 换行符

- -

Finding: 缺少 TODO/FIXME/HACK 标记

- -

Finding: 设置项命名不一致

- -

Finding: 公共接口文档不足

- -
-

4.7 Type Safety

-

Finding: Babylon scene 中存在显式 any 与不安全成员访问

- -

Finding: 广泛存在 `as` 类型断言

- -

Finding: 非空断言普遍存在

- -

Finding: 导出函数缺少返回类型

- -
-

4.8 Configuration

-

Finding: 设置输入缺少校验

- -
-

4.9 Observability

-

Finding: info 级别日志写入 console.debug

- -

Finding: 性能快照/转换耗时未暴露

- -
-

4.10 Data Integrity

-

Finding: 知识笔记生成在文件写入完成前变更 analysis

- -

Finding: 转换缓存写入前未重新校验文件

- -

Finding: 持久化状态缺少 schema version

- -
-

4.11 Privacy

-

Finding: 诊断报告包含 Vault 路径结构

- -
-

4.12 Accessibility

-

Finding: 缺少正式的无障碍验证

- -
-

4.13 Supply Chain

-

Finding: esbuild source patch 脆弱

- -

Finding: 声明了未使用的 Babylon 包

- -
-

4.14 Documentation

-

Finding: 预览路由矩阵与实现基本一致

- -
-

4.15 Backend API

- -
-

5. Recent Commit Capability Evolution

-

5.1 Commit Window

-

分析窗口:最近约 30 条提交,时间跨度约 2026-05-25 至 2026-06-08,提交者以单一作者为主,节奏非常快(部分日期 4-5 条 commit)。

-

5.2 Major Feature Inflection Points

-
CommitVersionWhat changed
be3db73Three.js 正式成为单模型主渲染路径;引入 renderer-agnostic 抽象;单次提交 +5,326/-680 行,为近期最大变更。
f952415增加 Three/Babylon 渲染器切换能力。
e3bdfba0.4.0引入零件笔记草稿(part note drafts)与模型知识索引。
fd491040.4.3增加 diagnostics report、registered part matching、自动零件注册。
e478b42 / b1cf45bGLB component identity 与跨格式零件匹配。
355c2e1 / e8d094a / c078c22Workspace UI 重构为基于 track 的侧边栏。
7c487e90.5.5增加距离测量工具(distance measurement)。
-

5.3 Stability Improvements

- -

5.4 Preview Routing Evolution

- -

5.5 Knowledge Base / Part Notes Progression

- -

5.6 Release Cadence

-

版本序列:0.4.0 → 0.4.3 → 0.5.1 → 0.5.3 → 0.5.5。

- -

5.7 Code Growth Patterns

- -

5.8 Risks Introduced by Recent Commits

- -
-

6. Metrics Comparison

-

6.1 Build Volume

-
MetricCurrent (0.5.5)Recent historyTrend
main.js (uncompressed)~3.97 MB (3.8 MB reported by ls)3.945 MB at 27103cb↔ Flat / slight growth
styles.css40 KB
node_modules281 MB
.venv14 MB
-

Observation: 尽管近期有帧预算、viewport pause 等性能 work,但 bundle 体积没有下降趋势,因为 Three.js 与 Babylon.js 两个完整运行时仍被打包在一起。

-

6.2 Type Safety

-
MetricCurrentTargetTrend
npm run typecheckPassesPasses✅ Stable
eslint problems21 (19 errors, 2 warnings)0❌ Regressed / not enforced
any usagePresentMinimal⚠️ Debt
as assertionsMany (Babylon scene alone 26)Minimal⚠️ Debt
Non-null assertions (!)~470 across srcMinimal❌ High
-

Observation: TypeScript 编译通过,但 lint 与类型断言债务明显,release workflow 未运行 eslint。

-

6.3 Test Coverage

-
LayerCoverageEvidence
Unit testsNoneNo test runner, no *.test.ts
Integration / verification scripts11 scriptsscripts/verify-*.mjs
Conversion pipelinesNot coveredNo verify:conversion
Remote draft privacy/securityPartialverify:remote-draft exists but asserts structure, not sanitization
Obsidian end-to-endRequires hostverify:obsidian skipped in this audit
-

Observation: 验证矩阵广但浅;缺乏对关键路径的细粒度回归保护。

-

6.4 Build Health

-
CheckResult
npm run typecheck✅ Pass
npm run build❌ Fail — main.js locked/dirty
npm audit❌ 1 High (esbuild)
npm run lint❌ 21 problems
npm run verify:release❌ Blocked by package-lock version mismatch
-

6.5 Rendering Performance

-
AspectCurrentNotes
Three.js frame budget✅ ImplementedupdateFrameBudget() adjusts pixel ratio
Viewport pause (Three)✅ ImplementedIntersectionObserver-based
Babylon loop pause❌ MissingrunRenderLoop continuous
Grid re-render❌ Every framerenderFrame() clears & re-renders all cells
Annotation projection❌ O(n²) layout thrashinggetBoundingClientRect() inside nested loops
Resource disposal⚠️ PartialTimers/observers in AnnotationManager need audit
-

Observation: Three.js 路径已有节电措施,Babylon 路径仍是主要能耗风险;标注系统是交互帧率瓶颈。

-
-

7. Principles Compliance

-

对照 rubrics/principles.md

-
PrincipleComplianceNotes
Prefer explicit contracts⚠️ Partial渲染器接口较好,但内部大量 as/! 与非空断言
Fail fast and noisily❌ Weak多处 catch 静默吞没错误
Keep surfaces small and typed⚠️ PartialPluginStore 暴露 raw setState;设置校验不足
Make state explicit and owned⚠️ Partial视图直接 mutate persisted profiles;DOM-as-state 在 helper-buttons
Secure by default✅ Strong本地优先、Babylon 网络守卫、远程草稿默认关闭
Verify at boundaries⚠️ Partial类型边界校验不足;远程内容未做 HTML 转义
Document why, not just what⚠️ Partial文档丰富,但代码级 JSDoc 与 TODO 不足
Test what must not break❌ Weak无单元测试;关键转换管道未覆盖
Reduce and justify dependencies⚠️ Partial同时依赖 Three 与 Babylon;声明了未使用的 Babylon 包
Review risk in code paths that touch money, data, or identity✅ Mostly远程草稿与转换命令有安全思考,但实现上有 gaps
-
- -

按风险收益比排序,优先处理阻塞发布与数据丢失问题:

-
    -
  1. REL-1 — 同步 package-lock.json 到 0.5.5(5 分钟,解除 release 阻塞)
  2. -
  3. REL-2 — 解决 main.js dirty/锁定,确保 npm run build 可用(15 分钟)
  4. -
  5. STB-1 — PluginStore unload flush(30 分钟,防止数据丢失)
  6. -
  7. SEC-1 — 升级 esbuild 并重新生成 lockfile(30 分钟)
  8. -
  9. SEC-2 — 远程草稿输出 HTML/Markdown 转义(3 小时,用户安全)
  10. -
  11. SEC-3 — 模型派生字符串 HTML 转义(2 小时)
  12. -
  13. TST-5 — CI/release workflow 加入 eslint 并修复现有错误(2 小时)
  14. -
  15. PER-1 — 减少 bundle 体积:移除未使用 Babylon 包,评估代码分割(1-2 天)
  16. -
  17. PER-2 / PER-3 / PER-4 — Babylon 循环/Grid/标注投影性能优化(各 4 小时 - 1 天)
  18. -
  19. TST-1 / TST-4 — 引入单元测试与转换 mock 测试(各 1-2 天)
  20. -
  21. MAINT-1 / MAINT-2 — 拆分 scene 神类与消除双端重复(1-2 周,长期架构投资)
  22. -
-
-

9. Quick Wins(本周可完成)

-
IDFixEffortImpact
REL-1同步 package-lock 版本5 min解除 release 阻塞
REL-2关闭锁定进程并提交干净 main.js15 min恢复本地构建
REL-3补充 CHANGELOG 0.5.3/0.5.520 min发布文档完整
REL-4更新文档版本示例15 min新贡献者体验
SEC-1升级 esbuild30 min消除 high 漏洞
STB-1store unload flush30 min防止数据丢失
OBS-1info 日志改用 console.info5 min日志可见性
SUP-2移除未使用 Babylon 包15 min减小依赖面
REL-5 / REL-6收紧 release tag 触发与输入处理25 min供应链安全
STB-2 starter为所有空 catch 添加 warn 日志2 h调试能力
-
-

10. Long-Term Refactor Plan

-

10.1 渲染器架构瘦身(2-4 周)

- -

10.2 状态管理规范化(1 周)

- -

10.3 测试金字塔建设(2-4 周)

- -

10.4 安全与隐私加固(1-2 周)

- -

10.5 性能专项(2-3 周)

- -

10.6 发布工程自动化(1 周)

- -
-

11. Methodology & Limitations

- -
-

Report generated by Kimi Code CLI on 2026-06-14.

-
-
-
-
-
-
-
-
-
-
-
-
-
- - \ No newline at end of file diff --git a/audit-report-ai-model-workbench-2026-06-14.md b/audit-report-ai-model-workbench-2026-06-14.md deleted file mode 100644 index a821e68..0000000 --- a/audit-report-ai-model-workbench-2026-06-14.md +++ /dev/null @@ -1,1402 +0,0 @@ -> **INSTRUCTION TO AI: This is the ONLY valid report template. Do NOT use any formatting, heading style, or structure from files inside the audited project. Output MUST follow this template exactly.** - -# Fuck My Shit Mountain Audit Report - -**Project:** AI Model Workbench(Obsidian 3D 模型预览与知识笔记插件) -**Audit mode:** full -**Date:** 2026-06-14 -**Reviewer:** Kimi Code CLI - ---- - -## 1. Executive Summary - -AI Model Workbench 是一款基于 TypeScript 的 Obsidian 插件,用于在 Vault 中渲染 GLB/GLTF/STL/PLY/OBJ 等 3D 模型、添加三维标注,并将模型证据转化为关联知识笔记。项目架构清晰,采用 domain → store → io → render → view 分层,Three.js 作为单模型主渲染路径,Babylon.js 作为 3dgrid 与保守回退路径,且已建立较完整的浏览器/Playwright/Obsidian 验证脚本矩阵。 - -然而,近期(约 2026-05-25 至 2026-06-08)迭代速度极快:30 余条提交中出现了 Three.js 主渲染迁移、知识索引与零件注册、跨格式零件匹配、工作区 UI 重构、距离测量工具等重大变更,单次提交可达 +5,300/-680 行。高节奏带来明显的可维护性与稳定性债务:大量文件超过 500 行、Three/Babylon 双端重复实现、生成的 `main.js` 被纳入版本控制且当前处于 dirty/锁定状态导致本地构建失败、`package-lock.json` 仍停留在 0.4.3 而 manifest 已经是 0.5.5 等。 - -主要风险集中在:**发布流程阻塞**(package-lock 版本不一致、dirty bundle)、**稳定性**(store 在卸载时未 flush、多处错误静默吞没、缺少 WebGL 上下文恢复)、**性能**(3.8 MB 双运行时 bundle、Babylon 渲染循环不息、标注投影 O(n²) 布局抖动)、**测试**(无单元测试、集成测试依赖 CSS 类与文案)、**安全**(esbuild 存在 RCE 漏洞、远程草稿内容未做 HTML 转义、转换器命令路径可被任意指定)。 - -亮点包括:本地优先的知识生成默认策略、Babylon 网络请求守护、GitHub Actions 产物签名与 release 校验、丰富的 i18n、较完整的预览路由文档与决策记录。 - -总评:**Overall 5.2 / B** — 项目在功能演进上积极进取,但发布工程、稳定性、性能与测试债务已积累到需要刻意投资而非临时修补的程度。 - -### Score Dashboard - -``` -Security ██████░░░░ 6.0 B 本地优先与网络守卫较好,但 esbuild 漏洞、远程草稿注入、任意转换器命令削弱信任 -Stability █████░░░░░ 5.5 B 有序列化锁与单适配器超时,但 store 未 flush、错误吞没、缺 WebGL 恢复 -Performance █████░░░░░ 5.0 B Three.js 有帧预算与视口暂停,但双运行时 bundle、Babylon 不息循环、O(n²) 投影 -Testing ████░░░░░░ 4.5 C 无单元测试;集成脚本覆盖广但易碎,转换管道 uncovered -Maintainability █████░░░░░ 5.5 B 分层清晰,但神类文件、双端重复、混合换行、store 暴露 raw setState -Design █████░░░░░ 5.5 B 渲染器抽象良好,但 SRP 违反、重复、大量 as 与非空断言 -Release ████░░░░░░ 4.5 C CI 带产物签名,但 package-lock 版本阻塞、dirty bundle、changelog 缺 0.5.3/0.5.5 -───────────────────────────────────── -Overall █████░░░░░ 5.2 B -``` - -每个维度按 0.0–10.0 评分,**越高越好**。评分基于整体工程判断,非机械扣分。详见 `rubrics/scoring.md`。 - -### Finding Statistics - -| Severity | Count | Confirmed | Suspected | -|----------|-------|-----------|-----------| -| Critical | 0 | 0 | 0 | -| High | 10 | 8 | 0 | -| Medium | 36 | 27 | 0 | -| Low | 16 | 12 | 0 | -| Info | 1 | 0 | 0 | -| **Total** | **63** | **47** | **0** | - ---- - -## 2. Project Map - -### 2.1 组件与职责 - -```text -src/ -├── main.ts # 插件生命周期、命令注册、视图/处理器注册 -├── settings.ts # 设置页 UI 与诊断控件 -├── domain/ # 共享类型与常量 -├── store/ # createStore 原语 + Obsidian loadData/saveData 桥接 -├── io/ # 格式注册、模型管线、转换器、缓存 -├── render/ # 渲染器抽象 + Three.js/Babylon.js 实现 -├── view/ # direct-view、inline、workbench -├── i18n/ # 中英双语 -└── utils/ # 路径、日志、DOM、设备、note-reader 等 -``` - -### 2.2 运行时入口与初始化顺序 - -1. `main.ts:onload()` 加载 `PluginStore`、创建转换缓存、注册命令/文件视图/代码块处理器/实时预览扩展、安装 heading pin observer。 -2. 用户触发模型预览时,`src/io/model-pipeline.ts` 根据扩展名与格式能力决定 direct/convert 策略。 -3. `src/render/preview/routing.ts` 选择 Three.js 或 Babylon.js 路径;`factory.ts` 动态导入对应渲染器。 -4. 渲染器实现 `WorkbenchPreview` / `ModelPreview` 接口,通过 `AnnotationManager` 叠加标注。 -5. 知识笔记生成在 `src/view/workbench/knowledge-note.ts` 中完成,写入报告、sidecar、索引、零件草稿与预览图。 - -### 2.3 状态所有权 - -- `PluginStore` 持有 `settings`、`modelAssetProfiles`、`convertedAssetRecords`、`lastKnowledgeGeneration` 等持久化状态。 -- 但视图层(`direct-view.ts`、`helper-buttons.ts`)直接调用 `ps.store.setState()` 修改 profiles,绕过 store 动作。 -- 渲染器内部状态(相机、选中零件、测量线段、wireframe)由各自 scene 类持有,Three/Babylon 双端重复。 - -### 2.4 持久化 - -- Obsidian `loadData/saveData` 通过 `data.json` 保存;`PluginStore` 用 500 ms debounce 自动保存。 -- 缺少 schema version;卸载时不会 flush pending save。 -- 转换缓存记录 `outputPath`,未限制在 Vault 内。 - -### 2.5 外部接口 - -- 本地文件系统:读取 Vault 模型、写入报告/图片/缓存。 -- 外部 CLI:FreeCAD、Python + cadquery/trimesh、obj2gltf、FBX2glTF。 -- 网络:可选远程草稿 `POST /draft-note`;Babylon 网络守护拦截远程脚本/资源请求。 - -### 2.6 安全边界 - -- 知识生成默认本地-only;远程草稿需显式配置。 -- 转换器命令由用户设置/环境变量决定,当前未校验。 -- 模型派生字符串直接插入生成的 Markdown,仅做了部分转义。 - -### 2.7 高风险区域 - -- `src/render/three/scene.ts`(2,099 行)与 `src/render/babylon/scene.ts`(1,661 行):神类文件,双端重复。 -- `src/view/workbench/knowledge-note.ts`(1,365 行):文件 I/O 与状态变更交织。 -- `src/view/direct-view.ts`(694 行)与 `src/settings.ts`(651 行):大文件、多职责。 -- 发布工程:`package-lock.json` 与 manifest 版本不一致,`main.js` dirty/锁定。 - -### Coverage Matrix - -| Dimension | Coverage | Evidence inspected | Exclusions / limits | -|-----------|----------|--------------------|---------------------| -| Architecture | High | `src/main.ts`, `src/settings.ts`, `src/domain/*`, `src/store/*`, `src/io/model-pipeline.ts`, `src/io/formats/*`, `src/render/preview/*`, `docs/development-handoff.md`, `docs/preview-routing-matrix.md` | 未做运行时架构验证 | -| Security | High | `src/render/babylon/network-guard.ts`, `src/view/workbench/remote-draft.ts`, `src/io/conversion/*`, `src/diagnostics/report.ts`, `src/main.ts`, `src/settings.ts`, `SECURITY.md`, `package.json`, `package-lock.json`, `.github/workflows/release.yml`, `npm audit`, `eslint` | 未在真实 Obsidian 中做动态渗透测试 | -| Stability | High | `src/store/plugin-store.ts`, `src/main.ts`, `src/io/conversion/manager.ts`, `src/io/conversion/conversion-service.ts`, `src/render/three/scene.ts`, `src/render/babylon/scene.ts`, `src/render/preview/annotations.ts`, `src/view/direct-view.ts`, `src/utils/log.ts`, `src/diagnostics/report.ts` | 未在 iOS/Android 真机测试 WebGL 上下文丢失 | -| Performance | High | `src/render/three/scene.ts`, `src/render/babylon/scene.ts`, `src/render/babylon/grid.ts`, `src/render/preview/annotations.ts`, `src/view/inline/helper-buttons.ts`, `src/view/inline/code-block.ts`, `src/view/direct-view.ts`, `package.json`, `esbuild.config.mjs`, `main.js` | 未使用性能分析器采样真实用户场景 | -| Testing | High | `scripts/verify-*.mjs`, `package.json`, `eslint.config.mjs`, `npm run typecheck`, `npm run build`, `npm audit` | 未执行完整的 `verify:obsidian`(需要 macOS + Obsidian) | -| Maintainability | High | 全部 `src/**/*.ts` 文件大小、导入方向、重复模式、TODO 标记、换行符 | 未逐行阅读最大文件的全部实现 | -| Design | High | 渲染器抽象、scene 类职责、类型断言、非空断言、原则交叉检查 | 同上 | -| Release | High | `.github/workflows/release.yml`, `scripts/verify-release-assets.mjs`, `manifest.json`, `package.json`, `versions.json`, `CHANGELOG.md`, `main.js` git 状态 | 未触发真实 release workflow | -| Documentation | High | `README.md`, `README.zh-CN.md`, `CHANGELOG.md`, `docs/*.md`, `FORMAT_SUPPORT_DESIGN.md`, `AGENTS.md`, `SECURITY.md` | 未验证所有安装步骤 | -| Configuration | High | `src/settings.ts`, `src/domain/constants.ts`, `src/store/plugin-store.ts` | 未在全部平台测试配置默认值 | -| Observability | Medium | `src/utils/log.ts`, `src/diagnostics/report.ts` | 未在运行时检查日志输出与指标持久化 | -| Data Integrity | High | `src/store/plugin-store.ts`, `src/io/cache/converted-asset-cache.ts`, `src/io/conversion/conversion-service.ts`, `src/view/workbench/knowledge-note.ts` | 未做异常断电/崩溃测试 | -| Privacy | High | `src/view/workbench/remote-draft.ts`, `src/diagnostics/report.ts`, `src/view/workbench/analysis-result.ts`, `README.md` 隐私声明 | 未审计远程服务端行为 | -| Accessibility | Medium | `src/settings.ts`, `src/view/inline/helper-buttons.ts`, `src/render/preview/annotations.ts` | 未使用屏幕阅读器或 axe-core 运行时测试 | -| Supply Chain | High | `package.json`, `package-lock.json`, `.github/workflows/release.yml`, `npm audit`, `esbuild.config.mjs` | 未做全量传递依赖审计 | -| Cost | Medium | `src/view/workbench/remote-draft.ts`, `package.json` | 未测量远程草稿实际 token/API 花费 | -| AI Safety | High | `src/view/workbench/remote-draft.ts`, `src/view/workbench/analysis-result.ts`, `src/view/workbench/knowledge-note.ts` | 未在真实 LLM 服务上做提示注入评估 | -| Fallback | High | `src/main.ts`, `src/io/conversion/*`, `src/render/babylon/scene.ts`, `src/view/*` 的 catch 分支 | 未穷尽所有错误路径 | -| Testing Authenticity | High | `scripts/verify-*.mjs` 断言内容 | 未在 CI 外多次运行验证稳定性 | -| Type Safety | High | `src/**/*.ts` 中的 `any`、`as`、`!`、返回类型 | 未启用 `no-non-null-assertion` 跑全量检查 | -| Frontend State | High | `src/render/three/scene.ts`, `src/render/babylon/scene.ts`, `src/render/preview/annotations.ts`, `src/view/direct-view.ts`, `src/view/inline/helper-buttons.ts` | 未使用 React DevTools(项目未用 React) | -| Backend API | Not assessed | N/A | 本项目为 Obsidian 插件,无服务端 API | -| Dependency Weight | High | `package.json`, `src/**/*.ts` import 模式,`main.js` 大小 | 未做 bundle 分析树状图 | -| Code Consistency | High | 命名、import 组织、错误处理模式、换行符 | 未运行 formatter 全量检查 | -| Comment Coverage | Medium | `src/render/preview/types.ts`, `src/render/preview/component-identity.ts`, `src/render/three/scene.ts`, `src/render/babylon/scene.ts` | 未统计注释行比例 | - ---- - -## 3. Top Risks - -1. **package-lock.json 版本 0.4.3 与 manifest 0.5.5 不一致,阻塞 release 校验**(Release,High) -2. **PluginStore 在 onunload 时不 flush 待保存状态,可能导致标注/零件注册/最近生成元数据丢失**(Stability,High) -3. **esbuild 存在 GHSA-gv7w-rqvm-qjhr 漏洞,CI/build 环境可被 compromised registry 远程代码执行**(Security/Supply Chain,High) -4. **远程草稿返回内容未经 HTML/Markdown 转义即写入 Vault 笔记**(Security/AI Safety,High) -5. **Babylon 预览渲染循环不息,无可见性/脏检查,持续消耗 GPU/电池**(Performance,High) -6. **生产产物同时打包 Three.js 与 Babylon.js 两个完整运行时,main.js 约 3.8 MB**(Performance/Release,High) -7. **转换器命令路径可被任意指定,可能执行恶意程序**(Security/Configuration,Medium) -8. **main.js 被纳入版本控制且当前 dirty/锁定,本地构建失败**(Release,Medium) -9. **无单元测试;集成测试断言 CSS 类与文案,易碎**(Testing,Medium) -10. **Three/Babylon scene 文件为 2,099 / 1,661 行神类,重复实现测量/聚焦/爆炸/拆卸**(Maintainability/Design,Medium) -11. **标注投影存在 O(n²) DOM layout thrashing**(Performance,High) -12. **CHANGELOG 缺失 0.5.3 / 0.5.5 条目,development-handoff/README 版本示例陈旧**(Documentation/Release,Medium) - ---- - -## 4. Detailed Findings - -### 4.1 Release - -### Finding: package-lock.json 版本与 manifest/package.json 不一致,阻塞 release 校验 -- ID: REL-1 -- Severity: High -- Confidence: High -- Category: Release -- Status: Confirmed -- Affected area: `package-lock.json`, `package.json`, `manifest.json`, `scripts/verify-release-assets.mjs:26-27` -- Evidence: `node -p "require('./package-lock.json').version"` 输出 `0.4.3`;`package.json` 与 `manifest.json` 为 `0.5.5`。 -- Problem: 三个发布关键文件版本号不一致,`verify-release-assets.mjs` 会在 release 阶段直接失败。 -- Why it matters: 这是发布流程的门禁检查,不一致意味着无法通过 CI 自动发布。 -- Realistic failure scenario: 维护者 tag `0.5.5` 并推送;GitHub Actions 在 `verify:release` 步骤退出码非零,release 产物无法上传。 -- Minimal fix: 运行 `npm version 0.5.5 --no-git-tag-version` 或手动同步 `package-lock.json` 的两个 version 字段。 -- Better long-term fix: 在 release workflow 中加入 `npm run verify:release` 作为前置步骤;在 `preversion`/`postversion` 脚本中自动对齐。 -- Regression test suggestion: 本地运行 `npm run verify:release` 成功;CI 在 release 前执行相同脚本。 -- Estimated effort: 5 minutes -### Finding: main.js 被纳入版本控制且当前 dirty/锁定,本地构建失败 -- ID: REL-2 -- Severity: Medium -- Confidence: High -- Category: Release -- Status: Confirmed -- Affected area: `main.js`, `esbuild.config.mjs`, 构建流程 -- Evidence: `git status` 显示 `M main.js`;`npm run build` 报错 `UNKNOWN: unknown error, open '...\\main.js'`;`git diff --stat main.js` 显示 439 insertions / 439 deletions。 -- Problem: 生成的 bundle 被提交到 git 且当前被其他进程(可能是正在运行的 Obsidian 实例)锁定,导致无法覆盖。 -- Why it matters: 开发者无法生成干净的 release bundle;CI 可能使用陈旧或未提交的 bundle。 -- Realistic failure scenario: 发布前 `npm run build` 失败;维护者被迫手动复制 bundle 或关闭 Obsidian 后再构建。 -- Minimal fix: 关闭持有 main.js 句柄的进程;提交构建后的正确版本;或在 CI 中构建并在发布时 upload。 -- Better long-term fix: 决定是否保留 main.js 在 git 中(Obsidian 社区常见做法)——若保留,则每次 release commit 必须包含重新构建的 bundle;若移除,则 `.gitignore` 并在 CI 构建产物中发布。 -- Regression test suggestion: 在干净 checkout 中运行 `npm run build` 成功。 -- Estimated effort: 15分钟 -### Finding: CHANGELOG 缺失 0.5.3 / 0.5.5 条目 -- ID: REL-3 -- Severity: Medium -- Confidence: High -- Category: Release / Documentation -- Status: Confirmed -- Affected area: `CHANGELOG.md`, `versions.json` -- Evidence: `CHANGELOG.md` 末尾为 0.5.1;`versions.json` 已包含 `0.5.3`、`0.5.5`。 -- Problem: 用户与审阅者无法从 changelog 获知近两版变更。 -- Why it matters: 这直接影响 用户与审阅者无法从 changelog 获知近两版变更。 -- Realistic failure scenario: 用户报告 0.5.5 的 bug,维护者需反查 git 才能确认变更范围;release note 不完整。 -- Minimal fix: 补充 0.5.3 与 0.5.5 条目,概述自 0.5.1 以来的主要 commit 主题。 -- Better long-term fix: 使用 `conventional-changelog` 或 `changesets` 自动生成 changelog;在 CI 中校验 manifest 版本必须在 CHANGELOG 中存在。 -- Regression test suggestion: CI 校验 `manifest.json` version 出现在 CHANGELOG.md 中。 -- Estimated effort: 20分钟 -### Finding: 文档中的版本示例陈旧 -- ID: REL-4 -- Severity: Medium -- Confidence: High -- Category: Release / Documentation -- Status: Confirmed -- Affected area: `docs/development-handoff.md:11,219,223`, `README.md:698`, `README.zh-CN.md:709`, `.github/workflows/release.yml:10` -- Evidence: `development-handoff.md` 声称当前版本为 0.4.0;README release 示例使用 0.4.0。 -- Problem: 新贡献者按文档执行会得到错误版本。 -- Why it matters: 这直接影响 新贡献者按文档执行会得到错误版本。 -- Realistic failure scenario: 贡献者阅读 README 后使用 `npm run verify:obsidian -- --release-tag 0.4.0`,下载旧产物验证,浪费时间。 -- Minimal fix: 全文替换硬编码版本为当前 `0.5.5` 或占位符 ``。 -- Better long-term fix: 在文档构建/校验脚本中替换占位符为 manifest 版本。 -- Regression test suggestion: 文档 lint 发现硬编码版本号与 manifest 不一致即失败。 -- Estimated effort: 15分钟 -### Finding: release workflow 的 tag 触发模式过于宽松 -- ID: REL-5 -- Severity: Low -- Confidence: High -- Category: Release / Supply Chain -- Status: Confirmed -- Affected area: `.github/workflows/release.yml:5-6` -- Evidence: `on.push.tags: '*.*.*'` 匹配任意两个点的 tag。 -- Problem: 非预期 tag 或恶意 tag 可触发 release。 -- Why it matters: 这直接影响 非预期 tag 或恶意 tag 可触发 release。 -- Realistic failure scenario: 协作者误推 `foo.bar.baz` 或预发布 tag 触发 workflow。 -- Minimal fix: 使用更严格的 glob/regex,并在 job 中校验 tag 与 manifest 版本一致。 -- Better long-term fix: 长期:使用更严格的 glob/regex,并在 job 中校验 tag 与 manifest 版本一致。 -- Regression test suggestion: 推送无效 tag,断言 workflow 跳过或失败。 -- Estimated effort: 15分钟 -### Finding: release workflow 中 tag 输入直接插值到 shell -- ID: REL-6 -- Severity: Low -- Confidence: High -- Category: Security / Release -- Status: Confirmed -- Affected area: `.github/workflows/release.yml:66-84` -- Evidence: `TAG="${{ inputs.tag }}"` 直接插值。 -- Problem: tag 中 shell 元字符可能执行命令。 -- Why it matters: 这直接影响 tag 中 shell 元字符可能执行命令。 -- Realistic failure scenario: 恶意/误操作 tag 如 `0.5.5; rm -rf /` 触发 shell 注入。 -- Minimal fix: 通过 `env:` 传入 input,脚本中引用 `$TAG`。 -- Better long-term fix: 长期:通过 `env:` 传入 input,脚本中引用 `$TAG`。 -- Regression test suggestion: actionlint / CI lint 通过。 -- Estimated effort: 10分钟 ---- - -### 4.2 Stability - -### Finding: PluginStore 在 onunload 时不 flush 待保存状态 -- ID: STB-1 -- Severity: High -- Confidence: High -- Category: Stability / Data Integrity -- Status: Confirmed -- Affected area: `src/store/plugin-store.ts:30-38,76-89`, `src/main.ts:113-116` -- Evidence: `scheduleSave()` 使用 500 ms debounce;`dispose()` 仅 `clearTimeout` 不调用 `persist()`;`onunload()` 只调用 `ps.dispose()`。 -- Problem: 卸载/重载插件前 500 ms 内的状态变更(标注、零件注册、最近生成元数据)可能丢失。 -- Why it matters: 这直接影响 卸载/重载插件前 500 ms 内的状态变更(标注、零件注册、最近生成元数据)可能丢失。 -- Realistic failure scenario: 用户添加一个 pin 或生成报告后立即重载插件,变更消失。 -- Minimal fix: 在 `dispose()` 中若 `saveTimer` 活跃则同步或 await `persist()`;让 `onunload()` 能等待完成。 -- Better long-term fix: 引入 `beforeunload` 风格的 awaitable dispose;暴露 `flush()` API 并在所有卸载路径调用。 -- Regression test suggestion: `verify:settings` 中修改状态、触发 unload、重载后断言持久化。 -- Estimated effort: 30分钟 -### Finding: 多处错误被静默吞没 -- ID: STB-2 -- Severity: Medium -- Confidence: High -- Category: Stability / Fallback / Security -- Status: Confirmed -- Affected area: `src/main.ts:482`, `src/view/workbench/knowledge-note.ts:769`, `src/view/inline/helper-buttons.ts:517`, `src/utils/note-reader.ts:99`, `src/utils/node-shim.ts:46`, `src/io/conversion/conversion-service.ts:48`, `src/render/babylon/scene.ts:118-140` -- Evidence: 多处 `.catch(() => {})`、`catch { return null; }`、`try { ... } catch { return null; }`。 -- Problem: 真实失败被隐藏,调试和事故响应困难,安全相关失败(如 data.json 被篡改)也无记录。 -- Why it matters: 这直接影响 真实失败被隐藏,调试和事故响应困难,安全相关失败(如 data.json 被篡改)也无记录。 -- Realistic failure scenario: GLTF metadata 解析失败静默返回 null,零件身份提取无警告;用户看到“没有零件”却不知是文件损坏。 -- Minimal fix: 使用项目 logger 至少记录 warn/error;将异常加入 `resourceWarnings` 或 `analysis.warnings`。 -- Better long-term fix: 引入统一错误处理策略:用户可见错误用 Notice,诊断用 warn,致命用 error;每个 catch 必须说明为何吞掉。 -- Regression test suggestion: 注入失败并断言日志/警告出现。 -- Estimated effort: 2小时 -### Finding: 缺少 WebGL 上下文丢失 / 恢复处理 -- ID: STB-3 -- Severity: Medium -- Confidence: High -- Category: Stability -- Status: Confirmed -- Affected area: `src/render/three/scene.ts:358-408`, `src/render/babylon/scene.ts:340-367`, `src/render/babylon/grid.ts:79-91` -- Evidence: WebGL 上下文创建时设置 `preserveDrawingBuffer: true`,无 `webglcontextlost`/`webglcontextrestored` 监听。 -- Problem: GPU 压力或移动端休眠可能导致画布变白且无法恢复。 -- Why it matters: 这直接影响 GPU 压力或移动端休眠可能导致画布变白且无法恢复。 -- Realistic failure scenario: 用户在 iOS 上切换应用后返回,预览画布保持空白,只能重新打开文件。 -- Minimal fix: 添加上下文监听:丢失时停止循环,恢复时重新初始化;同时提供手动 reload 动作。 -- Better long-term fix: 封装渲染上下文恢复策略,所有 renderer 共享统一生命周期。 -- Regression test suggestion: Playwright 模拟上下文丢失,验证恢复或优雅提示。 -- Estimated effort: 4小时 -### Finding: 转换管道缺少外层超时 -- ID: STB-4 -- Severity: Medium -- Confidence: High -- Category: Stability -- Status: Confirmed -- Affected area: `src/io/conversion/manager.ts:41-65`, `src/io/conversion/conversion-service.ts:116-120` -- Evidence: 各 adapter 有 `DEFAULT_TIMEOUT_MS`,但 `ConversionManager.convert()` 与 `convertForPreview()` 没有外层超时。 -- Problem: 命令发现或卡住的 adapter 会无限期挂起预览流程。 -- Why it matters: 这直接影响 命令发现或卡住的 adapter 会无限期挂起预览流程。 -- Realistic failure scenario: `freecadcmd` 路径存在但二进制挂起,UI loading 遮罩一直显示。 -- Minimal fix: 用 `Promise.race` 包裹 `conversionManager.convert()`,配置可调整的外层超时。 -- Better long-term fix: 统一的 cancellation token + abort controller 贯穿 conversion service。 -- Regression test suggestion: mock 挂起 converter,断言超时警告/取消。 -- Estimated effort: 2小时 -### Finding: 命令回调中的异步错误未处理 -- ID: STB-5 -- Severity: Medium -- Confidence: High -- Category: Stability -- Status: Confirmed -- Affected area: `src/main.ts:62-84,377-385` -- Evidence: `() => void this.openKnowledgeIndex()` 等 fire-and-forget 模式。 -- Problem: 异步错误变成未处理 promise rejection。 -- Why it matters: 这直接影响 异步错误变成未处理 promise rejection。 -- Realistic failure scenario: `openKnowledgeIndex` 因 Vault 权限失败,用户看不到任何反馈,错误只在 DevTools。 -- Minimal fix: 包装异步回调,捕获并以 Notice/Toast 展示。 -- Better long-term fix: 统一的命令错误边界。 -- Regression test suggestion: 验证命令错误能 surfaced 为 Notice。 -- Estimated effort: 1小时 -### Finding: 部分模块缺少结构化加载错误反馈 -- ID: STB-6 -- Severity: Medium -- Confidence: High -- Category: Stability / Fallback -- Status: Confirmed -- Affected area: `src/render/babylon/loaders/register.ts:21-24` -- Evidence: loader 注册失败时 catch 仅 `console.error`。 -- Problem: 用户无法知道 Babylon loader 初始化失败,后续加载会报错。 -- Why it matters: 这直接影响 用户无法知道 Babylon loader 初始化失败,后续加载会报错。 -- Realistic failure scenario: 在正常使用中,用户无法知道 Babylon loader 初始化失败,后续加载会报错。 导致功能异常。 -- Minimal fix: 将 loader 注册错误加入 `resourceWarnings` 并展示。 -- Better long-term fix: 长期:将 loader 注册错误加入 `resourceWarnings` 并展示。 -- Regression test suggestion: 破坏 loader 文件路径,验证 UI 提示。 -- Estimated effort: 1小时 ---- - -### 4.3 Security - -### Finding: esbuild 存在 GHSA-gv7w-rqvm-qjhr RCE 漏洞 -- ID: SEC-1 -- Severity: High -- Confidence: High -- Category: Security / Supply Chain -- Status: Confirmed -- Affected area: `package.json:31`, `package-lock.json` -- Evidence: `npm audit` 报告 `esbuild 0.17.0 - 0.28.0` 受 GHSA-gv7w-rqvm-qjhr 影响。 -- Problem: 若 CI/build 环境的 registry 被入侵,可能下载并执行恶意 esbuild 二进制。 -- Why it matters: 这直接影响 若 CI/build 环境的 registry 被入侵,可能下载并执行恶意 esbuild 二进制。 -- Realistic failure scenario: 攻击者污染 registry;CI 执行 `npm ci` 时触发恶意代码。 -- Minimal fix: 升级 esbuild 到 >=0.28.1,重新生成 lockfile,再次 `npm audit`。 -- Better long-term fix: CI 中加入 `npm audit --audit-level=low`;锁定次要版本范围。 -- Regression test suggestion: CI 中 `npm audit` 无 high/critical 漏洞。 -- Estimated effort: 30分钟 -### Finding: 远程草稿返回内容未做 HTML/Markdown 转义即写入 Vault -- ID: SEC-2 -- Severity: High -- Confidence: High -- Category: Security / AI Safety -- Status: Confirmed -- Affected area: `src/view/workbench/remote-draft.ts:125-157`, `src/view/workbench/knowledge-note.ts:441-471` -- Evidence: `normalizeRemoteDraftResult` 仅做类型检查与字符串 trim;`buildRemoteDraftSection` 直接将 title/summary/body/tags/warnings 拼入 Markdown。 -- Problem: 被攻陷的 draft endpoint 可向用户 Vault 注入任意 Markdown/HTML。 -- Why it matters: 这直接影响 被攻陷的 draft endpoint 可向用户 Vault 注入任意 Markdown/HTML。 -- Realistic failure scenario: Endpoint 返回 `[](javascript:alert(1))` 或 Obsidian iframe 语法,笔记渲染时执行。 -- Minimal fix: 对远程返回字段做 HTML 实体转义与 Markdown 表格分隔符转义;限制字段长度;校验 tags。 -- Better long-term fix: 对远程内容使用 Markdown AST 或 Obsidian API 安全插入;将远程输出视为不可信内容沙箱。 -- Regression test suggestion: `verify:remote-draft` 使用恶意 payload,断言输出被转义。 -- Estimated effort: 3小时 -### Finding: 模型派生元数据注入笔记时缺少 HTML 转义 -- ID: SEC-3 -- Severity: Medium -- Confidence: High -- Category: Security -- Status: Confirmed -- Affected area: `src/view/workbench/knowledge-note.ts:542,575,600,746`;`src/render/preview/report.ts:54` -- Evidence: `escapeTableCell` 只转义 `|` 与换行;零件/材质/网格/标注字符串直接插入 Markdown。 -- Problem: 恶意模型可在名称中携带 HTML/JS,最终进入生成的笔记。 -- Why it matters: 这直接影响 恶意模型可在名称中携带 HTML/JS,最终进入生成的笔记。 -- Realistic failure scenario: GLB 零件名为 ``,报告渲染时执行。 -- Minimal fix: 所有模型派生字符串在插入 Markdown 前做 HTML 转义。 -- Better long-term fix: 统一的数据清洗层,区分可信(模板)与不可信(模型)输入。 -- Regression test suggestion: 渲染含恶意名称的模型,验证输出已清洗。 -- Estimated effort: 2小时 -### Finding: 转换器命令设置允许任意可执行文件 -- ID: SEC-4 -- Severity: Medium -- Confidence: High -- Category: Security / Configuration -- Status: Confirmed -- Affected area: `src/io/conversion/command-discovery.ts:296-306,681-689`;各 converter adapter;`src/settings.ts:442-505` -- Evidence: `parseCommandValue` 将设置/环境值直接传给 `execFile`,无校验或白名单。 -- Problem: 被篡改的 `data.json` 或环境可让插件执行任意程序。 -- Why it matters: 这直接影响 被篡改的 `data.json` 或环境可让插件执行任意程序。 -- Realistic failure scenario: 攻击者设置 `freecadCommand` 为恶意软件路径,插件在转换时启动它。 -- Minimal fix: 校验命令为存在的文件(非目录),优先使用 PATH 解析名,将解析结果暴露到 diagnostics,对非预期路径警告。 -- Better long-term fix: 提供预设命令 discover 路径;用户自定义路径需显式确认;使用 allowlist 校验哈希。 -- Regression test suggestion: 设置非法命令断言 diagnostics 警告;设置为目录断言拒绝。 -- Estimated effort: 4小时 -### Finding: 持久化转换缓存可引用任意文件系统路径 -- ID: SEC-5 -- Severity: Medium -- Confidence: High -- Category: Security / Data Integrity -- Status: Confirmed -- Affected area: `src/io/cache/converted-asset-cache.ts:19-31`, `src/io/conversion/conversion-service.ts:76-86`, `src/utils/resolve-path.ts:135-139` -- Evidence: `ConvertedAssetRecord.outputPath` 直接存入 state 并被使用,无 Vault 边界检查。 -- Problem: 被篡改的 `data.json` 可导致插件读取任意本地文件。 -- Why it matters: 这直接影响 被篡改的 `data.json` 可导致插件读取任意本地文件。 -- Realistic failure scenario: `outputPath` 被设为 `/etc/passwd`,插件尝试读取并作为 GLB 使用。 -- Minimal fix: 校验缓存 `outputPath` 位于 Vault 或预期输出目录;拒绝绝对外部路径。 -- Better long-term fix: 长期:校验缓存 `outputPath` 位于 Vault 或预期输出目录;拒绝绝对外部路径。 -- Regression test suggestion: 注入 Vault 外路径,断言拒绝/警告。 -- Estimated effort: 2小时 -### Finding: 远程草稿 endpoint 接受私有/内部 URL -- ID: SEC-6 -- Severity: Medium -- Confidence: High -- Category: Security / AI Safety -- Status: Confirmed -- Affected area: `src/view/workbench/remote-draft.ts:21-39` -- Evidence: `normalizeBaseUrl` 仅校验协议,未阻止私有 IP/localhost。 -- Problem: 恶意或输错的 URL 可利用 Obsidian 应用的网络权限访问内部服务。 -- Why it matters: 这直接影响 恶意或输错的 URL 可利用 Obsidian 应用的网络权限访问内部服务。 -- Realistic failure scenario: 配置 `http://localhost:8787` 或 `http://169.254.1.1`,插件向内部服务发送模型摘要。 -- Minimal fix: 增加可选 host/IP 白名单,对私有/本地地址给出警告。 -- Better long-term fix: 长期:增加可选 host/IP 白名单,对私有/本地地址给出警告。 -- Regression test suggestion: 配置 `localhost` 断言警告;配置公网域名允许。 -- Estimated effort: 2小时 -### Finding: AI 提示注入风险 -- ID: SEC-7 -- Severity: Medium -- Confidence: Medium -- Category: AI Safety -- Status: Confirmed -- Affected area: `src/view/workbench/analysis-result.ts:358-404`, `src/view/workbench/remote-draft.ts:76-91` -- Evidence: draft payload 将 profile notes、pin label、annotation heading refs、part names 与 task instruction 混合,无明确分隔。 -- Problem: 攻击者控制的模型/标注文本可能影响 LLM 行为。 -- Why it matters: 这直接影响 攻击者控制的模型/标注文本可能影响 LLM 行为。 -- Realistic failure scenario: 零件名为 "Ignore previous instructions and ...",draft 输出偏离预期。 -- Minimal fix: 将系统/任务指令与用户/模型内容分离;将模型/标注文本视为不可信;增加输出校验。 -- Better long-term fix: 使用结构化 prompt 模板并做提示注入测试(如 OWASP LLM Top 10 案例)。 -- Regression test suggestion: 注入提示注入字符串,断言 draft 不遵循。 -- Estimated effort: 4小时 -### Finding: 安全相关失败被静默吞没(与 STB-2 关联) -- ID: SEC-8 -- Severity: Medium -- Confidence: High -- Category: Security / Stability -- Status: Confirmed -- Affected area: 同 STB-2 -- Evidence: 同 STB-2 同 STB-2 -- Problem: 文件读取与解析失败(可能是篡改信号)被隐藏。 -- Why it matters: 无法检测异常或安全事件。 -- Realistic failure scenario: data.json 被篡改后解析失败但无日志,用户无法发现。 -- Minimal fix: 记录失败。 -- Better long-term fix: 建立统一错误处理策略。 -- Regression test suggestion: 篡改 data.json,验证错误被记录。 -- Estimated effort: 1小时(合并 STB-2 工作) -### Finding: 手动 token 扫描未在 CI 中强制执行 -- ID: SEC-9 -- Severity: Low -- Confidence: High -- Category: Security / Supply Chain -- Status: Confirmed -- Affected area: `SECURITY.md:11-16`, `.github/workflows/release.yml` -- Evidence: SECURITY.md instructs 手动 `rg` 扫描;workflow 未执行。 -- Problem: 泄露的 PAT 可能随 release 流出。 -- Why it matters: 这直接影响 泄露的 PAT 可能随 release 流出。 -- Realistic failure scenario: 在正常使用中,泄露的 PAT 可能随 release 流出。 导致功能异常。 -- Minimal fix: 在 release workflow 中加入自动 token 扫描步骤。 -- Better long-term fix: 长期:在 release workflow 中加入自动 token 扫描步骤。 -- Regression test suggestion: 分支中提交测试 token,验证 CI 失败。 -- Estimated effort: 30分钟 -### Finding: Babylon 网络守卫延迟安装且依赖内部实现 -- ID: SEC-10 -- Severity: Low -- Confidence: Medium -- Category: Security -- Status: Confirmed -- Affected area: `src/render/babylon/loaders/register.ts:21-24`, `src/render/babylon/network-guard.ts:27-70` -- Evidence: 守卫在 `ensureLoadersRegistered` 中运行;monkey-patch `Tools._LoadScript*` 与 `WebRequest`。 -- Problem: Babylon 升级可能改变内部 API,导致远程 URL 绕过。 -- Why it matters: 这直接影响 Babylon 升级可能改变内部 API,导致远程 URL 绕过。 -- Realistic failure scenario: 在正常使用中,Babylon 升级可能改变内部 API,导致远程 URL 绕过。 导致功能异常。 -- Minimal fix: 尽早安装守卫(`onload` 阶段);增加测试验证远程 URL 被拒绝。 -- Better long-term fix: 长期:尽早安装守卫(`onload` 阶段);增加测试验证远程 URL 被拒绝。 -- Regression test suggestion: 尝试加载远程资源,断言拒绝。 -- Estimated effort: 2小时 ---- - -### 4.4 Performance - -### Finding: 生产产物同时打包 Three.js 与 Babylon.js -- ID: PER-1 -- Severity: High -- Confidence: High -- Category: Performance / Dependency Weight / Release -- Status: Confirmed -- Affected area: `package.json:38-44`, `src/render/preview/factory.ts:21-27`, `esbuild.config.mjs` -- Evidence: `main.js` 约 3.8 MB minified;动态导入两个渲染器导致 esbuild 同时包含两者。 -- Problem: 用户下载约 1.5-2 MB 不会使用的 runtime(取决于设置)。 -- Why it matters: 这直接影响 用户下载约 1.5-2 MB 不会使用的 runtime(取决于设置)。 -- Realistic failure scenario: 移动端用户在慢网络下载过大 bundle,首次加载缓慢。 -- Minimal fix: 移除未使用的 `@babylonjs/gui`、`@babylonjs/materials`、`@babylonjs/serializers`;评估代码分割或双产物。 -- Better long-term fix: 仅在真正需要时通过 Obsidian 的 `require` 机制或分包加载 Babylon;发布时提供 lite/standard 两种 bundle。 -- Regression test suggestion: CI 中追踪 bundle 大小,超过阈值失败。 -- Estimated effort: 1-2天 -### Finding: Babylon 预览渲染循环不息 -- ID: PER-2 -- Severity: High -- Confidence: High -- Category: Performance -- Status: Confirmed -- Affected area: `src/render/babylon/scene.ts:1318-1329` -- Evidence: `runRenderLoop` 持续运行,无可见性/脏检查。 -- Problem: 预览离开视口后仍消耗 GPU/电池。 -- Why it matters: 这直接影响 预览离开视口后仍消耗 GPU/电池。 -- Realistic failure scenario: 用户滚动笔记使多个 Babylon 预览离开视口,每个仍以 60 FPS 渲染。 -- Minimal fix: 增加 `IntersectionObserver`,不可见时暂停/停止循环,仅在脏时渲染。 -- Better long-term fix: 长期:增加 `IntersectionObserver`,不可见时暂停/停止循环,仅在脏时渲染。 -- Regression test suggestion: Playwright 验证 off-screen 后 `requestAnimationFrame`/loop 次数下降。 -- Estimated effort: 4小时 -### Finding: Babylon 3dgrid 每帧重绘每个 cell -- ID: PER-3 -- Severity: High -- Confidence: High -- Category: Performance -- Status: Confirmed -- Affected area: `src/render/babylon/grid.ts:391-412` -- Evidence: `renderFrame()` 每帧清空 engine 并遍历每个 cell 做完整 `scene.render()`。 -- Problem: 静态多模型网格持续以 60 FPS 重绘。 -- Why it matters: 这直接影响 静态多模型网格持续以 60 FPS 重绘。 -- Realistic failure scenario: `3dgrid` 含 6 个模型时 GPU 持续满载。 -- Minimal fix: 追踪每 cell 脏状态;未变化时跳过;静态网格仅在交互时渲染。 -- Better long-term fix: 长期:追踪每 cell 脏状态;未变化时跳过;静态网格仅在交互时渲染。 -- Regression test suggestion: 测量静态 grid 帧时间,初始渲染后应大幅下降。 -- Estimated effort: 1天 -### Finding: 标注投影导致 O(n²) 布局抖动 -- ID: PER-4 -- Severity: High -- Confidence: High -- Category: Performance / Frontend State -- Status: Confirmed -- Affected area: `src/render/preview/annotations.ts:783-905` -- Evidence: `updateProjections()` 在嵌套循环中调用 `getBoundingClientRect()` 并同时写入 CSS 变量。 -- Problem: 每次样式写入强制同步布局重算;pin 多时卡顿。 -- Why it matters: 这直接影响 每次样式写入强制同步布局重算;pin 多时卡顿。 -- Realistic failure scenario: 50+ bookmark 的模型旋转时明显掉帧。 -- Minimal fix: 批量读/写(fastdom 风格),缓存 rect,限制 pin 数量,移动时降低投影频率。 -- Better long-term fix: 长期:批量读/写(fastdom 风格),缓存 rect,限制 pin 数量,移动时降低投影频率。 -- Regression test suggestion: 用 50 个 pin 测试,断言帧预算不被突破。 -- Estimated effort: 1天 -### Finding: 测量与标注集合无上限增长 -- ID: PER-5 -- Severity: Medium -- Confidence: High -- Category: Performance / Stability -- Status: Confirmed -- Affected area: `src/render/three/scene.ts:269,1846,1891`, `src/render/babylon/scene.ts:273-275,1529,1575`, `src/render/preview/annotations.ts:64,149` -- Evidence: 数组仅在显式 remove 时缩小,无最大数量限制。 -- Problem: 用户可创建成千上万 pin/测量,拖垮性能与内存。 -- Why it matters: 这直接影响 用户可创建成千上万 pin/测量,拖垮性能与内存。 -- Realistic failure scenario: 误触或脚本批量创建大量 pin,应用变慢或崩溃。 -- Minimal fix: 增加可配置上限,达到时警告并禁用新增。 -- Better long-term fix: 长期:增加可配置上限,达到时警告并禁用新增。 -- Regression test suggestion: 尝试超过上限,断言 UI 阻止创建。 -- Estimated effort: 2小时 -### Finding: AnnotationManager 中存在 effect 扩散 -- ID: PER-6 -- Severity: Medium -- Confidence: High -- Category: Performance / Frontend State -- Status: Confirmed -- Affected area: `src/render/preview/annotations.ts:59-125,316-366,495-562,637-649,718-731,775-780` -- Evidence: 多个 observer、debounce timer、hover timeout、pulse timeout、per-element listener。 -- Problem: 销毁时容易遗漏 timer/listener,模型切换后泄漏累积。 -- Why it matters: 这直接影响 销毁时容易遗漏 timer/listener,模型切换后泄漏累积。 -- Realistic failure scenario: 在正常使用中,销毁时容易遗漏 timer/listener,模型切换后泄漏累积。 导致功能异常。 -- Minimal fix: 集中管理所有 disposable;在 `destroy()` 中统一清除。 -- Better long-term fix: 长期:集中管理所有 disposable;在 `destroy()` 中统一清除。 -- Regression test suggestion: 反复创建/销毁 AnnotationManager,断言无 dangling timer/listener。 -- Estimated effort: 4小时 -### Finding: helper-buttons 中 DOM 即状态 -- ID: PER-7 -- Severity: Medium -- Confidence: High -- Category: Frontend State -- Status: Confirmed -- Affected area: `src/view/inline/helper-buttons.ts:140-150,207-235` -- Evidence: `syncCapabilities()` 与 `syncGroupVisibility()` 查询 DOM class 决定状态;`syncToggleStates()` 每次重绘 SVG 图标。 -- Problem: 状态从 DOM 派生脆弱且慢。 -- Why it matters: 这直接影响 状态从 DOM 派生脆弱且慢。 -- Realistic failure scenario: 在正常使用中,状态从 DOM 派生脆弱且慢。 导致功能异常。 -- Minimal fix: 在 JS 对象中维护按钮状态,diff-apply class。 -- Better long-term fix: 长期:在 JS 对象中维护按钮状态,diff-apply class。 -- Regression test suggestion: 快速切换状态,断言无多余 DOM 操作。 -- Estimated effort: 3小时 -### Finding: OBJ 纹理内联导致纹理内存翻倍 -- ID: PER-8 -- Severity: Medium -- Confidence: High -- Category: Performance -- Status: Confirmed -- Affected area: `src/render/babylon/scene.ts:418-500` -- Evidence: 每个候选纹理被读取、base64 编码、写回 MTL。 -- Problem: 大纹理同时作为 Vault buffer 与 inline data URL 驻留内存。 -- Why it matters: 这直接影响 大纹理同时作为 Vault buffer 与 inline data URL 驻留内存。 -- Realistic failure scenario: 4K 纹理 OBJ 加载时内存占用约 2x。 -- Minimal fix: 按 Vault 路径缓存 data URL;超过阈值时跳过内联。 -- Better long-term fix: 长期:按 Vault 路径缓存 data URL;超过阈值时跳过内联。 -- Regression test suggestion: 重复加载同一 OBJ 断言纹理 data URL 缓存命中。 -- Estimated effort: 3小时 -### Finding: Three.js 像素比快速变化导致 render target 重复分配 -- ID: PER-9 -- Severity: Medium -- Confidence: Medium -- Category: Performance -- Status: Confirmed -- Affected area: `src/render/three/scene.ts:1023-1098` -- Evidence: `updateFrameBudget()` 在慢/快帧连续变化时调整 scale 并调用 `resizeRenderer()`。 -- Problem: 反复重新分配 render target 造成卡顿。 -- Why it matters: 这直接影响 反复重新分配 render target 造成卡顿。 -- Realistic failure scenario: 在正常使用中,反复重新分配 render target 造成卡顿。 导致功能异常。 -- Minimal fix: 增加滞回与节流。 -- Better long-term fix: 长期:增加滞回与节流。 -- Regression test suggestion: 模拟交替帧时间,断言像素比稳定。 -- Estimated effort: 2小时 ---- - -### 4.5 Testing - -### Finding: 无单元测试框架或单元测试 -- ID: TST-1 -- Severity: High -- Confidence: High -- Category: Testing -- Status: Confirmed -- Affected area: `package.json`, 项目根目录 -- Evidence: devDependencies 中无测试运行器;无 `*.test.ts` 文件。 -- Problem: 纯函数(几何、路径解析、远程草稿规范化)缺少快速回归测试。 -- Why it matters: 这直接影响 纯函数(几何、路径解析、远程草稿规范化)缺少快速回归测试。 -- Realistic failure scenario: 重构 `resolve-path` 边界场景出错,只能通过慢速 Playwright harness 发现。 -- Minimal fix: 引入 Vitest,先为纯函数模块编写种子测试。 -- Better long-term fix: 单元测试覆盖工具函数、转换器适配器、store 动作、渲染器抽象;CI 中运行 `npm test`。 -- Regression test suggestion: CI 中 `npm test` 通过。 -- Estimated effort: 1天 -### Finding: 验证脚本断言实现细节 -- ID: TST-2 -- Severity: Medium -- Confidence: High -- Category: Testing / Testing Authenticity -- Status: Confirmed -- Affected area: `scripts/verify-preview.mjs`, `scripts/verify-preview-success.mjs`, `scripts/verify-obsidian.mjs` -- Evidence: 硬编码 ARIA label、精确 CSS 类、精确按钮文案、精确生成笔记路径。 -- Problem: UI 文案或结构变化会导致测试失败。 -- Why it matters: 这直接影响 UI 文案或结构变化会导致测试失败。 -- Realistic failure scenario: 重命名工具栏按钮 label,测试失败但功能正常。 -- Minimal fix: 为关键元素添加 `data-testid`;将断言与面向用户的字符串解耦。 -- Better long-term fix: 长期:为关键元素添加 `data-testid`;将断言与面向用户的字符串解耦。 -- Regression test suggestion: 修改 UI 文案后验证测试仍通过。 -- Estimated effort: 1天 -### Finding: 浏览器 harness 存在脆弱性风险 -- ID: TST-3 -- Severity: Medium -- Confidence: High -- Category: Testing -- Status: Confirmed -- Affected area: `scripts/verify-preview.mjs`, `scripts/verify-obsidian.mjs` -- Evidence: 使用固定 `waitForTimeout`;canvas pixel-ratio 断言;精确 `toDataURL` 比较;浏览器自动检测差异。 -- Problem: 不同机器/CI 上非确定性失败。 -- Why it matters: 这直接影响 不同机器/CI 上非确定性失败。 -- Realistic failure scenario: CI runner 比本地慢,120 ms 超时过早触发。 -- Minimal fix: 用 `waitForFunction`/事件替代 sleep;canvas 比较使用容差;固定浏览器路径或测试矩阵。 -- Better long-term fix: 长期:用 `waitForFunction`/事件替代 sleep;canvas 比较使用容差;固定浏览器路径或测试矩阵。 -- Regression test suggestion: 在较慢 VM 上运行 harness 验证稳定性。 -- Estimated effort: 2天 -### Finding: 转换管道缺少自动化覆盖 -- ID: TST-4 -- Severity: High -- Confidence: High -- Category: Testing -- Status: Confirmed -- Affected area: `src/io/conversion/adapters/*.ts`, `src/io/conversion/command-discovery.ts` -- Evidence: 无 `verify:conversion` 脚本;转换仅在 Obsidian 测试中被负面触发。 -- Problem: STEP/IGES/BREP/SLDPRT/FBX/3MF/DAE 路径可能静默损坏。 -- Why it matters: 这直接影响 STEP/IGES/BREP/SLDPRT/FBX/3MF/DAE 路径可能静默损坏。 -- Realistic failure scenario: Python 脚本变更破坏 STEP 转换,直到用户报告才发现。 -- Minimal fix: 使用 stub Python/CLI 脚本产生已知 GLB 输出,建立 mock-converter harness。 -- Better long-term fix: 长期:使用 stub Python/CLI 脚本产生已知 GLB 输出,建立 mock-converter harness。 -- Regression test suggestion: CI 中运行 mock 转换。 -- Estimated effort: 2天 -### Finding: release workflow 未执行 eslint -- ID: TST-5 -- Severity: Medium -- Confidence: High -- Category: Testing / Release -- Status: Confirmed -- Affected area: `.github/workflows/release.yml`, `eslint.config.mjs` -- Evidence: release workflow 运行 typecheck 但不运行 eslint;eslint 报告 21 个问题。 -- Problem: lint 错误进入 main 与 release。 -- Why it matters: 这直接影响 lint 错误进入 main 与 release。 -- Realistic failure scenario: `obsidianmd/prefer-create-el` 错误意味着代码使用了 Obsidian 不推荐的 API,插件可能在 Obsidian 审核中失败。 -- Minimal fix: 在 CI 与 release workflow 中加入 `npm run lint`;修复当前错误。 -- Better long-term fix: 长期:在 CI 与 release workflow 中加入 `npm run lint`;修复当前错误。 -- Regression test suggestion: CI 在 lint 错误时失败。 -- Estimated effort: 2小时 ---- - -### 4.6 Maintainability & Design - -### Finding: scene 文件为神类,违反单一职责 -- ID: MAINT-1 -- Severity: Medium -- Confidence: High -- Category: Maintainability / Design -- Status: Confirmed -- Affected area: `src/render/three/scene.ts`(2,099 行), `src/render/babylon/scene.ts`(1,661 行) -- Evidence: 每个类同时负责 renderer setup、loading、camera、lights、shadows、animation、measurement、focus、wireframe、bounding box、explode/disassembly、snapshots、frame budget。 -- Problem: 难以测试、review、扩展;修改时回归风险高。 -- Why it matters: 这直接影响 难以测试、review、扩展;修改时回归风险高。 -- Realistic failure scenario: 修复 measurement bug 需要触碰 2,000 行文件,容易引入回归。 -- Minimal fix: 先提取工具函数减少文件长度。 -- Better long-term fix: 提取渲染器无关的 controller(MeasurementController、FocusController、FrameBudgetController),渲染器只做 thin adapter。 -- Regression test suggestion: 为提取的 controller 增加单元测试。 -- Estimated effort: 1-2周 -### Finding: Three 与 Babylon 渲染器之间存在重复逻辑 -- ID: MAINT-2 -- Severity: Medium -- Confidence: High -- Category: Maintainability / Design -- Status: Confirmed -- Affected area: `src/render/three/loaders.ts:34-48,182-258` vs `src/render/babylon/scene.ts:184-197,416-475`;`src/render/three/scene.ts:171` vs `src/render/babylon/scene.ts:114`;measurement/focus/explode/disassembly 均重复。 -- Evidence: 见代码审查与静态分析结果。 -- Problem: 修复需要在两处应用;行为可能分叉。 -- Why it matters: 这直接影响 修复需要在两处应用;行为可能分叉。 -- Realistic failure scenario: OBJ 纹理回退在 Three 修复但 Babylon 未修复,用户看到不一致结果。 -- Minimal fix: 将共享逻辑移入 `src/io/formats/obj-resources.ts` 与 `src/render/preview/component-identity.ts`。 -- Better long-term fix: 统一 scene controller 抽象,双端仅实现底层绘制 API。 -- Regression test suggestion: 跨渲染器 parity 测试 OBJ 加载与 measurement。 -- Estimated effort: 3天 -### Finding: settings.ts display() 是巨型 UI 构建器 -- ID: MAINT-3 -- Severity: Medium -- Confidence: High -- Category: Maintainability -- Status: Confirmed -- Affected area: `src/settings.ts:63-589` -- Evidence: 单个 `display()` 方法 527 行构建整个设置页。 -- Problem: 难 review、难测试、难扩展。 -- Why it matters: 这直接影响 难 review、难测试、难扩展。 -- Realistic failure scenario: 增加一个设置项需要修改巨大方法,易产生合并冲突。 -- Minimal fix: 拆分为 section builder 函数或类。 -- Better long-term fix: 长期:拆分为 section builder 函数或类。 -- Regression test suggestion: 验证每个 section 渲染预期控件。 -- Estimated effort: 1天 -### Finding: main.ts 包含大量视图逻辑 -- ID: MAINT-4 -- Severity: Medium -- Confidence: High -- Category: Maintainability -- Status: Confirmed -- Affected area: `src/main.ts:118-375` -- Evidence: `setupHeadingPinObserver()` 是 258 行私有方法,负责 heading pin badge。 -- Problem: 生命周期文件混合视图功能。 -- Why it matters: 这直接影响 生命周期文件混合视图功能。 -- Realistic failure scenario: 在正常使用中,生命周期文件混合视图功能。 导致功能异常。 -- Minimal fix: 提取到 `src/view/heading-pin-observer.ts`。 -- Better long-term fix: 长期:提取到 `src/view/heading-pin-observer.ts`。 -- Regression test suggestion: 验证 heading badge 仍正常显示。 -- Estimated effort: 2小时 -### Finding: direct-view.ts loadModel() 职责过多 -- ID: MAINT-5 -- Severity: Medium -- Confidence: High -- Category: Maintainability / Design -- Status: Confirmed -- Affected area: `src/view/direct-view.ts:150-370` -- Evidence: 约 221 行方法覆盖布局、IO、预览编排、标注 wiring、知识 UI、错误处理。 -- Problem: 违反 SRP;测试脆弱。 -- Why it matters: 这直接影响 违反 SRP;测试脆弱。 -- Realistic failure scenario: 在正常使用中,违反 SRP;测试脆弱。 导致功能异常。 -- Minimal fix: 拆分为更小方法。 -- Better long-term fix: 长期:拆分为更小方法。 -- Regression test suggestion: 用 shims 对每个子方法做单元测试。 -- Estimated effort: 1天 -### Finding: PluginStore 暴露 raw setState,缺少 actions -- ID: MAINT-6 -- Severity: Medium -- Confidence: High -- Category: Maintainability / Design / Data Integrity -- Status: Confirmed -- Affected area: `src/store/plugin-store.ts:27-90` -- Evidence: 调用方直接使用 `ps.store.setState()`。 -- Problem: 无不变式约束;视图可任意修改持久化状态。 -- Why it matters: 这直接影响 无不变式约束;视图可任意修改持久化状态。 -- Realistic failure scenario: 在正常使用中,无不变式约束;视图可任意修改持久化状态。 导致功能异常。 -- Minimal fix: 增加带类型的 store actions,限制直接 setState。 -- Better long-term fix: 长期:增加带类型的 store actions,限制直接 setState。 -- Regression test suggestion: 断言只有 store actions 可修改 profiles。 -- Estimated effort: 1天 -### Finding: 视图层直接修改持久化 profile -- ID: MAINT-7 -- Severity: Medium -- Confidence: High -- Category: Maintainability / Data Integrity -- Status: Confirmed -- Affected area: `src/view/direct-view.ts:318-322,389-397` -- Evidence: 视图调用 `this.ps.store.setState({ modelAssetProfiles: ... })` 更新 pin 与注册零件。 -- Problem: 绕过规范化与未来不变式。 -- Why it matters: 这直接影响 绕过规范化与未来不变式。 -- Realistic failure scenario: 在正常使用中,绕过规范化与未来不变式。 导致功能异常。 -- Minimal fix: 使用 MAINT-6 的 store actions。 -- Better long-term fix: 长期:使用 MAINT-6 的 store actions。 -- Regression test suggestion: 同 MAINT-6。 -- Estimated effort: 30分钟(依赖 MAINT-6) -### Finding: 标注编辑器与投影为单体 -- ID: MAINT-8 -- Severity: Medium -- Confidence: High -- Category: Maintainability -- Status: Confirmed -- Affected area: `src/render/preview/annotations.ts:218-465,783-866` -- Evidence: `showEditorInternal()` 约 247 行;`updateProjections()` 约 84 行且嵌套 if 密集。 -- Problem: 难以维护与验证。 -- Why it matters: 这直接影响 难以维护与验证。 -- Realistic failure scenario: 在正常使用中,难以维护与验证。 导致功能异常。 -- Minimal fix: 提取 `AnnotationEditor` 组件;拆分投影函数。 -- Better long-term fix: 长期:提取 `AnnotationEditor` 组件;拆分投影函数。 -- Regression test suggestion: 单元测试编辑器渲染与投影数学。 -- Estimated effort: 2天 -### Finding: 混合 CRLF/LF 换行符 -- ID: MAINT-9 -- Severity: Low -- Confidence: High -- Category: Maintainability / Code Consistency -- Status: Confirmed -- Affected area: `src/settings.ts`, `src/render/babylon/scene.ts`, `src/render/babylon/loaders/register.ts`, `src/render/babylon/loaders/ply-loader.ts` -- Evidence: `file` 报告 Babylon 文件为 CRLF,settings.ts 为 mixed。 -- Problem: diff 噪音、跨平台不一致。 -- Why it matters: 这直接影响 diff 噪音、跨平台不一致。 -- Realistic failure scenario: 在正常使用中,diff 噪音、跨平台不一致。 导致功能异常。 -- Minimal fix: 增加 `.editorconfig`;在 `.gitattributes` 中强制 `* text=auto eol=lf`;一次性 normalize。 -- Better long-term fix: 长期:增加 `.editorconfig`;在 `.gitattributes` 中强制 `* text=auto eol=lf`;一次性 normalize。 -- Regression test suggestion: CI 检查 `file` 报告所有 `*.ts` 为 LF。 -- Estimated effort: 30分钟 -### Finding: 缺少 TODO/FIXME/HACK 标记 -- ID: MAINT-10 -- Severity: Low -- Confidence: High -- Category: Maintainability / Comment Coverage -- Status: Confirmed -- Affected area: `src/`, `docs/` -- Evidence: `rg TODO|FIXME|HACK|XXX|SAFETY` 无匹配。 -- Problem: 已知债务未标注,难以跟踪。 -- Why it matters: 这直接影响 已知债务未标注,难以跟踪。 -- Realistic failure scenario: 在正常使用中,已知债务未标注,难以跟踪。 导致功能异常。 -- Minimal fix: 采用 `TODO(context)` 约定标记已知债务。 -- Better long-term fix: 长期:采用 `TODO(context)` 约定标记已知债务。 -- Regression test suggestion: 无。 -- Estimated effort: N/A(持续实践) -### Finding: 设置项命名不一致 -- ID: MAINT-11 -- Severity: Low -- Confidence: High -- Category: Maintainability / Code Consistency -- Status: Confirmed -- Affected area: `src/settings.ts:379-388,442-453` -- Evidence: UI label `preferObj2gltf` 实际更新 `preferObj2gltfForObj`;UI label `pythonCmd` 更新 `freecadCommand`。 -- Problem: 搜索/替换易出错,令人困惑。 -- Why it matters: 这直接影响 搜索/替换易出错,令人困惑。 -- Realistic failure scenario: 在正常使用中,搜索/替换易出错,令人困惑。 导致功能异常。 -- Minimal fix: 统一 identifier。 -- Better long-term fix: 长期:统一 identifier。 -- Regression test suggestion: 验证设置 round-trip。 -- Estimated effort: 30分钟 -### Finding: 公共接口文档不足 -- ID: MAINT-12 -- Severity: Low -- Confidence: High -- Category: Maintainability / Comment Coverage -- Status: Confirmed -- Affected area: `src/render/preview/types.ts:38-67`, `src/render/preview/component-identity.ts:110-130` -- Evidence: 关键方法与函数缺少 JSDoc。 -- Problem: 新渲染器/零件匹配实现需要反推语义。 -- Why it matters: 这直接影响 新渲染器/零件匹配实现需要反推语义。 -- Realistic failure scenario: 在正常使用中,新渲染器/零件匹配实现需要反推语义。 导致功能异常。 -- Minimal fix: 为公共方法及关键函数添加 JSDoc。 -- Better long-term fix: 长期:为公共方法及关键函数添加 JSDoc。 -- Regression test suggestion: 无。 -- Estimated effort: 2小时 ---- - -### 4.7 Type Safety - -### Finding: Babylon scene 中存在显式 any 与不安全成员访问 -- ID: TS-1 -- Severity: Medium -- Confidence: High -- Category: Type Safety -- Status: Confirmed -- Affected area: `src/render/babylon/scene.ts:1566,1611-1612,1634-1635` -- Evidence: `(line as any).color = ...` 等。 -- Problem: 绕过类型安全,可能运行时错误。 -- Why it matters: 这直接影响 绕过类型安全,可能运行时错误。 -- Realistic failure scenario: 在正常使用中,绕过类型安全,可能运行时错误。 导致功能异常。 -- Minimal fix: 使用类型化的 Babylon API 或收窄接口。 -- Better long-term fix: 长期:使用类型化的 Babylon API 或收窄接口。 -- Regression test suggestion: typecheck 与 lint 通过。 -- Estimated effort: 1小时 -### Finding: 广泛存在 `as` 类型断言 -- ID: TS-2 -- Severity: Medium -- Confidence: High -- Category: Type Safety -- Status: Confirmed -- Affected area: 多文件;`src/render/babylon/scene.ts`(26 处)、`src/view/workbench/knowledge-note.ts`、`src/view/inline/code-block.ts:391-425` 等。 -- Evidence: JSON/配置解析后直接 cast,无验证。 -- Problem: 非法数据可能运行时崩溃或行为异常。 -- Why it matters: 这直接影响 非法数据可能运行时崩溃或行为异常。 -- Realistic failure scenario: 在正常使用中,非法数据可能运行时崩溃或行为异常。 导致功能异常。 -- Minimal fix: 引入校验函数,如 `isThreeDBlockConfig`、`isGltfJson`。 -- Better long-term fix: 长期:引入校验函数,如 `isThreeDBlockConfig`、`isGltfJson`。 -- Regression test suggestion: 用非法 payload 做 fuzz 测试。 -- Estimated effort: 2天 -### Finding: 非空断言普遍存在 -- ID: TS-3 -- Severity: Medium -- Confidence: High -- Category: Type Safety -- Status: Confirmed -- Affected area: 全部 `src/**/*.ts`;约 470 处 `!.` -- Evidence: `this.axesHelper!.visible`、`this.previewLine!.material` 等。 -- Problem: dispose 后字段可能为 null,断言掩盖此情况。 -- Why it matters: 这直接影响 dispose 后字段可能为 null,断言掩盖此情况。 -- Realistic failure scenario: 在正常使用中,dispose 后字段可能为 null,断言掩盖此情况。 导致功能异常。 -- Minimal fix: 启用 `no-non-null-assertion` lint 规则;使用 guard 或可选链。 -- Better long-term fix: 长期:启用 `no-non-null-assertion` lint 规则;使用 guard 或可选链。 -- Regression test suggestion: 增加 dispose 在 load 之前的生命周期测试。 -- Estimated effort: 3天 -### Finding: 导出函数缺少返回类型 -- ID: TS-4 -- Severity: Low -- Confidence: High -- Category: Type Safety -- Status: Confirmed -- Affected area: `src/utils/node-shim.ts`, `src/render/preview/geometry.ts`, `src/io/conversion/command-discovery.ts`, `src/view/workbench/knowledge-note.ts` -- Evidence: 大量导出/公共函数依赖推断。 -- Problem: API 契约隐含;意外签名变更无法捕获。 -- Why it matters: 这直接影响 API 契约隐含;意外签名变更无法捕获。 -- Realistic failure scenario: 在正常使用中,API 契约隐含;意外签名变更无法捕获。 导致功能异常。 -- Minimal fix: 为公共函数添加显式返回类型。 -- Better long-term fix: 长期:为公共函数添加显式返回类型。 -- Regression test suggestion: typecheck 已覆盖。 -- Estimated effort: 1天 ---- - -### 4.8 Configuration - -### Finding: 设置输入缺少校验 -- ID: CFG-1 -- Severity: Medium -- Confidence: High -- Category: Configuration -- Status: Confirmed -- Affected area: `src/settings.ts:106-153,293-337,440-505` -- Evidence: 文件夹路径、命令路径、serviceBaseUrl 仅做 `.trim()`;enum 用 `as` 强转。 -- Problem: 非法值会延迟到运行时失败。 -- Why it matters: 这直接影响 非法值会延迟到运行时失败。 -- Realistic failure scenario: 用户在 draft URL 中输入带空格的 `http://`,远程草稿静默失败。 -- Minimal fix: 增加 `validateSettings()`,限制范围、拒绝非法字符、校验 enum。 -- Better long-term fix: 长期:增加 `validateSettings()`,限制范围、拒绝非法字符、校验 enum。 -- Regression test suggestion: `verify:settings` 用非法值断言规范化/警告。 -- Estimated effort: 4小时 ---- - -### 4.9 Observability - -### Finding: info 级别日志写入 console.debug -- ID: OBS-1 -- Severity: Low -- Confidence: High -- Category: Observations -- Status: Confirmed -- Affected area: `src/utils/log.ts:51-54` -- Evidence: `info()` 调用 `console.debug`。 -- Problem: 部分浏览器默认过滤 debug 日志。 -- Why it matters: 这直接影响 部分浏览器默认过滤 debug 日志。 -- Realistic failure scenario: 在正常使用中,部分浏览器默认过滤 debug 日志。 导致功能异常。 -- Minimal fix: 改为 `console.info` 或 `console.log`。 -- Better long-term fix: 长期:改为 `console.info` 或 `console.log`。 -- Regression test suggestion: 设置 info 级别并断言 `console.info` 被调用。 -- Estimated effort: 5分钟 -### Finding: 性能快照/转换耗时未暴露 -- ID: OBS-2 -- Severity: Low -- Confidence: Medium -- Category: Observability -- Status: Confirmed -- Affected area: `src/render/three/scene.ts`, `src/io/conversion/adapters/*.ts` -- Evidence: 内部计时存在,但未持久化或展示给用户。 -- Problem: 生产环境难以诊断性能/转换问题。 -- Why it matters: 这直接影响 生产环境难以诊断性能/转换问题。 -- Realistic failure scenario: 在正常使用中,生产环境难以诊断性能/转换问题。 导致功能异常。 -- Minimal fix: 将关键计时加入 diagnostics report。 -- Better long-term fix: 长期:将关键计时加入 diagnostics report。 -- Regression test suggestion: `verify:diagnostics` 断言包含计时字段。 -- Estimated effort: 2小时 ---- - -### 4.10 Data Integrity - -### Finding: 知识笔记生成在文件写入完成前变更 analysis -- ID: DI-1 -- Severity: Medium -- Confidence: High -- Category: Data Integrity -- Status: Confirmed -- Affected area: `src/view/workbench/knowledge-note.ts:1220-1364` -- Evidence: `generateKnowledgeNote` 先 mutate `analysis`,再写文件,最后更新 store;部分失败会留下不一致状态。 -- Problem: store 与 sidecar 可能不一致。 -- Why it matters: 这直接影响 store 与 sidecar 可能不一致。 -- Realistic failure scenario: 磁盘满导致 part-note 写入中断,`analysis.partNotePaths` 部分填充。 -- Minimal fix: 不可变地构建最终对象;所有 I/O 成功后一次性更新 store。 -- Better long-term fix: 长期:不可变地构建最终对象;所有 I/O 成功后一次性更新 store。 -- Regression test suggestion: 注入 I/O 失败并断言无部分状态持久化。 -- Estimated effort: 4小时 -### Finding: 转换缓存写入前未重新校验文件 -- ID: DI-2 -- Severity: Low -- Confidence: High -- Category: Data Integrity -- Status: Confirmed -- Affected area: `src/io/conversion/conversion-service.ts:116-133` -- Evidence: 转换成功后立即写入缓存,不再检查文件是否存在。 -- Problem: 输出可能被删除或损坏后仍被缓存。 -- Why it matters: 这直接影响 输出可能被删除或损坏后仍被缓存。 -- Realistic failure scenario: 杀毒软件在缓存写入前删除输出,stale 条目被持久化。 -- Minimal fix: 在 `convertedAssetCache.set()` 前重新 `isCachedOutputAvailable(result.outputPath)`。 -- Better long-term fix: 长期:在 `convertedAssetCache.set()` 前重新 `isCachedOutputAvailable(result.outputPath)`。 -- Regression test suggestion: 在转换与缓存写入之间删除输出,断言缓存不更新。 -- Estimated effort: 1小时 -### Finding: 持久化状态缺少 schema version -- ID: DI-3 -- Severity: Low -- Confidence: High -- Category: Data Integrity -- Status: Confirmed -- Affected area: `src/store/plugin-store.ts:62-73` -- Evidence: `PersistedPluginState` 无 `schemaVersion` 字段。 -- Problem: 未来破坏性变更无法区分旧格式。 -- Why it matters: 这直接影响 未来破坏性变更无法区分旧格式。 -- Realistic failure scenario: 新增设置形状后,旧 `data.json` 被静默错误解释。 -- Minimal fix: 增加 `schemaVersion` 并在破坏性变更时 bump。 -- Better long-term fix: 长期:增加 `schemaVersion` 并在破坏性变更时 bump。 -- Regression test suggestion: 加载旧 `data.json` 并断言迁移路径。 -- Estimated effort: 2小时 ---- - -### 4.11 Privacy - -### Finding: 诊断报告包含 Vault 路径结构 -- ID: PRIV-1 -- Severity: Low -- Confidence: High -- Category: Privacy -- Status: Confirmed -- Affected area: `src/diagnostics/report.ts:60-103` -- Evidence: 包含 `currentModelPath`、`reportNotePath`、`analysisSidecarPath`、`knowledgeIndexPath`。 -- Problem: 路径在共享 bug 报告时可能敏感。 -- Why it matters: 这直接影响 路径在共享 bug 报告时可能敏感。 -- Realistic failure scenario: 在正常使用中,路径在共享 bug 报告时可能敏感。 导致功能异常。 -- Minimal fix: 在 SECURITY.md 中说明;提供 redact-paths 选项。 -- Better long-term fix: 长期:在 SECURITY.md 中说明;提供 redact-paths 选项。 -- Regression test suggestion: `verify:diagnostics` 测试 redact flag。 -- Estimated effort: 1小时 ---- - -### 4.12 Accessibility - -### Finding: 缺少正式的无障碍验证 -- ID: ACC-1 -- Severity: Low -- Confidence: Medium -- Category: Accessibility -- Status: Suspected -- Affected area: `src/settings.ts`, `src/view/inline/helper-buttons.ts`, `src/render/preview/annotations.ts` -- Evidence: UI 使用 Obsidian API 构建;无 axe/屏幕阅读器测试。 -- Problem: 键盘/焦点/屏幕阅读器问题可能存在。 -- Why it matters: 这直接影响 键盘/焦点/屏幕阅读器问题可能存在。 -- Realistic failure scenario: 纯键盘用户无法操作工具栏或标注编辑器。 -- Minimal fix: 增加键盘快捷键文档;在 Playwright 中运行 accessibility 检查。 -- Better long-term fix: 长期:增加键盘快捷键文档;在 Playwright 中运行 accessibility 检查。 -- Regression test suggestion: 在 `verify:preview` 中加入 axe-core 扫描。 -- Estimated effort: 1天 ---- - -### 4.13 Supply Chain - -### Finding: esbuild source patch 脆弱 -- ID: SUP-1 -- Severity: Medium -- Confidence: Medium -- Category: Supply Chain / Maintainability -- Status: Confirmed -- Affected area: `esbuild.config.mjs:49-126` -- Evidence: 用正则 patch Babylon 源文件;无测试验证 patch 是否生效。 -- Problem: Babylon 升级可能静默破坏 patch。 -- Why it matters: 这直接影响 Babylon 升级可能静默破坏 patch。 -- Realistic failure scenario: 升级到 Babylon 9.7,`_LoadScriptNative` 正则不再匹配,远程脚本守护失效。 -- Minimal fix: 锁定经过测试的 Babylon 范围;增加构建测试验证 patch 后的 guard 字符串存在。 -- Better long-term fix: 长期:锁定经过测试的 Babylon 范围;增加构建测试验证 patch 后的 guard 字符串存在。 -- Regression test suggestion: 构建测试断言 patch 函数包含拒绝错误。 -- Estimated effort: 4小时 -### Finding: 声明了未使用的 Babylon 包 -- ID: SUP-2 -- Severity: Low -- Confidence: High -- Category: Dependency Weight -- Status: Confirmed -- Affected area: `package.json:39,43-44` -- Evidence: `@babylonjs/gui`、`@babylonjs/materials`、`@babylonjs/serializers` 在 `src/` 中无 import。 -- Problem: 安装体积、lockfile、审计面增加。 -- Why it matters: 这直接影响 安装体积、lockfile、审计面增加。 -- Realistic failure scenario: 在正常使用中,安装体积、lockfile、审计面增加。 导致功能异常。 -- Minimal fix: 移除未使用包。 -- Better long-term fix: 长期:移除未使用包。 -- Regression test suggestion: 移除后 `npm run build` 成功。 -- Estimated effort: 15分钟 ---- - -### 4.14 Documentation - - - -### Finding: 预览路由矩阵与实现基本一致 -- ID: DOC-3 -- Severity: Info -- Confidence: High -- Category: Documentation -- Status: Verified -- Affected area: `docs/preview-routing-matrix.md` -- Evidence: 矩阵记录了 direct/code-block/3dgrid/workbench 的默认/实验/回退路径,与代码基本对齐。 -- Problem: 与 预览路由矩阵与实现基本一致 相关的问题需要进一步调查。 -- Why it matters: 这直接影响 与 预览路由矩阵与实现基本一致 相关的问题需要进一步调查。 -- Realistic failure scenario: 在正常使用中,与 预览路由矩阵与实现基本一致 相关的问题需要进一步调查。 导致功能异常。 -- Minimal fix: 待补充 -- Better long-term fix: 长期:待补充 -- Regression test suggestion: 添加对应的回归测试,覆盖该失败路径。 -- Estimated effort: 2小时 ---- - -### 4.15 Backend API - -- Status: Not assessed -- **Reason:** 本项目为 Obsidian 插件,无服务端 API。 - ---- - -## 5. Recent Commit Capability Evolution - -### 5.1 Commit Window - -分析窗口:最近约 30 条提交,时间跨度约 2026-05-25 至 2026-06-08,提交者以单一作者为主,节奏非常快(部分日期 4-5 条 commit)。 - -### 5.2 Major Feature Inflection Points - -| Commit | Version | What changed | -|--------|---------|--------------| -| `be3db73` | — | Three.js 正式成为单模型主渲染路径;引入 renderer-agnostic 抽象;单次提交 +5,326/-680 行,为近期最大变更。 | -| `f952415` | — | 增加 Three/Babylon 渲染器切换能力。 | -| `e3bdfba` | 0.4.0 | 引入零件笔记草稿(part note drafts)与模型知识索引。 | -| `fd49104` | 0.4.3 | 增加 diagnostics report、registered part matching、自动零件注册。 | -| `e478b42` / `b1cf45b` | — | GLB component identity 与跨格式零件匹配。 | -| `355c2e1` / `e8d094a` / `c078c22` | — | Workspace UI 重构为基于 track 的侧边栏。 | -| `7c487e9` | 0.5.5 | 增加距离测量工具(distance measurement)。 | - -### 5.3 Stability Improvements - -- 弹窗/独立窗口兼容性修复(`f952415` 相关)。 -- Lint 合规性修复(大量 `style`/`lint` 提交)。 -- 加载中断提示与资源加载鲁棒性增强。 -- 资源释放与性能相关 work(Three.js frame budget、viewport pause)。 -- 序列化锁 `generation` counter 防止并发保存。 - -### 5.4 Preview Routing Evolution - -- 早期单一路径逐步拆分为: - - **Direct file view**:默认 Babylon,可实验性切换到 Three.js,失败回退 Babylon。 - - **Code-block inline**:默认 Three.js。 - - **`3dgrid`**:强制 Babylon(grid 实现)。 - - **Workbench**:默认 Three.js,Babylon 作为保守回退。 -- 路由矩阵已记录在 `docs/preview-routing-matrix.md`,但矩阵更新略滞后于代码变更。 - -### 5.5 Knowledge Base / Part Notes Progression - -- 0.4.0:从分析结果生成知识笔记与零件草稿。 -- 0.4.3:引入 registered parts;direct view 自动将捕获的零件候选注册到 model profile;后续模型可在完整报告存在前检测复用零件。 -- 近期:增加零件身份跨格式匹配、知识索引更新、sidecar 持久化。 - -### 5.6 Release Cadence - -版本序列:0.4.0 → 0.4.3 → 0.5.1 → 0.5.3 → 0.5.5。 - -- 从 0.4.x 跳到 0.5.x 反映 API/功能跃迁(Three.js 主渲染、测量工具)。 -- 多个 commit 同时 bump `package.json`/`manifest.json`/`versions.json` 但未同步 `package-lock.json`。 - -### 5.7 Code Growth Patterns - -- 最大增长来自 `src/render/three/scene.ts` 与 `src/render/babylon/scene.ts`。 -- `src/view/workbench/knowledge-note.ts`、`src/view/direct-view.ts`、`src/settings.ts` 持续膨胀。 -- `docs/` 与 `scripts/` 同步增长,说明文档与验证投入较多。 - -### 5.8 Risks Introduced by Recent Commits - -- **巨型提交**:`be3db73` 一次改动超过 6,000 行,review 困难,是近期最大的回归风险源。 -- **生成产物提交**:`main.js` 作为生成文件被反复提交,且当前 dirty/锁定。 -- **UI 快速重构**:工作区多次 reorganize 为 track-based sidebar,若验证脚本硬编码 DOM 结构,易频繁 break。 -- **双渲染器维护负担**:每次新功能(measurement、explode、focus)都需要在 Three 与 Babylon 两端实现,债务加速累积。 -- **版本号不一致**:从 0.4.3 到 0.5.5 的更新未完整同步 lockfile 与 changelog。 - ---- - -## 6. Metrics Comparison - -### 6.1 Build Volume - -| Metric | Current (0.5.5) | Recent history | Trend | -|--------|-----------------|----------------|-------| -| `main.js` (uncompressed) | ~3.97 MB (3.8 MB reported by ls) | 3.945 MB at `27103cb` | ↔ Flat / slight growth | -| `styles.css` | 40 KB | — | — | -| `node_modules` | 281 MB | — | — | -| `.venv` | 14 MB | — | — | - -**Observation:** 尽管近期有帧预算、viewport pause 等性能 work,但 bundle 体积没有下降趋势,因为 Three.js 与 Babylon.js 两个完整运行时仍被打包在一起。 - -### 6.2 Type Safety - -| Metric | Current | Target | Trend | -|--------|---------|--------|-------| -| `npm run typecheck` | Passes | Passes | ✅ Stable | -| eslint problems | 21 (19 errors, 2 warnings) | 0 | ❌ Regressed / not enforced | -| `any` usage | Present | Minimal | ⚠️ Debt | -| `as` assertions | Many (Babylon scene alone 26) | Minimal | ⚠️ Debt | -| Non-null assertions (`!`) | ~470 across src | Minimal | ❌ High | - -**Observation:** TypeScript 编译通过,但 lint 与类型断言债务明显,release workflow 未运行 eslint。 - -### 6.3 Test Coverage - -| Layer | Coverage | Evidence | -|-------|----------|----------| -| Unit tests | None | No test runner, no `*.test.ts` | -| Integration / verification scripts | 11 scripts | `scripts/verify-*.mjs` | -| Conversion pipelines | Not covered | No `verify:conversion` | -| Remote draft privacy/security | Partial | `verify:remote-draft` exists but asserts structure, not sanitization | -| Obsidian end-to-end | Requires host | `verify:obsidian` skipped in this audit | - -**Observation:** 验证矩阵广但浅;缺乏对关键路径的细粒度回归保护。 - -### 6.4 Build Health - -| Check | Result | -|-------|--------| -| `npm run typecheck` | ✅ Pass | -| `npm run build` | ❌ Fail — `main.js` locked/dirty | -| `npm audit` | ❌ 1 High (esbuild) | -| `npm run lint` | ❌ 21 problems | -| `npm run verify:release` | ❌ Blocked by package-lock version mismatch | - -### 6.5 Rendering Performance - -| Aspect | Current | Notes | -|--------|---------|-------| -| Three.js frame budget | ✅ Implemented | `updateFrameBudget()` adjusts pixel ratio | -| Viewport pause (Three) | ✅ Implemented | IntersectionObserver-based | -| Babylon loop pause | ❌ Missing | `runRenderLoop` continuous | -| Grid re-render | ❌ Every frame | `renderFrame()` clears & re-renders all cells | -| Annotation projection | ❌ O(n²) layout thrashing | `getBoundingClientRect()` inside nested loops | -| Resource disposal | ⚠️ Partial | Timers/observers in AnnotationManager need audit | - -**Observation:** Three.js 路径已有节电措施,Babylon 路径仍是主要能耗风险;标注系统是交互帧率瓶颈。 - ---- - -## 7. Principles Compliance - -对照 `rubrics/principles.md`: - -| Principle | Compliance | Notes | -|-----------|------------|-------| -| Prefer explicit contracts | ⚠️ Partial | 渲染器接口较好,但内部大量 `as`/`!` 与非空断言 | -| Fail fast and noisily | ❌ Weak | 多处 catch 静默吞没错误 | -| Keep surfaces small and typed | ⚠️ Partial | `PluginStore` 暴露 raw setState;设置校验不足 | -| Make state explicit and owned | ⚠️ Partial | 视图直接 mutate persisted profiles;DOM-as-state 在 helper-buttons | -| Secure by default | ✅ Strong | 本地优先、Babylon 网络守卫、远程草稿默认关闭 | -| Verify at boundaries | ⚠️ Partial | 类型边界校验不足;远程内容未做 HTML 转义 | -| Document why, not just what | ⚠️ Partial | 文档丰富,但代码级 JSDoc 与 TODO 不足 | -| Test what must not break | ❌ Weak | 无单元测试;关键转换管道未覆盖 | -| Reduce and justify dependencies | ⚠️ Partial | 同时依赖 Three 与 Babylon;声明了未使用的 Babylon 包 | -| Review risk in code paths that touch money, data, or identity | ✅ Mostly | 远程草稿与转换命令有安全思考,但实现上有 gaps | - ---- - -## 8. Recommended Fix Order - -按风险收益比排序,优先处理阻塞发布与数据丢失问题: - -1. **REL-1** — 同步 package-lock.json 到 0.5.5(5 分钟,解除 release 阻塞) -2. **REL-2** — 解决 main.js dirty/锁定,确保 `npm run build` 可用(15 分钟) -3. **STB-1** — PluginStore unload flush(30 分钟,防止数据丢失) -4. **SEC-1** — 升级 esbuild 并重新生成 lockfile(30 分钟) -5. **SEC-2** — 远程草稿输出 HTML/Markdown 转义(3 小时,用户安全) -6. **SEC-3** — 模型派生字符串 HTML 转义(2 小时) -7. **TST-5** — CI/release workflow 加入 eslint 并修复现有错误(2 小时) -8. **PER-1** — 减少 bundle 体积:移除未使用 Babylon 包,评估代码分割(1-2 天) -9. **PER-2** / **PER-3** / **PER-4** — Babylon 循环/Grid/标注投影性能优化(各 4 小时 - 1 天) -10. **TST-1** / **TST-4** — 引入单元测试与转换 mock 测试(各 1-2 天) -11. **MAINT-1** / **MAINT-2** — 拆分 scene 神类与消除双端重复(1-2 周,长期架构投资) - ---- - -## 9. Quick Wins(本周可完成) - -| ID | Fix | Effort | Impact | -|----|-----|--------|--------| -| REL-1 | 同步 package-lock 版本 | 5 min | 解除 release 阻塞 | -| REL-2 | 关闭锁定进程并提交干净 main.js | 15 min | 恢复本地构建 | -| REL-3 | 补充 CHANGELOG 0.5.3/0.5.5 | 20 min | 发布文档完整 | -| REL-4 | 更新文档版本示例 | 15 min | 新贡献者体验 | -| SEC-1 | 升级 esbuild | 30 min | 消除 high 漏洞 | -| STB-1 | store unload flush | 30 min | 防止数据丢失 | -| OBS-1 | info 日志改用 console.info | 5 min | 日志可见性 | -| SUP-2 | 移除未使用 Babylon 包 | 15 min | 减小依赖面 | -| REL-5 / REL-6 | 收紧 release tag 触发与输入处理 | 25 min | 供应链安全 | -| STB-2 starter | 为所有空 catch 添加 warn 日志 | 2 h | 调试能力 | - ---- - -## 10. Long-Term Refactor Plan - -### 10.1 渲染器架构瘦身(2-4 周) - -- 提取 `SceneController` 接口:measurement、focus、explode/disassembly、wireframe、snapshot、frame budget。 -- Three.js 与 Babylon.js 各自实现 `RendererAdapter`,将平台无关逻辑上提。 -- 目标:`src/render/three/scene.ts` 与 `src/render/babylon/scene.ts` 均 < 800 行。 - -### 10.2 状态管理规范化(1 周) - -- `PluginStore` 提供 typed actions:`registerPart`、`addPin`、`updateProfile`。 -- 视图层禁止直接 `setState`。 -- 增加 `schemaVersion` 与迁移逻辑。 - -### 10.3 测试金字塔建设(2-4 周) - -- 引入 Vitest。 -- 单元测试:resolve-path、geometry、component-identity、remote-draft normalization、store actions。 -- mock 转换测试:stub Python/CLI 脚本覆盖 STEP/IGES/OBJ/FBX/3MF/DAE。 -- 将现有验证脚本的断言从 CSS 类/文案迁移到 `data-testid`。 - -### 10.4 安全与隐私加固(1-2 周) - -- 统一不可信输入清洗层(模型元数据、远程草稿、LLM 输出)。 -- 转换器命令 allowlist / PATH 解析 / 校验。 -- 远程 endpoint 私有 IP 警告与 allowlist。 -- 提示注入测试矩阵。 - -### 10.5 性能专项(2-3 周) - -- Babylon viewport pause / dirty rendering。 -- 3dgrid 静态缓存。 -- Annotation projection 批量读写 + 缓存 + 上限。 -- Bundle splitting / lazy Babylon loading。 - -### 10.6 发布工程自动化(1 周) - -- CI 中 `npm run lint`、`npm audit`、`npm run verify:release`。 -- 文档版本号自动化校验。 -- 考虑 changesets 或 conventional-changelog 生成 release notes。 - ---- - -## 11. Methodology & Limitations - -- **Approach:** 基于 `fuck-my-shit-mountain` skill 的 full 模式,结合静态代码分析、依赖审计、构建/类型/lint 检查、recent commit 分析、6 个并行的聚焦探索代理。 -- **Tools used:** `Read`, `Grep`, `Glob`, `Bash` (git, npm, eslint, npm audit, wc, file), `Agent` (explore × 6). -- **What was not done:** 未在真实 Obsidian 桌面/移动客户端做运行时测试;未做动态渗透测试;未对远程 LLM endpoint 做提示注入测试;未使用 profiler 采样真实用户场景。 -- Confidence: 所有 Confirmed 发现均有代码/配置/输出证据;Suspected 发现已标注。 - ---- - -*Report generated by Kimi Code CLI on 2026-06-14.* diff --git a/audit-report-ai-model-workbench-2026-06-22.md b/audit-report-ai-model-workbench-2026-06-22.md deleted file mode 100644 index 8928a41..0000000 --- a/audit-report-ai-model-workbench-2026-06-22.md +++ /dev/null @@ -1,825 +0,0 @@ -# Fuck My Shit Mountain Audit Report - -**Project:** AI Model Workbench -**Audit mode:** full -**Date:** 2026-06-22 -**Reviewer:** Codex GPT-5 - ---- - -## 1. Executive Summary - -AI Model Workbench is in much better shape than a typical legacy plugin of this size: the renderer routing contract is documented, the release workflow signs and attests release assets, remote drafting is local-first by default, and the project has meaningful verification scripts for preview, settings migration, diagnostics, knowledge generation, and release assets. The audit found no critical or high-severity issues, `npm audit` reported zero vulnerabilities, and the main non-Obsidian verification commands passed. - -The main technical debt is structural. The Three and Babylon preview classes, knowledge-note generation pipeline, settings UI, helper toolbar, and CAD converter adapter have grown into large multi-responsibility modules. That does not make the current release unsafe by itself, but it makes future renderer migration, ruler work, conversion changes, and knowledge-note behavior harder to change with confidence. - -The most important engineering risks before a stable public release are persistence consistency, non-atomic knowledge generation, unbounded remote-draft request waiting, and the gap between custom verification scripts and normal unit coverage. These are practical, local fixes; this codebase does not need a rewrite. - -### Score Dashboard - -``` -Security [########..] 8.0 A Local-first defaults, command validation, network guard, and zero npm vulnerabilities are strong; diagnostics still expose model/vault paths by design. -Stability [#######...] 6.5 B Verification is broad, but unsynchronized save ordering, partial multi-file generation, and remote requests without timeout create realistic failure modes. -Performance [########..] 7.5 A Preview smoke checks pass and renderers include disposal/visibility work, but very large renderer classes make performance regressions easy to introduce. -Testing [#####.....] 5.0 B Custom verification scripts are valuable, but Vitest coverage is 1.8 percent overall and most source modules report zero unit coverage. -Maintainability [######....] 5.8 B Clear module directories and docs exist, but several core files exceed 700-2,000 lines and mix unrelated responsibilities. -Design [######....] 6.0 B Renderer-agnostic interfaces help, while SRP and boundary-contract debt remains in renderers, converters, and knowledge generation. -Release [########..] 8.0 A Release checks, asset hashes, and GitHub attestations are good; the audit did not run the real Obsidian smoke test. -------------------------------------- -Overall [#######...] 6.7 B -``` - -Each dimension scored 0.0 to 10.0. **Higher = better (10 = clean, 0 = worst).** Scores are judgment-based, not formula-based. - -### Finding Statistics - -| Severity | Count | Confirmed | Suspected | -|----------|-------|-----------|-----------| -| Critical | 0 | 0 | 0 | -| High | 0 | 0 | 0 | -| Medium | 6 | 6 | 0 | -| Low | 2 | 2 | 0 | -| Info | 0 | 0 | 0 | -| **Total** | **8** | **8** | **0** | - -## 2. Project Map - -AI Model Workbench is an Obsidian desktop/mobile plugin. `src/main.ts` owns plugin lifecycle, commands, direct file view registration, code block processors, Live Preview extension registration, settings, diagnostics, and cache wiring. State is owned by `src/store/plugin-store.ts`, persisted through Obsidian `loadData` and `saveData`, with settings defaults in `src/domain/constants.ts` and shared contracts in `src/domain/models.ts`. - -Rendering is split into renderer-agnostic contracts under `src/render/preview`, Three.js implementation under `src/render/three`, Babylon.js implementation under `src/render/babylon`, and `3dgrid`/preset rendering under `src/render/presets` plus Babylon grid code. Routing decisions are centralized in `src/render/preview/routing.ts`, `src/view/direct-view-routing.ts`, and documented in `docs/preview-routing-matrix.md`. - -Model I/O is split into direct loading, format capability registration, conversion orchestration, cache records, and adapter-specific conversion. Local conversion uses desktop Node/Electron capabilities through `src/utils/node-shim.ts` and external tools such as Python/CadQuery, FreeCAD, FBX2glTF, obj2gltf, and trimesh. - -Knowledge generation lives mainly in `src/view/workbench/knowledge-note.ts` and `src/view/workbench/analysis-result.ts`. It writes reports, sidecars, indexes, snapshots, and part-note drafts into the vault, and can optionally send sanitized evidence to a configured remote draft endpoint. Remote draft behavior is in `src/view/workbench/remote-draft.ts` and output normalization is in `remote-draft-normalizer.ts`. - -The audit excluded generated/minified `main.js` as source evidence, dependency folders, binary model fixtures, generated coverage output, `.tmp`, and pre-existing untracked audit/GIF/test-model artifacts. Commands run during this audit: `git status --short --branch`, `rg --files`, targeted `rg` searches, `npm audit --json`, `npm audit --omit=dev --json`, `npm run test:coverage`, `npm run typecheck`, `npm run lint`, `npm run verify:settings`, `npm run verify:remote-draft`, `npm run verify:knowledge-index`, `npm run verify:diagnostics`, `npm run verify:release`, and `npm run verify:preview`. The real Obsidian smoke test was not run for this audit. - -### Coverage Matrix - -| Dimension | Coverage | Evidence inspected | Exclusions / limits | -|-----------|----------|--------------------|---------------------| -| Architecture | High | `src/main.ts`, renderer folders, I/O folders, store, docs handoff, routing matrix, file-size inventory | Did not inspect every binary fixture or generated bundle | -| Security | Medium | command discovery validation, remote draft, network guard, diagnostics, npm audit, release workflow | No dynamic penetration testing or real malicious model corpus | -| Stability | High | store persistence, conversion manager, knowledge generation writes, remote draft, preview verification, diagnostics verification | Real Obsidian app smoke not run | -| Performance | Medium | renderer classes, grid/render verification output, conversion timeout/cache behavior, file-size inventory | No profiling session or benchmark suite | -| Testing | High | Vitest test files, coverage output, package scripts, verification scripts, CI workflow | Coverage report treats external verification scripts separately from Vitest | -| Maintainability | High | largest source files, TODO debt markers, module map, converter adapters, settings/helper UI | Did not inspect every line of all renderer math branches | -| Design | High | renderer interfaces, direct-view routing, store, conversion service, knowledge-note pipeline, principles rubric | Design scoring limited to static review plus passing checks | -| Release | High | package scripts, release workflow, release verifier, README release docs, SECURITY.md, npm audit | Did not publish a release or run `verify:obsidian` | -| Documentation | Medium | README, development handoff, routing docs, security policy, changelog | Did not validate every README example in a live Obsidian install | -| Configuration | Medium | defaults, settings UI, command discovery, diagnostics, remote draft decision logic | No migration test beyond `verify:settings` | -| Observability | Medium | logger, diagnostics report, verification scripts, conversion logs | No production telemetry because this is a local plugin | -| Data Integrity | High | store persistence, knowledge generation, managed index replacement, converted asset cache | No fault-injection run against vault writes | -| Privacy | Medium | remote-draft sanitization, diagnostics report, README privacy claims, verify-remote-draft | No review of external service implementation because only client exists here | -| Accessibility | Medium | helper toolbar labels, canvas keyboard handling, annotations, inline/direct UI snippets | No screen-reader or browser accessibility tree run | -| Supply Chain | High | package manifests, lockfile, npm audit, GitHub workflow, attestations, release asset verifier | GitHub Actions pinned to tags, not SHA-pinned actions | -| Cost | Medium | remote draft, conversion timeout/cache, render settings, model limits | No real user workload cost profile | -| AI-Safety | Medium | remote drafting client, normalizer tests, privacy verifier, local-first defaults | No server-side LLM implementation present | -| Fallback | Medium | direct view fallback, route matrix, knowledge generation warnings, converter fallback behavior | Did not force every fallback path at runtime | -| Testing-Authenticity | High | Vitest tests, custom verification scripts, coverage output, CI workflow | No mutation testing | -| Type-Safety | Medium | TypeScript interfaces, type assertions searches, `tsc` result, node shim | No runtime schema validation added during audit | -| Frontend-State | Medium | helper toolbar, inline code blocks, direct view, annotation manager references | No UI interaction trace beyond existing preview harness | -| Backend-API | Not assessed | Project has no backend API server; only optional client POST to `/draft-note` | Server behavior is outside this repository | -| Dependency-Weight | Medium | package dependencies, package-lock metadata, npm audit, release bundle size | No bundle analyzer by module | -| Code-Consistency | Medium | lint result, largest modules, error handling and UI construction patterns | Did not create a full duplication index | -| Comment-Coverage | Medium | TODO markers, README, docs, public contracts, converter script comments | Did not enforce doc-comment coverage mechanically | - -## 3. Top Risks - -1. Medium: Persisted plugin state saves can complete out of order, which can overwrite newer state with an older snapshot. -2. Medium: Knowledge generation writes multiple files and store state without a transaction or recovery marker, so partial output can become visible. -3. Medium: Remote draft requests have no explicit timeout, cancellation, or retry budget. -4. Medium: Normal unit coverage is only 1.8 percent overall; most source modules have zero Vitest coverage. -5. Medium: Three and Babylon preview classes are monolithic and already marked as debt in code. -6. Medium: The CAD converter embeds a large Python/GLB post-processing program inside a TypeScript string array. -7. Low: Keyboard-focusable preview canvases do not expose an accessible name or role. -8. Low: Diagnostics reports intentionally omit secrets but still include model and vault-relative paths that can reveal project names. - -## 4. Detailed Findings - -### Finding: Persisted store saves are not serialized - -- Severity: Medium -- Confidence: High -- Category: Stability -- Status: Confirmed -- Affected area: Plugin state persistence -- Evidence: - - File: `src/store/plugin-store.ts:44-62` - - Function / Module: `scheduleSave`, `persist` - - Relevant behavior: Each store change schedules `persist().catch(...)`; `persist` snapshots the whole store and calls `plugin.saveData(data)`. - - File: `src/store/plugin-store.ts:125-131` - - Function / Module: `dispose` - - Relevant behavior: Dispose clears the pending timer and starts a fire-and-forget final `persist`. -- Problem: Multiple `saveData` calls can overlap, and there is no single-flight queue, revision number, or "latest write wins" guard. If an older save resolves after a newer save, the persisted `data.json` can contain stale settings, annotations, converted cache records, or generated-note metadata. -- Why it matters: The plugin treats persisted state as the source of truth after restart, so save ordering bugs become user-visible data loss or stale metadata. -- Realistic failure scenario: A user adds an annotation, immediately generates a knowledge note, then closes Obsidian while saves are still in flight. The final async flush or an older autosave finishes later and persists the pre-generation profile. -- Minimal fix: Add a serialized save queue with a monotonically increasing dirty revision; only one `saveData` runs at a time, and a new run starts if state changed while the previous save was pending. -- Better long-term fix: Model persistence as a small state machine with explicit `clean`, `dirty`, `saving`, and `failed` states plus a visible diagnostics signal for failed saves. -- Regression test suggestion: Unit-test `createPluginStore` with a fake `saveData` whose first promise resolves after the second, then assert the persisted payload is the newest state. -- Estimated effort: 3-5 hours. - -### Finding: Knowledge generation can leave partial vault output - -- Severity: Medium -- Confidence: High -- Category: Stability -- Status: Confirmed -- Affected area: Knowledge note generation and vault writes -- Evidence: - - File: `src/view/workbench/knowledge-note.ts:1209-1343` - - Function / Module: `generateKnowledgeNote` - - Relevant behavior: The function captures evidence, creates part note drafts, optionally requests a remote draft, creates a knowledge index, writes an analysis sidecar, writes the report note, then updates the model profile and last-generation record. - - File: `src/view/workbench/knowledge-note.ts:743-787` - - Function / Module: `ensureFolder`, `createTextFileIfMissing`, `upsertTextFile` - - Relevant behavior: Folder creation logs and continues on failure; create/modify retries a narrow race but has no multi-file rollback or generation manifest. -- Problem: Report note, sidecar JSON, index, part notes, snapshots, and profile metadata are committed independently. A failure after some writes but before the final profile update leaves the vault in a mixed state that later workflows may interpret as complete. -- Why it matters: Knowledge-generation artifacts are linked together. A missing sidecar or stale profile link can break registered-part reuse, "open index", or later report refreshes. -- Realistic failure scenario: The plugin writes several part notes and the index, then the sidecar write fails because the report folder was moved or disk sync locks the file. The vault now contains new notes but the model profile still points to older artifacts. -- Minimal fix: Write a generation manifest or status sidecar first, mark it `pending`, then mark `success` only after all writes and profile updates complete. On startup or next generation, reconcile or clean pending generations. -- Better long-term fix: Extract a `KnowledgeArtifactWriter` with explicit phases, idempotent upserts, and a recovery routine that can repair missing profile links from sidecars. -- Regression test suggestion: Add a test where the fake vault fails on the sidecar or report write after part notes are created, then assert the last-generation record is `failed` and recovery can identify incomplete artifacts. -- Estimated effort: 1-2 days. - -### Finding: Remote draft request has no timeout or cancellation budget - -- Severity: Medium -- Confidence: High -- Category: Stability -- Status: Confirmed -- Affected area: Optional remote draft client -- Evidence: - - File: `src/view/workbench/remote-draft.ts:126-140` - - Function / Module: `requestRemoteDraft` - - Relevant behavior: Calls Obsidian `requestUrl` with URL, method, headers, and body, then awaits the response without an explicit timeout, abort signal, retry policy, or circuit breaker. - - File: `src/view/workbench/knowledge-note.ts:1279-1293` - - Function / Module: `generateKnowledgeNote` - - Relevant behavior: The whole generation flow waits on `requestRemoteDraft` when remote drafting is enabled. -- Problem: A slow or hanging configured draft service can stall note generation indefinitely from the user's point of view. -- Why it matters: Remote drafting is optional, but when configured it sits inside a high-value local workflow. A network dependency should not block local artifact generation without a bounded wait. -- Realistic failure scenario: A user configures a local draft service, the service accepts a connection but never responds, and `generateKnowledgeNote` remains stuck before writing the local report. -- Minimal fix: Add a configurable default timeout around `requestUrl` with a clear warning recorded in `analysis.warnings` when it expires. -- Better long-term fix: Move remote draft into a post-local phase: write local report first, then update the report with remote output when it arrives or times out. -- Regression test suggestion: Extend `verify-remote-draft` or a Vitest test with a never-resolving `requestUrl` shim and assert generation continues after the timeout. -- Estimated effort: 3-6 hours. - -### Finding: Unit coverage does not protect most critical modules - -- Severity: Medium -- Confidence: High -- Category: Testing -- Status: Confirmed -- Affected area: Automated tests and critical source paths -- Evidence: - - File: `package.json:11-23` - - Function / Module: npm scripts - - Relevant behavior: The repo has Vitest plus custom verification scripts for preview, Obsidian, settings, remote draft, knowledge index, diagnostics, and release. - - File: coverage command output from `npm run test:coverage` - - Function / Module: Vitest coverage - - Relevant behavior: Overall coverage was 1.8 percent statements and 1.84 percent lines; `main.ts`, `settings.ts`, `plugin-store.ts`, `knowledge-note.ts`, Three scene, Babylon scene, and most renderer/IO files showed zero covered lines. -- Problem: The custom verification scripts provide useful confidence, but the normal unit test layer misses the modules most likely to break during refactoring. -- Why it matters: The next debt cleanup needs small safety nets around store persistence, knowledge artifact writes, routing, conversion caching, and renderer-agnostic helpers. Without those, refactors depend too heavily on slow end-to-end harnesses. -- Realistic failure scenario: A developer changes `plugin-store` save behavior or `knowledge-note` write ordering. Unit tests stay green because those modules have no direct tests, and the bug only appears after an Obsidian restart or partial vault-write failure. -- Minimal fix: Add focused Vitest tests for store save ordering, knowledge-note partial failures, conversion-cache reuse, direct-view routing, and remote-draft timeout behavior. -- Better long-term fix: Treat verification scripts as integration tests and add a small coverage threshold for core pure modules while keeping renderer/browser paths validated by Playwright. -- Regression test suggestion: Start with a `plugin-store.test.ts` fake plugin and `knowledge-note.test.ts` fake vault that exercise failure and recovery paths. -- Estimated effort: 2-4 days for a meaningful first tranche. - -### Finding: Preview renderers are oversized multi-responsibility classes - -- Severity: Medium -- Confidence: High -- Category: Maintainability -- Status: Confirmed -- Affected area: Three.js and Babylon.js preview implementations -- Evidence: - - File: `src/render/three/scene.ts:214-216` - - Function / Module: `ThreeModelPreview` - - Relevant behavior: The source itself marks a `TODO(P2)` to decompose the class; file inventory measured 2,265 lines. - - File: `src/render/babylon/scene.ts:242-244` - - Function / Module: `BabylonModelPreview` - - Relevant behavior: The source itself marks a `TODO(P2)` to split loader, camera, light, and annotation helpers; file inventory measured 1,739 lines. - - File: `src/render/three/scene.ts:551-607` - - Function / Module: annotation provider and model evidence methods - - Relevant behavior: Renderer class owns annotation projection, model evidence extraction, material summaries, and part candidate generation. - - File: `src/render/three/scene.ts:1949-2122` - - Function / Module: measurement helpers - - Relevant behavior: Renderer class also owns measurement interaction, labels, markers, and export record creation. -- Problem: Rendering, loading, camera fitting, lights, picking, annotation projection, measurement UI, selection focus, evidence extraction, and performance disposal all live in the same classes. -- Why it matters: Changes to one workflow carry high blast radius and are hard to review. This is already visible in the repeated Three/Babylon measurement work and the need to keep two large classes behaviorally aligned. -- Realistic failure scenario: A future annotation or ruler change updates the Three path but misses Babylon, or a camera/disposal optimization breaks measurement labels because both live in the same class state. -- Minimal fix: Extract low-risk pure helpers first: measurement records, evidence summaries, camera-fit wrappers, material disposal utilities, and annotation provider adapters. -- Better long-term fix: Split each renderer into loader, scene lifecycle, camera/controls, picking/selection, measurement, annotation projection, and evidence modules behind the existing `WorkbenchPreview` interface. -- Regression test suggestion: Add parity tests for shared measurement/evidence helper outputs and route-level preview tests for both renderer backends. -- Estimated effort: 3-6 days staged over several PRs. - -### Finding: CAD conversion logic is embedded as a generated Python string - -- Severity: Medium -- Confidence: High -- Category: Maintainability -- Status: Confirmed -- Affected area: STEP/IGES/BREP conversion adapter -- Evidence: - - File: `src/io/conversion/adapters/freecad-converter.ts:52-77` - - Function / Module: `buildCadScript` - - Relevant behavior: Builds a Python program as a TypeScript string array, injecting source/output paths and imports. - - File: `src/io/conversion/adapters/freecad-converter.ts:339-489` - - Function / Module: embedded OCCT glTF writer path - - Relevant behavior: The embedded script reads XDE documents, triangulates shapes, rewrites GLB JSON chunks, patches metadata, and handles temporary files. - - File: `src/io/conversion/adapters/freecad-converter.ts:694-715` - - Function / Module: `FreeCadConverter.convert` - - Relevant behavior: Writes the generated script to a temp path, executes it, then removes the script fire-and-forget. -- Problem: A large Python program lives inside TypeScript string literals, so Python syntax, GLB chunk manipulation, and OCCT behavior are hard to lint, unit-test, diff, or type-check. -- Why it matters: CAD conversion is a support-heavy feature. Bugs here are hard to diagnose, and small edits can silently break syntax or platform behavior without local converter availability. -- Realistic failure scenario: A developer changes metadata post-processing in the string array, TypeScript and unit tests pass, but the generated Python has a syntax error or corrupts a GLB chunk only when a STEP file hits the OCCT writer path. -- Minimal fix: Move the Python script into a fixture/template file and add a test that renders it with sample paths, compiles it with `python -m py_compile`, and verifies key generated lines. -- Better long-term fix: Keep converter scripts as first-class assets with their own lint/smoke tests and minimal JSON contract tests between TypeScript and Python. -- Regression test suggestion: Add a unit test for `buildCadScript` output plus a script-level syntax test in CI when Python is present. -- Estimated effort: 1-2 days. - -### Finding: Focusable preview canvases lack accessible names - -- Severity: Low -- Confidence: High -- Category: Maintainability -- Status: Confirmed -- Affected area: Inline preview keyboard accessibility -- Evidence: - - File: `src/view/inline/code-block.ts:200-211` - - Function / Module: inline `3d` preview canvas creation - - Relevant behavior: Creates a canvas, sets `tabIndex = 0`, and handles keyboard shortcuts for reset, wireframe, gizmo, bounding box, animation, and measurement. - - File: `src/view/inline/helper-buttons.ts:243-612` - - Function / Module: helper toolbar buttons - - Relevant behavior: Toolbar buttons mostly have `aria-label`, but the focusable canvas itself does not expose an accessible name or role in the inspected snippet. -- Problem: Keyboard users can tab to an unlabeled interactive canvas. Screen readers may announce a generic canvas with no action context. -- Why it matters: The preview has meaningful keyboard behavior, so it should identify itself and its interaction mode when focused. -- Realistic failure scenario: A user navigating by keyboard reaches the canvas and cannot tell whether it is a model viewport, what interaction is available, or how to leave model interaction mode. -- Minimal fix: Add `role="img"` or an appropriate interactive role, an `aria-label` such as "3D model preview", and verify focus outline/escape behavior. -- Better long-term fix: Add an accessibility smoke in the Playwright harness that checks focusable controls have accessible names. -- Regression test suggestion: Extend `verify-preview` to evaluate focusable `.ai3d-canvas-full` elements and assert an accessible name is present. -- Estimated effort: 1-2 hours. - -### Finding: Diagnostics reports include model and vault-relative paths - -- Severity: Low -- Confidence: High -- Category: Security -- Status: Confirmed -- Affected area: Diagnostics and support report privacy -- Evidence: - - File: `src/diagnostics/report.ts:82-103` - - Function / Module: `buildDiagnosticsReport` - - Relevant behavior: Report includes current model path, report note path, analysis sidecar path, knowledge index path, report folder, part notes folder, snapshot folder, last generated model, and last report/index paths. - - File: `src/diagnostics/report.ts:112-114` - - Function / Module: diagnostics notes - - Relevant behavior: Notes explicitly say draft service URL and command paths are omitted. -- Problem: The diagnostic report avoids the highest-risk secrets but still includes filenames and vault-relative paths that can reveal customer, product, project, or model names. -- Why it matters: Diagnostics are designed to be copied into bug reports. Users may not realize model paths are sensitive even when no absolute filesystem path or service URL is included. -- Realistic failure scenario: A user attaches diagnostics to a public issue, exposing an unreleased product model name through `Current Model` or generated report paths. -- Minimal fix: Add a setting or prompt to redact model and note paths in diagnostics, defaulting to basename-only or `` for support copies. -- Better long-term fix: Provide two diagnostics modes: "safe public report" and "local full report", with `verify:diagnostics` checking both redaction policies. -- Regression test suggestion: Extend `verify-diagnostics` to assert a redacted mode removes model/report path values while preserving counts and renderer state. -- Estimated effort: 2-4 hours. - -## 5. Architecture Concerns - -- Coverage: High -- Inspected evidence: `src/main.ts`, renderer implementations, `src/render/preview/*`, conversion pipeline, store, direct-view routing, docs. -- Exclusions / limits: No generated bundle or binary fixture internals inspected. - -The architecture has a clear top-level shape, and the renderer routing decision is documented and tested. The biggest architectural issue is module boundary drift in the renderer and knowledge-generation areas. - -| Concern | Findings | Affected Areas | Recommended Action | -|---------|----------|----------------|-------------------| -| ModuleBoundary | 2 | Three/Babylon scenes, knowledge note pipeline | Extract helpers behind existing preview and artifact-writer interfaces | -| DependencyDirection | 0 | None confirmed | Keep renderer-agnostic contracts in `src/render/preview` | -| StateOwnership | 1 | plugin store persistence | Serialize persisted state writes | -| BoundaryContract | 2 | converter script, knowledge artifacts | Add explicit generated-script and artifact manifest contracts | -| EvolutionRisk | 2 | renderer migration, conversion support | Reduce change blast radius with smaller modules | - -## 6. Security Concerns - -- Coverage: Medium -- Inspected evidence: command validation, remote draft URL validation, network guard, diagnostics report, npm audit, release workflow. -- Exclusions / limits: No adversarial model corpus or external draft service implementation was tested. - -No critical or high security issues were confirmed. Strong points include local-first remote drafting defaults, raw model upload blocking, converter command metacharacter rejection, Babylon network guard documentation, and zero npm audit findings. Low-severity information disclosure remains in diagnostics path reporting. - -## 7. Stability Concerns - -- Coverage: High -- Inspected evidence: store persistence, knowledge generation writes, remote draft waiting, conversion timeout, preview smoke, settings migration, diagnostics. -- Exclusions / limits: Real Obsidian verification and fault injection were not run. - -The stability risk is concentrated in async workflow boundaries: save ordering, multi-file generation, and remote dependency waits. Conversion has a 300-second timeout and verification coverage, which is positive. - -| Area | Finding | Impact | -|------|---------|--------| -| Persistence | Store saves are not serialized | Stale persisted state after rapid changes or unload | -| Knowledge artifacts | Multi-file writes are not transactional | Partial report/index/sidecar output | -| Remote draft | No timeout | Generation can wait indefinitely | - -## 8. Performance Concerns - -- Coverage: Medium -- Inspected evidence: renderer file structure, preview verification performance output, conversion cache and timeout behavior, render scale settings. -- Exclusions / limits: No profiler, benchmark, or heavy-model stress run. - -Performance is acceptable for the inspected smoke path, and `verify:preview` reported a valid rendered model with disposal audit counts at zero after model switch. The main performance debt is maintainability-driven: oversized renderer classes make it harder to reason about render loops, disposal, and per-feature costs. - -## 9. Testing Gaps - -- Coverage: High -- Inspected evidence: Vitest tests, verification scripts, coverage command, package scripts, CI workflow. -- Exclusions / limits: No mutation testing or real Obsidian smoke in this audit. - -The project has good custom verification breadth but weak unit coverage. `npm run test:coverage` reported 1.8 percent statements overall. Most renderer, store, settings, direct view, and knowledge-generation modules have zero Vitest coverage. This is the single highest-leverage cleanup area. - -## 10. Maintainability Concerns - -- Coverage: High -- Inspected evidence: file-size inventory, TODO debt markers, renderer/converter/settings/knowledge modules, lint. -- Exclusions / limits: Did not produce a full duplication report. - -Large modules are the dominant maintainability risk. The worst offenders are `src/render/three/scene.ts` at 2,265 lines, `src/render/babylon/scene.ts` at 1,739 lines, `src/view/workbench/knowledge-note.ts` at 1,351 lines, `src/view/inline/helper-buttons.ts` at 787 lines, and `src/io/conversion/adapters/freecad-converter.ts` at 737 lines. - -## 11. Design / Principles Concerns - -- Coverage: High -- Inspected evidence: renderer interfaces, source TODOs, store, knowledge pipeline, converter adapter, settings UI. -- Exclusions / limits: Static review only for many UI paths. - -### Principles Violated - -| Principle | Violations | Severity | Affected Areas | -|-----------|------------|----------|----------------| -| Single Responsibility (1.1) | 4 | Medium | renderers, knowledge note generation, settings UI, FreeCAD converter | -| File Size Limit (1.2) | 5 | Medium | `three/scene.ts`, `babylon/scene.ts`, `knowledge-note.ts`, `helper-buttons.ts`, `settings.ts` | -| Fail-Fast (4.4) | 2 | Medium | remote draft timeout, folder creation continuing after failure | -| No hidden side effects (5.3) | 1 | Medium | `generateKnowledgeNote` writes many artifacts and updates store | -| Timeout every external call (10.4) | 1 | Medium | remote draft request | - -### Principles Respected - -Renderer-agnostic preview contracts are a good boundary. Settings defaults are centralized. Converter command discovery validates shell metacharacters. Release verification checks versions, hashes, and expected assets. - -## 12. Release Concerns - -- Coverage: High -- Inspected evidence: `.github/workflows/release.yml`, package scripts, `scripts/verify-release-assets.mjs`, README release docs, SECURITY.md, npm audit. -- Exclusions / limits: No actual release was published and `verify:obsidian` was not run. - -Release maturity is strong for a community plugin. The workflow builds from source, runs typecheck/lint/knowledge/diagnostics/release verification, publishes only supported assets, and creates GitHub artifact attestations. `npm audit` found zero vulnerabilities. The main release risk is that the real Obsidian smoke test is documented but not part of the release workflow. - -## 13. Documentation Analysis - -- Coverage: Medium -- Inspected evidence: README, SECURITY.md, development handoff, preview routing matrix, changelog, cross-platform docs. -- Exclusions / limits: Did not validate every install step in a fresh Obsidian environment. - -Documentation is better than average: product contract, verification matrix, routing decisions, security token policy, and release flow are all documented. The main gap is operational: when partial knowledge-generation output occurs, there is no user-facing recovery or runbook. - -## 14. Observability / Operability Analysis - -- Coverage: Medium -- Inspected evidence: `src/utils/log.ts`, diagnostics report, converter diagnostics, verification scripts. -- Exclusions / limits: No production telemetry or alerting is expected for a local plugin. - -The diagnostics report and converter diagnostics are useful. Logs are simple console logs gated by level. Missing signals are mostly around persistence and artifact generation: failed saves and partial generations are logged/warned but not surfaced as durable status users can recover from later. - -## 15. Configuration Safety Analysis - -- Coverage: Medium -- Inspected evidence: `DEFAULT_SETTINGS`, settings UI, command discovery, remote draft URL normalization, settings migration verifier. -- Exclusions / limits: No full schema validator or fuzzing of legacy `data.json`. - -Defaults are conservative: remote drafting is local by default, raw model upload is false, converters are disabled by default, and log level defaults to warn. The code relies on TypeScript/default merging rather than a formal runtime settings schema, but `verify:settings` passed. - -## 16. Data Integrity Analysis - -- Coverage: High -- Inspected evidence: plugin store, converted asset cache, knowledge-note writes, managed index replacement, settings migration. -- Exclusions / limits: No simulated file-lock or cloud-sync failure test. - -The key data-integrity issues are save ordering and multi-file artifact generation. The converted asset cache has reasonable caps and age limits, but the knowledge output set needs a recovery marker or reconciliation routine. - -## 17. Privacy / Data Governance Analysis - -- Coverage: Medium -- Inspected evidence: remote draft sanitization, diagnostics report, README privacy claims, remote draft verifier. -- Exclusions / limits: No external draft service reviewed. - -Remote drafting is privacy-conscious: raw model upload is blocked, geometry and preview references can be withheld, and `verify:remote-draft` passed. Diagnostics path disclosure is the main remaining privacy issue. - -## 18. Accessibility / UX Correctness Analysis - -- Coverage: Medium -- Inspected evidence: helper toolbar labels, canvas keyboard handlers, inline preview UI snippets, annotations references. -- Exclusions / limits: No screen-reader/browser accessibility tree run. - -Toolbar buttons are mostly labeled, which is good. The focusable canvas needs an accessible name/role, and the keyboard shortcut flow should be included in preview verification. - -## 19. Supply Chain / Reproducibility Analysis - -- Coverage: High -- Inspected evidence: package manifests, lockfile, npm audit, GitHub workflow, release asset verification, SECURITY.md. -- Exclusions / limits: Did not inspect every transitive package manually or pin GitHub Actions by SHA. - -Supply-chain posture is good: release assets are limited and attested, `GITHUB_TOKEN` is used, and npm audit is clean. The workflow uses `npm install` rather than `npm ci`, apparently intentionally to avoid lockfile mismatch issues, so reproducibility is slightly weaker than a locked CI install but covered by version/hash verification. - -## 20. Cost / Resource Economics Analysis - -- Coverage: Medium -- Inspected evidence: remote draft client, conversion timeout/cache, render quality settings, max file setting, preview harness output. -- Exclusions / limits: No real workload cost measurements. - -Cost risk is low because this is a local plugin with optional remote drafting. Remote calls need timeout/budget behavior. Conversion and rendering have some controls, including file-size setting, conversion timeout, cache reuse, render scale, and quality settings. - -## 21. AI / LLM Safety Analysis - -- Coverage: Medium -- Inspected evidence: remote draft decision, sanitizer, normalizer tests, privacy verifier, knowledge drafting input. -- Exclusions / limits: No server-side LLM, prompt execution engine, retrieval service, or tool-calling agent exists in this repo. - -The local-first architecture avoids most AI safety hazards. The client sanitizes remote output and blocks raw model uploads. Missing items are evals for malicious remote draft output beyond current normalizer tests and timeout/budget behavior for remote calls. - -## 22. Fallback / Defensive Code Analysis - -- Coverage: Medium -- Inspected evidence: direct-view Three-to-Babylon fallback, converter cache fallback, knowledge generation warning behavior, route docs. -- Exclusions / limits: Did not run every converter fallback path. - -Fallbacks are generally intentional and documented. The main problematic fallback shape is artifact generation continuing after folder creation warnings, which can hide setup problems until later writes fail. - -## 23. Testing Authenticity Analysis - -- Coverage: High -- Inspected evidence: test files, coverage output, verification scripts, CI workflow. -- Exclusions / limits: No mutation testing. - -The custom verification scripts are authentic because they exercise browser preview, routing, generated knowledge index, diagnostics, and settings migration. The weak point is not fake tests; it is missing small unit tests around core stateful modules. - -### Valuable Tests - -- `src/io/conversion/manager.test.ts` covers conversion timeout and in-flight deduplication. -- `src/view/direct-view-routing.test.ts` covers route behavior. -- `src/view/workbench/remote-draft.test.ts` covers remote output normalization. -- Verification scripts cover knowledge index, diagnostics, settings migration, preview smoke, and release assets. - -### Missing Tests - -- Store save ordering. -- Knowledge-generation partial write recovery. -- Remote draft timeout. -- Converter script rendering/syntax. -- Accessibility checks for focusable preview surfaces. - -## 24. Type Safety Analysis - -- Coverage: Medium -- Inspected evidence: `tsc`, shared models, type assertion search, remote normalizer, component identity parsing. -- Exclusions / limits: No full runtime schema validation for persisted data or external draft JSON. - -TypeScript checks pass. External inputs are manually normalized in several places, especially persisted profiles and remote draft output. The biggest type-safety debt is boundary validation depth: TypeScript interfaces document persisted state, but runtime schemas would make legacy data and sidecar parsing safer. - -## 25. Frontend State Analysis - -- Coverage: Medium -- Inspected evidence: helper toolbar, inline code block renderer, direct view, annotation and measurement UI snippets. -- Exclusions / limits: No full browser trace or accessibility tree inspection. - -Frontend state is hand-rolled DOM state rather than framework state. That is appropriate for Obsidian, but it increases the importance of small controller modules. `helper-buttons.ts` is large enough that toolbar capability state, ARIA state, calibration panel state, and output actions should be split before more controls are added. - -## 26. Backend API Analysis - -- Coverage: Not assessed -- Inspected evidence: Repository inventory and remote draft client. -- Exclusions / limits: No backend API server is implemented in this repository. - -The project is an Obsidian plugin, not a backend API. The only endpoint contract is optional client-side `POST /draft-note`, covered under security, privacy, AI safety, and stability. - -## 27. Dependency Weight Analysis - -- Coverage: Medium -- Inspected evidence: `package.json`, `package-lock.json`, npm audit metadata, release asset size. -- Exclusions / limits: No module-level bundle analyzer. - -Runtime dependencies are intentionally small: Three.js, Babylon core, and Babylon loaders. Dev dependencies are heavier because of TypeScript, Playwright, Vitest, ESLint, and Obsidian types. This is reasonable for the domain. Release `main.js` is about 3.99 MB in the inspected verification output, which should be tracked over time. - -## 28. Code Consistency Analysis - -- Coverage: Medium -- Inspected evidence: ESLint result, source layout, error handling searches, converter adapters, renderers. -- Exclusions / limits: No automated clone detector. - -Lint passes with zero warnings. Pattern inconsistency appears in large modules rather than broad style drift: renderer responsibilities and converter script generation patterns are the consistency risks to address first. - -## 29. Comment Coverage Analysis - -- Coverage: Medium -- Inspected evidence: TODO markers, README, handoff docs, inline comments in key modules. -- Exclusions / limits: No doc-comment coverage rule exists. - -Comments are generally useful and debt markers follow the repo convention. The best comment work now is not adding prose everywhere; it is converting existing TODO(P2) markers into small tracked cleanup issues and documenting recovery behavior for knowledge generation. - ---- - -## 30. Principles Compliance - -The codebase follows useful large-scale principles in several places: renderer-agnostic interfaces, local-first defaults, explicit routing decisions, and release verification. The main principle violations are SRP, file-size discipline, fail-fast timeout handling, and atomicity of multi-step side effects. - -### Principles Violated - -| Principle | Violations | Severity | Affected Areas | -|-----------|------------|----------|----------------| -| Single Responsibility (SRP) | 4 | Medium | renderer scenes, knowledge generation, settings UI, FreeCAD converter | -| File Size Limit | 5 | Medium | major renderer/UI/converter modules | -| Fail-Fast | 2 | Medium | remote draft wait, folder creation warning path | -| Timeout Every External Call | 1 | Medium | remote draft request | -| No Hidden Side Effects | 1 | Medium | knowledge generation writes and store updates | - -### Principles Respected - -- Dependency direction is mostly clean: domain models do not import runtime code. -- Renderer routing is centralized and documented. -- Defaults are privacy-preserving. -- Converter execution uses `execFile`, not shell string execution. -- Release assets are verified and attested. - ---- - -## 31. Architecture Analysis - -### Architecture Summary - -| Subtype | Count | Affected Areas | Recommended Action | -|---------|-------|----------------|-------------------| -| ModuleBoundary | 2 | renderers, knowledge generation | Split by controller/helper responsibility | -| DependencyDirection | 0 | none confirmed | Keep existing preview/domain boundaries | -| StateOwnership | 1 | plugin store | Add serialized persistence owner | -| BoundaryContract | 2 | converter script, artifact generation | Add explicit script/artifact contracts | -| EvolutionRisk | 2 | renderer migration, CAD conversion | Add narrow tests before refactors | - -The project architecture is serviceable. The path forward is extraction, not rewrite: keep the existing public interfaces and move volatile logic out of large classes. - -## 32. Documentation Analysis - -### Documentation Summary - -| Subtype | Count | Affected Docs | Recommended Action | -|---------|-------|---------------|-------------------| -| UserDocs | 0 | README | Keep current install/usage docs | -| OperatorDocs | 1 | README / troubleshooting | Add recovery notes for partial knowledge output | -| DeveloperDocs | 0 | development handoff | Keep verification matrix updated | -| ApiDocs | 1 | remote draft contract | Document timeout and response contract after implementation | -| DecisionRecord | 0 | routing docs | Existing renderer decision docs are useful | -| StaleDocs | 0 | none confirmed | Continue changelog discipline | - -## 33. Privacy / Data Governance Analysis - -### Privacy Summary - -| Subtype | Count | Affected Data | Recommended Action | -|---------|-------|---------------|-------------------| -| DataInventory | 1 | model paths, annotations, reports, sidecars | Add a compact data inventory table to docs | -| Minimization | 0 | remote draft | Existing defaults minimize remote data | -| AccessBoundary | 0 | local vault | Obsidian vault access is user-local | -| Retention | 1 | snapshots, sidecars, part notes | Document retention/cleanup behavior | -| Deletion | 1 | generated artifacts | Add cleanup/reconciliation command later | -| Export | 0 | diagnostics | Add redacted diagnostics mode | -| TelemetryPrivacy | 0 | none | No telemetry observed | - -## 34. Accessibility / UX Correctness Analysis - -### Accessibility Summary - -| Subtype | Count | Affected Workflows | Recommended Action | -|---------|-------|-------------------|-------------------| -| SemanticStructure | 1 | focusable preview canvas | Add accessible name/role | -| KeyboardFocus | 1 | inline preview shortcuts | Verify keyboard path in preview harness | -| ResponsiveVisual | 0 | not confirmed | Keep visual harness screenshots | -| ErrorState | 0 | load feedback | Existing feedback component uses text | -| LoadingState | 0 | direct view | Existing generation guard present | -| UXStateCorrectness | 0 | not confirmed | Continue route/status panel checks | - -## 35. Supply Chain / Reproducibility Analysis - -### Supply Chain Summary - -| Subtype | Count | Affected Surface | Recommended Action | -|---------|-------|------------------|-------------------| -| DependencyProvenance | 0 | npm packages | npm audit clean | -| Reproducibility | 1 | workflow install | Consider `npm ci` once lockfile stability issue is resolved | -| CIIntegrity | 1 | GitHub Actions tags | Consider SHA pinning for stricter provenance | -| ArtifactProvenance | 0 | release assets | Attestations are present | -| RegistryHygiene | 0 | package release | Private package; release assets limited | - -## 36. Cost / Resource Economics Analysis - -### Cost Summary - -| Subtype | Count | Cost Driver | Recommended Action | -|---------|-------|-------------|-------------------| -| UnboundedWork | 1 | remote request wait | Add timeout | -| ExternalApiCost | 1 | optional draft service | Add retry/rate/budget guidance if remote service becomes shared | -| LLMCost | 0 | client only | No model billing in repo | -| InfrastructureSizing | 0 | local plugin | Not applicable | -| ObservabilityCost | 0 | console logs | Low volume | -| CostVisibility | 1 | release bundle size | Track bundle size in release notes | - -## 37. AI / LLM Safety Analysis - -### AI Safety Summary - -| Subtype | Count | Boundary Crossed | Recommended Action | -|---------|-------|------------------|-------------------| -| PromptInjection | 0 | client only | No prompt tool execution found | -| ToolAuthorization | 0 | none | Model output does not trigger tools | -| RAGLeakage | 0 | none | No retrieval service | -| ModelFallback | 0 | none | No model fallback implemented | -| OutputValidation | 1 | remote draft response | Keep normalizer tests and add malicious markdown cases | -| EvalGap | 1 | remote draft safety | Add negative-case eval fixtures if server is added | -| AbuseCost | 1 | remote draft endpoint | Add timeout/budget | - -## 38. Observability / Operability Analysis - -### Signal Summary - -| Subtype | Count | Critical Signals Missing | Recommended Action | -|---------|-------|--------------------------|-------------------| -| Logging | 1 | save/generation failure durability | Surface persistent warnings | -| Metrics | 0 | local plugin | Not applicable | -| Tracing | 0 | local plugin | Not applicable | -| HealthCheck | 1 | converter setup | Existing diagnostics are good; add recovery status | -| Alerting | 0 | local plugin | Not applicable | -| Runbook | 1 | partial knowledge generation | Add recovery guidance | -| Debuggability | 0 | diagnostics | Existing diagnostics are useful | - -## 39. Configuration Safety Analysis - -### Configuration Summary - -| Subtype | Count | Affected Keys / Files | Recommended Action | -|---------|-------|-----------------------|-------------------| -| SchemaValidation | 1 | persisted settings | Add runtime schema for loaded data | -| UnsafeDefault | 0 | defaults | Defaults are conservative | -| EnvironmentSeparation | 0 | converter env vars | Discovery is centralized | -| SecretConfig | 0 | remote URL | Diagnostics omit service URL | -| FeatureFlag | 1 | Experimental Three workbench | Keep tests/docs tied to flag | -| ConfigDocs | 0 | README/settings | Adequate coverage | - -## 40. Data Integrity Analysis - -### Integrity Summary - -| Subtype | Count | Invariants at Risk | Recommended Action | -|---------|-------|-------------------|-------------------| -| TransactionBoundary | 1 | report/index/sidecar/profile consistency | Add generation manifest | -| Idempotency | 1 | repeated note generation | Make artifact writer idempotent and recoverable | -| ConcurrencyConsistency | 1 | persisted store state | Serialize saves | -| MigrationSafety | 0 | settings | `verify:settings` passed | -| InvariantValidation | 1 | persisted profile records | Add runtime schema over time | -| BackupRestore | 1 | generated artifacts | Add reconciliation command | -| Reconciliation | 1 | profiles vs sidecars | Rebuild links from sidecars/index | - -## 41. Fallback / Defensive Code Analysis - -### Fallback Summary - -| Subtype | Count | KeepWithAlert | FailFast | Remove | -|---------|-------|---------------|----------|--------| -| SilentFallback | 1 | 1 | 0 | 0 | -| EmptyCatch | 1 | 0 | 1 | 0 | -| CompatibilityBranch | 2 | 2 | 0 | 0 | -| SilentCorrection | 0 | 0 | 0 | 0 | -| DefensiveGuess | 0 | 0 | 0 | 0 | - -The Three-to-Babylon route fallback is appropriate and documented. The folder-create warning path in knowledge generation should become either fail-fast or explicitly recoverable. - -## 42. Testing Authenticity Analysis - -### Confidence Assessment - -| Test Area | Real Confidence | Risk | Action | -|-----------|-----------------|------|--------| -| Preview verification | High | Browser route regressions | Keep and expand accessibility checks | -| Knowledge index verifier | High | Managed index refresh regressions | Keep | -| Remote draft verifier | High | Privacy regressions | Add timeout case | -| Vitest unit suite | Medium | Core modules are mostly uncovered | Augment | -| Release verifier | High | Asset/version mismatch | Keep | - -### Valuable Tests - -The verification scripts exercise behavior that unit tests cannot easily cover, especially browser rendering and generated markdown/index behavior. - -### Suspicious Tests - -No over-mocked tests were confirmed. The concern is missing coverage, not fake coverage. - -### Missing Tests - -Add focused tests for store persistence ordering, knowledge artifact partial failures, converter script rendering, and accessibility names. - ---- - -## 43. Type Safety Analysis - -### Summary - -| Subtype | Count | Critical | High | Medium | Low | -|---------|-------|----------|------|--------|-----| -| UnsafeBlock | 0 | 0 | 0 | 0 | 0 | -| TypeAssertion | 1 | 0 | 0 | 0 | 1 | -| InputBoundary | 1 | 0 | 0 | 1 | 0 | -| OutputLeak | 0 | 0 | 0 | 0 | 0 | -| BooleanTrap | 0 | 0 | 0 | 0 | 0 | -| StringlyTyped | 1 | 0 | 0 | 0 | 1 | -| ErrorType | 1 | 0 | 0 | 0 | 1 | - -The type system is used well enough for current scale. Runtime schemas at persisted and sidecar boundaries would improve safety more than broad type refactors. - -## 44. Frontend State Analysis - -### Summary - -| Subtype | Count | Affected Components | -|---------|-------|-------------------| -| ComponentSize | 2 | helper toolbar, direct view | -| StateDuplication | 0 | none confirmed | -| PropDrilling | 0 | not applicable | -| EffectChain | 0 | no framework effects | -| UIBusinessCoupling | 1 | helper toolbar capability sync | -| DOMasState | 1 | toolbar/calibration panel state | -| RequestState | 1 | direct model load generation guard | -| RenderPerf | 0 | not confirmed | - -## 45. Backend API Analysis - -### Summary - -| Subtype | Count | Affected Endpoints | -|---------|-------|-------------------| -| ApiConsistency | 0 | not applicable | -| Validation | 0 | optional client only | -| Auth | 0 | not applicable | -| NplusOne | 0 | not applicable | -| Caching | 0 | not applicable | -| ErrorResponse | 0 | optional remote service not in repo | -| BusinessLogic | 0 | not applicable | -| DataFlow | 0 | client request only | - -No backend API server was present. - -## 46. Dependency Weight Analysis - -### Dependency Scoreboard - -| Dependency | Status | Weight | Transitives | Used For | Recommended Action | -|------------|--------|--------|-------------|----------|-------------------| -| `three` | Healthy | large runtime | included in lockfile | primary single-model renderer | Keep | -| `@babylonjs/core` | Healthy but heavy | large runtime | included in lockfile | 3dgrid and fallback renderer | Keep until route migration evidence changes | -| `@babylonjs/loaders` | Healthy | medium runtime | included in lockfile | GLTF/OBJ/Babylon loader support | Keep | -| `playwright-core` | Healthy dev dependency | dev only | many transitive dependencies | preview harness | Keep | -| TypeScript/Vitest/ESLint | Healthy dev dependencies | dev only | normal | checks and tests | Keep | - -## 47. Recommended Fix Order - -### Fix Immediately - -No critical or high-severity issues were found. - -### Fix Before Stable Release - -1. Serialize plugin store saves and add save-order tests. -2. Add a pending/success generation marker for knowledge artifacts. -3. Add remote draft timeout behavior. -4. Add unit tests around store, knowledge artifact writes, and converter script rendering. - -### Schedule Later - -1. Split Three/Babylon preview classes by controller responsibility. -2. Move generated converter scripts into first-class template/script assets. -3. Add redacted diagnostics mode. -4. Add accessibility checks for focusable canvases. - -### Ignore for Now - -Do not rewrite the renderer stack wholesale. The current split between Three and Babylon is documented, tested, and appropriate for the product contract. - -## 48. Quick Wins - -| Quick win | Value | Effort | -|-----------|-------|--------| -| Add `aria-label` to focusable preview canvases | Improves keyboard/screen-reader usability | 1-2 hours | -| Add remote draft timeout wrapper | Prevents stuck note generation | 3-6 hours | -| Add store save-order unit test | Locks down persistence correctness | 2-3 hours | -| Add redacted diagnostics mode | Reduces public support-report privacy risk | 2-4 hours | -| Add `python -m py_compile` check for rendered CAD script | Catches syntax regressions before users hit converters | 2-4 hours | - -## 49. Long-term Refactor Plan - -1. Renderer modularization: extract shared measurement, evidence, selection, camera, and lifecycle helpers while keeping `WorkbenchPreview` stable. Test each extracted helper with pure unit tests and retain preview harness coverage. -2. Knowledge artifact writer: introduce a small writer/reconciler module responsible for pending/success state, idempotent writes, and recovery. Test with a fake vault that can fail at each write phase. -3. Converter script assets: move embedded Python into script templates with syntax checks and a minimal contract test. Keep TypeScript responsible for invocation, cache identity, and output validation only. -4. Testing strategy cleanup: keep browser/Obsidian verification for integrated behavior, but add a unit-test floor for store, routing, conversion, artifact writing, and remote draft edge cases. diff --git a/docs/0.6.0-plus-upgrade-plan.md b/docs/0.6.0-plus-upgrade-plan.md new file mode 100644 index 0000000..120793f --- /dev/null +++ b/docs/0.6.0-plus-upgrade-plan.md @@ -0,0 +1,524 @@ +# AI Model Workbench 0.6.0+ Upgrade Plan + +This document defines the upgrade plan for AI Model Workbench after `0.5.8`. +It turns the current product direction into a staged release path for `0.6.0` +and later minor releases. + +## 1. Executive Summary + +`0.6.0` should be a reliability and workflow-quality release, not a broad +renderer rewrite. The project already has a stable product contract: + +- Three.js is the default single-model preview backend. +- Babylon.js remains the capability backend for `3dgrid`, conservative + fallback routes, and advanced workbench paths. +- Knowledge generation is local-first and should continue to produce linked + reports, sidecars, indexes, preview evidence, and part notes. +- Direct file view is now the main user-facing workbench surface for model + review, annotations, measurements, and registered part reuse feedback. + +The `0.6.0+` upgrade should therefore focus on five outcomes: + +1. Make direct view and inline preview behavior feel release-grade across + desktop and mobile. +2. Stabilize the measurement, annotation, and model evidence contracts across + Three.js and Babylon.js. +3. Reduce the size and coupling of the largest coordinator classes. +4. Harden conversion, diagnostics, and knowledge generation for real support + cases. +5. Improve verification gates so release candidates are easier to trust. + +## 2. Release Themes + +### 2.1 `0.6.0`: Workbench Reliability Release + +Primary promise: model review, annotation, measurement, and knowledge generation +should behave consistently on the supported single-model paths. + +In scope: + +- Direct file view polish and stability. +- Measurement tool completion, export, calibration, and visual persistence. +- Annotation overlay reliability on Three.js and Babylon.js. +- Registered part reuse feedback in the direct workbench sidebar. +- Knowledge generation failure handling and stale pending recovery. +- Diagnostics that help debug renderer, conversion, and knowledge state. +- Verification coverage for the direct view and inline surfaces. + +Out of scope: + +- Removing Babylon.js. +- Moving `3dgrid` to Three.js. +- Broad production workbench migration beyond the existing guarded + Experimental Three workbench route. +- Adding remote model upload. +- Introducing a new UI framework. + +### 2.2 `0.6.x`: Three Fidelity, Maintainability, And Converter Hardening + +Primary promise: make the Three.js direct-format path measurable and trustworthy +while reducing maintenance cost and improving converter reliability. + +Candidate releases: + +- `0.6.1`: direct-view/inline bugfixes found after `0.6.0`. +- `0.6.2`: Three.js visual fidelity for GLB/GLTF/STL/PLY/OBJ. +- `0.6.3`: conversion diagnostics and cache robustness. +- `0.6.4`: codebase decomposition and renderer contract tests. + +### 2.3 `0.7.0`: Capability Expansion Decision Point + +Primary promise: decide whether to expand Three.js workbench capability or keep +the split backend architecture for the next major product phase. + +Decision inputs: + +- Real user reports from `0.6.x`. +- Preview harness stability data. +- Size and performance comparison for Three.js versus Babylon.js routes. +- Maintenance cost after class decomposition. + +Possible outcomes: + +- Keep Babylon.js as long-term capability backend. +- Promote a broader Three.js direct workbench path for specific formats. +- Reopen `3dgrid` migration only if product value justifies it. + +## 3. Current Architecture Reading + +The current core flow is: + +```text +src/main.ts + -> registers Obsidian commands, views, processors, settings + -> direct view / code block / live preview + -> prepareModelInput() + -> conversion or direct source + -> resolvePreviewRoute() + -> Three.js or Babylon.js preview + -> model evidence / annotations / measurements + -> knowledge report, sidecar, index, part notes +``` + +Important files: + +- `src/main.ts` - plugin lifecycle and registration. +- `src/view/direct-view.ts` - direct workbench coordinator. +- `src/view/inline/code-block.ts` - Markdown `3d` and `3dgrid` processors. +- `src/view/inline/live-preview.ts` - CodeMirror embed widget. +- `src/render/preview/types.ts` - renderer capability contract. +- `src/render/preview/routing.ts` - canonical backend route decision. +- `src/render/three/scene.ts` - Three.js preview implementation. +- `src/render/babylon/scene.ts` - Babylon.js preview implementation. +- `src/io/model-pipeline.ts` - direct/converted model preparation. +- `src/io/conversion/*` - converter manager, adapters, cache, errors. +- `src/view/workbench/knowledge-note.ts` - knowledge artifact writer. +- `src/view/workbench/analysis-result.ts` - local evidence and part matching. +- `src/diagnostics/report.ts` - support report generation. + +## 4. Upgrade Requirements + +Add or update these requirements in `docs/requirements-tracker.md` when +implementation starts. + +| ID | Requirement | Priority | Target | +|----|-------------|----------|--------| +| REQ-009 | Direct view preserves preview, annotation, measurement, and knowledge actions across Three/Babylon routes | P0 | `0.6.0` | +| REQ-010 | Measurement records are calibrated, persistent during mode changes, copyable as Markdown, and covered in preview verification | P1 | `0.6.0` | +| REQ-011 | Renderer capability contracts are tested for Three.js and Babylon.js so toolbar actions cannot silently drift | P1 | `0.6.x` | +| REQ-012 | Conversion diagnostics explain missing, disabled, stale, timed out, and unsafe converter paths without leaking local command details | P1 | `0.6.x` | +| REQ-013 | Knowledge generation writes pending, failed, and success state consistently across partial artifact writes | P0 | `0.6.0` | +| REQ-014 | Large coordinator classes are split without changing route behavior | P2 | `0.6.x` | +| REQ-015 | Three.js direct-format visual fidelity and smoothness are measurable for format support, color pipeline, precision, small parts, and frame budget | P1 | `0.6.x` | + +## 5. Milestones + +### Milestone A: Stabilize The Current Working Tree + +Target: before any `0.6.0` release candidate. + +Deliverables: + +- Confirm the existing measurement/direct-view changes are intentional. +- Rebuild `main.js` from source. +- Keep `.gitignore` cleanup and artifact deletion in a separate commit from + feature changes. +- Run the minimum verification set. + +Verification: + +```bash +npm run typecheck +npm test +npm run build +npm run verify:preview +npm run verify:preview:success +npm run verify:release +``` + +Exit criteria: + +- No unexplained generated bundle delta. +- No ignored temporary artifacts in `git status --short --ignored` except + expected local dependency folders such as `node_modules/` and `.venv/`. +- Preview route behavior matches `docs/preview-routing-matrix.md`. + +### Milestone B: Direct View Release Polish + +Target: `0.6.0`. + +Deliverables: + +- Keep direct view as the primary model review surface. +- Make the sidebar state deterministic: + - knowledge status + - registered part candidate count + - strongest registered matches + - report/index open actions +- Preserve annotation mode and mobile interaction behavior without trapping + normal scroll. +- Ensure loading, failure, fallback, and interrupted-load states cleanly tear + down old previews. +- Confirm direct view uses Three.js for direct single-model paths and Babylon.js + for converted/conservative workbench paths as documented. + +Implementation targets: + +- Extract layout creation from `DirectModelView.loadModel()`. +- Extract workbench/sidebar rendering from `src/view/direct-view.ts`. +- Keep routing behavior in `src/view/direct-view-routing.ts` and + `src/render/preview/routing.ts`. + +Suggested file shape: + +```text +src/view/direct/ + layout.ts + load-model.ts + sidebar.ts + workbench-panel.ts + annotations.ts +``` + +Acceptance criteria: + +- Direct GLB/GLTF/STL/PLY/OBJ paths load through Three.js when settings allow. +- Converted STEP/FBX/3MF/DAE paths keep conservative fallback behavior. +- Failed converter paths show clear UI feedback and do not leave dead canvases. +- Annotation add/edit/delete still updates `modelAssetProfiles`. +- Registered matches refresh after knowledge note generation. +- Mobile direct view keeps scroll/interact mode understandable and reversible. + +Verification: + +```bash +npm run typecheck +npm test +npm run verify:preview +npm run verify:preview:success +npm run verify:obsidian -- --clean +``` + +### Milestone C: Measurement Tool Completion + +Target: `0.6.0`. + +Deliverables: + +- One shared measurement contract across Three.js and Babylon.js. +- Calibrated units and per-axis deltas. +- Completed measurements remain visible when measurement mode is turned off. +- Unfinished endpoints cancel cleanly. +- Markdown export is stable and tested. +- Clear/copy/export toolbar actions are verified. + +Implementation targets: + +- Keep unit math in `src/render/preview/measurement.ts`. +- Keep renderer-specific drawing in `src/render/three/scene.ts` and + `src/render/babylon/scene.ts` until the renderer classes are decomposed. +- Avoid duplicating unit formatting between toolbar, renderer, and tests. + +Acceptance criteria: + +- `supportsMeasurementPreview()` returns true only when the full measurement + contract is available. +- Three.js and Babylon.js produce equivalent reading/export formats. +- Copy/export behavior handles empty records without throwing. +- Measurement labels update after camera movement and resize. + +Verification: + +```bash +npm run typecheck +npm test -- --run src/render/preview/measurement.test.ts +npm run verify:preview +npm run verify:preview:success +``` + +### Milestone D: Knowledge Generation Consistency + +Target: `0.6.0`. + +Deliverables: + +- Preserve the current local-first contract. +- Keep optional remote draft bounded by timeout and sanitized input. +- Ensure partial write failures leave useful failed state. +- Preserve user-written index content outside managed markers. +- Keep generated part note drafts capped and linked from the index/report. + +Implementation targets: + +- `src/view/workbench/knowledge-note.ts` +- `src/view/workbench/analysis-result.ts` +- `src/view/workbench/remote-draft.ts` +- `src/store/plugin-store.ts` + +Acceptance criteria: + +- `lastKnowledgeGeneration` is set to `pending` before artifact writes. +- Failed sidecar/report/index writes set `failed` with warning count. +- Success updates profile paths and registered parts atomically from the final + analysis object. +- Stale pending generation is surfaced in the next run. +- Remote draft cannot include raw model bytes. +- Geometry and preview references are stripped unless explicitly enabled. + +Verification: + +```bash +npm run typecheck +npm test -- --run src/view/workbench/knowledge-note.test.ts +npm test -- --run src/view/workbench/remote-draft.test.ts +npm run verify:knowledge-index +npm run verify:remote-draft +``` + +### Milestone E: Converter And Diagnostics Hardening + +Target: `0.6.x`. + +Deliverables: + +- Better user-facing converter error categories: + - converter disabled + - converter missing + - unsafe command path + - timeout + - stale cache + - output missing +- Diagnostics should include enough renderer/conversion state to debug support + issues while redacting sensitive local paths by default. +- Conversion cache should remain bounded and reject incompatible records. + +Implementation targets: + +- `src/io/conversion/errors.ts` +- `src/io/conversion/command-discovery.ts` +- `src/io/conversion/conversion-service.ts` +- `src/io/cache/converted-asset-cache.ts` +- `src/diagnostics/report.ts` + +Acceptance criteria: + +- Missing converter UI tells the user which converter id is required. +- Timeout does not block preview indefinitely. +- Existing `.ai3d-converted.glb` is reused only when newer than source. +- Diagnostics omit draft service URL and converter command paths. +- Diagnostics redact vault-relative paths unless explicitly requested. + +Verification: + +```bash +npm run typecheck +npm test -- --run src/io/conversion/manager.test.ts +npm test -- --run src/io/cache/converted-asset-cache.test.ts +npm run verify:diagnostics +``` + +### Milestone F: Renderer Class Decomposition + +Target: `0.6.x`, after `0.6.0` is stable. + +Deliverables: + +- Split large scene classes without route behavior changes. +- Add capability contract tests or smoke checks for both renderers. +- Reduce duplicated measurement, selection, model summary, and disposal logic. + +Suggested decomposition: + +```text +src/render/three/ + scene.ts # facade only + loader.ts + camera.ts + interactions.ts + measurement-layer.ts + annotation-provider.ts + evidence.ts + disposal.ts + +src/render/babylon/ + scene.ts # facade only + loader.ts + camera.ts + interactions.ts + measurement-layer.ts + annotation-provider.ts + evidence.ts + disposal.ts +``` + +Acceptance criteria: + +- `createThreeModelPreview()` and `createBabylonModelPreview()` keep the same + exported signatures. +- `ModelPreview`, `AnnotationPreview`, and `WorkbenchPreview` behavior remains + unchanged. +- Route matrix does not change unless intentionally documented. +- Disposal audit still reports model-switch and destroy cleanup. + +Verification: + +```bash +npm run typecheck +npm test +npm run verify:preview +npm run verify:preview:success +``` + +## 6. UI/UX Direction + +`0.6.0` should feel more like a compact technical workbench than a demo. + +Direct view priorities: + +- Preview first, knowledge sidebar second, metrics below or beside the model. +- Keep action labels clear where the action is not obvious. +- Keep icon-only preview toolbar controls for common model actions. +- Do not add a marketing-style landing surface inside the plugin. +- Preserve dense, scannable state for repeated model review. + +Mobile priorities: + +- Prevent accidental page trapping while interacting with WebGL. +- Keep scroll/interact mode explicit. +- Prefer simplified single-column direct view layout. +- Avoid controls that require precise hover. + +Knowledge workflow priorities: + +- Make the index the stable entry point. +- Keep generated sections managed and user notes preserved. +- Keep part notes as drafts until the user promotes them. +- Surface registered reuse matches in direct view before requiring a full + report. + +## 7. Data And Compatibility Rules + +- Any persisted setting change must update `src/domain/models.ts`, + `src/domain/constants.ts`, and `src/store/plugin-store.ts` together. +- Missing legacy fields must normalize safely. +- `data.json` migration must be covered by `npm run verify:settings`. +- Vault paths must remain `/` separated. +- Filesystem paths must stay OS-native and pass through existing helpers. +- Never store raw model bytes in plugin state. +- Do not broaden remote draft payloads without updating privacy docs and tests. + +## 8. Verification Gates + +Use focused checks during development, then full gates for release candidates. + +### Per-change Minimums + +| Change area | Minimum verification | +|-------------|----------------------| +| Direct view, toolbar, measurement, route | `npm run typecheck`, `npm run verify:preview` | +| Renderer capability or interaction | `npm run typecheck`, `npm run verify:preview:success` | +| Knowledge generation | `npm run verify:knowledge-index` | +| Remote draft/privacy | `npm run verify:remote-draft` | +| Settings/state migration | `npm run verify:settings` | +| Converter behavior | `npm run typecheck`, relevant Vitest files, `npm run verify:diagnostics` | +| Release assets | `npm run build`, `npm run verify:release` | + +### `0.6.0` Release Candidate Gate + +```bash +npm run typecheck +npm test +npm run build +npm run verify:preview +npm run verify:preview:success +npm run verify:settings +npm run verify:knowledge-index +npm run verify:remote-draft +npm run verify:diagnostics +npm run verify:release +npm run verify:obsidian -- --clean +``` + +`verify:obsidian` may be skipped only when the host cannot launch Obsidian. If +skipped, record the reason in the release notes or handoff. + +## 9. Release And Git Strategy + +Recommended commit separation: + +1. Workspace cleanup and `.gitignore` changes. +2. Measurement/direct-view feature changes. +3. Knowledge generation or diagnostics hardening. +4. Refactors with no behavior changes. +5. Generated bundle update from `npm run build`. + +Before tagging: + +- Confirm `package.json`, `manifest.json`, and `versions.json` agree. +- Confirm `CHANGELOG.md` has a `0.6.0` section. +- Run the release candidate gate. +- Scan release artifacts for obvious secrets or local absolute paths. +- Publish through GitHub Actions, not a pasted personal token. + +## 10. Risk Register + +| Risk | Impact | Mitigation | +|------|--------|------------| +| Renderer behavior drifts between Three.js and Babylon.js | Toolbar actions become inconsistent | Capability contract tests and preview harness coverage | +| Direct view remains too large to safely change | Bugs cluster in `direct-view.ts` | Extract layout/sidebar/loading helpers after `0.6.0` behavior stabilizes | +| Conversion failures are hard to diagnose | Users cannot recover without DevTools | Improve error categories and diagnostics | +| Knowledge generation leaves partial artifacts | User sees stale or confusing notes | Pending/failed state, stale pending warning, managed index sections | +| Generated bundle diverges from source | Release review becomes unreliable | Rebuild and verify release assets before commit/tag | +| Mobile WebGL traps scrolling | Mobile preview feels broken | Keep explicit scroll/interact mode and mobile harness checks | + +## 11. Rollback Plan + +Renderer rollback: + +- Set preview rollout to `babylon-safe`. +- Keep `useThreeRenderer=false` as the compatibility escape hatch. +- Do not remove Babylon.js routes in `0.6.x`. + +Knowledge rollback: + +- Keep generated artifacts as normal Markdown/JSON files. +- A failed run must not erase existing user-written index notes. +- Stale pending state can be replaced by a successful later run. + +Conversion rollback: + +- Disable converter ids in settings. +- Existing direct formats should continue to load without converter support. +- Cached conversion records can be cleared via the command palette action. + +## 12. Definition Of Done For `0.6.0` + +`0.6.0` is ready when: + +- Direct view is stable enough to be the recommended model review surface. +- Measurement workflows pass unit and preview harness checks. +- Knowledge generation writes report, sidecar, index, snapshots, and part notes + with consistent success/failure state. +- Diagnostics are useful and redacted by default. +- Release assets are rebuilt and verified. +- The route matrix, requirements tracker, changelog, and README do not conflict. diff --git a/docs/README.md b/docs/README.md index b7de308..a2d877e 100644 --- a/docs/README.md +++ b/docs/README.md @@ -12,6 +12,8 @@ Use this page to choose the right document before changing code. ## Product And Architecture Specs - `preview-routing-matrix.md` - canonical Three/Babylon routing contract and smoke tests. +- `0.6.0-plus-upgrade-plan.md` - staged upgrade plan for the `0.6.0+` + reliability, workflow, and maintainability releases. - `requirements-tracker.md` - stable product requirements, statuses, acceptance criteria, and verification mapping. - `threejs-migration-roadmap.md` - Three.js migration history, target state, and reopen @@ -41,6 +43,7 @@ Use this page to choose the right document before changing code. | If you are changing... | Read first | |------------------------|------------| | Renderer route, rollout, annotation preview | `preview-routing-matrix.md` | +| 0.6.0+ release planning or upgrade sequencing | `0.6.0-plus-upgrade-plan.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` | diff --git a/docs/development-handoff.md b/docs/development-handoff.md index 292553a..b4b3089 100644 --- a/docs/development-handoff.md +++ b/docs/development-handoff.md @@ -99,6 +99,7 @@ Spec docs: | `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/0.6.0-plus-upgrade-plan.md` | `0.6.0+` reliability, workflow, maintainability, and release sequencing | | `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 | diff --git a/docs/requirements-tracker.md b/docs/requirements-tracker.md index 1c354f6..3b57f8e 100644 --- a/docs/requirements-tracker.md +++ b/docs/requirements-tracker.md @@ -35,6 +35,13 @@ future agent notes can refer to the same requirement over time. | REQ-006 | Diagnostics reports expose support context without leaking draft service URLs, converter command paths, or vault-relative model/note 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 | Verified | `npm run verify:obsidian -- --clean` | +| REQ-009 | Direct view preserves preview, annotation, measurement, and knowledge actions across Three/Babylon routes | P0 | In Progress | `npm run verify:preview`, `npm run verify:preview:success`, `npm run verify:obsidian -- --clean` | +| REQ-010 | Measurement records are calibrated, persistent during mode changes, copyable as Markdown, and covered in preview verification | P1 | In Progress | `npm test -- --run src/render/preview/measurement.test.ts`, `npm run verify:preview:success` | +| REQ-011 | Renderer capability contracts are tested for Three.js and Babylon.js so toolbar actions cannot silently drift | P1 | Verified | `npm test -- --run src/render/preview/types.test.ts`, `npm run typecheck`, `npm run verify:preview:success` | +| REQ-012 | Conversion diagnostics explain missing, disabled, stale, timed out, and unsafe converter paths without leaking local command details | P1 | Accepted | `npm run verify:diagnostics`, converter unit tests | +| REQ-013 | Knowledge generation writes pending, failed, and success state consistently across partial artifact writes | P0 | In Progress | `npm run verify:knowledge-index`, knowledge-note unit tests | +| REQ-014 | Large coordinator classes are split without changing route behavior | P2 | Accepted | `npm run typecheck`, `npm test`, `npm run verify:preview` | +| REQ-015 | Three.js direct-format visual fidelity and smoothness are measurable for format support, color pipeline, precision, small parts, and frame budget | P1 | Verified | `npm run typecheck`, `npm test`, `npm run verify:preview`, `npm run verify:preview:success`, `npm run verify:diagnostics`, `npm run build`, `npm run verify:release` | ## Active Requirement Details @@ -90,6 +97,237 @@ future agent notes can refer to the same requirement over time. - Verification: - `npm run verify:obsidian -- --clean` +### REQ-009: Direct View Workbench Reliability + +- Status: In Progress +- Priority: P0 +- User value: Direct file view should be the dependable place to inspect a model, add annotations, take measurements, generate knowledge notes, and inspect registered part reuse without caring which renderer backend was selected. +- Scope: + - Direct file view layout, loading, failure, fallback, and teardown behavior. + - Direct view annotation mode and mobile scroll/interact mode. + - Direct view measurement toolbar actions. + - Direct workbench sidebar knowledge status and registered part match rows. + - Route correctness for Three.js direct formats and Babylon.js conservative paths. +- Out of scope: + - Removing Babylon.js. + - Moving `3dgrid` to Three.js. + - Broad production workbench migration beyond the guarded Experimental Three workbench route. +- Acceptance criteria: + - Direct GLB/GLTF/STL/PLY/OBJ paths load through Three.js when settings allow. + - Converted STEP/FBX/3MF/DAE paths keep conservative fallback behavior. + - Failed converter paths show clear UI feedback and do not leave dead canvases. + - Annotation add/edit/delete still updates `modelAssetProfiles`. + - Registered matches refresh after knowledge note generation. + - Mobile direct view keeps scroll/interact mode understandable and reversible. +- Verification: + - `npm run typecheck` + - `npm test` + - `npm run verify:preview` + - `npm run verify:preview:success` + - `npm run verify:obsidian -- --clean` +- Related files: + - `docs/0.6.0-plus-upgrade-plan.md` + - `src/view/direct-view.ts` + - `src/view/direct-view-routing.ts` + - `src/render/preview/routing.ts` + - `src/view/inline/helper-buttons.ts` + +### REQ-010: Measurement Workflow Completion + +- Status: In Progress +- Priority: P1 +- User value: Users should be able to measure model distances repeatedly, calibrate units, keep completed records visible, and copy measurements into Markdown notes. +- Scope: + - Shared measurement math, unit normalization, labels, and Markdown export. + - Three.js and Babylon.js measurement behavior. + - Toolbar actions for measure, clear, copy, and calibration. + - Preview harness coverage for completed and cancelled measurements. +- Out of scope: + - Persisting measurements in `data.json`. + - CAD-grade tolerancing or dimension constraints. +- Acceptance criteria: + - `supportsMeasurementPreview()` returns true only when the full measurement contract is available. + - Three.js and Babylon.js produce equivalent reading/export formats. + - Completed measurements remain visible when measurement mode is turned off. + - Unfinished endpoints cancel cleanly. + - Copy/export behavior handles empty records without throwing. + - Measurement labels update after camera movement and resize. +- Verification: + - `npm run typecheck` + - `npm test -- --run src/render/preview/measurement.test.ts` + - `npm run verify:preview` + - `npm run verify:preview:success` +- Related files: + - `src/render/preview/measurement.ts` + - `src/render/preview/types.ts` + - `src/render/three/scene.ts` + - `src/render/babylon/scene.ts` + - `src/view/inline/helper-buttons.ts` + +### REQ-011: Renderer Capability Contract Coverage + +- Status: Verified +- Priority: P1 +- User value: Toolbar actions should only appear when the selected renderer truly supports them, and Three.js/Babylon.js capability drift should be caught before release. +- Scope: + - Capability guards in `src/render/preview/types.ts`. + - Preview factory and route decisions that choose renderer backends. + - Harness or unit coverage for toolbar-visible capabilities. +- Out of scope: + - Changing route policy without updating `docs/preview-routing-matrix.md`. + - Making every renderer implement every optional capability. +- Acceptance criteria: + - Capability checks cover every toolbar action that can be shown. + - Three.js and Babylon.js preview objects satisfy the expected direct-view capability set. + - Missing optional methods hide their controls instead of throwing. + - Route changes update both code and route docs. +- Verification: + - `npm run typecheck` + - `npm test` + - `npm test -- --run src/render/preview/types.test.ts` + - `npm run verify:preview:success` +- Related files: + - `src/render/preview/types.ts` + - `src/render/preview/factory.ts` + - `src/render/preview/selection.ts` + - `src/view/inline/helper-buttons.ts` + - `docs/preview-routing-matrix.md` + +### REQ-012: Converter Diagnostics And Safety + +- Status: Accepted +- Priority: P1 +- User value: When conversion fails, users should see an actionable explanation without exposing private local command paths in copied diagnostics. +- Scope: + - Converter discovery, error classification, timeout handling, and diagnostics. + - Cache reuse decisions for existing `.ai3d-converted.glb` files. + - Sanitized support reports. +- Out of scope: + - Bundling heavy converter binaries. + - Mobile conversion support. +- Acceptance criteria: + - Missing converter UI tells the user which converter id is required. + - Timeout does not block preview indefinitely. + - Existing `.ai3d-converted.glb` is reused only when newer than source. + - Unsafe converter command paths are rejected before execution. + - Diagnostics omit draft service URL and converter command paths. + - Diagnostics redact vault-relative paths unless explicitly requested. +- Verification: + - `npm run typecheck` + - `npm test -- --run src/io/conversion/manager.test.ts` + - `npm test -- --run src/io/cache/converted-asset-cache.test.ts` + - `npm run verify:diagnostics` +- Related files: + - `src/io/conversion/errors.ts` + - `src/io/conversion/command-discovery.ts` + - `src/io/conversion/conversion-service.ts` + - `src/io/cache/converted-asset-cache.ts` + - `src/diagnostics/report.ts` + +### REQ-013: Knowledge Generation State Consistency + +- Status: In Progress +- Priority: P0 +- User value: Knowledge-note generation should leave understandable state whether it succeeds fully, partially writes artifacts, or fails. +- Scope: + - Pending, failed, and success state transitions. + - Report, analysis sidecar, knowledge index, preview snapshot, and part note writes. + - Local draft and optional remote draft behavior. + - Preservation of user-written index content outside managed markers. +- Out of scope: + - Raw model upload to remote services. + - Replacing Markdown artifacts with a database. +- Acceptance criteria: + - `lastKnowledgeGeneration` is set to `pending` before artifact writes. + - Failed sidecar/report/index writes set `failed` with warning count. + - Success updates profile paths and registered parts from the final analysis object. + - Stale pending generation is surfaced in the next run. + - Remote draft cannot include raw model bytes. + - Geometry and preview references are stripped unless explicitly enabled. + - User-written index notes survive managed-section refreshes. +- Verification: + - `npm run typecheck` + - `npm test -- --run src/view/workbench/knowledge-note.test.ts` + - `npm test -- --run src/view/workbench/remote-draft.test.ts` + - `npm run verify:knowledge-index` + - `npm run verify:remote-draft` +- Related files: + - `src/view/workbench/knowledge-note.ts` + - `src/view/workbench/analysis-result.ts` + - `src/view/workbench/remote-draft.ts` + - `src/store/plugin-store.ts` + +### REQ-014: Coordinator Class Decomposition + +- Status: Accepted +- Priority: P2 +- User value: The project should become easier to change safely by shrinking the largest coordinator classes without changing behavior. +- Scope: + - `DirectModelView` layout/sidebar/loading/annotation extraction. + - Three.js scene facade extraction. + - Babylon.js scene facade extraction. + - Shared measurement, evidence, selection, and disposal helpers where practical. +- Out of scope: + - Behavior changes hidden inside refactors. + - Renderer route policy changes. + - New frameworks or build systems. +- Acceptance criteria: + - `createThreeModelPreview()` and `createBabylonModelPreview()` keep the same exported signatures. + - `ModelPreview`, `AnnotationPreview`, and `WorkbenchPreview` behavior remains unchanged. + - Direct view route behavior remains unchanged unless intentionally documented. + - Disposal audit still reports model-switch and destroy cleanup. + - Refactor commits are separated from feature commits. +- Verification: + - `npm run typecheck` + - `npm test` + - `npm run verify:preview` + - `npm run verify:preview:success` +- Related files: + - `src/view/direct-view.ts` + - `src/render/three/scene.ts` + - `src/render/babylon/scene.ts` + - `src/render/preview/types.ts` + +### REQ-015: Three.js Capability Tree And Visual Fidelity + +- Status: Verified +- Priority: P1 +- User value: Three.js should feel like the high-quality single-model viewing path, not just a lighter fallback, for common direct formats. +- Scope: + - GLB/GLTF/STL/PLY/OBJ direct-format rendering quality. + - Preview capability profiles and Three.js quality snapshots. + - Color pipeline, texture color-space handling, point-cloud sizing, camera precision, small-part visibility, and interaction smoothness. + - Diagnostics and preview verification for quality regressions. +- Out of scope: + - Removing Babylon.js. + - Moving `3dgrid` to Three.js. + - Broad production workbench migration. + - Remote model processing or upload. +- Acceptance criteria: + - Three.js exposes a quality snapshot with supported formats, color pipeline, geometry/small-part stats, camera precision, and performance budget data. + - Three.js exposes rendered frame count, idle skip count, average/p95/max render timings, slow-frame count, and adaptive scale changes. + - Pointer, wheel, and orbit interactions enter the interactive pixel-ratio path before the next frame renders. + - Diagnostics explain the active route capability profile. + - STL and PLY vertex colors are preserved on the Three.js path. + - PLY point clouds use model-scale-aware point sizes. + - OBJ color textures use sRGB without forcing non-color maps into sRGB. + - Tiny model camera fit uses the real model span instead of a unit-size floor. + - Color, small-part, and smoothness snapshot checks are covered by the preview success suite. +- Verification: + - `npm run typecheck` + - `npm test` + - `npm run verify:preview` + - `npm run verify:preview:success` + - `npm run verify:diagnostics` + - `npm run build` + - `npm run verify:release` +- Related files: + - `src/render/preview/capabilities.ts` + - `src/render/preview/types.ts` + - `src/render/three/loaders.ts` + - `src/render/three/scene.ts` + - `scripts/verify-preview.mjs` + ## New Requirement Template ```md diff --git a/docs/threejs-migration-roadmap.md b/docs/threejs-migration-roadmap.md index abc7acd..e7e0329 100644 --- a/docs/threejs-migration-roadmap.md +++ b/docs/threejs-migration-roadmap.md @@ -381,3 +381,22 @@ workbench 当前依赖的不只是“显示模型”,还包括: 简而言之: 先把 Three.js 做成主干,再决定 Babylon 要缩到多小,而不是一开始就要求它彻底消失。 +## 2026-06 Three.js Fidelity Update + +The next Three.js step is visual-fidelity parity for the existing direct-format +path, not a broad Babylon.js replacement. Three.js remains the primary +single-model path for GLB/GLTF/STL/PLY/OBJ, while Babylon.js remains the +capability backend for `3dgrid`, conservative workbench routes, SPLAT, and +rollback behavior. + +Current focus: + +- expose a route capability profile and Three.js quality snapshot; +- preserve color intent for direct formats, including STL/PLY vertex colors and + OBJ color textures; +- improve tiny-model camera precision and small-part visibility; +- track smoothness with rendered-frame counts, idle skips, frame timing, and + adaptive pixel-ratio changes; +- add color-fidelity and small-parts preview fixtures to regression checks. + +Tracked as `REQ-015` in `docs/requirements-tracker.md`. diff --git a/main.js b/main.js index 131721b..ee37e3d 100644 --- a/main.js +++ b/main.js @@ -1,10 +1,10 @@ -"use strict";var Qb=Object.defineProperty;var MZ=Object.getOwnPropertyDescriptor;var CZ=Object.getOwnPropertyNames;var yZ=Object.prototype.hasOwnProperty;var M=(n,e,t)=>()=>{if(t)throw t[0];try{return n&&(e=n(n=0)),e}catch(i){throw t=[i],i}};var tt=(n,e)=>{for(var t in e)Qb(n,t,{get:e[t],enumerable:!0})},PZ=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of CZ(e))!yZ.call(n,r)&&r!==t&&Qb(n,r,{get:()=>e[r],enumerable:!(i=MZ(e,r))||i.enumerable});return n};var LZ=n=>PZ(Qb({},"__esModule",{value:!0}),n);function Pd(n,e,t){return`${n}::${e}::${t}`}function DZ(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 uw(n,e=Date.now()){let t=new Map;for(let i of n){if(!DZ(i,e))continue;let r=Pd(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 OZ(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 e0=Object.defineProperty;var UZ=Object.getOwnPropertyDescriptor;var VZ=Object.getOwnPropertyNames;var GZ=Object.prototype.hasOwnProperty;var M=(n,e,t)=>()=>{if(t)throw t[0];try{return n&&(e=n(n=0)),e}catch(i){throw t=[i],i}};var tt=(n,e)=>{for(var t in e)e0(n,t,{get:e[t],enumerable:!0})},kZ=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of VZ(e))!GZ.call(n,r)&&r!==t&&e0(n,r,{get:()=>e[r],enumerable:!(i=UZ(e,r))||i.enumerable});return n};var WZ=n=>kZ(e0({},"__esModule",{value:!0}),n);function Pd(n,e,t){return`${n}::${e}::${t}`}function HZ(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 Tw(n,e=Date.now()){let t=new Map;for(let i of n){if(!HZ(i,e))continue;let r=Pd(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 zZ(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 mw(n=[],e){function t(){return uw([...s.values()])}function i(l){s.clear();for(let c of l)s.set(Pd(c.sourcePath,c.sourceExt,c.targetExt),c)}let r=uw(n),s=new Map(r.map(l=>[Pd(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)=>!OZ(l,n[c])))&&(e==null||e(r)),{get(l,c,f){return s.get(Pd(l,c,f))},set(l){s.set(Pd(l.sourcePath,l.sourceExt,l.targetExt),l),a()},delete(l,c,f){let h=s.delete(Pd(l,c,f));return h&&a(),h},clear(){s.size!==0&&(s.clear(),a())},entries(){return t()}}}var $b=M(()=>{"use strict"});function Va(n){return n.trim().toLowerCase().replace(/^\./,"")}function Jb(n){return NZ.get(Va(n))}function gl(n){let e=Jb(n);return!!(e!=null&&e.enabled)}function Mp(n){return["splat","spz","sog"].includes(Va(n))}function vl(){return pw.filter(n=>n.enabled).map(n=>n.ext)}var pw,NZ,Mo=M(()=>{"use strict";pw=[{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}],NZ=new Map(pw.map(n=>[n.ext,n]))});var t0,Ew=M(()=>{"use strict";t0={"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.annotationDisplayMode":"Annotation display mode","settings.annotationDisplayMode.desc":"Choose how bookmark pins appear over the model.","settings.annotationDisplayMode.snippet":"Full snippet","settings.annotationDisplayMode.surface":"Single surface","settings.annotationDisplayMode.dot":"Single dot","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.changeResolutionLabel":"Change resolution","helper.resolutionValue":"Resolution: {value}","helper.toggleAnimationLabel":"Play or pause animation","helper.playing":"Playing","helper.paused":"Paused","helper.toggleMeasurementLabel":"Toggle distance measurement","helper.measurementOn":"Measurement on","helper.measurementOff":"Measurement off","helper.clearMeasurementsLabel":"Clear measurements","helper.measurementsCleared":"Cleared","helper.copyMeasurementsLabel":"Copy measurements","helper.noMeasurements":"No measurements","helper.measurementsCopied":"Measurements copied","helper.calibrateLabel":"Calibrate measurement scale","helper.calibrateTitle":"Measurement Calibration","helper.calibrateCurrent":"Current size:","helper.calibrateReal":"Real size:","helper.calibrateLock":"Lock ratio","helper.calibrateApply":"Apply","helper.calibrateReset":"Reset","helper.calibrated":"Scale applied","helper.calibrateResetDone":"Scale reset","helper.calibrateOpen":"Calibration panel opened","helper.calibrateClose":"Calibration panel closed","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","previewCanvas.inlineLabel":"3D model preview: {model}. Shortcuts: {shortcuts}","previewCanvas.gridLabel":"3D model grid preview. Shortcuts: {shortcuts}","previewCanvas.liveLabel":"Embedded 3D model preview: {model}. Shortcuts: {shortcuts}","previewCanvas.directLabel":"3D file preview: {model}. Shortcuts: {shortcuts}","previewCanvas.modelShortcuts":"R reset view, W wireframe, G axes, B bounding box, M measurement, Space animation","previewCanvas.gridShortcuts":"R reset view, W wireframe","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.modelLoadInterrupted":"Model load was interrupted by a newer request.","directWorkbench.backendLabel":"Backend","directWorkbench.routeLabel":"Route","directWorkbench.performanceLabel":"Performance","directWorkbench.partCandidatesLabel":"Part candidates","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 Sw,Tw=M(()=>{"use strict";Sw={"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.annotationDisplayMode":"\u6807\u6CE8\u663E\u793A\u6A21\u5F0F","settings.annotationDisplayMode.desc":"\u9009\u62E9\u6A21\u578B\u4E0A\u4E66\u7B7E\u6807\u6CE8\u7684\u663E\u793A\u65B9\u5F0F\u3002","settings.annotationDisplayMode.snippet":"\u5B8C\u6574\u7247\u6BB5","settings.annotationDisplayMode.surface":"\u5355\u4E2A\u6807\u7B7E\u9762","settings.annotationDisplayMode.dot":"\u5355\u4E2A\u5706\u70B9","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.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.toggleMeasurementLabel":"\u5207\u6362\u8DDD\u79BB\u6D4B\u91CF","helper.measurementOn":"\u6D4B\u91CF\u5DF2\u5F00\u542F","helper.measurementOff":"\u6D4B\u91CF\u5DF2\u5173\u95ED","helper.clearMeasurementsLabel":"\u6E05\u9664\u6D4B\u91CF","helper.measurementsCleared":"\u5DF2\u6E05\u9664","helper.copyMeasurementsLabel":"\u590D\u5236\u6D4B\u91CF","helper.noMeasurements":"\u6682\u65E0\u6D4B\u91CF","helper.measurementsCopied":"\u6D4B\u91CF\u5DF2\u590D\u5236","helper.calibrateLabel":"\u6821\u51C6\u6D4B\u91CF\u6BD4\u4F8B","helper.calibrateTitle":"\u6D4B\u91CF\u6821\u51C6","helper.calibrateCurrent":"\u5F53\u524D\u5C3A\u5BF8\uFF1A","helper.calibrateReal":"\u771F\u5B9E\u5C3A\u5BF8\uFF1A","helper.calibrateLock":"\u9501\u5B9A\u6BD4\u4F8B","helper.calibrateApply":"\u5E94\u7528","helper.calibrateReset":"\u91CD\u7F6E","helper.calibrated":"\u6BD4\u4F8B\u5DF2\u5E94\u7528","helper.calibrateResetDone":"\u6BD4\u4F8B\u5DF2\u91CD\u7F6E","helper.calibrateOpen":"\u6821\u51C6\u9762\u677F\u5DF2\u6253\u5F00","helper.calibrateClose":"\u6821\u51C6\u9762\u677F\u5DF2\u5173\u95ED","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","previewCanvas.inlineLabel":"3D model preview: {model}. Shortcuts: {shortcuts}","previewCanvas.gridLabel":"3D model grid preview. Shortcuts: {shortcuts}","previewCanvas.liveLabel":"Embedded 3D model preview: {model}. Shortcuts: {shortcuts}","previewCanvas.directLabel":"3D file preview: {model}. Shortcuts: {shortcuts}","previewCanvas.modelShortcuts":"R reset view, W wireframe, G axes, B bounding box, M measurement, Space animation","previewCanvas.gridShortcuts":"R reset view, W wireframe","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.modelLoadInterrupted":"\u6A21\u578B\u52A0\u8F7D\u88AB\u65B0\u8BF7\u6C42\u4E2D\u65AD\u3002","directWorkbench.backendLabel":"\u540E\u7AEF","directWorkbench.routeLabel":"\u8DEF\u7531","directWorkbench.performanceLabel":"\u6027\u80FD","directWorkbench.partCandidatesLabel":"\u5019\u9009\u96F6\u4EF6","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 yp(n){Aw=n;for(let e of i0)e()}function Q(n){var e,t,i;return(i=(t=(e=VZ[Aw])==null?void 0:e[n])!=null?t:t0[n])!=null?i:n}function xw(n){return i0.add(n),()=>{i0.delete(n)}}function GZ(n,e){return n.replace(/\{(\w+)\}/g,(t,i)=>{var r;return(r=e[i])!=null?r:""})}function Ki(n,e){return GZ(Q(n),e)}var VZ,Aw,i0,os=M(()=>{"use strict";Ew();Tw();VZ={en:t0,"zh-CN":Sw},Aw="en",i0=new Set});function kZ(){if("require"in activeWindow)return activeWindow.require}function Rv(){if("process"in activeWindow)return activeWindow.process}function Pp(n){let e=kZ();if(!e)return null;try{return e(n)}catch(t){return null}}function ls(n,e){if(n===null)throw new Error(`${e} is not available in this environment (mobile or web).`);return n}function cs(n,e){return ls(Dd,"node:fs/promises").access(n,e)}function oa(n){return ls(Dd,"node:fs/promises").readFile(n)}function Od(n,e,t){return ls(Dd,"node:fs/promises").writeFile(n,e,{encoding:t})}function Nd(n,e){return ls(Dd,"node:fs/promises").mkdir(n,e)}function wd(n,e){return ls(Dd,"node:fs/promises").rm(n,e)}function Lp(n){return ls(Dd,"node:fs/promises").stat(n)}function Xi(...n){return ls(El,"node:path").join(...n)}function Co(n){return ls(El,"node:path").dirname(n)}function yo(n,e){return ls(El,"node:path").basename(n,e)}function la(n){return ls(El,"node:path").extname(n)}function r0(n){return ls(El,"node:path").normalize(n)}function Xn(n){return ls(El,"node:path").isAbsolute(n)}function ca(n,e,t,i){ls(WZ,"node:child_process").execFile(n,e,t,i)}function Fd(){return ls(HZ,"node:os").tmpdir()}var Dd,Ld,El,WZ,HZ,Rw,fs,bw,Mw,Iw,Cw,cr=M(()=>{"use strict";Dd=Pp("node:fs/promises"),Ld=Pp("node:fs"),El=Pp("node:path"),WZ=Pp("node:child_process"),HZ=Pp("node:os");fs=(Rw=Ld==null?void 0:Ld.constants.F_OK)!=null?Rw:0,Mw=(bw=Ld==null?void 0:Ld.constants.X_OK)!=null?bw:0;Cw=(Iw=El==null?void 0:El.delimiter)!=null?Iw:":"});function n0(n){return n.replace(/\\/g,"/")}function bv(n){let e=n0(n),t=[];for(let i of e.split("/"))if(!(!i||i===".")){if(i===".."){t.pop();continue}t.push(i)}return t.join("/")}function yw(n){try{return decodeURIComponent(n)}catch(e){return n}}function Us(n,e){var r;let t=yw((r=e.split(/[?#]/,1)[0])!=null?r:e),i=bv(t);return n?bv(`${n}/${i}`):i}function Dp(n){let e=n0(n).replace(/\/+$/,""),t=e.lastIndexOf("/");return t>0?e.slice(0,t):""}function hs(n){let e=n0(n).replace(/\/+$/,""),t=e.lastIndexOf("/");return t>=0?e.slice(t+1):e}function qr(n){return hs(n).replace(/\.[^.]+$/,"")}async function zZ(n,e){let t=bv(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 Ud.TFile)return r;if(!(l instanceof Ud.TFolder))return null;s=l.children}return null}function XZ(n){return Uint8Array.from(n).buffer}function YZ(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 eh(n,e){if(Xn(e))return r0(e);let t=YZ(n);return t?r0(Xi(t,e)):null}async function Ga(n,e){if(Xn(e)){let r=await oa(e);return XZ(r)}let t=bv(yw(e)),i=n.vault.getAbstractFileByPath(t);if(!(i instanceof Ud.TFile)){let r=await zZ(n,t);if(r){let s=n.vault.getAbstractFileByPath(r);if(s instanceof Ud.TFile)return n.vault.readBinary(s)}throw new Error(`File not found: ${t}`)}return n.vault.readBinary(i)}var Ud,Bs=M(()=>{"use strict";Ud=require("obsidian");cr();cr()});function Ht(n){return{x:n.x,y:n.y,z:n.z}}function Zr(n){return{x:n.x,y:n.y,z:n.z}}function Vd(n,e){return{x:n.x-e.x,y:n.y-e.y,z:n.z-e.z}}function Op(n,e){return{x:n.x*e,y:n.y*e,z:n.z*e}}function Dw(n,e){let t=Vd(n,e);return Math.hypot(t.x,t.y,t.z)}function s0(n){let e=Math.hypot(n.x,n.y,n.z);return e<=Number.EPSILON?null:Op(n,1/e)}function th(n,e){return{x:n.x+e.x,y:n.y+e.y,z:n.z+e.z}}function Pw(n,e){return n.x*e.x+n.y*e.y+n.z*e.z}function Ow(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 Nw(n){return Math.max(n*.01,.01)}function Nc(n,e,t=Nw(e)){return n{"use strict"});function JZ(){return`pin-${Date.now()}-${qZ++}`}function Bw(n){return Zr(n)}function eQ(n,e,t){return n.lefte.left-t&&n.tope.top-t}var Np,kd,qZ,a0,ZZ,QZ,ww,Fw,$Z,Uw,Wd,Fc,Pv=M(()=>{"use strict";Np=require("obsidian");os();Bs();Vs();kd=["#4a9eff","#ff6b6b","#51cf66","#ffd43b","#845ef7","#ff922b","#22b8cf","#f06595","#94d82d","#ffa8a8"],qZ=1,a0=4,ZZ=2,QZ=6,ww=6,Fw=72,$Z=80,Uw=200;Wd=class Wd{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.hoverCloseTimeout=null;this.hoverRequestId=0;this._highlightHandler=null;this._pulseTimeout=null;this._headingDropdown=null;this._headingDebounce=null;this._selectedHeading=null;this.previewRenderRoot=new Np.Component;this.previewRenderChildren=new WeakMap;var c,f;this.previewApp=l.app,this.previewMode=(c=l.previewMode)!=null?c:"plain-text",this.displayMode=(f=l.displayMode)!=null?f:"surface",this.previewRenderRoot.load(),this.overlay=this.hostEl.createDiv({cls:"ai3d-annotation-overlay"}),this.setAnnotations(r),this._highlightHandler=h=>{let d=h.detail,u=d==null?void 0:d.pinId;u&&this.pulsePin(u)},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)this.removePinElement(t.el);this.pinEls.clear(),this.annotations=[...e];for(let t of e)this.createPinElement(t);this.updateProjections()}addPin(e,t,i){var s;if(this.annotations.length>=Uw)return console.warn(`[AI3D] Pin limit (${Uw}) reached; ignoring new pin.`),this.annotations[this.annotations.length-1];let r={id:JZ(),position:[e.x,e.y,e.z],label:t,color:i!=null?i:kd[this.annotations.length%kd.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&&(this.removePinElement(t.el),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),(t.notePath!==void 0||t.headingRef!==void 0||t.label!==void 0)&&this.renderPinDisplay(r.el,i)}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,Bw(i.worldPos),t)}getPinPosition(e){let t=this.pinEls.get(e);return t?Bw(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(B=>B.classList.remove("active")),d=N,N>=0&&N{var W;this._selectedHeading=N,o.value=N.heading;let w=qr(N.notePath);(W=l.querySelector(".ai3d-editor-binding-text"))==null||W.remove();let B=l.createSpan({cls:"ai3d-editor-binding-text"});B.textContent=`\u{1F4C4} ${w}`,l.classList.remove("is-hidden"),_(),o.focus(),this.loadContentPreview(f,N.notePath,N.heading)},_=()=>{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{J.preventDefault(),J.stopPropagation(),p(B)}),W.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){_();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(_,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||kd[0],E=x&&!kd.includes(x)?[x,...kd]:kd;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",Ki("annotation.selectColor",{color:N})),w.style.setProperty("--swatch-color",N),w.style.backgroundColor=N,N===A&&w.classList.add("is-selected"),w.addEventListener("click",B=>{B.stopPropagation(),A=N,v.querySelectorAll(".ai3d-pin-color-swatch").forEach(W=>W.classList.remove("is-selected")),w.classList.add("is-selected")})}let S=s.createDiv({cls:"ai3d-annotation-editor-actions"});if(r){let N=S.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=S.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",B=this._selectedHeading;if(r){let W={label:w,color:A};B&&(W.notePath=B.notePath,W.headingRef=B.heading,W.headingLevel=B.level),this.updatePin(r.id,W)}else{let W=this.addPin(i,w,A);B&&this.updatePin(W.id,{notePath:B.notePath,headingRef:B.heading,headingLevel:B.level})}this.hideEditor()});let I=S.createEl("button",{cls:"ai3d-annotation-editor-btn ai3d-annotation-editor-cancel"});I.textContent="Cancel",I.addEventListener("click",N=>{N.stopPropagation(),this.hideEditor()});let C=this.overlay.getBoundingClientRect(),y=e-C.left,D=t-C.top;if(s.style.setProperty("--editor-left",`${Math.max(0,Math.min(y,C.width-220))}px`),s.style.setProperty("--editor-top",`${Math.max(0,Math.min(D-10,C.height-160))}px`),this.editorEl=s,r!=null&&r.notePath&&(r!=null&&r.headingRef)){let N=qr(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=Q("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"}),l=t.getBoundingClientRect();s.style.setProperty("--popover-left",`${l.left+l.width/2}px`),s.style.setProperty("--popover-top",`${l.bottom+4}px`),s.addEventListener("mouseenter",()=>this.cancelHoverClose()),s.addEventListener("mouseleave",()=>this.scheduleHoverClose()),activeDocument.body.appendChild(s),this.hoverPopover=s,await this.renderPreviewContent(o,r,i.notePath,"popover"),(e!==this.hoverRequestId||!t.isConnected||!this.hostEl.isConnected)&&(this.clearRenderedPreview(o),this.hoverPopover===s&&(this.hoverPopover=null),s.remove())}hideHoverPopover(){if(this.hoverTimeout&&(window.clearTimeout(this.hoverTimeout),this.hoverTimeout=null),this.hoverCloseTimeout&&(window.clearTimeout(this.hoverCloseTimeout),this.hoverCloseTimeout=null),this.hoverPopover){let e=this.hoverPopover.querySelector(".ai3d-pin-popover-body");e&&this.clearRenderedPreview(e),this.hoverPopover.remove(),this.hoverPopover=null}}cancelHoverClose(){this.hoverCloseTimeout&&(window.clearTimeout(this.hoverCloseTimeout),this.hoverCloseTimeout=null)}scheduleHoverClose(){this.hoverTimeout&&(window.clearTimeout(this.hoverTimeout),this.hoverTimeout=null,this.hoverRequestId++),this.cancelHoverClose(),this.hoverCloseTimeout=window.setTimeout(()=>{this.hoverCloseTimeout=null,this.hoverRequestId++,this.hideHoverPopover()},180)}clearRenderedPreview(e){let t=this.previewRenderChildren.get(e);t&&(this.previewRenderRoot.removeChild(t),this.previewRenderChildren.delete(e)),e.replaceChildren()}removePinElement(e){e.querySelectorAll(".ai3d-rendered-preview").forEach(t=>{this.clearRenderedPreview(t)}),e.remove()}async renderPreviewContent(e,t,i,r){let s=this.previewMode==="markdown"&&!!this.previewApp,a=r==="editor",o=r==="pin-snippet";if(!s){let c=a?300:o?180:1/0,f=t.length>c?t.slice(0,c)+"...":t;e.textContent=f,e.className=a?"ai3d-editor-content-preview":o?"ai3d-pin-snippet ai3d-rendered-preview":"ai3d-pin-popover-body ai3d-rendered-preview",a&&e.classList.remove("is-hidden");return}e.className=a?"ai3d-editor-content-preview ai3d-editor-content-preview--markdown markdown-rendered":o?"ai3d-pin-snippet ai3d-pin-snippet--markdown ai3d-rendered-preview markdown-rendered":"ai3d-pin-popover-body ai3d-pin-popover-body--markdown ai3d-rendered-preview markdown-rendered",a&&e.classList.remove("is-hidden");let l=this.previewRenderRoot.addChild(new Np.Component);this.previewRenderChildren.set(e,l);try{await Np.MarkdownRenderer.render(this.previewApp,t,e,i,l)}catch(c){this.previewRenderRoot.removeChild(l),this.previewRenderChildren.delete(e);let f=a?300:o?180:1/0;e.textContent=t.length>f?t.slice(0,f)+"...":t,e.className=a?"ai3d-editor-content-preview":o?"ai3d-pin-snippet ai3d-rendered-preview":"ai3d-pin-popover-body ai3d-rendered-preview",a&&e.classList.remove("is-hidden"),console.warn("[AI3D] Annotation markdown preview fallback:",c)}}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"});if(t.dataset.pinId=e.id,this.renderPinDisplay(t,e),this.mode==="edit"){let i=t.createEl("button",{cls:"ai3d-pin-delete"});i.textContent="\xD7",i.addEventListener("click",r=>{r.stopPropagation(),this.removePin(e.id)}),t.addEventListener("click",r=>{r.target.closest(".ai3d-pin-delete")||(r.stopPropagation(),this.editPin(e.id))})}t.addEventListener("pointerdown",i=>i.stopPropagation()),t.addEventListener("wheel",i=>{i.preventDefault(),i.stopPropagation(),this.provider.canvas.dispatchEvent(new WheelEvent("wheel",{bubbles:!0,cancelable:!0,clientX:i.clientX,clientY:i.clientY,ctrlKey:i.ctrlKey,deltaMode:i.deltaMode,deltaX:i.deltaX,deltaY:i.deltaY,deltaZ:i.deltaZ,metaKey:i.metaKey,shiftKey:i.shiftKey}))},{passive:!1}),e.notePath&&e.headingRef&&this.noteReader&&(t.addEventListener("mouseenter",()=>{this.cancelHoverClose(),this.hoverTimeout&&window.clearTimeout(this.hoverTimeout);let i=++this.hoverRequestId;this.hoverTimeout=window.setTimeout(()=>{this.hoverTimeout=null,i===this.hoverRequestId&&this.showHoverPopover(i,t,e)},300)}),t.addEventListener("mouseleave",()=>{this.scheduleHoverClose()})),this.pinEls.set(e.id,{el:t,worldPos:{x:e.position[0],y:e.position[1],z:e.position[2]}})}renderPinDisplay(e,t){let i=e.querySelector(".ai3d-pin-delete");if(e.querySelectorAll(".ai3d-rendered-preview").forEach(s=>{this.clearRenderedPreview(s)}),e.replaceChildren(),e.className=`ai3d-annotation-pin ai3d-annotation-pin--${this.displayMode}`,e.createDiv({cls:"ai3d-pin-dot"}).style.setProperty("--pin-color",t.color),e.title=t.label,e.setAttribute("aria-label",t.label),this.displayMode!=="dot"){let s=e.createDiv({cls:"ai3d-pin-content"}),a=s.createSpan({cls:"ai3d-pin-label"});if(a.textContent=t.label,this.displayMode==="snippet"&&t.notePath&&t.headingRef&&this.noteReader){let o=s.createDiv({cls:"ai3d-pin-snippet ai3d-rendered-preview"});this.loadPinSnippet(o,t.notePath,t.headingRef)}}i&&e.appendChild(i)}async loadPinSnippet(e,t,i){if(!this.noteReader)return;let r=await this.noteReader(t,i);!r||!e.isConnected||await this.renderPreviewContent(e,r,t,"pin-snippet")}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>=Wd.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%QZ===0:this.frameCount%ZZ===0,a=this.cameraIdle||r.length<=a0,o=a?0:this.movingOcclusionCursor%r.length,l=o+a0,c=Wd._scratchProjection,f=[];for(let h=0;h1||c.depth<0)this.hidePin(d.el);else{let u=Math.round(c.screenX),m=Math.round(c.screenY);d.el.style.setProperty("--pin-left",`${u}px`),d.el.style.setProperty("--pin-top",`${m}px`),this.updatePinPriority(d.el,c.depth),f.push({el:d.el,screenX:u,screenY:m,depth:c.depth});let p=a||h>=o&&hr.length&&h0&&(this.movingOcclusionCursor=(o+a0)%r.length),this.cameraIdle)this.applyLabelAvoidance(f);else for(let h of f)h.el.style.removeProperty("--pin-offset-y")}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>$Z){for(let a of e)a.el.style.removeProperty("--pin-offset-y");return}let i=e.filter(a=>!a.el.classList.contains("ai3d-pin-hidden")&&!a.el.classList.contains("ai3d-pin-occluded")).sort((a,o)=>a.depth-o.depth).map(a=>({pin:a,rect:a.el.getBoundingClientRect()})),r=[],s=[];for(let{pin:a,rect:o}of i){let l=0,c=o;for(let f of r){if(!eQ(c,f,ww))continue;let h=a.screenY>=f.top+f.height/2?1:-1;l=Math.max(-Fw,Math.min(Fw,l+h*(f.height+ww)));let d=c.width,u=c.height;c=new DOMRect(c.x,c.y+l,d,u)}r.push(c),s.push({el:a.el,offset:l})}for(let{el:a,offset:o}of s)a.setCssProps({"--pin-offset-y":o===0?"0px":`${o}px`})}hidePin(e){e.classList.remove("ai3d-pin-occluded"),e.classList.add("ai3d-pin-hidden")}showPin(e){e.classList.remove("ai3d-pin-hidden")}};Wd.IDLE_THRESHOLD=15,Wd._scratchProjection={screenX:0,screenY:0,depth:0};Fc=Wd});function iQ(n){return n!=null?n:Gw}function Hd(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=iQ(n.rendererRollout);if(!(n.useThreeRenderer!==!1))return{backend:"babylon",ext:e,annotationMode:t,requireWorkbenchFeatures:s,rendererRollout:a,reason:"useThreeRenderer=false"};if(Vw.has(e)&&(!s||r)){if(s&&!tQ.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 Vw.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!==Gw&&l.push(`rendererRollout=${a}`),{backend:"babylon",ext:e,annotationMode:t,requireWorkbenchFeatures:s,rendererRollout:a,reason:l.join(", ")||"fallback route"}}function kw(){return{backend:"babylon",reason:"grid previews remain on the Babylon grid renderer"}}var Gw,Vw,tQ,Lv=M(()=>{"use strict";Gw="three-direct-glb",Vw=new Set(["glb","gltf","stl","ply","obj"]),tQ=new Set(["glb","gltf"])});function rQ(n){for(let e=n.length-1;e>=0;--e)if(n[e]>=65535)return!0;return!1}function nQ(n){return ArrayBuffer.isView(n)&&!(n instanceof DataView)}function hu(n){return document.createElementNS("http://www.w3.org/1999/xhtml",n)}function c1(){let n=hu("canvas");return n.style.display="block",n}function Zp(...n){let e="THREE."+n.shift();du?du("log",e,...n):console.log(e,...n)}function f1(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=f1(n);let e="THREE."+n.shift();if(du)du("warn",e,...n);else{let t=n[0];t&&t.isStackTrace?console.warn(t.getError(e)):console.warn(e,...n)}}function Ut(...n){n=f1(n);let e="THREE."+n.shift();if(du)du("error",e,...n);else{let t=n[0];t&&t.isStackTrace?console.error(t.getError(e)):console.error(e,...n)}}function EE(...n){let e=n.join(" ");e in Ww||(Ww[e]=!0,Ct(...n))}function h1(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 Ya(){let n=Math.random()*4294967295|0,e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,i=Math.random()*4294967295|0;return(bn[n&255]+bn[n>>8&255]+bn[n>>16&255]+bn[n>>24&255]+"-"+bn[e&255]+bn[e>>8&255]+"-"+bn[e>>16&15|64]+bn[e>>24&255]+"-"+bn[t&63|128]+bn[t>>8&255]+"-"+bn[t>>16&255]+bn[t>>24&255]+bn[i&255]+bn[i>>8&255]+bn[i>>16&255]+bn[i>>24&255]).toLowerCase()}function mi(n,e,t){return Math.max(e,Math.min(t,n))}function hI(n,e){return(n%e+e)%e}function sQ(n,e,t,i,r){return i+(n-e)*(r-i)/(t-e)}function aQ(n,e,t){return n!==e?(t-n)/(e-n):0}function Kp(n,e,t){return(1-t)*n+t*e}function oQ(n,e,t,i){return Kp(n,e,1-Math.exp(-t*i))}function lQ(n,e=1){return e-Math.abs(hI(n,e*2)-e)}function cQ(n,e,t){return n<=e?0:n>=t?1:(n=(n-e)/(t-e),n*n*(3-2*n))}function fQ(n,e,t){return n<=e?0:n>=t?1:(n=(n-e)/(t-e),n*n*n*(n*(n*6-15)+10))}function hQ(n,e){return n+Math.floor(Math.random()*(e-n+1))}function dQ(n,e){return n+Math.random()*(e-n)}function uQ(n){return n*(.5-Math.random())}function mQ(n){n!==void 0&&(Hw=n);let e=Hw+=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 pQ(n){return n*Yp}function _Q(n){return n*uh}function gQ(n){return(n&n-1)===0&&n!==0}function vQ(n){return Math.pow(2,Math.ceil(Math.log(n)/Math.LN2))}function EQ(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 za(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 ji(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 TQ(){let n={enabled:!0,workingColorSpace:Kn,spaces:{},convert:function(r,s,a){return this.enabled===!1||s===a||!s||!a||(this.spaces[s].transfer===Yi&&(r.r=Ml(r.r),r.g=Ml(r.g),r.b=Ml(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===Yi&&(r.r=lu(r.r),r.g=lu(r.g),r.b=lu(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===Ol?qp: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 EE("ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),n.workingToColorSpace(r,s)},toWorkingColorSpace:function(r,s){return EE("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({[Kn]:{primaries:e,whitePoint:i,transfer:qp,toXYZ:Xw,fromXYZ:Yw,luminanceCoefficients:t,workingColorSpaceConfig:{unpackColorSpace:Ui},outputColorSpaceConfig:{drawingBufferColorSpace:Ui}},[Ui]:{primaries:e,whitePoint:i,transfer:Yi,toXYZ:Xw,fromXYZ:Yw,luminanceCoefficients:t,outputColorSpaceConfig:{drawingBufferColorSpace:Ui}}}),n}function Ml(n){return n<.04045?n*.0773993808:Math.pow(n*.9478672986+.0521327014,2.4)}function lu(n){return n<.0031308?n*12.92:1.055*Math.pow(n,.41666)-.055}function c0(n){return typeof HTMLImageElement!="undefined"&&n instanceof HTMLImageElement||typeof HTMLCanvasElement!="undefined"&&n instanceof HTMLCanvasElement||typeof ImageBitmap!="undefined"&&n instanceof ImageBitmap?SE.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 d0(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 S0(n,e,t,i,r){for(let s=0,a=n.length-3;s<=a;s+=3){rh.fromArray(n,s);let o=r.x*Math.abs(rh.x)+r.y*Math.abs(rh.y)+r.z*Math.abs(rh.z),l=e.dot(rh),c=t.dot(rh),f=i.dot(rh);if(Math.max(-Math.max(l,c,f),Math.min(l,c,f))>o)return!1}return!0}function kv(n,e,t,i,r,s){ru.subVectors(n,t).addScalar(.5).multiply(i),r!==void 0?(Gp.x=s*ru.x-r*ru.y,Gp.y=r*ru.x+s*ru.y):Gp.copy(ru),n.copy(e),n.x+=Gp.x,n.y+=Gp.y,n.applyMatrix4(m1)}function wQ(n,e,t,i,r,s,a,o){let l;if(e.side===pn?l=i.intersectTriangle(a,s,r,!0,o):l=i.intersectTriangle(r,s,a,e.side===Hs,o),l===null)return null;qv.copy(o),qv.applyMatrix4(n.matrixWorld);let c=t.ray.origin.distanceTo(qv);return ct.far?null:{distance:c,point:qv.clone(),object:n}}function Zv(n,e,t,i,r,s,a,o,l,c){n.getVertexPosition(o,Xv),n.getVertexPosition(l,Yv),n.getVertexPosition(c,Kv);let f=wQ(n,e,t,i,Xv,Yv,Kv,sF);if(f){let h=new se;Il.getBarycoord(sF,Xv,Yv,Kv,h),r&&(f.uv=Il.getInterpolatedAttribute(r,o,l,c,h,new It)),s&&(f.uv1=Il.getInterpolatedAttribute(s,o,l,c,h,new It)),a&&(f.normal=Il.getInterpolatedAttribute(a,o,l,c,h,new se),f.normal.dot(i.direction)>0&&f.normal.multiplyScalar(-1));let d={a:o,b:l,c,normal:new se,materialIndex:0};Il.getNormal(Xv,Yv,Kv,d.normal),f.face=d,f.barycoord=h}return f}function tE(n,e,t,i,r,s,a){let o=n.geometry.attributes.position;if(xE.fromBufferAttribute(o,r),RE.fromBufferAttribute(o,s),t.distanceSqToSegment(xE,RE,L0,mF)>i)return;L0.applyMatrix4(n.matrixWorld);let c=e.ray.origin.distanceTo(L0);if(!(ce.far))return{distance:c,point:mF.clone().applyMatrix4(n.matrixWorld),index:a,face:null,faceIndex:null,barycoord:null,object:n}}function vF(n,e,t,i,r,s,a){let o=U0.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 xh(n){let e={};for(let t in n){e[t]={};for(let i in n[t]){let r=n[t][i];if(EF(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(EF(r[0])){let s=[];for(let a=0,o=r.length;a{qc={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},Zc={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},CF=0,X0=1,yF=2,g_=1,GE=2,bu=3,Hs=0,pn=1,pa=2,ko=0,ch=1,Y0=2,K0=3,j0=4,PF=5,Hc=100,LF=101,DF=102,OF=103,NF=104,wF=200,FF=201,UF=202,BF=203,cE=204,fE=205,VF=206,GF=207,kF=208,WF=209,HF=210,zF=211,XF=212,YF=213,KF=214,hE=0,dE=1,uE=2,fh=3,mE=4,pE=5,_E=6,gE=7,v_=0,jF=1,qF=2,Ys=0,q0=1,Z0=2,Q0=3,$0=4,J0=5,eI=6,tI=7,N0="attached",ZF="detached",iI=300,Qc=301,Th=302,kE=303,WE=304,E_=306,Do=1e3,da=1001,cu=1002,Or=1003,HE=1004,Ah=1005,Nr=1006,Iu=1007,Qa=1008,vs=1009,rI=1010,nI=1011,Mu=1012,zE=1013,$a=1014,Ks=1015,Wo=1016,XE=1017,YE=1018,Cu=1020,sI=35902,aI=35899,oI=1021,lI=1022,js=1023,Oo=1026,$c=1027,KE=1028,jE=1029,Jc=1030,qE=1031,ZE=1033,S_=33776,T_=33777,A_=33778,x_=33779,QE=35840,$E=35841,JE=35842,eS=35843,tS=36196,iS=37492,rS=37496,nS=37488,sS=37489,R_=37490,aS=37491,oS=37808,lS=37809,cS=37810,fS=37811,hS=37812,dS=37813,uS=37814,mS=37815,pS=37816,_S=37817,gS=37818,vS=37819,ES=37820,SS=37821,TS=36492,AS=36494,xS=36495,RS=36283,bS=36284,b_=36285,IS=36286,QF=2200,$F=2201,JF=2202,hh=2300,dh=2301,lE=2302,w0=2303,oh=2400,lh=2401,jp=2402,MS=2500,e1=2501,cI=0,I_=1,yu=2,t1=3200,Pu=0,i1=1,Ol="",Ui="srgb",Kn="srgb-linear",qp="linear",Yi="srgb",ah=7680,F0=519,r1=512,n1=513,s1=514,CS=515,a1=516,o1=517,yS=518,l1=519,vE=35044,fI="300 es",Xa=2e3,fu=2001;Ww={},du=null;d1={[hE]:dE,[uE]:_E,[mE]:gE,[fh]:pE,[dE]:hE,[_E]:uE,[gE]:mE,[pE]:fh},ua=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}},gI=class gI{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(zw.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(zw.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 o0.copy(this).projectOnVector(e),this.sub(o0)}reflect(e){return this.sub(o0.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}};gI.prototype.isVector3=!0;se=gI,o0=new se,zw=new Qr,vI=class vI{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],p=r[0],_=r[3],g=r[6],v=r[1],x=r[4],A=r[7],E=r[2],S=r[5],R=r[8];return s[0]=a*p+o*v+l*E,s[3]=a*_+o*x+l*S,s[6]=a*g+o*A+l*R,s[1]=c*p+f*v+h*E,s[4]=c*_+f*x+h*S,s[7]=c*g+f*A+h*R,s[2]=d*p+u*v+m*E,s[5]=d*_+u*x+m*S,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 p=1/m;return e[0]=h*p,e[1]=(r*c-f*i)*p,e[2]=(o*i-r*a)*p,e[3]=d*p,e[4]=(f*t-r*l)*p,e[5]=(r*s-o*t)*p,e[6]=u*p,e[7]=(i*l-c*t)*p,e[8]=(a*t-i*s)*p,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(l0.makeScale(e,t)),this}rotate(e){return this.premultiply(l0.makeRotation(-e)),this}translate(e,t){return this.premultiply(l0.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)}};vI.prototype.isMatrix3=!0;ii=vI,l0=new ii,Xw=new ii().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),Yw=new ii().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);oi=TQ();SE=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{zd===void 0&&(zd=hu("canvas")),zd.width=e.width,zd.height=e.height;let r=zd.getContext("2d");e instanceof ImageData?r.putImageData(e,0,0):r.drawImage(e,0,0,e.width,e.height),i=zd}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=hu("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(f0).x}get height(){return this.source.getSize(f0).y}get depth(){return this.source.getSize(f0).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!==iI)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case Do:e.x=e.x-Math.floor(e.x);break;case da:e.x=e.x<0?0:1;break;case cu: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 Do:e.y=e.y-Math.floor(e.y);break;case da:e.y=e.y<0?0:1;break;case cu: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++}};xr.DEFAULT_IMAGE=null;xr.DEFAULT_MAPPING=iI;xr.DEFAULT_ANISOTROPY=1;EI=class EI{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],p=l[2],_=l[6],g=l[10];if(Math.abs(f-d)<.01&&Math.abs(h-p)<.01&&Math.abs(m-_)<.01){if(Math.abs(f+d)<.1&&Math.abs(h+p)<.1&&Math.abs(m+_)<.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,S=(f+d)/4,R=(h+p)/4,I=(m+_)/4;return x>A&&x>E?x<.01?(i=0,r=.707106781,s=.707106781):(i=Math.sqrt(x),r=S/i,s=R/i):A>E?A<.01?(i=.707106781,r=0,s=.707106781):(r=Math.sqrt(A),i=S/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((_-m)*(_-m)+(h-p)*(h-p)+(d-f)*(d-f));return Math.abs(v)<.001&&(v=1),this.x=(_-m)/v,this.y=(h-p)/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}};EI.prototype.isVector4=!0;Ji=EI,TE=class extends ua{constructor(e=1,t=1,i={}){super(),i=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:Nr,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 xr(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 Ws;i.matrixAutoUpdate=!1,i.visible=!1,e.joints[t.jointName]=i,e.add(i)}return e.joints[t.jointName]}},u1={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},Bc={h:0,s:0,l:0},Nv={h:0,s:0,l:0};ft=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=Ui){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,oi.colorSpaceToWorking(this,t),this}setRGB(e,t,i,r=oi.workingColorSpace){return this.r=e,this.g=t,this.b=i,oi.colorSpaceToWorking(this,r),this}setHSL(e,t,i,r=oi.workingColorSpace){if(e=hI(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=d0(a,s,e+1/3),this.g=d0(a,s,e),this.b=d0(a,s,e-1/3)}return oi.colorSpaceToWorking(this,r),this}setStyle(e,t=Ui){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=Ui){let i=u1[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=Ml(e.r),this.g=Ml(e.g),this.b=Ml(e.b),this}copyLinearToSRGB(e){return this.r=lu(e.r),this.g=lu(e.g),this.b=lu(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=Ui){return oi.workingToColorSpace(In.copy(this),e),Math.round(mi(In.r*255,0,255))*65536+Math.round(mi(In.g*255,0,255))*256+Math.round(mi(In.b*255,0,255))}getHexString(e=Ui){return("000000"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=oi.workingColorSpace){oi.workingToColorSpace(In.copy(this),t);let i=In.r,r=In.g,s=In.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}},Wa=new se,Tl=new se,u0=new se,Al=new se,jd=new se,qd=new se,eF=new se,m0=new se,p0=new se,_0=new se,g0=new Ji,v0=new Ji,E0=new Ji,Il=class n{constructor(e=new se,t=new se,i=new se){this.a=e,this.b=t,this.c=i}static getNormal(e,t,i,r){r.subVectors(i,t),Wa.subVectors(e,t),r.cross(Wa);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){Wa.subVectors(r,t),Tl.subVectors(i,t),u0.subVectors(e,t);let a=Wa.dot(Wa),o=Wa.dot(Tl),l=Wa.dot(u0),c=Tl.dot(Tl),f=Tl.dot(u0),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,Al)===null?!1:Al.x>=0&&Al.y>=0&&Al.x+Al.y<=1}static getInterpolation(e,t,i,r,s,a,o,l){return this.getBarycoord(e,t,i,r,Al)===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,Al.x),l.addScaledVector(a,Al.y),l.addScaledVector(o,Al.z),l)}static getInterpolatedAttribute(e,t,i,r,s,a){return g0.setScalar(0),v0.setScalar(0),E0.setScalar(0),g0.fromBufferAttribute(e,t),v0.fromBufferAttribute(e,i),E0.fromBufferAttribute(e,r),a.setScalar(0),a.addScaledVector(g0,s.x),a.addScaledVector(v0,s.y),a.addScaledVector(E0,s.z),a}static isFrontFacing(e,t,i,r){return Wa.subVectors(i,t),Tl.subVectors(e,t),Wa.cross(Tl).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 Wa.subVectors(this.c,this.b),Tl.subVectors(this.a,this.b),Wa.cross(Tl).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;jd.subVectors(r,i),qd.subVectors(s,i),m0.subVectors(e,i);let l=jd.dot(m0),c=qd.dot(m0);if(l<=0&&c<=0)return t.copy(i);p0.subVectors(e,r);let f=jd.dot(p0),h=qd.dot(p0);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(jd,a);_0.subVectors(e,s);let u=jd.dot(_0),m=qd.dot(_0);if(m>=0&&u<=m)return t.copy(s);let p=u*c-l*m;if(p<=0&&c>=0&&m<=0)return o=c/(c-m),t.copy(i).addScaledVector(qd,o);let _=f*m-u*h;if(_<=0&&h-f>=0&&u-m>=0)return eF.subVectors(s,r),o=(h-f)/(h-f+(u-m)),t.copy(r).addScaledVector(eF,o);let g=1/(_+p+d);return a=p*g,o=d*g,t.copy(i).addScaledVector(jd,a).addScaledVector(qd,o)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}},Tr=class{constructor(e=new se(1/0,1/0,1/0),t=new se(-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,Ha),Ha.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(Fp),Fv.subVectors(this.max,Fp),Zd.subVectors(e.a,Fp),Qd.subVectors(e.b,Fp),$d.subVectors(e.c,Fp),Vc.subVectors(Qd,Zd),Gc.subVectors($d,Qd),ih.subVectors(Zd,$d);let t=[0,-Vc.z,Vc.y,0,-Gc.z,Gc.y,0,-ih.z,ih.y,Vc.z,0,-Vc.x,Gc.z,0,-Gc.x,ih.z,0,-ih.x,-Vc.y,Vc.x,0,-Gc.y,Gc.x,0,-ih.y,ih.x,0];return!S0(t,Zd,Qd,$d,Fv)||(t=[1,0,0,0,1,0,0,0,1],!S0(t,Zd,Qd,$d,Fv))?!1:(Uv.crossVectors(Vc,Gc),t=[Uv.x,Uv.y,Uv.z],S0(t,Zd,Qd,$d,Fv))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,Ha).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(Ha).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:(xl[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),xl[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),xl[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),xl[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),xl[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),xl[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),xl[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),xl[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(xl),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}},xl=[new se,new se,new se,new se,new se,new se,new se,new se],Ha=new se,wv=new Tr,Zd=new se,Qd=new se,$d=new se,Vc=new se,Gc=new se,ih=new se,Fp=new se,Fv=new se,Uv=new se,rh=new se;Hr=new se,Bv=new It,LQ=0,hr=class extends ua{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:LQ++}),this.name="",this.array=e,this.itemSize=t,this.count=e!==void 0?e.length/t:0,this.normalized=i,this.usage=vE,this.updateRanges=[],this.gpuType=Ks,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;Up.subVectors(e,this.center);let t=Up.lengthSq();if(t>this.radius*this.radius){let i=Math.sqrt(t),r=(i-this.radius)*.5;this.center.addScaledVector(Up,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):(T0.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(Up.copy(e.center).add(T0)),this.expandByPoint(Up.copy(e.center).sub(T0))),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}},OQ=0,fa=new li,A0=new nr,Jd=new se,ks=new Tr,Bp=new Tr,ln=new se,Hi=class n extends ua{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:OQ++}),this.uuid=Ya(),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(rQ(e)?Jp:$p)(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 fa.makeRotationFromQuaternion(e),this.applyMatrix4(fa),this}rotateX(e){return fa.makeRotationX(e),this.applyMatrix4(fa),this}rotateY(e){return fa.makeRotationY(e),this.applyMatrix4(fa),this}rotateZ(e){return fa.makeRotationZ(e),this.applyMatrix4(fa),this}translate(e,t,i){return fa.makeTranslation(e,t,i),this.applyMatrix4(fa),this}scale(e,t,i){return fa.makeScale(e,t,i),this.applyMatrix4(fa),this}lookAt(e){return A0.lookAt(e),A0.updateMatrix(),this.applyMatrix4(A0.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(Jd).negate(),this.translate(Jd.x,Jd.y,Jd.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 Tr);let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){Ut("BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new se(-1/0,-1/0,-1/0),new se(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!==ch&&(i.blending=this.blending),this.side!==Hs&&(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!==cE&&(i.blendSrc=this.blendSrc),this.blendDst!==fE&&(i.blendDst=this.blendDst),this.blendEquation!==Hc&&(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!==fh&&(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!==F0&&(i.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(i.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(i.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==ah&&(i.stencilFail=this.stencilFail),this.stencilZFail!==ah&&(i.stencilZFail=this.stencilZFail),this.stencilZPass!==ah&&(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++}},_u=class extends wr{constructor(e){super(),this.isSpriteMaterial=!0,this.type="SpriteMaterial",this.color=new ft(16777215),this.map=null,this.alphaMap=null,this.rotation=0,this.sizeAttenuation=!0,this.transparent=!0,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.alphaMap=e.alphaMap,this.rotation=e.rotation,this.sizeAttenuation=e.sizeAttenuation,this.fog=e.fog,this}},Vp=new se,tu=new se,iu=new se,ru=new It,Gp=new It,m1=new li,Vv=new se,kp=new se,Gv=new se,tF=new It,x0=new It,iF=new It,e_=class extends nr{constructor(e=new _u){if(super(),this.isSprite=!0,this.type="Sprite",eu===void 0){eu=new Hi;let t=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]),i=new ph(t,5);eu.setIndex([0,1,2,0,2,3]),eu.setAttribute("position",new zc(i,3,0,!1)),eu.setAttribute("uv",new zc(i,2,3,!1))}this.geometry=eu,this.material=e,this.center=new It(.5,.5),this.count=1}raycast(e,t){e.camera===null&&Ut('Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.'),tu.setFromMatrixScale(this.matrixWorld),m1.copy(e.camera.matrixWorld),this.modelViewMatrix.multiplyMatrices(e.camera.matrixWorldInverse,this.matrixWorld),iu.setFromMatrixPosition(this.modelViewMatrix),e.camera.isPerspectiveCamera&&this.material.sizeAttenuation===!1&&tu.multiplyScalar(-iu.z);let i=this.material.rotation,r,s;i!==0&&(s=Math.cos(i),r=Math.sin(i));let a=this.center;kv(Vv.set(-.5,-.5,0),iu,a,tu,r,s),kv(kp.set(.5,-.5,0),iu,a,tu,r,s),kv(Gv.set(.5,.5,0),iu,a,tu,r,s),tF.set(0,0),x0.set(1,0),iF.set(1,1);let o=e.ray.intersectTriangle(Vv,kp,Gv,!1,Vp);if(o===null&&(kv(kp.set(-.5,.5,0),iu,a,tu,r,s),x0.set(0,1),o=e.ray.intersectTriangle(Vv,Gv,kp,!1,Vp),o===null))return;let l=e.ray.origin.distanceTo(Vp);le.far||t.push({distance:l,point:Vp.clone(),uv:Il.getInterpolation(Vp,Vv,kp,Gv,tF,x0,iF,new It),face:null,object:this})}copy(e,t){return super.copy(e,t),e.center!==void 0&&this.center.copy(e.center),this.material=e.material,this}};Rl=new se,R0=new se,Wv=new se,kc=new se,b0=new se,Hv=new se,I0=new se,No=class{constructor(e=new se,t=new se(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,Rl)),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=Rl.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(Rl.copy(this.origin).addScaledVector(this.direction,t),Rl.distanceToSquared(e))}distanceSqToSegment(e,t,i,r){R0.copy(e).add(t).multiplyScalar(.5),Wv.copy(t).sub(e).normalize(),kc.copy(this.origin).sub(R0);let s=e.distanceTo(t)*.5,a=-this.direction.dot(Wv),o=kc.dot(this.direction),l=-kc.dot(Wv),c=kc.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 p=1/f;h*=p,d*=p,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(R0).addScaledVector(Wv,d),u}intersectSphere(e,t){Rl.subVectors(e.center,this.origin);let i=Rl.dot(this.direction),r=Rl.dot(Rl)-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,Rl)!==null}intersectTriangle(e,t,i,r,s){b0.subVectors(t,e),Hv.subVectors(i,e),I0.crossVectors(b0,Hv);let a=this.direction.dot(I0),o;if(a>0){if(r)return null;o=1}else if(a<0)o=-1,a=-a;else return null;kc.subVectors(this.origin,e);let l=o*this.direction.dot(Hv.crossVectors(kc,Hv));if(l<0)return null;let c=o*this.direction.dot(b0.cross(kc));if(c<0||l+c>a)return null;let f=-o*kc.dot(I0);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)}},jn=class extends wr{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new ft(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=v_,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}},rF=new li,nh=new No,zv=new ds,nF=new se,Xv=new se,Yv=new se,Kv=new se,M0=new se,jv=new se,sF=new se,qv=new se,ri=class extends nr{constructor(e=new Hi,t=new jn){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))&&(rF.copy(s).invert(),nh.copy(e.ray).applyMatrix4(rF),!(i.boundingBox!==null&&nh.intersectsBox(i.boundingBox)===!1)&&this._computeIntersections(e,t,nh)))}_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,p=d.length;m1)?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||GQ.getNormalMatrix(e),r=this.coplanarPoint(P0).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)}},sh=new ds,kQ=new It(.5,.5),Jv=new se,Eu=class{constructor(e=new ha,t=new ha,i=new ha,r=new ha,s=new ha,a=new ha){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=Xa,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],p=s[9],_=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+p,E+x).normalize(),r[3].setComponents(c-o,u-h,g-p,E-x).normalize(),i)r[4].setComponents(l,d,_,A).normalize(),r[5].setComponents(c-l,u-d,g-_,E-A).normalize();else if(r[4].setComponents(c-l,u-d,g-_,E-A).normalize(),t===Xa)r[5].setComponents(c+l,u+d,g+_,E+A).normalize();else if(t===fu)r[5].setComponents(l,d,_,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(),sh.copy(e.boundingSphere).applyMatrix4(e.matrixWorld);else{let t=e.geometry;t.boundingSphere===null&&t.computeBoundingSphere(),sh.copy(t.boundingSphere).applyMatrix4(e.matrixWorld)}return this.intersectsSphere(sh)}intersectsSprite(e){sh.center.set(0,0,0);let t=kQ.distanceTo(e.center);return sh.radius=.7071067811865476+t,sh.applyMatrix4(e.matrixWorld),this.intersectsSphere(sh)}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,Jv.y=r.normal.y>0?e.max.y:e.min.y,Jv.z=r.normal.z>0?e.max.z:e.min.z,r.distanceToPoint(Jv)<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)}},Mn=class extends wr{constructor(e){super(),this.isLineBasicMaterial=!0,this.type="LineBasicMaterial",this.color=new ft(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}},xE=new se,RE=new se,uF=new li,Xp=new No,eE=new ds,L0=new se,mF=new se,wo=class extends nr{constructor(e=new Hi,t=new Mn){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($.x,$.y,$.z),h.push(Y/R),h.push(1-J/I),W+=1}}for(let J=0;J0)&&u.push(x,A,S),(g!==i-1||l[Pd(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)=>!zZ(l,n[c])))&&(e==null||e(r)),{get(l,c,f){return s.get(Pd(l,c,f))},set(l){s.set(Pd(l.sourcePath,l.sourceExt,l.targetExt),l),a()},delete(l,c,f){let h=s.delete(Pd(l,c,f));return h&&a(),h},clear(){s.size!==0&&(s.clear(),a())},entries(){return t()}}}var t0=M(()=>{"use strict"});function Va(n){return n.trim().toLowerCase().replace(/^\./,"")}function i0(n){return XZ.get(Va(n))}function vl(n){let e=i0(n);return!!(e!=null&&e.enabled)}function Cp(n){return["splat","spz","sog"].includes(Va(n))}function El(){return xw.filter(n=>n.enabled).map(n=>n.ext)}var xw,XZ,Co=M(()=>{"use strict";xw=[{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}],XZ=new Map(xw.map(n=>[n.ext,n]))});var n0,Mw=M(()=>{"use strict";n0={"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.annotationDisplayMode":"Annotation display mode","settings.annotationDisplayMode.desc":"Choose how bookmark pins appear over the model.","settings.annotationDisplayMode.snippet":"Full snippet","settings.annotationDisplayMode.surface":"Single surface","settings.annotationDisplayMode.dot":"Single dot","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.changeResolutionLabel":"Change resolution","helper.resolutionValue":"Resolution: {value}","helper.toggleAnimationLabel":"Play or pause animation","helper.playing":"Playing","helper.paused":"Paused","helper.toggleMeasurementLabel":"Toggle distance measurement","helper.measurementOn":"Measurement on","helper.measurementOff":"Measurement off","helper.clearMeasurementsLabel":"Clear measurements","helper.measurementsCleared":"Cleared","helper.copyMeasurementsLabel":"Copy measurements","helper.noMeasurements":"No measurements","helper.measurementsCopied":"Measurements copied","helper.calibrateLabel":"Calibrate measurement scale","helper.calibrateTitle":"Measurement Calibration","helper.calibrateCurrent":"Current size:","helper.calibrateReal":"Real size:","helper.calibrateLock":"Lock ratio","helper.calibrateApply":"Apply","helper.calibrateReset":"Reset","helper.calibrated":"Scale applied","helper.calibrateResetDone":"Scale reset","helper.calibrateOpen":"Calibration panel opened","helper.calibrateClose":"Calibration panel closed","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","previewCanvas.inlineLabel":"3D model preview: {model}. Shortcuts: {shortcuts}","previewCanvas.gridLabel":"3D model grid preview. Shortcuts: {shortcuts}","previewCanvas.liveLabel":"Embedded 3D model preview: {model}. Shortcuts: {shortcuts}","previewCanvas.directLabel":"3D file preview: {model}. Shortcuts: {shortcuts}","previewCanvas.modelShortcuts":"R reset view, W wireframe, G axes, B bounding box, M measurement, Space animation","previewCanvas.gridShortcuts":"R reset view, W wireframe","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.modelLoadInterrupted":"Model load was interrupted by a newer request.","directWorkbench.backendLabel":"Backend","directWorkbench.routeLabel":"Route","directWorkbench.performanceLabel":"Performance","directWorkbench.partCandidatesLabel":"Part candidates","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 Cw,yw=M(()=>{"use strict";Cw={"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.annotationDisplayMode":"\u6807\u6CE8\u663E\u793A\u6A21\u5F0F","settings.annotationDisplayMode.desc":"\u9009\u62E9\u6A21\u578B\u4E0A\u4E66\u7B7E\u6807\u6CE8\u7684\u663E\u793A\u65B9\u5F0F\u3002","settings.annotationDisplayMode.snippet":"\u5B8C\u6574\u7247\u6BB5","settings.annotationDisplayMode.surface":"\u5355\u4E2A\u6807\u7B7E\u9762","settings.annotationDisplayMode.dot":"\u5355\u4E2A\u5706\u70B9","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.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.toggleMeasurementLabel":"\u5207\u6362\u8DDD\u79BB\u6D4B\u91CF","helper.measurementOn":"\u6D4B\u91CF\u5DF2\u5F00\u542F","helper.measurementOff":"\u6D4B\u91CF\u5DF2\u5173\u95ED","helper.clearMeasurementsLabel":"\u6E05\u9664\u6D4B\u91CF","helper.measurementsCleared":"\u5DF2\u6E05\u9664","helper.copyMeasurementsLabel":"\u590D\u5236\u6D4B\u91CF","helper.noMeasurements":"\u6682\u65E0\u6D4B\u91CF","helper.measurementsCopied":"\u6D4B\u91CF\u5DF2\u590D\u5236","helper.calibrateLabel":"\u6821\u51C6\u6D4B\u91CF\u6BD4\u4F8B","helper.calibrateTitle":"\u6D4B\u91CF\u6821\u51C6","helper.calibrateCurrent":"\u5F53\u524D\u5C3A\u5BF8\uFF1A","helper.calibrateReal":"\u771F\u5B9E\u5C3A\u5BF8\uFF1A","helper.calibrateLock":"\u9501\u5B9A\u6BD4\u4F8B","helper.calibrateApply":"\u5E94\u7528","helper.calibrateReset":"\u91CD\u7F6E","helper.calibrated":"\u6BD4\u4F8B\u5DF2\u5E94\u7528","helper.calibrateResetDone":"\u6BD4\u4F8B\u5DF2\u91CD\u7F6E","helper.calibrateOpen":"\u6821\u51C6\u9762\u677F\u5DF2\u6253\u5F00","helper.calibrateClose":"\u6821\u51C6\u9762\u677F\u5DF2\u5173\u95ED","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","previewCanvas.inlineLabel":"3D model preview: {model}. Shortcuts: {shortcuts}","previewCanvas.gridLabel":"3D model grid preview. Shortcuts: {shortcuts}","previewCanvas.liveLabel":"Embedded 3D model preview: {model}. Shortcuts: {shortcuts}","previewCanvas.directLabel":"3D file preview: {model}. Shortcuts: {shortcuts}","previewCanvas.modelShortcuts":"R reset view, W wireframe, G axes, B bounding box, M measurement, Space animation","previewCanvas.gridShortcuts":"R reset view, W wireframe","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.modelLoadInterrupted":"\u6A21\u578B\u52A0\u8F7D\u88AB\u65B0\u8BF7\u6C42\u4E2D\u65AD\u3002","directWorkbench.backendLabel":"\u540E\u7AEF","directWorkbench.routeLabel":"\u8DEF\u7531","directWorkbench.performanceLabel":"\u6027\u80FD","directWorkbench.partCandidatesLabel":"\u5019\u9009\u96F6\u4EF6","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 Pp(n){Pw=n;for(let e of s0)e()}function Q(n){var e,t,i;return(i=(t=(e=ZZ[Pw])==null?void 0:e[n])!=null?t:n0[n])!=null?i:n}function Lw(n){return s0.add(n),()=>{s0.delete(n)}}function QZ(n,e){return n.replace(/\{(\w+)\}/g,(t,i)=>{var r;return(r=e[i])!=null?r:""})}function Ki(n,e){return QZ(Q(n),e)}var ZZ,Pw,s0,os=M(()=>{"use strict";Mw();yw();ZZ={en:n0,"zh-CN":Cw},Pw="en",s0=new Set});function $Z(){if("require"in activeWindow)return activeWindow.require}function Mv(){if("process"in activeWindow)return activeWindow.process}function Lp(n){let e=$Z();if(!e)return null;try{return e(n)}catch(t){return null}}function ls(n,e){if(n===null)throw new Error(`${e} is not available in this environment (mobile or web).`);return n}function cs(n,e){return ls(Dd,"node:fs/promises").access(n,e)}function la(n){return ls(Dd,"node:fs/promises").readFile(n)}function Od(n,e,t){return ls(Dd,"node:fs/promises").writeFile(n,e,{encoding:t})}function Nd(n,e){return ls(Dd,"node:fs/promises").mkdir(n,e)}function wd(n,e){return ls(Dd,"node:fs/promises").rm(n,e)}function Dp(n){return ls(Dd,"node:fs/promises").stat(n)}function Xi(...n){return ls(Sl,"node:path").join(...n)}function yo(n){return ls(Sl,"node:path").dirname(n)}function Po(n,e){return ls(Sl,"node:path").basename(n,e)}function ca(n){return ls(Sl,"node:path").extname(n)}function a0(n){return ls(Sl,"node:path").normalize(n)}function Yn(n){return ls(Sl,"node:path").isAbsolute(n)}function fa(n,e,t,i){ls(JZ,"node:child_process").execFile(n,e,t,i)}function Fd(){return ls(eQ,"node:os").tmpdir()}var Dd,Ld,Sl,JZ,eQ,Dw,fs,Ow,ww,Nw,Fw,cr=M(()=>{"use strict";Dd=Lp("node:fs/promises"),Ld=Lp("node:fs"),Sl=Lp("node:path"),JZ=Lp("node:child_process"),eQ=Lp("node:os");fs=(Dw=Ld==null?void 0:Ld.constants.F_OK)!=null?Dw:0,ww=(Ow=Ld==null?void 0:Ld.constants.X_OK)!=null?Ow:0;Fw=(Nw=Sl==null?void 0:Sl.delimiter)!=null?Nw:":"});function o0(n){return n.replace(/\\/g,"/")}function Cv(n){let e=o0(n),t=[];for(let i of e.split("/"))if(!(!i||i===".")){if(i===".."){t.pop();continue}t.push(i)}return t.join("/")}function Bw(n){try{return decodeURIComponent(n)}catch(e){return n}}function Gs(n,e){var r;let t=Bw((r=e.split(/[?#]/,1)[0])!=null?r:e),i=Cv(t);return n?Cv(`${n}/${i}`):i}function Op(n){let e=o0(n).replace(/\/+$/,""),t=e.lastIndexOf("/");return t>0?e.slice(0,t):""}function hs(n){let e=o0(n).replace(/\/+$/,""),t=e.lastIndexOf("/");return t>=0?e.slice(t+1):e}function qr(n){return hs(n).replace(/\.[^.]+$/,"")}async function tQ(n,e){let t=Cv(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 Bd.TFile)return r;if(!(l instanceof Bd.TFolder))return null;s=l.children}return null}function iQ(n){return Uint8Array.from(n).buffer}function rQ(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 Ud(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 eh(n,e){if(Yn(e))return a0(e);let t=rQ(n);return t?a0(Xi(t,e)):null}async function Ga(n,e){if(Yn(e)){let r=await la(e);return iQ(r)}let t=Cv(Bw(e)),i=n.vault.getAbstractFileByPath(t);if(!(i instanceof Bd.TFile)){let r=await tQ(n,t);if(r){let s=n.vault.getAbstractFileByPath(r);if(s instanceof Bd.TFile)return n.vault.readBinary(s)}throw new Error(`File not found: ${t}`)}return n.vault.readBinary(i)}var Bd,ks=M(()=>{"use strict";Bd=require("obsidian");cr();cr()});function Ht(n){return{x:n.x,y:n.y,z:n.z}}function Zr(n){return{x:n.x,y:n.y,z:n.z}}function Vd(n,e){return{x:n.x-e.x,y:n.y-e.y,z:n.z-e.z}}function Np(n,e){return{x:n.x*e,y:n.y*e,z:n.z*e}}function Gw(n,e){let t=Vd(n,e);return Math.hypot(t.x,t.y,t.z)}function l0(n){let e=Math.hypot(n.x,n.y,n.z);return e<=Number.EPSILON?null:Np(n,1/e)}function th(n,e){return{x:n.x+e.x,y:n.y+e.y,z:n.z+e.z}}function Uw(n,e){return n.x*e.x+n.y*e.y+n.z*e.z}function kw(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 Ww(n){return Math.max(n*.01,.01)}function Nc(n,e,t=Ww(e)){return n{"use strict"});function fQ(){return`pin-${Date.now()}-${aQ++}`}function Yw(n){return Zr(n)}function hQ(n,e,t){return n.lefte.left-t&&n.tope.top-t}var wp,kd,aQ,c0,oQ,lQ,Hw,zw,cQ,Xw,Wd,Fc,Ov=M(()=>{"use strict";wp=require("obsidian");os();ks();Ws();kd=["#4a9eff","#ff6b6b","#51cf66","#ffd43b","#845ef7","#ff922b","#22b8cf","#f06595","#94d82d","#ffa8a8"],aQ=1,c0=4,oQ=2,lQ=6,Hw=6,zw=72,cQ=80,Xw=200;Wd=class Wd{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.hoverCloseTimeout=null;this.hoverRequestId=0;this._highlightHandler=null;this._pulseTimeout=null;this._headingDropdown=null;this._headingDebounce=null;this._selectedHeading=null;this.previewRenderRoot=new wp.Component;this.previewRenderChildren=new WeakMap;var c,f;this.previewApp=l.app,this.previewMode=(c=l.previewMode)!=null?c:"plain-text",this.displayMode=(f=l.displayMode)!=null?f:"surface",this.previewRenderRoot.load(),this.overlay=this.hostEl.createDiv({cls:"ai3d-annotation-overlay"}),this.setAnnotations(r),this._highlightHandler=h=>{let d=h.detail,u=d==null?void 0:d.pinId;u&&this.pulsePin(u)},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)this.removePinElement(t.el);this.pinEls.clear(),this.annotations=[...e];for(let t of e)this.createPinElement(t);this.updateProjections()}addPin(e,t,i){var s;if(this.annotations.length>=Xw)return console.warn(`[AI3D] Pin limit (${Xw}) reached; ignoring new pin.`),this.annotations[this.annotations.length-1];let r={id:fQ(),position:[e.x,e.y,e.z],label:t,color:i!=null?i:kd[this.annotations.length%kd.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&&(this.removePinElement(t.el),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),(t.notePath!==void 0||t.headingRef!==void 0||t.label!==void 0)&&this.renderPinDisplay(r.el,i)}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,Yw(i.worldPos),t)}getPinPosition(e){let t=this.pinEls.get(e);return t?Yw(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 W;this._selectedHeading=N,o.value=N.heading;let w=qr(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} ${w}`,l.classList.remove("is-hidden"),_(),o.focus(),this.loadContentPreview(f,N.notePath,N.heading)},_=()=>{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{J.preventDefault(),J.stopPropagation(),p(U)}),W.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){_();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(_,150)});let v=s.createDiv({cls:"ai3d-annotation-editor-colors"}),x=(O=r==null?void 0:r.color)==null?void 0:O.trim(),T=x||kd[0],E=x&&!kd.includes(x)?[x,...kd]:kd;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",Ki("annotation.selectColor",{color:N})),w.style.setProperty("--swatch-color",N),w.style.backgroundColor=N,N===T&&w.classList.add("is-selected"),w.addEventListener("click",U=>{U.stopPropagation(),T=N,v.querySelectorAll(".ai3d-pin-color-swatch").forEach(W=>W.classList.remove("is-selected")),w.classList.add("is-selected")})}let S=s.createDiv({cls:"ai3d-annotation-editor-actions"});if(r){let N=S.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=S.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 W={label:w,color:T};U&&(W.notePath=U.notePath,W.headingRef=U.heading,W.headingLevel=U.level),this.updatePin(r.id,W)}else{let W=this.addPin(i,w,T);U&&this.updatePin(W.id,{notePath:U.notePath,headingRef:U.heading,headingLevel:U.level})}this.hideEditor()});let I=S.createEl("button",{cls:"ai3d-annotation-editor-btn ai3d-annotation-editor-cancel"});I.textContent="Cancel",I.addEventListener("click",N=>{N.stopPropagation(),this.hideEditor()});let C=this.overlay.getBoundingClientRect(),y=e-C.left,D=t-C.top;if(s.style.setProperty("--editor-left",`${Math.max(0,Math.min(y,C.width-220))}px`),s.style.setProperty("--editor-top",`${Math.max(0,Math.min(D-10,C.height-160))}px`),this.editorEl=s,r!=null&&r.notePath&&(r!=null&&r.headingRef)){let N=qr(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=Q("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"}),l=t.getBoundingClientRect();s.style.setProperty("--popover-left",`${l.left+l.width/2}px`),s.style.setProperty("--popover-top",`${l.bottom+4}px`),s.addEventListener("mouseenter",()=>this.cancelHoverClose()),s.addEventListener("mouseleave",()=>this.scheduleHoverClose()),activeDocument.body.appendChild(s),this.hoverPopover=s,await this.renderPreviewContent(o,r,i.notePath,"popover"),(e!==this.hoverRequestId||!t.isConnected||!this.hostEl.isConnected)&&(this.clearRenderedPreview(o),this.hoverPopover===s&&(this.hoverPopover=null),s.remove())}hideHoverPopover(){if(this.hoverTimeout&&(window.clearTimeout(this.hoverTimeout),this.hoverTimeout=null),this.hoverCloseTimeout&&(window.clearTimeout(this.hoverCloseTimeout),this.hoverCloseTimeout=null),this.hoverPopover){let e=this.hoverPopover.querySelector(".ai3d-pin-popover-body");e&&this.clearRenderedPreview(e),this.hoverPopover.remove(),this.hoverPopover=null}}cancelHoverClose(){this.hoverCloseTimeout&&(window.clearTimeout(this.hoverCloseTimeout),this.hoverCloseTimeout=null)}scheduleHoverClose(){this.hoverTimeout&&(window.clearTimeout(this.hoverTimeout),this.hoverTimeout=null,this.hoverRequestId++),this.cancelHoverClose(),this.hoverCloseTimeout=window.setTimeout(()=>{this.hoverCloseTimeout=null,this.hoverRequestId++,this.hideHoverPopover()},180)}clearRenderedPreview(e){let t=this.previewRenderChildren.get(e);t&&(this.previewRenderRoot.removeChild(t),this.previewRenderChildren.delete(e)),e.replaceChildren()}removePinElement(e){e.querySelectorAll(".ai3d-rendered-preview").forEach(t=>{this.clearRenderedPreview(t)}),e.remove()}async renderPreviewContent(e,t,i,r){let s=this.previewMode==="markdown"&&!!this.previewApp,a=r==="editor",o=r==="pin-snippet";if(!s){let c=a?300:o?180:1/0,f=t.length>c?t.slice(0,c)+"...":t;e.textContent=f,e.className=a?"ai3d-editor-content-preview":o?"ai3d-pin-snippet ai3d-rendered-preview":"ai3d-pin-popover-body ai3d-rendered-preview",a&&e.classList.remove("is-hidden");return}e.className=a?"ai3d-editor-content-preview ai3d-editor-content-preview--markdown markdown-rendered":o?"ai3d-pin-snippet ai3d-pin-snippet--markdown ai3d-rendered-preview markdown-rendered":"ai3d-pin-popover-body ai3d-pin-popover-body--markdown ai3d-rendered-preview markdown-rendered",a&&e.classList.remove("is-hidden");let l=this.previewRenderRoot.addChild(new wp.Component);this.previewRenderChildren.set(e,l);try{await wp.MarkdownRenderer.render(this.previewApp,t,e,i,l)}catch(c){this.previewRenderRoot.removeChild(l),this.previewRenderChildren.delete(e);let f=a?300:o?180:1/0;e.textContent=t.length>f?t.slice(0,f)+"...":t,e.className=a?"ai3d-editor-content-preview":o?"ai3d-pin-snippet ai3d-rendered-preview":"ai3d-pin-popover-body ai3d-rendered-preview",a&&e.classList.remove("is-hidden"),console.warn("[AI3D] Annotation markdown preview fallback:",c)}}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"});if(t.dataset.pinId=e.id,this.renderPinDisplay(t,e),this.mode==="edit"){let i=t.createEl("button",{cls:"ai3d-pin-delete"});i.textContent="\xD7",i.addEventListener("click",r=>{r.stopPropagation(),this.removePin(e.id)}),t.addEventListener("click",r=>{r.target.closest(".ai3d-pin-delete")||(r.stopPropagation(),this.editPin(e.id))})}t.addEventListener("pointerdown",i=>i.stopPropagation()),t.addEventListener("wheel",i=>{i.preventDefault(),i.stopPropagation(),this.provider.canvas.dispatchEvent(new WheelEvent("wheel",{bubbles:!0,cancelable:!0,clientX:i.clientX,clientY:i.clientY,ctrlKey:i.ctrlKey,deltaMode:i.deltaMode,deltaX:i.deltaX,deltaY:i.deltaY,deltaZ:i.deltaZ,metaKey:i.metaKey,shiftKey:i.shiftKey}))},{passive:!1}),e.notePath&&e.headingRef&&this.noteReader&&(t.addEventListener("mouseenter",()=>{this.cancelHoverClose(),this.hoverTimeout&&window.clearTimeout(this.hoverTimeout);let i=++this.hoverRequestId;this.hoverTimeout=window.setTimeout(()=>{this.hoverTimeout=null,i===this.hoverRequestId&&this.showHoverPopover(i,t,e)},300)}),t.addEventListener("mouseleave",()=>{this.scheduleHoverClose()})),this.pinEls.set(e.id,{el:t,worldPos:{x:e.position[0],y:e.position[1],z:e.position[2]}})}renderPinDisplay(e,t){let i=e.querySelector(".ai3d-pin-delete");if(e.querySelectorAll(".ai3d-rendered-preview").forEach(s=>{this.clearRenderedPreview(s)}),e.replaceChildren(),e.className=`ai3d-annotation-pin ai3d-annotation-pin--${this.displayMode}`,e.createDiv({cls:"ai3d-pin-dot"}).style.setProperty("--pin-color",t.color),e.title=t.label,e.setAttribute("aria-label",t.label),this.displayMode!=="dot"){let s=e.createDiv({cls:"ai3d-pin-content"}),a=s.createSpan({cls:"ai3d-pin-label"});if(a.textContent=t.label,this.displayMode==="snippet"&&t.notePath&&t.headingRef&&this.noteReader){let o=s.createDiv({cls:"ai3d-pin-snippet ai3d-rendered-preview"});this.loadPinSnippet(o,t.notePath,t.headingRef)}}i&&e.appendChild(i)}async loadPinSnippet(e,t,i){if(!this.noteReader)return;let r=await this.noteReader(t,i);!r||!e.isConnected||await this.renderPreviewContent(e,r,t,"pin-snippet")}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>=Wd.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%lQ===0:this.frameCount%oQ===0,a=this.cameraIdle||r.length<=c0,o=a?0:this.movingOcclusionCursor%r.length,l=o+c0,c=Wd._scratchProjection,f=[];for(let h=0;h1||c.depth<0)this.hidePin(d.el);else{let u=Math.round(c.screenX),m=Math.round(c.screenY);d.el.style.setProperty("--pin-left",`${u}px`),d.el.style.setProperty("--pin-top",`${m}px`),this.updatePinPriority(d.el,c.depth),f.push({el:d.el,screenX:u,screenY:m,depth:c.depth});let p=a||h>=o&&hr.length&&h0&&(this.movingOcclusionCursor=(o+c0)%r.length),this.cameraIdle)this.applyLabelAvoidance(f);else for(let h of f)h.el.style.removeProperty("--pin-offset-y")}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>cQ){for(let a of e)a.el.style.removeProperty("--pin-offset-y");return}let i=e.filter(a=>!a.el.classList.contains("ai3d-pin-hidden")&&!a.el.classList.contains("ai3d-pin-occluded")).sort((a,o)=>a.depth-o.depth).map(a=>({pin:a,rect:a.el.getBoundingClientRect()})),r=[],s=[];for(let{pin:a,rect:o}of i){let l=0,c=o;for(let f of r){if(!hQ(c,f,Hw))continue;let h=a.screenY>=f.top+f.height/2?1:-1;l=Math.max(-zw,Math.min(zw,l+h*(f.height+Hw)));let d=c.width,u=c.height;c=new DOMRect(c.x,c.y+l,d,u)}r.push(c),s.push({el:a.el,offset:l})}for(let{el:a,offset:o}of s)a.setCssProps({"--pin-offset-y":o===0?"0px":`${o}px`})}hidePin(e){e.classList.remove("ai3d-pin-occluded"),e.classList.add("ai3d-pin-hidden")}showPin(e){e.classList.remove("ai3d-pin-hidden")}};Wd.IDLE_THRESHOLD=15,Wd._scratchProjection={screenX:0,screenY:0,depth:0};Fc=Wd});function uQ(n){return n!=null?n:jw}function Hd(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=uQ(n.rendererRollout);if(!(n.useThreeRenderer!==!1))return{backend:"babylon",ext:e,annotationMode:t,requireWorkbenchFeatures:s,rendererRollout:a,reason:"useThreeRenderer=false"};if(Kw.has(e)&&(!s||r)){if(s&&!dQ.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 Kw.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!==jw&&l.push(`rendererRollout=${a}`),{backend:"babylon",ext:e,annotationMode:t,requireWorkbenchFeatures:s,rendererRollout:a,reason:l.join(", ")||"fallback route"}}function qw(){return{backend:"babylon",reason:"grid previews remain on the Babylon grid renderer"}}var jw,Kw,dQ,Nv=M(()=>{"use strict";jw="three-direct-glb",Kw=new Set(["glb","gltf","stl","ply","obj"]),dQ=new Set(["glb","gltf"])});function mQ(n){for(let e=n.length-1;e>=0;--e)if(n[e]>=65535)return!0;return!1}function pQ(n){return ArrayBuffer.isView(n)&&!(n instanceof DataView)}function hu(n){return document.createElementNS("http://www.w3.org/1999/xhtml",n)}function g1(){let n=hu("canvas");return n.style.display="block",n}function Qp(...n){let e="THREE."+n.shift();du?du("log",e,...n):console.log(e,...n)}function v1(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=v1(n);let e="THREE."+n.shift();if(du)du("warn",e,...n);else{let t=n[0];t&&t.isStackTrace?console.warn(t.getError(e)):console.warn(e,...n)}}function Bt(...n){n=v1(n);let e="THREE."+n.shift();if(du)du("error",e,...n);else{let t=n[0];t&&t.isStackTrace?console.error(t.getError(e)):console.error(e,...n)}}function AE(...n){let e=n.join(" ");e in Zw||(Zw[e]=!0,Ct(...n))}function E1(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 Ya(){let n=Math.random()*4294967295|0,e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,i=Math.random()*4294967295|0;return(Mn[n&255]+Mn[n>>8&255]+Mn[n>>16&255]+Mn[n>>24&255]+"-"+Mn[e&255]+Mn[e>>8&255]+"-"+Mn[e>>16&15|64]+Mn[e>>24&255]+"-"+Mn[t&63|128]+Mn[t>>8&255]+"-"+Mn[t>>16&255]+Mn[t>>24&255]+Mn[i&255]+Mn[i>>8&255]+Mn[i>>16&255]+Mn[i>>24&255]).toLowerCase()}function mi(n,e,t){return Math.max(e,Math.min(t,n))}function mI(n,e){return(n%e+e)%e}function _Q(n,e,t,i,r){return i+(n-e)*(r-i)/(t-e)}function gQ(n,e,t){return n!==e?(t-n)/(e-n):0}function jp(n,e,t){return(1-t)*n+t*e}function vQ(n,e,t,i){return jp(n,e,1-Math.exp(-t*i))}function EQ(n,e=1){return e-Math.abs(mI(n,e*2)-e)}function SQ(n,e,t){return n<=e?0:n>=t?1:(n=(n-e)/(t-e),n*n*(3-2*n))}function TQ(n,e,t){return n<=e?0:n>=t?1:(n=(n-e)/(t-e),n*n*n*(n*(n*6-15)+10))}function AQ(n,e){return n+Math.floor(Math.random()*(e-n+1))}function xQ(n,e){return n+Math.random()*(e-n)}function RQ(n){return n*(.5-Math.random())}function bQ(n){n!==void 0&&(Qw=n);let e=Qw+=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 IQ(n){return n*Kp}function MQ(n){return n*uh}function CQ(n){return(n&n-1)===0&&n!==0}function yQ(n){return Math.pow(2,Math.ceil(Math.log(n)/Math.LN2))}function PQ(n){return Math.pow(2,Math.floor(Math.log(n)/Math.LN2))}function LQ(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 za(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 ji(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 DQ(){let n={enabled:!0,workingColorSpace:jn,spaces:{},convert:function(r,s,a){return this.enabled===!1||s===a||!s||!a||(this.spaces[s].transfer===Yi&&(r.r=Cl(r.r),r.g=Cl(r.g),r.b=Cl(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===Yi&&(r.r=lu(r.r),r.g=lu(r.g),r.b=lu(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===Nl?Zp: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 AE("ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),n.workingToColorSpace(r,s)},toWorkingColorSpace:function(r,s){return AE("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({[jn]:{primaries:e,whitePoint:i,transfer:Zp,toXYZ:Jw,fromXYZ:eF,luminanceCoefficients:t,workingColorSpaceConfig:{unpackColorSpace:Ii},outputColorSpaceConfig:{drawingBufferColorSpace:Ii}},[Ii]:{primaries:e,whitePoint:i,transfer:Yi,toXYZ:Jw,fromXYZ:eF,luminanceCoefficients:t,outputColorSpaceConfig:{drawingBufferColorSpace:Ii}}}),n}function Cl(n){return n<.04045?n*.0773993808:Math.pow(n*.9478672986+.0521327014,2.4)}function lu(n){return n<.0031308?n*12.92:1.055*Math.pow(n,.41666)-.055}function d0(n){return typeof HTMLImageElement!="undefined"&&n instanceof HTMLImageElement||typeof HTMLCanvasElement!="undefined"&&n instanceof HTMLCanvasElement||typeof ImageBitmap!="undefined"&&n instanceof ImageBitmap?xE.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 p0(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 x0(n,e,t,i,r){for(let s=0,a=n.length-3;s<=a;s+=3){rh.fromArray(n,s);let o=r.x*Math.abs(rh.x)+r.y*Math.abs(rh.y)+r.z*Math.abs(rh.z),l=e.dot(rh),c=t.dot(rh),f=i.dot(rh);if(Math.max(-Math.max(l,c,f),Math.min(l,c,f))>o)return!1}return!0}function zv(n,e,t,i,r,s){ru.subVectors(n,t).addScalar(.5).multiply(i),r!==void 0?(kp.x=s*ru.x-r*ru.y,kp.y=r*ru.x+s*ru.y):kp.copy(ru),n.copy(e),n.x+=kp.x,n.y+=kp.y,n.applyMatrix4(A1)}function YQ(n,e,t,i,r,s,a,o){let l;if(e.side===_n?l=i.intersectTriangle(a,s,r,!0,o):l=i.intersectTriangle(r,s,a,e.side===Ys,o),l===null)return null;$v.copy(o),$v.applyMatrix4(n.matrixWorld);let c=t.ray.origin.distanceTo($v);return ct.far?null:{distance:c,point:$v.clone(),object:n}}function Jv(n,e,t,i,r,s,a,o,l,c){n.getVertexPosition(o,jv),n.getVertexPosition(l,qv),n.getVertexPosition(c,Zv);let f=YQ(n,e,t,i,jv,qv,Zv,uF);if(f){let h=new se;Ml.getBarycoord(uF,jv,qv,Zv,h),r&&(f.uv=Ml.getInterpolatedAttribute(r,o,l,c,h,new It)),s&&(f.uv1=Ml.getInterpolatedAttribute(s,o,l,c,h,new It)),a&&(f.normal=Ml.getInterpolatedAttribute(a,o,l,c,h,new se),f.normal.dot(i.direction)>0&&f.normal.multiplyScalar(-1));let d={a:o,b:l,c,normal:new se,materialIndex:0};Ml.getNormal(jv,qv,Zv,d.normal),f.face=d,f.barycoord=h}return f}function nE(n,e,t,i,r,s,a){let o=n.geometry.attributes.position;if(IE.fromBufferAttribute(o,r),ME.fromBufferAttribute(o,s),t.distanceSqToSegment(IE,ME,N0,AF)>i)return;N0.applyMatrix4(n.matrixWorld);let c=e.ray.origin.distanceTo(N0);if(!(ce.far))return{distance:c,point:AF.clone().applyMatrix4(n.matrixWorld),index:a,face:null,faceIndex:null,barycoord:null,object:n}}function IF(n,e,t,i,r,s,a){let o=G0.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 xh(n){let e={};for(let t in n){e[t]={};for(let i in n[t]){let r=n[t][i];if(MF(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(MF(r[0])){let s=[];for(let a=0,o=r.length;a{qc={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},Zc={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},FF=0,j0=1,BF=2,v_=1,HE=2,bu=3,Ys=0,_n=1,pa=2,Wo=0,ch=1,q0=2,Z0=3,Q0=4,UF=5,Hc=100,VF=101,GF=102,kF=103,WF=104,HF=200,zF=201,XF=202,YF=203,dE=204,uE=205,KF=206,jF=207,qF=208,ZF=209,QF=210,$F=211,JF=212,e1=213,t1=214,mE=0,pE=1,_E=2,fh=3,gE=4,vE=5,EE=6,SE=7,E_=0,i1=1,r1=2,Es=0,$0=1,J0=2,eI=3,tI=4,iI=5,rI=6,nI=7,B0="attached",n1="detached",sI=300,Qc=301,Th=302,zE=303,XE=304,S_=306,Oo=1e3,ua=1001,cu=1002,Nr=1003,YE=1004,Ah=1005,wr=1006,Iu=1007,Qa=1008,Ss=1009,aI=1010,oI=1011,Mu=1012,KE=1013,$a=1014,qs=1015,Ho=1016,jE=1017,qE=1018,Cu=1020,lI=35902,cI=35899,fI=1021,hI=1022,Zs=1023,No=1026,$c=1027,ZE=1028,QE=1029,Jc=1030,$E=1031,JE=1033,T_=33776,A_=33777,x_=33778,R_=33779,eS=35840,tS=35841,iS=35842,rS=35843,nS=36196,sS=37492,aS=37496,oS=37488,lS=37489,b_=37490,cS=37491,fS=37808,hS=37809,dS=37810,uS=37811,mS=37812,pS=37813,_S=37814,gS=37815,vS=37816,ES=37817,SS=37818,TS=37819,AS=37820,xS=37821,RS=36492,bS=36494,IS=36495,MS=36283,CS=36284,I_=36285,yS=36286,s1=2200,a1=2201,o1=2202,hh=2300,dh=2301,hE=2302,U0=2303,oh=2400,lh=2401,qp=2402,PS=2500,l1=2501,dI=0,M_=1,yu=2,c1=3200,Pu=0,f1=1,Nl="",Ii="srgb",jn="srgb-linear",Zp="linear",Yi="srgb",ah=7680,V0=519,h1=512,d1=513,u1=514,LS=515,m1=516,p1=517,DS=518,_1=519,TE=35044,uI="300 es",Xa=2e3,fu=2001;Zw={},du=null;S1={[mE]:pE,[_E]:EE,[gE]:SE,[fh]:vE,[pE]:mE,[EE]:_E,[SE]:gE,[vE]:fh},ma=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}},SI=class SI{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($w.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion($w.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 f0.copy(this).projectOnVector(e),this.sub(f0)}reflect(e){return this.sub(f0.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}};SI.prototype.isVector3=!0;se=SI,f0=new se,$w=new Qr,TI=class TI{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],p=r[0],_=r[3],g=r[6],v=r[1],x=r[4],T=r[7],E=r[2],S=r[5],R=r[8];return s[0]=a*p+o*v+l*E,s[3]=a*_+o*x+l*S,s[6]=a*g+o*T+l*R,s[1]=c*p+f*v+h*E,s[4]=c*_+f*x+h*S,s[7]=c*g+f*T+h*R,s[2]=d*p+u*v+m*E,s[5]=d*_+u*x+m*S,s[8]=d*g+u*T+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 p=1/m;return e[0]=h*p,e[1]=(r*c-f*i)*p,e[2]=(o*i-r*a)*p,e[3]=d*p,e[4]=(f*t-r*l)*p,e[5]=(r*s-o*t)*p,e[6]=u*p,e[7]=(i*l-c*t)*p,e[8]=(a*t-i*s)*p,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(h0.makeScale(e,t)),this}rotate(e){return this.premultiply(h0.makeRotation(-e)),this}translate(e,t){return this.premultiply(h0.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)}};TI.prototype.isMatrix3=!0;ri=TI,h0=new ri,Jw=new ri().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),eF=new ri().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);oi=DQ();xE=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{zd===void 0&&(zd=hu("canvas")),zd.width=e.width,zd.height=e.height;let r=zd.getContext("2d");e instanceof ImageData?r.putImageData(e,0,0):r.drawImage(e,0,0,e.width,e.height),i=zd}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=hu("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(u0).x}get height(){return this.source.getSize(u0).y}get depth(){return this.source.getSize(u0).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!==sI)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case Oo:e.x=e.x-Math.floor(e.x);break;case ua:e.x=e.x<0?0:1;break;case cu: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 Oo:e.y=e.y-Math.floor(e.y);break;case ua:e.y=e.y<0?0:1;break;case cu: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++}};Tr.DEFAULT_IMAGE=null;Tr.DEFAULT_MAPPING=sI;Tr.DEFAULT_ANISOTROPY=1;AI=class AI{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],p=l[2],_=l[6],g=l[10];if(Math.abs(f-d)<.01&&Math.abs(h-p)<.01&&Math.abs(m-_)<.01){if(Math.abs(f+d)<.1&&Math.abs(h+p)<.1&&Math.abs(m+_)<.1&&Math.abs(c+u+g-3)<.1)return this.set(1,0,0,0),this;t=Math.PI;let x=(c+1)/2,T=(u+1)/2,E=(g+1)/2,S=(f+d)/4,R=(h+p)/4,I=(m+_)/4;return x>T&&x>E?x<.01?(i=0,r=.707106781,s=.707106781):(i=Math.sqrt(x),r=S/i,s=R/i):T>E?T<.01?(i=.707106781,r=0,s=.707106781):(r=Math.sqrt(T),i=S/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((_-m)*(_-m)+(h-p)*(h-p)+(d-f)*(d-f));return Math.abs(v)<.001&&(v=1),this.x=(_-m)/v,this.y=(h-p)/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}};AI.prototype.isVector4=!0;Ji=AI,RE=class extends ma{constructor(e=1,t=1,i={}){super(),i=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:wr,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 Tr(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(kQ)))}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 Xs;i.matrixAutoUpdate=!1,i.visible=!1,e.joints[t.jointName]=i,e.add(i)}return e.joints[t.jointName]}},T1={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},Uc={h:0,s:0,l:0},Bv={h:0,s:0,l:0};ft=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=Ii){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,oi.colorSpaceToWorking(this,t),this}setRGB(e,t,i,r=oi.workingColorSpace){return this.r=e,this.g=t,this.b=i,oi.colorSpaceToWorking(this,r),this}setHSL(e,t,i,r=oi.workingColorSpace){if(e=mI(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=p0(a,s,e+1/3),this.g=p0(a,s,e),this.b=p0(a,s,e-1/3)}return oi.colorSpaceToWorking(this,r),this}setStyle(e,t=Ii){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=Ii){let i=T1[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=Cl(e.r),this.g=Cl(e.g),this.b=Cl(e.b),this}copyLinearToSRGB(e){return this.r=lu(e.r),this.g=lu(e.g),this.b=lu(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=Ii){return oi.workingToColorSpace(Cn.copy(this),e),Math.round(mi(Cn.r*255,0,255))*65536+Math.round(mi(Cn.g*255,0,255))*256+Math.round(mi(Cn.b*255,0,255))}getHexString(e=Ii){return("000000"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=oi.workingColorSpace){oi.workingToColorSpace(Cn.copy(this),t);let i=Cn.r,r=Cn.g,s=Cn.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}},Wa=new se,Al=new se,_0=new se,xl=new se,jd=new se,qd=new se,lF=new se,g0=new se,v0=new se,E0=new se,S0=new Ji,T0=new Ji,A0=new Ji,Ml=class n{constructor(e=new se,t=new se,i=new se){this.a=e,this.b=t,this.c=i}static getNormal(e,t,i,r){r.subVectors(i,t),Wa.subVectors(e,t),r.cross(Wa);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){Wa.subVectors(r,t),Al.subVectors(i,t),_0.subVectors(e,t);let a=Wa.dot(Wa),o=Wa.dot(Al),l=Wa.dot(_0),c=Al.dot(Al),f=Al.dot(_0),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,xl)===null?!1:xl.x>=0&&xl.y>=0&&xl.x+xl.y<=1}static getInterpolation(e,t,i,r,s,a,o,l){return this.getBarycoord(e,t,i,r,xl)===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,xl.x),l.addScaledVector(a,xl.y),l.addScaledVector(o,xl.z),l)}static getInterpolatedAttribute(e,t,i,r,s,a){return S0.setScalar(0),T0.setScalar(0),A0.setScalar(0),S0.fromBufferAttribute(e,t),T0.fromBufferAttribute(e,i),A0.fromBufferAttribute(e,r),a.setScalar(0),a.addScaledVector(S0,s.x),a.addScaledVector(T0,s.y),a.addScaledVector(A0,s.z),a}static isFrontFacing(e,t,i,r){return Wa.subVectors(i,t),Al.subVectors(e,t),Wa.cross(Al).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 Wa.subVectors(this.c,this.b),Al.subVectors(this.a,this.b),Wa.cross(Al).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;jd.subVectors(r,i),qd.subVectors(s,i),g0.subVectors(e,i);let l=jd.dot(g0),c=qd.dot(g0);if(l<=0&&c<=0)return t.copy(i);v0.subVectors(e,r);let f=jd.dot(v0),h=qd.dot(v0);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(jd,a);E0.subVectors(e,s);let u=jd.dot(E0),m=qd.dot(E0);if(m>=0&&u<=m)return t.copy(s);let p=u*c-l*m;if(p<=0&&c>=0&&m<=0)return o=c/(c-m),t.copy(i).addScaledVector(qd,o);let _=f*m-u*h;if(_<=0&&h-f>=0&&u-m>=0)return lF.subVectors(s,r),o=(h-f)/(h-f+(u-m)),t.copy(r).addScaledVector(lF,o);let g=1/(_+p+d);return a=p*g,o=d*g,t.copy(i).addScaledVector(jd,a).addScaledVector(qd,o)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}},Ar=class{constructor(e=new se(1/0,1/0,1/0),t=new se(-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,Ha),Ha.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(Bp),Vv.subVectors(this.max,Bp),Zd.subVectors(e.a,Bp),Qd.subVectors(e.b,Bp),$d.subVectors(e.c,Bp),Vc.subVectors(Qd,Zd),Gc.subVectors($d,Qd),ih.subVectors(Zd,$d);let t=[0,-Vc.z,Vc.y,0,-Gc.z,Gc.y,0,-ih.z,ih.y,Vc.z,0,-Vc.x,Gc.z,0,-Gc.x,ih.z,0,-ih.x,-Vc.y,Vc.x,0,-Gc.y,Gc.x,0,-ih.y,ih.x,0];return!x0(t,Zd,Qd,$d,Vv)||(t=[1,0,0,0,1,0,0,0,1],!x0(t,Zd,Qd,$d,Vv))?!1:(Gv.crossVectors(Vc,Gc),t=[Gv.x,Gv.y,Gv.z],x0(t,Zd,Qd,$d,Vv))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,Ha).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(Ha).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:(Rl[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),Rl[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),Rl[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),Rl[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),Rl[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),Rl[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),Rl[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),Rl[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(Rl),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}},Rl=[new se,new se,new se,new se,new se,new se,new se,new se],Ha=new se,Uv=new Ar,Zd=new se,Qd=new se,$d=new se,Vc=new se,Gc=new se,ih=new se,Bp=new se,Vv=new se,Gv=new se,rh=new se;Hr=new se,kv=new It,WQ=0,hr=class extends ma{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:WQ++}),this.name="",this.array=e,this.itemSize=t,this.count=e!==void 0?e.length/t:0,this.normalized=i,this.usage=TE,this.updateRanges=[],this.gpuType=qs,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;Up.subVectors(e,this.center);let t=Up.lengthSq();if(t>this.radius*this.radius){let i=Math.sqrt(t),r=(i-this.radius)*.5;this.center.addScaledVector(Up,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):(R0.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(Up.copy(e.center).add(R0)),this.expandByPoint(Up.copy(e.center).sub(R0))),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}},zQ=0,ha=new li,b0=new nr,Jd=new se,zs=new Ar,Vp=new Ar,ln=new se,Hi=class n extends ma{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:zQ++}),this.uuid=Ya(),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(mQ(e)?e_:Jp)(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 ri().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 ha.makeRotationFromQuaternion(e),this.applyMatrix4(ha),this}rotateX(e){return ha.makeRotationX(e),this.applyMatrix4(ha),this}rotateY(e){return ha.makeRotationY(e),this.applyMatrix4(ha),this}rotateZ(e){return ha.makeRotationZ(e),this.applyMatrix4(ha),this}translate(e,t,i){return ha.makeTranslation(e,t,i),this.applyMatrix4(ha),this}scale(e,t,i){return ha.makeScale(e,t,i),this.applyMatrix4(ha),this}lookAt(e){return b0.lookAt(e),b0.updateMatrix(),this.applyMatrix4(b0.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(Jd).negate(),this.translate(Jd.x,Jd.y,Jd.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 Ar);let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){Bt("BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new se(-1/0,-1/0,-1/0),new se(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!==ch&&(i.blending=this.blending),this.side!==Ys&&(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!==dE&&(i.blendSrc=this.blendSrc),this.blendDst!==uE&&(i.blendDst=this.blendDst),this.blendEquation!==Hc&&(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!==fh&&(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!==V0&&(i.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(i.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(i.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==ah&&(i.stencilFail=this.stencilFail),this.stencilZFail!==ah&&(i.stencilZFail=this.stencilZFail),this.stencilZPass!==ah&&(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++}},_u=class extends Fr{constructor(e){super(),this.isSpriteMaterial=!0,this.type="SpriteMaterial",this.color=new ft(16777215),this.map=null,this.alphaMap=null,this.rotation=0,this.sizeAttenuation=!0,this.transparent=!0,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.alphaMap=e.alphaMap,this.rotation=e.rotation,this.sizeAttenuation=e.sizeAttenuation,this.fog=e.fog,this}},Gp=new se,tu=new se,iu=new se,ru=new It,kp=new It,A1=new li,Wv=new se,Wp=new se,Hv=new se,cF=new It,I0=new It,fF=new It,t_=class extends nr{constructor(e=new _u){if(super(),this.isSprite=!0,this.type="Sprite",eu===void 0){eu=new Hi;let t=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]),i=new ph(t,5);eu.setIndex([0,1,2,0,2,3]),eu.setAttribute("position",new zc(i,3,0,!1)),eu.setAttribute("uv",new zc(i,2,3,!1))}this.geometry=eu,this.material=e,this.center=new It(.5,.5),this.count=1}raycast(e,t){e.camera===null&&Bt('Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.'),tu.setFromMatrixScale(this.matrixWorld),A1.copy(e.camera.matrixWorld),this.modelViewMatrix.multiplyMatrices(e.camera.matrixWorldInverse,this.matrixWorld),iu.setFromMatrixPosition(this.modelViewMatrix),e.camera.isPerspectiveCamera&&this.material.sizeAttenuation===!1&&tu.multiplyScalar(-iu.z);let i=this.material.rotation,r,s;i!==0&&(s=Math.cos(i),r=Math.sin(i));let a=this.center;zv(Wv.set(-.5,-.5,0),iu,a,tu,r,s),zv(Wp.set(.5,-.5,0),iu,a,tu,r,s),zv(Hv.set(.5,.5,0),iu,a,tu,r,s),cF.set(0,0),I0.set(1,0),fF.set(1,1);let o=e.ray.intersectTriangle(Wv,Wp,Hv,!1,Gp);if(o===null&&(zv(Wp.set(-.5,.5,0),iu,a,tu,r,s),I0.set(0,1),o=e.ray.intersectTriangle(Wv,Hv,Wp,!1,Gp),o===null))return;let l=e.ray.origin.distanceTo(Gp);le.far||t.push({distance:l,point:Gp.clone(),uv:Ml.getInterpolation(Gp,Wv,Wp,Hv,cF,I0,fF,new It),face:null,object:this})}copy(e,t){return super.copy(e,t),e.center!==void 0&&this.center.copy(e.center),this.material=e.material,this}};bl=new se,M0=new se,Xv=new se,kc=new se,C0=new se,Yv=new se,y0=new se,wo=class{constructor(e=new se,t=new se(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,bl)),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=bl.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(bl.copy(this.origin).addScaledVector(this.direction,t),bl.distanceToSquared(e))}distanceSqToSegment(e,t,i,r){M0.copy(e).add(t).multiplyScalar(.5),Xv.copy(t).sub(e).normalize(),kc.copy(this.origin).sub(M0);let s=e.distanceTo(t)*.5,a=-this.direction.dot(Xv),o=kc.dot(this.direction),l=-kc.dot(Xv),c=kc.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 p=1/f;h*=p,d*=p,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(M0).addScaledVector(Xv,d),u}intersectSphere(e,t){bl.subVectors(e.center,this.origin);let i=bl.dot(this.direction),r=bl.dot(bl)-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,bl)!==null}intersectTriangle(e,t,i,r,s){C0.subVectors(t,e),Yv.subVectors(i,e),y0.crossVectors(C0,Yv);let a=this.direction.dot(y0),o;if(a>0){if(r)return null;o=1}else if(a<0)o=-1,a=-a;else return null;kc.subVectors(this.origin,e);let l=o*this.direction.dot(Yv.crossVectors(kc,Yv));if(l<0)return null;let c=o*this.direction.dot(C0.cross(kc));if(c<0||l+c>a)return null;let f=-o*kc.dot(y0);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)}},qn=class extends Fr{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new ft(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=E_,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}},hF=new li,nh=new wo,Kv=new ds,dF=new se,jv=new se,qv=new se,Zv=new se,P0=new se,Qv=new se,uF=new se,$v=new se,ti=class extends nr{constructor(e=new Hi,t=new qn){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))&&(hF.copy(s).invert(),nh.copy(e.ray).applyMatrix4(hF),!(i.boundingBox!==null&&nh.intersectsBox(i.boundingBox)===!1)&&this._computeIntersections(e,t,nh)))}_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,p=d.length;m1)?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||QQ.getNormalMatrix(e),r=this.coplanarPoint(O0).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)}},sh=new ds,$Q=new It(.5,.5),iE=new se,Eu=class{constructor(e=new da,t=new da,i=new da,r=new da,s=new da,a=new da){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=Xa,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],p=s[9],_=s[10],g=s[11],v=s[12],x=s[13],T=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+p,E+x).normalize(),r[3].setComponents(c-o,u-h,g-p,E-x).normalize(),i)r[4].setComponents(l,d,_,T).normalize(),r[5].setComponents(c-l,u-d,g-_,E-T).normalize();else if(r[4].setComponents(c-l,u-d,g-_,E-T).normalize(),t===Xa)r[5].setComponents(c+l,u+d,g+_,E+T).normalize();else if(t===fu)r[5].setComponents(l,d,_,T).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(),sh.copy(e.boundingSphere).applyMatrix4(e.matrixWorld);else{let t=e.geometry;t.boundingSphere===null&&t.computeBoundingSphere(),sh.copy(t.boundingSphere).applyMatrix4(e.matrixWorld)}return this.intersectsSphere(sh)}intersectsSprite(e){sh.center.set(0,0,0);let t=$Q.distanceTo(e.center);return sh.radius=.7071067811865476+t,sh.applyMatrix4(e.matrixWorld),this.intersectsSphere(sh)}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,iE.y=r.normal.y>0?e.max.y:e.min.y,iE.z=r.normal.z>0?e.max.z:e.min.z,r.distanceToPoint(iE)<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)}},yn=class extends Fr{constructor(e){super(),this.isLineBasicMaterial=!0,this.type="LineBasicMaterial",this.color=new ft(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}},IE=new se,ME=new se,TF=new li,Yp=new wo,rE=new ds,N0=new se,AF=new se,Fo=class extends nr{constructor(e=new Hi,t=new yn){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($.x,$.y,$.z),h.push(Y/R),h.push(1-J/I),W+=1}}for(let J=0;J0)&&u.push(x,T,S),(g!==i-1||l0&&(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}},IE=class extends Xs{constructor(e){super(e),this.isRawShaderMaterial=!0,this.type="RawShaderMaterial"}},Cn=class extends wr{constructor(e){super(),this.isMeshStandardMaterial=!0,this.type="MeshStandardMaterial",this.defines={STANDARD:""},this.color=new ft(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 ft(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=Pu,this.normalScale=new It(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}},ms=class extends Cn{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 It(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 ft(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 ft(1,1,1),this.specularIntensity=1,this.specularIntensityMap=null,this.specularColor=new ft(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}},vh=class extends wr{constructor(e){super(),this.isMeshPhongMaterial=!0,this.type="MeshPhongMaterial",this.color=new ft(16777215),this.specular=new ft(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new ft(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=Pu,this.normalScale=new It(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=v_,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}},l_=class extends wr{constructor(e){super(),this.isMeshLambertMaterial=!0,this.type="MeshLambertMaterial",this.color=new ft(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new ft(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=Pu,this.normalScale=new It(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=v_,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}},ME=class extends wr{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=t1,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}},CE=class extends wr{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}};Fo=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&&(Ut("KeyframeTrack: Invalid value size in track.",this),e=!1);let i=this.times,r=this.values,s=i.length;s===0&&(Ut("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)){Ut("KeyframeTrack: Time is not a valid number.",this,o,l),e=!1;break}if(a!==null&&a>l){Ut("KeyframeTrack: Out of order keys.",this,o,l,a),e=!1;break}a=l}if(r!==void 0&&nQ(r))for(let o=0,l=r.length;o!==l;++o){let c=r[o];if(isNaN(c)){Ut("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()===lE,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}};ps.prototype.ValueTypeName="";ps.prototype.TimeBufferType=Float32Array;ps.prototype.ValueBufferType=Float32Array;ps.prototype.DefaultInterpolation=dh;yl=class extends ps{constructor(e,t,i){super(e,t,i)}};yl.prototype.ValueTypeName="bool";yl.prototype.ValueBufferType=Array;yl.prototype.DefaultInterpolation=hh;yl.prototype.InterpolantFactoryMethodLinear=void 0;yl.prototype.InterpolantFactoryMethodSmooth=void 0;f_=class extends ps{constructor(e,t,i,r){super(e,t,i,r)}};f_.prototype.ValueTypeName="color";Uo=class extends ps{constructor(e,t,i,r){super(e,t,i,r)}};Uo.prototype.ValueTypeName="number";DE=class extends Fo{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)Qr.slerpFlat(s,0,a,c-o,a,c,l);return s}},Bo=class extends ps{constructor(e,t,i,r){super(e,t,i,r)}InterpolantFactoryMethodLinear(e){return new DE(this.times,this.values,this.getValueSize(),e)}};Bo.prototype.ValueTypeName="quaternion";Bo.prototype.InterpolantFactoryMethodSmooth=void 0;Pl=class extends ps{constructor(e,t,i){super(e,t,i)}};Pl.prototype.ValueTypeName="string";Pl.prototype.ValueBufferType=Array;Pl.prototype.DefaultInterpolation=hh;Pl.prototype.InterpolantFactoryMethodLinear=void 0;Pl.prototype.InterpolantFactoryMethodSmooth=void 0;Vo=class extends ps{constructor(e,t,i,r){super(e,t,i,r)}};Vo.prototype.ValueTypeName="vector";Eh=class{constructor(e="",t=-1,i=[],r=MS){this.name=e,this.tracks=i,this.duration=t,this.blendMode=r,this.uuid=Ya(),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(KQ(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(ps.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 Ut("AnimationClip: No animation in JSONLoader data."),null;let i=function(h,d,u,m,p){if(u.length!==0){let _=[],g=[];_1(u,_,g,m),_.length!==0&&p.push(new h(d,_,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(bl[e]!==void 0){bl[e].push({onLoad:t,onProgress:i,onError:r});return}bl[e]=[],bl[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=bl[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,p=0,_=new ReadableStream({start(g){v();function v(){h.read().then(({done:x,value:A})=>{if(x)g.close();else{p+=A.byteLength;let E=new ProgressEvent("progress",{lengthComputable:m,loaded:p,total:u});for(let S=0,R=f.length;S{g.error(x)})}}});return new Response(_)}else throw new B0(`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=>{Lo.add(`file:${e}`,c);let f=bl[e];delete bl[e];for(let h=0,d=f.length;h{let f=bl[e];if(f===void 0)throw this.manager.itemError(e),c;delete bl[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}},su=new WeakMap,NE=class extends cn{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=Lo.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=su.get(a);h===void 0&&(h=[],su.set(a,h)),h.push({onLoad:t,onError:r})}return a}let o=hu("img");function l(){f(),t&&t(this);let h=su.get(this)||[];for(let d=0;d{O0.has(a)===!0?(r&&r(O0.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){Lo.add(`image-bitmap:${e}`,c),t&&t(c),s.manager.itemEnd(e)}).catch(function(c){r&&r(c),O0.set(l,c),Lo.remove(`image-bitmap:${e}`),s.manager.itemError(e),s.manager.itemEnd(e)});Lo.add(`image-bitmap:${e}`,l),s.manager.itemStart(e)}abort(){return this._abortController.abort(),this._abortController=new AbortController,this}},au=-90,ou=1,wE=class extends nr{constructor(e,t,i){super(),this.type="CubeCamera",this.renderTarget=i,this.coordinateSystem=null,this.activeMipmapLevel=0;let r=new fr(au,ou,e,t);r.layers=this.layers,this.add(r);let s=new fr(au,ou,e,t);s.layers=this.layers,this.add(s);let a=new fr(au,ou,e,t);a.layers=this.layers,this.add(a);let o=new fr(au,ou,e,t);o.layers=this.layers,this.add(o);let l=new fr(au,ou,e,t);l.layers=this.layers,this.add(l);let c=new fr(au,ou,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===Xa)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===fu)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 p=i.texture.generateMipmaps;i.texture.generateMipmaps=!1;let _=!1;e.isWebGLRenderer===!0?_=e.state.buffers.depth.getReversed():_=e.reversedDepthBuffer,e.setRenderTarget(i,0,r),_&&e.autoClear===!1&&e.clearDepth(),e.render(t,s),e.setRenderTarget(i,1,r),_&&e.autoClear===!1&&e.clearDepth(),e.render(t,a),e.setRenderTarget(i,2,r),_&&e.autoClear===!1&&e.clearDepth(),e.render(t,o),e.setRenderTarget(i,3,r),_&&e.autoClear===!1&&e.clearDepth(),e.render(t,l),e.setRenderTarget(i,4,r),_&&e.autoClear===!1&&e.clearDepth(),e.render(t,c),i.texture.generateMipmaps=p,e.setRenderTarget(i,5,r),_&&e.autoClear===!1&&e.clearDepth(),e.render(t,f),e.setRenderTarget(h,d,u),e.xr.enabled=m,i.texture.needsPMREMUpdate=!0}},FE=class extends fr{constructor(e=[]){super(),this.isArrayCamera=!0,this.isMultiViewCamera=!1,this.cameras=e}},UE=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){Qr.slerpFlat(e,t,e,t,e,i,r)}_slerpAdditive(e,t,i,r,s){let a=this._workIndex*s;Qr.multiplyQuaternionsFlat(e,a,e,t,e,i),Qr.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}}},uI="\\[\\]\\.:\\/",jQ=new RegExp("["+uI+"]","g"),mI="[^"+uI+"]",qQ="[^"+uI.replace("\\.","")+"]",ZQ=/((?:WC+[\/:])*)/.source.replace("WC",mI),QQ=/(WCOD+)?/.source.replace("WCOD",qQ),$Q=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",mI),JQ=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",mI),e$=new RegExp("^"+ZQ+QQ+$Q+JQ+"$"),t$=["material","materials","bones","map"],W0=class{constructor(e,t,i){let r=i||$i.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()}},$i=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(jQ,"")}static parseTrackName(e){let t=e$.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);t$.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 e1:for(let f=0,h=l.length;f!==h;++f)l[f].evaluate(a),c[f].accumulateAdditive(o);break;case MS: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===JF;if(e===0)return s===-1?r:a&&(s&1)===1?t-r:r;if(i===QF){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=lh,r.endingEnd=lh):(e?r.endingStart=this.zeroSlopeAtStart?lh:oh:r.endingStart=jp,t?r.endingEnd=this.zeroSlopeAtEnd?lh:oh:r.endingEnd=jp)}_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}},i$=new Float32Array(1),m_=class extends ua{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 p=t&&t._propertyBindings[h].binding.parsedPath;m=new UE($i.create(i,u,p),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?_(a,o):A&&A.isColor&&(_(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 p(v,x){let A=u(x);A&&(A.isCubeTexture||A.mapping===E_)?(c===void 0&&(c=new ri(new Yc(1,1,1),new Xs({name:"BackgroundCubeMaterial",uniforms:xh(zo.backgroundCube.uniforms),vertexShader:zo.backgroundCube.vertexShader,fragmentShader:zo.backgroundCube.fragmentShader,side:pn,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),c.geometry.deleteAttribute("normal"),c.geometry.deleteAttribute("uv"),c.onBeforeRender=function(E,S,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(Gee.makeRotationFromEuler(x.backgroundRotation)).transpose(),A.isCubeTexture&&A.isRenderTargetTexture===!1&&c.material.uniforms.backgroundRotation.value.premultiply(G1),c.material.toneMapped=oi.getTransfer(A.colorSpace)!==Yi,(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 ri(new gh(2,2),new Xs({name:"BackgroundMaterial",uniforms:xh(zo.background.uniforms),vertexShader:zo.background.vertexShader,fragmentShader:zo.background.fragmentShader,side:Hs,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=oi.getTransfer(A.colorSpace)!==Yi,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 _(v,x){v.getRGB(LS,dI(n)),t.buffers.color.setClear(LS.r,LS.g,LS.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,_(a,o)},getClearAlpha:function(){return o},setClearAlpha:function(v){o=v,_(a,o)},render:m,addToRenderList:p,dispose:g}}function Wee(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 B=!1,W=h(D,N,V,O);s!==W&&(s=W,c(s.object)),B=u(D,N,V,w),B&&m(D,N,V,w),w!==null&&e.update(w,n.ELEMENT_ARRAY_BUFFER),(B||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,B=i[O.id];B===void 0&&(B={},i[O.id]=B);let W=D.isInstancedMesh===!0?D.id:0,te=B[W];te===void 0&&(te={},B[W]=te);let $=te[V.id];$===void 0&&($={},te[V.id]=$);let J=$[w];return J===void 0&&(J=d(l()),$[w]=J),J}function d(D){let O=[],V=[],N=[];for(let w=0;w=0){let z=w[$],Y=B[$];if(Y===void 0&&($==="instanceMatrix"&&D.instanceMatrix&&(Y=D.instanceMatrix),$==="instanceColor"&&D.instanceColor&&(Y=D.instanceColor)),z===void 0||z.attribute!==Y||Y&&z.data!==Y.data)return!0;W++}return s.attributesNum!==W||s.index!==N}function m(D,O,V,N){let w={},B=O.attributes,W=0,te=V.getAttributes();for(let $ in te)if(te[$].location>=0){let z=B[$];z===void 0&&($==="instanceMatrix"&&D.instanceMatrix&&(z=D.instanceMatrix),$==="instanceColor"&&D.instanceColor&&(z=D.instanceColor));let Y={};Y.attribute=z,z&&z.data&&(Y.data=z.data),w[$]=Y,W++}s.attributes=w,s.attributesNum=W,s.index=N}function p(){let D=s.newAttributes;for(let O=0,V=D.length;O=0){let J=w[te];if(J===void 0&&(te==="instanceMatrix"&&D.instanceMatrix&&(J=D.instanceMatrix),te==="instanceColor"&&D.instanceColor&&(J=D.instanceColor)),J!==void 0){let z=J.normalized,Y=J.itemSize,me=e.get(J);if(me===void 0)continue;let xe=me.buffer,Ue=me.type,ae=me.bytesPerElement,ve=Ue===n.INT||Ue===n.UNSIGNED_INT||J.gpuType===zE;if(J.isInterleavedBufferAttribute){let ne=J.data,ue=ne.stride,De=J.offset;if(ne.isInstancedInterleavedBuffer){for(let de=0;de<$.locationSize;de++)g($.location+de,ne.meshPerAttribute);D.isInstancedMesh!==!0&&N._maxInstanceCount===void 0&&(N._maxInstanceCount=ne.meshPerAttribute*ne.count)}else for(let de=0;de<$.locationSize;de++)_($.location+de);n.bindBuffer(n.ARRAY_BUFFER,xe);for(let de=0;de<$.locationSize;de++)x($.location+de,Y/$.locationSize,Ue,z,ue*ae,(De+Y/$.locationSize*de)*ae,ve)}else{if(J.isInstancedBufferAttribute){for(let ne=0;ne<$.locationSize;ne++)g($.location+ne,J.meshPerAttribute);D.isInstancedMesh!==!0&&N._maxInstanceCount===void 0&&(N._maxInstanceCount=J.meshPerAttribute*J.count)}else for(let ne=0;ne<$.locationSize;ne++)_($.location+ne);n.bindBuffer(n.ARRAY_BUFFER,xe);for(let ne=0;ne<$.locationSize;ne++)x($.location+ne,Y/$.locationSize,Ue,z,Y*ae,Y/$.locationSize*ne*ae,ve)}}else if(W!==void 0){let z=W[te];if(z!==void 0)switch(z.length){case 2:n.vertexAttrib2fv($.location,z);break;case 3:n.vertexAttrib3fv($.location,z);break;case 4:n.vertexAttrib4fv($.location,z);break;default:n.vertexAttrib1fv($.location,z)}}}}v()}function E(){C();for(let D in i){let O=i[D];for(let V in O){let N=O[V];for(let w in N){let B=N[w];for(let W in B)f(B[W].object),delete B[W];delete N[w]}}delete i[D]}}function S(D){if(i[D.id]===void 0)return;let O=i[D.id];for(let V in O){let N=O[V];for(let w in N){let B=N[w];for(let W in B)f(B[W].object),delete B[W];delete N[w]}}delete i[D.id]}function R(D){for(let O in i){let V=i[O];for(let N in V){let w=V[N];if(w[D.id]===void 0)continue;let B=w[D.id];for(let W in B)f(B[W].object),delete B[W];delete w[D.id]}}}function I(D){for(let O in i){let V=i[O],N=D.isInstancedMesh===!0?D.id:0,w=V[N];if(w!==void 0){for(let B in w){let W=w[B];for(let te in W)f(W[te].object),delete W[te];delete w[B]}delete V[N],Object.keys(V).length===0&&delete i[O]}}}function C(){y(),a=!0,s!==r&&(s=r,c(s.object))}function y(){r.geometry=null,r.program=null,r.wireframe=!1}return{setup:o,reset:C,resetDefaultState:y,dispose:E,releaseStatesOfGeometry:S,releaseStatesOfObject:I,releaseStatesOfProgram:R,initAttributes:p,enableAttribute:_,disableUnusedAttributes:v}}function Hee(n,e,t){let i;function r(l){i=l}function s(l,c){n.drawArrays(i,l,c),t.update(c,i,1)}function a(l,c,f){f!==0&&(n.drawArraysInstanced(i,l,c,f),t.update(c,i,f))}function o(l,c,f){if(f===0)return;e.get("WEBGL_multi_draw").multiDrawArraysWEBGL(i,l,0,c,0,f);let d=0;for(let u=0;u0&&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),p=n.getParameter(n.MAX_TEXTURE_SIZE),_=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),S=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:p,maxCubemapSize:_,maxAttributes:g,maxVertexUniforms:v,maxVaryings:x,maxFragmentUniforms:A,maxSamples:E,samples:S}}function Xee(n){let e=this,t=null,i=0,r=!1,s=!1,a=new ha,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,p=h.clipIntersection,_=h.clipShadows,g=n.get(h);if(!r||m===null||m.length===0||s&&!_)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=p?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 p=h!==null?h.length:0,_=null;if(p!==0){if(_=l.value,m!==!0||_===null){let g=u+p*4,v=d.matrixWorldInverse;o.getNormalMatrix(v),(_===null||_.lengthn-ef?l=g1[a-n+ef-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,p=3,_=2,g=1,v=new Float32Array(p*m*u),x=new Float32Array(_*m*u),A=new Float32Array(g*m*u);for(let S=0;S2?0:-1,C=[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(C,p*m*S),x.set(d,_*m*S);let y=[S,S,S,S,S,S];A.set(y,g*m*S)}let E=new Hi;E.setAttribute("position",new hr(v,p)),E.setAttribute("uv",new hr(x,_)),E.setAttribute("faceIndex",new hr(A,g)),i.push(new ri(E,null)),r>ef&&r--}return{lodMeshes:i,sizeLods:e,sigmas:t}}function E1(n,e,t){let i=new zs(n,e,t);return i.texture.mapping=E_,i.texture.name="PMREM.cubeUv",i.scissorTest=!0,i}function Lu(n,e,t,i,r){n.viewport.set(e,t,i,r),n.scissor.set(e,t,i,r)}function qee(n,e,t){return new Xs({name:"PMREMGGXConvolution",defines:{GGX_SAMPLES:Yee,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:wS(),fragmentShader:` +}`,js=class extends Fr{constructor(e){super(),this.isShaderMaterial=!0,this.type="ShaderMaterial",this.defines={},this.uniforms={},this.uniformsGroups=[],this.vertexShader=e$,this.fragmentShader=t$,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=xh(e.uniforms),this.uniformsGroups=JQ(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}},yE=class extends js{constructor(e){super(e),this.isRawShaderMaterial=!0,this.type="RawShaderMaterial"}},pn=class extends Fr{constructor(e){super(),this.isMeshStandardMaterial=!0,this.type="MeshStandardMaterial",this.defines={STANDARD:""},this.color=new ft(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 ft(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=Pu,this.normalScale=new It(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}},ps=class extends pn{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 It(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 ft(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 ft(1,1,1),this.specularIntensity=1,this.specularIntensityMap=null,this.specularColor=new ft(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}},vh=class extends Fr{constructor(e){super(),this.isMeshPhongMaterial=!0,this.type="MeshPhongMaterial",this.color=new ft(16777215),this.specular=new ft(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new ft(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=Pu,this.normalScale=new It(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=E_,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}},c_=class extends Fr{constructor(e){super(),this.isMeshLambertMaterial=!0,this.type="MeshLambertMaterial",this.color=new ft(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new ft(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=Pu,this.normalScale=new It(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=E_,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}},PE=class extends Fr{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=c1,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}},LE=class extends Fr{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}};Bo=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&&(Bt("KeyframeTrack: Invalid value size in track.",this),e=!1);let i=this.times,r=this.values,s=i.length;s===0&&(Bt("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)){Bt("KeyframeTrack: Time is not a valid number.",this,o,l),e=!1;break}if(a!==null&&a>l){Bt("KeyframeTrack: Out of order keys.",this,o,l,a),e=!1;break}a=l}if(r!==void 0&&pQ(r))for(let o=0,l=r.length;o!==l;++o){let c=r[o];if(isNaN(c)){Bt("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()===hE,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}};_s.prototype.ValueTypeName="";_s.prototype.TimeBufferType=Float32Array;_s.prototype.ValueBufferType=Float32Array;_s.prototype.DefaultInterpolation=dh;Pl=class extends _s{constructor(e,t,i){super(e,t,i)}};Pl.prototype.ValueTypeName="bool";Pl.prototype.ValueBufferType=Array;Pl.prototype.DefaultInterpolation=hh;Pl.prototype.InterpolantFactoryMethodLinear=void 0;Pl.prototype.InterpolantFactoryMethodSmooth=void 0;h_=class extends _s{constructor(e,t,i,r){super(e,t,i,r)}};h_.prototype.ValueTypeName="color";Uo=class extends _s{constructor(e,t,i,r){super(e,t,i,r)}};Uo.prototype.ValueTypeName="number";wE=class extends Bo{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)Qr.slerpFlat(s,0,a,c-o,a,c,l);return s}},Vo=class extends _s{constructor(e,t,i,r){super(e,t,i,r)}InterpolantFactoryMethodLinear(e){return new wE(this.times,this.values,this.getValueSize(),e)}};Vo.prototype.ValueTypeName="quaternion";Vo.prototype.InterpolantFactoryMethodSmooth=void 0;Ll=class extends _s{constructor(e,t,i){super(e,t,i)}};Ll.prototype.ValueTypeName="string";Ll.prototype.ValueBufferType=Array;Ll.prototype.DefaultInterpolation=hh;Ll.prototype.InterpolantFactoryMethodLinear=void 0;Ll.prototype.InterpolantFactoryMethodSmooth=void 0;Go=class extends _s{constructor(e,t,i,r){super(e,t,i,r)}};Go.prototype.ValueTypeName="vector";Eh=class{constructor(e="",t=-1,i=[],r=PS){this.name=e,this.tracks=i,this.duration=t,this.blendMode=r,this.uuid=Ya(),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(n$(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(_s.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 Bt("AnimationClip: No animation in JSONLoader data."),null;let i=function(h,d,u,m,p){if(u.length!==0){let _=[],g=[];R1(u,_,g,m),_.length!==0&&p.push(new h(d,_,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(Il[e]!==void 0){Il[e].push({onLoad:t,onProgress:i,onError:r});return}Il[e]=[],Il[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=Il[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,p=0,_=new ReadableStream({start(g){v();function v(){h.read().then(({done:x,value:T})=>{if(x)g.close();else{p+=T.byteLength;let E=new ProgressEvent("progress",{lengthComputable:m,loaded:p,total:u});for(let S=0,R=f.length;S{g.error(x)})}}});return new Response(_)}else throw new k0(`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=>{Do.add(`file:${e}`,c);let f=Il[e];delete Il[e];for(let h=0,d=f.length;h{let f=Il[e];if(f===void 0)throw this.manager.itemError(e),c;delete Il[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}},su=new WeakMap,BE=class extends cn{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=Do.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=su.get(a);h===void 0&&(h=[],su.set(a,h)),h.push({onLoad:t,onError:r})}return a}let o=hu("img");function l(){f(),t&&t(this);let h=su.get(this)||[];for(let d=0;d{F0.has(a)===!0?(r&&r(F0.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){Do.add(`image-bitmap:${e}`,c),t&&t(c),s.manager.itemEnd(e)}).catch(function(c){r&&r(c),F0.set(l,c),Do.remove(`image-bitmap:${e}`),s.manager.itemError(e),s.manager.itemEnd(e)});Do.add(`image-bitmap:${e}`,l),s.manager.itemStart(e)}abort(){return this._abortController.abort(),this._abortController=new AbortController,this}},au=-90,ou=1,UE=class extends nr{constructor(e,t,i){super(),this.type="CubeCamera",this.renderTarget=i,this.coordinateSystem=null,this.activeMipmapLevel=0;let r=new fr(au,ou,e,t);r.layers=this.layers,this.add(r);let s=new fr(au,ou,e,t);s.layers=this.layers,this.add(s);let a=new fr(au,ou,e,t);a.layers=this.layers,this.add(a);let o=new fr(au,ou,e,t);o.layers=this.layers,this.add(o);let l=new fr(au,ou,e,t);l.layers=this.layers,this.add(l);let c=new fr(au,ou,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===Xa)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===fu)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 p=i.texture.generateMipmaps;i.texture.generateMipmaps=!1;let _=!1;e.isWebGLRenderer===!0?_=e.state.buffers.depth.getReversed():_=e.reversedDepthBuffer,e.setRenderTarget(i,0,r),_&&e.autoClear===!1&&e.clearDepth(),e.render(t,s),e.setRenderTarget(i,1,r),_&&e.autoClear===!1&&e.clearDepth(),e.render(t,a),e.setRenderTarget(i,2,r),_&&e.autoClear===!1&&e.clearDepth(),e.render(t,o),e.setRenderTarget(i,3,r),_&&e.autoClear===!1&&e.clearDepth(),e.render(t,l),e.setRenderTarget(i,4,r),_&&e.autoClear===!1&&e.clearDepth(),e.render(t,c),i.texture.generateMipmaps=p,e.setRenderTarget(i,5,r),_&&e.autoClear===!1&&e.clearDepth(),e.render(t,f),e.setRenderTarget(h,d,u),e.xr.enabled=m,i.texture.needsPMREMUpdate=!0}},VE=class extends fr{constructor(e=[]){super(),this.isArrayCamera=!0,this.isMultiViewCamera=!1,this.cameras=e}},GE=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){Qr.slerpFlat(e,t,e,t,e,i,r)}_slerpAdditive(e,t,i,r,s){let a=this._workIndex*s;Qr.multiplyQuaternionsFlat(e,a,e,t,e,i),Qr.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}}},_I="\\[\\]\\.:\\/",s$=new RegExp("["+_I+"]","g"),gI="[^"+_I+"]",a$="[^"+_I.replace("\\.","")+"]",o$=/((?:WC+[\/:])*)/.source.replace("WC",gI),l$=/(WCOD+)?/.source.replace("WCOD",a$),c$=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",gI),f$=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",gI),h$=new RegExp("^"+o$+l$+c$+f$+"$"),d$=["material","materials","bones","map"],X0=class{constructor(e,t,i){let r=i||$i.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()}},$i=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(s$,"")}static parseTrackName(e){let t=h$.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);d$.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 l1:for(let f=0,h=l.length;f!==h;++f)l[f].evaluate(a),c[f].accumulateAdditive(o);break;case PS: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===o1;if(e===0)return s===-1?r:a&&(s&1)===1?t-r:r;if(i===s1){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=lh,r.endingEnd=lh):(e?r.endingStart=this.zeroSlopeAtStart?lh:oh:r.endingStart=qp,t?r.endingEnd=this.zeroSlopeAtEnd?lh:oh:r.endingEnd=qp)}_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}},u$=new Float32Array(1),p_=class extends ma{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 p=t&&t._propertyBindings[h].binding.parsedPath;m=new GE($i.create(i,u,p),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,T)}return x}function m(v){let x=!1,T=u(v);T===null?_(a,o):T&&T.isColor&&(_(T,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 p(v,x){let T=u(x);T&&(T.isCubeTexture||T.mapping===S_)?(c===void 0&&(c=new ti(new Yc(1,1,1),new js({name:"BackgroundCubeMaterial",uniforms:xh(Xo.backgroundCube.uniforms),vertexShader:Xo.backgroundCube.vertexShader,fragmentShader:Xo.backgroundCube.fragmentShader,side:_n,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),c.geometry.deleteAttribute("normal"),c.geometry.deleteAttribute("uv"),c.onBeforeRender=function(E,S,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=T,c.material.uniforms.backgroundBlurriness.value=x.backgroundBlurriness,c.material.uniforms.backgroundIntensity.value=x.backgroundIntensity,c.material.uniforms.backgroundRotation.value.setFromMatrix4(Qee.makeRotationFromEuler(x.backgroundRotation)).transpose(),T.isCubeTexture&&T.isRenderTargetTexture===!1&&c.material.uniforms.backgroundRotation.value.premultiply(j1),c.material.toneMapped=oi.getTransfer(T.colorSpace)!==Yi,(f!==T||h!==T.version||d!==n.toneMapping)&&(c.material.needsUpdate=!0,f=T,h=T.version,d=n.toneMapping),c.layers.enableAll(),v.unshift(c,c.geometry,c.material,0,0,null)):T&&T.isTexture&&(l===void 0&&(l=new ti(new gh(2,2),new js({name:"BackgroundMaterial",uniforms:xh(Xo.background.uniforms),vertexShader:Xo.background.vertexShader,fragmentShader:Xo.background.fragmentShader,side:Ys,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=T,l.material.uniforms.backgroundIntensity.value=x.backgroundIntensity,l.material.toneMapped=oi.getTransfer(T.colorSpace)!==Yi,T.matrixAutoUpdate===!0&&T.updateMatrix(),l.material.uniforms.uvTransform.value.copy(T.matrix),(f!==T||h!==T.version||d!==n.toneMapping)&&(l.material.needsUpdate=!0,f=T,h=T.version,d=n.toneMapping),l.layers.enableAll(),v.unshift(l,l.geometry,l.material,0,0,null))}function _(v,x){v.getRGB(NS,pI(n)),t.buffers.color.setClear(NS.r,NS.g,NS.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,_(a,o)},getClearAlpha:function(){return o},setClearAlpha:function(v){o=v,_(a,o)},render:m,addToRenderList:p,dispose:g}}function Jee(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,W=h(D,N,V,O);s!==W&&(s=W,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,T(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 W=D.isInstancedMesh===!0?D.id:0,te=U[W];te===void 0&&(te={},U[W]=te);let $=te[V.id];$===void 0&&($={},te[V.id]=$);let J=$[w];return J===void 0&&(J=d(l()),$[w]=J),J}function d(D){let O=[],V=[],N=[];for(let w=0;w=0){let z=w[$],Y=U[$];if(Y===void 0&&($==="instanceMatrix"&&D.instanceMatrix&&(Y=D.instanceMatrix),$==="instanceColor"&&D.instanceColor&&(Y=D.instanceColor)),z===void 0||z.attribute!==Y||Y&&z.data!==Y.data)return!0;W++}return s.attributesNum!==W||s.index!==N}function m(D,O,V,N){let w={},U=O.attributes,W=0,te=V.getAttributes();for(let $ in te)if(te[$].location>=0){let z=U[$];z===void 0&&($==="instanceMatrix"&&D.instanceMatrix&&(z=D.instanceMatrix),$==="instanceColor"&&D.instanceColor&&(z=D.instanceColor));let Y={};Y.attribute=z,z&&z.data&&(Y.data=z.data),w[$]=Y,W++}s.attributes=w,s.attributesNum=W,s.index=N}function p(){let D=s.newAttributes;for(let O=0,V=D.length;O=0){let J=w[te];if(J===void 0&&(te==="instanceMatrix"&&D.instanceMatrix&&(J=D.instanceMatrix),te==="instanceColor"&&D.instanceColor&&(J=D.instanceColor)),J!==void 0){let z=J.normalized,Y=J.itemSize,me=e.get(J);if(me===void 0)continue;let xe=me.buffer,Be=me.type,ae=me.bytesPerElement,ve=Be===n.INT||Be===n.UNSIGNED_INT||J.gpuType===KE;if(J.isInterleavedBufferAttribute){let ne=J.data,ue=ne.stride,De=J.offset;if(ne.isInstancedInterleavedBuffer){for(let de=0;de<$.locationSize;de++)g($.location+de,ne.meshPerAttribute);D.isInstancedMesh!==!0&&N._maxInstanceCount===void 0&&(N._maxInstanceCount=ne.meshPerAttribute*ne.count)}else for(let de=0;de<$.locationSize;de++)_($.location+de);n.bindBuffer(n.ARRAY_BUFFER,xe);for(let de=0;de<$.locationSize;de++)x($.location+de,Y/$.locationSize,Be,z,ue*ae,(De+Y/$.locationSize*de)*ae,ve)}else{if(J.isInstancedBufferAttribute){for(let ne=0;ne<$.locationSize;ne++)g($.location+ne,J.meshPerAttribute);D.isInstancedMesh!==!0&&N._maxInstanceCount===void 0&&(N._maxInstanceCount=J.meshPerAttribute*J.count)}else for(let ne=0;ne<$.locationSize;ne++)_($.location+ne);n.bindBuffer(n.ARRAY_BUFFER,xe);for(let ne=0;ne<$.locationSize;ne++)x($.location+ne,Y/$.locationSize,Be,z,Y*ae,Y/$.locationSize*ne*ae,ve)}}else if(W!==void 0){let z=W[te];if(z!==void 0)switch(z.length){case 2:n.vertexAttrib2fv($.location,z);break;case 3:n.vertexAttrib3fv($.location,z);break;case 4:n.vertexAttrib4fv($.location,z);break;default:n.vertexAttrib1fv($.location,z)}}}}v()}function E(){C();for(let D in i){let O=i[D];for(let V in O){let N=O[V];for(let w in N){let U=N[w];for(let W in U)f(U[W].object),delete U[W];delete N[w]}}delete i[D]}}function S(D){if(i[D.id]===void 0)return;let O=i[D.id];for(let V in O){let N=O[V];for(let w in N){let U=N[w];for(let W in U)f(U[W].object),delete U[W];delete N[w]}}delete i[D.id]}function R(D){for(let O in i){let V=i[O];for(let N in V){let w=V[N];if(w[D.id]===void 0)continue;let U=w[D.id];for(let W in U)f(U[W].object),delete U[W];delete w[D.id]}}}function I(D){for(let O in i){let V=i[O],N=D.isInstancedMesh===!0?D.id:0,w=V[N];if(w!==void 0){for(let U in w){let W=w[U];for(let te in W)f(W[te].object),delete W[te];delete w[U]}delete V[N],Object.keys(V).length===0&&delete i[O]}}}function C(){y(),a=!0,s!==r&&(s=r,c(s.object))}function y(){r.geometry=null,r.program=null,r.wireframe=!1}return{setup:o,reset:C,resetDefaultState:y,dispose:E,releaseStatesOfGeometry:S,releaseStatesOfObject:I,releaseStatesOfProgram:R,initAttributes:p,enableAttribute:_,disableUnusedAttributes:v}}function ete(n,e,t){let i;function r(l){i=l}function s(l,c){n.drawArrays(i,l,c),t.update(c,i,1)}function a(l,c,f){f!==0&&(n.drawArraysInstanced(i,l,c,f),t.update(c,i,f))}function o(l,c,f){if(f===0)return;e.get("WEBGL_multi_draw").multiDrawArraysWEBGL(i,l,0,c,0,f);let d=0;for(let u=0;u0&&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),p=n.getParameter(n.MAX_TEXTURE_SIZE),_=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),T=n.getParameter(n.MAX_FRAGMENT_UNIFORM_VECTORS),E=n.getParameter(n.MAX_SAMPLES),S=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:p,maxCubemapSize:_,maxAttributes:g,maxVertexUniforms:v,maxVaryings:x,maxFragmentUniforms:T,maxSamples:E,samples:S}}function ite(n){let e=this,t=null,i=0,r=!1,s=!1,a=new da,o=new ri,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,p=h.clipIntersection,_=h.clipShadows,g=n.get(h);if(!r||m===null||m.length===0||s&&!_)s?f(null):c();else{let v=s?0:i,x=v*4,T=g.clippingState||null;l.value=T,T=f(m,d,x,u);for(let E=0;E!==x;++E)T[E]=t[E];g.clippingState=T,this.numIntersection=p?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 p=h!==null?h.length:0,_=null;if(p!==0){if(_=l.value,m!==!0||_===null){let g=u+p*4,v=d.matrixWorldInverse;o.getNormalMatrix(v),(_===null||_.lengthn-ef?l=b1[a-n+ef-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,p=3,_=2,g=1,v=new Float32Array(p*m*u),x=new Float32Array(_*m*u),T=new Float32Array(g*m*u);for(let S=0;S2?0:-1,C=[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(C,p*m*S),x.set(d,_*m*S);let y=[S,S,S,S,S,S];T.set(y,g*m*S)}let E=new Hi;E.setAttribute("position",new hr(v,p)),E.setAttribute("uv",new hr(x,_)),E.setAttribute("faceIndex",new hr(T,g)),i.push(new ti(E,null)),r>ef&&r--}return{lodMeshes:i,sizeLods:e,sigmas:t}}function M1(n,e,t){let i=new Ks(n,e,t);return i.texture.mapping=S_,i.texture.name="PMREM.cubeUv",i.scissorTest=!0,i}function Lu(n,e,t,i,r){n.viewport.set(e,t,i,r),n.scissor.set(e,t,i,r)}function ate(n,e,t){return new js({name:"PMREMGGXConvolution",defines:{GGX_SAMPLES:rte,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:US(),fragmentShader:` precision highp float; precision highp int; @@ -108,7 +108,7 @@ gl_FragColor = vec4(prefilteredColor, 1.0); } - `,blending:ko,depthTest:!1,depthWrite:!1})}function Zee(n,e,t){let i=new Float32Array(Rh),r=new se(0,1,0);return new Xs({name:"SphericalGaussianBlur",defines:{n:Rh,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:wS(),fragmentShader:` + `,blending:Wo,depthTest:!1,depthWrite:!1})}function ote(n,e,t){let i=new Float32Array(Rh),r=new se(0,1,0);return new js({name:"SphericalGaussianBlur",defines:{n:Rh,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:US(),fragmentShader:` precision mediump float; precision mediump int; @@ -168,7 +168,7 @@ } } - `,blending:ko,depthTest:!1,depthWrite:!1})}function S1(){return new Xs({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:wS(),fragmentShader:` + `,blending:Wo,depthTest:!1,depthWrite:!1})}function C1(){return new js({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:US(),fragmentShader:` precision mediump float; precision mediump int; @@ -187,7 +187,7 @@ gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 ); } - `,blending:ko,depthTest:!1,depthWrite:!1})}function T1(){return new Xs({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:wS(),fragmentShader:` + `,blending:Wo,depthTest:!1,depthWrite:!1})}function y1(){return new js({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:US(),fragmentShader:` precision mediump float; precision mediump int; @@ -203,7 +203,7 @@ gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) ); } - `,blending:ko,depthTest:!1,depthWrite:!1})}function wS(){return` + `,blending:Wo,depthTest:!1,depthWrite:!1})}function US(){return` precision mediump float; precision mediump int; @@ -258,7 +258,7 @@ gl_Position = vec4( position, 1.0 ); } - `}function Qee(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===kE||u===WE)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 p=new OS(m.height);return p.fromEquirectangularTexture(n,d),e.set(d,p),d.addEventListener("dispose",c),o(p.texture,d.mapping)}else return null}}return d}function a(d){if(d&&d.isTexture){let u=d.mapping,m=u===kE||u===WE,p=u===Qc||u===Th;if(m||p){let _=t.get(d),g=_!==void 0?_.texture.pmremVersion:0;if(d.isRenderTargetTexture&&d.pmremVersion!==g)return i===null&&(i=new Ou(n)),_=m?i.fromEquirectangular(d,_):i.fromCubemap(d,_),_.texture.pmremVersion=d.pmremVersion,t.set(d,_),_.texture;if(_!==void 0)return _.texture;{let v=d.image;return m&&v&&v.height>0||p&&v&&l(v)?(i===null&&(i=new Ou(n)),_=m?i.fromEquirectangular(d):i.fromCubemap(d),_.texture.pmremVersion=d.pmremVersion,t.set(d,_),d.addEventListener("dispose",f),_.texture):null}}}return d}function o(d,u){return u===kE?d.mapping=Qc:u===WE&&(d.mapping=Th),d}function l(d){let u=0,m=6;for(let p=0;p=65535?Jp:$p)(d,1);_.version=p;let g=s.get(h);g&&e.remove(g),s.set(h,_)}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 S=new Float32Array(A*E*4*h),R=new Qp(S,A,E,h);R.type=Ks,R.needsUpdate=!0;let I=x*4;for(let y=0;y0){let p=new FS(m.height);return p.fromEquirectangularTexture(n,d),e.set(d,p),d.addEventListener("dispose",c),o(p.texture,d.mapping)}else return null}}return d}function a(d){if(d&&d.isTexture){let u=d.mapping,m=u===zE||u===XE,p=u===Qc||u===Th;if(m||p){let _=t.get(d),g=_!==void 0?_.texture.pmremVersion:0;if(d.isRenderTargetTexture&&d.pmremVersion!==g)return i===null&&(i=new Ou(n)),_=m?i.fromEquirectangular(d,_):i.fromCubemap(d,_),_.texture.pmremVersion=d.pmremVersion,t.set(d,_),_.texture;if(_!==void 0)return _.texture;{let v=d.image;return m&&v&&v.height>0||p&&v&&l(v)?(i===null&&(i=new Ou(n)),_=m?i.fromEquirectangular(d):i.fromCubemap(d),_.texture.pmremVersion=d.pmremVersion,t.set(d,_),d.addEventListener("dispose",f),_.texture):null}}}return d}function o(d,u){return u===zE?d.mapping=Qc:u===XE&&(d.mapping=Th),d}function l(d){let u=0,m=6;for(let p=0;p=65535?e_:Jp)(d,1);_.version=p;let g=s.get(h);g&&e.remove(g),s.set(h,_)}function f(h){let d=s.get(h);if(d){let u=h.index;u!==null&&d.versione.maxTextureSize&&(E=Math.ceil(T/e.maxTextureSize),T=e.maxTextureSize);let S=new Float32Array(T*E*4*h),R=new $p(S,T,E,h);R.type=qs,R.needsUpdate=!0;let I=x*4;for(let y=0;y0&&_[0].isRenderPass===!0;let x=s.width,A=s.height;for(let E=0;E<_.length;E++){let S=_[E];S.setSize&&S.setSize(x,A)}},this.begin=function(v,x){if(u||v.toneMapping===Ys&&_.length===0)return!1;if(p=x,x!==null){let A=x.width,E=x.height;(s.width!==A||s.height!==E)&&this.setSize(A,E)}return g===!1&&v.setRenderTarget(s),m=v.toneMapping,v.toneMapping=Ys,!0},this.hasRenderPass=function(){return g},this.end=function(v,x){v.toneMapping=m,u=!0;let A=s,E=a;for(let S=0;S<_.length;S++){let R=_[S];if(R.enabled!==!1&&(R.render(v,E,A,x),R.needsSwap!==!1)){let I=A;A=E,E=I}}if(h!==v.outputColorSpace||d!==v.toneMapping){h=v.outputColorSpace,d=v.toneMapping,l.defines={},oi.getTransfer(h)===Yi&&(l.defines.SRGB_TRANSFER="");let S=nte[d];S&&(l.defines[S]=""),l.needsUpdate=!0}l.uniforms.tDiffuse.value=A.texture,v.setRenderTarget(p),v.render(c,f),p=null,u=!1},this.isCompositing=function(){return u},this.dispose=function(){s.depthTexture&&s.depthTexture.dispose(),s.dispose(),a.dispose(),o.dispose(),l.dispose()}}function Nu(n,e,t){let i=n[0];if(i<=0||i>0)return n;let r=e*t,s=A1[r];if(s===void 0&&(s=new Float32Array(r),A1[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 $r(n,e){if(n.length!==e.length)return!1;for(let t=0,i=n.length;t0&&_[0].isRenderPass===!0;let x=s.width,T=s.height;for(let E=0;E<_.length;E++){let S=_[E];S.setSize&&S.setSize(x,T)}},this.begin=function(v,x){if(u||v.toneMapping===Es&&_.length===0)return!1;if(p=x,x!==null){let T=x.width,E=x.height;(s.width!==T||s.height!==E)&&this.setSize(T,E)}return g===!1&&v.setRenderTarget(s),m=v.toneMapping,v.toneMapping=Es,!0},this.hasRenderPass=function(){return g},this.end=function(v,x){v.toneMapping=m,u=!0;let T=s,E=a;for(let S=0;S<_.length;S++){let R=_[S];if(R.enabled!==!1&&(R.render(v,E,T,x),R.needsSwap!==!1)){let I=T;T=E,E=I}}if(h!==v.outputColorSpace||d!==v.toneMapping){h=v.outputColorSpace,d=v.toneMapping,l.defines={},oi.getTransfer(h)===Yi&&(l.defines.SRGB_TRANSFER="");let S=pte[d];S&&(l.defines[S]=""),l.needsUpdate=!0}l.uniforms.tDiffuse.value=T.texture,v.setRenderTarget(p),v.render(c,f),p=null,u=!1},this.isCompositing=function(){return u},this.dispose=function(){s.depthTexture&&s.depthTexture.dispose(),s.dispose(),a.dispose(),o.dispose(),l.dispose()}}function Nu(n,e,t){let i=n[0];if(i<=0||i>0)return n;let r=e*t,s=P1[r];if(s===void 0&&(s=new Float32Array(r),P1[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 $r(n,e){if(n.length!==e.length)return!1;for(let t=0,i=n.length;t":" "} ${o}: ${t[a]}`)}return i.join(` -`)}function Zte(n){oi._getMatrix(y1,oi.workingColorSpace,n);let e=`mat3( ${y1.elements.map(t=>t.toFixed(4))} )`;switch(oi.getTransfer(n)){case qp:return[e,"LinearTransferOETF"];case Yi:return[e,"sRGBTransferOETF"];default:return Ct("WebGLProgram: Unsupported color space: ",n),[e,"LinearTransferOETF"]}}function P1(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 oie(n){oi._getMatrix(B1,oi.workingColorSpace,n);let e=`mat3( ${B1.elements.map(t=>t.toFixed(4))} )`;switch(oi.getTransfer(n)){case Zp:return[e,"LinearTransferOETF"];case Yi:return[e,"sRGBTransferOETF"];default:return Ct("WebGLProgram: Unsupported color space: ",n),[e,"LinearTransferOETF"]}}function U1(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+` -`+qte(n.getShaderSource(e),o)}else return s}function Qte(n,e){let t=Zte(e);return[`vec4 ${n}( vec4 value ) {`,` return ${t[1]}( vec4( value.rgb * ${t[0]}, value.a ) );`,"}"].join(` -`)}function Jte(n,e){let t=$te[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 eie(){oi.getLuminanceCoefficients(DS);let n=DS.x.toFixed(4),e=DS.y.toFixed(4),t=DS.z.toFixed(4);return["float luminance( const in vec3 rgb ) {",` const vec3 weights = vec3( ${n}, ${e}, ${t} );`," return dot( weights, rgb );","}"].join(` -`)}function tie(n){return[n.extensionClipCullDistance?"#extension GL_ANGLE_clip_cull_distance : require":"",n.extensionMultiDraw?"#extension GL_ANGLE_multi_draw : require":""].filter(P_).join(` -`)}function iie(n){let e=[];for(let t in n){let i=n[t];i!==!1&&e.push("#define "+t+" "+i)}return e.join(` -`)}function rie(n,e){let t={},i=n.getProgramParameter(e,n.ACTIVE_ATTRIBUTES);for(let r=0;r")}return DI(t)}function O1(n){return n.replace(oie,lie)}function lie(n,e,t,i){let r="";for(let s=parseInt(e);s")}return wI(t)}function k1(n){return n.replace(vie,Eie)}function Eie(n,e,t,i){let r="";for(let s=parseInt(e);s0&&(_+=` -`),g=["#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,m].filter(P_).join(` +`),g=["#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,m].filter(L_).join(` `),g.length>0&&(g+=` -`)):(_=[N1(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(P_).join(` -`),g=[N1(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!==Ys?"#define TONE_MAPPING":"",t.toneMapping!==Ys?hi.tonemapping_pars_fragment:"",t.toneMapping!==Ys?Jte("toneMapping",t.toneMapping):"",t.dithering?"#define DITHERING":"",t.opaque?"#define OPAQUE":"",hi.colorspace_pars_fragment,Qte("linearToOutputTexel",t.outputColorSpace),eie(),t.useDepthPacking?"#define DEPTH_PACKING "+t.depthPacking:"",` -`].filter(P_).join(` -`)),a=DI(a),a=L1(a,t),a=D1(a,t),o=DI(o),o=L1(o,t),o=D1(o,t),a=O1(a),o=O1(o),t.isRawShaderMaterial!==!0&&(v=`#version 300 es +`)):(_=[W1(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(L_).join(` +`),g=[W1(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!==Es?"#define TONE_MAPPING":"",t.toneMapping!==Es?hi.tonemapping_pars_fragment:"",t.toneMapping!==Es?fie("toneMapping",t.toneMapping):"",t.dithering?"#define DITHERING":"",t.opaque?"#define OPAQUE":"",hi.colorspace_pars_fragment,lie("linearToOutputTexel",t.outputColorSpace),hie(),t.useDepthPacking?"#define DEPTH_PACKING "+t.depthPacking:"",` +`].filter(L_).join(` +`)),a=wI(a),a=V1(a,t),a=G1(a,t),o=wI(o),o=V1(o,t),o=G1(o,t),a=k1(a),o=k1(o),t.isRawShaderMaterial!==!0&&(v=`#version 300 es `,_=[u,"#define attribute in","#define varying out","#define texture2D texture"].join(` `)+` -`+_,g=["#define varying in",t.glslVersion===fI?"":"layout(location = 0) out highp vec4 pc_fragColor;",t.glslVersion===fI?"":"#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=["#define varying in",t.glslVersion===uI?"":"layout(location = 0) out highp vec4 pc_fragColor;",t.glslVersion===uI?"":"#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+_+a,A=v+g+o,E=C1(r,r.VERTEX_SHADER,x),S=C1(r,r.FRAGMENT_SHADER,A);r.attachShader(p,E),r.attachShader(p,S),t.index0AttributeName!==void 0?r.bindAttribLocation(p,0,t.index0AttributeName):t.morphTargets===!0&&r.bindAttribLocation(p,0,"position"),r.linkProgram(p);function R(D){if(n.debug.checkShaderErrors){let O=r.getProgramInfoLog(p)||"",V=r.getShaderInfoLog(E)||"",N=r.getShaderInfoLog(S)||"",w=O.trim(),B=V.trim(),W=N.trim(),te=!0,$=!0;if(r.getProgramParameter(p,r.LINK_STATUS)===!1)if(te=!1,typeof n.debug.onShaderError=="function")n.debug.onShaderError(r,p,E,S);else{let J=P1(r,E,"vertex"),z=P1(r,S,"fragment");Ut("THREE.WebGLProgram: Shader Error "+r.getError()+" - VALIDATE_STATUS "+r.getProgramParameter(p,r.VALIDATE_STATUS)+` +`+g);let x=v+_+a,T=v+g+o,E=F1(r,r.VERTEX_SHADER,x),S=F1(r,r.FRAGMENT_SHADER,T);r.attachShader(p,E),r.attachShader(p,S),t.index0AttributeName!==void 0?r.bindAttribLocation(p,0,t.index0AttributeName):t.morphTargets===!0&&r.bindAttribLocation(p,0,"position"),r.linkProgram(p);function R(D){if(n.debug.checkShaderErrors){let O=r.getProgramInfoLog(p)||"",V=r.getShaderInfoLog(E)||"",N=r.getShaderInfoLog(S)||"",w=O.trim(),U=V.trim(),W=N.trim(),te=!0,$=!0;if(r.getProgramParameter(p,r.LINK_STATUS)===!1)if(te=!1,typeof n.debug.onShaderError=="function")n.debug.onShaderError(r,p,E,S);else{let J=U1(r,E,"vertex"),z=U1(r,S,"fragment");Bt("THREE.WebGLProgram: Shader Error "+r.getError()+" - VALIDATE_STATUS "+r.getProgramParameter(p,r.VALIDATE_STATUS)+` Material Name: `+D.name+` Material Type: `+D.type+` Program Info Log: `+w+` `+J+` -`+z)}else w!==""?Ct("WebGLProgram: Program Info Log:",w):(B===""||W==="")&&($=!1);$&&(D.diagnostics={runnable:te,programLog:w,vertexShader:{log:B,prefix:_},fragmentShader:{log:W,prefix:g}})}r.deleteShader(E),r.deleteShader(S),I=new Du(r,p),C=rie(r,p)}let I;this.getUniforms=function(){return I===void 0&&R(this),I};let C;this.getAttributes=function(){return C===void 0&&R(this),C};let y=t.rendererExtensionParallelShaderCompile===!1;return this.isReady=function(){return y===!1&&(y=r.getProgramParameter(p,Kte)),y},this.destroy=function(){i.releaseStatesOfProgram(this),r.deleteProgram(p),this.program=void 0},this.type=t.shaderType,this.name=t.shaderName,this.id=jte++,this.cacheKey=e,this.usedTimes=1,this.program=p,this.vertexShader=E,this.fragmentShader=S,this}function Sie(n){return n===Jc||n===R_||n===b_}function Tie(n,e,t,i,r,s){let a=new mu,o=new OI,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 p(I,C,y,D,O,V){let N=D.fog,w=O.geometry,B=I.isMeshStandardMaterial||I.isMeshLambertMaterial||I.isMeshPhongMaterial?D.environment:null,W=I.isMeshStandardMaterial||I.isMeshLambertMaterial&&!I.envMap||I.isMeshPhongMaterial&&!I.envMap,te=e.get(I.envMap||B,W),$=te&&te.mapping===E_?te.image.height:null,J=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 z=w.morphAttributes.position||w.morphAttributes.normal||w.morphAttributes.color,Y=z!==void 0?z.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,Ue,ae,ve;if(J){let Zt=zo[J];xe=Zt.vertexShader,Ue=Zt.fragmentShader}else xe=I.vertexShader,Ue=I.fragmentShader,o.update(I),ae=o.getVertexShaderID(I),ve=o.getFragmentShaderID(I);let ne=n.getRenderTarget(),ue=n.state.buffers.depth.getReversed(),De=O.isInstancedMesh===!0,de=O.isBatchedMesh===!0,be=!!I.map,Ke=!!I.matcap,Tt=!!te,Xe=!!I.aoMap,je=!!I.lightMap,$t=!!I.bumpMap,Dt=!!I.normalMap,xi=!!I.displacementMap,oe=!!I.emissiveMap,Vi=!!I.metalnessMap,ti=!!I.roughnessMap,wi=I.anisotropy>0,ot=I.clearcoat>0,Pi=I.dispersion>0,X=I.iridescence>0,U=I.sheen>0,he=I.transmission>0,Le=wi&&!!I.anisotropyMap,Ve=ot&&!!I.clearcoatMap,Je=ot&&!!I.clearcoatNormalMap,rt=ot&&!!I.clearcoatRoughnessMap,ye=X&&!!I.iridescenceMap,Ie=X&&!!I.iridescenceThicknessMap,ct=U&&!!I.sheenColorMap,St=U&&!!I.sheenRoughnessMap,nt=!!I.specularMap,Qe=!!I.specularColorMap,Wt=!!I.specularIntensityMap,qt=he&&!!I.transmissionMap,re=he&&!!I.thicknessMap,K=!!I.gradientMap,Pe=!!I.alphaMap,Ae=I.alphaTest>0,qe=!!I.alphaHash,Ye=!!I.extensions,we=Ys;I.toneMapped&&(ne===null||ne.isXRRenderTarget===!0)&&(we=n.toneMapping);let At={shaderID:J,shaderType:I.type,shaderName:I.name,vertexShader:xe,fragmentShader:Ue,defines:I.defines,customVertexShaderID:ae,customFragmentShaderID:ve,isRawShaderMaterial:I.isRawShaderMaterial===!0,glslVersion:I.glslVersion,precision:d,batching:de,batchingColor:de&&O._colorsTexture!==null,instancing:De,instancingColor:De&&O.instanceColor!==null,instancingMorph:De&&O.morphTexture!==null,outputColorSpace:ne===null?n.outputColorSpace:ne.isXRRenderTarget===!0?ne.texture.colorSpace:oi.workingColorSpace,alphaToCoverage:!!I.alphaToCoverage,map:be,matcap:Ke,envMap:Tt,envMapMode:Tt&&te.mapping,envMapCubeUVHeight:$,aoMap:Xe,lightMap:je,bumpMap:$t,normalMap:Dt,displacementMap:xi,emissiveMap:oe,normalMapObjectSpace:Dt&&I.normalMapType===i1,normalMapTangentSpace:Dt&&I.normalMapType===Pu,packedNormalMap:Dt&&I.normalMapType===Pu&&Sie(I.normalMap.format),metalnessMap:Vi,roughnessMap:ti,anisotropy:wi,anisotropyMap:Le,clearcoat:ot,clearcoatMap:Ve,clearcoatNormalMap:Je,clearcoatRoughnessMap:rt,dispersion:Pi,iridescence:X,iridescenceMap:ye,iridescenceThicknessMap:Ie,sheen:U,sheenColorMap:ct,sheenRoughnessMap:St,specularMap:nt,specularColorMap:Qe,specularIntensityMap:Wt,transmission:he,transmissionMap:qt,thicknessMap:re,gradientMap:K,opaque:I.transparent===!1&&I.blending===ch&&I.alphaToCoverage===!1,alphaMap:Pe,alphaTest:Ae,alphaHash:qe,combine:I.combine,mapUv:be&&m(I.map.channel),aoMapUv:Xe&&m(I.aoMap.channel),lightMapUv:je&&m(I.lightMap.channel),bumpMapUv:$t&&m(I.bumpMap.channel),normalMapUv:Dt&&m(I.normalMap.channel),displacementMapUv:xi&&m(I.displacementMap.channel),emissiveMapUv:oe&&m(I.emissiveMap.channel),metalnessMapUv:Vi&&m(I.metalnessMap.channel),roughnessMapUv:ti&&m(I.roughnessMap.channel),anisotropyMapUv:Le&&m(I.anisotropyMap.channel),clearcoatMapUv:Ve&&m(I.clearcoatMap.channel),clearcoatNormalMapUv:Je&&m(I.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:rt&&m(I.clearcoatRoughnessMap.channel),iridescenceMapUv:ye&&m(I.iridescenceMap.channel),iridescenceThicknessMapUv:Ie&&m(I.iridescenceThicknessMap.channel),sheenColorMapUv:ct&&m(I.sheenColorMap.channel),sheenRoughnessMapUv:St&&m(I.sheenRoughnessMap.channel),specularMapUv:nt&&m(I.specularMap.channel),specularColorMapUv:Qe&&m(I.specularColorMap.channel),specularIntensityMapUv:Wt&&m(I.specularIntensityMap.channel),transmissionMapUv:qt&&m(I.transmissionMap.channel),thicknessMapUv:re&&m(I.thicknessMap.channel),alphaMapUv:Pe&&m(I.alphaMap.channel),vertexTangents:!!w.attributes.tangent&&(Dt||wi),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||Pe),fog:!!N,useFog:I.fog===!0,fogExp2:!!N&&N.isFogExp2,flatShading:I.wireframe===!1&&(I.flatShading===!0||w.attributes.normal===void 0&&Dt===!1&&(I.isMeshLambertMaterial||I.isMeshPhongMaterial||I.isMeshStandardMaterial||I.isMeshPhysicalMaterial)),sizeAttenuation:I.sizeAttenuation===!0,logarithmicDepthBuffer:h,reversedDepthBuffer:ue,skinning:O.isSkinnedMesh===!0,morphTargets:w.morphAttributes.position!==void 0,morphNormals:w.morphAttributes.normal!==void 0,morphColors:w.morphAttributes.color!==void 0,morphTargetsCount:Y,morphTextureStride:me,numDirLights:C.directional.length,numPointLights:C.point.length,numSpotLights:C.spot.length,numSpotLightMaps:C.spotLightMap.length,numRectAreaLights:C.rectArea.length,numHemiLights:C.hemi.length,numDirLightShadows:C.directionalShadowMap.length,numPointLightShadows:C.pointShadowMap.length,numSpotLightShadows:C.spotShadowMap.length,numSpotLightShadowsWithMaps:C.numSpotLightShadowsWithMaps,numLightProbes:C.numLightProbes,numLightProbeGrids:V.length,numClippingPlanes:s.numPlanes,numClipIntersection:s.numIntersection,dithering:I.dithering,shadowMapEnabled:n.shadowMap.enabled&&y.length>0,shadowMapType:n.shadowMap.type,toneMapping:we,decodeVideoTexture:be&&I.map.isVideoTexture===!0&&oi.getTransfer(I.map.colorSpace)===Yi,decodeVideoTextureEmissive:oe&&I.emissiveMap.isVideoTexture===!0&&oi.getTransfer(I.emissiveMap.colorSpace)===Yi,premultipliedAlpha:I.premultipliedAlpha,doubleSided:I.side===pa,flipSided:I.side===pn,useDepthPacking:I.depthPacking>=0,depthPacking:I.depthPacking||0,index0AttributeName:I.index0AttributeName,extensionClipCullDistance:Ye&&I.extensions.clipCullDistance===!0&&t.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(Ye&&I.extensions.multiDraw===!0||de)&&t.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:t.has("KHR_parallel_shader_compile"),customProgramCacheKey:I.customProgramCacheKey()};return At.vertexUv1s=l.has(1),At.vertexUv2s=l.has(2),At.vertexUv3s=l.has(3),l.clear(),At}function _(I){let C=[];if(I.shaderID?C.push(I.shaderID):(C.push(I.customVertexShaderID),C.push(I.customFragmentShaderID)),I.defines!==void 0)for(let y in I.defines)C.push(y),C.push(I.defines[y]);return I.isRawShaderMaterial===!1&&(g(C,I),v(C,I),C.push(n.outputColorSpace)),C.push(I.customProgramCacheKey),C.join()}function g(I,C){I.push(C.precision),I.push(C.outputColorSpace),I.push(C.envMapMode),I.push(C.envMapCubeUVHeight),I.push(C.mapUv),I.push(C.alphaMapUv),I.push(C.lightMapUv),I.push(C.aoMapUv),I.push(C.bumpMapUv),I.push(C.normalMapUv),I.push(C.displacementMapUv),I.push(C.emissiveMapUv),I.push(C.metalnessMapUv),I.push(C.roughnessMapUv),I.push(C.anisotropyMapUv),I.push(C.clearcoatMapUv),I.push(C.clearcoatNormalMapUv),I.push(C.clearcoatRoughnessMapUv),I.push(C.iridescenceMapUv),I.push(C.iridescenceThicknessMapUv),I.push(C.sheenColorMapUv),I.push(C.sheenRoughnessMapUv),I.push(C.specularMapUv),I.push(C.specularColorMapUv),I.push(C.specularIntensityMapUv),I.push(C.transmissionMapUv),I.push(C.thicknessMapUv),I.push(C.combine),I.push(C.fogExp2),I.push(C.sizeAttenuation),I.push(C.morphTargetsCount),I.push(C.morphAttributeCount),I.push(C.numDirLights),I.push(C.numPointLights),I.push(C.numSpotLights),I.push(C.numSpotLightMaps),I.push(C.numHemiLights),I.push(C.numRectAreaLights),I.push(C.numDirLightShadows),I.push(C.numPointLightShadows),I.push(C.numSpotLightShadows),I.push(C.numSpotLightShadowsWithMaps),I.push(C.numLightProbes),I.push(C.shadowMapType),I.push(C.toneMapping),I.push(C.numClippingPlanes),I.push(C.numClipIntersection),I.push(C.depthPacking)}function v(I,C){a.disableAll(),C.instancing&&a.enable(0),C.instancingColor&&a.enable(1),C.instancingMorph&&a.enable(2),C.matcap&&a.enable(3),C.envMap&&a.enable(4),C.normalMapObjectSpace&&a.enable(5),C.normalMapTangentSpace&&a.enable(6),C.clearcoat&&a.enable(7),C.iridescence&&a.enable(8),C.alphaTest&&a.enable(9),C.vertexColors&&a.enable(10),C.vertexAlphas&&a.enable(11),C.vertexUv1s&&a.enable(12),C.vertexUv2s&&a.enable(13),C.vertexUv3s&&a.enable(14),C.vertexTangents&&a.enable(15),C.anisotropy&&a.enable(16),C.alphaHash&&a.enable(17),C.batching&&a.enable(18),C.dispersion&&a.enable(19),C.batchingColor&&a.enable(20),C.gradientMap&&a.enable(21),C.packedNormalMap&&a.enable(22),C.vertexNormals&&a.enable(23),I.push(a.mask),a.disableAll(),C.fog&&a.enable(0),C.useFog&&a.enable(1),C.flatShading&&a.enable(2),C.logarithmicDepthBuffer&&a.enable(3),C.reversedDepthBuffer&&a.enable(4),C.skinning&&a.enable(5),C.morphTargets&&a.enable(6),C.morphNormals&&a.enable(7),C.morphColors&&a.enable(8),C.premultipliedAlpha&&a.enable(9),C.shadowMapEnabled&&a.enable(10),C.doubleSided&&a.enable(11),C.flipSided&&a.enable(12),C.useDepthPacking&&a.enable(13),C.dithering&&a.enable(14),C.transmission&&a.enable(15),C.sheen&&a.enable(16),C.opaque&&a.enable(17),C.pointsUvs&&a.enable(18),C.decodeVideoTexture&&a.enable(19),C.decodeVideoTextureEmissive&&a.enable(20),C.alphaToCoverage&&a.enable(21),C.numLightProbeGrids>0&&a.enable(22),I.push(a.mask)}function x(I){let C=u[I.type],y;if(C){let D=zo[C];y=p1.clone(D.uniforms)}else y=I.uniforms;return y}function A(I,C){let y=f.get(C);return y!==void 0?++y.usedTimes:(y=new vie(n,C,I,r),c.push(y),f.set(C,y)),y}function E(I){if(--I.usedTimes===0){let C=c.indexOf(I);c[C]=c[c.length-1],c.pop(),f.delete(I.cacheKey),I.destroy()}}function S(I){o.remove(I)}function R(){o.dispose()}return{getParameters:p,getProgramCacheKey:_,getUniforms:x,acquireProgram:A,releaseProgram:E,releaseShaderCache:S,programs:c,dispose:R}}function Aie(){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 xie(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 w1(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 F1(){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:p,renderOrder:d.renderOrder,z:_,group:g},n[e]=v):(v.id=d.id,v.object=d,v.geometry=u,v.material=m,v.materialVariant=a(d),v.groupOrder=p,v.renderOrder=d.renderOrder,v.z=_,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||xie),i.length>1&&i.sort(u||w1),r.length>1&&r.sort(u||w1)}function h(){for(let d=e,u=n.length;d=s.length?(a=new F1,s.push(a)):a=s[r],a}function t(){n=new WeakMap}return{get:e,dispose:t}}function bie(){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 se,color:new ft};break;case"SpotLight":t={position:new se,direction:new se,color:new ft,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":t={position:new se,color:new ft,distance:0,decay:0};break;case"HemisphereLight":t={direction:new se,skyColor:new ft,groundColor:new ft};break;case"RectAreaLight":t={color:new ft,position:new se,halfWidth:new se,halfHeight:new se};break}return n[e.id]=t,t}}}function Iie(){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 It};break;case"SpotLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new It};break;case"PointLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new It,shadowCameraNear:1,shadowCameraFar:1e3};break}return n[e.id]=t,t}}}function Cie(n,e){return(e.castShadow?2:0)-(n.castShadow?2:0)+(e.map?1:0)-(n.map?1:0)}function yie(n){let e=new bie,t=Iie(),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 se);let r=new se,s=new li,a=new li;function o(c){let f=0,h=0,d=0;for(let C=0;C<9;C++)i.probe[C].set(0,0,0);let u=0,m=0,p=0,_=0,g=0,v=0,x=0,A=0,E=0,S=0,R=0;c.sort(Cie);for(let C=0,y=c.length;C0&&(n.has("OES_texture_float_linear")===!0?(i.rectAreaLTC1=pt.LTC_FLOAT_1,i.rectAreaLTC2=pt.LTC_FLOAT_2):(i.rectAreaLTC1=pt.LTC_HALF_1,i.rectAreaLTC2=pt.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!==p||I.rectAreaLength!==_||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=p,i.rectArea.length=_,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-S,i.spotLightMap.length=E,i.numSpotLightShadowsWithMaps=S,i.numLightProbes=R,I.directionalLength=u,I.pointLength=m,I.spotLength=p,I.rectAreaLength=_,I.hemiLength=g,I.numDirectionalShadows=v,I.numPointShadows=x,I.numSpotShadows=A,I.numSpotMaps=E,I.numLightProbes=R,i.version=Mie++)}function l(c,f){let h=0,d=0,u=0,m=0,p=0,_=f.matrixWorldInverse;for(let g=0,v=c.length;g=a.length?(o=new U1(n),a.push(o)):o=a[s],o}function i(){e=new WeakMap}return{get:t,dispose:i}}function wie(n,e,t){let i=new Eu,r=new It,s=new It,a=new Ji,o=new ME,l=new CE,c={},f=t.maxTextureSize,h={[Hs]:pn,[pn]:Hs,[pa]:pa},d=new Xs({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new It},radius:{value:4}},vertexShader:Lie,fragmentShader:Die}),u=d.clone();u.defines.HORIZONTAL_PASS=1;let m=new Hi;m.setAttribute("position",new hr(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));let p=new ri(m,d),_=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=g_;let g=this.type;this.render=function(S,R,I){if(_.enabled===!1||_.autoUpdate===!1&&_.needsUpdate===!1||S.length===0)return;this.type===GE&&(Ct("WebGLShadowMap: PCFSoftShadowMap has been deprecated. Using PCFShadowMap instead."),this.type=g_);let C=n.getRenderTarget(),y=n.getActiveCubeFace(),D=n.getActiveMipmapLevel(),O=n.state;O.setBlending(ko),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=S.length;Nf||r.y>f)&&(r.x>f&&(s.x=Math.floor(f/te.x),r.x=s.x*te.x,W.mapSize.x=s.x),r.y>f&&(s.y=Math.floor(f/te.y),r.y=s.y*te.y,W.mapSize.y=s.y));let $=n.state.buffers.depth.getReversed();if(W.camera._reversedDepth=$,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===bu){if(B.isPointLight){Ct("WebGLShadowMap: VSM shadow maps are not supported for PointLights. Use PCF or BasicShadowMap instead.");continue}W.map=new zs(r.x,r.y,{format:Jc,type:Wo,minFilter:Nr,magFilter:Nr,generateMipmaps:!1}),W.map.texture.name=B.name+".shadowMap",W.map.depthTexture=new Cl(r.x,r.y,Ks),W.map.depthTexture.name=B.name+".shadowMapDepth",W.map.depthTexture.format=Oo,W.map.depthTexture.compareFunction=null,W.map.depthTexture.minFilter=Or,W.map.depthTexture.magFilter=Or}else B.isPointLight?(W.map=new OS(r.x),W.map.depthTexture=new bE(r.x,$a)):(W.map=new zs(r.x,r.y),W.map.depthTexture=new Cl(r.x,r.y,$a)),W.map.depthTexture.name=B.name+".shadowMap",W.map.depthTexture.format=Oo,this.type===g_?(W.map.depthTexture.compareFunction=$?yS:CS,W.map.depthTexture.minFilter=Nr,W.map.depthTexture.magFilter=Nr):(W.map.depthTexture.compareFunction=null,W.map.depthTexture.minFilter=Or,W.map.depthTexture.magFilter=Or);W.camera.updateProjectionMatrix()}let J=W.map.isWebGLCubeRenderTarget?6:1;for(let z=0;z0||R.map&&R.alphaTest>0||R.alphaToCoverage===!0){let O=y.uuid,V=R.uuid,N=c[O];N===void 0&&(N={},c[O]=N);let w=N[V];w===void 0&&(w=y.clone(),N[V]=w,R.addEventListener("dispose",E)),y=w}if(y.visible=R.visible,y.wireframe=R.wireframe,C===bu?y.side=R.shadowSide!==null?R.shadowSide:R.side:y.side=R.shadowSide!==null?R.shadowSide:h[R.side],y.alphaMap=R.alphaMap,y.alphaTest=R.alphaToCoverage===!0?.5:R.alphaTest,y.map=R.map,y.clipShadows=R.clipShadows,y.clippingPlanes=R.clippingPlanes,y.clipIntersection=R.clipIntersection,y.displacementMap=R.displacementMap,y.displacementScale=R.displacementScale,y.displacementBias=R.displacementBias,y.wireframeLinewidth=R.wireframeLinewidth,y.linewidth=R.linewidth,I.isPointLight===!0&&y.isMeshDistanceMaterial===!0){let O=n.properties.get(y);O.light=I}return y}function A(S,R,I,C,y){if(S.visible===!1)return;if(S.layers.test(R.layers)&&(S.isMesh||S.isLine||S.isPoints)&&(S.castShadow||S.receiveShadow&&y===bu)&&(!S.frustumCulled||i.intersectsObject(S))){S.modelViewMatrix.multiplyMatrices(I.matrixWorldInverse,S.matrixWorld);let V=e.update(S),N=S.material;if(Array.isArray(N)){let w=V.groups;for(let B=0,W=w.length;B=1):$.indexOf("OpenGL ES")!==-1&&(te=parseFloat(/^OpenGL ES (\d)/.exec($)[1]),W=te>=2);let J=null,z={},Y=n.getParameter(n.SCISSOR_BOX),me=n.getParameter(n.VIEWPORT),xe=new Ji().fromArray(Y),Ue=new Ji().fromArray(me);function ae(K,Pe,Ae,qe){let Ye=new Uint8Array(4),we=n.createTexture();n.bindTexture(K,we),n.texParameteri(K,n.TEXTURE_MIN_FILTER,n.NEAREST),n.texParameteri(K,n.TEXTURE_MAG_FILTER,n.NEAREST);for(let At=0;Athe||Ve.height>he)&&(Le=he/Math.max(Ve.width,Ve.height)),Le<1)if(typeof HTMLImageElement!="undefined"&&X instanceof HTMLImageElement||typeof HTMLCanvasElement!="undefined"&&X instanceof HTMLCanvasElement||typeof ImageBitmap!="undefined"&&X instanceof ImageBitmap||typeof VideoFrame!="undefined"&&X instanceof VideoFrame){let Je=Math.floor(Le*Ve.width),rt=Math.floor(Le*Ve.height);d===void 0&&(d=p(Je,rt));let ye=U?p(Je,rt):d;return ye.width=Je,ye.height=rt,ye.getContext("2d").drawImage(X,0,0,Je,rt),Ct("WebGLRenderer: Texture has been resized from ("+Ve.width+"x"+Ve.height+") to ("+Je+"x"+rt+")."),ye}else return"data"in X&&Ct("WebGLRenderer: Image in DataTexture is too big ("+Ve.width+"x"+Ve.height+")."),X;return X}function g(X){return X.generateMipmaps}function v(X){n.generateMipmap(X)}function x(X){return X.isWebGLCubeRenderTarget?n.TEXTURE_CUBE_MAP:X.isWebGL3DRenderTarget?n.TEXTURE_3D:X.isWebGLArrayRenderTarget||X.isCompressedArrayTexture?n.TEXTURE_2D_ARRAY:n.TEXTURE_2D}function A(X,U,he,Le,Ve,Je=!1){if(X!==null){if(n[X]!==void 0)return n[X];Ct("WebGLRenderer: Attempt to use non-existing WebGL internal format '"+X+"'")}let rt;Le&&(rt=e.get("EXT_texture_norm16"),rt||Ct("WebGLRenderer: Unable to use normalized textures without EXT_texture_norm16 extension"));let ye=U;if(U===n.RED&&(he===n.FLOAT&&(ye=n.R32F),he===n.HALF_FLOAT&&(ye=n.R16F),he===n.UNSIGNED_BYTE&&(ye=n.R8),he===n.UNSIGNED_SHORT&&rt&&(ye=rt.R16_EXT),he===n.SHORT&&rt&&(ye=rt.R16_SNORM_EXT)),U===n.RED_INTEGER&&(he===n.UNSIGNED_BYTE&&(ye=n.R8UI),he===n.UNSIGNED_SHORT&&(ye=n.R16UI),he===n.UNSIGNED_INT&&(ye=n.R32UI),he===n.BYTE&&(ye=n.R8I),he===n.SHORT&&(ye=n.R16I),he===n.INT&&(ye=n.R32I)),U===n.RG&&(he===n.FLOAT&&(ye=n.RG32F),he===n.HALF_FLOAT&&(ye=n.RG16F),he===n.UNSIGNED_BYTE&&(ye=n.RG8),he===n.UNSIGNED_SHORT&&rt&&(ye=rt.RG16_EXT),he===n.SHORT&&rt&&(ye=rt.RG16_SNORM_EXT)),U===n.RG_INTEGER&&(he===n.UNSIGNED_BYTE&&(ye=n.RG8UI),he===n.UNSIGNED_SHORT&&(ye=n.RG16UI),he===n.UNSIGNED_INT&&(ye=n.RG32UI),he===n.BYTE&&(ye=n.RG8I),he===n.SHORT&&(ye=n.RG16I),he===n.INT&&(ye=n.RG32I)),U===n.RGB_INTEGER&&(he===n.UNSIGNED_BYTE&&(ye=n.RGB8UI),he===n.UNSIGNED_SHORT&&(ye=n.RGB16UI),he===n.UNSIGNED_INT&&(ye=n.RGB32UI),he===n.BYTE&&(ye=n.RGB8I),he===n.SHORT&&(ye=n.RGB16I),he===n.INT&&(ye=n.RGB32I)),U===n.RGBA_INTEGER&&(he===n.UNSIGNED_BYTE&&(ye=n.RGBA8UI),he===n.UNSIGNED_SHORT&&(ye=n.RGBA16UI),he===n.UNSIGNED_INT&&(ye=n.RGBA32UI),he===n.BYTE&&(ye=n.RGBA8I),he===n.SHORT&&(ye=n.RGBA16I),he===n.INT&&(ye=n.RGBA32I)),U===n.RGB&&(he===n.UNSIGNED_SHORT&&rt&&(ye=rt.RGB16_EXT),he===n.SHORT&&rt&&(ye=rt.RGB16_SNORM_EXT),he===n.UNSIGNED_INT_5_9_9_9_REV&&(ye=n.RGB9_E5),he===n.UNSIGNED_INT_10F_11F_11F_REV&&(ye=n.R11F_G11F_B10F)),U===n.RGBA){let Ie=Je?qp:oi.getTransfer(Ve);he===n.FLOAT&&(ye=n.RGBA32F),he===n.HALF_FLOAT&&(ye=n.RGBA16F),he===n.UNSIGNED_BYTE&&(ye=Ie===Yi?n.SRGB8_ALPHA8:n.RGBA8),he===n.UNSIGNED_SHORT&&rt&&(ye=rt.RGBA16_EXT),he===n.SHORT&&rt&&(ye=rt.RGBA16_SNORM_EXT),he===n.UNSIGNED_SHORT_4_4_4_4&&(ye=n.RGBA4),he===n.UNSIGNED_SHORT_5_5_5_1&&(ye=n.RGB5_A1)}return(ye===n.R16F||ye===n.R32F||ye===n.RG16F||ye===n.RG32F||ye===n.RGBA16F||ye===n.RGBA32F)&&e.get("EXT_color_buffer_float"),ye}function E(X,U){let he;return X?U===null||U===$a||U===Cu?he=n.DEPTH24_STENCIL8:U===Ks?he=n.DEPTH32F_STENCIL8:U===Mu&&(he=n.DEPTH24_STENCIL8,Ct("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):U===null||U===$a||U===Cu?he=n.DEPTH_COMPONENT24:U===Ks?he=n.DEPTH_COMPONENT32F:U===Mu&&(he=n.DEPTH_COMPONENT16),he}function S(X,U){return g(X)===!0||X.isFramebufferTexture&&X.minFilter!==Or&&X.minFilter!==Nr?Math.log2(Math.max(U.width,U.height))+1:X.mipmaps!==void 0&&X.mipmaps.length>0?X.mipmaps.length:X.isCompressedTexture&&Array.isArray(X.image)?U.mipmaps.length:1}function R(X){let U=X.target;U.removeEventListener("dispose",R),C(U),U.isVideoTexture&&f.delete(U),U.isHTMLTexture&&h.delete(U)}function I(X){let U=X.target;U.removeEventListener("dispose",I),D(U)}function C(X){let U=i.get(X);if(U.__webglInit===void 0)return;let he=X.source,Le=u.get(he);if(Le){let Ve=Le[U.__cacheKey];Ve.usedTimes--,Ve.usedTimes===0&&y(X),Object.keys(Le).length===0&&u.delete(he)}i.remove(X)}function y(X){let U=i.get(X);n.deleteTexture(U.__webglTexture);let he=X.source,Le=u.get(he);delete Le[U.__cacheKey],a.memory.textures--}function D(X){let U=i.get(X);if(X.depthTexture&&(X.depthTexture.dispose(),i.remove(X.depthTexture)),X.isWebGLCubeRenderTarget)for(let Le=0;Le<6;Le++){if(Array.isArray(U.__webglFramebuffer[Le]))for(let Ve=0;Ve=r.maxTextures&&Ct("WebGLTextures: Trying to use "+X+" texture units while this GPU supports only "+r.maxTextures),O+=1,X}function W(X){let U=[];return U.push(X.wrapS),U.push(X.wrapT),U.push(X.wrapR||0),U.push(X.magFilter),U.push(X.minFilter),U.push(X.anisotropy),U.push(X.internalFormat),U.push(X.format),U.push(X.type),U.push(X.generateMipmaps),U.push(X.premultiplyAlpha),U.push(X.flipY),U.push(X.unpackAlignment),U.push(X.colorSpace),U.join()}function te(X,U){let he=i.get(X);if(X.isVideoTexture&&wi(X),X.isRenderTargetTexture===!1&&X.isExternalTexture!==!0&&X.version>0&&he.__version!==X.version){let Le=X.image;if(Le===null)Ct("WebGLRenderer: Texture marked for update but no image data found.");else if(Le.complete===!1)Ct("WebGLRenderer: Texture marked for update but image is incomplete");else{ue(he,X,U);return}}else X.isExternalTexture&&(he.__webglTexture=X.sourceTexture?X.sourceTexture:null);t.bindTexture(n.TEXTURE_2D,he.__webglTexture,n.TEXTURE0+U)}function $(X,U){let he=i.get(X);if(X.isRenderTargetTexture===!1&&X.version>0&&he.__version!==X.version){ue(he,X,U);return}else X.isExternalTexture&&(he.__webglTexture=X.sourceTexture?X.sourceTexture:null);t.bindTexture(n.TEXTURE_2D_ARRAY,he.__webglTexture,n.TEXTURE0+U)}function J(X,U){let he=i.get(X);if(X.isRenderTargetTexture===!1&&X.version>0&&he.__version!==X.version){ue(he,X,U);return}t.bindTexture(n.TEXTURE_3D,he.__webglTexture,n.TEXTURE0+U)}function z(X,U){let he=i.get(X);if(X.isCubeDepthTexture!==!0&&X.version>0&&he.__version!==X.version){De(he,X,U);return}t.bindTexture(n.TEXTURE_CUBE_MAP,he.__webglTexture,n.TEXTURE0+U)}let Y={[Do]:n.REPEAT,[da]:n.CLAMP_TO_EDGE,[cu]:n.MIRRORED_REPEAT},me={[Or]:n.NEAREST,[HE]:n.NEAREST_MIPMAP_NEAREST,[Ah]:n.NEAREST_MIPMAP_LINEAR,[Nr]:n.LINEAR,[Iu]:n.LINEAR_MIPMAP_NEAREST,[Qa]:n.LINEAR_MIPMAP_LINEAR},xe={[r1]:n.NEVER,[l1]:n.ALWAYS,[n1]:n.LESS,[CS]:n.LEQUAL,[s1]:n.EQUAL,[yS]:n.GEQUAL,[a1]:n.GREATER,[o1]:n.NOTEQUAL};function Ue(X,U){if(U.type===Ks&&e.has("OES_texture_float_linear")===!1&&(U.magFilter===Nr||U.magFilter===Iu||U.magFilter===Ah||U.magFilter===Qa||U.minFilter===Nr||U.minFilter===Iu||U.minFilter===Ah||U.minFilter===Qa)&&Ct("WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),n.texParameteri(X,n.TEXTURE_WRAP_S,Y[U.wrapS]),n.texParameteri(X,n.TEXTURE_WRAP_T,Y[U.wrapT]),(X===n.TEXTURE_3D||X===n.TEXTURE_2D_ARRAY)&&n.texParameteri(X,n.TEXTURE_WRAP_R,Y[U.wrapR]),n.texParameteri(X,n.TEXTURE_MAG_FILTER,me[U.magFilter]),n.texParameteri(X,n.TEXTURE_MIN_FILTER,me[U.minFilter]),U.compareFunction&&(n.texParameteri(X,n.TEXTURE_COMPARE_MODE,n.COMPARE_REF_TO_TEXTURE),n.texParameteri(X,n.TEXTURE_COMPARE_FUNC,xe[U.compareFunction])),e.has("EXT_texture_filter_anisotropic")===!0){if(U.magFilter===Or||U.minFilter!==Ah&&U.minFilter!==Qa||U.type===Ks&&e.has("OES_texture_float_linear")===!1)return;if(U.anisotropy>1||i.get(U).__currentAnisotropy){let he=e.get("EXT_texture_filter_anisotropic");n.texParameterf(X,he.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(U.anisotropy,r.getMaxAnisotropy())),i.get(U).__currentAnisotropy=U.anisotropy}}}function ae(X,U){let he=!1;X.__webglInit===void 0&&(X.__webglInit=!0,U.addEventListener("dispose",R));let Le=U.source,Ve=u.get(Le);Ve===void 0&&(Ve={},u.set(Le,Ve));let Je=W(U);if(Je!==X.__cacheKey){Ve[Je]===void 0&&(Ve[Je]={texture:n.createTexture(),usedTimes:0},a.memory.textures++,he=!0),Ve[Je].usedTimes++;let rt=Ve[X.__cacheKey];rt!==void 0&&(Ve[X.__cacheKey].usedTimes--,rt.usedTimes===0&&y(U)),X.__cacheKey=Je,X.__webglTexture=Ve[Je].texture}return he}function ve(X,U,he){return Math.floor(Math.floor(X/he)/U)}function ne(X,U,he,Le){let Je=X.updateRanges;if(Je.length===0)t.texSubImage2D(n.TEXTURE_2D,0,0,0,U.width,U.height,he,Le,U.data);else{Je.sort((St,nt)=>St.start-nt.start);let rt=0;for(let St=1;St0){qt&&re&&t.texStorage2D(n.TEXTURE_2D,Pe,nt,Wt[0].width,Wt[0].height);for(let Ae=0,qe=Wt.length;Ae0){let Ye=pI(Qe.width,Qe.height,U.format,U.type);for(let we of U.layerUpdates){let At=Qe.data.subarray(we*Ye/Qe.data.BYTES_PER_ELEMENT,(we+1)*Ye/Qe.data.BYTES_PER_ELEMENT);t.compressedTexSubImage3D(n.TEXTURE_2D_ARRAY,Ae,0,0,we,Qe.width,Qe.height,1,ct,At)}U.clearLayerUpdates()}else t.compressedTexSubImage3D(n.TEXTURE_2D_ARRAY,Ae,0,0,0,Qe.width,Qe.height,Ie.depth,ct,Qe.data)}else t.compressedTexImage3D(n.TEXTURE_2D_ARRAY,Ae,nt,Qe.width,Qe.height,Ie.depth,0,Qe.data,0,0);else Ct("WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else qt?K&&t.texSubImage3D(n.TEXTURE_2D_ARRAY,Ae,0,0,0,Qe.width,Qe.height,Ie.depth,ct,St,Qe.data):t.texImage3D(n.TEXTURE_2D_ARRAY,Ae,nt,Qe.width,Qe.height,Ie.depth,0,ct,St,Qe.data)}else{qt&&re&&t.texStorage2D(n.TEXTURE_2D,Pe,nt,Wt[0].width,Wt[0].height);for(let Ae=0,qe=Wt.length;Ae0){let Ae=pI(Ie.width,Ie.height,U.format,U.type);for(let qe of U.layerUpdates){let Ye=Ie.data.subarray(qe*Ae/Ie.data.BYTES_PER_ELEMENT,(qe+1)*Ae/Ie.data.BYTES_PER_ELEMENT);t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,qe,Ie.width,Ie.height,1,ct,St,Ye)}U.clearLayerUpdates()}else t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,0,Ie.width,Ie.height,Ie.depth,ct,St,Ie.data)}else t.texImage3D(n.TEXTURE_2D_ARRAY,0,nt,Ie.width,Ie.height,Ie.depth,0,ct,St,Ie.data);else if(U.isData3DTexture)qt?(re&&t.texStorage3D(n.TEXTURE_3D,Pe,nt,Ie.width,Ie.height,Ie.depth),K&&t.texSubImage3D(n.TEXTURE_3D,0,0,0,0,Ie.width,Ie.height,Ie.depth,ct,St,Ie.data)):t.texImage3D(n.TEXTURE_3D,0,nt,Ie.width,Ie.height,Ie.depth,0,ct,St,Ie.data);else if(U.isFramebufferTexture){if(re)if(qt)t.texStorage2D(n.TEXTURE_2D,Pe,nt,Ie.width,Ie.height);else{let Ae=Ie.width,qe=Ie.height;for(let Ye=0;Ye>=1,qe>>=1}}else if(U.isHTMLTexture){if("texElementImage2D"in n){let Ae=n.canvas;if(Ae.hasAttribute("layoutsubtree")||Ae.setAttribute("layoutsubtree","true"),Ie.parentNode!==Ae){Ae.appendChild(Ie),h.add(U),Ae.onpaint=Zt=>{let tr=Zt.changedElements;for(let vi of h)tr.includes(vi.image)&&(vi.needsUpdate=!0)},Ae.requestPaint();return}let qe=0,Ye=n.RGBA,we=n.RGBA,At=n.UNSIGNED_BYTE;n.texElementImage2D(n.TEXTURE_2D,qe,Ye,we,At,Ie),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(Wt.length>0){if(qt&&re){let Ae=Pi(Wt[0]);t.texStorage2D(n.TEXTURE_2D,Pe,nt,Ae.width,Ae.height)}for(let Ae=0,qe=Wt.length;Ae0&&qe++;let we=Pi(nt[0]);t.texStorage2D(n.TEXTURE_CUBE_MAP,qe,re,we.width,we.height)}for(let we=0;we<6;we++)if(St){K?Ae&&t.texSubImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+we,0,0,0,nt[we].width,nt[we].height,Wt,qt,nt[we].data):t.texImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+we,0,re,nt[we].width,nt[we].height,0,Wt,qt,nt[we].data);for(let At=0;At>Je),Qe=Math.max(1,U.height>>Je);Ve===n.TEXTURE_3D||Ve===n.TEXTURE_2D_ARRAY?t.texImage3D(Ve,Je,Ie,nt,Qe,U.depth,0,rt,ye,null):t.texImage2D(Ve,Je,Ie,nt,Qe,0,rt,ye,null)}t.bindFramebuffer(n.FRAMEBUFFER,X),ti(U)?o.framebufferTexture2DMultisampleEXT(n.FRAMEBUFFER,Le,Ve,St.__webglTexture,0,Vi(U)):(Ve===n.TEXTURE_2D||Ve>=n.TEXTURE_CUBE_MAP_POSITIVE_X&&Ve<=n.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&n.framebufferTexture2D(n.FRAMEBUFFER,Le,Ve,St.__webglTexture,Je),t.bindFramebuffer(n.FRAMEBUFFER,null)}function be(X,U,he){if(n.bindRenderbuffer(n.RENDERBUFFER,X),U.depthBuffer){let Le=U.depthTexture,Ve=Le&&Le.isDepthTexture?Le.type:null,Je=E(U.stencilBuffer,Ve),rt=U.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT;ti(U)?o.renderbufferStorageMultisampleEXT(n.RENDERBUFFER,Vi(U),Je,U.width,U.height):he?n.renderbufferStorageMultisample(n.RENDERBUFFER,Vi(U),Je,U.width,U.height):n.renderbufferStorage(n.RENDERBUFFER,Je,U.width,U.height),n.framebufferRenderbuffer(n.FRAMEBUFFER,rt,n.RENDERBUFFER,X)}else{let Le=U.textures;for(let Ve=0;Ve{delete U.__boundDepthTexture,delete U.__depthDisposeCallback,Le.removeEventListener("dispose",Ve)};Le.addEventListener("dispose",Ve),U.__depthDisposeCallback=Ve}U.__boundDepthTexture=Le}if(X.depthTexture&&!U.__autoAllocateDepthBuffer)if(he)for(let Le=0;Le<6;Le++)Ke(U.__webglFramebuffer[Le],X,Le);else{let Le=X.texture.mipmaps;Le&&Le.length>0?Ke(U.__webglFramebuffer[0],X,0):Ke(U.__webglFramebuffer,X,0)}else if(he){U.__webglDepthbuffer=[];for(let Le=0;Le<6;Le++)if(t.bindFramebuffer(n.FRAMEBUFFER,U.__webglFramebuffer[Le]),U.__webglDepthbuffer[Le]===void 0)U.__webglDepthbuffer[Le]=n.createRenderbuffer(),be(U.__webglDepthbuffer[Le],X,!1);else{let Ve=X.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,Je=U.__webglDepthbuffer[Le];n.bindRenderbuffer(n.RENDERBUFFER,Je),n.framebufferRenderbuffer(n.FRAMEBUFFER,Ve,n.RENDERBUFFER,Je)}}else{let Le=X.texture.mipmaps;if(Le&&Le.length>0?t.bindFramebuffer(n.FRAMEBUFFER,U.__webglFramebuffer[0]):t.bindFramebuffer(n.FRAMEBUFFER,U.__webglFramebuffer),U.__webglDepthbuffer===void 0)U.__webglDepthbuffer=n.createRenderbuffer(),be(U.__webglDepthbuffer,X,!1);else{let Ve=X.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,Je=U.__webglDepthbuffer;n.bindRenderbuffer(n.RENDERBUFFER,Je),n.framebufferRenderbuffer(n.FRAMEBUFFER,Ve,n.RENDERBUFFER,Je)}}t.bindFramebuffer(n.FRAMEBUFFER,null)}function Xe(X,U,he){let Le=i.get(X);U!==void 0&&de(Le.__webglFramebuffer,X,X.texture,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,0),he!==void 0&&Tt(X)}function je(X){let U=X.texture,he=i.get(X),Le=i.get(U);X.addEventListener("dispose",I);let Ve=X.textures,Je=X.isWebGLCubeRenderTarget===!0,rt=Ve.length>1;if(rt||(Le.__webglTexture===void 0&&(Le.__webglTexture=n.createTexture()),Le.__version=U.version,a.memory.textures++),Je){he.__webglFramebuffer=[];for(let ye=0;ye<6;ye++)if(U.mipmaps&&U.mipmaps.length>0){he.__webglFramebuffer[ye]=[];for(let Ie=0;Ie0){he.__webglFramebuffer=[];for(let ye=0;ye0&&ti(X)===!1){he.__webglMultisampledFramebuffer=n.createFramebuffer(),he.__webglColorRenderbuffer=[],t.bindFramebuffer(n.FRAMEBUFFER,he.__webglMultisampledFramebuffer);for(let ye=0;ye0)for(let Ie=0;Ie0)for(let Ie=0;Ie0){if(ti(X)===!1){let U=X.textures,he=X.width,Le=X.height,Ve=n.COLOR_BUFFER_BIT,Je=X.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,rt=i.get(X),ye=U.length>1;if(ye)for(let ct=0;ct0?t.bindFramebuffer(n.DRAW_FRAMEBUFFER,rt.__webglFramebuffer[0]):t.bindFramebuffer(n.DRAW_FRAMEBUFFER,rt.__webglFramebuffer);for(let ct=0;ct0&&e.has("WEBGL_multisampled_render_to_texture")===!0&&U.__useRenderToTexture!==!1}function wi(X){let U=a.render.frame;f.get(X)!==U&&(f.set(X,U),X.update())}function ot(X,U){let he=X.colorSpace,Le=X.format,Ve=X.type;return X.isCompressedTexture===!0||X.isVideoTexture===!0||he!==Kn&&he!==Ol&&(oi.getTransfer(he)===Yi?(Le!==js||Ve!==vs)&&Ct("WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):Ut("WebGLTextures: Unsupported texture color space:",he)),U}function Pi(X){return typeof HTMLImageElement!="undefined"&&X instanceof HTMLImageElement?(c.width=X.naturalWidth||X.width,c.height=X.naturalHeight||X.height):typeof VideoFrame!="undefined"&&X instanceof VideoFrame?(c.width=X.displayWidth,c.height=X.displayHeight):(c.width=X.width,c.height=X.height),c}this.allocateTextureUnit=B,this.resetTextureUnits=V,this.getTextureUnits=N,this.setTextureUnits=w,this.setTexture2D=te,this.setTexture2DArray=$,this.setTexture3D=J,this.setTextureCube=z,this.rebindTextures=Xe,this.setupRenderTarget=je,this.updateRenderTargetMipmap=$t,this.updateMultisampleRenderTarget=oe,this.setupDepthRenderbuffer=Tt,this.setupFrameBufferTexture=de,this.useMultisampledRTT=ti,this.isReversedDepthBuffer=function(){return t.buffers.depth.getReversed()}}function Bie(n,e){function t(i,r=Ol){let s,a=oi.getTransfer(r);if(i===vs)return n.UNSIGNED_BYTE;if(i===XE)return n.UNSIGNED_SHORT_4_4_4_4;if(i===YE)return n.UNSIGNED_SHORT_5_5_5_1;if(i===sI)return n.UNSIGNED_INT_5_9_9_9_REV;if(i===aI)return n.UNSIGNED_INT_10F_11F_11F_REV;if(i===rI)return n.BYTE;if(i===nI)return n.SHORT;if(i===Mu)return n.UNSIGNED_SHORT;if(i===zE)return n.INT;if(i===$a)return n.UNSIGNED_INT;if(i===Ks)return n.FLOAT;if(i===Wo)return n.HALF_FLOAT;if(i===oI)return n.ALPHA;if(i===lI)return n.RGB;if(i===js)return n.RGBA;if(i===Oo)return n.DEPTH_COMPONENT;if(i===$c)return n.DEPTH_STENCIL;if(i===KE)return n.RED;if(i===jE)return n.RED_INTEGER;if(i===Jc)return n.RG;if(i===qE)return n.RG_INTEGER;if(i===ZE)return n.RGBA_INTEGER;if(i===S_||i===T_||i===A_||i===x_)if(a===Yi)if(s=e.get("WEBGL_compressed_texture_s3tc_srgb"),s!==null){if(i===S_)return s.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(i===T_)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(i===A_)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(i===x_)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(s=e.get("WEBGL_compressed_texture_s3tc"),s!==null){if(i===S_)return s.COMPRESSED_RGB_S3TC_DXT1_EXT;if(i===T_)return s.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(i===A_)return s.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(i===x_)return s.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(i===QE||i===$E||i===JE||i===eS)if(s=e.get("WEBGL_compressed_texture_pvrtc"),s!==null){if(i===QE)return s.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(i===$E)return s.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(i===JE)return s.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(i===eS)return s.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(i===tS||i===iS||i===rS||i===nS||i===sS||i===R_||i===aS)if(s=e.get("WEBGL_compressed_texture_etc"),s!==null){if(i===tS||i===iS)return a===Yi?s.COMPRESSED_SRGB8_ETC2:s.COMPRESSED_RGB8_ETC2;if(i===rS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:s.COMPRESSED_RGBA8_ETC2_EAC;if(i===nS)return s.COMPRESSED_R11_EAC;if(i===sS)return s.COMPRESSED_SIGNED_R11_EAC;if(i===R_)return s.COMPRESSED_RG11_EAC;if(i===aS)return s.COMPRESSED_SIGNED_RG11_EAC}else return null;if(i===oS||i===lS||i===cS||i===fS||i===hS||i===dS||i===uS||i===mS||i===pS||i===_S||i===gS||i===vS||i===ES||i===SS)if(s=e.get("WEBGL_compressed_texture_astc"),s!==null){if(i===oS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:s.COMPRESSED_RGBA_ASTC_4x4_KHR;if(i===lS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:s.COMPRESSED_RGBA_ASTC_5x4_KHR;if(i===cS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:s.COMPRESSED_RGBA_ASTC_5x5_KHR;if(i===fS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:s.COMPRESSED_RGBA_ASTC_6x5_KHR;if(i===hS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:s.COMPRESSED_RGBA_ASTC_6x6_KHR;if(i===dS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:s.COMPRESSED_RGBA_ASTC_8x5_KHR;if(i===uS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:s.COMPRESSED_RGBA_ASTC_8x6_KHR;if(i===mS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:s.COMPRESSED_RGBA_ASTC_8x8_KHR;if(i===pS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:s.COMPRESSED_RGBA_ASTC_10x5_KHR;if(i===_S)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:s.COMPRESSED_RGBA_ASTC_10x6_KHR;if(i===gS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:s.COMPRESSED_RGBA_ASTC_10x8_KHR;if(i===vS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:s.COMPRESSED_RGBA_ASTC_10x10_KHR;if(i===ES)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:s.COMPRESSED_RGBA_ASTC_12x10_KHR;if(i===SS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:s.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(i===TS||i===AS||i===xS)if(s=e.get("EXT_texture_compression_bptc"),s!==null){if(i===TS)return a===Yi?s.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:s.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(i===AS)return s.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(i===xS)return s.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(i===RS||i===bS||i===b_||i===IS)if(s=e.get("EXT_texture_compression_rgtc"),s!==null){if(i===RS)return s.COMPRESSED_RED_RGTC1_EXT;if(i===bS)return s.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(i===b_)return s.COMPRESSED_RED_GREEN_RGTC2_EXT;if(i===IS)return s.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return i===Cu?n.UNSIGNED_INT_24_8:n[i]!==void 0?n[i]:null}return{convert:t}}function Wie(n,e){function t(_,g){_.matrixAutoUpdate===!0&&_.updateMatrix(),g.value.copy(_.matrix)}function i(_,g){g.color.getRGB(_.fogColor.value,dI(n)),g.isFog?(_.fogNear.value=g.near,_.fogFar.value=g.far):g.isFogExp2&&(_.fogDensity.value=g.density)}function r(_,g,v,x,A){g.isNodeMaterial?g.uniformsNeedUpdate=!1:g.isMeshBasicMaterial?s(_,g):g.isMeshLambertMaterial?(s(_,g),g.envMap&&(_.envMapIntensity.value=g.envMapIntensity)):g.isMeshToonMaterial?(s(_,g),h(_,g)):g.isMeshPhongMaterial?(s(_,g),f(_,g),g.envMap&&(_.envMapIntensity.value=g.envMapIntensity)):g.isMeshStandardMaterial?(s(_,g),d(_,g),g.isMeshPhysicalMaterial&&u(_,g,A)):g.isMeshMatcapMaterial?(s(_,g),m(_,g)):g.isMeshDepthMaterial?s(_,g):g.isMeshDistanceMaterial?(s(_,g),p(_,g)):g.isMeshNormalMaterial?s(_,g):g.isLineBasicMaterial?(a(_,g),g.isLineDashedMaterial&&o(_,g)):g.isPointsMaterial?l(_,g,v,x):g.isSpriteMaterial?c(_,g):g.isShadowMaterial?(_.color.value.copy(g.color),_.opacity.value=g.opacity):g.isShaderMaterial&&(g.uniformsNeedUpdate=!1)}function s(_,g){_.opacity.value=g.opacity,g.color&&_.diffuse.value.copy(g.color),g.emissive&&_.emissive.value.copy(g.emissive).multiplyScalar(g.emissiveIntensity),g.map&&(_.map.value=g.map,t(g.map,_.mapTransform)),g.alphaMap&&(_.alphaMap.value=g.alphaMap,t(g.alphaMap,_.alphaMapTransform)),g.bumpMap&&(_.bumpMap.value=g.bumpMap,t(g.bumpMap,_.bumpMapTransform),_.bumpScale.value=g.bumpScale,g.side===pn&&(_.bumpScale.value*=-1)),g.normalMap&&(_.normalMap.value=g.normalMap,t(g.normalMap,_.normalMapTransform),_.normalScale.value.copy(g.normalScale),g.side===pn&&_.normalScale.value.negate()),g.displacementMap&&(_.displacementMap.value=g.displacementMap,t(g.displacementMap,_.displacementMapTransform),_.displacementScale.value=g.displacementScale,_.displacementBias.value=g.displacementBias),g.emissiveMap&&(_.emissiveMap.value=g.emissiveMap,t(g.emissiveMap,_.emissiveMapTransform)),g.specularMap&&(_.specularMap.value=g.specularMap,t(g.specularMap,_.specularMapTransform)),g.alphaTest>0&&(_.alphaTest.value=g.alphaTest);let v=e.get(g),x=v.envMap,A=v.envMapRotation;x&&(_.envMap.value=x,_.envMapRotation.value.setFromMatrix4(kie.makeRotationFromEuler(A)).transpose(),x.isCubeTexture&&x.isRenderTargetTexture===!1&&_.envMapRotation.value.premultiply(X1),_.reflectivity.value=g.reflectivity,_.ior.value=g.ior,_.refractionRatio.value=g.refractionRatio),g.lightMap&&(_.lightMap.value=g.lightMap,_.lightMapIntensity.value=g.lightMapIntensity,t(g.lightMap,_.lightMapTransform)),g.aoMap&&(_.aoMap.value=g.aoMap,_.aoMapIntensity.value=g.aoMapIntensity,t(g.aoMap,_.aoMapTransform))}function a(_,g){_.diffuse.value.copy(g.color),_.opacity.value=g.opacity,g.map&&(_.map.value=g.map,t(g.map,_.mapTransform))}function o(_,g){_.dashSize.value=g.dashSize,_.totalSize.value=g.dashSize+g.gapSize,_.scale.value=g.scale}function l(_,g,v,x){_.diffuse.value.copy(g.color),_.opacity.value=g.opacity,_.size.value=g.size*v,_.scale.value=x*.5,g.map&&(_.map.value=g.map,t(g.map,_.uvTransform)),g.alphaMap&&(_.alphaMap.value=g.alphaMap,t(g.alphaMap,_.alphaMapTransform)),g.alphaTest>0&&(_.alphaTest.value=g.alphaTest)}function c(_,g){_.diffuse.value.copy(g.color),_.opacity.value=g.opacity,_.rotation.value=g.rotation,g.map&&(_.map.value=g.map,t(g.map,_.mapTransform)),g.alphaMap&&(_.alphaMap.value=g.alphaMap,t(g.alphaMap,_.alphaMapTransform)),g.alphaTest>0&&(_.alphaTest.value=g.alphaTest)}function f(_,g){_.specular.value.copy(g.specular),_.shininess.value=Math.max(g.shininess,1e-4)}function h(_,g){g.gradientMap&&(_.gradientMap.value=g.gradientMap)}function d(_,g){_.metalness.value=g.metalness,g.metalnessMap&&(_.metalnessMap.value=g.metalnessMap,t(g.metalnessMap,_.metalnessMapTransform)),_.roughness.value=g.roughness,g.roughnessMap&&(_.roughnessMap.value=g.roughnessMap,t(g.roughnessMap,_.roughnessMapTransform)),g.envMap&&(_.envMapIntensity.value=g.envMapIntensity)}function u(_,g,v){_.ior.value=g.ior,g.sheen>0&&(_.sheenColor.value.copy(g.sheenColor).multiplyScalar(g.sheen),_.sheenRoughness.value=g.sheenRoughness,g.sheenColorMap&&(_.sheenColorMap.value=g.sheenColorMap,t(g.sheenColorMap,_.sheenColorMapTransform)),g.sheenRoughnessMap&&(_.sheenRoughnessMap.value=g.sheenRoughnessMap,t(g.sheenRoughnessMap,_.sheenRoughnessMapTransform))),g.clearcoat>0&&(_.clearcoat.value=g.clearcoat,_.clearcoatRoughness.value=g.clearcoatRoughness,g.clearcoatMap&&(_.clearcoatMap.value=g.clearcoatMap,t(g.clearcoatMap,_.clearcoatMapTransform)),g.clearcoatRoughnessMap&&(_.clearcoatRoughnessMap.value=g.clearcoatRoughnessMap,t(g.clearcoatRoughnessMap,_.clearcoatRoughnessMapTransform)),g.clearcoatNormalMap&&(_.clearcoatNormalMap.value=g.clearcoatNormalMap,t(g.clearcoatNormalMap,_.clearcoatNormalMapTransform),_.clearcoatNormalScale.value.copy(g.clearcoatNormalScale),g.side===pn&&_.clearcoatNormalScale.value.negate())),g.dispersion>0&&(_.dispersion.value=g.dispersion),g.iridescence>0&&(_.iridescence.value=g.iridescence,_.iridescenceIOR.value=g.iridescenceIOR,_.iridescenceThicknessMinimum.value=g.iridescenceThicknessRange[0],_.iridescenceThicknessMaximum.value=g.iridescenceThicknessRange[1],g.iridescenceMap&&(_.iridescenceMap.value=g.iridescenceMap,t(g.iridescenceMap,_.iridescenceMapTransform)),g.iridescenceThicknessMap&&(_.iridescenceThicknessMap.value=g.iridescenceThicknessMap,t(g.iridescenceThicknessMap,_.iridescenceThicknessMapTransform))),g.transmission>0&&(_.transmission.value=g.transmission,_.transmissionSamplerMap.value=v.texture,_.transmissionSamplerSize.value.set(v.width,v.height),g.transmissionMap&&(_.transmissionMap.value=g.transmissionMap,t(g.transmissionMap,_.transmissionMapTransform)),_.thickness.value=g.thickness,g.thicknessMap&&(_.thicknessMap.value=g.thicknessMap,t(g.thicknessMap,_.thicknessMapTransform)),_.attenuationDistance.value=g.attenuationDistance,_.attenuationColor.value.copy(g.attenuationColor)),g.anisotropy>0&&(_.anisotropyVector.value.set(g.anisotropy*Math.cos(g.anisotropyRotation),g.anisotropy*Math.sin(g.anisotropyRotation)),g.anisotropyMap&&(_.anisotropyMap.value=g.anisotropyMap,t(g.anisotropyMap,_.anisotropyMapTransform))),_.specularIntensity.value=g.specularIntensity,_.specularColor.value.copy(g.specularColor),g.specularColorMap&&(_.specularColorMap.value=g.specularColorMap,t(g.specularColorMap,_.specularColorMapTransform)),g.specularIntensityMap&&(_.specularIntensityMap.value=g.specularIntensityMap,t(g.specularIntensityMap,_.specularIntensityMapTransform))}function m(_,g){g.matcap&&(_.matcap.value=g.matcap)}function p(_,g){let v=e.get(g).light;_.referencePosition.value.setFromMatrixPosition(v.matrixWorld),_.nearDistance.value=v.shadow.camera.near,_.farDistance.value=v.shadow.camera.far}return{refreshFogUniforms:i,refreshMaterialUniforms:r}}function Hie(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",_));let E=x.program;i.updateUBOMapping(v,E);let S=e.render.frame;s[v.id]!==S&&(d(v),s[v.id]=S)}function f(v){let x=h();v.__bindingPointIndex=x;let A=n.createBuffer(),E=v.__size,S=v.usage;return n.bindBuffer(n.UNIFORM_BUFFER,A),n.bufferData(n.UNIFORM_BUFFER,E,S),n.bindBuffer(n.UNIFORM_BUFFER,null),n.bindBufferBase(n.UNIFORM_BUFFER,x,A),A}function h(){for(let v=0;v0&&(A+=E-S),v.__size=A,v.__cache={},this}function p(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 _(v){let x=v.target;x.removeEventListener("dispose",_);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 Xie(){return Ho===null&&(Ho=new vu(zie,16,16,Jc,Wo),Ho.name="DFG_LUT",Ho.minFilter=Nr,Ho.magFilter=Nr,Ho.wrapS=da,Ho.wrapT=da,Ho.generateMipmaps=!1,Ho.needsUpdate=!0),Ho}var a$,o$,l$,c$,f$,h$,d$,u$,m$,p$,_$,g$,v$,E$,S$,T$,A$,x$,R$,b$,I$,M$,C$,y$,P$,L$,D$,O$,N$,w$,F$,U$,B$,V$,G$,k$,W$,H$,z$,X$,Y$,K$,j$,q$,Z$,Q$,$$,J$,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,bJ,IJ,MJ,CJ,yJ,PJ,LJ,DJ,OJ,NJ,wJ,FJ,UJ,BJ,VJ,GJ,kJ,WJ,HJ,zJ,XJ,YJ,KJ,jJ,qJ,ZJ,QJ,$J,JJ,eee,tee,iee,ree,nee,see,aee,oee,lee,cee,fee,hee,dee,uee,mee,pee,_ee,gee,vee,Eee,See,Tee,Aee,xee,Ree,bee,Iee,Mee,Cee,yee,Pee,Lee,Dee,Oee,Nee,wee,Fee,Uee,Bee,Vee,hi,pt,zo,LS,Gee,G1,ef,g1,Rh,Yee,C_,v1,AI,xI,RI,bI,Kee,Ou,OS,nte,k1,CI,W1,H1,z1,A1,x1,R1,b1,I1,yI,PI,LI,II,Du,Kte,jte,y1,$te,DS,nie,sie,oie,cie,hie,uie,pie,Eie,OI,NI,Mie,Lie,Die,Oie,Nie,B1,y_,MI,Vie,Gie,wI,FI,kie,X1,zie,Ho,NS,qs=M(()=>{TI();TI();a$=`#ifdef USE_ALPHAHASH +`+z)}else w!==""?Ct("WebGLProgram: Program Info Log:",w):(U===""||W==="")&&($=!1);$&&(D.diagnostics={runnable:te,programLog:w,vertexShader:{log:U,prefix:_},fragmentShader:{log:W,prefix:g}})}r.deleteShader(E),r.deleteShader(S),I=new Du(r,p),C=mie(r,p)}let I;this.getUniforms=function(){return I===void 0&&R(this),I};let C;this.getAttributes=function(){return C===void 0&&R(this),C};let y=t.rendererExtensionParallelShaderCompile===!1;return this.isReady=function(){return y===!1&&(y=r.getProgramParameter(p,nie)),y},this.destroy=function(){i.releaseStatesOfProgram(this),r.deleteProgram(p),this.program=void 0},this.type=t.shaderType,this.name=t.shaderName,this.id=sie++,this.cacheKey=e,this.usedTimes=1,this.program=p,this.vertexShader=E,this.fragmentShader=S,this}function Lie(n){return n===Jc||n===b_||n===I_}function Die(n,e,t,i,r,s){let a=new mu,o=new FI,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 p(I,C,y,D,O,V){let N=D.fog,w=O.geometry,U=I.isMeshStandardMaterial||I.isMeshLambertMaterial||I.isMeshPhongMaterial?D.environment:null,W=I.isMeshStandardMaterial||I.isMeshLambertMaterial&&!I.envMap||I.isMeshPhongMaterial&&!I.envMap,te=e.get(I.envMap||U,W),$=te&&te.mapping===S_?te.image.height:null,J=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 z=w.morphAttributes.position||w.morphAttributes.normal||w.morphAttributes.color,Y=z!==void 0?z.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,Be,ae,ve;if(J){let Zt=Xo[J];xe=Zt.vertexShader,Be=Zt.fragmentShader}else xe=I.vertexShader,Be=I.fragmentShader,o.update(I),ae=o.getVertexShaderID(I),ve=o.getFragmentShaderID(I);let ne=n.getRenderTarget(),ue=n.state.buffers.depth.getReversed(),De=O.isInstancedMesh===!0,de=O.isBatchedMesh===!0,be=!!I.map,je=!!I.matcap,Tt=!!te,Xe=!!I.aoMap,qe=!!I.lightMap,$t=!!I.bumpMap,Dt=!!I.normalMap,xi=!!I.displacementMap,oe=!!I.emissiveMap,Vi=!!I.metalnessMap,ii=!!I.roughnessMap,Fi=I.anisotropy>0,ot=I.clearcoat>0,Li=I.dispersion>0,X=I.iridescence>0,B=I.sheen>0,he=I.transmission>0,Le=Fi&&!!I.anisotropyMap,Ve=ot&&!!I.clearcoatMap,Je=ot&&!!I.clearcoatNormalMap,rt=ot&&!!I.clearcoatRoughnessMap,ye=X&&!!I.iridescenceMap,Ie=X&&!!I.iridescenceThicknessMap,ct=B&&!!I.sheenColorMap,St=B&&!!I.sheenRoughnessMap,nt=!!I.specularMap,Qe=!!I.specularColorMap,Wt=!!I.specularIntensityMap,qt=he&&!!I.transmissionMap,re=he&&!!I.thicknessMap,K=!!I.gradientMap,Pe=!!I.alphaMap,Ae=I.alphaTest>0,Ye=!!I.alphaHash,Ke=!!I.extensions,we=Es;I.toneMapped&&(ne===null||ne.isXRRenderTarget===!0)&&(we=n.toneMapping);let At={shaderID:J,shaderType:I.type,shaderName:I.name,vertexShader:xe,fragmentShader:Be,defines:I.defines,customVertexShaderID:ae,customFragmentShaderID:ve,isRawShaderMaterial:I.isRawShaderMaterial===!0,glslVersion:I.glslVersion,precision:d,batching:de,batchingColor:de&&O._colorsTexture!==null,instancing:De,instancingColor:De&&O.instanceColor!==null,instancingMorph:De&&O.morphTexture!==null,outputColorSpace:ne===null?n.outputColorSpace:ne.isXRRenderTarget===!0?ne.texture.colorSpace:oi.workingColorSpace,alphaToCoverage:!!I.alphaToCoverage,map:be,matcap:je,envMap:Tt,envMapMode:Tt&&te.mapping,envMapCubeUVHeight:$,aoMap:Xe,lightMap:qe,bumpMap:$t,normalMap:Dt,displacementMap:xi,emissiveMap:oe,normalMapObjectSpace:Dt&&I.normalMapType===f1,normalMapTangentSpace:Dt&&I.normalMapType===Pu,packedNormalMap:Dt&&I.normalMapType===Pu&&Lie(I.normalMap.format),metalnessMap:Vi,roughnessMap:ii,anisotropy:Fi,anisotropyMap:Le,clearcoat:ot,clearcoatMap:Ve,clearcoatNormalMap:Je,clearcoatRoughnessMap:rt,dispersion:Li,iridescence:X,iridescenceMap:ye,iridescenceThicknessMap:Ie,sheen:B,sheenColorMap:ct,sheenRoughnessMap:St,specularMap:nt,specularColorMap:Qe,specularIntensityMap:Wt,transmission:he,transmissionMap:qt,thicknessMap:re,gradientMap:K,opaque:I.transparent===!1&&I.blending===ch&&I.alphaToCoverage===!1,alphaMap:Pe,alphaTest:Ae,alphaHash:Ye,combine:I.combine,mapUv:be&&m(I.map.channel),aoMapUv:Xe&&m(I.aoMap.channel),lightMapUv:qe&&m(I.lightMap.channel),bumpMapUv:$t&&m(I.bumpMap.channel),normalMapUv:Dt&&m(I.normalMap.channel),displacementMapUv:xi&&m(I.displacementMap.channel),emissiveMapUv:oe&&m(I.emissiveMap.channel),metalnessMapUv:Vi&&m(I.metalnessMap.channel),roughnessMapUv:ii&&m(I.roughnessMap.channel),anisotropyMapUv:Le&&m(I.anisotropyMap.channel),clearcoatMapUv:Ve&&m(I.clearcoatMap.channel),clearcoatNormalMapUv:Je&&m(I.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:rt&&m(I.clearcoatRoughnessMap.channel),iridescenceMapUv:ye&&m(I.iridescenceMap.channel),iridescenceThicknessMapUv:Ie&&m(I.iridescenceThicknessMap.channel),sheenColorMapUv:ct&&m(I.sheenColorMap.channel),sheenRoughnessMapUv:St&&m(I.sheenRoughnessMap.channel),specularMapUv:nt&&m(I.specularMap.channel),specularColorMapUv:Qe&&m(I.specularColorMap.channel),specularIntensityMapUv:Wt&&m(I.specularIntensityMap.channel),transmissionMapUv:qt&&m(I.transmissionMap.channel),thicknessMapUv:re&&m(I.thicknessMap.channel),alphaMapUv:Pe&&m(I.alphaMap.channel),vertexTangents:!!w.attributes.tangent&&(Dt||Fi),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||Pe),fog:!!N,useFog:I.fog===!0,fogExp2:!!N&&N.isFogExp2,flatShading:I.wireframe===!1&&(I.flatShading===!0||w.attributes.normal===void 0&&Dt===!1&&(I.isMeshLambertMaterial||I.isMeshPhongMaterial||I.isMeshStandardMaterial||I.isMeshPhysicalMaterial)),sizeAttenuation:I.sizeAttenuation===!0,logarithmicDepthBuffer:h,reversedDepthBuffer:ue,skinning:O.isSkinnedMesh===!0,morphTargets:w.morphAttributes.position!==void 0,morphNormals:w.morphAttributes.normal!==void 0,morphColors:w.morphAttributes.color!==void 0,morphTargetsCount:Y,morphTextureStride:me,numDirLights:C.directional.length,numPointLights:C.point.length,numSpotLights:C.spot.length,numSpotLightMaps:C.spotLightMap.length,numRectAreaLights:C.rectArea.length,numHemiLights:C.hemi.length,numDirLightShadows:C.directionalShadowMap.length,numPointLightShadows:C.pointShadowMap.length,numSpotLightShadows:C.spotShadowMap.length,numSpotLightShadowsWithMaps:C.numSpotLightShadowsWithMaps,numLightProbes:C.numLightProbes,numLightProbeGrids:V.length,numClippingPlanes:s.numPlanes,numClipIntersection:s.numIntersection,dithering:I.dithering,shadowMapEnabled:n.shadowMap.enabled&&y.length>0,shadowMapType:n.shadowMap.type,toneMapping:we,decodeVideoTexture:be&&I.map.isVideoTexture===!0&&oi.getTransfer(I.map.colorSpace)===Yi,decodeVideoTextureEmissive:oe&&I.emissiveMap.isVideoTexture===!0&&oi.getTransfer(I.emissiveMap.colorSpace)===Yi,premultipliedAlpha:I.premultipliedAlpha,doubleSided:I.side===pa,flipSided:I.side===_n,useDepthPacking:I.depthPacking>=0,depthPacking:I.depthPacking||0,index0AttributeName:I.index0AttributeName,extensionClipCullDistance:Ke&&I.extensions.clipCullDistance===!0&&t.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(Ke&&I.extensions.multiDraw===!0||de)&&t.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:t.has("KHR_parallel_shader_compile"),customProgramCacheKey:I.customProgramCacheKey()};return At.vertexUv1s=l.has(1),At.vertexUv2s=l.has(2),At.vertexUv3s=l.has(3),l.clear(),At}function _(I){let C=[];if(I.shaderID?C.push(I.shaderID):(C.push(I.customVertexShaderID),C.push(I.customFragmentShaderID)),I.defines!==void 0)for(let y in I.defines)C.push(y),C.push(I.defines[y]);return I.isRawShaderMaterial===!1&&(g(C,I),v(C,I),C.push(n.outputColorSpace)),C.push(I.customProgramCacheKey),C.join()}function g(I,C){I.push(C.precision),I.push(C.outputColorSpace),I.push(C.envMapMode),I.push(C.envMapCubeUVHeight),I.push(C.mapUv),I.push(C.alphaMapUv),I.push(C.lightMapUv),I.push(C.aoMapUv),I.push(C.bumpMapUv),I.push(C.normalMapUv),I.push(C.displacementMapUv),I.push(C.emissiveMapUv),I.push(C.metalnessMapUv),I.push(C.roughnessMapUv),I.push(C.anisotropyMapUv),I.push(C.clearcoatMapUv),I.push(C.clearcoatNormalMapUv),I.push(C.clearcoatRoughnessMapUv),I.push(C.iridescenceMapUv),I.push(C.iridescenceThicknessMapUv),I.push(C.sheenColorMapUv),I.push(C.sheenRoughnessMapUv),I.push(C.specularMapUv),I.push(C.specularColorMapUv),I.push(C.specularIntensityMapUv),I.push(C.transmissionMapUv),I.push(C.thicknessMapUv),I.push(C.combine),I.push(C.fogExp2),I.push(C.sizeAttenuation),I.push(C.morphTargetsCount),I.push(C.morphAttributeCount),I.push(C.numDirLights),I.push(C.numPointLights),I.push(C.numSpotLights),I.push(C.numSpotLightMaps),I.push(C.numHemiLights),I.push(C.numRectAreaLights),I.push(C.numDirLightShadows),I.push(C.numPointLightShadows),I.push(C.numSpotLightShadows),I.push(C.numSpotLightShadowsWithMaps),I.push(C.numLightProbes),I.push(C.shadowMapType),I.push(C.toneMapping),I.push(C.numClippingPlanes),I.push(C.numClipIntersection),I.push(C.depthPacking)}function v(I,C){a.disableAll(),C.instancing&&a.enable(0),C.instancingColor&&a.enable(1),C.instancingMorph&&a.enable(2),C.matcap&&a.enable(3),C.envMap&&a.enable(4),C.normalMapObjectSpace&&a.enable(5),C.normalMapTangentSpace&&a.enable(6),C.clearcoat&&a.enable(7),C.iridescence&&a.enable(8),C.alphaTest&&a.enable(9),C.vertexColors&&a.enable(10),C.vertexAlphas&&a.enable(11),C.vertexUv1s&&a.enable(12),C.vertexUv2s&&a.enable(13),C.vertexUv3s&&a.enable(14),C.vertexTangents&&a.enable(15),C.anisotropy&&a.enable(16),C.alphaHash&&a.enable(17),C.batching&&a.enable(18),C.dispersion&&a.enable(19),C.batchingColor&&a.enable(20),C.gradientMap&&a.enable(21),C.packedNormalMap&&a.enable(22),C.vertexNormals&&a.enable(23),I.push(a.mask),a.disableAll(),C.fog&&a.enable(0),C.useFog&&a.enable(1),C.flatShading&&a.enable(2),C.logarithmicDepthBuffer&&a.enable(3),C.reversedDepthBuffer&&a.enable(4),C.skinning&&a.enable(5),C.morphTargets&&a.enable(6),C.morphNormals&&a.enable(7),C.morphColors&&a.enable(8),C.premultipliedAlpha&&a.enable(9),C.shadowMapEnabled&&a.enable(10),C.doubleSided&&a.enable(11),C.flipSided&&a.enable(12),C.useDepthPacking&&a.enable(13),C.dithering&&a.enable(14),C.transmission&&a.enable(15),C.sheen&&a.enable(16),C.opaque&&a.enable(17),C.pointsUvs&&a.enable(18),C.decodeVideoTexture&&a.enable(19),C.decodeVideoTextureEmissive&&a.enable(20),C.alphaToCoverage&&a.enable(21),C.numLightProbeGrids>0&&a.enable(22),I.push(a.mask)}function x(I){let C=u[I.type],y;if(C){let D=Xo[C];y=x1.clone(D.uniforms)}else y=I.uniforms;return y}function T(I,C){let y=f.get(C);return y!==void 0?++y.usedTimes:(y=new yie(n,C,I,r),c.push(y),f.set(C,y)),y}function E(I){if(--I.usedTimes===0){let C=c.indexOf(I);c[C]=c[c.length-1],c.pop(),f.delete(I.cacheKey),I.destroy()}}function S(I){o.remove(I)}function R(){o.dispose()}return{getParameters:p,getProgramCacheKey:_,getUniforms:x,acquireProgram:T,releaseProgram:E,releaseShaderCache:S,programs:c,dispose:R}}function Oie(){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 Nie(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 H1(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 z1(){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:p,renderOrder:d.renderOrder,z:_,group:g},n[e]=v):(v.id=d.id,v.object=d,v.geometry=u,v.material=m,v.materialVariant=a(d),v.groupOrder=p,v.renderOrder=d.renderOrder,v.z=_,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||Nie),i.length>1&&i.sort(u||H1),r.length>1&&r.sort(u||H1)}function h(){for(let d=e,u=n.length;d=s.length?(a=new z1,s.push(a)):a=s[r],a}function t(){n=new WeakMap}return{get:e,dispose:t}}function Fie(){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 se,color:new ft};break;case"SpotLight":t={position:new se,direction:new se,color:new ft,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":t={position:new se,color:new ft,distance:0,decay:0};break;case"HemisphereLight":t={direction:new se,skyColor:new ft,groundColor:new ft};break;case"RectAreaLight":t={color:new ft,position:new se,halfWidth:new se,halfHeight:new se};break}return n[e.id]=t,t}}}function Bie(){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 It};break;case"SpotLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new It};break;case"PointLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new It,shadowCameraNear:1,shadowCameraFar:1e3};break}return n[e.id]=t,t}}}function Vie(n,e){return(e.castShadow?2:0)-(n.castShadow?2:0)+(e.map?1:0)-(n.map?1:0)}function Gie(n){let e=new Fie,t=Bie(),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 se);let r=new se,s=new li,a=new li;function o(c){let f=0,h=0,d=0;for(let C=0;C<9;C++)i.probe[C].set(0,0,0);let u=0,m=0,p=0,_=0,g=0,v=0,x=0,T=0,E=0,S=0,R=0;c.sort(Vie);for(let C=0,y=c.length;C0&&(n.has("OES_texture_float_linear")===!0?(i.rectAreaLTC1=pt.LTC_FLOAT_1,i.rectAreaLTC2=pt.LTC_FLOAT_2):(i.rectAreaLTC1=pt.LTC_HALF_1,i.rectAreaLTC2=pt.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!==p||I.rectAreaLength!==_||I.hemiLength!==g||I.numDirectionalShadows!==v||I.numPointShadows!==x||I.numSpotShadows!==T||I.numSpotMaps!==E||I.numLightProbes!==R)&&(i.directional.length=u,i.spot.length=p,i.rectArea.length=_,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=T,i.spotShadowMap.length=T,i.directionalShadowMatrix.length=v,i.pointShadowMatrix.length=x,i.spotLightMatrix.length=T+E-S,i.spotLightMap.length=E,i.numSpotLightShadowsWithMaps=S,i.numLightProbes=R,I.directionalLength=u,I.pointLength=m,I.spotLength=p,I.rectAreaLength=_,I.hemiLength=g,I.numDirectionalShadows=v,I.numPointShadows=x,I.numSpotShadows=T,I.numSpotMaps=E,I.numLightProbes=R,i.version=Uie++)}function l(c,f){let h=0,d=0,u=0,m=0,p=0,_=f.matrixWorldInverse;for(let g=0,v=c.length;g=a.length?(o=new X1(n),a.push(o)):o=a[s],o}function i(){e=new WeakMap}return{get:t,dispose:i}}function Yie(n,e,t){let i=new Eu,r=new It,s=new It,a=new Ji,o=new PE,l=new LE,c={},f=t.maxTextureSize,h={[Ys]:_n,[_n]:Ys,[pa]:pa},d=new js({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new It},radius:{value:4}},vertexShader:Wie,fragmentShader:Hie}),u=d.clone();u.defines.HORIZONTAL_PASS=1;let m=new Hi;m.setAttribute("position",new hr(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));let p=new ti(m,d),_=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=v_;let g=this.type;this.render=function(S,R,I){if(_.enabled===!1||_.autoUpdate===!1&&_.needsUpdate===!1||S.length===0)return;this.type===HE&&(Ct("WebGLShadowMap: PCFSoftShadowMap has been deprecated. Using PCFShadowMap instead."),this.type=v_);let C=n.getRenderTarget(),y=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(w=>w.needsUpdate=!0):N.material.needsUpdate=!0)});for(let N=0,w=S.length;Nf||r.y>f)&&(r.x>f&&(s.x=Math.floor(f/te.x),r.x=s.x*te.x,W.mapSize.x=s.x),r.y>f&&(s.y=Math.floor(f/te.y),r.y=s.y*te.y,W.mapSize.y=s.y));let $=n.state.buffers.depth.getReversed();if(W.camera._reversedDepth=$,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===bu){if(U.isPointLight){Ct("WebGLShadowMap: VSM shadow maps are not supported for PointLights. Use PCF or BasicShadowMap instead.");continue}W.map=new Ks(r.x,r.y,{format:Jc,type:Ho,minFilter:wr,magFilter:wr,generateMipmaps:!1}),W.map.texture.name=U.name+".shadowMap",W.map.depthTexture=new yl(r.x,r.y,qs),W.map.depthTexture.name=U.name+".shadowMapDepth",W.map.depthTexture.format=No,W.map.depthTexture.compareFunction=null,W.map.depthTexture.minFilter=Nr,W.map.depthTexture.magFilter=Nr}else U.isPointLight?(W.map=new FS(r.x),W.map.depthTexture=new CE(r.x,$a)):(W.map=new Ks(r.x,r.y),W.map.depthTexture=new yl(r.x,r.y,$a)),W.map.depthTexture.name=U.name+".shadowMap",W.map.depthTexture.format=No,this.type===v_?(W.map.depthTexture.compareFunction=$?DS:LS,W.map.depthTexture.minFilter=wr,W.map.depthTexture.magFilter=wr):(W.map.depthTexture.compareFunction=null,W.map.depthTexture.minFilter=Nr,W.map.depthTexture.magFilter=Nr);W.camera.updateProjectionMatrix()}let J=W.map.isWebGLCubeRenderTarget?6:1;for(let z=0;z0||R.map&&R.alphaTest>0||R.alphaToCoverage===!0){let O=y.uuid,V=R.uuid,N=c[O];N===void 0&&(N={},c[O]=N);let w=N[V];w===void 0&&(w=y.clone(),N[V]=w,R.addEventListener("dispose",E)),y=w}if(y.visible=R.visible,y.wireframe=R.wireframe,C===bu?y.side=R.shadowSide!==null?R.shadowSide:R.side:y.side=R.shadowSide!==null?R.shadowSide:h[R.side],y.alphaMap=R.alphaMap,y.alphaTest=R.alphaToCoverage===!0?.5:R.alphaTest,y.map=R.map,y.clipShadows=R.clipShadows,y.clippingPlanes=R.clippingPlanes,y.clipIntersection=R.clipIntersection,y.displacementMap=R.displacementMap,y.displacementScale=R.displacementScale,y.displacementBias=R.displacementBias,y.wireframeLinewidth=R.wireframeLinewidth,y.linewidth=R.linewidth,I.isPointLight===!0&&y.isMeshDistanceMaterial===!0){let O=n.properties.get(y);O.light=I}return y}function T(S,R,I,C,y){if(S.visible===!1)return;if(S.layers.test(R.layers)&&(S.isMesh||S.isLine||S.isPoints)&&(S.castShadow||S.receiveShadow&&y===bu)&&(!S.frustumCulled||i.intersectsObject(S))){S.modelViewMatrix.multiplyMatrices(I.matrixWorldInverse,S.matrixWorld);let V=e.update(S),N=S.material;if(Array.isArray(N)){let w=V.groups;for(let U=0,W=w.length;U=1):$.indexOf("OpenGL ES")!==-1&&(te=parseFloat(/^OpenGL ES (\d)/.exec($)[1]),W=te>=2);let J=null,z={},Y=n.getParameter(n.SCISSOR_BOX),me=n.getParameter(n.VIEWPORT),xe=new Ji().fromArray(Y),Be=new Ji().fromArray(me);function ae(K,Pe,Ae,Ye){let Ke=new Uint8Array(4),we=n.createTexture();n.bindTexture(K,we),n.texParameteri(K,n.TEXTURE_MIN_FILTER,n.NEAREST),n.texParameteri(K,n.TEXTURE_MAG_FILTER,n.NEAREST);for(let At=0;Athe||Ve.height>he)&&(Le=he/Math.max(Ve.width,Ve.height)),Le<1)if(typeof HTMLImageElement!="undefined"&&X instanceof HTMLImageElement||typeof HTMLCanvasElement!="undefined"&&X instanceof HTMLCanvasElement||typeof ImageBitmap!="undefined"&&X instanceof ImageBitmap||typeof VideoFrame!="undefined"&&X instanceof VideoFrame){let Je=Math.floor(Le*Ve.width),rt=Math.floor(Le*Ve.height);d===void 0&&(d=p(Je,rt));let ye=B?p(Je,rt):d;return ye.width=Je,ye.height=rt,ye.getContext("2d").drawImage(X,0,0,Je,rt),Ct("WebGLRenderer: Texture has been resized from ("+Ve.width+"x"+Ve.height+") to ("+Je+"x"+rt+")."),ye}else return"data"in X&&Ct("WebGLRenderer: Image in DataTexture is too big ("+Ve.width+"x"+Ve.height+")."),X;return X}function g(X){return X.generateMipmaps}function v(X){n.generateMipmap(X)}function x(X){return X.isWebGLCubeRenderTarget?n.TEXTURE_CUBE_MAP:X.isWebGL3DRenderTarget?n.TEXTURE_3D:X.isWebGLArrayRenderTarget||X.isCompressedArrayTexture?n.TEXTURE_2D_ARRAY:n.TEXTURE_2D}function T(X,B,he,Le,Ve,Je=!1){if(X!==null){if(n[X]!==void 0)return n[X];Ct("WebGLRenderer: Attempt to use non-existing WebGL internal format '"+X+"'")}let rt;Le&&(rt=e.get("EXT_texture_norm16"),rt||Ct("WebGLRenderer: Unable to use normalized textures without EXT_texture_norm16 extension"));let ye=B;if(B===n.RED&&(he===n.FLOAT&&(ye=n.R32F),he===n.HALF_FLOAT&&(ye=n.R16F),he===n.UNSIGNED_BYTE&&(ye=n.R8),he===n.UNSIGNED_SHORT&&rt&&(ye=rt.R16_EXT),he===n.SHORT&&rt&&(ye=rt.R16_SNORM_EXT)),B===n.RED_INTEGER&&(he===n.UNSIGNED_BYTE&&(ye=n.R8UI),he===n.UNSIGNED_SHORT&&(ye=n.R16UI),he===n.UNSIGNED_INT&&(ye=n.R32UI),he===n.BYTE&&(ye=n.R8I),he===n.SHORT&&(ye=n.R16I),he===n.INT&&(ye=n.R32I)),B===n.RG&&(he===n.FLOAT&&(ye=n.RG32F),he===n.HALF_FLOAT&&(ye=n.RG16F),he===n.UNSIGNED_BYTE&&(ye=n.RG8),he===n.UNSIGNED_SHORT&&rt&&(ye=rt.RG16_EXT),he===n.SHORT&&rt&&(ye=rt.RG16_SNORM_EXT)),B===n.RG_INTEGER&&(he===n.UNSIGNED_BYTE&&(ye=n.RG8UI),he===n.UNSIGNED_SHORT&&(ye=n.RG16UI),he===n.UNSIGNED_INT&&(ye=n.RG32UI),he===n.BYTE&&(ye=n.RG8I),he===n.SHORT&&(ye=n.RG16I),he===n.INT&&(ye=n.RG32I)),B===n.RGB_INTEGER&&(he===n.UNSIGNED_BYTE&&(ye=n.RGB8UI),he===n.UNSIGNED_SHORT&&(ye=n.RGB16UI),he===n.UNSIGNED_INT&&(ye=n.RGB32UI),he===n.BYTE&&(ye=n.RGB8I),he===n.SHORT&&(ye=n.RGB16I),he===n.INT&&(ye=n.RGB32I)),B===n.RGBA_INTEGER&&(he===n.UNSIGNED_BYTE&&(ye=n.RGBA8UI),he===n.UNSIGNED_SHORT&&(ye=n.RGBA16UI),he===n.UNSIGNED_INT&&(ye=n.RGBA32UI),he===n.BYTE&&(ye=n.RGBA8I),he===n.SHORT&&(ye=n.RGBA16I),he===n.INT&&(ye=n.RGBA32I)),B===n.RGB&&(he===n.UNSIGNED_SHORT&&rt&&(ye=rt.RGB16_EXT),he===n.SHORT&&rt&&(ye=rt.RGB16_SNORM_EXT),he===n.UNSIGNED_INT_5_9_9_9_REV&&(ye=n.RGB9_E5),he===n.UNSIGNED_INT_10F_11F_11F_REV&&(ye=n.R11F_G11F_B10F)),B===n.RGBA){let Ie=Je?Zp:oi.getTransfer(Ve);he===n.FLOAT&&(ye=n.RGBA32F),he===n.HALF_FLOAT&&(ye=n.RGBA16F),he===n.UNSIGNED_BYTE&&(ye=Ie===Yi?n.SRGB8_ALPHA8:n.RGBA8),he===n.UNSIGNED_SHORT&&rt&&(ye=rt.RGBA16_EXT),he===n.SHORT&&rt&&(ye=rt.RGBA16_SNORM_EXT),he===n.UNSIGNED_SHORT_4_4_4_4&&(ye=n.RGBA4),he===n.UNSIGNED_SHORT_5_5_5_1&&(ye=n.RGB5_A1)}return(ye===n.R16F||ye===n.R32F||ye===n.RG16F||ye===n.RG32F||ye===n.RGBA16F||ye===n.RGBA32F)&&e.get("EXT_color_buffer_float"),ye}function E(X,B){let he;return X?B===null||B===$a||B===Cu?he=n.DEPTH24_STENCIL8:B===qs?he=n.DEPTH32F_STENCIL8:B===Mu&&(he=n.DEPTH24_STENCIL8,Ct("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):B===null||B===$a||B===Cu?he=n.DEPTH_COMPONENT24:B===qs?he=n.DEPTH_COMPONENT32F:B===Mu&&(he=n.DEPTH_COMPONENT16),he}function S(X,B){return g(X)===!0||X.isFramebufferTexture&&X.minFilter!==Nr&&X.minFilter!==wr?Math.log2(Math.max(B.width,B.height))+1:X.mipmaps!==void 0&&X.mipmaps.length>0?X.mipmaps.length:X.isCompressedTexture&&Array.isArray(X.image)?B.mipmaps.length:1}function R(X){let B=X.target;B.removeEventListener("dispose",R),C(B),B.isVideoTexture&&f.delete(B),B.isHTMLTexture&&h.delete(B)}function I(X){let B=X.target;B.removeEventListener("dispose",I),D(B)}function C(X){let B=i.get(X);if(B.__webglInit===void 0)return;let he=X.source,Le=u.get(he);if(Le){let Ve=Le[B.__cacheKey];Ve.usedTimes--,Ve.usedTimes===0&&y(X),Object.keys(Le).length===0&&u.delete(he)}i.remove(X)}function y(X){let B=i.get(X);n.deleteTexture(B.__webglTexture);let he=X.source,Le=u.get(he);delete Le[B.__cacheKey],a.memory.textures--}function D(X){let B=i.get(X);if(X.depthTexture&&(X.depthTexture.dispose(),i.remove(X.depthTexture)),X.isWebGLCubeRenderTarget)for(let Le=0;Le<6;Le++){if(Array.isArray(B.__webglFramebuffer[Le]))for(let Ve=0;Ve=r.maxTextures&&Ct("WebGLTextures: Trying to use "+X+" texture units while this GPU supports only "+r.maxTextures),O+=1,X}function W(X){let B=[];return B.push(X.wrapS),B.push(X.wrapT),B.push(X.wrapR||0),B.push(X.magFilter),B.push(X.minFilter),B.push(X.anisotropy),B.push(X.internalFormat),B.push(X.format),B.push(X.type),B.push(X.generateMipmaps),B.push(X.premultiplyAlpha),B.push(X.flipY),B.push(X.unpackAlignment),B.push(X.colorSpace),B.join()}function te(X,B){let he=i.get(X);if(X.isVideoTexture&&Fi(X),X.isRenderTargetTexture===!1&&X.isExternalTexture!==!0&&X.version>0&&he.__version!==X.version){let Le=X.image;if(Le===null)Ct("WebGLRenderer: Texture marked for update but no image data found.");else if(Le.complete===!1)Ct("WebGLRenderer: Texture marked for update but image is incomplete");else{ue(he,X,B);return}}else X.isExternalTexture&&(he.__webglTexture=X.sourceTexture?X.sourceTexture:null);t.bindTexture(n.TEXTURE_2D,he.__webglTexture,n.TEXTURE0+B)}function $(X,B){let he=i.get(X);if(X.isRenderTargetTexture===!1&&X.version>0&&he.__version!==X.version){ue(he,X,B);return}else X.isExternalTexture&&(he.__webglTexture=X.sourceTexture?X.sourceTexture:null);t.bindTexture(n.TEXTURE_2D_ARRAY,he.__webglTexture,n.TEXTURE0+B)}function J(X,B){let he=i.get(X);if(X.isRenderTargetTexture===!1&&X.version>0&&he.__version!==X.version){ue(he,X,B);return}t.bindTexture(n.TEXTURE_3D,he.__webglTexture,n.TEXTURE0+B)}function z(X,B){let he=i.get(X);if(X.isCubeDepthTexture!==!0&&X.version>0&&he.__version!==X.version){De(he,X,B);return}t.bindTexture(n.TEXTURE_CUBE_MAP,he.__webglTexture,n.TEXTURE0+B)}let Y={[Oo]:n.REPEAT,[ua]:n.CLAMP_TO_EDGE,[cu]:n.MIRRORED_REPEAT},me={[Nr]:n.NEAREST,[YE]:n.NEAREST_MIPMAP_NEAREST,[Ah]:n.NEAREST_MIPMAP_LINEAR,[wr]:n.LINEAR,[Iu]:n.LINEAR_MIPMAP_NEAREST,[Qa]:n.LINEAR_MIPMAP_LINEAR},xe={[h1]:n.NEVER,[_1]:n.ALWAYS,[d1]:n.LESS,[LS]:n.LEQUAL,[u1]:n.EQUAL,[DS]:n.GEQUAL,[m1]:n.GREATER,[p1]:n.NOTEQUAL};function Be(X,B){if(B.type===qs&&e.has("OES_texture_float_linear")===!1&&(B.magFilter===wr||B.magFilter===Iu||B.magFilter===Ah||B.magFilter===Qa||B.minFilter===wr||B.minFilter===Iu||B.minFilter===Ah||B.minFilter===Qa)&&Ct("WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),n.texParameteri(X,n.TEXTURE_WRAP_S,Y[B.wrapS]),n.texParameteri(X,n.TEXTURE_WRAP_T,Y[B.wrapT]),(X===n.TEXTURE_3D||X===n.TEXTURE_2D_ARRAY)&&n.texParameteri(X,n.TEXTURE_WRAP_R,Y[B.wrapR]),n.texParameteri(X,n.TEXTURE_MAG_FILTER,me[B.magFilter]),n.texParameteri(X,n.TEXTURE_MIN_FILTER,me[B.minFilter]),B.compareFunction&&(n.texParameteri(X,n.TEXTURE_COMPARE_MODE,n.COMPARE_REF_TO_TEXTURE),n.texParameteri(X,n.TEXTURE_COMPARE_FUNC,xe[B.compareFunction])),e.has("EXT_texture_filter_anisotropic")===!0){if(B.magFilter===Nr||B.minFilter!==Ah&&B.minFilter!==Qa||B.type===qs&&e.has("OES_texture_float_linear")===!1)return;if(B.anisotropy>1||i.get(B).__currentAnisotropy){let he=e.get("EXT_texture_filter_anisotropic");n.texParameterf(X,he.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(B.anisotropy,r.getMaxAnisotropy())),i.get(B).__currentAnisotropy=B.anisotropy}}}function ae(X,B){let he=!1;X.__webglInit===void 0&&(X.__webglInit=!0,B.addEventListener("dispose",R));let Le=B.source,Ve=u.get(Le);Ve===void 0&&(Ve={},u.set(Le,Ve));let Je=W(B);if(Je!==X.__cacheKey){Ve[Je]===void 0&&(Ve[Je]={texture:n.createTexture(),usedTimes:0},a.memory.textures++,he=!0),Ve[Je].usedTimes++;let rt=Ve[X.__cacheKey];rt!==void 0&&(Ve[X.__cacheKey].usedTimes--,rt.usedTimes===0&&y(B)),X.__cacheKey=Je,X.__webglTexture=Ve[Je].texture}return he}function ve(X,B,he){return Math.floor(Math.floor(X/he)/B)}function ne(X,B,he,Le){let Je=X.updateRanges;if(Je.length===0)t.texSubImage2D(n.TEXTURE_2D,0,0,0,B.width,B.height,he,Le,B.data);else{Je.sort((St,nt)=>St.start-nt.start);let rt=0;for(let St=1;St0){qt&&re&&t.texStorage2D(n.TEXTURE_2D,Pe,nt,Wt[0].width,Wt[0].height);for(let Ae=0,Ye=Wt.length;Ae0){let Ke=vI(Qe.width,Qe.height,B.format,B.type);for(let we of B.layerUpdates){let At=Qe.data.subarray(we*Ke/Qe.data.BYTES_PER_ELEMENT,(we+1)*Ke/Qe.data.BYTES_PER_ELEMENT);t.compressedTexSubImage3D(n.TEXTURE_2D_ARRAY,Ae,0,0,we,Qe.width,Qe.height,1,ct,At)}B.clearLayerUpdates()}else t.compressedTexSubImage3D(n.TEXTURE_2D_ARRAY,Ae,0,0,0,Qe.width,Qe.height,Ie.depth,ct,Qe.data)}else t.compressedTexImage3D(n.TEXTURE_2D_ARRAY,Ae,nt,Qe.width,Qe.height,Ie.depth,0,Qe.data,0,0);else Ct("WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else qt?K&&t.texSubImage3D(n.TEXTURE_2D_ARRAY,Ae,0,0,0,Qe.width,Qe.height,Ie.depth,ct,St,Qe.data):t.texImage3D(n.TEXTURE_2D_ARRAY,Ae,nt,Qe.width,Qe.height,Ie.depth,0,ct,St,Qe.data)}else{qt&&re&&t.texStorage2D(n.TEXTURE_2D,Pe,nt,Wt[0].width,Wt[0].height);for(let Ae=0,Ye=Wt.length;Ae0){let Ae=vI(Ie.width,Ie.height,B.format,B.type);for(let Ye of B.layerUpdates){let Ke=Ie.data.subarray(Ye*Ae/Ie.data.BYTES_PER_ELEMENT,(Ye+1)*Ae/Ie.data.BYTES_PER_ELEMENT);t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,Ye,Ie.width,Ie.height,1,ct,St,Ke)}B.clearLayerUpdates()}else t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,0,Ie.width,Ie.height,Ie.depth,ct,St,Ie.data)}else t.texImage3D(n.TEXTURE_2D_ARRAY,0,nt,Ie.width,Ie.height,Ie.depth,0,ct,St,Ie.data);else if(B.isData3DTexture)qt?(re&&t.texStorage3D(n.TEXTURE_3D,Pe,nt,Ie.width,Ie.height,Ie.depth),K&&t.texSubImage3D(n.TEXTURE_3D,0,0,0,0,Ie.width,Ie.height,Ie.depth,ct,St,Ie.data)):t.texImage3D(n.TEXTURE_3D,0,nt,Ie.width,Ie.height,Ie.depth,0,ct,St,Ie.data);else if(B.isFramebufferTexture){if(re)if(qt)t.texStorage2D(n.TEXTURE_2D,Pe,nt,Ie.width,Ie.height);else{let Ae=Ie.width,Ye=Ie.height;for(let Ke=0;Ke>=1,Ye>>=1}}else if(B.isHTMLTexture){if("texElementImage2D"in n){let Ae=n.canvas;if(Ae.hasAttribute("layoutsubtree")||Ae.setAttribute("layoutsubtree","true"),Ie.parentNode!==Ae){Ae.appendChild(Ie),h.add(B),Ae.onpaint=Zt=>{let tr=Zt.changedElements;for(let vi of h)tr.includes(vi.image)&&(vi.needsUpdate=!0)},Ae.requestPaint();return}let Ye=0,Ke=n.RGBA,we=n.RGBA,At=n.UNSIGNED_BYTE;n.texElementImage2D(n.TEXTURE_2D,Ye,Ke,we,At,Ie),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(Wt.length>0){if(qt&&re){let Ae=Li(Wt[0]);t.texStorage2D(n.TEXTURE_2D,Pe,nt,Ae.width,Ae.height)}for(let Ae=0,Ye=Wt.length;Ae0&&Ye++;let we=Li(nt[0]);t.texStorage2D(n.TEXTURE_CUBE_MAP,Ye,re,we.width,we.height)}for(let we=0;we<6;we++)if(St){K?Ae&&t.texSubImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+we,0,0,0,nt[we].width,nt[we].height,Wt,qt,nt[we].data):t.texImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+we,0,re,nt[we].width,nt[we].height,0,Wt,qt,nt[we].data);for(let At=0;At>Je),Qe=Math.max(1,B.height>>Je);Ve===n.TEXTURE_3D||Ve===n.TEXTURE_2D_ARRAY?t.texImage3D(Ve,Je,Ie,nt,Qe,B.depth,0,rt,ye,null):t.texImage2D(Ve,Je,Ie,nt,Qe,0,rt,ye,null)}t.bindFramebuffer(n.FRAMEBUFFER,X),ii(B)?o.framebufferTexture2DMultisampleEXT(n.FRAMEBUFFER,Le,Ve,St.__webglTexture,0,Vi(B)):(Ve===n.TEXTURE_2D||Ve>=n.TEXTURE_CUBE_MAP_POSITIVE_X&&Ve<=n.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&n.framebufferTexture2D(n.FRAMEBUFFER,Le,Ve,St.__webglTexture,Je),t.bindFramebuffer(n.FRAMEBUFFER,null)}function be(X,B,he){if(n.bindRenderbuffer(n.RENDERBUFFER,X),B.depthBuffer){let Le=B.depthTexture,Ve=Le&&Le.isDepthTexture?Le.type:null,Je=E(B.stencilBuffer,Ve),rt=B.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT;ii(B)?o.renderbufferStorageMultisampleEXT(n.RENDERBUFFER,Vi(B),Je,B.width,B.height):he?n.renderbufferStorageMultisample(n.RENDERBUFFER,Vi(B),Je,B.width,B.height):n.renderbufferStorage(n.RENDERBUFFER,Je,B.width,B.height),n.framebufferRenderbuffer(n.FRAMEBUFFER,rt,n.RENDERBUFFER,X)}else{let Le=B.textures;for(let Ve=0;Ve{delete B.__boundDepthTexture,delete B.__depthDisposeCallback,Le.removeEventListener("dispose",Ve)};Le.addEventListener("dispose",Ve),B.__depthDisposeCallback=Ve}B.__boundDepthTexture=Le}if(X.depthTexture&&!B.__autoAllocateDepthBuffer)if(he)for(let Le=0;Le<6;Le++)je(B.__webglFramebuffer[Le],X,Le);else{let Le=X.texture.mipmaps;Le&&Le.length>0?je(B.__webglFramebuffer[0],X,0):je(B.__webglFramebuffer,X,0)}else if(he){B.__webglDepthbuffer=[];for(let Le=0;Le<6;Le++)if(t.bindFramebuffer(n.FRAMEBUFFER,B.__webglFramebuffer[Le]),B.__webglDepthbuffer[Le]===void 0)B.__webglDepthbuffer[Le]=n.createRenderbuffer(),be(B.__webglDepthbuffer[Le],X,!1);else{let Ve=X.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,Je=B.__webglDepthbuffer[Le];n.bindRenderbuffer(n.RENDERBUFFER,Je),n.framebufferRenderbuffer(n.FRAMEBUFFER,Ve,n.RENDERBUFFER,Je)}}else{let Le=X.texture.mipmaps;if(Le&&Le.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,X,!1);else{let Ve=X.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,Je=B.__webglDepthbuffer;n.bindRenderbuffer(n.RENDERBUFFER,Je),n.framebufferRenderbuffer(n.FRAMEBUFFER,Ve,n.RENDERBUFFER,Je)}}t.bindFramebuffer(n.FRAMEBUFFER,null)}function Xe(X,B,he){let Le=i.get(X);B!==void 0&&de(Le.__webglFramebuffer,X,X.texture,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,0),he!==void 0&&Tt(X)}function qe(X){let B=X.texture,he=i.get(X),Le=i.get(B);X.addEventListener("dispose",I);let Ve=X.textures,Je=X.isWebGLCubeRenderTarget===!0,rt=Ve.length>1;if(rt||(Le.__webglTexture===void 0&&(Le.__webglTexture=n.createTexture()),Le.__version=B.version,a.memory.textures++),Je){he.__webglFramebuffer=[];for(let ye=0;ye<6;ye++)if(B.mipmaps&&B.mipmaps.length>0){he.__webglFramebuffer[ye]=[];for(let Ie=0;Ie0){he.__webglFramebuffer=[];for(let ye=0;ye0&&ii(X)===!1){he.__webglMultisampledFramebuffer=n.createFramebuffer(),he.__webglColorRenderbuffer=[],t.bindFramebuffer(n.FRAMEBUFFER,he.__webglMultisampledFramebuffer);for(let ye=0;ye0)for(let Ie=0;Ie0)for(let Ie=0;Ie0){if(ii(X)===!1){let B=X.textures,he=X.width,Le=X.height,Ve=n.COLOR_BUFFER_BIT,Je=X.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,rt=i.get(X),ye=B.length>1;if(ye)for(let ct=0;ct0?t.bindFramebuffer(n.DRAW_FRAMEBUFFER,rt.__webglFramebuffer[0]):t.bindFramebuffer(n.DRAW_FRAMEBUFFER,rt.__webglFramebuffer);for(let ct=0;ct0&&e.has("WEBGL_multisampled_render_to_texture")===!0&&B.__useRenderToTexture!==!1}function Fi(X){let B=a.render.frame;f.get(X)!==B&&(f.set(X,B),X.update())}function ot(X,B){let he=X.colorSpace,Le=X.format,Ve=X.type;return X.isCompressedTexture===!0||X.isVideoTexture===!0||he!==jn&&he!==Nl&&(oi.getTransfer(he)===Yi?(Le!==Zs||Ve!==Ss)&&Ct("WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):Bt("WebGLTextures: Unsupported texture color space:",he)),B}function Li(X){return typeof HTMLImageElement!="undefined"&&X instanceof HTMLImageElement?(c.width=X.naturalWidth||X.width,c.height=X.naturalHeight||X.height):typeof VideoFrame!="undefined"&&X instanceof VideoFrame?(c.width=X.displayWidth,c.height=X.displayHeight):(c.width=X.width,c.height=X.height),c}this.allocateTextureUnit=U,this.resetTextureUnits=V,this.getTextureUnits=N,this.setTextureUnits=w,this.setTexture2D=te,this.setTexture2DArray=$,this.setTexture3D=J,this.setTextureCube=z,this.rebindTextures=Xe,this.setupRenderTarget=qe,this.updateRenderTargetMipmap=$t,this.updateMultisampleRenderTarget=oe,this.setupDepthRenderbuffer=Tt,this.setupFrameBufferTexture=de,this.useMultisampledRTT=ii,this.isReversedDepthBuffer=function(){return t.buffers.depth.getReversed()}}function qie(n,e){function t(i,r=Nl){let s,a=oi.getTransfer(r);if(i===Ss)return n.UNSIGNED_BYTE;if(i===jE)return n.UNSIGNED_SHORT_4_4_4_4;if(i===qE)return n.UNSIGNED_SHORT_5_5_5_1;if(i===lI)return n.UNSIGNED_INT_5_9_9_9_REV;if(i===cI)return n.UNSIGNED_INT_10F_11F_11F_REV;if(i===aI)return n.BYTE;if(i===oI)return n.SHORT;if(i===Mu)return n.UNSIGNED_SHORT;if(i===KE)return n.INT;if(i===$a)return n.UNSIGNED_INT;if(i===qs)return n.FLOAT;if(i===Ho)return n.HALF_FLOAT;if(i===fI)return n.ALPHA;if(i===hI)return n.RGB;if(i===Zs)return n.RGBA;if(i===No)return n.DEPTH_COMPONENT;if(i===$c)return n.DEPTH_STENCIL;if(i===ZE)return n.RED;if(i===QE)return n.RED_INTEGER;if(i===Jc)return n.RG;if(i===$E)return n.RG_INTEGER;if(i===JE)return n.RGBA_INTEGER;if(i===T_||i===A_||i===x_||i===R_)if(a===Yi)if(s=e.get("WEBGL_compressed_texture_s3tc_srgb"),s!==null){if(i===T_)return s.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(i===A_)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(i===x_)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(i===R_)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(s=e.get("WEBGL_compressed_texture_s3tc"),s!==null){if(i===T_)return s.COMPRESSED_RGB_S3TC_DXT1_EXT;if(i===A_)return s.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(i===x_)return s.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(i===R_)return s.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(i===eS||i===tS||i===iS||i===rS)if(s=e.get("WEBGL_compressed_texture_pvrtc"),s!==null){if(i===eS)return s.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(i===tS)return s.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(i===iS)return s.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(i===rS)return s.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(i===nS||i===sS||i===aS||i===oS||i===lS||i===b_||i===cS)if(s=e.get("WEBGL_compressed_texture_etc"),s!==null){if(i===nS||i===sS)return a===Yi?s.COMPRESSED_SRGB8_ETC2:s.COMPRESSED_RGB8_ETC2;if(i===aS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:s.COMPRESSED_RGBA8_ETC2_EAC;if(i===oS)return s.COMPRESSED_R11_EAC;if(i===lS)return s.COMPRESSED_SIGNED_R11_EAC;if(i===b_)return s.COMPRESSED_RG11_EAC;if(i===cS)return s.COMPRESSED_SIGNED_RG11_EAC}else return null;if(i===fS||i===hS||i===dS||i===uS||i===mS||i===pS||i===_S||i===gS||i===vS||i===ES||i===SS||i===TS||i===AS||i===xS)if(s=e.get("WEBGL_compressed_texture_astc"),s!==null){if(i===fS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:s.COMPRESSED_RGBA_ASTC_4x4_KHR;if(i===hS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:s.COMPRESSED_RGBA_ASTC_5x4_KHR;if(i===dS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:s.COMPRESSED_RGBA_ASTC_5x5_KHR;if(i===uS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:s.COMPRESSED_RGBA_ASTC_6x5_KHR;if(i===mS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:s.COMPRESSED_RGBA_ASTC_6x6_KHR;if(i===pS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:s.COMPRESSED_RGBA_ASTC_8x5_KHR;if(i===_S)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:s.COMPRESSED_RGBA_ASTC_8x6_KHR;if(i===gS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:s.COMPRESSED_RGBA_ASTC_8x8_KHR;if(i===vS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:s.COMPRESSED_RGBA_ASTC_10x5_KHR;if(i===ES)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:s.COMPRESSED_RGBA_ASTC_10x6_KHR;if(i===SS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:s.COMPRESSED_RGBA_ASTC_10x8_KHR;if(i===TS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:s.COMPRESSED_RGBA_ASTC_10x10_KHR;if(i===AS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:s.COMPRESSED_RGBA_ASTC_12x10_KHR;if(i===xS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:s.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(i===RS||i===bS||i===IS)if(s=e.get("EXT_texture_compression_bptc"),s!==null){if(i===RS)return a===Yi?s.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:s.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(i===bS)return s.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(i===IS)return s.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(i===MS||i===CS||i===I_||i===yS)if(s=e.get("EXT_texture_compression_rgtc"),s!==null){if(i===MS)return s.COMPRESSED_RED_RGTC1_EXT;if(i===CS)return s.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(i===I_)return s.COMPRESSED_RED_GREEN_RGTC2_EXT;if(i===yS)return s.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return i===Cu?n.UNSIGNED_INT_24_8:n[i]!==void 0?n[i]:null}return{convert:t}}function Jie(n,e){function t(_,g){_.matrixAutoUpdate===!0&&_.updateMatrix(),g.value.copy(_.matrix)}function i(_,g){g.color.getRGB(_.fogColor.value,pI(n)),g.isFog?(_.fogNear.value=g.near,_.fogFar.value=g.far):g.isFogExp2&&(_.fogDensity.value=g.density)}function r(_,g,v,x,T){g.isNodeMaterial?g.uniformsNeedUpdate=!1:g.isMeshBasicMaterial?s(_,g):g.isMeshLambertMaterial?(s(_,g),g.envMap&&(_.envMapIntensity.value=g.envMapIntensity)):g.isMeshToonMaterial?(s(_,g),h(_,g)):g.isMeshPhongMaterial?(s(_,g),f(_,g),g.envMap&&(_.envMapIntensity.value=g.envMapIntensity)):g.isMeshStandardMaterial?(s(_,g),d(_,g),g.isMeshPhysicalMaterial&&u(_,g,T)):g.isMeshMatcapMaterial?(s(_,g),m(_,g)):g.isMeshDepthMaterial?s(_,g):g.isMeshDistanceMaterial?(s(_,g),p(_,g)):g.isMeshNormalMaterial?s(_,g):g.isLineBasicMaterial?(a(_,g),g.isLineDashedMaterial&&o(_,g)):g.isPointsMaterial?l(_,g,v,x):g.isSpriteMaterial?c(_,g):g.isShadowMaterial?(_.color.value.copy(g.color),_.opacity.value=g.opacity):g.isShaderMaterial&&(g.uniformsNeedUpdate=!1)}function s(_,g){_.opacity.value=g.opacity,g.color&&_.diffuse.value.copy(g.color),g.emissive&&_.emissive.value.copy(g.emissive).multiplyScalar(g.emissiveIntensity),g.map&&(_.map.value=g.map,t(g.map,_.mapTransform)),g.alphaMap&&(_.alphaMap.value=g.alphaMap,t(g.alphaMap,_.alphaMapTransform)),g.bumpMap&&(_.bumpMap.value=g.bumpMap,t(g.bumpMap,_.bumpMapTransform),_.bumpScale.value=g.bumpScale,g.side===_n&&(_.bumpScale.value*=-1)),g.normalMap&&(_.normalMap.value=g.normalMap,t(g.normalMap,_.normalMapTransform),_.normalScale.value.copy(g.normalScale),g.side===_n&&_.normalScale.value.negate()),g.displacementMap&&(_.displacementMap.value=g.displacementMap,t(g.displacementMap,_.displacementMapTransform),_.displacementScale.value=g.displacementScale,_.displacementBias.value=g.displacementBias),g.emissiveMap&&(_.emissiveMap.value=g.emissiveMap,t(g.emissiveMap,_.emissiveMapTransform)),g.specularMap&&(_.specularMap.value=g.specularMap,t(g.specularMap,_.specularMapTransform)),g.alphaTest>0&&(_.alphaTest.value=g.alphaTest);let v=e.get(g),x=v.envMap,T=v.envMapRotation;x&&(_.envMap.value=x,_.envMapRotation.value.setFromMatrix4($ie.makeRotationFromEuler(T)).transpose(),x.isCubeTexture&&x.isRenderTargetTexture===!1&&_.envMapRotation.value.premultiply(J1),_.reflectivity.value=g.reflectivity,_.ior.value=g.ior,_.refractionRatio.value=g.refractionRatio),g.lightMap&&(_.lightMap.value=g.lightMap,_.lightMapIntensity.value=g.lightMapIntensity,t(g.lightMap,_.lightMapTransform)),g.aoMap&&(_.aoMap.value=g.aoMap,_.aoMapIntensity.value=g.aoMapIntensity,t(g.aoMap,_.aoMapTransform))}function a(_,g){_.diffuse.value.copy(g.color),_.opacity.value=g.opacity,g.map&&(_.map.value=g.map,t(g.map,_.mapTransform))}function o(_,g){_.dashSize.value=g.dashSize,_.totalSize.value=g.dashSize+g.gapSize,_.scale.value=g.scale}function l(_,g,v,x){_.diffuse.value.copy(g.color),_.opacity.value=g.opacity,_.size.value=g.size*v,_.scale.value=x*.5,g.map&&(_.map.value=g.map,t(g.map,_.uvTransform)),g.alphaMap&&(_.alphaMap.value=g.alphaMap,t(g.alphaMap,_.alphaMapTransform)),g.alphaTest>0&&(_.alphaTest.value=g.alphaTest)}function c(_,g){_.diffuse.value.copy(g.color),_.opacity.value=g.opacity,_.rotation.value=g.rotation,g.map&&(_.map.value=g.map,t(g.map,_.mapTransform)),g.alphaMap&&(_.alphaMap.value=g.alphaMap,t(g.alphaMap,_.alphaMapTransform)),g.alphaTest>0&&(_.alphaTest.value=g.alphaTest)}function f(_,g){_.specular.value.copy(g.specular),_.shininess.value=Math.max(g.shininess,1e-4)}function h(_,g){g.gradientMap&&(_.gradientMap.value=g.gradientMap)}function d(_,g){_.metalness.value=g.metalness,g.metalnessMap&&(_.metalnessMap.value=g.metalnessMap,t(g.metalnessMap,_.metalnessMapTransform)),_.roughness.value=g.roughness,g.roughnessMap&&(_.roughnessMap.value=g.roughnessMap,t(g.roughnessMap,_.roughnessMapTransform)),g.envMap&&(_.envMapIntensity.value=g.envMapIntensity)}function u(_,g,v){_.ior.value=g.ior,g.sheen>0&&(_.sheenColor.value.copy(g.sheenColor).multiplyScalar(g.sheen),_.sheenRoughness.value=g.sheenRoughness,g.sheenColorMap&&(_.sheenColorMap.value=g.sheenColorMap,t(g.sheenColorMap,_.sheenColorMapTransform)),g.sheenRoughnessMap&&(_.sheenRoughnessMap.value=g.sheenRoughnessMap,t(g.sheenRoughnessMap,_.sheenRoughnessMapTransform))),g.clearcoat>0&&(_.clearcoat.value=g.clearcoat,_.clearcoatRoughness.value=g.clearcoatRoughness,g.clearcoatMap&&(_.clearcoatMap.value=g.clearcoatMap,t(g.clearcoatMap,_.clearcoatMapTransform)),g.clearcoatRoughnessMap&&(_.clearcoatRoughnessMap.value=g.clearcoatRoughnessMap,t(g.clearcoatRoughnessMap,_.clearcoatRoughnessMapTransform)),g.clearcoatNormalMap&&(_.clearcoatNormalMap.value=g.clearcoatNormalMap,t(g.clearcoatNormalMap,_.clearcoatNormalMapTransform),_.clearcoatNormalScale.value.copy(g.clearcoatNormalScale),g.side===_n&&_.clearcoatNormalScale.value.negate())),g.dispersion>0&&(_.dispersion.value=g.dispersion),g.iridescence>0&&(_.iridescence.value=g.iridescence,_.iridescenceIOR.value=g.iridescenceIOR,_.iridescenceThicknessMinimum.value=g.iridescenceThicknessRange[0],_.iridescenceThicknessMaximum.value=g.iridescenceThicknessRange[1],g.iridescenceMap&&(_.iridescenceMap.value=g.iridescenceMap,t(g.iridescenceMap,_.iridescenceMapTransform)),g.iridescenceThicknessMap&&(_.iridescenceThicknessMap.value=g.iridescenceThicknessMap,t(g.iridescenceThicknessMap,_.iridescenceThicknessMapTransform))),g.transmission>0&&(_.transmission.value=g.transmission,_.transmissionSamplerMap.value=v.texture,_.transmissionSamplerSize.value.set(v.width,v.height),g.transmissionMap&&(_.transmissionMap.value=g.transmissionMap,t(g.transmissionMap,_.transmissionMapTransform)),_.thickness.value=g.thickness,g.thicknessMap&&(_.thicknessMap.value=g.thicknessMap,t(g.thicknessMap,_.thicknessMapTransform)),_.attenuationDistance.value=g.attenuationDistance,_.attenuationColor.value.copy(g.attenuationColor)),g.anisotropy>0&&(_.anisotropyVector.value.set(g.anisotropy*Math.cos(g.anisotropyRotation),g.anisotropy*Math.sin(g.anisotropyRotation)),g.anisotropyMap&&(_.anisotropyMap.value=g.anisotropyMap,t(g.anisotropyMap,_.anisotropyMapTransform))),_.specularIntensity.value=g.specularIntensity,_.specularColor.value.copy(g.specularColor),g.specularColorMap&&(_.specularColorMap.value=g.specularColorMap,t(g.specularColorMap,_.specularColorMapTransform)),g.specularIntensityMap&&(_.specularIntensityMap.value=g.specularIntensityMap,t(g.specularIntensityMap,_.specularIntensityMapTransform))}function m(_,g){g.matcap&&(_.matcap.value=g.matcap)}function p(_,g){let v=e.get(g).light;_.referencePosition.value.setFromMatrixPosition(v.matrixWorld),_.nearDistance.value=v.shadow.camera.near,_.farDistance.value=v.shadow.camera.far}return{refreshFogUniforms:i,refreshMaterialUniforms:r}}function ere(n,e,t,i){let r={},s={},a=[],o=n.getParameter(n.MAX_UNIFORM_BUFFER_BINDINGS);function l(v,x){let T=x.program;i.uniformBlockBinding(v,T)}function c(v,x){let T=r[v.id];T===void 0&&(m(v),T=f(v),r[v.id]=T,v.addEventListener("dispose",_));let E=x.program;i.updateUBOMapping(v,E);let S=e.render.frame;s[v.id]!==S&&(d(v),s[v.id]=S)}function f(v){let x=h();v.__bindingPointIndex=x;let T=n.createBuffer(),E=v.__size,S=v.usage;return n.bindBuffer(n.UNIFORM_BUFFER,T),n.bufferData(n.UNIFORM_BUFFER,E,S),n.bindBuffer(n.UNIFORM_BUFFER,null),n.bindBufferBase(n.UNIFORM_BUFFER,x,T),T}function h(){for(let v=0;v0&&(T+=E-S),v.__size=T,v.__cache={},this}function p(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 _(v){let x=v.target;x.removeEventListener("dispose",_);let T=a.indexOf(x.__bindingPointIndex);a.splice(T,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 ire(){return zo===null&&(zo=new vu(tre,16,16,Jc,Ho),zo.name="DFG_LUT",zo.minFilter=wr,zo.magFilter=wr,zo.wrapS=ua,zo.wrapT=ua,zo.generateMipmaps=!1,zo.needsUpdate=!0),zo}var g$,v$,E$,S$,T$,A$,x$,R$,b$,I$,M$,C$,y$,P$,L$,D$,O$,N$,w$,F$,B$,U$,V$,G$,k$,W$,H$,z$,X$,Y$,K$,j$,q$,Z$,Q$,$$,J$,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,bJ,IJ,MJ,CJ,yJ,PJ,LJ,DJ,OJ,NJ,wJ,FJ,BJ,UJ,VJ,GJ,kJ,WJ,HJ,zJ,XJ,YJ,KJ,jJ,qJ,ZJ,QJ,$J,JJ,eee,tee,iee,ree,nee,see,aee,oee,lee,cee,fee,hee,dee,uee,mee,pee,_ee,gee,vee,Eee,See,Tee,Aee,xee,Ree,bee,Iee,Mee,Cee,yee,Pee,Lee,Dee,Oee,Nee,wee,Fee,Bee,Uee,Vee,Gee,kee,Wee,Hee,zee,Xee,Yee,Kee,jee,qee,Zee,hi,pt,Xo,NS,Qee,j1,ef,b1,Rh,rte,y_,I1,bI,II,MI,CI,nte,Ou,FS,pte,q1,LI,Z1,Q1,$1,P1,L1,D1,O1,N1,DI,OI,NI,yI,Du,nie,sie,B1,cie,wS,pie,_ie,vie,Sie,Aie,Rie,Iie,Pie,FI,BI,Uie,Wie,Hie,zie,Xie,Y1,P_,PI,Zie,Qie,UI,VI,$ie,J1,tre,zo,BS,Ts=M(()=>{RI();RI();g$=`#ifdef USE_ALPHAHASH if ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard; -#endif`,o$=`#ifdef USE_ALPHAHASH +#endif`,v$=`#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`,l$=`#ifdef USE_ALPHAMAP +#endif`,E$=`#ifdef USE_ALPHAMAP diffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g; -#endif`,c$=`#ifdef USE_ALPHAMAP +#endif`,S$=`#ifdef USE_ALPHAMAP uniform sampler2D alphaMap; -#endif`,f$=`#ifdef USE_ALPHATEST +#endif`,T$=`#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`,h$=`#ifdef USE_ALPHATEST +#endif`,A$=`#ifdef USE_ALPHATEST uniform float alphaTest; -#endif`,d$=`#ifdef USE_AOMAP +#endif`,x$=`#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`,u$=`#ifdef USE_AOMAP +#endif`,R$=`#ifdef USE_AOMAP uniform sampler2D aoMap; uniform float aoMapIntensity; -#endif`,m$=`#ifdef USE_BATCHING +#endif`,b$=`#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`,p$=`#ifdef USE_BATCHING +#endif`,I$=`#ifdef USE_BATCHING mat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) ); -#endif`,_$=`vec3 transformed = vec3( position ); +#endif`,M$=`vec3 transformed = vec3( position ); #ifdef USE_ALPHAHASH vPosition = vec3( position ); -#endif`,g$=`vec3 objectNormal = vec3( normal ); +#endif`,C$=`vec3 objectNormal = vec3( normal ); #ifdef USE_TANGENT vec3 objectTangent = vec3( tangent.xyz ); -#endif`,v$=`float G_BlinnPhong_Implicit( ) { +#endif`,y$=`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`,E$=`#ifdef USE_IRIDESCENCE +} // validated`,P$=`#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`,S$=`#ifdef USE_BUMPMAP +#endif`,L$=`#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`,T$=`#if NUM_CLIPPING_PLANES > 0 +#endif`,D$=`#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`,A$=`#if NUM_CLIPPING_PLANES > 0 +#endif`,O$=`#if NUM_CLIPPING_PLANES > 0 varying vec3 vClipPosition; uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ]; -#endif`,x$=`#if NUM_CLIPPING_PLANES > 0 +#endif`,N$=`#if NUM_CLIPPING_PLANES > 0 varying vec3 vClipPosition; -#endif`,R$=`#if NUM_CLIPPING_PLANES > 0 +#endif`,w$=`#if NUM_CLIPPING_PLANES > 0 vClipPosition = - mvPosition.xyz; -#endif`,b$=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) +#endif`,F$=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) diffuseColor *= vColor; -#endif`,I$=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) +#endif`,B$=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) varying vec4 vColor; -#endif`,M$=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) +#endif`,U$=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) varying vec4 vColor; -#endif`,C$=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) +#endif`,V$=`#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`,y$=`#define PI 3.141592653589793 +#endif`,G$=`#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`,P$=`#ifdef ENVMAP_TYPE_CUBE_UV +} // validated`,k$=`#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`,L$=`vec3 transformedNormal = objectNormal; +#endif`,W$=`vec3 transformedNormal = objectNormal; #ifdef USE_TANGENT vec3 transformedTangent = objectTangent; #endif @@ -822,21 +822,21 @@ transformedNormal = normalMatrix * transformedNormal; #ifdef FLIP_SIDED transformedTangent = - transformedTangent; #endif -#endif`,D$=`#ifdef USE_DISPLACEMENTMAP +#endif`,H$=`#ifdef USE_DISPLACEMENTMAP uniform sampler2D displacementMap; uniform float displacementScale; uniform float displacementBias; -#endif`,O$=`#ifdef USE_DISPLACEMENTMAP +#endif`,z$=`#ifdef USE_DISPLACEMENTMAP transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias ); -#endif`,N$=`#ifdef USE_EMISSIVEMAP +#endif`,X$=`#ifdef USE_EMISSIVEMAP vec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv ); #ifdef DECODE_VIDEO_TEXTURE_EMISSIVE emissiveColor = sRGBTransferEOTF( emissiveColor ); #endif totalEmissiveRadiance *= emissiveColor.rgb; -#endif`,w$=`#ifdef USE_EMISSIVEMAP +#endif`,Y$=`#ifdef USE_EMISSIVEMAP uniform sampler2D emissiveMap; -#endif`,F$="gl_FragColor = linearToOutputTexel( gl_FragColor );",U$=`vec4 LinearTransferOETF( in vec4 value ) { +#endif`,K$="gl_FragColor = linearToOutputTexel( gl_FragColor );",j$=`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 ); -}`,B$=`#ifdef USE_ENVMAP +}`,q$=`#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`,V$=`#ifdef USE_ENVMAP +#endif`,Z$=`#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`,G$=`#ifdef USE_ENVMAP +#endif`,Q$=`#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`,k$=`#ifdef USE_ENVMAP +#endif`,$$=`#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`,W$=`#ifdef USE_ENVMAP +#endif`,J$=`#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`,H$=`#ifdef USE_FOG +#endif`,eJ=`#ifdef USE_FOG vFogDepth = - mvPosition.z; -#endif`,z$=`#ifdef USE_FOG +#endif`,tJ=`#ifdef USE_FOG varying float vFogDepth; -#endif`,X$=`#ifdef USE_FOG +#endif`,iJ=`#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`,Y$=`#ifdef USE_FOG +#endif`,rJ=`#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`,K$=`#ifdef USE_GRADIENTMAP +#endif`,nJ=`#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 -}`,j$=`#ifdef USE_LIGHTMAP +}`,sJ=`#ifdef USE_LIGHTMAP uniform sampler2D lightMap; uniform float lightMapIntensity; -#endif`,q$=`LambertMaterial material; +#endif`,aJ=`LambertMaterial material; material.diffuseColor = diffuseColor.rgb; -material.specularStrength = specularStrength;`,Z$=`varying vec3 vViewPosition; +material.specularStrength = specularStrength;`,oJ=`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`,Q$=`uniform bool receiveShadow; +#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,lJ=`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 `,$$=`#ifdef USE_ENVMAP +#include `,cJ=`#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`,J$=`ToonMaterial material; -material.diffuseColor = diffuseColor.rgb;`,eJ=`varying vec3 vViewPosition; +#endif`,fJ=`ToonMaterial material; +material.diffuseColor = diffuseColor.rgb;`,hJ=`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`,tJ=`BlinnPhongMaterial material; +#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,dJ=`BlinnPhongMaterial material; material.diffuseColor = diffuseColor.rgb; material.specularColor = specular; material.specularShininess = shininess; -material.specularStrength = specularStrength;`,iJ=`varying vec3 vViewPosition; +material.specularStrength = specularStrength;`,uJ=`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`,rJ=`PhysicalMaterial material; +#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,mJ=`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`,nJ=`uniform sampler2D dfgLUT; +#endif`,pJ=`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 ); -}`,sJ=` +}`,_J=` 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`,aJ=`#if defined( RE_IndirectDiffuse ) +#endif`,gJ=`#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`,oJ=`#if defined( RE_IndirectDiffuse ) +#endif`,vJ=`#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`,lJ=`#ifdef USE_LIGHT_PROBES_GRID +#endif`,EJ=`#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`,cJ=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) +#endif`,SJ=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) gl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5; -#endif`,fJ=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) +#endif`,TJ=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) uniform float logDepthBufFC; varying float vFragDepth; varying float vIsPerspective; -#endif`,hJ=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER +#endif`,AJ=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER varying float vFragDepth; varying float vIsPerspective; -#endif`,dJ=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER +#endif`,xJ=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER vFragDepth = 1.0 + gl_Position.w; vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) ); -#endif`,uJ=`#ifdef USE_MAP +#endif`,RJ=`#ifdef USE_MAP vec4 sampledDiffuseColor = texture2D( map, vMapUv ); #ifdef DECODE_VIDEO_TEXTURE sampledDiffuseColor = sRGBTransferEOTF( sampledDiffuseColor ); #endif diffuseColor *= sampledDiffuseColor; -#endif`,mJ=`#ifdef USE_MAP +#endif`,bJ=`#ifdef USE_MAP uniform sampler2D map; -#endif`,pJ=`#if defined( USE_MAP ) || defined( USE_ALPHAMAP ) +#endif`,IJ=`#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`,_J=`#if defined( USE_POINTS_UV ) +#endif`,MJ=`#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`,gJ=`float metalnessFactor = metalness; +#endif`,CJ=`float metalnessFactor = metalness; #ifdef USE_METALNESSMAP vec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv ); metalnessFactor *= texelMetalness.b; -#endif`,vJ=`#ifdef USE_METALNESSMAP +#endif`,yJ=`#ifdef USE_METALNESSMAP uniform sampler2D metalnessMap; -#endif`,EJ=`#ifdef USE_INSTANCING_MORPH +#endif`,PJ=`#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`,SJ=`#if defined( USE_MORPHCOLORS ) +#endif`,LJ=`#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`,TJ=`#ifdef USE_MORPHNORMALS +#endif`,DJ=`#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`,AJ=`#ifdef USE_MORPHTARGETS +#endif`,OJ=`#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`,xJ=`#ifdef USE_MORPHTARGETS +#endif`,NJ=`#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`,RJ=`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0; +#endif`,wJ=`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;`,bJ=`#ifdef USE_NORMALMAP_OBJECTSPACE +vec3 nonPerturbedNormal = normal;`,FJ=`#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;`,bJ=`#ifdef USE_NORMALMAP_OBJECTSPACE normal = normalize( tbn * mapN ); #elif defined( USE_BUMPMAP ) normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection ); -#endif`,IJ=`#ifndef FLAT_SHADED +#endif`,BJ=`#ifndef FLAT_SHADED varying vec3 vNormal; #ifdef USE_TANGENT varying vec3 vTangent; varying vec3 vBitangent; #endif -#endif`,MJ=`#ifndef FLAT_SHADED +#endif`,UJ=`#ifndef FLAT_SHADED varying vec3 vNormal; #ifdef USE_TANGENT varying vec3 vTangent; varying vec3 vBitangent; #endif -#endif`,CJ=`#ifndef FLAT_SHADED +#endif`,VJ=`#ifndef FLAT_SHADED vNormal = normalize( transformedNormal ); #ifdef USE_TANGENT vTangent = normalize( transformedTangent ); vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w ); #endif -#endif`,yJ=`#ifdef USE_NORMALMAP +#endif`,GJ=`#ifdef USE_NORMALMAP uniform sampler2D normalMap; uniform vec2 normalScale; #endif @@ -1987,13 +1987,13 @@ vec3 nonPerturbedNormal = normal;`,bJ=`#ifdef USE_NORMALMAP_OBJECTSPACE float scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det ); return mat3( T * scale, B * scale, N ); } -#endif`,PJ=`#ifdef USE_CLEARCOAT +#endif`,kJ=`#ifdef USE_CLEARCOAT vec3 clearcoatNormal = nonPerturbedNormal; -#endif`,LJ=`#ifdef USE_CLEARCOAT_NORMALMAP +#endif`,WJ=`#ifdef USE_CLEARCOAT_NORMALMAP vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0; clearcoatMapN.xy *= clearcoatNormalScale; clearcoatNormal = normalize( tbn2 * clearcoatMapN ); -#endif`,DJ=`#ifdef USE_CLEARCOATMAP +#endif`,HJ=`#ifdef USE_CLEARCOATMAP uniform sampler2D clearcoatMap; #endif #ifdef USE_CLEARCOAT_NORMALMAP @@ -2002,18 +2002,18 @@ vec3 nonPerturbedNormal = normal;`,bJ=`#ifdef USE_NORMALMAP_OBJECTSPACE #endif #ifdef USE_CLEARCOAT_ROUGHNESSMAP uniform sampler2D clearcoatRoughnessMap; -#endif`,OJ=`#ifdef USE_IRIDESCENCEMAP +#endif`,zJ=`#ifdef USE_IRIDESCENCEMAP uniform sampler2D iridescenceMap; #endif #ifdef USE_IRIDESCENCE_THICKNESSMAP uniform sampler2D iridescenceThicknessMap; -#endif`,NJ=`#ifdef OPAQUE +#endif`,XJ=`#ifdef OPAQUE diffuseColor.a = 1.0; #endif #ifdef USE_TRANSMISSION diffuseColor.a *= material.transmissionAlpha; #endif -gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,wJ=`vec3 packNormalToRGB( const in vec3 normal ) { +gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,YJ=`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 -}`,FJ=`#ifdef PREMULTIPLIED_ALPHA +}`,KJ=`#ifdef PREMULTIPLIED_ALPHA gl_FragColor.rgb *= gl_FragColor.a; -#endif`,UJ=`vec4 mvPosition = vec4( transformed, 1.0 ); +#endif`,jJ=`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;`,BJ=`#ifdef DITHERING +gl_Position = projectionMatrix * mvPosition;`,qJ=`#ifdef DITHERING gl_FragColor.rgb = dithering( gl_FragColor.rgb ); -#endif`,VJ=`#ifdef DITHERING +#endif`,ZJ=`#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`,GJ=`float roughnessFactor = roughness; +#endif`,QJ=`float roughnessFactor = roughness; #ifdef USE_ROUGHNESSMAP vec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv ); roughnessFactor *= texelRoughness.g; -#endif`,kJ=`#ifdef USE_ROUGHNESSMAP +#endif`,$J=`#ifdef USE_ROUGHNESSMAP uniform sampler2D roughnessMap; -#endif`,WJ=`#if NUM_SPOT_LIGHT_COORDS > 0 +#endif`,JJ=`#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;`,BJ=`#ifdef DITHERING } #endif #endif -#endif`,HJ=`#if NUM_SPOT_LIGHT_COORDS > 0 +#endif`,eee=`#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;`,BJ=`#ifdef DITHERING }; uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; #endif -#endif`,zJ=`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 ) +#endif`,tee=`#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;`,BJ=`#ifdef DITHERING vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition; } #pragma unroll_loop_end -#endif`,XJ=`float getShadowMask() { +#endif`,iee=`float getShadowMask() { float shadow = 1.0; #ifdef USE_SHADOWMAP #if NUM_DIR_LIGHT_SHADOWS > 0 @@ -2426,12 +2426,12 @@ gl_Position = projectionMatrix * mvPosition;`,BJ=`#ifdef DITHERING #endif #endif return shadow; -}`,YJ=`#ifdef USE_SKINNING +}`,ree=`#ifdef USE_SKINNING mat4 boneMatX = getBoneMatrix( skinIndex.x ); mat4 boneMatY = getBoneMatrix( skinIndex.y ); mat4 boneMatZ = getBoneMatrix( skinIndex.z ); mat4 boneMatW = getBoneMatrix( skinIndex.w ); -#endif`,KJ=`#ifdef USE_SKINNING +#endif`,nee=`#ifdef USE_SKINNING uniform mat4 bindMatrix; uniform mat4 bindMatrixInverse; uniform highp sampler2D boneTexture; @@ -2446,7 +2446,7 @@ gl_Position = projectionMatrix * mvPosition;`,BJ=`#ifdef DITHERING vec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 ); return mat4( v1, v2, v3, v4 ); } -#endif`,jJ=`#ifdef USE_SKINNING +#endif`,see=`#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;`,BJ=`#ifdef DITHERING skinned += boneMatZ * skinVertex * skinWeight.z; skinned += boneMatW * skinVertex * skinWeight.w; transformed = ( bindMatrixInverse * skinned ).xyz; -#endif`,qJ=`#ifdef USE_SKINNING +#endif`,aee=`#ifdef USE_SKINNING mat4 skinMatrix = mat4( 0.0 ); skinMatrix += skinWeight.x * boneMatX; skinMatrix += skinWeight.y * boneMatY; @@ -2465,17 +2465,17 @@ gl_Position = projectionMatrix * mvPosition;`,BJ=`#ifdef DITHERING #ifdef USE_TANGENT objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz; #endif -#endif`,ZJ=`float specularStrength; +#endif`,oee=`float specularStrength; #ifdef USE_SPECULARMAP vec4 texelSpecular = texture2D( specularMap, vSpecularMapUv ); specularStrength = texelSpecular.r; #else specularStrength = 1.0; -#endif`,QJ=`#ifdef USE_SPECULARMAP +#endif`,lee=`#ifdef USE_SPECULARMAP uniform sampler2D specularMap; -#endif`,$J=`#if defined( TONE_MAPPING ) +#endif`,cee=`#if defined( TONE_MAPPING ) gl_FragColor.rgb = toneMapping( gl_FragColor.rgb ); -#endif`,JJ=`#ifndef saturate +#endif`,fee=`#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; }`,eee=`#ifdef USE_TRANSMISSION +vec3 CustomToneMapping( vec3 color ) { return color; }`,hee=`#ifdef USE_TRANSMISSION material.transmission = transmission; material.transmissionAlpha = 1.0; material.thickness = thickness; @@ -2593,7 +2593,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,eee=`#ifdef USE_TRANSMIS material.attenuationColor, material.attenuationDistance ); material.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission ); totalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission ); -#endif`,tee=`#ifdef USE_TRANSMISSION +#endif`,dee=`#ifdef USE_TRANSMISSION uniform float transmission; uniform float thickness; uniform float attenuationDistance; @@ -2719,7 +2719,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,eee=`#ifdef USE_TRANSMIS float transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0; return vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor ); } -#endif`,iee=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) +#endif`,uee=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) varying vec2 vUv; #endif #ifdef USE_MAP @@ -2789,7 +2789,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,eee=`#ifdef USE_TRANSMIS #ifdef USE_THICKNESSMAP uniform mat3 thicknessMapTransform; varying vec2 vThicknessMapUv; -#endif`,ree=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) +#endif`,mee=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) varying vec2 vUv; #endif #ifdef USE_MAP @@ -2883,7 +2883,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,eee=`#ifdef USE_TRANSMIS #ifdef USE_THICKNESSMAP uniform mat3 thicknessMapTransform; varying vec2 vThicknessMapUv; -#endif`,nee=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) +#endif`,pee=`#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; }`,eee=`#ifdef USE_TRANSMIS #endif #ifdef USE_THICKNESSMAP vThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy; -#endif`,see=`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0 +#endif`,_ee=`#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; }`,eee=`#ifdef USE_TRANSMIS worldPosition = instanceMatrix * worldPosition; #endif worldPosition = modelMatrix * worldPosition; -#endif`,aee=`varying vec2 vUv; +#endif`,gee=`varying vec2 vUv; uniform mat3 uvTransform; void main() { vUv = ( uvTransform * vec3( uv, 1 ) ).xy; gl_Position = vec4( position.xy, 1.0, 1.0 ); -}`,oee=`uniform sampler2D t2D; +}`,vee=`uniform sampler2D t2D; uniform float backgroundIntensity; varying vec2 vUv; void main() { @@ -2980,14 +2980,14 @@ void main() { gl_FragColor = texColor; #include #include -}`,lee=`varying vec3 vWorldDirection; +}`,Eee=`varying vec3 vWorldDirection; #include void main() { vWorldDirection = transformDirection( position, modelMatrix ); #include #include gl_Position.z = gl_Position.w; -}`,cee=`#ifdef ENVMAP_TYPE_CUBE +}`,See=`#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 -}`,fee=`varying vec3 vWorldDirection; +}`,Tee=`varying vec3 vWorldDirection; #include void main() { vWorldDirection = transformDirection( position, modelMatrix ); #include #include gl_Position.z = gl_Position.w; -}`,hee=`uniform samplerCube tCube; +}`,Aee=`uniform samplerCube tCube; uniform float tFlip; uniform float opacity; varying vec3 vWorldDirection; @@ -3026,7 +3026,7 @@ void main() { gl_FragColor.a *= opacity; #include #include -}`,dee=`#include +}`,xee=`#include #include #include #include @@ -3053,7 +3053,7 @@ void main() { #include #include vHighPrecisionZW = gl_Position.zw; -}`,uee=`#if DEPTH_PACKING == 3200 +}`,Ree=`#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 -}`,mee=`#define DISTANCE +}`,bee=`#define DISTANCE varying vec3 vWorldPosition; #include #include @@ -3118,7 +3118,7 @@ void main() { #include #include vWorldPosition = worldPosition.xyz; -}`,pee=`#define DISTANCE +}`,Iee=`#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 ); -}`,_ee=`varying vec3 vWorldDirection; +}`,Mee=`varying vec3 vWorldDirection; #include void main() { vWorldDirection = transformDirection( position, modelMatrix ); #include #include -}`,gee=`uniform sampler2D tEquirect; +}`,Cee=`uniform sampler2D tEquirect; varying vec3 vWorldDirection; #include void main() { @@ -3156,7 +3156,7 @@ void main() { gl_FragColor = texture2D( tEquirect, sampleUV ); #include #include -}`,vee=`uniform float scale; +}`,yee=`uniform float scale; attribute float lineDistance; varying float vLineDistance; #include @@ -3178,7 +3178,7 @@ void main() { #include #include #include -}`,Eee=`uniform vec3 diffuse; +}`,Pee=`uniform vec3 diffuse; uniform float opacity; uniform float dashSize; uniform float totalSize; @@ -3206,7 +3206,7 @@ void main() { #include #include #include -}`,See=`#include +}`,Lee=`#include #include #include #include @@ -3238,7 +3238,7 @@ void main() { #include #include #include -}`,Tee=`uniform vec3 diffuse; +}`,Dee=`uniform vec3 diffuse; uniform float opacity; #ifndef FLAT_SHADED varying vec3 vNormal; @@ -3286,7 +3286,7 @@ void main() { #include #include #include -}`,Aee=`#define LAMBERT +}`,Oee=`#define LAMBERT varying vec3 vViewPosition; #include #include @@ -3325,7 +3325,7 @@ void main() { #include #include #include -}`,xee=`#define LAMBERT +}`,Nee=`#define LAMBERT uniform vec3 diffuse; uniform vec3 emissive; uniform float opacity; @@ -3383,7 +3383,7 @@ void main() { #include #include #include -}`,Ree=`#define MATCAP +}`,wee=`#define MATCAP varying vec3 vViewPosition; #include #include @@ -3417,7 +3417,7 @@ void main() { #include #include vViewPosition = - mvPosition.xyz; -}`,bee=`#define MATCAP +}`,Fee=`#define MATCAP uniform vec3 diffuse; uniform float opacity; uniform sampler2D matcap; @@ -3463,7 +3463,7 @@ void main() { #include #include #include -}`,Iee=`#define NORMAL +}`,Bee=`#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 -}`,Mee=`#define NORMAL +}`,Uee=`#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 -}`,Cee=`#define PHONG +}`,Vee=`#define PHONG varying vec3 vViewPosition; #include #include @@ -3556,7 +3556,7 @@ void main() { #include #include #include -}`,yee=`#define PHONG +}`,Gee=`#define PHONG uniform vec3 diffuse; uniform vec3 emissive; uniform vec3 specular; @@ -3616,7 +3616,7 @@ void main() { #include #include #include -}`,Pee=`#define STANDARD +}`,kee=`#define STANDARD varying vec3 vViewPosition; #ifdef USE_TRANSMISSION varying vec3 vWorldPosition; @@ -3659,7 +3659,7 @@ void main() { #ifdef USE_TRANSMISSION vWorldPosition = worldPosition.xyz; #endif -}`,Lee=`#define STANDARD +}`,Wee=`#define STANDARD #ifdef PHYSICAL #define IOR #define USE_SPECULAR @@ -3784,7 +3784,7 @@ void main() { #include #include #include -}`,Dee=`#define TOON +}`,Hee=`#define TOON varying vec3 vViewPosition; #include #include @@ -3821,7 +3821,7 @@ void main() { #include #include #include -}`,Oee=`#define TOON +}`,zee=`#define TOON uniform vec3 diffuse; uniform vec3 emissive; uniform float opacity; @@ -3873,7 +3873,7 @@ void main() { #include #include #include -}`,Nee=`uniform float size; +}`,Xee=`uniform float size; uniform float scale; #include #include @@ -3904,7 +3904,7 @@ void main() { #include #include #include -}`,wee=`uniform vec3 diffuse; +}`,Yee=`uniform vec3 diffuse; uniform float opacity; #include #include @@ -3929,7 +3929,7 @@ void main() { #include #include #include -}`,Fee=`#include +}`,Kee=`#include #include #include #include @@ -3952,7 +3952,7 @@ void main() { #include #include #include -}`,Uee=`uniform vec3 color; +}`,jee=`uniform vec3 color; uniform float opacity; #include #include @@ -3968,7 +3968,7 @@ void main() { #include #include #include -}`,Bee=`uniform float rotation; +}`,qee=`uniform float rotation; uniform vec2 center; #include #include @@ -3992,7 +3992,7 @@ void main() { #include #include #include -}`,Vee=`uniform vec3 diffuse; +}`,Zee=`uniform vec3 diffuse; uniform float opacity; #include #include @@ -4017,7 +4017,7 @@ void main() { #include #include #include -}`,hi={alphahash_fragment:a$,alphahash_pars_fragment:o$,alphamap_fragment:l$,alphamap_pars_fragment:c$,alphatest_fragment:f$,alphatest_pars_fragment:h$,aomap_fragment:d$,aomap_pars_fragment:u$,batching_pars_vertex:m$,batching_vertex:p$,begin_vertex:_$,beginnormal_vertex:g$,bsdfs:v$,iridescence_fragment:E$,bumpmap_pars_fragment:S$,clipping_planes_fragment:T$,clipping_planes_pars_fragment:A$,clipping_planes_pars_vertex:x$,clipping_planes_vertex:R$,color_fragment:b$,color_pars_fragment:I$,color_pars_vertex:M$,color_vertex:C$,common:y$,cube_uv_reflection_fragment:P$,defaultnormal_vertex:L$,displacementmap_pars_vertex:D$,displacementmap_vertex:O$,emissivemap_fragment:N$,emissivemap_pars_fragment:w$,colorspace_fragment:F$,colorspace_pars_fragment:U$,envmap_fragment:B$,envmap_common_pars_fragment:V$,envmap_pars_fragment:G$,envmap_pars_vertex:k$,envmap_physical_pars_fragment:$$,envmap_vertex:W$,fog_vertex:H$,fog_pars_vertex:z$,fog_fragment:X$,fog_pars_fragment:Y$,gradientmap_pars_fragment:K$,lightmap_pars_fragment:j$,lights_lambert_fragment:q$,lights_lambert_pars_fragment:Z$,lights_pars_begin:Q$,lights_toon_fragment:J$,lights_toon_pars_fragment:eJ,lights_phong_fragment:tJ,lights_phong_pars_fragment:iJ,lights_physical_fragment:rJ,lights_physical_pars_fragment:nJ,lights_fragment_begin:sJ,lights_fragment_maps:aJ,lights_fragment_end:oJ,lightprobes_pars_fragment:lJ,logdepthbuf_fragment:cJ,logdepthbuf_pars_fragment:fJ,logdepthbuf_pars_vertex:hJ,logdepthbuf_vertex:dJ,map_fragment:uJ,map_pars_fragment:mJ,map_particle_fragment:pJ,map_particle_pars_fragment:_J,metalnessmap_fragment:gJ,metalnessmap_pars_fragment:vJ,morphinstance_vertex:EJ,morphcolor_vertex:SJ,morphnormal_vertex:TJ,morphtarget_pars_vertex:AJ,morphtarget_vertex:xJ,normal_fragment_begin:RJ,normal_fragment_maps:bJ,normal_pars_fragment:IJ,normal_pars_vertex:MJ,normal_vertex:CJ,normalmap_pars_fragment:yJ,clearcoat_normal_fragment_begin:PJ,clearcoat_normal_fragment_maps:LJ,clearcoat_pars_fragment:DJ,iridescence_pars_fragment:OJ,opaque_fragment:NJ,packing:wJ,premultiplied_alpha_fragment:FJ,project_vertex:UJ,dithering_fragment:BJ,dithering_pars_fragment:VJ,roughnessmap_fragment:GJ,roughnessmap_pars_fragment:kJ,shadowmap_pars_fragment:WJ,shadowmap_pars_vertex:HJ,shadowmap_vertex:zJ,shadowmask_pars_fragment:XJ,skinbase_vertex:YJ,skinning_pars_vertex:KJ,skinning_vertex:jJ,skinnormal_vertex:qJ,specularmap_fragment:ZJ,specularmap_pars_fragment:QJ,tonemapping_fragment:$J,tonemapping_pars_fragment:JJ,transmission_fragment:eee,transmission_pars_fragment:tee,uv_pars_fragment:iee,uv_pars_vertex:ree,uv_vertex:nee,worldpos_vertex:see,background_vert:aee,background_frag:oee,backgroundCube_vert:lee,backgroundCube_frag:cee,cube_vert:fee,cube_frag:hee,depth_vert:dee,depth_frag:uee,distance_vert:mee,distance_frag:pee,equirect_vert:_ee,equirect_frag:gee,linedashed_vert:vee,linedashed_frag:Eee,meshbasic_vert:See,meshbasic_frag:Tee,meshlambert_vert:Aee,meshlambert_frag:xee,meshmatcap_vert:Ree,meshmatcap_frag:bee,meshnormal_vert:Iee,meshnormal_frag:Mee,meshphong_vert:Cee,meshphong_frag:yee,meshphysical_vert:Pee,meshphysical_frag:Lee,meshtoon_vert:Dee,meshtoon_frag:Oee,points_vert:Nee,points_frag:wee,shadow_vert:Fee,shadow_frag:Uee,sprite_vert:Bee,sprite_frag:Vee},pt={common:{diffuse:{value:new ft(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 It(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 ft(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 se},probesMax:{value:new se},probesResolution:{value:new se}},points:{diffuse:{value:new ft(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 ft(16777215)},opacity:{value:1},center:{value:new It(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new ii},alphaMap:{value:null},alphaMapTransform:{value:new ii},alphaTest:{value:0}}},zo={basic:{uniforms:yn([pt.common,pt.specularmap,pt.envmap,pt.aomap,pt.lightmap,pt.fog]),vertexShader:hi.meshbasic_vert,fragmentShader:hi.meshbasic_frag},lambert:{uniforms:yn([pt.common,pt.specularmap,pt.envmap,pt.aomap,pt.lightmap,pt.emissivemap,pt.bumpmap,pt.normalmap,pt.displacementmap,pt.fog,pt.lights,{emissive:{value:new ft(0)},envMapIntensity:{value:1}}]),vertexShader:hi.meshlambert_vert,fragmentShader:hi.meshlambert_frag},phong:{uniforms:yn([pt.common,pt.specularmap,pt.envmap,pt.aomap,pt.lightmap,pt.emissivemap,pt.bumpmap,pt.normalmap,pt.displacementmap,pt.fog,pt.lights,{emissive:{value:new ft(0)},specular:{value:new ft(1118481)},shininess:{value:30},envMapIntensity:{value:1}}]),vertexShader:hi.meshphong_vert,fragmentShader:hi.meshphong_frag},standard:{uniforms:yn([pt.common,pt.envmap,pt.aomap,pt.lightmap,pt.emissivemap,pt.bumpmap,pt.normalmap,pt.displacementmap,pt.roughnessmap,pt.metalnessmap,pt.fog,pt.lights,{emissive:{value:new ft(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:hi.meshphysical_vert,fragmentShader:hi.meshphysical_frag},toon:{uniforms:yn([pt.common,pt.aomap,pt.lightmap,pt.emissivemap,pt.bumpmap,pt.normalmap,pt.displacementmap,pt.gradientmap,pt.fog,pt.lights,{emissive:{value:new ft(0)}}]),vertexShader:hi.meshtoon_vert,fragmentShader:hi.meshtoon_frag},matcap:{uniforms:yn([pt.common,pt.bumpmap,pt.normalmap,pt.displacementmap,pt.fog,{matcap:{value:null}}]),vertexShader:hi.meshmatcap_vert,fragmentShader:hi.meshmatcap_frag},points:{uniforms:yn([pt.points,pt.fog]),vertexShader:hi.points_vert,fragmentShader:hi.points_frag},dashed:{uniforms:yn([pt.common,pt.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:hi.linedashed_vert,fragmentShader:hi.linedashed_frag},depth:{uniforms:yn([pt.common,pt.displacementmap]),vertexShader:hi.depth_vert,fragmentShader:hi.depth_frag},normal:{uniforms:yn([pt.common,pt.bumpmap,pt.normalmap,pt.displacementmap,{opacity:{value:1}}]),vertexShader:hi.meshnormal_vert,fragmentShader:hi.meshnormal_frag},sprite:{uniforms:yn([pt.sprite,pt.fog]),vertexShader:hi.sprite_vert,fragmentShader:hi.sprite_frag},background:{uniforms:{uvTransform:{value:new ii},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:hi.background_vert,fragmentShader:hi.background_frag},backgroundCube:{uniforms:{envMap:{value:null},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new ii}},vertexShader:hi.backgroundCube_vert,fragmentShader:hi.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:hi.cube_vert,fragmentShader:hi.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:hi.equirect_vert,fragmentShader:hi.equirect_frag},distance:{uniforms:yn([pt.common,pt.displacementmap,{referencePosition:{value:new se},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:hi.distance_vert,fragmentShader:hi.distance_frag},shadow:{uniforms:yn([pt.lights,pt.fog,{color:{value:new ft(0)},opacity:{value:1}}]),vertexShader:hi.shadow_vert,fragmentShader:hi.shadow_frag}};zo.physical={uniforms:yn([zo.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new ii},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new ii},clearcoatNormalScale:{value:new It(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 ft(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 It},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new ii},attenuationDistance:{value:0},attenuationColor:{value:new ft(0)},specularColor:{value:new ft(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new ii},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new ii},anisotropyVector:{value:new It},anisotropyMap:{value:null},anisotropyMapTransform:{value:new ii}}]),vertexShader:hi.meshphysical_vert,fragmentShader:hi.meshphysical_frag};LS={r:0,b:0,g:0},Gee=new li,G1=new ii;G1.set(-1,0,0,0,1,0,0,0,1);ef=4,g1=[.125,.215,.35,.446,.526,.582],Rh=20,Yee=256,C_=new gs,v1=new ft,AI=null,xI=0,RI=0,bI=!1,Kee=new se,Ou=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=Kee}=s;AI=this._renderer.getRenderTarget(),xI=this._renderer.getActiveCubeFace(),RI=this._renderer.getActiveMipmapLevel(),bI=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=T1(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=S1(),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(p,l),h.render(e,l)}h.toneMapping=u,h.autoClear=d,e.background=v}_textureToCubeUV(e,t){let i=this._renderer,r=e.mapping===Qc||e.mapping===Th;r?(this._cubemapMaterial===null&&(this._cubemapMaterial=T1()),this._cubemapMaterial.uniforms.flipEnvMap.value=e.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=S1());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;Lu(t,0,0,3*l,2*l),i.setRenderTarget(t),i.render(a,C_)}_applyPMREM(e){let t=this._renderer,i=t.autoClear;t.autoClear=!1;let r=this._lodMeshes.length;for(let s=1;sm-ef?i-m+ef:0),g=4*(this._cubeSize-p);l.envMap.value=e.texture,l.roughness.value=u,l.mipInt.value=m-t,Lu(s,_,g,3*p,2*p),r.setRenderTarget(s),r.render(o,C_),l.envMap.value=s.texture,l.roughness.value=0,l.mipInt.value=m-i,Lu(e,_,g,3*p,2*p),r.setRenderTarget(e),r.render(o,C_)}_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"&&Ut("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*Rh-1),p=s/m,_=isFinite(s)?1+Math.floor(f*p):Rh;_>Rh&&Ct(`sigmaRadians, ${s}, is too large and will clip, as it requested ${_} samples when the maximum is set to ${Rh}`);let g=[],v=0;for(let R=0;Rx-ef?r-x+ef:0),S=4*(this._cubeSize-A);Lu(t,E,S,3*A,2*A),l.setRenderTarget(t),l.render(h,C_)}};OS=class extends zs{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 n_(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:` +}`,hi={alphahash_fragment:g$,alphahash_pars_fragment:v$,alphamap_fragment:E$,alphamap_pars_fragment:S$,alphatest_fragment:T$,alphatest_pars_fragment:A$,aomap_fragment:x$,aomap_pars_fragment:R$,batching_pars_vertex:b$,batching_vertex:I$,begin_vertex:M$,beginnormal_vertex:C$,bsdfs:y$,iridescence_fragment:P$,bumpmap_pars_fragment:L$,clipping_planes_fragment:D$,clipping_planes_pars_fragment:O$,clipping_planes_pars_vertex:N$,clipping_planes_vertex:w$,color_fragment:F$,color_pars_fragment:B$,color_pars_vertex:U$,color_vertex:V$,common:G$,cube_uv_reflection_fragment:k$,defaultnormal_vertex:W$,displacementmap_pars_vertex:H$,displacementmap_vertex:z$,emissivemap_fragment:X$,emissivemap_pars_fragment:Y$,colorspace_fragment:K$,colorspace_pars_fragment:j$,envmap_fragment:q$,envmap_common_pars_fragment:Z$,envmap_pars_fragment:Q$,envmap_pars_vertex:$$,envmap_physical_pars_fragment:cJ,envmap_vertex:J$,fog_vertex:eJ,fog_pars_vertex:tJ,fog_fragment:iJ,fog_pars_fragment:rJ,gradientmap_pars_fragment:nJ,lightmap_pars_fragment:sJ,lights_lambert_fragment:aJ,lights_lambert_pars_fragment:oJ,lights_pars_begin:lJ,lights_toon_fragment:fJ,lights_toon_pars_fragment:hJ,lights_phong_fragment:dJ,lights_phong_pars_fragment:uJ,lights_physical_fragment:mJ,lights_physical_pars_fragment:pJ,lights_fragment_begin:_J,lights_fragment_maps:gJ,lights_fragment_end:vJ,lightprobes_pars_fragment:EJ,logdepthbuf_fragment:SJ,logdepthbuf_pars_fragment:TJ,logdepthbuf_pars_vertex:AJ,logdepthbuf_vertex:xJ,map_fragment:RJ,map_pars_fragment:bJ,map_particle_fragment:IJ,map_particle_pars_fragment:MJ,metalnessmap_fragment:CJ,metalnessmap_pars_fragment:yJ,morphinstance_vertex:PJ,morphcolor_vertex:LJ,morphnormal_vertex:DJ,morphtarget_pars_vertex:OJ,morphtarget_vertex:NJ,normal_fragment_begin:wJ,normal_fragment_maps:FJ,normal_pars_fragment:BJ,normal_pars_vertex:UJ,normal_vertex:VJ,normalmap_pars_fragment:GJ,clearcoat_normal_fragment_begin:kJ,clearcoat_normal_fragment_maps:WJ,clearcoat_pars_fragment:HJ,iridescence_pars_fragment:zJ,opaque_fragment:XJ,packing:YJ,premultiplied_alpha_fragment:KJ,project_vertex:jJ,dithering_fragment:qJ,dithering_pars_fragment:ZJ,roughnessmap_fragment:QJ,roughnessmap_pars_fragment:$J,shadowmap_pars_fragment:JJ,shadowmap_pars_vertex:eee,shadowmap_vertex:tee,shadowmask_pars_fragment:iee,skinbase_vertex:ree,skinning_pars_vertex:nee,skinning_vertex:see,skinnormal_vertex:aee,specularmap_fragment:oee,specularmap_pars_fragment:lee,tonemapping_fragment:cee,tonemapping_pars_fragment:fee,transmission_fragment:hee,transmission_pars_fragment:dee,uv_pars_fragment:uee,uv_pars_vertex:mee,uv_vertex:pee,worldpos_vertex:_ee,background_vert:gee,background_frag:vee,backgroundCube_vert:Eee,backgroundCube_frag:See,cube_vert:Tee,cube_frag:Aee,depth_vert:xee,depth_frag:Ree,distance_vert:bee,distance_frag:Iee,equirect_vert:Mee,equirect_frag:Cee,linedashed_vert:yee,linedashed_frag:Pee,meshbasic_vert:Lee,meshbasic_frag:Dee,meshlambert_vert:Oee,meshlambert_frag:Nee,meshmatcap_vert:wee,meshmatcap_frag:Fee,meshnormal_vert:Bee,meshnormal_frag:Uee,meshphong_vert:Vee,meshphong_frag:Gee,meshphysical_vert:kee,meshphysical_frag:Wee,meshtoon_vert:Hee,meshtoon_frag:zee,points_vert:Xee,points_frag:Yee,shadow_vert:Kee,shadow_frag:jee,sprite_vert:qee,sprite_frag:Zee},pt={common:{diffuse:{value:new ft(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new ri},alphaMap:{value:null},alphaMapTransform:{value:new ri},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new ri}},envmap:{envMap:{value:null},envMapRotation:{value:new ri},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98},dfgLUT:{value:null}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new ri}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new ri}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new ri},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new ri},normalScale:{value:new It(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new ri},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new ri}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new ri}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new ri}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new ft(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 se},probesMax:{value:new se},probesResolution:{value:new se}},points:{diffuse:{value:new ft(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new ri},alphaTest:{value:0},uvTransform:{value:new ri}},sprite:{diffuse:{value:new ft(16777215)},opacity:{value:1},center:{value:new It(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new ri},alphaMap:{value:null},alphaMapTransform:{value:new ri},alphaTest:{value:0}}},Xo={basic:{uniforms:Pn([pt.common,pt.specularmap,pt.envmap,pt.aomap,pt.lightmap,pt.fog]),vertexShader:hi.meshbasic_vert,fragmentShader:hi.meshbasic_frag},lambert:{uniforms:Pn([pt.common,pt.specularmap,pt.envmap,pt.aomap,pt.lightmap,pt.emissivemap,pt.bumpmap,pt.normalmap,pt.displacementmap,pt.fog,pt.lights,{emissive:{value:new ft(0)},envMapIntensity:{value:1}}]),vertexShader:hi.meshlambert_vert,fragmentShader:hi.meshlambert_frag},phong:{uniforms:Pn([pt.common,pt.specularmap,pt.envmap,pt.aomap,pt.lightmap,pt.emissivemap,pt.bumpmap,pt.normalmap,pt.displacementmap,pt.fog,pt.lights,{emissive:{value:new ft(0)},specular:{value:new ft(1118481)},shininess:{value:30},envMapIntensity:{value:1}}]),vertexShader:hi.meshphong_vert,fragmentShader:hi.meshphong_frag},standard:{uniforms:Pn([pt.common,pt.envmap,pt.aomap,pt.lightmap,pt.emissivemap,pt.bumpmap,pt.normalmap,pt.displacementmap,pt.roughnessmap,pt.metalnessmap,pt.fog,pt.lights,{emissive:{value:new ft(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:hi.meshphysical_vert,fragmentShader:hi.meshphysical_frag},toon:{uniforms:Pn([pt.common,pt.aomap,pt.lightmap,pt.emissivemap,pt.bumpmap,pt.normalmap,pt.displacementmap,pt.gradientmap,pt.fog,pt.lights,{emissive:{value:new ft(0)}}]),vertexShader:hi.meshtoon_vert,fragmentShader:hi.meshtoon_frag},matcap:{uniforms:Pn([pt.common,pt.bumpmap,pt.normalmap,pt.displacementmap,pt.fog,{matcap:{value:null}}]),vertexShader:hi.meshmatcap_vert,fragmentShader:hi.meshmatcap_frag},points:{uniforms:Pn([pt.points,pt.fog]),vertexShader:hi.points_vert,fragmentShader:hi.points_frag},dashed:{uniforms:Pn([pt.common,pt.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:hi.linedashed_vert,fragmentShader:hi.linedashed_frag},depth:{uniforms:Pn([pt.common,pt.displacementmap]),vertexShader:hi.depth_vert,fragmentShader:hi.depth_frag},normal:{uniforms:Pn([pt.common,pt.bumpmap,pt.normalmap,pt.displacementmap,{opacity:{value:1}}]),vertexShader:hi.meshnormal_vert,fragmentShader:hi.meshnormal_frag},sprite:{uniforms:Pn([pt.sprite,pt.fog]),vertexShader:hi.sprite_vert,fragmentShader:hi.sprite_frag},background:{uniforms:{uvTransform:{value:new ri},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:hi.background_vert,fragmentShader:hi.background_frag},backgroundCube:{uniforms:{envMap:{value:null},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new ri}},vertexShader:hi.backgroundCube_vert,fragmentShader:hi.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:hi.cube_vert,fragmentShader:hi.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:hi.equirect_vert,fragmentShader:hi.equirect_frag},distance:{uniforms:Pn([pt.common,pt.displacementmap,{referencePosition:{value:new se},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:hi.distance_vert,fragmentShader:hi.distance_frag},shadow:{uniforms:Pn([pt.lights,pt.fog,{color:{value:new ft(0)},opacity:{value:1}}]),vertexShader:hi.shadow_vert,fragmentShader:hi.shadow_frag}};Xo.physical={uniforms:Pn([Xo.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new ri},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new ri},clearcoatNormalScale:{value:new It(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new ri},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new ri},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new ri},sheen:{value:0},sheenColor:{value:new ft(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new ri},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new ri},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new ri},transmissionSamplerSize:{value:new It},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new ri},attenuationDistance:{value:0},attenuationColor:{value:new ft(0)},specularColor:{value:new ft(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new ri},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new ri},anisotropyVector:{value:new It},anisotropyMap:{value:null},anisotropyMapTransform:{value:new ri}}]),vertexShader:hi.meshphysical_vert,fragmentShader:hi.meshphysical_frag};NS={r:0,b:0,g:0},Qee=new li,j1=new ri;j1.set(-1,0,0,0,1,0,0,0,1);ef=4,b1=[.125,.215,.35,.446,.526,.582],Rh=20,rte=256,y_=new vs,I1=new ft,bI=null,II=0,MI=0,CI=!1,nte=new se,Ou=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=nte}=s;bI=this._renderer.getRenderTarget(),II=this._renderer.getActiveCubeFace(),MI=this._renderer.getActiveMipmapLevel(),CI=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=y1(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=C1(),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(p,l),h.render(e,l)}h.toneMapping=u,h.autoClear=d,e.background=v}_textureToCubeUV(e,t){let i=this._renderer,r=e.mapping===Qc||e.mapping===Th;r?(this._cubemapMaterial===null&&(this._cubemapMaterial=y1()),this._cubemapMaterial.uniforms.flipEnvMap.value=e.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=C1());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;Lu(t,0,0,3*l,2*l),i.setRenderTarget(t),i.render(a,y_)}_applyPMREM(e){let t=this._renderer,i=t.autoClear;t.autoClear=!1;let r=this._lodMeshes.length;for(let s=1;sm-ef?i-m+ef:0),g=4*(this._cubeSize-p);l.envMap.value=e.texture,l.roughness.value=u,l.mipInt.value=m-t,Lu(s,_,g,3*p,2*p),r.setRenderTarget(s),r.render(o,y_),l.envMap.value=s.texture,l.roughness.value=0,l.mipInt.value=m-i,Lu(e,_,g,3*p,2*p),r.setRenderTarget(e),r.render(o,y_)}_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"&&Bt("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*Rh-1),p=s/m,_=isFinite(s)?1+Math.floor(f*p):Rh;_>Rh&&Ct(`sigmaRadians, ${s}, is too large and will clip, as it requested ${_} samples when the maximum is set to ${Rh}`);let g=[],v=0;for(let R=0;Rx-ef?r-x+ef:0),S=4*(this._cubeSize-T);Lu(t,E,S,3*T,2*T),l.setRenderTarget(t),l.render(h,y_)}};FS=class extends Ks{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 s_(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 Yc(5,5,5),s=new Xs({name:"CubemapFromEquirect",uniforms:xh(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader,side:pn,blending:ko});s.uniforms.tEquirect.value=t;let a=new ri(r,s),o=t.minFilter;return t.minFilter===Qa&&(t.minFilter=Nr),new wE(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)}};nte={[q0]:"LINEAR_TONE_MAPPING",[Z0]:"REINHARD_TONE_MAPPING",[Q0]:"CINEON_TONE_MAPPING",[$0]:"ACES_FILMIC_TONE_MAPPING",[eI]:"AGX_TONE_MAPPING",[tI]:"NEUTRAL_TONE_MAPPING",[J0]:"CUSTOM_TONE_MAPPING"};k1=new xr,CI=new Cl(1,1),W1=new Qp,H1=new AE,z1=new n_,A1=[],x1=[],R1=new Float32Array(16),b1=new Float32Array(9),I1=new Float32Array(4);yI=class{constructor(e,t,i){this.id=e,this.addr=i,this.cache=[],this.type=t.type,this.setValue=bte(t.type)}},PI=class{constructor(e,t,i){this.id=e,this.addr=i,this.cache=[],this.type=t.type,this.size=t.size,this.setValue=Xte(t.type)}},LI=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)}}},II=/(\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}};Kte=37297,jte=0;y1=new ii;$te={[q0]:"Linear",[Z0]:"Reinhard",[Q0]:"Cineon",[$0]:"ACESFilmic",[eI]:"AgX",[tI]:"Neutral",[J0]:"Custom"};DS=new se;nie=/^[ \t]*#include +<([\w\d./]+)>/gm;sie=new Map;oie=/#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;cie={[g_]:"SHADOWMAP_TYPE_PCF",[bu]:"SHADOWMAP_TYPE_VSM"};hie={[Qc]:"ENVMAP_TYPE_CUBE",[Th]:"ENVMAP_TYPE_CUBE",[E_]:"ENVMAP_TYPE_CUBE_UV"};uie={[Th]:"ENVMAP_MODE_REFRACTION"};pie={[v_]:"ENVMAP_BLENDING_MULTIPLY",[jF]:"ENVMAP_BLENDING_MIX",[qF]:"ENVMAP_BLENDING_ADD"};Eie=0,OI=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 NI(e),t.set(e,i)),i}},NI=class{constructor(e){this.id=Eie++,this.code=e,this.usedTimes=0}};Mie=0;Lie=`void main() { + `},r=new Yc(5,5,5),s=new js({name:"CubemapFromEquirect",uniforms:xh(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader,side:_n,blending:Wo});s.uniforms.tEquirect.value=t;let a=new ti(r,s),o=t.minFilter;return t.minFilter===Qa&&(t.minFilter=wr),new UE(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)}};pte={[$0]:"LINEAR_TONE_MAPPING",[J0]:"REINHARD_TONE_MAPPING",[eI]:"CINEON_TONE_MAPPING",[tI]:"ACES_FILMIC_TONE_MAPPING",[rI]:"AGX_TONE_MAPPING",[nI]:"NEUTRAL_TONE_MAPPING",[iI]:"CUSTOM_TONE_MAPPING"};q1=new Tr,LI=new yl(1,1),Z1=new $p,Q1=new bE,$1=new s_,P1=[],L1=[],D1=new Float32Array(16),O1=new Float32Array(9),N1=new Float32Array(4);DI=class{constructor(e,t,i){this.id=e,this.addr=i,this.cache=[],this.type=t.type,this.setValue=Fte(t.type)}},OI=class{constructor(e,t,i){this.id=e,this.addr=i,this.cache=[],this.type=t.type,this.size=t.size,this.setValue=iie(t.type)}},NI=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)}}},yI=/(\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}};nie=37297,sie=0;B1=new ri;cie={[$0]:"Linear",[J0]:"Reinhard",[eI]:"Cineon",[tI]:"ACESFilmic",[rI]:"AgX",[nI]:"Neutral",[iI]:"Custom"};wS=new se;pie=/^[ \t]*#include +<([\w\d./]+)>/gm;_ie=new Map;vie=/#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;Sie={[v_]:"SHADOWMAP_TYPE_PCF",[bu]:"SHADOWMAP_TYPE_VSM"};Aie={[Qc]:"ENVMAP_TYPE_CUBE",[Th]:"ENVMAP_TYPE_CUBE",[S_]:"ENVMAP_TYPE_CUBE_UV"};Rie={[Th]:"ENVMAP_MODE_REFRACTION"};Iie={[E_]:"ENVMAP_BLENDING_MULTIPLY",[i1]:"ENVMAP_BLENDING_MIX",[r1]:"ENVMAP_BLENDING_ADD"};Pie=0,FI=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 BI(e),t.set(e,i)),i}},BI=class{constructor(e){this.id=Pie++,this.code=e,this.usedTimes=0}};Uie=0;Wie=`void main() { gl_Position = vec4( position, 1.0 ); -}`,Die=`uniform sampler2D shadow_pass; +}`,Hie=`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 ); -}`,Oie=[new se(1,0,0),new se(-1,0,0),new se(0,1,0),new se(0,-1,0),new se(0,0,1),new se(0,0,-1)],Nie=[new se(0,-1,0),new se(0,-1,0),new se(0,0,1),new se(0,0,-1),new se(0,-1,0),new se(0,-1,0)],B1=new li,y_=new se,MI=new se;Vie=` +}`,zie=[new se(1,0,0),new se(-1,0,0),new se(0,1,0),new se(0,-1,0),new se(0,0,1),new se(0,0,-1)],Xie=[new se(0,-1,0),new se(0,-1,0),new se(0,0,1),new se(0,0,-1),new se(0,-1,0),new se(0,-1,0)],Y1=new li,P_=new se,PI=new se;Zie=` void main() { gl_Position = vec4( position, 1.0 ); -}`,Gie=` +}`,Qie=` uniform sampler2DArray depthColor; uniform float depthWidth; uniform float depthHeight; @@ -4103,52 +4103,52 @@ void main() { } -}`,wI=class{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(e,t){if(this.texture===null){let i=new a_(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 Xs({vertexShader:Vie,fragmentShader:Gie,uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new ri(new gh(20,20),i)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}},FI=class extends ua{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,p=typeof XRWebGLBinding!="undefined",_=new wI,g={},v=t.getContextAttributes(),x=null,A=null,E=[],S=[],R=new It,I=null,C=new fr;C.viewport=new Ji;let y=new fr;y.viewport=new Ji;let D=[C,y],O=new FE,V=null,N=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(ae){let ve=E[ae];return ve===void 0&&(ve=new pu,E[ae]=ve),ve.getTargetRaySpace()},this.getControllerGrip=function(ae){let ve=E[ae];return ve===void 0&&(ve=new pu,E[ae]=ve),ve.getGripSpace()},this.getHand=function(ae){let ve=E[ae];return ve===void 0&&(ve=new pu,E[ae]=ve),ve.getHandSpace()};function w(ae){let ve=S.indexOf(ae.inputSource);if(ve===-1)return;let ne=E[ve];ne!==void 0&&(ne.update(ae.inputSource,ae.frame,c||a),ne.dispatchEvent({type:ae.type,data:ae.inputSource}))}function B(){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",B),r.removeEventListener("inputsourceschange",W);for(let ae=0;ae=0&&(S[ue]=null,E[ue].disconnect(ne))}for(let ve=0;ve=S.length){S.push(ne),ue=de;break}else if(S[de]===null){S[de]=ne,ue=de;break}if(ue===-1)break}let De=E[ue];De&&De.connect(ne)}}let te=new se,$=new se;function J(ae,ve,ne){te.setFromMatrixPosition(ve.matrixWorld),$.setFromMatrixPosition(ne.matrixWorld);let ue=te.distanceTo($),De=ve.projectionMatrix.elements,de=ne.projectionMatrix.elements,be=De[14]/(De[10]-1),Ke=De[14]/(De[10]+1),Tt=(De[9]+1)/De[5],Xe=(De[9]-1)/De[5],je=(De[8]-1)/De[0],$t=(de[8]+1)/de[0],Dt=be*je,xi=be*$t,oe=ue/(-je+$t),Vi=oe*-je;if(ve.matrixWorld.decompose(ae.position,ae.quaternion,ae.scale),ae.translateX(Vi),ae.translateZ(oe),ae.matrixWorld.compose(ae.position,ae.quaternion,ae.scale),ae.matrixWorldInverse.copy(ae.matrixWorld).invert(),De[10]===-1)ae.projectionMatrix.copy(ve.projectionMatrix),ae.projectionMatrixInverse.copy(ve.projectionMatrixInverse);else{let ti=be+oe,wi=Ke+oe,ot=Dt-Vi,Pi=xi+(ue-Vi),X=Tt*Ke/wi*ti,U=Xe*Ke/wi*ti;ae.projectionMatrix.makePerspective(ot,Pi,X,U,ti,wi),ae.projectionMatrixInverse.copy(ae.projectionMatrix).invert()}}function z(ae,ve){ve===null?ae.matrixWorld.copy(ae.matrix):ae.matrixWorld.multiplyMatrices(ve.matrixWorld,ae.matrix),ae.matrixWorldInverse.copy(ae.matrixWorld).invert()}this.updateCamera=function(ae){if(r===null)return;let ve=ae.near,ne=ae.far;_.texture!==null&&(_.depthNear>0&&(ve=_.depthNear),_.depthFar>0&&(ne=_.depthFar)),O.near=y.near=C.near=ve,O.far=y.far=C.far=ne,(V!==O.near||N!==O.far)&&(r.updateRenderState({depthNear:O.near,depthFar:O.far}),V=O.near,N=O.far),O.layers.mask=ae.layers.mask|6,C.layers.mask=O.layers.mask&-5,y.layers.mask=O.layers.mask&-3;let ue=ae.parent,De=O.cameras;z(O,ue);for(let de=0;de{function Et(){if(Se.forEach(function(Rt){X.get(Rt).currentProgram.isReady()&&Se.delete(Rt)}),Se.size===0){Te(H);return}setTimeout(Et,10)}ti.get("KHR_parallel_shader_compile")!==null?Et():setTimeout(Et,10)})};let Ba=null;function Ip(H){Ba&&Ba(H)}function qb(){Jf.stop()}function Tv(){Jf.start()}let Jf=new V1;Jf.setAnimationLoop(Ip),typeof self!="undefined"&&Jf.setContext(self),this.setAnimationLoop=function(H){Ba=H,Ye.setAnimationLoop(H),H===null?Jf.stop():Jf.start()},Ye.addEventListener("sessionstart",qb),Ye.addEventListener("sessionend",Tv),this.render=function(H,fe){if(fe!==void 0&&fe.isCamera!==!0){Ut("WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(D===!0)return;O!==null&&O.renderStart(H,fe);let Re=Ye.enabled===!0&&Ye.isPresenting===!0,Se=C!==null&&(w===null||Re)&&C.begin(y,w);if(H.matrixWorldAutoUpdate===!0&&H.updateMatrixWorld(),fe.parent===null&&fe.matrixWorldAutoUpdate===!0&&fe.updateMatrixWorld(),Ye.enabled===!0&&Ye.isPresenting===!0&&(C===null||C.isCompositing()===!1)&&(Ye.cameraAutoUpdate===!0&&Ye.updateCamera(fe),fe=Ye.getCamera()),H.isScene===!0&&H.onBeforeRender(y,H,fe,w),S=ct.get(H,I.length),S.init(fe),S.state.textureUnits=U.getTextureUnits(),I.push(S),Tt.multiplyMatrices(fe.projectionMatrix,fe.matrixWorldInverse),de.setFromProjectionMatrix(Tt,Xa,fe.reversedDepth),Ke=this.localClippingEnabled,be=St.init(this.clippingPlanes,Ke),E=Ie.get(H,R.length),E.init(),R.push(E),Ye.enabled===!0&&Ye.isPresenting===!0){let Rt=y.xr.getDepthSensingMesh();Rt!==null&&Zb(Rt,fe,-1/0,y.sortObjects)}Zb(H,fe,0,y.sortObjects),E.finish(),y.sortObjects===!0&&E.sort(ae,ve),Dt=Ye.enabled===!1||Ye.isPresenting===!1||Ye.hasDepthSensing()===!1,Dt&&Qe.addToRenderList(E,H),this.info.render.frame++,be===!0&&St.beginShadows();let Te=S.state.shadowsArray;if(nt.render(Te,H,fe),be===!0&&St.endShadows(),this.info.autoReset===!0&&this.info.reset(),(Se&&C.hasRenderPass())===!1){let Rt=E.opaque,_t=E.transmissive;if(S.setupLights(),fe.isArrayCamera){let yt=fe.cameras;if(_t.length>0)for(let Lt=0,ci=yt.length;Lt0&&lw(Rt,_t,H,fe),Dt&&Qe.render(H),ow(E,H,fe)}w!==null&&N===0&&(U.updateMultisampleRenderTarget(w),U.updateRenderTargetMipmap(w)),Se&&C.end(y),H.isScene===!0&&H.onAfterRender(y,H,fe),Pe.resetDefaultState(),B=-1,W=null,I.pop(),I.length>0?(S=I[I.length-1],U.setTextureUnits(S.state.textureUnits),be===!0&&St.setGlobalState(y.clippingPlanes,S.state.camera)):S=null,R.pop(),R.length>0?E=R[R.length-1]:E=null,O!==null&&O.renderEnd()};function Zb(H,fe,Re,Se){if(H.visible===!1)return;if(H.layers.test(fe.layers)){if(H.isGroup)Re=H.renderOrder;else if(H.isLOD)H.autoUpdate===!0&&H.update(fe);else if(H.isLightProbeGrid)S.pushLightProbeGrid(H);else if(H.isLight)S.pushLight(H),H.castShadow&&S.pushShadow(H);else if(H.isSprite){if(!H.frustumCulled||de.intersectsSprite(H)){Se&&je.setFromMatrixPosition(H.matrixWorld).applyMatrix4(Tt);let Rt=Je.update(H),_t=H.material;_t.visible&&E.push(H,Rt,_t,Re,je.z,null)}}else if((H.isMesh||H.isLine||H.isPoints)&&(!H.frustumCulled||de.intersectsObject(H))){let Rt=Je.update(H),_t=H.material;if(Se&&(H.boundingSphere!==void 0?(H.boundingSphere===null&&H.computeBoundingSphere(),je.copy(H.boundingSphere.center)):(Rt.boundingSphere===null&&Rt.computeBoundingSphere(),je.copy(Rt.boundingSphere.center)),je.applyMatrix4(H.matrixWorld).applyMatrix4(Tt)),Array.isArray(_t)){let yt=Rt.groups;for(let Lt=0,ci=yt.length;Lt0&&Av(Te,fe,Re),Et.length>0&&Av(Et,fe,Re),Rt.length>0&&Av(Rt,fe,Re),ot.buffers.depth.setTest(!0),ot.buffers.depth.setMask(!0),ot.buffers.color.setMask(!0),ot.setPolygonOffset(!1)}function lw(H,fe,Re,Se){if((Re.isScene===!0?Re.overrideMaterial:null)!==null)return;if(S.state.transmissionRenderTarget[Se.id]===void 0){let Ot=ti.has("EXT_color_buffer_half_float")||ti.has("EXT_color_buffer_float");S.state.transmissionRenderTarget[Se.id]=new zs(1,1,{generateMipmaps:!0,type:Ot?Wo:vs,minFilter:Qa,samples:Math.max(4,wi.samples),stencilBuffer:s,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:oi.workingColorSpace})}let Et=S.state.transmissionRenderTarget[Se.id],Rt=Se.viewport||te;Et.setSize(Rt.z*y.transmissionResolutionScale,Rt.w*y.transmissionResolutionScale);let _t=y.getRenderTarget(),yt=y.getActiveCubeFace(),Lt=y.getActiveMipmapLevel();y.setRenderTarget(Et),y.getClearColor(z),Y=y.getClearAlpha(),Y<1&&y.setClearColor(16777215,.5),y.clear(),Dt&&Qe.render(Re);let ci=y.toneMapping;y.toneMapping=Ys;let ui=Se.viewport;if(Se.viewport!==void 0&&(Se.viewport=void 0),S.setupLightsView(Se),be===!0&&St.setGlobalState(y.clippingPlanes,Se),Av(H,Re,Se),U.updateMultisampleRenderTarget(Et),U.updateRenderTargetMipmap(Et),ti.has("WEBGL_multisampled_render_to_texture")===!1){let Ot=!1;for(let Qi=0,Lr=fe.length;Qi0,Se.currentProgram=ui,Se.uniformsList=null,ui}function fw(H){if(H.uniformsList===null){let fe=H.currentProgram.getUniforms();H.uniformsList=Du.seqWithValue(fe.seq,H.uniforms)}return H.uniformsList}function hw(H,fe){let Re=X.get(H);Re.outputColorSpace=fe.outputColorSpace,Re.batching=fe.batching,Re.batchingColor=fe.batchingColor,Re.instancing=fe.instancing,Re.instancingColor=fe.instancingColor,Re.instancingMorph=fe.instancingMorph,Re.skinning=fe.skinning,Re.morphTargets=fe.morphTargets,Re.morphNormals=fe.morphNormals,Re.morphColors=fe.morphColors,Re.morphTargetsCount=fe.morphTargetsCount,Re.numClippingPlanes=fe.numClippingPlanes,Re.numIntersection=fe.numClipIntersection,Re.vertexAlphas=fe.vertexAlphas,Re.vertexTangents=fe.vertexTangents,Re.toneMapping=fe.toneMapping}function SZ(H,fe){if(H.length===0)return null;if(H.length===1)return H[0].texture!==null?H[0]:null;A.setFromMatrixPosition(fe.matrixWorld);for(let Re=0,Se=H.length;Re0),Ot=!!Re.morphAttributes.position,Qi=!!Re.morphAttributes.normal,Lr=!!Re.morphAttributes.color,Ir=Ys;Se.toneMapped&&(w===null||w.isXRRenderTarget===!0)&&(Ir=y.toneMapping);let ir=Re.morphAttributes.position||Re.morphAttributes.normal||Re.morphAttributes.color,Rn=ir!==void 0?ir.length:0,xt=X.get(Se),Fs=S.state.lights;if(be===!0&&(Ke===!0||H!==W)){let lr=H===W&&Se.id===B;St.setState(Se,H,lr)}let Fi=!1;Se.version===xt.__version?(xt.needsLights&&xt.lightsStateVersion!==Fs.state.version||xt.outputColorSpace!==_t||Te.isBatchedMesh&&xt.batching===!1||!Te.isBatchedMesh&&xt.batching===!0||Te.isBatchedMesh&&xt.batchingColor===!0&&Te.colorTexture===null||Te.isBatchedMesh&&xt.batchingColor===!1&&Te.colorTexture!==null||Te.isInstancedMesh&&xt.instancing===!1||!Te.isInstancedMesh&&xt.instancing===!0||Te.isSkinnedMesh&&xt.skinning===!1||!Te.isSkinnedMesh&&xt.skinning===!0||Te.isInstancedMesh&&xt.instancingColor===!0&&Te.instanceColor===null||Te.isInstancedMesh&&xt.instancingColor===!1&&Te.instanceColor!==null||Te.isInstancedMesh&&xt.instancingMorph===!0&&Te.morphTexture===null||Te.isInstancedMesh&&xt.instancingMorph===!1&&Te.morphTexture!==null||xt.envMap!==Lt||Se.fog===!0&&xt.fog!==Et||xt.numClippingPlanes!==void 0&&(xt.numClippingPlanes!==St.numPlanes||xt.numIntersection!==St.numIntersection)||xt.vertexAlphas!==ci||xt.vertexTangents!==ui||xt.morphTargets!==Ot||xt.morphNormals!==Qi||xt.morphColors!==Lr||xt.toneMapping!==Ir||xt.morphTargetsCount!==Rn||!!xt.lightProbeGrid!=S.state.lightProbeGridArray.length>0)&&(Fi=!0):(Fi=!0,xt.__version=Se.version);let aa=xt.currentProgram;Fi===!0&&(aa=xv(Se,fe,Te),O&&Se.isNodeMaterial&&O.onUpdateProgram(Se,aa,xt));let Io=!1,Pc=!1,Cd=!1,rr=aa.getUniforms(),Dr=xt.uniforms;if(ot.useProgram(aa.program)&&(Io=!0,Pc=!0,Cd=!0),Se.id!==B&&(B=Se.id,Pc=!0),xt.needsLights){let lr=SZ(S.state.lightProbeGridArray,Te);xt.lightProbeGrid!==lr&&(xt.lightProbeGrid=lr,Pc=!0)}if(Io||W!==H){ot.buffers.depth.getReversed()&&H.reversedDepth!==!0&&(H._reversedDepth=!0,H.updateProjectionMatrix()),rr.setValue(oe,"projectionMatrix",H.projectionMatrix),rr.setValue(oe,"viewMatrix",H.matrixWorldInverse);let Dc=rr.map.cameraPosition;Dc!==void 0&&Dc.setValue(oe,Xe.setFromMatrixPosition(H.matrixWorld)),wi.logarithmicDepthBuffer&&rr.setValue(oe,"logDepthBufFC",2/(Math.log(H.far+1)/Math.LN2)),(Se.isMeshPhongMaterial||Se.isMeshToonMaterial||Se.isMeshLambertMaterial||Se.isMeshBasicMaterial||Se.isMeshStandardMaterial||Se.isShaderMaterial)&&rr.setValue(oe,"isOrthographic",H.isOrthographicCamera===!0),W!==H&&(W=H,Pc=!0,Cd=!0)}if(xt.needsLights&&(Fs.state.directionalShadowMap.length>0&&rr.setValue(oe,"directionalShadowMap",Fs.state.directionalShadowMap,U),Fs.state.spotShadowMap.length>0&&rr.setValue(oe,"spotShadowMap",Fs.state.spotShadowMap,U),Fs.state.pointShadowMap.length>0&&rr.setValue(oe,"pointShadowMap",Fs.state.pointShadowMap,U)),Te.isSkinnedMesh){rr.setOptional(oe,Te,"bindMatrix"),rr.setOptional(oe,Te,"bindMatrixInverse");let lr=Te.skeleton;lr&&(lr.boneTexture===null&&lr.computeBoneTexture(),rr.setValue(oe,"boneTexture",lr.boneTexture,U))}Te.isBatchedMesh&&(rr.setOptional(oe,Te,"batchingTexture"),rr.setValue(oe,"batchingTexture",Te._matricesTexture,U),rr.setOptional(oe,Te,"batchingIdTexture"),rr.setValue(oe,"batchingIdTexture",Te._indirectTexture,U),rr.setOptional(oe,Te,"batchingColorTexture"),Te._colorsTexture!==null&&rr.setValue(oe,"batchingColorTexture",Te._colorsTexture,U));let Lc=Re.morphAttributes;if((Lc.position!==void 0||Lc.normal!==void 0||Lc.color!==void 0)&&Wt.update(Te,Re,aa),(Pc||xt.receiveShadow!==Te.receiveShadow)&&(xt.receiveShadow=Te.receiveShadow,rr.setValue(oe,"receiveShadow",Te.receiveShadow)),(Se.isMeshStandardMaterial||Se.isMeshLambertMaterial||Se.isMeshPhongMaterial)&&Se.envMap===null&&fe.environment!==null&&(Dr.envMapIntensity.value=fe.environmentIntensity),Dr.dfgLUT!==void 0&&(Dr.dfgLUT.value=Xie()),Pc){if(rr.setValue(oe,"toneMappingExposure",y.toneMappingExposure),xt.needsLights&&AZ(Dr,Cd),Et&&Se.fog===!0&&ye.refreshFogUniforms(Dr,Et),ye.refreshMaterialUniforms(Dr,Se,Ue,xe,S.state.transmissionRenderTarget[H.id]),xt.needsLights&&xt.lightProbeGrid){let lr=xt.lightProbeGrid;Dr.probesSH.value=lr.texture,Dr.probesMin.value.copy(lr.boundingBox.min),Dr.probesMax.value.copy(lr.boundingBox.max),Dr.probesResolution.value.copy(lr.resolution)}Du.upload(oe,fw(xt),Dr,U)}if(Se.isShaderMaterial&&Se.uniformsNeedUpdate===!0&&(Du.upload(oe,fw(xt),Dr,U),Se.uniformsNeedUpdate=!1),Se.isSpriteMaterial&&rr.setValue(oe,"center",Te.center),rr.setValue(oe,"modelViewMatrix",Te.modelViewMatrix),rr.setValue(oe,"normalMatrix",Te.normalMatrix),rr.setValue(oe,"modelMatrix",Te.matrixWorld),Se.uniformsGroups!==void 0){let lr=Se.uniformsGroups;for(let Dc=0,yd=lr.length;Dc0&&U.useMultisampledRTT(H)===!1?Se=X.get(H).__webglMultisampledFramebuffer:Array.isArray(Lt)?Se=Lt[Re]:Se=Lt,te.copy(H.viewport),$.copy(H.scissor),J=H.scissorTest}else te.copy(ne).multiplyScalar(Ue).floor(),$.copy(ue).multiplyScalar(Ue).floor(),J=De;if(Re!==0&&(Se=RZ),ot.bindFramebuffer(oe.FRAMEBUFFER,Se)&&ot.drawBuffers(H,Se),ot.viewport(te),ot.scissor($),ot.setScissorTest(J),Te){let _t=X.get(H.texture);oe.framebufferTexture2D(oe.FRAMEBUFFER,oe.COLOR_ATTACHMENT0,oe.TEXTURE_CUBE_MAP_POSITIVE_X+fe,_t.__webglTexture,Re)}else if(Et){let _t=fe;for(let yt=0;yt1&&oe.readBuffer(oe.COLOR_ATTACHMENT0+_t),!wi.textureFormatReadable(ci)){Ut("WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}if(!wi.textureTypeReadable(ui)){Ut("WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}fe>=0&&fe<=H.width-Se&&Re>=0&&Re<=H.height-Te&&oe.readPixels(fe,Re,Se,Te,K.convert(ci),K.convert(ui),Et)}finally{let Lt=w!==null?X.get(w).__webglFramebuffer:null;ot.bindFramebuffer(oe.FRAMEBUFFER,Lt)}}},this.readRenderTargetPixelsAsync=async function(H,fe,Re,Se,Te,Et,Rt,_t=0){if(!(H&&H.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let yt=X.get(H).__webglFramebuffer;if(H.isWebGLCubeRenderTarget&&Rt!==void 0&&(yt=yt[Rt]),yt)if(fe>=0&&fe<=H.width-Se&&Re>=0&&Re<=H.height-Te){ot.bindFramebuffer(oe.FRAMEBUFFER,yt);let Lt=H.textures[_t],ci=Lt.format,ui=Lt.type;if(H.textures.length>1&&oe.readBuffer(oe.COLOR_ATTACHMENT0+_t),!wi.textureFormatReadable(ci))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!wi.textureTypeReadable(ui))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");let Ot=oe.createBuffer();oe.bindBuffer(oe.PIXEL_PACK_BUFFER,Ot),oe.bufferData(oe.PIXEL_PACK_BUFFER,Et.byteLength,oe.STREAM_READ),oe.readPixels(fe,Re,Se,Te,K.convert(ci),K.convert(ui),0);let Qi=w!==null?X.get(w).__webglFramebuffer:null;ot.bindFramebuffer(oe.FRAMEBUFFER,Qi);let Lr=oe.fenceSync(oe.SYNC_GPU_COMMANDS_COMPLETE,0);return oe.flush(),await h1(oe,Lr,4),oe.bindBuffer(oe.PIXEL_PACK_BUFFER,Ot),oe.getBufferSubData(oe.PIXEL_PACK_BUFFER,0,Et),oe.deleteBuffer(Ot),oe.deleteSync(Lr),Et}else throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")},this.copyFramebufferToTexture=function(H,fe=null,Re=0){let Se=Math.pow(2,-Re),Te=Math.floor(H.image.width*Se),Et=Math.floor(H.image.height*Se),Rt=fe!==null?fe.x:0,_t=fe!==null?fe.y:0;U.setTexture2D(H,0),oe.copyTexSubImage2D(oe.TEXTURE_2D,Re,0,0,Rt,_t,Te,Et),ot.unbindTexture()};let bZ=oe.createFramebuffer(),IZ=oe.createFramebuffer();this.copyTextureToTexture=function(H,fe,Re=null,Se=null,Te=0,Et=0){let Rt,_t,yt,Lt,ci,ui,Ot,Qi,Lr,Ir=H.isCompressedTexture?H.mipmaps[Et]:H.image;if(Re!==null)Rt=Re.max.x-Re.min.x,_t=Re.max.y-Re.min.y,yt=Re.isBox3?Re.max.z-Re.min.z:1,Lt=Re.min.x,ci=Re.min.y,ui=Re.isBox3?Re.min.z:0;else{let Dr=Math.pow(2,-Te);Rt=Math.floor(Ir.width*Dr),_t=Math.floor(Ir.height*Dr),H.isDataArrayTexture?yt=Ir.depth:H.isData3DTexture?yt=Math.floor(Ir.depth*Dr):yt=1,Lt=0,ci=0,ui=0}Se!==null?(Ot=Se.x,Qi=Se.y,Lr=Se.z):(Ot=0,Qi=0,Lr=0);let ir=K.convert(fe.format),Rn=K.convert(fe.type),xt;fe.isData3DTexture?(U.setTexture3D(fe,0),xt=oe.TEXTURE_3D):fe.isDataArrayTexture||fe.isCompressedArrayTexture?(U.setTexture2DArray(fe,0),xt=oe.TEXTURE_2D_ARRAY):(U.setTexture2D(fe,0),xt=oe.TEXTURE_2D),ot.activeTexture(oe.TEXTURE0),ot.pixelStorei(oe.UNPACK_FLIP_Y_WEBGL,fe.flipY),ot.pixelStorei(oe.UNPACK_PREMULTIPLY_ALPHA_WEBGL,fe.premultiplyAlpha),ot.pixelStorei(oe.UNPACK_ALIGNMENT,fe.unpackAlignment);let Fs=ot.getParameter(oe.UNPACK_ROW_LENGTH),Fi=ot.getParameter(oe.UNPACK_IMAGE_HEIGHT),aa=ot.getParameter(oe.UNPACK_SKIP_PIXELS),Io=ot.getParameter(oe.UNPACK_SKIP_ROWS),Pc=ot.getParameter(oe.UNPACK_SKIP_IMAGES);ot.pixelStorei(oe.UNPACK_ROW_LENGTH,Ir.width),ot.pixelStorei(oe.UNPACK_IMAGE_HEIGHT,Ir.height),ot.pixelStorei(oe.UNPACK_SKIP_PIXELS,Lt),ot.pixelStorei(oe.UNPACK_SKIP_ROWS,ci),ot.pixelStorei(oe.UNPACK_SKIP_IMAGES,ui);let Cd=H.isDataArrayTexture||H.isData3DTexture,rr=fe.isDataArrayTexture||fe.isData3DTexture;if(H.isDepthTexture){let Dr=X.get(H),Lc=X.get(fe),lr=X.get(Dr.__renderTarget),Dc=X.get(Lc.__renderTarget);ot.bindFramebuffer(oe.READ_FRAMEBUFFER,lr.__webglFramebuffer),ot.bindFramebuffer(oe.DRAW_FRAMEBUFFER,Dc.__webglFramebuffer);for(let yd=0;yd{qs();Y1={type:"change"},BI={type:"start"},j1={type:"end"},US=new No,K1=new ha,Yie=Math.cos(70*M_.DEG2RAD),en=new se,Es=2*Math.PI,er={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},UI=1e-6,BS=class extends __{constructor(e,t=null){super(e,t),this.state=er.NONE,this.target=new se,this.cursor=new se,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:qc.ROTATE,MIDDLE:qc.DOLLY,RIGHT:qc.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 se,this._lastQuaternion=new Qr,this._lastTargetPosition=new se,this._quat=new Qr().setFromUnitVectors(e.up,new se(0,1,0)),this._quatInverse=this._quat.clone().invert(),this._spherical=new xu,this._sphericalDelta=new xu,this._scale=1,this._panOffset=new se,this._rotateStart=new It,this._rotateEnd=new It,this._rotateDelta=new It,this._panStart=new It,this._panEnd=new It,this._panDelta=new It,this._dollyStart=new It,this._dollyEnd=new It,this._dollyDelta=new It,this._dollyDirection=new se,this._mouse=new It,this._performCursorZoom=!1,this._pointers=[],this._pointerPositions={},this._controlActive=!1,this._onPointerMove=jie.bind(this),this._onPointerDown=Kie.bind(this),this._onPointerUp=qie.bind(this),this._onContextMenu=ire.bind(this),this._onMouseWheel=$ie.bind(this),this._onKeyDown=Jie.bind(this),this._onTouchStart=ere.bind(this),this._onTouchMove=tre.bind(this),this._onMouseDown=Zie.bind(this),this._onMouseMove=Qie.bind(this),this._interceptControlDown=rre.bind(this),this._interceptControlUp=nre.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(Y1),this.update(),this.state=er.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;en.copy(t).sub(this.target),en.applyQuaternion(this._quat),this._spherical.setFromVector3(en),this.autoRotate&&this.state===er.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+=Es:i>Math.PI&&(i-=Es),r<-Math.PI?r+=Es:r>Math.PI&&(r-=Es),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(en.setFromSpherical(this._spherical),en.applyQuaternion(this._quatInverse),t.copy(this.target).add(en),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=en.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 se(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 se(this._mouse.x,this._mouse.y,0);c.unproject(this.object),this.object.position.sub(c).add(o),this.object.updateMatrixWorld(),a=en.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):(US.origin.copy(this.object.position),US.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(US.direction))UI||8*(1-this._lastQuaternion.dot(this.object.quaternion))>UI||this._lastTargetPosition.distanceToSquared(this.target)>UI?(this.dispatchEvent(Y1),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e!==null?Es/60*this.autoRotateSpeed*e:Es/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){en.setFromMatrixColumn(t,0),en.multiplyScalar(-e),this._panOffset.add(en)}_panUp(e,t){this.screenSpacePanning===!0?en.setFromMatrixColumn(t,1):(en.setFromMatrixColumn(t,0),en.crossVectors(this.object.up,en)),en.multiplyScalar(e),this._panOffset.add(en)}_pan(e,t){let i=this.domElement;if(this.object.isPerspectiveCamera){let r=this.object.position;en.copy(r).sub(this.target);let s=en.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(Es*this._rotateDelta.x/t.clientHeight),this._rotateUp(Es*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(Es*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(-Es*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(Es*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(-Es*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(Es*this._rotateDelta.x/t.clientHeight),this._rotateUp(Es*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{qs();VS=class extends mh{constructor(){super(),this.name="RoomEnvironment",this.position.y=-3.5;let e=new Yc;e.deleteAttribute("uv");let t=new Cn({side:pn}),i=new Cn,r=new qa(16777215,900,28,2);r.position.set(.418,16.199,.3),this.add(r);let s=new ri(e,t);s.position.set(-.757,13.219,.717),s.scale.set(31.713,28.305,28.591),this.add(s);let a=new _h(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 ri(e,wu(50));l.position.set(-16.116,14.37,8.208),l.scale.set(.1,2.428,2.739),this.add(l);let c=new ri(e,wu(50));c.position.set(-16.109,18.021,-8.207),c.scale.set(.1,2.425,2.751),this.add(c);let f=new ri(e,wu(17));f.position.set(14.904,12.198,-1.832),f.scale.set(.15,4.265,6.331),this.add(f);let h=new ri(e,wu(43));h.position.set(-.462,8.89,14.52),h.scale.set(4.38,5.441,.088),this.add(h);let d=new ri(e,wu(20));d.position.set(3.235,11.486,-12.541),d.scale.set(2.5,2,.1),this.add(d);let u=new ri(e,wu(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 GS,VI,Q1=M(()=>{qs();GS=class extends cn{constructor(e){super(e)}load(e,t,i,r){let s=this,a=this.path===""?Za.extractUrlBase(e):this.path,o=new _s(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 VI(this.resourcePath||t,this.materialOptions);return o.setCrossOrigin(this.crossOrigin),o.setManager(this.manager),o.setMaterials(a),o}},VI=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:Hs,this.wrap=this.options.wrap!==void 0?this.options.wrap:Do}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=Ui),r[o]=f}for(let o in i){let l=i[o],c;if(l!=="")switch(o.toLowerCase()){case"kd":r.color=oi.colorSpaceToWorking(new ft().fromArray(l),Ui);break;case"ks":r.specular=oi.colorSpaceToWorking(new ft().fromArray(l),Ui);break;case"ke":r.emissive=oi.colorSpaceToWorking(new ft().fromArray(l),Ui);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 vh(r),this.materials[e]}getTextureParams(e,t){let i={scale:new It(1,1),offset:new It(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:PS,o=a.getHandler(e);o===null&&(o=new Sh(a)),o.setCrossOrigin&&o.setCrossOrigin(this.crossOrigin);let l=o.load(e,i,r,s);return t!==void 0&&(l.mapping=t),l}}});function cre(){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;J1.fromArray(r,e),GI.fromArray(r,t),e3.fromArray(r,i),_a.subVectors(e3,GI),t3.subVectors(J1,GI),_a.cross(t3),_a.normalize(),s.push(_a.x,_a.y,_a.z),s.push(_a.x,_a.y,_a.z),s.push(_a.x,_a.y,_a.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{qs();sre=/^[og]\s*(.+)?/,are=/^mtllib /,ore=/^usemtl /,lre=/^usemap /,$1=/\s+/,J1=new se,GI=new se,e3=new se,t3=new se,_a=new se,kS=new ft;WS=class extends cn{constructor(e){super(e),this.materials=null}load(e,t,i,r){let s=this,a=new _s(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 cre;e.indexOf(`\r +}`,UI=class{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(e,t){if(this.texture===null){let i=new o_(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 js({vertexShader:Zie,fragmentShader:Qie,uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new ti(new gh(20,20),i)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}},VI=class extends ma{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,p=typeof XRWebGLBinding!="undefined",_=new UI,g={},v=t.getContextAttributes(),x=null,T=null,E=[],S=[],R=new It,I=null,C=new fr;C.viewport=new Ji;let y=new fr;y.viewport=new Ji;let D=[C,y],O=new VE,V=null,N=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(ae){let ve=E[ae];return ve===void 0&&(ve=new pu,E[ae]=ve),ve.getTargetRaySpace()},this.getControllerGrip=function(ae){let ve=E[ae];return ve===void 0&&(ve=new pu,E[ae]=ve),ve.getGripSpace()},this.getHand=function(ae){let ve=E[ae];return ve===void 0&&(ve=new pu,E[ae]=ve),ve.getHandSpace()};function w(ae){let ve=S.indexOf(ae.inputSource);if(ve===-1)return;let ne=E[ve];ne!==void 0&&(ne.update(ae.inputSource,ae.frame,c||a),ne.dispatchEvent({type:ae.type,data:ae.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",W);for(let ae=0;ae=0&&(S[ue]=null,E[ue].disconnect(ne))}for(let ve=0;ve=S.length){S.push(ne),ue=de;break}else if(S[de]===null){S[de]=ne,ue=de;break}if(ue===-1)break}let De=E[ue];De&&De.connect(ne)}}let te=new se,$=new se;function J(ae,ve,ne){te.setFromMatrixPosition(ve.matrixWorld),$.setFromMatrixPosition(ne.matrixWorld);let ue=te.distanceTo($),De=ve.projectionMatrix.elements,de=ne.projectionMatrix.elements,be=De[14]/(De[10]-1),je=De[14]/(De[10]+1),Tt=(De[9]+1)/De[5],Xe=(De[9]-1)/De[5],qe=(De[8]-1)/De[0],$t=(de[8]+1)/de[0],Dt=be*qe,xi=be*$t,oe=ue/(-qe+$t),Vi=oe*-qe;if(ve.matrixWorld.decompose(ae.position,ae.quaternion,ae.scale),ae.translateX(Vi),ae.translateZ(oe),ae.matrixWorld.compose(ae.position,ae.quaternion,ae.scale),ae.matrixWorldInverse.copy(ae.matrixWorld).invert(),De[10]===-1)ae.projectionMatrix.copy(ve.projectionMatrix),ae.projectionMatrixInverse.copy(ve.projectionMatrixInverse);else{let ii=be+oe,Fi=je+oe,ot=Dt-Vi,Li=xi+(ue-Vi),X=Tt*je/Fi*ii,B=Xe*je/Fi*ii;ae.projectionMatrix.makePerspective(ot,Li,X,B,ii,Fi),ae.projectionMatrixInverse.copy(ae.projectionMatrix).invert()}}function z(ae,ve){ve===null?ae.matrixWorld.copy(ae.matrix):ae.matrixWorld.multiplyMatrices(ve.matrixWorld,ae.matrix),ae.matrixWorldInverse.copy(ae.matrixWorld).invert()}this.updateCamera=function(ae){if(r===null)return;let ve=ae.near,ne=ae.far;_.texture!==null&&(_.depthNear>0&&(ve=_.depthNear),_.depthFar>0&&(ne=_.depthFar)),O.near=y.near=C.near=ve,O.far=y.far=C.far=ne,(V!==O.near||N!==O.far)&&(r.updateRenderState({depthNear:O.near,depthFar:O.far}),V=O.near,N=O.far),O.layers.mask=ae.layers.mask|6,C.layers.mask=O.layers.mask&-5,y.layers.mask=O.layers.mask&-3;let ue=ae.parent,De=O.cameras;z(O,ue);for(let de=0;de{function Et(){if(Se.forEach(function(Rt){X.get(Rt).currentProgram.isReady()&&Se.delete(Rt)}),Se.size===0){Te(H);return}setTimeout(Et,10)}ii.get("KHR_parallel_shader_compile")!==null?Et():setTimeout(Et,10)})};let Ua=null;function Mp(H){Ua&&Ua(H)}function $b(){Jf.stop()}function Rv(){Jf.start()}let Jf=new K1;Jf.setAnimationLoop(Mp),typeof self!="undefined"&&Jf.setContext(self),this.setAnimationLoop=function(H){Ua=H,Ke.setAnimationLoop(H),H===null?Jf.stop():Jf.start()},Ke.addEventListener("sessionstart",$b),Ke.addEventListener("sessionend",Rv),this.render=function(H,fe){if(fe!==void 0&&fe.isCamera!==!0){Bt("WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(D===!0)return;O!==null&&O.renderStart(H,fe);let Re=Ke.enabled===!0&&Ke.isPresenting===!0,Se=C!==null&&(w===null||Re)&&C.begin(y,w);if(H.matrixWorldAutoUpdate===!0&&H.updateMatrixWorld(),fe.parent===null&&fe.matrixWorldAutoUpdate===!0&&fe.updateMatrixWorld(),Ke.enabled===!0&&Ke.isPresenting===!0&&(C===null||C.isCompositing()===!1)&&(Ke.cameraAutoUpdate===!0&&Ke.updateCamera(fe),fe=Ke.getCamera()),H.isScene===!0&&H.onBeforeRender(y,H,fe,w),S=ct.get(H,I.length),S.init(fe),S.state.textureUnits=B.getTextureUnits(),I.push(S),Tt.multiplyMatrices(fe.projectionMatrix,fe.matrixWorldInverse),de.setFromProjectionMatrix(Tt,Xa,fe.reversedDepth),je=this.localClippingEnabled,be=St.init(this.clippingPlanes,je),E=Ie.get(H,R.length),E.init(),R.push(E),Ke.enabled===!0&&Ke.isPresenting===!0){let Rt=y.xr.getDepthSensingMesh();Rt!==null&&Jb(Rt,fe,-1/0,y.sortObjects)}Jb(H,fe,0,y.sortObjects),E.finish(),y.sortObjects===!0&&E.sort(ae,ve),Dt=Ke.enabled===!1||Ke.isPresenting===!1||Ke.hasDepthSensing()===!1,Dt&&Qe.addToRenderList(E,H),this.info.render.frame++,be===!0&&St.beginShadows();let Te=S.state.shadowsArray;if(nt.render(Te,H,fe),be===!0&&St.endShadows(),this.info.autoReset===!0&&this.info.reset(),(Se&&C.hasRenderPass())===!1){let Rt=E.opaque,_t=E.transmissive;if(S.setupLights(),fe.isArrayCamera){let yt=fe.cameras;if(_t.length>0)for(let Lt=0,ci=yt.length;Lt0&&_w(Rt,_t,H,fe),Dt&&Qe.render(H),pw(E,H,fe)}w!==null&&N===0&&(B.updateMultisampleRenderTarget(w),B.updateRenderTargetMipmap(w)),Se&&C.end(y),H.isScene===!0&&H.onAfterRender(y,H,fe),Pe.resetDefaultState(),U=-1,W=null,I.pop(),I.length>0?(S=I[I.length-1],B.setTextureUnits(S.state.textureUnits),be===!0&&St.setGlobalState(y.clippingPlanes,S.state.camera)):S=null,R.pop(),R.length>0?E=R[R.length-1]:E=null,O!==null&&O.renderEnd()};function Jb(H,fe,Re,Se){if(H.visible===!1)return;if(H.layers.test(fe.layers)){if(H.isGroup)Re=H.renderOrder;else if(H.isLOD)H.autoUpdate===!0&&H.update(fe);else if(H.isLightProbeGrid)S.pushLightProbeGrid(H);else if(H.isLight)S.pushLight(H),H.castShadow&&S.pushShadow(H);else if(H.isSprite){if(!H.frustumCulled||de.intersectsSprite(H)){Se&&qe.setFromMatrixPosition(H.matrixWorld).applyMatrix4(Tt);let Rt=Je.update(H),_t=H.material;_t.visible&&E.push(H,Rt,_t,Re,qe.z,null)}}else if((H.isMesh||H.isLine||H.isPoints)&&(!H.frustumCulled||de.intersectsObject(H))){let Rt=Je.update(H),_t=H.material;if(Se&&(H.boundingSphere!==void 0?(H.boundingSphere===null&&H.computeBoundingSphere(),qe.copy(H.boundingSphere.center)):(Rt.boundingSphere===null&&Rt.computeBoundingSphere(),qe.copy(Rt.boundingSphere.center)),qe.applyMatrix4(H.matrixWorld).applyMatrix4(Tt)),Array.isArray(_t)){let yt=Rt.groups;for(let Lt=0,ci=yt.length;Lt0&&bv(Te,fe,Re),Et.length>0&&bv(Et,fe,Re),Rt.length>0&&bv(Rt,fe,Re),ot.buffers.depth.setTest(!0),ot.buffers.depth.setMask(!0),ot.buffers.color.setMask(!0),ot.setPolygonOffset(!1)}function _w(H,fe,Re,Se){if((Re.isScene===!0?Re.overrideMaterial:null)!==null)return;if(S.state.transmissionRenderTarget[Se.id]===void 0){let Ot=ii.has("EXT_color_buffer_half_float")||ii.has("EXT_color_buffer_float");S.state.transmissionRenderTarget[Se.id]=new Ks(1,1,{generateMipmaps:!0,type:Ot?Ho:Ss,minFilter:Qa,samples:Math.max(4,Fi.samples),stencilBuffer:s,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:oi.workingColorSpace})}let Et=S.state.transmissionRenderTarget[Se.id],Rt=Se.viewport||te;Et.setSize(Rt.z*y.transmissionResolutionScale,Rt.w*y.transmissionResolutionScale);let _t=y.getRenderTarget(),yt=y.getActiveCubeFace(),Lt=y.getActiveMipmapLevel();y.setRenderTarget(Et),y.getClearColor(z),Y=y.getClearAlpha(),Y<1&&y.setClearColor(16777215,.5),y.clear(),Dt&&Qe.render(Re);let ci=y.toneMapping;y.toneMapping=Es;let ui=Se.viewport;if(Se.viewport!==void 0&&(Se.viewport=void 0),S.setupLightsView(Se),be===!0&&St.setGlobalState(y.clippingPlanes,Se),bv(H,Re,Se),B.updateMultisampleRenderTarget(Et),B.updateRenderTargetMipmap(Et),ii.has("WEBGL_multisampled_render_to_texture")===!1){let Ot=!1;for(let Qi=0,Dr=fe.length;Qi0,Se.currentProgram=ui,Se.uniformsList=null,ui}function vw(H){if(H.uniformsList===null){let fe=H.currentProgram.getUniforms();H.uniformsList=Du.seqWithValue(fe.seq,H.uniforms)}return H.uniformsList}function Ew(H,fe){let Re=X.get(H);Re.outputColorSpace=fe.outputColorSpace,Re.batching=fe.batching,Re.batchingColor=fe.batchingColor,Re.instancing=fe.instancing,Re.instancingColor=fe.instancingColor,Re.instancingMorph=fe.instancingMorph,Re.skinning=fe.skinning,Re.morphTargets=fe.morphTargets,Re.morphNormals=fe.morphNormals,Re.morphColors=fe.morphColors,Re.morphTargetsCount=fe.morphTargetsCount,Re.numClippingPlanes=fe.numClippingPlanes,Re.numIntersection=fe.numClipIntersection,Re.vertexAlphas=fe.vertexAlphas,Re.vertexTangents=fe.vertexTangents,Re.toneMapping=fe.toneMapping}function LZ(H,fe){if(H.length===0)return null;if(H.length===1)return H[0].texture!==null?H[0]:null;T.setFromMatrixPosition(fe.matrixWorld);for(let Re=0,Se=H.length;Re0),Ot=!!Re.morphAttributes.position,Qi=!!Re.morphAttributes.normal,Dr=!!Re.morphAttributes.color,Cr=Es;Se.toneMapped&&(w===null||w.isXRRenderTarget===!0)&&(Cr=y.toneMapping);let ir=Re.morphAttributes.position||Re.morphAttributes.normal||Re.morphAttributes.color,In=ir!==void 0?ir.length:0,xt=X.get(Se),Vs=S.state.lights;if(be===!0&&(je===!0||H!==W)){let lr=H===W&&Se.id===U;St.setState(Se,H,lr)}let Bi=!1;Se.version===xt.__version?(xt.needsLights&&xt.lightsStateVersion!==Vs.state.version||xt.outputColorSpace!==_t||Te.isBatchedMesh&&xt.batching===!1||!Te.isBatchedMesh&&xt.batching===!0||Te.isBatchedMesh&&xt.batchingColor===!0&&Te.colorTexture===null||Te.isBatchedMesh&&xt.batchingColor===!1&&Te.colorTexture!==null||Te.isInstancedMesh&&xt.instancing===!1||!Te.isInstancedMesh&&xt.instancing===!0||Te.isSkinnedMesh&&xt.skinning===!1||!Te.isSkinnedMesh&&xt.skinning===!0||Te.isInstancedMesh&&xt.instancingColor===!0&&Te.instanceColor===null||Te.isInstancedMesh&&xt.instancingColor===!1&&Te.instanceColor!==null||Te.isInstancedMesh&&xt.instancingMorph===!0&&Te.morphTexture===null||Te.isInstancedMesh&&xt.instancingMorph===!1&&Te.morphTexture!==null||xt.envMap!==Lt||Se.fog===!0&&xt.fog!==Et||xt.numClippingPlanes!==void 0&&(xt.numClippingPlanes!==St.numPlanes||xt.numIntersection!==St.numIntersection)||xt.vertexAlphas!==ci||xt.vertexTangents!==ui||xt.morphTargets!==Ot||xt.morphNormals!==Qi||xt.morphColors!==Dr||xt.toneMapping!==Cr||xt.morphTargetsCount!==In||!!xt.lightProbeGrid!=S.state.lightProbeGridArray.length>0)&&(Bi=!0):(Bi=!0,xt.__version=Se.version);let oa=xt.currentProgram;Bi===!0&&(oa=Iv(Se,fe,Te),O&&Se.isNodeMaterial&&O.onUpdateProgram(Se,oa,xt));let Mo=!1,Pc=!1,Cd=!1,rr=oa.getUniforms(),Or=xt.uniforms;if(ot.useProgram(oa.program)&&(Mo=!0,Pc=!0,Cd=!0),Se.id!==U&&(U=Se.id,Pc=!0),xt.needsLights){let lr=LZ(S.state.lightProbeGridArray,Te);xt.lightProbeGrid!==lr&&(xt.lightProbeGrid=lr,Pc=!0)}if(Mo||W!==H){ot.buffers.depth.getReversed()&&H.reversedDepth!==!0&&(H._reversedDepth=!0,H.updateProjectionMatrix()),rr.setValue(oe,"projectionMatrix",H.projectionMatrix),rr.setValue(oe,"viewMatrix",H.matrixWorldInverse);let Dc=rr.map.cameraPosition;Dc!==void 0&&Dc.setValue(oe,Xe.setFromMatrixPosition(H.matrixWorld)),Fi.logarithmicDepthBuffer&&rr.setValue(oe,"logDepthBufFC",2/(Math.log(H.far+1)/Math.LN2)),(Se.isMeshPhongMaterial||Se.isMeshToonMaterial||Se.isMeshLambertMaterial||Se.isMeshBasicMaterial||Se.isMeshStandardMaterial||Se.isShaderMaterial)&&rr.setValue(oe,"isOrthographic",H.isOrthographicCamera===!0),W!==H&&(W=H,Pc=!0,Cd=!0)}if(xt.needsLights&&(Vs.state.directionalShadowMap.length>0&&rr.setValue(oe,"directionalShadowMap",Vs.state.directionalShadowMap,B),Vs.state.spotShadowMap.length>0&&rr.setValue(oe,"spotShadowMap",Vs.state.spotShadowMap,B),Vs.state.pointShadowMap.length>0&&rr.setValue(oe,"pointShadowMap",Vs.state.pointShadowMap,B)),Te.isSkinnedMesh){rr.setOptional(oe,Te,"bindMatrix"),rr.setOptional(oe,Te,"bindMatrixInverse");let lr=Te.skeleton;lr&&(lr.boneTexture===null&&lr.computeBoneTexture(),rr.setValue(oe,"boneTexture",lr.boneTexture,B))}Te.isBatchedMesh&&(rr.setOptional(oe,Te,"batchingTexture"),rr.setValue(oe,"batchingTexture",Te._matricesTexture,B),rr.setOptional(oe,Te,"batchingIdTexture"),rr.setValue(oe,"batchingIdTexture",Te._indirectTexture,B),rr.setOptional(oe,Te,"batchingColorTexture"),Te._colorsTexture!==null&&rr.setValue(oe,"batchingColorTexture",Te._colorsTexture,B));let Lc=Re.morphAttributes;if((Lc.position!==void 0||Lc.normal!==void 0||Lc.color!==void 0)&&Wt.update(Te,Re,oa),(Pc||xt.receiveShadow!==Te.receiveShadow)&&(xt.receiveShadow=Te.receiveShadow,rr.setValue(oe,"receiveShadow",Te.receiveShadow)),(Se.isMeshStandardMaterial||Se.isMeshLambertMaterial||Se.isMeshPhongMaterial)&&Se.envMap===null&&fe.environment!==null&&(Or.envMapIntensity.value=fe.environmentIntensity),Or.dfgLUT!==void 0&&(Or.dfgLUT.value=ire()),Pc){if(rr.setValue(oe,"toneMappingExposure",y.toneMappingExposure),xt.needsLights&&OZ(Or,Cd),Et&&Se.fog===!0&&ye.refreshFogUniforms(Or,Et),ye.refreshMaterialUniforms(Or,Se,Be,xe,S.state.transmissionRenderTarget[H.id]),xt.needsLights&&xt.lightProbeGrid){let lr=xt.lightProbeGrid;Or.probesSH.value=lr.texture,Or.probesMin.value.copy(lr.boundingBox.min),Or.probesMax.value.copy(lr.boundingBox.max),Or.probesResolution.value.copy(lr.resolution)}Du.upload(oe,vw(xt),Or,B)}if(Se.isShaderMaterial&&Se.uniformsNeedUpdate===!0&&(Du.upload(oe,vw(xt),Or,B),Se.uniformsNeedUpdate=!1),Se.isSpriteMaterial&&rr.setValue(oe,"center",Te.center),rr.setValue(oe,"modelViewMatrix",Te.modelViewMatrix),rr.setValue(oe,"normalMatrix",Te.normalMatrix),rr.setValue(oe,"modelMatrix",Te.matrixWorld),Se.uniformsGroups!==void 0){let lr=Se.uniformsGroups;for(let Dc=0,yd=lr.length;Dc0&&B.useMultisampledRTT(H)===!1?Se=X.get(H).__webglMultisampledFramebuffer:Array.isArray(Lt)?Se=Lt[Re]:Se=Lt,te.copy(H.viewport),$.copy(H.scissor),J=H.scissorTest}else te.copy(ne).multiplyScalar(Be).floor(),$.copy(ue).multiplyScalar(Be).floor(),J=De;if(Re!==0&&(Se=wZ),ot.bindFramebuffer(oe.FRAMEBUFFER,Se)&&ot.drawBuffers(H,Se),ot.viewport(te),ot.scissor($),ot.setScissorTest(J),Te){let _t=X.get(H.texture);oe.framebufferTexture2D(oe.FRAMEBUFFER,oe.COLOR_ATTACHMENT0,oe.TEXTURE_CUBE_MAP_POSITIVE_X+fe,_t.__webglTexture,Re)}else if(Et){let _t=fe;for(let yt=0;yt1&&oe.readBuffer(oe.COLOR_ATTACHMENT0+_t),!Fi.textureFormatReadable(ci)){Bt("WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}if(!Fi.textureTypeReadable(ui)){Bt("WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}fe>=0&&fe<=H.width-Se&&Re>=0&&Re<=H.height-Te&&oe.readPixels(fe,Re,Se,Te,K.convert(ci),K.convert(ui),Et)}finally{let Lt=w!==null?X.get(w).__webglFramebuffer:null;ot.bindFramebuffer(oe.FRAMEBUFFER,Lt)}}},this.readRenderTargetPixelsAsync=async function(H,fe,Re,Se,Te,Et,Rt,_t=0){if(!(H&&H.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let yt=X.get(H).__webglFramebuffer;if(H.isWebGLCubeRenderTarget&&Rt!==void 0&&(yt=yt[Rt]),yt)if(fe>=0&&fe<=H.width-Se&&Re>=0&&Re<=H.height-Te){ot.bindFramebuffer(oe.FRAMEBUFFER,yt);let Lt=H.textures[_t],ci=Lt.format,ui=Lt.type;if(H.textures.length>1&&oe.readBuffer(oe.COLOR_ATTACHMENT0+_t),!Fi.textureFormatReadable(ci))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!Fi.textureTypeReadable(ui))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");let Ot=oe.createBuffer();oe.bindBuffer(oe.PIXEL_PACK_BUFFER,Ot),oe.bufferData(oe.PIXEL_PACK_BUFFER,Et.byteLength,oe.STREAM_READ),oe.readPixels(fe,Re,Se,Te,K.convert(ci),K.convert(ui),0);let Qi=w!==null?X.get(w).__webglFramebuffer:null;ot.bindFramebuffer(oe.FRAMEBUFFER,Qi);let Dr=oe.fenceSync(oe.SYNC_GPU_COMMANDS_COMPLETE,0);return oe.flush(),await E1(oe,Dr,4),oe.bindBuffer(oe.PIXEL_PACK_BUFFER,Ot),oe.getBufferSubData(oe.PIXEL_PACK_BUFFER,0,Et),oe.deleteBuffer(Ot),oe.deleteSync(Dr),Et}else throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")},this.copyFramebufferToTexture=function(H,fe=null,Re=0){let Se=Math.pow(2,-Re),Te=Math.floor(H.image.width*Se),Et=Math.floor(H.image.height*Se),Rt=fe!==null?fe.x:0,_t=fe!==null?fe.y:0;B.setTexture2D(H,0),oe.copyTexSubImage2D(oe.TEXTURE_2D,Re,0,0,Rt,_t,Te,Et),ot.unbindTexture()};let FZ=oe.createFramebuffer(),BZ=oe.createFramebuffer();this.copyTextureToTexture=function(H,fe,Re=null,Se=null,Te=0,Et=0){let Rt,_t,yt,Lt,ci,ui,Ot,Qi,Dr,Cr=H.isCompressedTexture?H.mipmaps[Et]:H.image;if(Re!==null)Rt=Re.max.x-Re.min.x,_t=Re.max.y-Re.min.y,yt=Re.isBox3?Re.max.z-Re.min.z:1,Lt=Re.min.x,ci=Re.min.y,ui=Re.isBox3?Re.min.z:0;else{let Or=Math.pow(2,-Te);Rt=Math.floor(Cr.width*Or),_t=Math.floor(Cr.height*Or),H.isDataArrayTexture?yt=Cr.depth:H.isData3DTexture?yt=Math.floor(Cr.depth*Or):yt=1,Lt=0,ci=0,ui=0}Se!==null?(Ot=Se.x,Qi=Se.y,Dr=Se.z):(Ot=0,Qi=0,Dr=0);let ir=K.convert(fe.format),In=K.convert(fe.type),xt;fe.isData3DTexture?(B.setTexture3D(fe,0),xt=oe.TEXTURE_3D):fe.isDataArrayTexture||fe.isCompressedArrayTexture?(B.setTexture2DArray(fe,0),xt=oe.TEXTURE_2D_ARRAY):(B.setTexture2D(fe,0),xt=oe.TEXTURE_2D),ot.activeTexture(oe.TEXTURE0),ot.pixelStorei(oe.UNPACK_FLIP_Y_WEBGL,fe.flipY),ot.pixelStorei(oe.UNPACK_PREMULTIPLY_ALPHA_WEBGL,fe.premultiplyAlpha),ot.pixelStorei(oe.UNPACK_ALIGNMENT,fe.unpackAlignment);let Vs=ot.getParameter(oe.UNPACK_ROW_LENGTH),Bi=ot.getParameter(oe.UNPACK_IMAGE_HEIGHT),oa=ot.getParameter(oe.UNPACK_SKIP_PIXELS),Mo=ot.getParameter(oe.UNPACK_SKIP_ROWS),Pc=ot.getParameter(oe.UNPACK_SKIP_IMAGES);ot.pixelStorei(oe.UNPACK_ROW_LENGTH,Cr.width),ot.pixelStorei(oe.UNPACK_IMAGE_HEIGHT,Cr.height),ot.pixelStorei(oe.UNPACK_SKIP_PIXELS,Lt),ot.pixelStorei(oe.UNPACK_SKIP_ROWS,ci),ot.pixelStorei(oe.UNPACK_SKIP_IMAGES,ui);let Cd=H.isDataArrayTexture||H.isData3DTexture,rr=fe.isDataArrayTexture||fe.isData3DTexture;if(H.isDepthTexture){let Or=X.get(H),Lc=X.get(fe),lr=X.get(Or.__renderTarget),Dc=X.get(Lc.__renderTarget);ot.bindFramebuffer(oe.READ_FRAMEBUFFER,lr.__webglFramebuffer),ot.bindFramebuffer(oe.DRAW_FRAMEBUFFER,Dc.__webglFramebuffer);for(let yd=0;yd{Ts();e3={type:"change"},kI={type:"start"},i3={type:"end"},GS=new wo,t3=new da,rre=Math.cos(70*C_.DEG2RAD),en=new se,As=2*Math.PI,er={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},GI=1e-6,kS=class extends g_{constructor(e,t=null){super(e,t),this.state=er.NONE,this.target=new se,this.cursor=new se,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:qc.ROTATE,MIDDLE:qc.DOLLY,RIGHT:qc.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 se,this._lastQuaternion=new Qr,this._lastTargetPosition=new se,this._quat=new Qr().setFromUnitVectors(e.up,new se(0,1,0)),this._quatInverse=this._quat.clone().invert(),this._spherical=new xu,this._sphericalDelta=new xu,this._scale=1,this._panOffset=new se,this._rotateStart=new It,this._rotateEnd=new It,this._rotateDelta=new It,this._panStart=new It,this._panEnd=new It,this._panDelta=new It,this._dollyStart=new It,this._dollyEnd=new It,this._dollyDelta=new It,this._dollyDirection=new se,this._mouse=new It,this._performCursorZoom=!1,this._pointers=[],this._pointerPositions={},this._controlActive=!1,this._onPointerMove=sre.bind(this),this._onPointerDown=nre.bind(this),this._onPointerUp=are.bind(this),this._onContextMenu=ure.bind(this),this._onMouseWheel=cre.bind(this),this._onKeyDown=fre.bind(this),this._onTouchStart=hre.bind(this),this._onTouchMove=dre.bind(this),this._onMouseDown=ore.bind(this),this._onMouseMove=lre.bind(this),this._interceptControlDown=mre.bind(this),this._interceptControlUp=pre.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(e3),this.update(),this.state=er.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;en.copy(t).sub(this.target),en.applyQuaternion(this._quat),this._spherical.setFromVector3(en),this.autoRotate&&this.state===er.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+=As:i>Math.PI&&(i-=As),r<-Math.PI?r+=As:r>Math.PI&&(r-=As),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(en.setFromSpherical(this._spherical),en.applyQuaternion(this._quatInverse),t.copy(this.target).add(en),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=en.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 se(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 se(this._mouse.x,this._mouse.y,0);c.unproject(this.object),this.object.position.sub(c).add(o),this.object.updateMatrixWorld(),a=en.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):(GS.origin.copy(this.object.position),GS.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(GS.direction))GI||8*(1-this._lastQuaternion.dot(this.object.quaternion))>GI||this._lastTargetPosition.distanceToSquared(this.target)>GI?(this.dispatchEvent(e3),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e!==null?As/60*this.autoRotateSpeed*e:As/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){en.setFromMatrixColumn(t,0),en.multiplyScalar(-e),this._panOffset.add(en)}_panUp(e,t){this.screenSpacePanning===!0?en.setFromMatrixColumn(t,1):(en.setFromMatrixColumn(t,0),en.crossVectors(this.object.up,en)),en.multiplyScalar(e),this._panOffset.add(en)}_pan(e,t){let i=this.domElement;if(this.object.isPerspectiveCamera){let r=this.object.position;en.copy(r).sub(this.target);let s=en.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(As*this._rotateDelta.x/t.clientHeight),this._rotateUp(As*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(As*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(-As*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(As*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(-As*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(As*this._rotateDelta.x/t.clientHeight),this._rotateUp(As*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{Ts();WS=class extends mh{constructor(){super(),this.name="RoomEnvironment",this.position.y=-3.5;let e=new Yc;e.deleteAttribute("uv");let t=new pn({side:_n}),i=new pn,r=new qa(16777215,900,28,2);r.position.set(.418,16.199,.3),this.add(r);let s=new ti(e,t);s.position.set(-.757,13.219,.717),s.scale.set(31.713,28.305,28.591),this.add(s);let a=new _h(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 ti(e,wu(50));l.position.set(-16.116,14.37,8.208),l.scale.set(.1,2.428,2.739),this.add(l);let c=new ti(e,wu(50));c.position.set(-16.109,18.021,-8.207),c.scale.set(.1,2.425,2.751),this.add(c);let f=new ti(e,wu(17));f.position.set(14.904,12.198,-1.832),f.scale.set(.15,4.265,6.331),this.add(f);let h=new ti(e,wu(43));h.position.set(-.462,8.89,14.52),h.scale.set(4.38,5.441,.088),this.add(h);let d=new ti(e,wu(20));d.position.set(3.235,11.486,-12.541),d.scale.set(2.5,2,.1),this.add(d);let u=new ti(e,wu(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 HS,WI,s3=M(()=>{Ts();HS=class extends cn{constructor(e){super(e)}load(e,t,i,r){let s=this,a=this.path===""?Za.extractUrlBase(e):this.path,o=new gs(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 WI(this.resourcePath||t,this.materialOptions);return o.setCrossOrigin(this.crossOrigin),o.setManager(this.manager),o.setMaterials(a),o}},WI=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:Ys,this.wrap=this.options.wrap!==void 0?this.options.wrap:Oo}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=Ii),r[o]=f}for(let o in i){let l=i[o],c;if(l!=="")switch(o.toLowerCase()){case"kd":r.color=oi.colorSpaceToWorking(new ft().fromArray(l),Ii);break;case"ks":r.specular=oi.colorSpaceToWorking(new ft().fromArray(l),Ii);break;case"ke":r.emissive=oi.colorSpaceToWorking(new ft().fromArray(l),Ii);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 vh(r),this.materials[e]}getTextureParams(e,t){let i={scale:new It(1,1),offset:new It(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:OS,o=a.getHandler(e);o===null&&(o=new Sh(a)),o.setCrossOrigin&&o.setCrossOrigin(this.crossOrigin);let l=o.load(e,i,r,s);return t!==void 0&&(l.mapping=t),l}}});function Sre(){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;o3.fromArray(r,e),HI.fromArray(r,t),l3.fromArray(r,i),_a.subVectors(l3,HI),c3.subVectors(o3,HI),_a.cross(c3),_a.normalize(),s.push(_a.x,_a.y,_a.z),s.push(_a.x,_a.y,_a.z),s.push(_a.x,_a.y,_a.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{Ts();_re=/^[og]\s*(.+)?/,gre=/^mtllib /,vre=/^usemtl /,Ere=/^usemap /,a3=/\s+/,o3=new se,HI=new se,l3=new se,c3=new se,_a=new se,zS=new ft;XS=class extends cn{constructor(e){super(e),this.materials=null}load(e,t,i,r){let s=this,a=new gs(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 Sre;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?(kS.setRGB(parseFloat(h[4]),parseFloat(h[5]),parseFloat(h[6]),Ui),t.colors.push(kS.r,kS.g,kS.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($1),u=[];for(let p=0,_=d.length;p<_;p++){let g=d[p];if(g.length>0){let v=g.split("/");u.push(v)}}let m=u[0];for(let p=1,_=u.length-1;p<_;p++){let g=u[p],v=u[p+1];t.addFace(m[0],g[0],v[0],m[1],g[1],v[1],m[2],g[2],v[2])}}else if(f==="l"){let h=c.substring(1).trim().split(" "),d=[],u=[];if(c.indexOf("/")===-1)d=h;else for(let m=0,p=h.length;m1){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 Ws;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&&p.setAttribute("normal",new fi(f.normals,3)),f.colors.length>0&&(m=!0,p.setAttribute("color",new fi(f.colors,3))),f.hasUVIndices===!0&&p.setAttribute("uv",new fi(f.uvs,2));let _=[];for(let v=0,x=h.length;v1){for(let v=0,x=h.length;v0){let o=new us({size:1,sizeAttenuation:!1}),l=new Hi;l.setAttribute("position",new fi(t.vertices,3)),t.colors.length>0&&t.colors[0]!==void 0&&(l.setAttribute("color",new fi(t.colors,3)),o.vertexColors=!0);let c=new ma(l,o);s.add(c)}return s}}});var Ss,HS,kI,r3=M(()=>{qs();Ss=new ft,HS=class extends cn{constructor(e){super(e),this.propertyNameMapping={},this.customPropertyMapping={}}load(e,t,i,r){let s=this,a=new _s(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(_,g=0){let v=/^ply([\s\S]*)end_header(\r\n|\r|\n)/,x="",A=v.exec(_);A!==null&&(x=A[1]);let E={comments:[],elements:[],headerLength:g,objInfo:""},S=x.split(/\r\n|\r|\n/),R;function I(C,y){let D={type:C[0]};return D.type==="list"?(D.name=C[3],D.countType=C[1],D.itemType=C[2]):D.name=C[1],D.name in y&&(D.name=y[D.name]),D}for(let C=0;Cx.name);function v(x){for(let A=0,E=x.length;A0&&g.setIndex(_.indices),g.setAttribute("position",new fi(_.vertices,3)),_.normals.length>0&&g.setAttribute("normal",new fi(_.normals,3)),_.uvs.length>0&&g.setAttribute("uv",new fi(_.uvs,2)),_.colors.length>0&&g.setAttribute("color",new fi(_.colors,3)),(_.faceVertexUvs.length>0||_.faceVertexColors.length>0)&&(g=g.toNonIndexed(),_.faceVertexUvs.length>0&&g.setAttribute("uv",new fi(_.faceVertexUvs,2)),_.faceVertexColors.length>0&&g.setAttribute("color",new fi(_.faceVertexColors,3)));for(let v of Object.keys(p.customPropertyMapping))_[v].length>0&&g.setAttribute(v,new fi(_[v],p.customPropertyMapping[v].length));return g.computeBoundingSphere(),g}function c(_,g,v,x){if(g==="vertex"){_.vertices.push(v[x.attrX],v[x.attrY],v[x.attrZ]),x.attrNX!==null&&x.attrNY!==null&&x.attrNZ!==null&&_.normals.push(v[x.attrNX],v[x.attrNY],v[x.attrNZ]),x.attrS!==null&&x.attrT!==null&&_.uvs.push(v[x.attrS],v[x.attrT]),x.attrR!==null&&x.attrG!==null&&x.attrB!==null&&(Ss.setRGB(v[x.attrR]/255,v[x.attrG]/255,v[x.attrB]/255,Ui),_.colors.push(Ss.r,Ss.g,Ss.b));for(let A of Object.keys(p.customPropertyMapping))for(let E of p.customPropertyMapping[A])_[A].push(v[E])}else if(g==="face"){let A=v.vertex_indices||v.vertex_index,E=v.texcoord;A.length===3?(_.indices.push(A[0],A[1],A[2]),E&&E.length===6&&(_.faceVertexUvs.push(E[0],E[1]),_.faceVertexUvs.push(E[2],E[3]),_.faceVertexUvs.push(E[4],E[5]))):A.length===4&&(_.indices.push(A[0],A[1],A[3]),_.indices.push(A[1],A[2],A[3])),x.attrR!==null&&x.attrG!==null&&x.attrB!==null&&(Ss.setRGB(v[x.attrR]/255,v[x.attrG]/255,v[x.attrB]/255,Ui),_.faceVertexColors.push(Ss.r,Ss.g,Ss.b),_.faceVertexColors.push(Ss.r,Ss.g,Ss.b),_.faceVertexColors.push(Ss.r,Ss.g,Ss.b))}}function f(_,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,S),size:2};case"uint16":case"ushort":return{read:R=>A.getUint16(R,S),size:2};case"int32":case"int":return{read:R=>A.getInt32(R,S),size:4};case"uint32":case"uint":return{read:R=>A.getUint32(R,S),size:4};case"float32":case"float":return{read:R=>A.getFloat32(R,S),size:4};case"float64":case"double":return{read:R=>A.getFloat64(R,S),size:8}}}for(let A=0,E=_.length;A=this.arr.length}next(){return this.arr[this.i++]}}});var zS,n3=M(()=>{qs();zS=class extends cn{constructor(e){super(e)}load(e,t,i,r){let s=this,a=new _s(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 p=0;p<5;p++)if(i(m,f,p))return!1;return!0}function i(c,f,h){for(let d=0,u=c.length;d>5&31)/31,m=(B>>10&31)/31):(d=g,u=v,m=x)}for(let B=1;B<=3;B++){let W=O+B*12,te=D*3*3+(B-1)*3;I[te]=f.getFloat32(W,!0),I[te+1]=f.getFloat32(W+4,!0),I[te+2]=f.getFloat32(W+8,!0),C[te]=V,C[te+1]=N,C[te+2]=w,p&&(y.setRGB(d,u,m,Ui),_[te]=y.r,_[te+1]=y.g,_[te+2]=y.b)}}return R.setAttribute("position",new hr(I,3)),R.setAttribute("normal",new hr(C,3)),p&&(R.setAttribute("color",new hr(_,3)),R.hasColors=!0,R.alpha=A),R}function s(c){let f=new Hi,h=/solid([\s\S]*?)endsolid/g,d=/facet([\s\S]*?)endfacet/g,u=/solid\s(.+)/,m=0,p=/[\s]+([+-]?(?:\d*)(?:\.\d*)?(?:[eE][+-]?\d+)?)/.source,_=new RegExp("vertex"+p+p+p,"g"),g=new RegExp("normal"+p+p+p,"g"),v=[],x=[],A=[],E=new se,S,R=0,I=0,C=0;for(;(S=h.exec(c))!==null;){I=C;let y=S[0],D=(S=u.exec(y))!==null?S[1]:"";for(A.push(D);(S=d.exec(y))!==null;){let N=0,w=0,B=S[0];for(;(S=g.exec(B))!==null;)E.x=parseFloat(S[1]),E.y=parseFloat(S[2]),E.z=parseFloat(S[3]),w++;for(;(S=_.exec(B))!==null;)v.push(parseFloat(S[1]),parseFloat(S[2]),parseFloat(S[3])),x.push(E.x,E.y,E.z),N++,C++;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=C-I;f.userData.groupNames=A,f.addGroup(O,V,R),R++}return f.setAttribute("position",new fi(v,3)),f.setAttribute("normal",new fi(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{qs()});function a3(n){let e=new Map,t=new Map,i=n.clone();return o3(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 o3(n,e,t){t(n,e);for(let i=0;i{});function fre(){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 Fr(n,e,t){let i=n.json.materials[e];return i.extensions&&i.extensions[t]?i.extensions[t]:null}function ure(n){return n.DefaultMaterial===void 0&&(n.DefaultMaterial=new Cn({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:Hs})),n.DefaultMaterial}function bh(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 Xo(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 mre(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 Ere(n,e,t){let i=e.attributes,r=new Tr;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 se(l[0],l[1],l[2]),new se(c[0],c[1],c[2])),o.normalized){let f=pM(Fu[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 se,l=new se;for(let c=0,f=s.length;c{qs();s3();l3();XS=class extends cn{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(t){return new qI(t)}),this.register(function(t){return new ZI(t)}),this.register(function(t){return new sM(t)}),this.register(function(t){return new aM(t)}),this.register(function(t){return new oM(t)}),this.register(function(t){return new $I(t)}),this.register(function(t){return new JI(t)}),this.register(function(t){return new eM(t)}),this.register(function(t){return new tM(t)}),this.register(function(t){return new jI(t)}),this.register(function(t){return new iM(t)}),this.register(function(t){return new QI(t)}),this.register(function(t){return new nM(t)}),this.register(function(t){return new rM(t)}),this.register(function(t){return new YI(t)}),this.register(function(t){return new YS(t,Ei.EXT_MESHOPT_COMPRESSION)}),this.register(function(t){return new YS(t,Ei.KHR_MESHOPT_COMPRESSION)}),this.register(function(t){return new lM(t)})}load(e,t,i,r){let s=this,a;if(this.resourcePath!=="")a=this.resourcePath;else if(this.path!==""){let c=Za.extractUrlBase(e);a=Za.resolveURL(c,this.path)}else a=Za.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 _s(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))===u3){try{a[Ei.KHR_BINARY_GLTF]=new cM(e)}catch(h){r&&r(h);return}s=JSON.parse(a[Ei.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 _M(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)})}};Ei={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"},YI=class{constructor(e){this.parser=e,this.name=Ei.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)}},aM=class{constructor(e){this.parser=e,this.name=Ei.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)}},oM=class{constructor(e){this.parser=e,this.name=Ei.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)}},YS=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}},lM=class{constructor(e){this.name=Ei.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!==ga.TRIANGLES&&c.mode!==ga.TRIANGLE_STRIP&&c.mode!==ga.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 p=new li,_=new se,g=new Qr,v=new se(1,1,1),x=new _h(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 Sh(this.options.manager):this.textureLoader=new u_(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new _s(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 bh(s,o,r),Xo(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&&_.setY(C,S[R*l+1]),l>=3&&_.setZ(C,S[R*l+2]),l>=4&&_.setW(C,S[R*l+3]),l>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}_.normalized=m}return _})}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=f3[d.magFilter]||Nr,f.minFilter=f3[d.minFilter]||Qa,f.wrapS=h3[d.wrapS]||Do,f.wrapT=h3[d.wrapT]||Do,f.generateMipmaps=!f.isCompressedTexture&&f.minFilter!==Or&&f.minFilter!==Nr,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(p){let _=new xr(p);_.needsUpdate=!0,d(_)}),t.load(Za.resolveURL(h,s.path),m,void 0,u)})}).then(function(h){return c===!0&&o.revokeObjectURL(l),Xo(h,a),h.userData.mimeType=a.mimeType||gre(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[Ei.KHR_TEXTURE_TRANSFORM]){let o=i.extensions!==void 0?i.extensions[Ei.KHR_TEXTURE_TRANSFORM]:void 0;if(o){let l=s.associations.get(a);a=s.extensions[Ei.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 us,wr.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 Mn,wr.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 Cn}loadMaterial(e){let t=this,i=this.json,r=this.extensions,s=i.materials[e],a,o={},l=s.extensions||{},c=[];if(l[Ei.KHR_MATERIALS_UNLIT]){let h=r[Ei.KHR_MATERIALS_UNLIT];a=h.getMaterialType(),c.push(h.extendParams(o,s,t))}else{let h=s.pbrMetallicRoughness||{};if(o.color=new ft(1,1,1),o.opacity=1,Array.isArray(h.baseColorFactor)){let d=h.baseColorFactor;o.color.setRGB(d[0],d[1],d[2],Kn),o.opacity=d[3]}h.baseColorTexture!==void 0&&c.push(t.assignTexture(o,"map",h.baseColorTexture,Ui)),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=pa);let f=s.alphaMode||zI.OPAQUE;if(f===zI.BLEND?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,f===zI.MASK&&(o.alphaTest=s.alphaCutoff!==void 0?s.alphaCutoff:.5)),s.normalTexture!==void 0&&a!==jn&&(c.push(t.assignTexture(o,"normalMap",s.normalTexture)),o.normalScale=new It(1,1),s.normalTexture.scale!==void 0)){let h=s.normalTexture.scale;o.normalScale.set(h,h)}if(s.occlusionTexture!==void 0&&a!==jn&&(c.push(t.assignTexture(o,"aoMap",s.occlusionTexture)),s.occlusionTexture.strength!==void 0&&(o.aoMapIntensity=s.occlusionTexture.strength)),s.emissiveFactor!==void 0&&a!==jn){let h=s.emissiveFactor;o.emissive=new ft().setRGB(h[0],h[1],h[2],Kn)}return s.emissiveTexture!==void 0&&a!==jn&&c.push(t.assignTexture(o,"emissiveMap",s.emissiveTexture,Ui)),Promise.all(c).then(function(){let h=new a(o);return s.name&&(h.name=s.name),Xo(h,s),t.associations.set(h,{materials:e}),s.extensions&&bh(r,h,s),h})}createUniqueName(e){let t=$i.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[Ei.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(o,t).then(function(l){return d3(l,o,t)})}let a=[];for(let o=0,l=e.length;o0&&pre(g,s),g.name=t.createUniqueName(s.name||"mesh_"+e),Xo(g,s),_.extensions&&bh(r,g,_),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 se().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 gu:c.length>1?f=new Ws: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 Ws;i.name&&(s.name=r.createUniqueName(i.name)),Xo(s,i),i.extensions&&bh(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 wr||d instanceof xr)&&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)}tf[s.path]===tf.weights?(c(e),e.isGroup&&e.children.forEach(c)):l.push(o);let f;switch(tf[s.path]){case tf.weights:f=Uo;break;case tf.rotation:f=Bo;break;case tf.translation:case tf.scale:f=Vo;break;default:i.itemSize===1?f=Uo:f=Vo;break}let h=r.interpolation!==void 0?dre[r.interpolation]:dh,d=this._getArrayFromAccessor(i);for(let u=0,m=l.length;u{"use strict"});function g3(n){var t,i,r;let e=(i=(t=n.split(".").pop())==null?void 0:t.toLowerCase())!=null?i:"png";return(r=Sre[e])!=null?r:`image/${e}`}function Are(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 xre(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 _3(n,e,t){let i=Us(e,t);try{return{data:await n(i),path:i}}catch(r){throw new Error(`Missing external model resource: ${i}`)}}function Rre(n,e,t){let i=hs(e),r=i.replace(/\.[^.]+$/,""),s=qr(t),a=[Us(n,e),Us(n,i)];if(s)for(let o of p3)a.push(Us(n,`${s}.${o}`));for(let o of p3){let l=`${r}.${o}`;l!==i&&a.push(Us(n,l))}return a}async function v3(n,e,t,i){var l,c;let r=new XS,s=[];if(e==="gltf"&&t&&i){let f=new TextDecoder().decode(new Uint8Array(n)),h=JSON.parse(f),d=Dp(i);if(h.buffers){for(let g of h.buffers)if(g.uri&&!g.uri.startsWith("data:")){let v=await _3(t,d,g.uri);g.uri=`data:application/octet-stream;base64,${Nl(v.data)}`}}if(h.images){for(let g of h.images)if(g.uri&&!g.uri.startsWith("data:")){let v=await _3(t,d,g.uri);g.uri=`data:${g3(v.path)};base64,${Nl(v.data)}`}}let u=JSON.stringify(h),m=new TextEncoder().encode(u),p=await r.parseAsync(m.buffer,d?`${d}/`:""),_=p.scene||((l=p.scenes)==null?void 0:l[0]);if(!_)throw new Error("GLTF did not contain a scene");return{scene:_,animations:p.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 E3(n){let t=new zS().parse(n),i=new Cn({color:13421772}),r=new ri(t,i);return r.name=hs("")||"stl-model",r}async function S3(n){let t=new HS().parse(n);if(t.hasAttribute("color")){if(t.index){let s=new Cn({vertexColors:!0});return new ri(t,s)}let r=new us({size:.02,vertexColors:!0});return new ma(t,r)}if(t.index){let r=new Cn({color:13421772});return new ri(t,r)}let i=new us({size:.02,color:13421772});return new ma(t,i)}async function T3(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=Are(a[1]),c=Dp(t),f=Us(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(!p.some(x=>/^\s*Kd\s+/i.test(x))){let x=p.findIndex(A=>/^\s*newmtl\s+/i.test(A));p.splice(x>=0?x+1:0,0,"Kd 0.80 0.80 0.80")}let v=new GS().parse(p.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 WS;return s&&o.setMaterials(s),{object:o.parse(i),warnings:r}}var Sre,p3,Tre,A3=M(()=>{"use strict";Q1();i3();r3();n3();m3();qs();Bs();jS();Sre={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"},p3=["jpg","jpeg","png","bmp","tga","webp","tif","tiff"],Tre=/^\s*(map_Kd|map_Ka|map_Ks|map_Ns|map_d|map_bump|bump|disp|decal)\s+(.+)/i});function pr(){return x3.Platform.isMobile}var x3,Zs=M(()=>{"use strict";x3=require("obsidian")});function D_(n,e){return{min:Zr(n),max:Zr(e)}}function R3(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)}}:D_(e.min,e.max)}function Ur(n){return Vd(n.max,n.min)}function fn(n){return th(n.min,Op(Ur(n),.5))}function b3(n){return Dw(n.min,n.max)}function O_(n){return b3(n)/2}function I3(n){let e=Ur(n);return Math.max(e.x,e.y,e.z)}function gM(n){let e=Ur(n),t=b3(n);return{center:th(n.min,Op(e,.5)),size:e,diagonalLength:t,radius:t/2,maxSpan:Math.max(e.x,e.y,e.z)}}var rf=M(()=>{"use strict";Vs()});function vM(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:Zr(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 qS(n,e={}){let t=gM(n);return vM(t.center,t.radius,e)}function M3(n,e={}){var r,s,a,o,l,c;let t=gM(n),i=Math.max(t.maxSpan,1)*((r=e.distanceMultiplier)!=null?r:1.8);return{target:Zr(t.center),position:th(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 ZS=M(()=>{"use strict";rf();Vs()});function Li(n){return n.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}var QS=M(()=>{"use strict"});function $S(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=bre({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:Ire(r,{triangleCount:t,splatCount:n.splatCount,materialCount:e.size}),resourceWarnings:n.resourceWarnings?[...n.resourceWarnings]:void 0,boundingSize:Zr(n.boundingSize),rootName:n.rootName}}function bre(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 Ire(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 Ih(n){var e;return{name:n.name,triangleCount:n.triangleCount,vertexCount:n.vertexCount,materialName:(e=n.materialName)!=null?e:null,boundingSize:Zr(n.boundingSize),center:Zr(n.center),source:n.source,meshNames:n.meshNames?[...n.meshNames]:void 0,childCount:n.childCount,componentId:n.componentId,occurrenceId:n.occurrenceId,partNumber:n.partNumber,componentPath:n.componentPath}}function C3(n){return n.splatCount!==void 0?"Splats":"Triangles"}function y3(n){var e;return(e=n.splatCount)!=null?e:n.triangleCount}var N_=M(()=>{"use strict";Vs()});function Uu(n,e="-"){if(typeof n!="string")return e;let t=n.trim();return t.length>0?t:e}function P3(n,e={}){var r,s;let t=(r=e.countLabel)!=null?r:C3(n),i=(s=e.decimals)!=null?s:3;return[`| Meshes | ${n.meshCount} |`,`| ${t} | ${y3(n).toLocaleString()} |`,`| Vertices | ${n.vertexCount.toLocaleString()} |`,`| Materials | ${n.materialCount} |`,...n.performanceTier?[`| Performance Tier | ${n.performanceTier} |`]:[],`| Bounding Size | ${EM(n.boundingSize,{decimals:i})} |`]}function JS(n){return Li(n).replace(/\|/g,"\\|").replace(/\r?\n/g," ")}function EM(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 L3(n,e={}){return["| Metric | Value |","|--------|-------|",...P3(n,e)]}function Mre(n,e,t={}){return["| Property | Value |","|----------|-------|",`| Format | ${n} |`,...P3(e,t)]}function eT(n){var r,s;let e=[];e.push(`## ${n.title} - Model Info`),e.push(""),e.push(...Mre(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} | ${JS(Uu(a.name,`mesh-${o+1}`))} | ${l} | ${a.vertexCount.toLocaleString()} | ${JS(Uu(a.materialName))} |`)}),e.push(""));let i=Array.from((s=n.materialNames)!=null?s:[]).map(a=>Uu(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(`- ${Li(o)}`);e.push("")}return e.join(` -`)}function tT(n,e={}){var r;let t=Li(Uu((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 | ${JS(Uu(n.name))} |`),i.push(`| Triangles | ${n.triangleCount.toLocaleString()} |`),i.push(`| Vertices | ${n.vertexCount.toLocaleString()} |`),i.push(`| Material | ${JS(Uu(n.materialName))} |`),i.push(`| Bounding Size | ${EM(n.boundingSize)} |`),i.push(`| Center | ${EM(n.center,{separator:", "})} |`),i.push(""),i.join(` -`)}var iT=M(()=>{"use strict";QS();N_()});function Nre(n){return!!n&&typeof n=="object"&&!Array.isArray(n)}function rT(n){return n.toLowerCase().replace(/[^a-z0-9]+/g,"")}function wre(n){if(typeof n=="string"){let e=n.trim();return e.length>0?e:void 0}if(typeof n=="number"&&Number.isFinite(n))return String(n)}function D3(n,e=0){if(!Nre(n)||e>2)return[];let t=[];for(let i of Ore)for(let[r,s]of Object.entries(n))rT(r)===rT(i)&&t.push(...D3(s,e+1));return t.push(n),t}function w_(n,e){let t=new Set(e.map(rT));for(let i of n)for(let[r,s]of Object.entries(i)){if(!t.has(rT(r)))continue;let a=wre(s);if(a)return a}}function nf(n,e={}){var c,f;let t=D3(n),i=w_(t,Cre),r=w_(t,yre),s=w_(t,Pre),a=(c=w_(t,Dre))!=null?c:e.path,o=(f=w_(t,Lre))!=null?f:e.name;return{componentId:i,occurrenceId:r,partNumber:s,componentPath:a,displayName:o,hasExplicitIdentity:!!(i||r||s)}}var Cre,yre,Pre,Lre,Dre,Ore,SM=M(()=>{"use strict";Cre=["ai3dPartId","partId","componentId","componentIdentifier","cadId","persistentId","externalId","id"],yre=["ai3dOccurrenceId","occurrenceId","instanceId","occurrencePath","assemblyPath","pathId"],Pre=["ai3dPartNumber","partNumber","partNo","partNum","swPartNumber","solidworksPartNumber","part_number"],Lre=["displayName","partName","componentName","cadName","name"],Dre=["componentPath","cadPath","assemblyPath","occurrencePath"],Ore=["ai3d","cad","solidworks","sw","metadata","properties","extras","gltf","userData"]});function nT(n){return{canvas:n.canvas,observeRender:n.observeRender,getCameraStateKey:n.getCameraStateKey,projectWorldPoint:n.projectWorldPoint,isWorldPointOccluded:n.isWorldPointOccluded}}function sT(n){return n.map(e=>e.value.toFixed(e.digits)).join("_")}function O3(n){return Number.isFinite(n.x)&&Number.isFinite(n.y)&&Number.isFinite(n.z)}function N3(n,e,t){return!O3(n)||e.clientWidth===0||e.clientHeight===0?!1:(t.screenX=(n.x+1)/2*e.clientWidth,t.screenY=(1-n.y)/2*e.clientHeight,t.depth=(n.z+1)/2,!0)}function w3(n,e,t,i,r){return!O3(n)||e===0||t===0||i.clientWidth===0||i.clientHeight===0?!1:(r.screenX=n.x*(i.clientWidth/e),r.screenY=n.y*(i.clientHeight/t),r.depth=n.z,!0)}var TM=M(()=>{"use strict"});function aT(n){var e;return n.size===0?null:n.size===1?(e=Array.from(n)[0])!=null?e:null:`${n.size} materials`}function oT(n){var e;return{summary:n.summary,parts:Fre(n),materialNames:Ure(n.renderableMeshes,n.getMeshMaterialNames),resourceWarnings:n.resourceWarnings?[...n.resourceWarnings]:[],capturedAt:(e=n.capturedAt)!=null?e:new Date().toISOString()}}function Fre(n){let e=n.renderableMeshes.filter(t=>!n.groupedPartCandidates.groupedMeshes.has(t)).map(t=>n.createMeshPart(t));return n.groupedPartCandidates.parts.length>0?[...n.groupedPartCandidates.parts,...e]:e}function Ure(n,e){let t=new Set;for(let i of n)for(let r of e(i))r&&t.add(r);return Array.from(t).sort((i,r)=>i.localeCompare(r))}var AM=M(()=>{"use strict"});function lT(n){switch(n){case"\u03BCm":return"um";case"um":case"mm":case"cm":case"m":return n;default:return"mm"}}function B_(n){return{x:Number.isFinite(n.x)&&n.x>0?n.x:1,y:Number.isFinite(n.y)&&n.y>0?n.y:1,z:Number.isFinite(n.z)&&n.z>0?n.z:1}}function cT(n,e,t,i){let r=B_(t),s={x:(e.x-n.x)*r.x,y:(e.y-n.y)*r.y,z:(e.z-n.z)*r.z},a={x:Math.abs(s.x),y:Math.abs(s.y),z:Math.abs(s.z)};return{distance:Math.sqrt(s.x*s.x+s.y*s.y+s.z*s.z),delta:s,absDelta:a,unit:i}}function U_(n,e){return n.toFixed(e).replace(/\.?0+$/,"")}function Bre(n,e){if(n===0)return e;let t=Math.abs(n)*RM[e];return t<.001?"um":t<.1?"mm":t<1?"cm":"m"}function F_(n,e,t=!0){let i=t?Bre(n,e):e,r=n*RM[e]/RM[i],s=Math.abs(r),a=s>=100?1:s>=10?2:3;return`${U_(r,a)} ${U3[i]}`}function xM(n){let e=Math.abs(n),t=e>=100?1:e>=10?2:3;return U_(e,t)}function Bu(n){return{primary:F_(n.distance,n.unit),secondary:[`X ${xM(n.absDelta.x)}`,`Y ${xM(n.absDelta.y)}`,`Z ${xM(n.absDelta.z)}`,U3[n.unit]].join(" ")}}function fT(n){if(n.length===0)return"";let e=["## Measurements","","| # | Distance | Delta X | Delta Y | Delta Z | Start | End |","|---|----------|---------|---------|---------|-------|-----|"];for(let t of n){let i=t.reading.unit,r=F3(t.start),s=F3(t.end);e.push([t.index,F_(t.reading.distance,i),F_(t.reading.absDelta.x,i,!1),F_(t.reading.absDelta.y,i,!1),F_(t.reading.absDelta.z,i,!1),r,s].join(" | ").replace(/^/,"| ").replace(/$/," |"))}return e.join(` -`)}function F3(n){return`${U_(n.x,3)}, ${U_(n.y,3)}, ${U_(n.z,3)}`}var RM,U3,bM=M(()=>{"use strict";RM={um:1e-6,mm:.001,cm:.01,m:1},U3={um:"\u03BCm",mm:"mm",cm:"cm",m:"m"}});function dT(n){return new IM(n)}var hT,IM,MM=M(()=>{"use strict";hT=class hT{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";qs();Vs();MM();B3=new ft(4890367),Vre=new ft(1722990),CM=class{constructor(e,t,i,r,s,a){this.raycaster=new jc;this.pointer=new It;this.tempBox=new Tr;this.tempCenter=new se;this.tempDirection=new se;this.tempCameraForward=new se;this.tempCameraRight=new se;this.tempCameraUp=new se;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 Dl(e,B3),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=Gd(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){var s;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),(s=this.selectionHelper)==null||s.update(),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=wc(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&&Nc(o.distance,s.distance,s.epsilon);l!==this.lastOccluded&&(this.lastOccluded=l,this.selectionHelper&&(this.selectionHelper.material.color.set(l?Vre:B3),this.requestRender()))}isMeshInSet(e){return this.meshes.includes(e)}updateRotation(e,t){var c;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=yv({startPosition:Ht(e.startPosition),pivot:Ht(e.pivot),startRotationQuaternion:Cv(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),(c=this.selectionHelper)==null||c.update(),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 ri?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=Gd(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=Mv({origin:Ht(this.raycaster.ray.origin),direction:Ht(this.raycaster.ray.direction)},t);return a?new se(a.x,a.y,a.z):null}}});function k3(n){return Zr(n)}function Gre(n,e){return{originalPosition:k3(n),originalCenter:k3(e)}}function uT(n,e,t){let i=n.getRootCenter();for(let r of n.getParts()){let s=n.getPartState(r);s||(s=Gre(n.getPartPosition(r),n.getPartCenter(r)),n.setPartState(r,s));let a=(s.originalCenter[t]-i[t])*e;n.setPartPosition(r,Ow(s.originalPosition,t,a))}}function mT(n){for(let e of n.getParts()){let t=n.getPartState(e);t&&n.setPartPosition(e,t.originalPosition)}}var yM=M(()=>{"use strict";Vs()});function pT(n){return Zr(n)}function kre(n){return n instanceof ri}function Wre(n){let e=[];return n.traverse(t=>{kre(t)&&t.geometry&&e.push(t)}),e}function W3(n,e,t){uT(new _T(n),e,t)}function PM(n){mT(new _T(n))}var _T,H3=M(()=>{"use strict";qs();Vs();rf();yM();_T=class{constructor(e){this.root=e}getParts(){return Wre(this.root)}getRootCenter(){let e=new Tr().setFromObject(this.root);return fn({min:Ht(e.min),max:Ht(e.max)})}getPartPosition(e){return Ht(e.position)}getPartCenter(e){let i=new Tr().setFromObject(e).getCenter(new se);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:pT(t._previewExplodeState.originalPosition),originalCenter:pT(t._previewExplodeState.originalCenter)}:null}setPartState(e,t){e.userData._previewExplodeState={originalPosition:pT(t.originalPosition),originalCenter:pT(t.originalCenter)}}}});var K3={};tt(K3,{ThreeModelPreview:()=>TT,createThreeModelPreview:()=>one});function Mh(n){return n instanceof ri}function z3(n){return n instanceof Go||n instanceof qa||n instanceof Ll}function va(n){return n?Array.isArray(n)?n:[n]:[]}function vT(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 ET(n){var e,t;return(t=(e=n.geometry.getAttribute("position"))==null?void 0:e.count)!=null?t:0}function ST(n){return n?n.name||n.type||`material-${n.uuid}`:null}function Ch(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 LM(n,e){let t=[],i=e;for(;i&&i!==n;)t.push(Ch(i,i.type||`object-${i.id}`)),i=i.parent;return t.reverse().join("/")}function X3(n,e){var t;return((t=n.displayName)==null?void 0:t.trim())||n.partNumber||n.componentId||e}function Y3(n){let e=n.clone();return e.transparent=!0,e.opacity=Math.max(0,Math.min(1,n.opacity))*Hre,e.depthWrite=!1,e.needsUpdate=!0,e}function sne(n){return Array.isArray(n)?n.map(Y3):Y3(n)}function ane(n){for(let e of va(n))e.dispose()}function wl(n){let e=new Tr().setFromObject(n);return D_(Ht(e.min),Ht(e.max))}function one(n){return new TT(n)}var gT,Hre,zre,Xre,Yre,Kre,jre,V_,qre,Zre,Qre,$re,Jre,ene,tne,ine,rne,nne,TT,j3=M(()=>{"use strict";qs();q1();Z1();A3();Zs();rf();ZS();iT();N_();SM();TM();Vs();AM();bM();G3();H3();Bs();gT=new ft("#20242e"),Hre=.242,zre=.28,Xre=2.5,Yre=1.5,Kre=1.15,jre=180,V_=30,qre=8,Zre=28,Qre=18,$re=2,Jre=28,ene=.86,tne=1.08,ine=.62,rne=.86,nne=4;TT=class{constructor(e){this.raycaster=new jc;this.occlusionRaycaster=new jc;this.renderObservers=new Set;this.pointer=new It;this.annotationProjection=new se;this.annotationDirection=new se;this.clock={last:performance.now()};this.defaultLights=[];this.configLights=[];this.environmentTarget=null;this.rootObject=null;this.loadedExt="";this.resourceWarnings=[];this.renderHandle=0;this.contextLost=!1;this.quality="high";this.renderScale=1;this.interactivePixelRatioActive=!1;this.interactionPixelRatioDeadline=0;this.renderObserverSettleFrames=V_;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.wireframeOriginalMaterials=new Map;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 se;this.initialPosition=new se(3,2,3);this.initialFov=45;this.initialZoom=1;this.initialCameraMode="perspective";this.cameraMode="perspective";this.lastPointerDown=null;this.measurementActive=!1;this.measurementScale={x:1,y:1,z:1};this.measurementUnit="mm";this.measurementSegments=[];this.measurementMarkers=[];this.pendingPoint=null;this.pendingMarker=null;this.hoveredMarkerIndex=-1;this.lastPointerClient={x:0,y:0};this.previewLine=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.stlMaterial=null;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+jre,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.handlePointerMove=e=>{if(this.lastPointerClient={x:e.clientX,y:e.clientY},!this.measurementActive||(this.pendingPoint&&this.updatePreviewLine(),this.measurementMarkers.length===0))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.measurementMarkers,!1),r=i.length>0?this.measurementMarkers.indexOf(i[0].object):-1;if(r!==this.hoveredMarkerIndex){if(this.hoveredMarkerIndex>=0&&this.hoveredMarkerIndex=0&&r{e.preventDefault(),this.contextLost=!0,this.renderHandle&&(cancelAnimationFrame(this.renderHandle),this.renderHandle=0)};this.handleContextRestored=()=>{this.contextLost=!1,this.markDirty(),this.startRenderLoop()};this.renderer=new NS({canvas:e,antialias:!0,alpha:!0,preserveDrawingBuffer:!0,powerPreference:"high-performance"}),this.renderer.outputColorSpace=Ui,this.renderer.toneMapping=Ys,this.renderer.toneMappingExposure=1,this.renderer.shadowMap.enabled=!0,this.renderer.shadowMap.type=GE,this.renderer.shadowMap.autoUpdate=!1,this.renderer.shadowMap.needsUpdate=!0,this.renderer.setClearColor(gT,1),this.scene=new mh,this.installGlobalEnvironment(),this.camera=new fr(this.initialFov,1,.01,2e3),this.camera.position.copy(this.initialPosition),this.camera.lookAt(this.initialTarget),this.scene.add(this.camera),this.controls=new BS(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),e.addEventListener("pointermove",this.handlePointerMove),e.addEventListener("webglcontextlost",this.handleContextLost),e.addEventListener("webglcontextrestored",this.handleContextRestored),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 v3(e,this.loadedExt,i,r);s=c.scene,a=c.animations,this.resourceWarnings=c.warnings}else if(this.loadedExt==="stl")s=await E3(e),this.stlMaterial=Mh(s)?s.material:null;else if(this.loadedExt==="ply")s=await S3(e);else if(this.loadedExt==="obj"){let c=await T3(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 m_(s);for(let c of a)this.mixer.clipAction(c).play();this.animationPlaying=!0}let o=this.computeSummary(s);return this.fitCameraToObject(s),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),e.stl&&this.applySTLConfig(e.stl)}applySTLConfig(e){let t=this.stlMaterial;t&&(e.color!==void 0&&t.color.set(e.color),e.wireframe!==void 0&&(t.wireframe=e.wireframe,t.needsUpdate=!0),this.markDirty())}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),e.removeEventListener("pointermove",this.handlePointerMove),e.removeEventListener("webglcontextlost",this.handleContextLost),e.removeEventListener("webglcontextrestored",this.handleContextRestored),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(){let e=this.renderer.domElement;return nT({canvas:e,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&&hs(e)||t.rootName;return eT({title:r,format:this.loadedExt.toUpperCase(),summary:t,meshBreakdown:i.map(s=>({name:Ch(s,`mesh-${s.id}`),triangleCount:vT(s),vertexCount:ET(s),materialName:ST(va(s.material)[0])}))})}getModelEvidence(){if(!this.rootObject)return null;let e=this.getRenderableMeshes(this.rootObject),t=this.computeComponentPartSummaries(this.rootObject,e);return oT({summary:this.computeSummary(this.rootObject),renderableMeshes:e,groupedPartCandidates:t,createMeshPart:i=>this.computePartSummary(i),getMeshMaterialNames:i=>va(i.material).map(r=>ST(r)),resourceWarnings:this.resourceWarnings})}getSelectedPartInfo(){var t;let e=(t=this.focusedMesh)!=null?t:Mh(this._lastPickResult.mesh)?this._lastPickResult.mesh:null;return e?this.computePartSummary(e):null}exportSelectedPartInfo(){let e=this.getSelectedPartInfo();return e?tT(e):""}getPickWorldPoint(e){return e.pickedPoint&&typeof e.pickedPoint=="object"?Ht(e.pickedPoint):e.mesh instanceof ri?fn(wl(e.mesh)):null}onPick(e){return this._onPickCallbacks.push(e),()=>{this._onPickCallbacks=this._onPickCallbacks.filter(t=>t!==e)}}resetView(){this.rootObject&&PM(this.rootObject),this.resetDisassembly(),this.clearFocusedMesh(),this.clearSelectionHighlight(),this.switchCameraMode(this.initialCameraMode),this.camera.position.copy(this.initialPosition),this.controls.target.copy(this.initialTarget),this.camera.lookAt(this.controls.target),this.camera instanceof fr&&(this.camera.fov=this.initialFov),this.camera.zoom=this.initialZoom,this.camera.updateProjectionMatrix(),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 ri&&this.setFocusedMesh(this._lastPickResult.mesh)):this.clearFocusedMesh(),this.markDirty(),this.focusSelectionEnabled}isFocusSelectionEnabled(){return this.focusSelectionEnabled}setWireframe(e){e!==this.wireframeEnabled&&(this.wireframeEnabled=e,this.applyWireframe(e),this.markDirty())}toggleWireframe(){return this.setWireframe(!this.wireframeEnabled),this.wireframeEnabled}applyWireframe(e){if(this.rootObject)for(let t of this.getRenderableMeshes(this.rootObject))if(e){this.wireframeOriginalMaterials.set(t.id,t.material);let r=va(t.material).map(s=>{if(s instanceof Cn){let a=new jn({color:s.color,transparent:s.transparent,opacity:s.opacity,side:s.side,visible:s.visible});return a.wireframe=!0,a}if("wireframe"in s){let a=s.clone();return a.wireframe=!0,a}return s});t.material=Array.isArray(t.material)?r:r[0]}else{let i=this.wireframeOriginalMaterials.get(t.id);i&&(t.material=i),this.wireframeOriginalMaterials.delete(t.id)}}toggleOrientationGizmo(){if(!this.axesHelper){this.axesHelper=new Ru(1.2),this.axesHelper.visible=!1;let e=this.axesHelper.material;e.depthTest=!1,e.depthWrite=!1,this.axesHelper.renderOrder=999,this.scene.add(this.axesHelper)}return this.axesHelper.visible=!this.axesHelper.visible,this.axesHelper.position.copy(this.controls.target),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}toggleMeasurement(){return this.measurementActive=!this.measurementActive,this.measurementActive||this.clearMeasurements(),this.measurementActive}isMeasurementActive(){return this.measurementActive}clearMeasurements(){var e;this.measurementActive=!1,this.pendingPoint=null,this.pendingMarker=null,this.hoveredMarkerIndex=-1,this.removePreviewLine();for(let t of this.measurementSegments){t.line.removeFromParent(),t.line.geometry.dispose(),t.line.material.dispose(),t.label.removeFromParent();let i=t.label.material;(e=i.map)==null||e.dispose(),i.dispose()}this.measurementSegments=[];for(let t of this.measurementMarkers){t.removeFromParent(),t.geometry.dispose();let i=t.material;if(Array.isArray(i))for(let r of i)r.dispose();else i.dispose()}this.measurementMarkers=[],this.markDirty()}setMeasurementScale(e){this.measurementScale=B_(e),this.updateMeasurementLabels()}getMeasurementScale(){return{...this.measurementScale}}setMeasurementUnit(e){this.measurementUnit=lT(e),this.updateMeasurementLabels()}getMeasurementUnit(){return this.measurementUnit}getMeasurementBounds(){if(!this.rootObject)return null;let e=wl(this.rootObject);return Ur(e)}exportMeasurements(){return fT(this.createMeasurementRecords())}updateMeasurementLabels(){var t;if(this.measurementSegments.length===0)return;let e=this.getMeasurementMarkerSize()*4;for(let i of this.measurementSegments){let r=Bu(this.createMeasurementReading(i.start,i.end));i.label.removeFromParent();let s=i.label.material;(t=s.map)==null||t.dispose(),s.dispose();let a=new se().addVectors(i.start,i.end).multiplyScalar(.5);i.label=this.createMeasurementLabelSprite(r,a,e),this.scene.add(i.label)}this.markDirty()}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&&(W3(this.rootObject,e,t),this.markShadowDirty(),this.markDirty())}resetExplode(){this.rootObject&&(PM(this.rootObject),this.markShadowDirty(),this.markDirty())}focusWorldPoint(e){let t=new se(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=V3(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=window.requestAnimationFrame(o))};this.cameraAnimHandle=window.requestAnimationFrame(o)}startRenderLoop(){if(this.renderHandle||!this.viewportVisible||this.contextLost)return;let e=()=>{if(!this.viewportVisible||this.contextLost){this.renderHandle=0;return}this.renderHandle=window.requestAnimationFrame(e),this.renderNow(performance.now())};this.renderHandle=window.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=V_,(o=this.bboxHelper)==null||o.update(),(l=this.selectionHelper)==null||l.update(),(c=this.focusHelper)==null||c.update(),this.axesHelper&&this.axesHelper.visible&&this.axesHelper.position.copy(this.controls.target);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=Zre?(this.frameBudgetSlowStreak++,this.frameBudgetFastStreak=0):e<=Qre?(this.frameBudgetFastStreak++,this.frameBudgetSlowStreak=0):(this.frameBudgetSlowStreak=0,this.frameBudgetFastStreak=0),this.frameBudgetSlowStreak>=$re){this.frameBudgetSlowStreak=0;let t=Math.max(ine,this.frameBudgetPixelRatioScale*ene);t=Jre&&this.frameBudgetPixelRatioScale<1&&(this.frameBudgetFastStreak=0,this.frameBudgetPixelRatioScale=Math.min(1,this.frameBudgetPixelRatioScale*tne),this.frameBudgetObserverStride=Math.max(1,this.frameBudgetObserverStride-1),this.renderObserverSettleFrames=V_,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=V_,e&&this.markDirty()}shouldDeferShadowRefresh(){return this.interactivePixelRatioActive&&this.frameBudgetPixelRatioScale<=rne}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 instanceof gs?this.updateOrthographicFrustum(t/i):this.camera.aspect=t/i,this.camera.updateProjectionMatrix(),this.markDirty()}computeOrthographicViewSpan(){if(!this.rootObject)return 2;let e=wl(this.rootObject),t=Ur(e);return Math.max(t.x,t.y,t.z,1)*1.2}updateOrthographicFrustum(e){if(!(this.camera instanceof gs))return;let i=this.computeOrthographicViewSpan()/2,r=i*e;this.camera.left=-r,this.camera.right=r,this.camera.top=i,this.camera.bottom=-i}updateOrthographicFrustumForCamera(e,t){let r=this.computeOrthographicViewSpan()/2,s=r*t;e.left=-s,e.right=s,e.top=r,e.bottom=-r,e.updateProjectionMatrix()}switchCameraMode(e){if(this.cameraMode===e&&(e==="perspective"&&this.camera instanceof fr||e==="orthographic"&&this.camera instanceof gs))return;let t=this.renderer.domElement,i=Math.max(1,Math.round(t.clientWidth||t.width||1)),r=Math.max(1,Math.round(t.clientHeight||t.height||1)),s=i/r,a=this.camera,o=a.position.clone(),l=this.controls.target.clone(),c=a.zoom||1,f=a.near,h=a.far;if(this.scene.remove(a),e==="orthographic"){let d=new gs(-1,1,1,-1,f,h);d.position.copy(o),d.zoom=c,d.lookAt(l),this.updateOrthographicFrustumForCamera(d,s),this.camera=d}else{let d=new fr(this.initialFov,s,f,h);d.position.copy(o),d.zoom=c,d.lookAt(l),this.camera=d}this.scene.add(this.camera),this.controls.object=this.camera,this.controls.target.copy(l),this.controls.update(),this.cameraMode=e}applyCameraConfig(e){var i;let t=(i=e.mode)!=null?i:this.cameraMode;e.mode&&(this.initialCameraMode=e.mode),this.switchCameraMode(t),this.camera instanceof fr&&typeof e.fov=="number"&&Number.isFinite(e.fov)&&(this.camera.fov=e.fov,this.initialFov=e.fov),e.position&&(this.camera.position.set(...e.position),this.initialPosition.set(...e.position)),e.lookAt&&(this.controls.target.set(...e.lookAt),this.camera.lookAt(this.controls.target),this.initialTarget.set(...e.lookAt)),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.initialZoom=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(gT,0);else if(this.sceneConfig.background){let t=new ft(this.sceneConfig.background);this.scene.background=t,this.renderer.setClearColor(t,1)}else this.scene.background=gT,this.renderer.setClearColor(gT,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 Au(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 Ou(this.renderer),t=new VS;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 ft(e.color):new ft(16777215),i=(r=e.intensity)!=null?r:1;switch(e.type){case"ambient":return new Au(t,i);case"hemisphere":{let h=e.groundColor?new ft(e.groundColor):new ft(4473924);return new Tu(t,h,i)}case"directional":{let h=new Go(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 qa(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 Ll(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 qa(t,i);return this.camera.add(h),h}default:return null}}disposeConfiguredLight(e){(e instanceof Go||e instanceof Ll)&&e.target.removeFromParent(),e.removeFromParent(),e.dispose()}prepareModelForQuality(e){let t=this.renderer.capabilities.getMaxAnisotropy();e.traverse(i=>{if(Mh(i)){i.castShadow=!0,i.receiveShadow=!0;for(let r of va(i.material))this.prepareMaterialForQuality(r,t)}})}prepareMaterialForQuality(e,t){let i=e;for(let r of Object.values(i))r instanceof xr&&(r.anisotropy=Math.max(r.anisotropy,t),r.needsUpdate=!0);e.needsUpdate=!0}applyShadowQuality(){let e=this.shadowMapSize();for(let t of this.allLights())!z3(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 Tr().setFromObject(this.rootObject),t=e.getCenter(new se),i=e.getSize(new se),r=Math.max(i.x,i.y,i.z,1)*1.8;for(let s of this.allLights())if(!(!z3(s)||!s.castShadow)){if(s.shadow.mapSize.set(this.shadowMapSize(),this.shadowMapSize()),s.shadow.bias=-12e-5,s.shadow.normalBias=.018,s instanceof Go){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 gs){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){if(!this.axesHelper){this.axesHelper=new Ru(1.2);let t=this.axesHelper.material;t.depthTest=!1,t.depthWrite=!1,this.axesHelper.renderOrder=999,this.scene.add(this.axesHelper)}this.axesHelper.visible=e,this.axesHelper.position.copy(this.controls.target)}createGroundShadow(){if(!this.rootObject||this.groundShadowMesh)return;let e=wl(this.rootObject),t=fn(e),i=Ur(e),r=Math.max(i.x,i.z,1)*3,s=e.min.y-Math.max(r*.002,.002),a=new ri(new gh(r,r),new o_({color:0,opacity:zre,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 va(this.groundShadowMesh.material))e.dispose();this.groundShadowMesh=null}}createGrid(){if(!this.rootObject||this.gridHelper)return;let e=wl(this.rootObject),t=fn(e),i=Ur(e),r=Math.max(i.x,i.z,1)*2,s=new p_(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 va(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 va(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 ri?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};if(this._lastPickResult=s,this.measurementActive&&(i!=null&&i.point)){this.addMeasurementPoint(i.point.clone());return}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(),this.clearMeasurements(),this.wireframeEnabled=!1,this.wireframeOriginalMaterials.clear(),this.stlMaterial=null,(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++,!Mh(l))return;a++;let c=l.geometry;c&&!i.has(c.uuid)&&(c.dispose(),i.add(c.uuid));for(let f of va(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 xr&&!i.has(s.uuid))s.dispose(),i.add(s.uuid);else if(Array.isArray(s))for(let a of s)a instanceof xr&&!i.has(a.uuid)&&(a.dispose(),i.add(a.uuid));t.has(e.uuid)||(e.dispose(),t.add(e.uuid))}fitCameraToObject(e){let t=wl(e),i=M3(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=Ur(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.axesHelper&&(this.axesHelper.position.copy(this.controls.target),this.axesHelper.scale.setScalar(Math.max(.5,s*.25))),this.camera.near=i.near,this.camera.far=i.far,this.camera.updateProjectionMatrix(),this.markDirty()}getAnnotationCameraStateKey(){return sT([{value:this.camera.position.x,digits:3},{value:this.camera.position.y,digits:3},{value:this.camera.position.z,digits:3},{value:this.controls.target.x,digits:2},{value:this.controls.target.y,digits:2},{value:this.controls.target.z,digits:2},{value:this.camera instanceof fr?this.camera.fov:this.camera.zoom,digits:this.camera instanceof fr?2:3}])}projectAnnotationWorldPoint(e,t){let i=this.renderer.domElement;return!i.isConnected||i.clientWidth===0||i.clientHeight===0?!1:(this.scene.updateMatrixWorld(),this.camera.updateMatrixWorld(),this.annotationProjection.set(e.x,e.y,e.z).project(this.camera),N3(this.annotationProjection,i,t))}isAnnotationWorldPointOccluded(e){if(!this.rootObject)return!1;let t=wc(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&&Nc(i.distance,t.distance,t.epsilon)}getRenderableMeshes(e){if(this.cachedMeshes&&this.cachedMeshRoot===e)return this.cachedMeshes;let t=[];return e.traverse(i=>{Mh(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 Dl(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 Dl(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=sne(o);this.focusDimMaterials.set(a.id,l),a.material=l}(s=this.focusHelper)==null||s.removeFromParent(),this.focusHelper=new Dl(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())ane(e);this.focusDimMaterials.clear()}clearSelectionHighlight(){var e;(e=this.selectionHelper)==null||e.removeFromParent(),this.selectionHelper=null,this.highlightedMesh=null,this.markDirty()}getMeasurementMarkerSize(){if(!this.rootObject)return .02;let e=wl(this.rootObject),t=Ur(e);return Math.max(t.x,t.y,t.z,.001)*.015}findNearestMarkerIndex(e){let t=this.getMeasurementMarkerSize()*2.5;for(let i=0;i=0?this.measurementMarkers[t].position.clone():e;if(this.pendingPoint){if(i.distanceTo(this.pendingPoint)<1e-4)return;if(t<0){let r=this.getMeasurementMarkerSize(),s=new Su(r,16,16),a=new jn({color:16739179,depthTest:!1}),o=new ri(s,a);o.position.copy(i),o.renderOrder=999,this.scene.add(o),this.measurementMarkers.push(o)}this.createMeasurementSegment(this.pendingPoint,i),this.pendingMarker&&(this.pendingMarker.scale.setScalar(1),this.pendingMarker.material.color.setHex(16739179)),this.pendingPoint=null,this.pendingMarker=null,this.removePreviewLine()}else{if(t<0){let r=this.getMeasurementMarkerSize(),s=new Su(r,16,16),a=new jn({color:16739179,depthTest:!1}),o=new ri(s,a);o.position.copy(i),o.renderOrder=999,this.scene.add(o),this.measurementMarkers.push(o),this.pendingMarker=o}else this.pendingMarker=this.measurementMarkers[t];this.pendingMarker.scale.setScalar(1.6),this.pendingMarker.material.color.setHex(5361510),this.pendingPoint=i,this.ensurePreviewLine()}this.markDirty()}createMeasurementSegment(e,t){let i=new Hi().setFromPoints([e,t]),r=new wo(i,new Mn({color:16739179,depthTest:!1}));r.renderOrder=998,this.scene.add(r);let s=Bu(this.createMeasurementReading(e,t)),a=new se().addVectors(e,t).multiplyScalar(.5),o=this.createMeasurementLabelSprite(s,a,this.getMeasurementMarkerSize()*4);this.scene.add(o),this.measurementSegments.push({start:e,end:t,line:r,label:o})}createMeasurementLabelSprite(e,t,i){let r=activeDocument.createEl("canvas"),s=r.getContext("2d");r.width=640,r.height=160,s.fillStyle="rgba(32, 36, 46, 0.9)",s.beginPath(),s.roundRect(0,0,640,160,18),s.fill(),s.strokeStyle="#ff6b6b",s.lineWidth=4,s.stroke(),s.fillStyle="#ffffff",s.textAlign="center",s.textBaseline="middle",s.font="bold 46px sans-serif",s.fillText(e.primary,320,58),s.font="28px sans-serif",s.fillStyle="rgba(255, 255, 255, 0.82)",s.fillText(e.secondary,320,112);let a=new s_(r),o=new _u({map:a,depthTest:!1}),l=new e_(o);return l.position.copy(t),l.scale.set(i*5,i*1.25,1),l.renderOrder=1e3,l}ensurePreviewLine(){if(this.previewLine)return;let e=new Hi().setFromPoints([new se,new se]);this.previewLine=new wo(e,new Mn({color:16777215,transparent:!0,opacity:.5,depthTest:!1})),this.previewLine.renderOrder=997,this.scene.add(this.previewLine)}updatePreviewLine(){if(!this.pendingPoint||!this.previewLine||!this.rootObject)return;let e=this.renderer.domElement.getBoundingClientRect();this.pointer.x=(this.lastPointerClient.x-e.left)/e.width*2-1,this.pointer.y=-((this.lastPointerClient.y-e.top)/e.height)*2+1,this.raycaster.setFromCamera(this.pointer,this.camera);let t=this.raycaster.intersectObjects(this.getRenderableMeshes(this.rootObject),!1)[0],i;t!=null&&t.point?i=t.point.clone():i=this.pendingPoint.clone().add(this.raycaster.ray.direction.clone().multiplyScalar(5));let r=this.previewLine.geometry.getAttribute("position");r.setXYZ(0,this.pendingPoint.x,this.pendingPoint.y,this.pendingPoint.z),r.setXYZ(1,i.x,i.y,i.z),r.needsUpdate=!0,this.previewLine.geometry.computeBoundingSphere(),this.markDirty()}removePreviewLine(){this.previewLine&&(this.previewLine.removeFromParent(),this.previewLine.geometry.dispose(),this.previewLine.material.dispose(),this.previewLine=null)}createMeasurementReading(e,t){return cT(this.toMeasurementPoint(e),this.toMeasurementPoint(t),this.measurementScale,this.measurementUnit)}createMeasurementRecords(){return this.measurementSegments.map((e,t)=>({index:t+1,start:this.toMeasurementPoint(e.start),end:this.toMeasurementPoint(e.end),reading:this.createMeasurementReading(e.start,e.end)}))}toMeasurementPoint(e){return{x:e.x,y:e.y,z:e.z}}computePartSummary(e){e.updateWorldMatrix(!0,!1);let t=wl(e),i=Ch(e,`mesh-${e.id}`),r=nf(e.userData,{name:i,path:this.rootObject?LM(this.rootObject,e):i});return Ih({name:X3(r,i),triangleCount:vT(e),vertexCount:ET(e),materialName:ST(va(e.material)[0]),boundingSize:Ur(t),center:fn(t),source:r.hasExplicitIdentity?"component":"mesh",meshNames:[i],childCount:1,componentId:r.componentId,occurrenceId:r.occurrenceId,partNumber:r.partNumber,componentPath:r.componentPath})}computeComponentPartSummaries(e,t){let i=new Set(t),r=[],s=new Set,a=[];return e.updateWorldMatrix(!0,!0),e.traverse(o=>{if(o===e||Mh(o))return;let l=[];if(o.traverse(f=>{Mh(f)&&i.has(f)&&l.push(f)}),l.length<2||l.length===t.length){let f=nf(o.userData,{name:Ch(o,`component-${o.id}`),path:LM(e,o)});if(!f.hasExplicitIdentity||l.length<1||l.length===t.length)return;a.push({object:o,childMeshes:l,identity:f});return}let c=nf(o.userData,{name:Ch(o,`group-${o.id}`),path:LM(e,o)});!c.hasExplicitIdentity&&!o.name.trim()||a.push({object:o,childMeshes:l,identity:c})}),a.sort((o,l)=>o.childMeshes.length-l.childMeshes.length).forEach(({object:o,childMeshes:l,identity:c})=>{let f=l.filter(p=>!s.has(p));if(f.length<1||!c.hasExplicitIdentity&&f.length<2)return;for(let p of f)s.add(p);let h=new Tr;for(let p of f)p.updateWorldMatrix(!0,!1),h.union(new Tr().setFromObject(p));let d=new Set,u=0,m=0;for(let p of f){u+=vT(p),m+=ET(p);for(let _ of va(p.material)){let g=ST(_);g&&d.add(g)}}r.push(Ih({name:X3(c,Ch(o,`group-${o.id}`)),triangleCount:u,vertexCount:m,materialName:aT(d),boundingSize:Ur({min:Ht(h.min),max:Ht(h.max)}),center:fn({min:Ht(h.min),max:Ht(h.max)}),source:c.hasExplicitIdentity?"component":"group",meshNames:f.map(p=>Ch(p,`mesh-${p.id}`)),childCount:f.length,componentId:c.componentId,occurrenceId:c.occurrenceId,partNumber:c.partNumber,componentPath:c.componentPath}))}),{parts:r,groupedMeshes:s}}computeSummary(e){let t=this.getRenderableMeshes(e);return $S({rootName:e.name||"__root__",boundingSize:Ur(wl(e)),meshes:t.map(i=>({triangleCount:vT(i),vertexCount:ET(i),materialKeys:va(i.material).map(r=>r.uuid)})),resourceWarnings:this.resourceWarnings})}}});var lne,DM,OM,ie,di=M(()=>{lne=typeof WeakRef!="undefined",DM=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}},OM=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)}},ie=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 DM(0),e&&(this._onObserverAdded=e)}add(e,t=-1,i=!1,r=null,s=!1){if(!e)return null;let a=new OM(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=lne?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 AT,q3=M(()=>{AT=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 Z3,Di,Ts=M(()=>{di();q3();(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"})(Z3||(Z3={}));Di=class n extends AT{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 ie,this.onErrorObservable=new ie,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)}};Di._Counter=0});var Oe,Oi=M(()=>{di();Oe=class{static get LastCreatedEngine(){return this.Instances.length===0?null:this.Instances[this.Instances.length-1]}static get LastCreatedScene(){return this._LastCreatedScene}};Oe.Instances=[];Oe.OnEnginesDisposedObservable=new ie;Oe._LastCreatedScene=null;Oe.UseFallbackTexture=!0;Oe.FallbackTexture=""});var ee,Pt=M(()=>{ee=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)}}};ee.NoneLogLevel=0;ee.MessageLogLevel=1;ee.WarningLogLevel=2;ee.ErrorLogLevel=4;ee.AllLogLevel=7;ee.MessageLimitReached="Too many %TYPE%s (%LIMIT%), no more %TYPE%s will be reported for this message.";ee._LogCache="";ee._LogLimitOutputs={};ee._Levels=[{},{color:"white",logFunc:console.log,name:"Log"},{color:"orange",logFunc:console.warn,name:"Warn"},{},{color:"red",logFunc:console.error,name:"Error"}];ee.errorsCount=0;ee.Log=ee._LogEnabled.bind(ee,ee.MessageLogLevel);ee.Warn=ee._LogEnabled.bind(ee,ee.WarningLogLevel);ee.Error=ee._LogEnabled.bind(ee,ee.ErrorLogLevel)});var T,G=M(()=>{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 dr(){return typeof window!="undefined"}function Fl(){return typeof navigator!="undefined"}function sf(){return typeof document!="undefined"}function xT(n){let e="",t=n.firstChild;for(;t;)t.nodeType===3&&(e+=t.textContent),t=t.nextSibling;return e}var Ea=M(()=>{});var RT,Q3=M(()=>{RT=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 Ze(n,e=!1){if(!(e&&$3[n]))return $3[n]=!0,`${n} needs to be imported before as it contains a side-effect required by your code.`}var $3,hn=M(()=>{$3={}});function bT(n,e,t=""){return t+(e?e+` -`:"")+n}function IT(n,e,t,i,r,s,a){let o=a||Vu.loadFile;if(o)return o(n,e,t,i,r,s);throw Ze("FileTools")}function MT(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?(zS.setRGB(parseFloat(h[4]),parseFloat(h[5]),parseFloat(h[6]),Ii),t.colors.push(zS.r,zS.g,zS.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(a3),u=[];for(let p=0,_=d.length;p<_;p++){let g=d[p];if(g.length>0){let v=g.split("/");u.push(v)}}let m=u[0];for(let p=1,_=u.length-1;p<_;p++){let g=u[p],v=u[p+1];t.addFace(m[0],g[0],v[0],m[1],g[1],v[1],m[2],g[2],v[2])}}else if(f==="l"){let h=c.substring(1).trim().split(" "),d=[],u=[];if(c.indexOf("/")===-1)d=h;else for(let m=0,p=h.length;m1){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 Xs;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&&p.setAttribute("normal",new fi(f.normals,3)),f.colors.length>0&&(m=!0,p.setAttribute("color",new fi(f.colors,3))),f.hasUVIndices===!0&&p.setAttribute("uv",new fi(f.uvs,2));let _=[];for(let v=0,x=h.length;v1){for(let v=0,x=h.length;v0){let o=new us({size:1,sizeAttenuation:!1}),l=new Hi;l.setAttribute("position",new fi(t.vertices,3)),t.colors.length>0&&t.colors[0]!==void 0&&(l.setAttribute("color",new fi(t.colors,3)),o.vertexColors=!0);let c=new ms(l,o);s.add(c)}return s}}});var xs,YS,zI,h3=M(()=>{Ts();xs=new ft,YS=class extends cn{constructor(e){super(e),this.propertyNameMapping={},this.customPropertyMapping={}}load(e,t,i,r){let s=this,a=new gs(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(_,g=0){let v=/^ply([\s\S]*)end_header(\r\n|\r|\n)/,x="",T=v.exec(_);T!==null&&(x=T[1]);let E={comments:[],elements:[],headerLength:g,objInfo:""},S=x.split(/\r\n|\r|\n/),R;function I(C,y){let D={type:C[0]};return D.type==="list"?(D.name=C[3],D.countType=C[1],D.itemType=C[2]):D.name=C[1],D.name in y&&(D.name=y[D.name]),D}for(let C=0;Cx.name);function v(x){for(let T=0,E=x.length;T0&&g.setIndex(_.indices),g.setAttribute("position",new fi(_.vertices,3)),_.normals.length>0&&g.setAttribute("normal",new fi(_.normals,3)),_.uvs.length>0&&g.setAttribute("uv",new fi(_.uvs,2)),_.colors.length>0&&g.setAttribute("color",new fi(_.colors,3)),(_.faceVertexUvs.length>0||_.faceVertexColors.length>0)&&(g=g.toNonIndexed(),_.faceVertexUvs.length>0&&g.setAttribute("uv",new fi(_.faceVertexUvs,2)),_.faceVertexColors.length>0&&g.setAttribute("color",new fi(_.faceVertexColors,3)));for(let v of Object.keys(p.customPropertyMapping))_[v].length>0&&g.setAttribute(v,new fi(_[v],p.customPropertyMapping[v].length));return g.computeBoundingSphere(),g}function c(_,g,v,x){if(g==="vertex"){_.vertices.push(v[x.attrX],v[x.attrY],v[x.attrZ]),x.attrNX!==null&&x.attrNY!==null&&x.attrNZ!==null&&_.normals.push(v[x.attrNX],v[x.attrNY],v[x.attrNZ]),x.attrS!==null&&x.attrT!==null&&_.uvs.push(v[x.attrS],v[x.attrT]),x.attrR!==null&&x.attrG!==null&&x.attrB!==null&&(xs.setRGB(v[x.attrR]/255,v[x.attrG]/255,v[x.attrB]/255,Ii),_.colors.push(xs.r,xs.g,xs.b));for(let T of Object.keys(p.customPropertyMapping))for(let E of p.customPropertyMapping[T])_[T].push(v[E])}else if(g==="face"){let T=v.vertex_indices||v.vertex_index,E=v.texcoord;T.length===3?(_.indices.push(T[0],T[1],T[2]),E&&E.length===6&&(_.faceVertexUvs.push(E[0],E[1]),_.faceVertexUvs.push(E[2],E[3]),_.faceVertexUvs.push(E[4],E[5]))):T.length===4&&(_.indices.push(T[0],T[1],T[3]),_.indices.push(T[1],T[2],T[3])),x.attrR!==null&&x.attrG!==null&&x.attrB!==null&&(xs.setRGB(v[x.attrR]/255,v[x.attrG]/255,v[x.attrB]/255,Ii),_.faceVertexColors.push(xs.r,xs.g,xs.b),_.faceVertexColors.push(xs.r,xs.g,xs.b),_.faceVertexColors.push(xs.r,xs.g,xs.b))}}function f(_,g){let v={},x=0;for(let T=0;TT.getInt8(R),size:1};case"uint8":case"uchar":return{read:R=>T.getUint8(R),size:1};case"int16":case"short":return{read:R=>T.getInt16(R,S),size:2};case"uint16":case"ushort":return{read:R=>T.getUint16(R,S),size:2};case"int32":case"int":return{read:R=>T.getInt32(R,S),size:4};case"uint32":case"uint":return{read:R=>T.getUint32(R,S),size:4};case"float32":case"float":return{read:R=>T.getFloat32(R,S),size:4};case"float64":case"double":return{read:R=>T.getFloat64(R,S),size:8}}}for(let T=0,E=_.length;T=this.arr.length}next(){return this.arr[this.i++]}}});var KS,d3=M(()=>{Ts();KS=class extends cn{constructor(e){super(e)}load(e,t,i,r){let s=this,a=new gs(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 p=0;p<5;p++)if(i(m,f,p))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,te=D*3*3+(U-1)*3;I[te]=f.getFloat32(W,!0),I[te+1]=f.getFloat32(W+4,!0),I[te+2]=f.getFloat32(W+8,!0),C[te]=V,C[te+1]=N,C[te+2]=w,p&&(y.setRGB(d,u,m,Ii),_[te]=y.r,_[te+1]=y.g,_[te+2]=y.b)}}return R.setAttribute("position",new hr(I,3)),R.setAttribute("normal",new hr(C,3)),p&&(R.setAttribute("color",new hr(_,3)),R.hasColors=!0,R.alpha=T),R}function s(c){let f=new Hi,h=/solid([\s\S]*?)endsolid/g,d=/facet([\s\S]*?)endfacet/g,u=/solid\s(.+)/,m=0,p=/[\s]+([+-]?(?:\d*)(?:\.\d*)?(?:[eE][+-]?\d+)?)/.source,_=new RegExp("vertex"+p+p+p,"g"),g=new RegExp("normal"+p+p+p,"g"),v=[],x=[],T=[],E=new se,S,R=0,I=0,C=0;for(;(S=h.exec(c))!==null;){I=C;let y=S[0],D=(S=u.exec(y))!==null?S[1]:"";for(T.push(D);(S=d.exec(y))!==null;){let N=0,w=0,U=S[0];for(;(S=g.exec(U))!==null;)E.x=parseFloat(S[1]),E.y=parseFloat(S[2]),E.z=parseFloat(S[3]),w++;for(;(S=_.exec(U))!==null;)v.push(parseFloat(S[1]),parseFloat(S[2]),parseFloat(S[3])),x.push(E.x,E.y,E.z),N++,C++;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=C-I;f.userData.groupNames=T,f.addGroup(O,V,R),R++}return f.setAttribute("position",new fi(v,3)),f.setAttribute("normal",new fi(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{Ts()});function m3(n){let e=new Map,t=new Map,i=n.clone();return p3(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 p3(n,e,t){t(n,e);for(let i=0;i{});function Tre(){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 Br(n,e,t){let i=n.json.materials[e];return i.extensions&&i.extensions[t]?i.extensions[t]:null}function Rre(n){return n.DefaultMaterial===void 0&&(n.DefaultMaterial=new pn({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:Ys})),n.DefaultMaterial}function bh(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 Yo(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 bre(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 Pre(n,e,t){let i=e.attributes,r=new Ar;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 se(l[0],l[1],l[2]),new se(c[0],c[1],c[2])),o.normalized){let f=vM(Fu[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 se,l=new se;for(let c=0,f=s.length;c{Ts();u3();_3();jS=class extends cn{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(t){return new $I(t)}),this.register(function(t){return new JI(t)}),this.register(function(t){return new lM(t)}),this.register(function(t){return new cM(t)}),this.register(function(t){return new fM(t)}),this.register(function(t){return new tM(t)}),this.register(function(t){return new iM(t)}),this.register(function(t){return new rM(t)}),this.register(function(t){return new nM(t)}),this.register(function(t){return new QI(t)}),this.register(function(t){return new sM(t)}),this.register(function(t){return new eM(t)}),this.register(function(t){return new oM(t)}),this.register(function(t){return new aM(t)}),this.register(function(t){return new qI(t)}),this.register(function(t){return new qS(t,Ei.EXT_MESHOPT_COMPRESSION)}),this.register(function(t){return new qS(t,Ei.KHR_MESHOPT_COMPRESSION)}),this.register(function(t){return new hM(t)})}load(e,t,i,r){let s=this,a;if(this.resourcePath!=="")a=this.resourcePath;else if(this.path!==""){let c=Za.extractUrlBase(e);a=Za.resolveURL(c,this.path)}else a=Za.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 gs(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))===T3){try{a[Ei.KHR_BINARY_GLTF]=new dM(e)}catch(h){r&&r(h);return}s=JSON.parse(a[Ei.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 EM(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)})}};Ei={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"},qI=class{constructor(e){this.parser=e,this.name=Ei.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)}},cM=class{constructor(e){this.parser=e,this.name=Ei.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)}},fM=class{constructor(e){this.parser=e,this.name=Ei.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)}},qS=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}},hM=class{constructor(e){this.name=Ei.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!==ga.TRIANGLES&&c.mode!==ga.TRIANGLE_STRIP&&c.mode!==ga.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 p=new li,_=new se,g=new Qr,v=new se(1,1,1),x=new _h(m.geometry,m.material,d);for(let T=0;T-1,a=s?o.match(/Firefox\/([0-9]+)\./)[1]:-1}typeof createImageBitmap=="undefined"||i&&r<17||s&&a<98?this.textureLoader=new Sh(this.options.manager):this.textureLoader=new m_(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new gs(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 bh(s,o,r),Yo(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&&_.setY(C,S[R*l+1]),l>=3&&_.setZ(C,S[R*l+2]),l>=4&&_.setW(C,S[R*l+3]),l>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}_.normalized=m}return _})}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=v3[d.magFilter]||wr,f.minFilter=v3[d.minFilter]||Qa,f.wrapS=E3[d.wrapS]||Oo,f.wrapT=E3[d.wrapT]||Oo,f.generateMipmaps=!f.isCompressedTexture&&f.minFilter!==Nr&&f.minFilter!==wr,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(p){let _=new Tr(p);_.needsUpdate=!0,d(_)}),t.load(Za.resolveURL(h,s.path),m,void 0,u)})}).then(function(h){return c===!0&&o.revokeObjectURL(l),Yo(h,a),h.userData.mimeType=a.mimeType||Cre(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[Ei.KHR_TEXTURE_TRANSFORM]){let o=i.extensions!==void 0?i.extensions[Ei.KHR_TEXTURE_TRANSFORM]:void 0;if(o){let l=s.associations.get(a);a=s.extensions[Ei.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 us,Fr.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 yn,Fr.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 pn}loadMaterial(e){let t=this,i=this.json,r=this.extensions,s=i.materials[e],a,o={},l=s.extensions||{},c=[];if(l[Ei.KHR_MATERIALS_UNLIT]){let h=r[Ei.KHR_MATERIALS_UNLIT];a=h.getMaterialType(),c.push(h.extendParams(o,s,t))}else{let h=s.pbrMetallicRoughness||{};if(o.color=new ft(1,1,1),o.opacity=1,Array.isArray(h.baseColorFactor)){let d=h.baseColorFactor;o.color.setRGB(d[0],d[1],d[2],jn),o.opacity=d[3]}h.baseColorTexture!==void 0&&c.push(t.assignTexture(o,"map",h.baseColorTexture,Ii)),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=pa);let f=s.alphaMode||KI.OPAQUE;if(f===KI.BLEND?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,f===KI.MASK&&(o.alphaTest=s.alphaCutoff!==void 0?s.alphaCutoff:.5)),s.normalTexture!==void 0&&a!==qn&&(c.push(t.assignTexture(o,"normalMap",s.normalTexture)),o.normalScale=new It(1,1),s.normalTexture.scale!==void 0)){let h=s.normalTexture.scale;o.normalScale.set(h,h)}if(s.occlusionTexture!==void 0&&a!==qn&&(c.push(t.assignTexture(o,"aoMap",s.occlusionTexture)),s.occlusionTexture.strength!==void 0&&(o.aoMapIntensity=s.occlusionTexture.strength)),s.emissiveFactor!==void 0&&a!==qn){let h=s.emissiveFactor;o.emissive=new ft().setRGB(h[0],h[1],h[2],jn)}return s.emissiveTexture!==void 0&&a!==qn&&c.push(t.assignTexture(o,"emissiveMap",s.emissiveTexture,Ii)),Promise.all(c).then(function(){let h=new a(o);return s.name&&(h.name=s.name),Yo(h,s),t.associations.set(h,{materials:e}),s.extensions&&bh(r,h,s),h})}createUniqueName(e){let t=$i.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[Ei.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(o,t).then(function(l){return S3(l,o,t)})}let a=[];for(let o=0,l=e.length;o0&&Ire(g,s),g.name=t.createUniqueName(s.name||"mesh_"+e),Yo(g,s),_.extensions&&bh(r,g,_),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 se().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 gu:c.length>1?f=new Xs: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 Xs;i.name&&(s.name=r.createUniqueName(i.name)),Yo(s,i),i.extensions&&bh(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 Fr||d instanceof Tr)&&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)}tf[s.path]===tf.weights?(c(e),e.isGroup&&e.children.forEach(c)):l.push(o);let f;switch(tf[s.path]){case tf.weights:f=Uo;break;case tf.rotation:f=Vo;break;case tf.translation:case tf.scale:f=Go;break;default:i.itemSize===1?f=Uo:f=Go;break}let h=r.interpolation!==void 0?xre[r.interpolation]:dh,d=this._getArrayFromAccessor(i);for(let u=0,m=l.length;u{"use strict"});function Dre(n){return Lre.has(n)}function $S(n,e){let t=n,i={textureCount:0,colorTextureCount:0,srgbColorTextureCount:0};for(let[r,s]of Object.entries(t))s instanceof Tr&&(i.textureCount++,s.anisotropy=Math.max(s.anisotropy,e),Dre(r)&&(i.colorTextureCount++,s.colorSpace=Ii,i.srgbColorTextureCount++),s.needsUpdate=!0);return n.needsUpdate=!0,i}function SM(n){n.boundingBox||n.computeBoundingBox();let e=n.boundingBox;if(!e)return .02;let t=e.getSize(new se),i=Math.max(t.x,t.y,t.z);return!Number.isFinite(i)||i<=0?.02:Math.min(Math.max(i/180,5e-4),.05)}var Lre,TM=M(()=>{"use strict";Ts();Lre=new Set(["map","emissiveMap","specularMap","specularColorMap","sheenColorMap","clearcoatColorMap"])});function b3(n){var t,i,r;let e=(i=(t=n.split(".").pop())==null?void 0:t.toLowerCase())!=null?i:"png";return(r=Ore[e])!=null?r:`image/${e}`}function wre(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 Fre(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 R3(n,e,t){let i=Gs(e,t);try{return{data:await n(i),path:i}}catch(r){throw new Error(`Missing external model resource: ${i}`)}}function Bre(n,e,t){let i=hs(e),r=i.replace(/\.[^.]+$/,""),s=qr(t),a=[Gs(n,e),Gs(n,i)];if(s)for(let o of x3)a.push(Gs(n,`${s}.${o}`));for(let o of x3){let l=`${r}.${o}`;l!==i&&a.push(Gs(n,l))}return a}async function I3(n,e,t,i){var l,c;let r=new jS,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 R3(t,d,g.uri);g.uri=`data:application/octet-stream;base64,${wl(v.data)}`}}if(h.images){for(let g of h.images)if(g.uri&&!g.uri.startsWith("data:")){let v=await R3(t,d,g.uri);g.uri=`data:${b3(v.path)};base64,${wl(v.data)}`}}let u=JSON.stringify(h),m=new TextEncoder().encode(u),p=await r.parseAsync(m.buffer,d?`${d}/`:""),_=p.scene||((l=p.scenes)==null?void 0:l[0]);if(!_)throw new Error("GLTF did not contain a scene");return{scene:_,animations:p.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 M3(n){let t=new KS().parse(n),i=t.hasAttribute("color")?new pn({color:16777215,vertexColors:!0}):new pn({color:13421772}),r=new ti(t,i);return r.name=hs("")||"stl-model",r}async function C3(n){let t=new YS().parse(n),i=!!t.index||t.hasAttribute("normal");if(t.hasAttribute("color")){if(i){t.hasAttribute("normal")||t.computeVertexNormals();let a=new pn({vertexColors:!0});return new ti(t,a)}let s=new us({size:SM(t),vertexColors:!0});return new ms(t,s)}if(i){t.hasAttribute("normal")||t.computeVertexNormals();let s=new pn({color:13421772});return new ti(t,s)}let r=new us({size:SM(t),color:13421772});return new ms(t,r)}function Ure(n){return n?Array.isArray(n)?n:[n]:[]}function Vre(n){n.traverse(e=>{if(e instanceof ti)for(let t of Ure(e.material))$S(t,1)})}async function y3(n,e,t){let i=new TextDecoder().decode(new Uint8Array(n)),r=[],s=null,a=i.match(/mtllib\s+(.+)/);if(a&&e&&t){let c=wre(a[1]),f=Op(t),h=Gs(f,c);try{let d=await e(h),m=new TextDecoder().decode(new Uint8Array(d)).split(` +`),p=new Map;for(let T=0;TT!=="");if(!_.some(T=>/^\s*Kd\s+/i.test(T))){let T=_.findIndex(E=>/^\s*newmtl\s+/i.test(E));_.splice(T>=0?T+1:0,0,"Kd 0.80 0.80 0.80")}let x=new HS().parse(_.join(` +`),f?`${f}/`:"");x.preload(),s=x}catch(d){r.push(`OBJ material library not found: ${h}`)}}else a&&(!e||!t)&&r.push("OBJ material library could not be resolved without a model path.");let o=new XS;s&&o.setMaterials(s);let l=o.parse(i);return Vre(l),{object:l,warnings:r}}var Ore,x3,Nre,P3=M(()=>{"use strict";s3();f3();h3();d3();A3();Ts();ks();QS();TM();Ore={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"},x3=["jpg","jpeg","png","bmp","tga","webp","tif","tiff"],Nre=/^\s*(map_Kd|map_Ka|map_Ks|map_Ns|map_d|map_bump|bump|disp|decal)\s+(.+)/i});function pr(){return L3.Platform.isMobile}var L3,Qs=M(()=>{"use strict";L3=require("obsidian")});function O_(n,e){return{min:Zr(n),max:Zr(e)}}function D3(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)}}:O_(e.min,e.max)}function Rr(n){return Vd(n.max,n.min)}function fn(n){return th(n.min,Np(Rr(n),.5))}function O3(n){return Gw(n.min,n.max)}function N_(n){return O3(n)/2}function N3(n){let e=Rr(n);return Math.max(e.x,e.y,e.z)}function AM(n){let e=Rr(n),t=O3(n);return{center:th(n.min,Np(e,.5)),size:e,diagonalLength:t,radius:t/2,maxSpan:Math.max(e.x,e.y,e.z)}}var rf=M(()=>{"use strict";Ws()});function xM(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:Zr(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 JS(n,e={}){let t=AM(n);return xM(t.center,t.radius,e)}function w3(n,e={}){var o,l,c,f,h,d;let t=AM(n),i=Math.max(t.maxSpan,t.radius,Number.EPSILON),r=i*((o=e.distanceMultiplier)!=null?o:1.8),s=Math.max((l=e.minNear)!=null?l:Math.max(i/1e4,1e-5),i/((c=e.nearDivisor)!=null?c:1e3)),a=Math.max((h=e.minFar)!=null?h:Math.max(i*((f=e.farMultiplier)!=null?f:20),1),r+t.radius*4);return{target:Zr(t.center),position:th(t.center,{x:r,y:r*((d=e.elevationFactor)!=null?d:.65),z:r}),near:s,far:a}}var eT=M(()=>{"use strict";rf();Ws()});function Di(n){return n.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}var tT=M(()=>{"use strict"});function iT(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=Gre({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:kre(r,{triangleCount:t,splatCount:n.splatCount,materialCount:e.size}),resourceWarnings:n.resourceWarnings?[...n.resourceWarnings]:void 0,boundingSize:Zr(n.boundingSize),rootName:n.rootName}}function Gre(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 kre(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 Ih(n){var e;return{name:n.name,triangleCount:n.triangleCount,vertexCount:n.vertexCount,materialName:(e=n.materialName)!=null?e:null,boundingSize:Zr(n.boundingSize),center:Zr(n.center),source:n.source,meshNames:n.meshNames?[...n.meshNames]:void 0,childCount:n.childCount,componentId:n.componentId,occurrenceId:n.occurrenceId,partNumber:n.partNumber,componentPath:n.componentPath}}function F3(n){return n.splatCount!==void 0?"Splats":"Triangles"}function B3(n){var e;return(e=n.splatCount)!=null?e:n.triangleCount}var w_=M(()=>{"use strict";Ws()});function Bu(n,e="-"){if(typeof n!="string")return e;let t=n.trim();return t.length>0?t:e}function U3(n,e={}){var r,s;let t=(r=e.countLabel)!=null?r:F3(n),i=(s=e.decimals)!=null?s:3;return[`| Meshes | ${n.meshCount} |`,`| ${t} | ${B3(n).toLocaleString()} |`,`| Vertices | ${n.vertexCount.toLocaleString()} |`,`| Materials | ${n.materialCount} |`,...n.performanceTier?[`| Performance Tier | ${n.performanceTier} |`]:[],`| Bounding Size | ${RM(n.boundingSize,{decimals:i})} |`]}function rT(n){return Di(n).replace(/\|/g,"\\|").replace(/\r?\n/g," ")}function RM(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 V3(n,e={}){return["| Metric | Value |","|--------|-------|",...U3(n,e)]}function Wre(n,e,t={}){return["| Property | Value |","|----------|-------|",`| Format | ${n} |`,...U3(e,t)]}function nT(n){var r,s;let e=[];e.push(`## ${n.title} - Model Info`),e.push(""),e.push(...Wre(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} | ${rT(Bu(a.name,`mesh-${o+1}`))} | ${l} | ${a.vertexCount.toLocaleString()} | ${rT(Bu(a.materialName))} |`)}),e.push(""));let i=Array.from((s=n.materialNames)!=null?s:[]).map(a=>Bu(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(`- ${Di(o)}`);e.push("")}return e.join(` +`)}function sT(n,e={}){var r;let t=Di(Bu((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 | ${rT(Bu(n.name))} |`),i.push(`| Triangles | ${n.triangleCount.toLocaleString()} |`),i.push(`| Vertices | ${n.vertexCount.toLocaleString()} |`),i.push(`| Material | ${rT(Bu(n.materialName))} |`),i.push(`| Bounding Size | ${RM(n.boundingSize)} |`),i.push(`| Center | ${RM(n.center,{separator:", "})} |`),i.push(""),i.join(` +`)}var aT=M(()=>{"use strict";tT();w_()});function qre(n){return!!n&&typeof n=="object"&&!Array.isArray(n)}function oT(n){return n.toLowerCase().replace(/[^a-z0-9]+/g,"")}function Zre(n){if(typeof n=="string"){let e=n.trim();return e.length>0?e:void 0}if(typeof n=="number"&&Number.isFinite(n))return String(n)}function G3(n,e=0){if(!qre(n)||e>2)return[];let t=[];for(let i of jre)for(let[r,s]of Object.entries(n))oT(r)===oT(i)&&t.push(...G3(s,e+1));return t.push(n),t}function F_(n,e){let t=new Set(e.map(oT));for(let i of n)for(let[r,s]of Object.entries(i)){if(!t.has(oT(r)))continue;let a=Zre(s);if(a)return a}}function nf(n,e={}){var c,f;let t=G3(n),i=F_(t,Hre),r=F_(t,zre),s=F_(t,Xre),a=(c=F_(t,Kre))!=null?c:e.path,o=(f=F_(t,Yre))!=null?f:e.name;return{componentId:i,occurrenceId:r,partNumber:s,componentPath:a,displayName:o,hasExplicitIdentity:!!(i||r||s)}}var Hre,zre,Xre,Yre,Kre,jre,bM=M(()=>{"use strict";Hre=["ai3dPartId","partId","componentId","componentIdentifier","cadId","persistentId","externalId","id"],zre=["ai3dOccurrenceId","occurrenceId","instanceId","occurrencePath","assemblyPath","pathId"],Xre=["ai3dPartNumber","partNumber","partNo","partNum","swPartNumber","solidworksPartNumber","part_number"],Yre=["displayName","partName","componentName","cadName","name"],Kre=["componentPath","cadPath","assemblyPath","occurrencePath"],jre=["ai3d","cad","solidworks","sw","metadata","properties","extras","gltf","userData"]});function lT(n){return{canvas:n.canvas,observeRender:n.observeRender,getCameraStateKey:n.getCameraStateKey,projectWorldPoint:n.projectWorldPoint,isWorldPointOccluded:n.isWorldPointOccluded}}function cT(n){return n.map(e=>e.value.toFixed(e.digits)).join("_")}function k3(n){return Number.isFinite(n.x)&&Number.isFinite(n.y)&&Number.isFinite(n.z)}function W3(n,e,t){return!k3(n)||e.clientWidth===0||e.clientHeight===0?!1:(t.screenX=(n.x+1)/2*e.clientWidth,t.screenY=(1-n.y)/2*e.clientHeight,t.depth=(n.z+1)/2,!0)}function H3(n,e,t,i,r){return!k3(n)||e===0||t===0||i.clientWidth===0||i.clientHeight===0?!1:(r.screenX=n.x*(i.clientWidth/e),r.screenY=n.y*(i.clientHeight/t),r.depth=n.z,!0)}var IM=M(()=>{"use strict"});function fT(n){var e;return n.size===0?null:n.size===1?(e=Array.from(n)[0])!=null?e:null:`${n.size} materials`}function hT(n){var e;return{summary:n.summary,parts:Qre(n),materialNames:$re(n.renderableMeshes,n.getMeshMaterialNames),resourceWarnings:n.resourceWarnings?[...n.resourceWarnings]:[],capturedAt:(e=n.capturedAt)!=null?e:new Date().toISOString()}}function Qre(n){let e=n.renderableMeshes.filter(t=>!n.groupedPartCandidates.groupedMeshes.has(t)).map(t=>n.createMeshPart(t));return n.groupedPartCandidates.parts.length>0?[...n.groupedPartCandidates.parts,...e]:e}function $re(n,e){let t=new Set;for(let i of n)for(let r of e(i))r&&t.add(r);return Array.from(t).sort((i,r)=>i.localeCompare(r))}var MM=M(()=>{"use strict"});function dT(n){switch(n){case"\xB5m":case"\u03BCm":return"um";case"um":case"mm":case"cm":case"m":return n;default:return"mm"}}function V_(n){return{x:Number.isFinite(n.x)&&n.x>0?n.x:1,y:Number.isFinite(n.y)&&n.y>0?n.y:1,z:Number.isFinite(n.z)&&n.z>0?n.z:1}}function uT(n,e,t,i){let r=V_(t),s={x:(e.x-n.x)*r.x,y:(e.y-n.y)*r.y,z:(e.z-n.z)*r.z},a={x:Math.abs(s.x),y:Math.abs(s.y),z:Math.abs(s.z)};return{distance:Math.sqrt(s.x*s.x+s.y*s.y+s.z*s.z),delta:s,absDelta:a,unit:i}}function U_(n,e){return n.toFixed(e).replace(/\.?0+$/,"")}function ene(n,e){if(n===0)return e;let t=Math.abs(n)*yM[e];return t<.001?"um":t<.1?"mm":t<1?"cm":"m"}function X3(n){return n==="um"?"um":Jre[n]}function B_(n,e,t=!0){let i=t?ene(n,e):e,r=n*yM[e]/yM[i],s=Math.abs(r),a=s>=100?1:s>=10?2:3;return`${U_(r,a)} ${X3(i)}`}function CM(n){let e=Math.abs(n),t=e>=100?1:e>=10?2:3;return U_(e,t)}function Uu(n){return{primary:B_(n.distance,n.unit),secondary:[`X ${CM(n.absDelta.x)}`,`Y ${CM(n.absDelta.y)}`,`Z ${CM(n.absDelta.z)}`,X3(n.unit)].join(" ")}}function mT(n){if(n.length===0)return"";let e=["## Measurements","","| # | Distance | Delta X | Delta Y | Delta Z | Start | End |","|---|----------|---------|---------|---------|-------|-----|"];for(let t of n){let i=t.reading.unit,r=z3(t.start),s=z3(t.end);e.push([t.index,B_(t.reading.distance,i),B_(t.reading.absDelta.x,i,!1),B_(t.reading.absDelta.y,i,!1),B_(t.reading.absDelta.z,i,!1),r,s].join(" | ").replace(/^/,"| ").replace(/$/," |"))}return e.join(` +`)}function z3(n){return`${U_(n.x,3)}, ${U_(n.y,3)}, ${U_(n.z,3)}`}var yM,Jre,PM=M(()=>{"use strict";yM={um:1e-6,mm:.001,cm:.01,m:1},Jre={um:"\u03BCm",mm:"mm",cm:"cm",m:"m"}});function _T(n){return new LM(n)}var pT,LM,DM=M(()=>{"use strict";pT=class pT{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";Ts();Ws();DM();Y3=new ft(4890367),tne=new ft(1722990),OM=class{constructor(e,t,i,r,s,a){this.raycaster=new jc;this.pointer=new It;this.tempBox=new Ar;this.tempCenter=new se;this.tempDirection=new se;this.tempCameraForward=new se;this.tempCameraRight=new se;this.tempCameraUp=new se;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 Ol(e,Y3),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=Gd(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){var s;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),(s=this.selectionHelper)==null||s.update(),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=wc(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&&Nc(o.distance,s.distance,s.epsilon);l!==this.lastOccluded&&(this.lastOccluded=l,this.selectionHelper&&(this.selectionHelper.material.color.set(l?tne:Y3),this.requestRender()))}isMeshInSet(e){return this.meshes.includes(e)}updateRotation(e,t){var c;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=Dv({startPosition:Ht(e.startPosition),pivot:Ht(e.pivot),startRotationQuaternion:Lv(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),(c=this.selectionHelper)==null||c.update(),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 ti?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=Gd(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=Pv({origin:Ht(this.raycaster.ray.origin),direction:Ht(this.raycaster.ray.direction)},t);return a?new se(a.x,a.y,a.z):null}}});function q3(n){return Zr(n)}function ine(n,e){return{originalPosition:q3(n),originalCenter:q3(e)}}function gT(n,e,t){let i=n.getRootCenter();for(let r of n.getParts()){let s=n.getPartState(r);s||(s=ine(n.getPartPosition(r),n.getPartCenter(r)),n.setPartState(r,s));let a=(s.originalCenter[t]-i[t])*e;n.setPartPosition(r,kw(s.originalPosition,t,a))}}function vT(n){for(let e of n.getParts()){let t=n.getPartState(e);t&&n.setPartPosition(e,t.originalPosition)}}var NM=M(()=>{"use strict";Ws()});function ET(n){return Zr(n)}function rne(n){return n instanceof ti}function nne(n){let e=[];return n.traverse(t=>{rne(t)&&t.geometry&&e.push(t)}),e}function Z3(n,e,t){gT(new ST(n),e,t)}function wM(n){vT(new ST(n))}var ST,Q3=M(()=>{"use strict";Ts();Ws();rf();NM();ST=class{constructor(e){this.root=e}getParts(){return nne(this.root)}getRootCenter(){let e=new Ar().setFromObject(this.root);return fn({min:Ht(e.min),max:Ht(e.max)})}getPartPosition(e){return Ht(e.position)}getPartCenter(e){let i=new Ar().setFromObject(e).getCenter(new se);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:ET(t._previewExplodeState.originalPosition),originalCenter:ET(t._previewExplodeState.originalCenter)}:null}setPartState(e,t){e.userData._previewExplodeState={originalPosition:ET(t.originalPosition),originalCenter:ET(t.originalCenter)}}}});var TT,$3=M(()=>{"use strict";TT=class{constructor(e=120){this.maxSamples=e;this.samples=[];this.renderedFrameCount=0;this.idleFrameSkipCount=0;this.slowFrameCount=0;this.maxRenderMs=0;this.adaptiveScaleChangeCount=0}recordRenderedFrame(e,t){!Number.isFinite(e)||e<0||(this.renderedFrameCount++,e>=t&&this.slowFrameCount++,this.maxRenderMs=Math.max(this.maxRenderMs,e),this.samples.push(e),this.samples.length>this.maxSamples&&this.samples.shift())}recordIdleFrameSkip(){this.idleFrameSkipCount++}recordAdaptiveScaleChange(){this.adaptiveScaleChangeCount++}snapshot(){let e=[...this.samples].sort((r,s)=>r-s),t=this.samples.reduce((r,s)=>r+s,0),i=e.length===0?-1:Math.min(e.length-1,Math.ceil(e.length*.95)-1);return{renderedFrameCount:this.renderedFrameCount,idleFrameSkipCount:this.idleFrameSkipCount,slowFrameCount:this.slowFrameCount,averageRenderMs:e.length?Number((t/e.length).toFixed(2)):0,p95RenderMs:i>=0?Number(e[i].toFixed(2)):0,maxRenderMs:Number(this.maxRenderMs.toFixed(2)),adaptiveScaleChangeCount:this.adaptiveScaleChangeCount}}}});var n2={};tt(n2,{ThreeModelPreview:()=>IT,createThreeModelPreview:()=>xne});function e2(){return{textureCount:0,colorTextureCount:0,srgbColorTextureCount:0}}function Sne(n,e){n.textureCount+=e.textureCount,n.colorTextureCount+=e.colorTextureCount,n.srgbColorTextureCount+=e.srgbColorTextureCount}function Mh(n){return n instanceof ti}function t2(n){return n instanceof ko||n instanceof qa||n instanceof Dl}function va(n){return n?Array.isArray(n)?n:[n]:[]}function xT(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 RT(n){var e,t;return(t=(e=n.geometry.getAttribute("position"))==null?void 0:e.count)!=null?t:0}function bT(n){return n?n.name||n.type||`material-${n.uuid}`:null}function Ch(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 FM(n,e){let t=[],i=e;for(;i&&i!==n;)t.push(Ch(i,i.type||`object-${i.id}`)),i=i.parent;return t.reverse().join("/")}function i2(n,e){var t;return((t=n.displayName)==null?void 0:t.trim())||n.partNumber||n.componentId||e}function r2(n){let e=n.clone();return e.transparent=!0,e.opacity=Math.max(0,Math.min(1,n.opacity))*sne,e.depthWrite=!1,e.needsUpdate=!0,e}function Tne(n){return Array.isArray(n)?n.map(r2):r2(n)}function Ane(n){for(let e of va(n))e.dispose()}function Ja(n){let e=new Ar().setFromObject(n);return O_(Ht(e.min),Ht(e.max))}function xne(n){return new IT(n)}var AT,sne,ane,one,lne,cne,fne,G_,hne,J3,dne,une,mne,pne,_ne,gne,vne,Ene,IT,s2=M(()=>{"use strict";Ts();r3();n3();P3();Qs();rf();eT();aT();w_();bM();IM();Ws();MM();PM();j3();Q3();ks();TM();$3();AT=new ft("#20242e"),sne=.242,ane=.28,one=2.5,lne=1.5,cne=1.15,fne=260,G_=30,hne=8,J3=28,dne=18,une=2,mne=28,pne=.86,_ne=1.08,gne=.62,vne=.86,Ene=4;IT=class{constructor(e){this.raycaster=new jc;this.occlusionRaycaster=new jc;this.renderObservers=new Set;this.pointer=new It;this.annotationProjection=new se;this.annotationDirection=new se;this.clock={last:performance.now()};this.defaultLights=[];this.configLights=[];this.environmentTarget=null;this.rootObject=null;this.loadedExt="";this.resourceWarnings=[];this.textureAudit=e2();this.renderHandle=0;this.contextLost=!1;this.quality="high";this.renderScale=1;this.interactivePixelRatioActive=!1;this.interactionPixelRatioDeadline=0;this.renderObserverSettleFrames=G_;this.frameBudgetPixelRatioScale=1;this.frameBudgetSlowStreak=0;this.frameBudgetFastStreak=0;this.frameBudgetObserverStride=1;this.frameBudgetObserverCursor=0;this.frameBudgetShadowDeferred=!1;this.lastFrameDurationMs=0;this.smoothness=new TT;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.wireframeOriginalMaterials=new Map;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 se;this.initialPosition=new se(3,2,3);this.initialFov=45;this.initialZoom=1;this.initialCameraMode="perspective";this.cameraMode="perspective";this.lastPointerDown=null;this.measurementActive=!1;this.measurementScale={x:1,y:1,z:1};this.measurementUnit="mm";this.measurementSegments=[];this.measurementMarkers=[];this.pendingPoint=null;this.pendingMarker=null;this.hoveredMarkerIndex=-1;this.lastPointerClient={x:0,y:0};this.previewLine=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.stlMaterial=null;this.cachedMeshes=null;this.cachedMeshRoot=null;this.cameraAnimHandle=0;this.preventCanvasWheelScroll=e=>{this.prepareInteractiveFrameBudget(),e.preventDefault(),e.stopPropagation(),this.markDirty()};this.handleControlsChange=()=>{this.prepareInteractiveFrameBudget(),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.prepareInteractiveFrameBudget())};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.handlePointerMove=e=>{if(this.lastPointerClient={x:e.clientX,y:e.clientY},e.buttons&1&&this.prepareInteractiveFrameBudget(),!this.measurementActive||(this.pendingPoint&&this.updatePreviewLine(),this.measurementMarkers.length===0))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.measurementMarkers,!1),r=i.length>0?this.measurementMarkers.indexOf(i[0].object):-1;if(r!==this.hoveredMarkerIndex){if(this.hoveredMarkerIndex>=0&&this.hoveredMarkerIndex=0&&r{e.preventDefault(),this.contextLost=!0,this.renderHandle&&(cancelAnimationFrame(this.renderHandle),this.renderHandle=0)};this.handleContextRestored=()=>{this.contextLost=!1,this.markDirty(),this.startRenderLoop()};this.renderer=new BS({canvas:e,antialias:!0,alpha:!0,preserveDrawingBuffer:!0,powerPreference:"high-performance"}),this.renderer.outputColorSpace=Ii,this.renderer.toneMapping=Es,this.renderer.toneMappingExposure=1,this.renderer.shadowMap.enabled=!0,this.renderer.shadowMap.type=HE,this.renderer.shadowMap.autoUpdate=!1,this.renderer.shadowMap.needsUpdate=!0,this.renderer.setClearColor(AT,1),this.scene=new mh,this.installGlobalEnvironment(),this.camera=new fr(this.initialFov,1,.01,2e3),this.camera.position.copy(this.initialPosition),this.camera.lookAt(this.initialTarget),this.scene.add(this.camera),this.controls=new kS(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),e.addEventListener("pointermove",this.handlePointerMove),e.addEventListener("webglcontextlost",this.handleContextLost),e.addEventListener("webglcontextrestored",this.handleContextRestored),this.resizeRenderer(),this.startRenderLoop()}async loadModel(e,t,i,r){var l;this.clearLoadedModel("model-switch"),this.loadedExt=t.toLowerCase(),this.resourceWarnings=[],this.textureAudit=e2();let s,a=[];if(this.loadedExt==="glb"||this.loadedExt==="gltf"){let c=await I3(e,this.loadedExt,i,r);s=c.scene,a=c.animations,this.resourceWarnings=c.warnings}else if(this.loadedExt==="stl")s=await M3(e),this.stlMaterial=Mh(s)?s.material:null;else if(this.loadedExt==="ply")s=await C3(e);else if(this.loadedExt==="obj"){let c=await y3(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 p_(s);for(let c of a)this.mixer.clipAction(c).play();this.animationPlaying=!0}let o=this.computeSummary(s);return this.fitCameraToObject(s),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),e.stl&&this.applySTLConfig(e.stl)}applySTLConfig(e){let t=this.stlMaterial;t&&(e.color!==void 0&&t.color.set(e.color),e.wireframe!==void 0&&(t.wireframe=e.wireframe,t.needsUpdate=!0),this.markDirty())}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),e.removeEventListener("pointermove",this.handlePointerMove),e.removeEventListener("webglcontextlost",this.handleContextLost),e.removeEventListener("webglcontextrestored",this.handleContextRestored),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(){let e=this.renderer.domElement;return lT({canvas:e,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&&hs(e)||t.rootName;return nT({title:r,format:this.loadedExt.toUpperCase(),summary:t,meshBreakdown:i.map(s=>({name:Ch(s,`mesh-${s.id}`),triangleCount:xT(s),vertexCount:RT(s),materialName:bT(va(s.material)[0])}))})}getModelEvidence(){if(!this.rootObject)return null;let e=this.getRenderableMeshes(this.rootObject),t=this.computeComponentPartSummaries(this.rootObject,e);return hT({summary:this.computeSummary(this.rootObject),renderableMeshes:e,groupedPartCandidates:t,createMeshPart:i=>this.computePartSummary(i),getMeshMaterialNames:i=>va(i.material).map(r=>bT(r)),resourceWarnings:this.resourceWarnings})}getSelectedPartInfo(){var t;let e=(t=this.focusedMesh)!=null?t:Mh(this._lastPickResult.mesh)?this._lastPickResult.mesh:null;return e?this.computePartSummary(e):null}exportSelectedPartInfo(){let e=this.getSelectedPartInfo();return e?sT(e):""}getPickWorldPoint(e){return e.pickedPoint&&typeof e.pickedPoint=="object"?Ht(e.pickedPoint):e.mesh instanceof ti?fn(Ja(e.mesh)):null}onPick(e){return this._onPickCallbacks.push(e),()=>{this._onPickCallbacks=this._onPickCallbacks.filter(t=>t!==e)}}resetView(){this.rootObject&&wM(this.rootObject),this.resetDisassembly(),this.clearFocusedMesh(),this.clearSelectionHighlight(),this.switchCameraMode(this.initialCameraMode),this.camera.position.copy(this.initialPosition),this.controls.target.copy(this.initialTarget),this.camera.lookAt(this.controls.target),this.camera instanceof fr&&(this.camera.fov=this.initialFov),this.camera.zoom=this.initialZoom,this.camera.updateProjectionMatrix(),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 ti&&this.setFocusedMesh(this._lastPickResult.mesh)):this.clearFocusedMesh(),this.markDirty(),this.focusSelectionEnabled}isFocusSelectionEnabled(){return this.focusSelectionEnabled}setWireframe(e){e!==this.wireframeEnabled&&(this.wireframeEnabled=e,this.applyWireframe(e),this.markDirty())}toggleWireframe(){return this.setWireframe(!this.wireframeEnabled),this.wireframeEnabled}applyWireframe(e){if(this.rootObject)for(let t of this.getRenderableMeshes(this.rootObject))if(e){this.wireframeOriginalMaterials.set(t.id,t.material);let r=va(t.material).map(s=>{if(s instanceof pn){let a=new qn({color:s.color,transparent:s.transparent,opacity:s.opacity,side:s.side,visible:s.visible});return a.wireframe=!0,a}if("wireframe"in s){let a=s.clone();return a.wireframe=!0,a}return s});t.material=Array.isArray(t.material)?r:r[0]}else{let i=this.wireframeOriginalMaterials.get(t.id);i&&(t.material=i),this.wireframeOriginalMaterials.delete(t.id)}}toggleOrientationGizmo(){if(!this.axesHelper){this.axesHelper=new Ru(1.2),this.axesHelper.visible=!1;let e=this.axesHelper.material;e.depthTest=!1,e.depthWrite=!1,this.axesHelper.renderOrder=999,this.scene.add(this.axesHelper)}return this.axesHelper.visible=!this.axesHelper.visible,this.axesHelper.position.copy(this.controls.target),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}toggleMeasurement(){return this.measurementActive=!this.measurementActive,this.measurementActive||this.cancelPendingMeasurement(),this.measurementActive}isMeasurementActive(){return this.measurementActive}clearMeasurements(){this.disposeMeasurementOverlays(!1)}disposeMeasurementOverlays(e){var t;e&&(this.measurementActive=!1),this.cancelPendingMeasurement(!1);for(let i of this.measurementSegments){i.line.removeFromParent(),i.line.geometry.dispose(),i.line.material.dispose(),i.label.removeFromParent();let r=i.label.material;(t=r.map)==null||t.dispose(),r.dispose()}this.measurementSegments=[];for(let i of this.measurementMarkers){i.removeFromParent(),i.geometry.dispose();let r=i.material;if(Array.isArray(r))for(let s of r)s.dispose();else r.dispose()}this.measurementMarkers=[],this.markDirty()}setMeasurementScale(e){this.measurementScale=V_(e),this.updateMeasurementLabels()}getMeasurementScale(){return{...this.measurementScale}}setMeasurementUnit(e){this.measurementUnit=dT(e),this.updateMeasurementLabels()}getMeasurementUnit(){return this.measurementUnit}getMeasurementBounds(){if(!this.rootObject)return null;let e=Ja(this.rootObject);return Rr(e)}getMeasurementRecords(){return this.createMeasurementRecords()}exportMeasurements(){return mT(this.createMeasurementRecords())}updateMeasurementLabels(){var t;if(this.measurementSegments.length===0)return;let e=this.getMeasurementMarkerSize()*4;for(let i of this.measurementSegments){let r=Uu(this.createMeasurementReading(i.start,i.end));i.label.removeFromParent();let s=i.label.material;(t=s.map)==null||t.dispose(),s.dispose();let a=new se().addVectors(i.start,i.end).multiplyScalar(.5);i.label=this.createMeasurementLabelSprite(r,a,e),this.scene.add(i.label)}this.markDirty()}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(){let e=this.smoothness.snapshot();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)),averageRenderMs:e.averageRenderMs,p95RenderMs:e.p95RenderMs,maxRenderMs:e.maxRenderMs,renderedFrameCount:e.renderedFrameCount,slowFrameCount:e.slowFrameCount,idleFrameSkipCount:e.idleFrameSkipCount,adaptiveScaleChangeCount:e.adaptiveScaleChangeCount,viewportVisible:this.viewportVisible,disposalAudit:{...this.lastDisposalAudit},meshCount:this.rootObject?this.getRenderableMeshes(this.rootObject).length:0,qualitySnapshot:this.getQualitySnapshot()}}getQualitySnapshot(){let e=this.getGeometryQualityStats(),t=this.smoothness.snapshot();return{backend:"three",supportedFormats:["glb","gltf","stl","ply","obj"],colorPipeline:{outputColorSpace:String(this.renderer.outputColorSpace),toneMapping:this.renderer.toneMapping===Es?"NoToneMapping":String(this.renderer.toneMapping),textureCount:this.textureAudit.textureCount,colorTextureCount:this.textureAudit.colorTextureCount,srgbColorTextureCount:this.textureAudit.srgbColorTextureCount},geometry:e,camera:{near:Number(this.camera.near.toPrecision(6)),far:Number(this.camera.far.toPrecision(6)),nearFarRatio:Number((this.camera.far/Math.max(this.camera.near,Number.EPSILON)).toPrecision(6))},performance:{renderScale:Number(this.renderScale.toFixed(2)),pixelRatio:Number(this.renderer.getPixelRatio().toFixed(2)),frameBudgetPixelRatioScale:Number(this.frameBudgetPixelRatioScale.toFixed(2)),frameBudgetObserverStride:this.frameBudgetObserverStride,viewportVisible:this.viewportVisible,renderedFrameCount:t.renderedFrameCount,idleFrameSkipCount:t.idleFrameSkipCount,slowFrameCount:t.slowFrameCount,averageRenderMs:t.averageRenderMs,p95RenderMs:t.p95RenderMs,maxRenderMs:t.maxRenderMs,adaptiveScaleChangeCount:t.adaptiveScaleChangeCount}}}setExplode(e,t){this.rootObject&&(Z3(this.rootObject,e,t),this.markShadowDirty(),this.markDirty())}resetExplode(){this.rootObject&&(wM(this.rootObject),this.markShadowDirty(),this.markDirty())}focusWorldPoint(e){let t=new se(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=K3(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=window.requestAnimationFrame(o))};this.cameraAnimHandle=window.requestAnimationFrame(o)}startRenderLoop(){if(this.renderHandle||!this.viewportVisible||this.contextLost)return;let e=()=>{if(!this.viewportVisible||this.contextLost){this.renderHandle=0;return}this.renderHandle=window.requestAnimationFrame(e),this.renderNow(performance.now())};this.renderHandle=window.requestAnimationFrame(e)}renderNow(e){var l,c,f;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.smoothness.recordIdleFrameSkip(),this.renderObserverSettleFrames>0&&(this.renderObserverSettleFrames--,this.notifyRenderObservers());return}this.renderDirty=!1,this.renderObserverSettleFrames=G_,(l=this.bboxHelper)==null||l.update(),(c=this.selectionHelper)==null||c.update(),(f=this.focusHelper)==null||f.update(),this.axesHelper&&this.axesHelper.visible&&this.axesHelper.position.copy(this.controls.target);let a=performance.now();this.renderer.render(this.scene,this.camera);let o=performance.now()-a;this.smoothness.recordRenderedFrame(o,J3),this.updateFrameBudget(o),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}prepareInteractiveFrameBudget(){let e=performance.now();this.interactionPixelRatioDeadline=e+fne,this.activateInteractivePixelRatio()&&this.resizeRenderer()}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=J3?(this.frameBudgetSlowStreak++,this.frameBudgetFastStreak=0):e<=dne?(this.frameBudgetFastStreak++,this.frameBudgetSlowStreak=0):(this.frameBudgetSlowStreak=0,this.frameBudgetFastStreak=0),this.frameBudgetSlowStreak>=une){this.frameBudgetSlowStreak=0;let t=Math.max(gne,this.frameBudgetPixelRatioScale*pne);t=mne&&this.frameBudgetPixelRatioScale<1&&(this.frameBudgetFastStreak=0,this.frameBudgetPixelRatioScale=Math.min(1,this.frameBudgetPixelRatioScale*_ne),this.frameBudgetObserverStride=Math.max(1,this.frameBudgetObserverStride-1),this.renderObserverSettleFrames=G_,this.smoothness.recordAdaptiveScaleChange(),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=G_,e&&this.markDirty()}shouldDeferShadowRefresh(){return this.interactivePixelRatioActive&&this.frameBudgetPixelRatioScale<=vne}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 instanceof vs?this.updateOrthographicFrustum(t/i):this.camera.aspect=t/i,this.camera.updateProjectionMatrix(),this.markDirty()}computeOrthographicViewSpan(){if(!this.rootObject)return 2;let e=Ja(this.rootObject),t=Rr(e);return Math.max(t.x,t.y,t.z,1)*1.2}updateOrthographicFrustum(e){if(!(this.camera instanceof vs))return;let i=this.computeOrthographicViewSpan()/2,r=i*e;this.camera.left=-r,this.camera.right=r,this.camera.top=i,this.camera.bottom=-i}updateOrthographicFrustumForCamera(e,t){let r=this.computeOrthographicViewSpan()/2,s=r*t;e.left=-s,e.right=s,e.top=r,e.bottom=-r,e.updateProjectionMatrix()}switchCameraMode(e){if(this.cameraMode===e&&(e==="perspective"&&this.camera instanceof fr||e==="orthographic"&&this.camera instanceof vs))return;let t=this.renderer.domElement,i=Math.max(1,Math.round(t.clientWidth||t.width||1)),r=Math.max(1,Math.round(t.clientHeight||t.height||1)),s=i/r,a=this.camera,o=a.position.clone(),l=this.controls.target.clone(),c=a.zoom||1,f=a.near,h=a.far;if(this.scene.remove(a),e==="orthographic"){let d=new vs(-1,1,1,-1,f,h);d.position.copy(o),d.zoom=c,d.lookAt(l),this.updateOrthographicFrustumForCamera(d,s),this.camera=d}else{let d=new fr(this.initialFov,s,f,h);d.position.copy(o),d.zoom=c,d.lookAt(l),this.camera=d}this.scene.add(this.camera),this.controls.object=this.camera,this.controls.target.copy(l),this.controls.update(),this.cameraMode=e}applyCameraConfig(e){var i;let t=(i=e.mode)!=null?i:this.cameraMode;e.mode&&(this.initialCameraMode=e.mode),this.switchCameraMode(t),this.camera instanceof fr&&typeof e.fov=="number"&&Number.isFinite(e.fov)&&(this.camera.fov=e.fov,this.initialFov=e.fov),e.position&&(this.camera.position.set(...e.position),this.initialPosition.set(...e.position)),e.lookAt&&(this.controls.target.set(...e.lookAt),this.camera.lookAt(this.controls.target),this.initialTarget.set(...e.lookAt)),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.initialZoom=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(AT,0);else if(this.sceneConfig.background){let t=new ft(this.sceneConfig.background);this.scene.background=t,this.renderer.setClearColor(t,1)}else this.scene.background=AT,this.renderer.setClearColor(AT,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 Au(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 Ou(this.renderer),t=new WS;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 ft(e.color):new ft(16777215),i=(r=e.intensity)!=null?r:1;switch(e.type){case"ambient":return new Au(t,i);case"hemisphere":{let h=e.groundColor?new ft(e.groundColor):new ft(4473924);return new Tu(t,h,i)}case"directional":{let h=new ko(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 qa(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 Dl(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 qa(t,i);return this.camera.add(h),h}default:return null}}disposeConfiguredLight(e){(e instanceof ko||e instanceof Dl)&&e.target.removeFromParent(),e.removeFromParent(),e.dispose()}prepareModelForQuality(e){let t=this.renderer.capabilities.getMaxAnisotropy();e.traverse(i=>{if(Mh(i)){i.castShadow=!0,i.receiveShadow=!0;for(let r of va(i.material))this.prepareMaterialForQuality(r,t)}})}prepareMaterialForQuality(e,t){Sne(this.textureAudit,$S(e,t))}applyShadowQuality(){let e=this.shadowMapSize();for(let t of this.allLights())!t2(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 Ar().setFromObject(this.rootObject),t=e.getCenter(new se),i=e.getSize(new se),r=Math.max(i.x,i.y,i.z,1)*1.8;for(let s of this.allLights())if(!(!t2(s)||!s.castShadow)){if(s.shadow.mapSize.set(this.shadowMapSize(),this.shadowMapSize()),s.shadow.bias=-12e-5,s.shadow.normalBias=.018,s instanceof ko){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 vs){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){if(!this.axesHelper){this.axesHelper=new Ru(1.2);let t=this.axesHelper.material;t.depthTest=!1,t.depthWrite=!1,this.axesHelper.renderOrder=999,this.scene.add(this.axesHelper)}this.axesHelper.visible=e,this.axesHelper.position.copy(this.controls.target)}createGroundShadow(){if(!this.rootObject||this.groundShadowMesh)return;let e=Ja(this.rootObject),t=fn(e),i=Rr(e),r=Math.max(i.x,i.z,1)*3,s=e.min.y-Math.max(r*.002,.002),a=new ti(new gh(r,r),new l_({color:0,opacity:ane,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 va(this.groundShadowMesh.material))e.dispose();this.groundShadowMesh=null}}createGrid(){if(!this.rootObject||this.gridHelper)return;let e=Ja(this.rootObject),t=fn(e),i=Rr(e),r=Math.max(i.x,i.z,1)*2,s=new __(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 va(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 va(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 ti?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};if(this._lastPickResult=s,this.measurementActive&&(i!=null&&i.point)){this.addMeasurementPoint(i.point.clone());return}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(),this.disposeMeasurementOverlays(!0),this.wireframeEnabled=!1,this.wireframeOriginalMaterials.clear(),this.stlMaterial=null,(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++,!Mh(l))return;a++;let c=l.geometry;c&&!i.has(c.uuid)&&(c.dispose(),i.add(c.uuid));for(let f of va(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 Tr&&!i.has(s.uuid))s.dispose(),i.add(s.uuid);else if(Array.isArray(s))for(let a of s)a instanceof Tr&&!i.has(a.uuid)&&(a.dispose(),i.add(a.uuid));t.has(e.uuid)||(e.dispose(),t.add(e.uuid))}fitCameraToObject(e){let t=Ja(e),i=w3(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=Rr(t),s=Math.max(r.x,r.y,r.z,Number.EPSILON),a=this.initialPosition.distanceTo(this.initialTarget);this.controls.minDistance=Math.max(i.near*4,s*.02,1e-5),this.controls.maxDistance=Math.max(a*8,this.controls.minDistance*10),this.raycaster.params.Points={threshold:Math.max(s*.01,1e-5)},this.raycaster.params.Line={threshold:Math.max(s*.002,1e-5)},this.occlusionRaycaster.params.Points={threshold:Math.max(s*.006,1e-5)},this.occlusionRaycaster.params.Line={threshold:Math.max(s*.001,1e-5)},this.resetView(),this.axesHelper&&(this.axesHelper.position.copy(this.controls.target),this.axesHelper.scale.setScalar(Math.max(s*.25,5e-4))),this.camera.near=i.near,this.camera.far=i.far,this.camera.updateProjectionMatrix(),this.markDirty()}getAnnotationCameraStateKey(){return cT([{value:this.camera.position.x,digits:3},{value:this.camera.position.y,digits:3},{value:this.camera.position.z,digits:3},{value:this.controls.target.x,digits:2},{value:this.controls.target.y,digits:2},{value:this.controls.target.z,digits:2},{value:this.camera instanceof fr?this.camera.fov:this.camera.zoom,digits:this.camera instanceof fr?2:3}])}projectAnnotationWorldPoint(e,t){let i=this.renderer.domElement;return!i.isConnected||i.clientWidth===0||i.clientHeight===0?!1:(this.scene.updateMatrixWorld(),this.camera.updateMatrixWorld(),this.annotationProjection.set(e.x,e.y,e.z).project(this.camera),W3(this.annotationProjection,i,t))}isAnnotationWorldPointOccluded(e){if(!this.rootObject)return!1;let t=wc(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&&Nc(i.distance,t.distance,t.epsilon)}getRenderableMeshes(e){if(this.cachedMeshes&&this.cachedMeshRoot===e)return this.cachedMeshes;let t=[];return e.traverse(i=>{Mh(i)&&i.geometry&&t.push(i)}),this.cachedMeshes=t,this.cachedMeshRoot=e,t}getGeometryQualityStats(){if(!this.rootObject)return{meshCount:0,pointCloudCount:0,smallPartCount:0,smallestPartSpan:null,modelSpan:null};let e=Rr(Ja(this.rootObject)),t=Math.max(e.x,e.y,e.z),i=Math.max(t*.04,Number.EPSILON),r=0,s=0,a=Number.POSITIVE_INFINITY;for(let o of this.getRenderableMeshes(this.rootObject)){let l=Rr(Ja(o)),c=Math.max(l.x,l.y,l.z);Number.isFinite(c)&&c>0&&(a=Math.min(a,c),c<=i&&c{o instanceof ms&&r++}),{meshCount:this.getRenderableMeshes(this.rootObject).length,pointCloudCount:r,smallPartCount:s,smallestPartSpan:Number.isFinite(a)?Number(a.toPrecision(6)):null,modelSpan:Number.isFinite(t)&&t>0?Number(t.toPrecision(6)):null}}invalidateMeshCache(){this.cachedMeshes=null,this.cachedMeshRoot=null}ensureBoundingBoxHelper(){var e;this.rootObject&&((e=this.bboxHelper)==null||e.removeFromParent(),this.bboxHelper=new Ol(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 Ol(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=Tne(o);this.focusDimMaterials.set(a.id,l),a.material=l}(s=this.focusHelper)==null||s.removeFromParent(),this.focusHelper=new Ol(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())Ane(e);this.focusDimMaterials.clear()}clearSelectionHighlight(){var e;(e=this.selectionHelper)==null||e.removeFromParent(),this.selectionHelper=null,this.highlightedMesh=null,this.markDirty()}getMeasurementMarkerSize(){if(!this.rootObject)return .02;let e=Ja(this.rootObject),t=Rr(e);return Math.max(t.x,t.y,t.z,.001)*.015}cancelPendingMeasurement(e=!0){var r,s;let t=this.pendingMarker,i=(s=(r=this.pendingPoint)==null?void 0:r.clone())!=null?s:null;if(this.pendingPoint=null,this.pendingMarker=null,this.hoveredMarkerIndex=-1,this.removePreviewLine(),t&&i&&!this.isMeasurementPointUsed(i)){let a=this.measurementMarkers.indexOf(t);a>=0&&this.measurementMarkers.splice(a,1),this.disposeMeasurementMarker(t)}else t&&(t.scale.setScalar(1),t.material.color.setHex(16739179));e&&this.markDirty()}isMeasurementPointUsed(e){return this.measurementSegments.some(t=>t.start.distanceTo(e)<1e-4||t.end.distanceTo(e)<1e-4)}disposeMeasurementMarker(e){e.removeFromParent(),e.geometry.dispose();let t=e.material;if(Array.isArray(t))for(let i of t)i.dispose();else t.dispose()}findNearestMarkerIndex(e){let t=this.getMeasurementMarkerSize()*2.5;for(let i=0;i=0?this.measurementMarkers[t].position.clone():e;if(this.pendingPoint){if(i.distanceTo(this.pendingPoint)<1e-4)return;if(t<0){let r=this.getMeasurementMarkerSize(),s=new Su(r,16,16),a=new qn({color:16739179,depthTest:!1}),o=new ti(s,a);o.position.copy(i),o.renderOrder=999,this.scene.add(o),this.measurementMarkers.push(o)}this.createMeasurementSegment(this.pendingPoint,i),this.pendingMarker&&(this.pendingMarker.scale.setScalar(1),this.pendingMarker.material.color.setHex(16739179)),this.pendingPoint=null,this.pendingMarker=null,this.removePreviewLine()}else{if(t<0){let r=this.getMeasurementMarkerSize(),s=new Su(r,16,16),a=new qn({color:16739179,depthTest:!1}),o=new ti(s,a);o.position.copy(i),o.renderOrder=999,this.scene.add(o),this.measurementMarkers.push(o),this.pendingMarker=o}else this.pendingMarker=this.measurementMarkers[t];this.pendingMarker.scale.setScalar(1.6),this.pendingMarker.material.color.setHex(5361510),this.pendingPoint=i,this.ensurePreviewLine()}this.markDirty()}createMeasurementSegment(e,t){let i=new Hi().setFromPoints([e,t]),r=new Fo(i,new yn({color:16739179,depthTest:!1}));r.renderOrder=998,this.scene.add(r);let s=Uu(this.createMeasurementReading(e,t)),a=new se().addVectors(e,t).multiplyScalar(.5),o=this.createMeasurementLabelSprite(s,a,this.getMeasurementMarkerSize()*4);this.scene.add(o),this.measurementSegments.push({start:e,end:t,line:r,label:o})}createMeasurementLabelSprite(e,t,i){let r=activeDocument.createEl("canvas"),s=r.getContext("2d");r.width=640,r.height=160,s.fillStyle="rgba(32, 36, 46, 0.9)",s.beginPath(),s.roundRect(0,0,640,160,18),s.fill(),s.strokeStyle="#ff6b6b",s.lineWidth=4,s.stroke(),s.fillStyle="#ffffff",s.textAlign="center",s.textBaseline="middle",s.font="bold 46px sans-serif",s.fillText(e.primary,320,58),s.font="28px sans-serif",s.fillStyle="rgba(255, 255, 255, 0.82)",s.fillText(e.secondary,320,112);let a=new a_(r),o=new _u({map:a,depthTest:!1}),l=new t_(o);return l.position.copy(t),l.scale.set(i*5,i*1.25,1),l.renderOrder=1e3,l}ensurePreviewLine(){if(this.previewLine)return;let e=new Hi().setFromPoints([new se,new se]);this.previewLine=new Fo(e,new yn({color:16777215,transparent:!0,opacity:.5,depthTest:!1})),this.previewLine.renderOrder=997,this.scene.add(this.previewLine)}updatePreviewLine(){if(!this.pendingPoint||!this.previewLine||!this.rootObject)return;let e=this.renderer.domElement.getBoundingClientRect();this.pointer.x=(this.lastPointerClient.x-e.left)/e.width*2-1,this.pointer.y=-((this.lastPointerClient.y-e.top)/e.height)*2+1,this.raycaster.setFromCamera(this.pointer,this.camera);let t=this.raycaster.intersectObjects(this.getRenderableMeshes(this.rootObject),!1)[0],i;t!=null&&t.point?i=t.point.clone():i=this.pendingPoint.clone().add(this.raycaster.ray.direction.clone().multiplyScalar(5));let r=this.previewLine.geometry.getAttribute("position");r.setXYZ(0,this.pendingPoint.x,this.pendingPoint.y,this.pendingPoint.z),r.setXYZ(1,i.x,i.y,i.z),r.needsUpdate=!0,this.previewLine.geometry.computeBoundingSphere(),this.markDirty()}removePreviewLine(){this.previewLine&&(this.previewLine.removeFromParent(),this.previewLine.geometry.dispose(),this.previewLine.material.dispose(),this.previewLine=null)}createMeasurementReading(e,t){return uT(this.toMeasurementPoint(e),this.toMeasurementPoint(t),this.measurementScale,this.measurementUnit)}createMeasurementRecords(){return this.measurementSegments.map((e,t)=>({index:t+1,start:this.toMeasurementPoint(e.start),end:this.toMeasurementPoint(e.end),reading:this.createMeasurementReading(e.start,e.end)}))}toMeasurementPoint(e){return{x:e.x,y:e.y,z:e.z}}computePartSummary(e){e.updateWorldMatrix(!0,!1);let t=Ja(e),i=Ch(e,`mesh-${e.id}`),r=nf(e.userData,{name:i,path:this.rootObject?FM(this.rootObject,e):i});return Ih({name:i2(r,i),triangleCount:xT(e),vertexCount:RT(e),materialName:bT(va(e.material)[0]),boundingSize:Rr(t),center:fn(t),source:r.hasExplicitIdentity?"component":"mesh",meshNames:[i],childCount:1,componentId:r.componentId,occurrenceId:r.occurrenceId,partNumber:r.partNumber,componentPath:r.componentPath})}computeComponentPartSummaries(e,t){let i=new Set(t),r=[],s=new Set,a=[];return e.updateWorldMatrix(!0,!0),e.traverse(o=>{if(o===e||Mh(o))return;let l=[];if(o.traverse(f=>{Mh(f)&&i.has(f)&&l.push(f)}),l.length<2||l.length===t.length){let f=nf(o.userData,{name:Ch(o,`component-${o.id}`),path:FM(e,o)});if(!f.hasExplicitIdentity||l.length<1||l.length===t.length)return;a.push({object:o,childMeshes:l,identity:f});return}let c=nf(o.userData,{name:Ch(o,`group-${o.id}`),path:FM(e,o)});!c.hasExplicitIdentity&&!o.name.trim()||a.push({object:o,childMeshes:l,identity:c})}),a.sort((o,l)=>o.childMeshes.length-l.childMeshes.length).forEach(({object:o,childMeshes:l,identity:c})=>{let f=l.filter(p=>!s.has(p));if(f.length<1||!c.hasExplicitIdentity&&f.length<2)return;for(let p of f)s.add(p);let h=new Ar;for(let p of f)p.updateWorldMatrix(!0,!1),h.union(new Ar().setFromObject(p));let d=new Set,u=0,m=0;for(let p of f){u+=xT(p),m+=RT(p);for(let _ of va(p.material)){let g=bT(_);g&&d.add(g)}}r.push(Ih({name:i2(c,Ch(o,`group-${o.id}`)),triangleCount:u,vertexCount:m,materialName:fT(d),boundingSize:Rr({min:Ht(h.min),max:Ht(h.max)}),center:fn({min:Ht(h.min),max:Ht(h.max)}),source:c.hasExplicitIdentity?"component":"group",meshNames:f.map(p=>Ch(p,`mesh-${p.id}`)),childCount:f.length,componentId:c.componentId,occurrenceId:c.occurrenceId,partNumber:c.partNumber,componentPath:c.componentPath}))}),{parts:r,groupedMeshes:s}}computeSummary(e){let t=this.getRenderableMeshes(e);return iT({rootName:e.name||"__root__",boundingSize:Rr(Ja(e)),meshes:t.map(i=>({triangleCount:xT(i),vertexCount:RT(i),materialKeys:va(i.material).map(r=>r.uuid)})),resourceWarnings:this.resourceWarnings})}}});var Rne,BM,UM,ie,di=M(()=>{Rne=typeof WeakRef!="undefined",BM=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}},UM=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)}},ie=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 BM(0),e&&(this._onObserverAdded=e)}add(e,t=-1,i=!1,r=null,s=!1){if(!e)return null;let a=new UM(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=Rne?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 MT,a2=M(()=>{MT=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 o2,Oi,Rs=M(()=>{di();a2();(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"})(o2||(o2={}));Oi=class n extends MT{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 ie,this.onErrorObservable=new ie,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)}};Oi._Counter=0});var Oe,Ni=M(()=>{di();Oe=class{static get LastCreatedEngine(){return this.Instances.length===0?null:this.Instances[this.Instances.length-1]}static get LastCreatedScene(){return this._LastCreatedScene}};Oe.Instances=[];Oe.OnEnginesDisposedObservable=new ie;Oe._LastCreatedScene=null;Oe.UseFallbackTexture=!0;Oe.FallbackTexture=""});var ee,Pt=M(()=>{ee=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)}}};ee.NoneLogLevel=0;ee.MessageLogLevel=1;ee.WarningLogLevel=2;ee.ErrorLogLevel=4;ee.AllLogLevel=7;ee.MessageLimitReached="Too many %TYPE%s (%LIMIT%), no more %TYPE%s will be reported for this message.";ee._LogCache="";ee._LogLimitOutputs={};ee._Levels=[{},{color:"white",logFunc:console.log,name:"Log"},{color:"orange",logFunc:console.warn,name:"Warn"},{},{color:"red",logFunc:console.error,name:"Error"}];ee.errorsCount=0;ee.Log=ee._LogEnabled.bind(ee,ee.MessageLogLevel);ee.Warn=ee._LogEnabled.bind(ee,ee.WarningLogLevel);ee.Error=ee._LogEnabled.bind(ee,ee.ErrorLogLevel)});var A,G=M(()=>{A=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}};A.ShadersRepository="src/Shaders/";A.ShadersStore={};A.IncludesShadersStore={};A.ShadersRepositoryWGSL="src/ShadersWGSL/";A.ShadersStoreWGSL={};A.IncludesShadersStoreWGSL={}});function dr(){return typeof window!="undefined"}function Fl(){return typeof navigator!="undefined"}function sf(){return typeof document!="undefined"}function CT(n){let e="",t=n.firstChild;for(;t;)t.nodeType===3&&(e+=t.textContent),t=t.nextSibling;return e}var Ea=M(()=>{});var yT,l2=M(()=>{yT=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 Ze(n,e=!1){if(!(e&&c2[n]))return c2[n]=!0,`${n} needs to be imported before as it contains a side-effect required by your code.`}var c2,hn=M(()=>{c2={}});function PT(n,e,t=""){return t+(e?e+` +`:"")+n}function LT(n,e,t,i,r,s,a){let o=a||Vu.loadFile;if(o)return o(n,e,t,i,r,s);throw Ze("FileTools")}function DT(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 J3(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 Vu,af=M(()=>{hn();Ea();Vu={}});function Pn(n){let e=NM.get(n);if(!e){if(!n)return cne;e={_webGLVersion:n.TEXTURE_BINDING_3D?2:1,_context:n,parallelShaderCompile:n.getExtension("KHR_parallel_shader_compile")||void 0,cachedPipelines:{}},NM.set(n,e)}return e}function CT(n){NM.delete(n)}function FM(n,e,t,i,r,s){var c;let a=Pn(i);s||(s=(c=a._createShaderProgramInjection)!=null?c:yT);let o=wM(e,"vertex",i,a._contextWasLost),l=wM(t,"fragment",i,a._contextWasLost);return s(n,o,l,i,r,a.validateShaderPrograms)}function UM(n,e,t,i,r,s=null,a){var h;let o=Pn(r);a||(a=(h=o._createShaderProgramInjection)!=null?h:yT);let l=o._webGLVersion>1?`#version 300 es +`),r+="#define USE_EXACT_SRGB_CONVERSIONS"),r}}function f2(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 Vu,af=M(()=>{hn();Ea();Vu={}});function Ln(n){let e=VM.get(n);if(!e){if(!n)return bne;e={_webGLVersion:n.TEXTURE_BINDING_3D?2:1,_context:n,parallelShaderCompile:n.getExtension("KHR_parallel_shader_compile")||void 0,cachedPipelines:{}},VM.set(n,e)}return e}function OT(n){VM.delete(n)}function kM(n,e,t,i,r,s){var c;let a=Ln(i);s||(s=(c=a._createShaderProgramInjection)!=null?c:NT);let o=GM(e,"vertex",i,a._contextWasLost),l=GM(t,"fragment",i,a._contextWasLost);return s(n,o,l,i,r,a.validateShaderPrograms)}function WM(n,e,t,i,r,s=null,a){var h;let o=Ln(r);a||(a=(h=o._createShaderProgramInjection)!=null?h:NT);let l=o._webGLVersion>1?`#version 300 es #define WEBGL2 -`:"",c=e2(e,"vertex",i,l,r,o._contextWasLost),f=e2(t,"fragment",i,l,r,o._contextWasLost);return a(n,c,f,r,s,o.validateShaderPrograms)}function t2(n,e){let t=new RT,i=Pn(n);return i.parallelShaderCompile&&!i.disableParallelShaderCompile&&(t.isParallelCompiled=!0),t.context=i._context,t}function yT(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||PT(n,i,s),a}function i2(n,e,t){let i=n;if(i._isDisposed)return!1;let r=Pn(e);return r&&r.parallelShaderCompile&&r.parallelShaderCompile.COMPLETION_STATUS_KHR&&i.program&&e.getProgramParameter(i.program,r.parallelShaderCompile.COMPLETION_STATUS_KHR)?(PT(i,e,t),!0):!1}function PT(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 r2(n,e,t,i,r,s,a,o,l,c="",f,h,d){var p,_;let u=Pn(n.context);h||(h=(p=u.createRawShaderProgramInjection)!=null?p:FM),d||(d=(_=u.createShaderProgramInjection)!=null?_:UM);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 e2(n,e,t,i,r,s){return wM(bT(n,t,i),e,r,s)}function wM(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 n2(n,e){e.useProgram(n)}function s2(n,e){let t=n;if(!t.isParallelCompiled){e(n);return}let i=t.onCompiled;t.onCompiled=()=>{i==null||i(),e(n)}}var NM,cne,BM=M(()=>{Q3();af();NM=new WeakMap,cne={_webGLVersion:2,cachedPipelines:{}}});var fne,hne,Yo,LT=M(()=>{fne="attribute",hne="varying",Yo=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:fne,p=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:hne;!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(p))?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 DT,a2=M(()=>{DT=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{LT();Gu=class extends Yo{process(e,t,i){for(let r=0;r{LT();OT=class extends Yo{isValid(e){return this.testExpression.isTrue(e)}}});var _n,ku=M(()=>{_n=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{ku();yh=class extends _n{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 NT,f2=M(()=>{ku();NT=class extends _n{isTrue(e){return this.leftOperand.isTrue(e)||this.rightOperand.isTrue(e)}}});var wT,h2=M(()=>{ku();wT=class extends _n{isTrue(e){return this.leftOperand.isTrue(e)&&this.rightOperand.isTrue(e)}}});var FT,d2=M(()=>{ku();FT=class extends _n{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 p2(n){n.processor&&n.processor.initializeShaders&&n.processor.initializeShaders(n.processingContext)}function HM(n,e,t,i){var r;(r=e.processor)!=null&&r.preProcessShaderCode&&(n=e.processor.preProcessShaderCode(n,e.isFragment)),G_(n,e,s=>{e.processCodeAfterIncludes&&(s=e.processCodeAfterIncludes(e.isFragment?"fragment":"vertex",s,e.defines));let a=Sne(s,e,i);t(a,s)})}function _2(n,e,t){return!t.processor||!t.processor.finalizeShaders?{vertexCode:n,fragmentCode:e}:t.processor.finalizeShaders(n,e,t.processingContext)}function _ne(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=h2(e,"vertex",i,l,r,o._contextWasLost),f=h2(t,"fragment",i,l,r,o._contextWasLost);return a(n,c,f,r,s,o.validateShaderPrograms)}function d2(n,e){let t=new yT,i=Ln(n);return i.parallelShaderCompile&&!i.disableParallelShaderCompile&&(t.isParallelCompiled=!0),t.context=i._context,t}function NT(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||wT(n,i,s),a}function u2(n,e,t){let i=n;if(i._isDisposed)return!1;let r=Ln(e);return r&&r.parallelShaderCompile&&r.parallelShaderCompile.COMPLETION_STATUS_KHR&&i.program&&e.getProgramParameter(i.program,r.parallelShaderCompile.COMPLETION_STATUS_KHR)?(wT(i,e,t),!0):!1}function wT(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 m2(n,e,t,i,r,s,a,o,l,c="",f,h,d){var p,_;let u=Ln(n.context);h||(h=(p=u.createRawShaderProgramInjection)!=null?p:kM),d||(d=(_=u.createShaderProgramInjection)!=null?_:WM);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 h2(n,e,t,i,r,s){return GM(PT(n,t,i),e,r,s)}function GM(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 p2(n,e){e.useProgram(n)}function _2(n,e){let t=n;if(!t.isParallelCompiled){e(n);return}let i=t.onCompiled;t.onCompiled=()=>{i==null||i(),e(n)}}var VM,bne,HM=M(()=>{l2();af();VM=new WeakMap,bne={_webGLVersion:2,cachedPipelines:{}}});var Ine,Mne,Ko,FT=M(()=>{Ine="attribute",Mne="varying",Ko=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:Ine,p=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:Mne;!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(p))?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 BT,g2=M(()=>{BT=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{FT();Gu=class extends Ko{process(e,t,i){for(let r=0;r{FT();UT=class extends Ko{isValid(e){return this.testExpression.isTrue(e)}}});var gn,ku=M(()=>{gn=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{ku();yh=class extends gn{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 VT,T2=M(()=>{ku();VT=class extends gn{isTrue(e){return this.leftOperand.isTrue(e)||this.rightOperand.isTrue(e)}}});var GT,A2=M(()=>{ku();GT=class extends gn{isTrue(e){return this.leftOperand.isTrue(e)&&this.rightOperand.isTrue(e)}}});var kT,x2=M(()=>{ku();kT=class extends gn{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 I2(n){n.processor&&n.processor.initializeShaders&&n.processor.initializeShaders(n.processingContext)}function jM(n,e,t,i){var r;(r=e.processor)!=null&&r.preProcessShaderCode&&(n=e.processor.preProcessShaderCode(n,e.isFragment)),k_(n,e,s=>{e.processCodeAfterIncludes&&(s=e.processCodeAfterIncludes(e.isFragment?"fragment":"vertex",s,e.defines));let a=Fne(s,e,i);t(a,s)})}function M2(n,e,t){return!t.processor||!t.processor.finalizeShaders?{vertexCode:n,fragmentCode:e}:t.processor.finalizeShaders(n,e,t.processingContext)}function Dne(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 GM(n){let t=/defined\((.+)\)/.exec(n);if(t&&t.length)return new yh(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 yh(n);let a=n.substring(0,s).trim(),o=n.substring(s+r.length).trim();return new FT(a,r,o)}function gne(n){n=n.replace(dne,"defined[$1]");let e=_n.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 wT:new NT;typeof s=="string"&&(s=s.replace(VM,"defined($1)")),typeof a=="string"&&(a=a.replace(VM,"defined($1)")),o.leftOperand=typeof a=="string"?GM(a):a,o.rightOperand=typeof s=="string"?GM(s):s,t.push(o)}let i=t[t.length-1];return typeof i=="string"&&(i=i.replace(VM,"defined($1)")),typeof i=="string"?GM(i):i}function BT(n,e){let t=new OT,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 yh(r):i==="#ifndef"?t.testExpression=new yh(r,!0):t.testExpression=gne(r),t}function kM(n,e,t,i){let r;for(;WM(n,t,i);){r=n.currentLine;let s=r.substring(0,5).toLowerCase();if(s==="#else"){let a=new Yo;e.children.push(a),WM(n,a,i);return}else if(s==="#elif"){let a=BT(r,5);e.children.push(a),t=a}}}function WM(n,e,t){for(;n.canRead;){n.lineIndex++;let i=n.currentLine;if(i.indexOf("#")>=0){let s=pne.exec(i);if(s&&s.length){switch(s[0]){case"#ifdef":{let o=new Gu;e.children.push(o);let l=BT(i,6);o.children.push(l),kM(n,o,l,t);break}case"#else":case"#elif":return!0;case"#endif":return!1;case"#ifndef":{let o=new Gu;e.children.push(o);let l=BT(i,7);o.children.push(l),kM(n,o,l,t);break}case"#if":{let o=new Gu,l=BT(i,3);e.children.push(o),o.children.push(l),kM(n,o,l,t);break}}continue}}let r=new Yo;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 vne(n,e,t,i){let r=new Yo,s=new DT;return s.lineIndex=-1,s.lines=n.split(` -`),WM(s,r,i),r.process(e,t,i)}function Ene(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",MT(i,e==null?void 0:e.isNDCHalfZRange,e==null?void 0:e.useReverseDepthBuffer,e==null?void 0:e.useExactSrgbConversions),i}function Sne(n,e,t){let i=_ne(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=Ene(e,t);e.processor.preProcessor&&(i=e.processor.preProcessor(i,r,s,e.isFragment,e.processingContext));let a={};return i=vne(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 G_(n,e,t){UT.length=0;let i;for(;(i=une.exec(n))!==null;)UT.push(i);let r=[n],s=!1;for(let o of UT){let l=o[1];if(l.indexOf("__decl__")!==-1&&(l=l.replace(mne,""),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+=p.replace(m2,_.toString())+` -`}else e.supportsUniformBuffers||(c=c.replace(u2,(d,u)=>u+"{X}")),c=c.replace(m2,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";zM.loadFile(c,f=>{e.includesShadersStore[l]=f,G_(r.join(""),e,t)});return}}UT.length=0;let a=r.join("");s?G_(a.toString(),e,t):t(a)}var dne,VM,une,mne,u2,m2,UT,pne,zM,VT=M(()=>{LT();a2();o2();l2();c2();f2();h2();ku();d2();hn();af();dne=/defined\s*?\((.+?)\)/g,VM=/defined\s*?\[(.+?)\]/g,une=/#include\s?<(.+)>(\((.*)\))*(\[(.*)\])*/g,mne=/__decl__/,u2=/light\{X\}.(\w*)/g,m2=/\{X\}/g,UT=[],pne=/(#ifdef)|(#else)|(#elif)|(#endif)|(#ifndef)|(#if)/;zM={loadFile:(n,e,t,i,r,s)=>{throw Ze("FileTools")}}});function v2(n,e){return Pn(e).cachedPipelines[n]}function GT(n){let e=n._name,t=n.context;if(e&&t){let i=Pn(t),r=i.cachedPipelines[e];r==null||r.dispose(),delete i.cachedPipelines[e]}}function E2(n,e,t,i,r,s,a){let o,l,c=dr()?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;p2(n),HM(d,n,(m,p)=>{a&&(a._vertexSourceCodeBeforeMigration=p),t&&(m=t("vertex",m)),n.isFragment=!0,HM(u,n,(_,g)=>{a&&(a._fragmentSourceCodeBeforeMigration=g),t&&(_=t("fragment",_));let v=_2(m,_,n);n=null;let x=Tne(v.vertexCode,v.fragmentCode,e,r);i==null||i(x.vertexSourceCode,x.fragmentSourceCode)},s)},s)}};g2(o,"Vertex","",d=>{a&&(a._rawVertexSourceCode=d),f[0]=d,h()},r),g2(l,"Fragment","Pixel",d=>{a&&(a._rawFragmentSourceCode=d),f[1]=d,h()},r)}function g2(n,e,t,i,r,s){if(typeof HTMLElement!="undefined"&&n instanceof HTMLElement){let l=xT(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||IT,!s)throw new Error("loadFileInjection is not defined");s(o+"."+e.toLowerCase()+".fx",i)}function Tne(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 XM(n){let t=/defined\((.+)\)/.exec(n);if(t&&t.length)return new yh(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 yh(n);let a=n.substring(0,s).trim(),o=n.substring(s+r.length).trim();return new kT(a,r,o)}function One(n){n=n.replace(Cne,"defined[$1]");let e=gn.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 GT:new VT;typeof s=="string"&&(s=s.replace(zM,"defined($1)")),typeof a=="string"&&(a=a.replace(zM,"defined($1)")),o.leftOperand=typeof a=="string"?XM(a):a,o.rightOperand=typeof s=="string"?XM(s):s,t.push(o)}let i=t[t.length-1];return typeof i=="string"&&(i=i.replace(zM,"defined($1)")),typeof i=="string"?XM(i):i}function HT(n,e){let t=new UT,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 yh(r):i==="#ifndef"?t.testExpression=new yh(r,!0):t.testExpression=One(r),t}function YM(n,e,t,i){let r;for(;KM(n,t,i);){r=n.currentLine;let s=r.substring(0,5).toLowerCase();if(s==="#else"){let a=new Ko;e.children.push(a),KM(n,a,i);return}else if(s==="#elif"){let a=HT(r,5);e.children.push(a),t=a}}}function KM(n,e,t){for(;n.canRead;){n.lineIndex++;let i=n.currentLine;if(i.indexOf("#")>=0){let s=Lne.exec(i);if(s&&s.length){switch(s[0]){case"#ifdef":{let o=new Gu;e.children.push(o);let l=HT(i,6);o.children.push(l),YM(n,o,l,t);break}case"#else":case"#elif":return!0;case"#endif":return!1;case"#ifndef":{let o=new Gu;e.children.push(o);let l=HT(i,7);o.children.push(l),YM(n,o,l,t);break}case"#if":{let o=new Gu,l=HT(i,3);e.children.push(o),o.children.push(l),YM(n,o,l,t);break}}continue}}let r=new Ko;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 Nne(n,e,t,i){let r=new Ko,s=new BT;return s.lineIndex=-1,s.lines=n.split(` +`),KM(s,r,i),r.process(e,t,i)}function wne(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",DT(i,e==null?void 0:e.isNDCHalfZRange,e==null?void 0:e.useReverseDepthBuffer,e==null?void 0:e.useExactSrgbConversions),i}function Fne(n,e,t){let i=Dne(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=wne(e,t);e.processor.preProcessor&&(i=e.processor.preProcessor(i,r,s,e.isFragment,e.processingContext));let a={};return i=Nne(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 k_(n,e,t){WT.length=0;let i;for(;(i=yne.exec(n))!==null;)WT.push(i);let r=[n],s=!1;for(let o of WT){let l=o[1];if(l.indexOf("__decl__")!==-1&&(l=l.replace(Pne,""),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+=p.replace(b2,_.toString())+` +`}else e.supportsUniformBuffers||(c=c.replace(R2,(d,u)=>u+"{X}")),c=c.replace(b2,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";qM.loadFile(c,f=>{e.includesShadersStore[l]=f,k_(r.join(""),e,t)});return}}WT.length=0;let a=r.join("");s?k_(a.toString(),e,t):t(a)}var Cne,zM,yne,Pne,R2,b2,WT,Lne,qM,zT=M(()=>{FT();g2();v2();E2();S2();T2();A2();ku();x2();hn();af();Cne=/defined\s*?\((.+?)\)/g,zM=/defined\s*?\[(.+?)\]/g,yne=/#include\s?<(.+)>(\((.*)\))*(\[(.*)\])*/g,Pne=/__decl__/,R2=/light\{X\}.(\w*)/g,b2=/\{X\}/g,WT=[],Lne=/(#ifdef)|(#else)|(#elif)|(#endif)|(#ifndef)|(#if)/;qM={loadFile:(n,e,t,i,r,s)=>{throw Ze("FileTools")}}});function y2(n,e){return Ln(e).cachedPipelines[n]}function XT(n){let e=n._name,t=n.context;if(e&&t){let i=Ln(t),r=i.cachedPipelines[e];r==null||r.dispose(),delete i.cachedPipelines[e]}}function P2(n,e,t,i,r,s,a){let o,l,c=dr()?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;I2(n),jM(d,n,(m,p)=>{a&&(a._vertexSourceCodeBeforeMigration=p),t&&(m=t("vertex",m)),n.isFragment=!0,jM(u,n,(_,g)=>{a&&(a._fragmentSourceCodeBeforeMigration=g),t&&(_=t("fragment",_));let v=M2(m,_,n);n=null;let x=Bne(v.vertexCode,v.fragmentCode,e,r);i==null||i(x.vertexSourceCode,x.fragmentSourceCode)},s)},s)}};C2(o,"Vertex","",d=>{a&&(a._rawVertexSourceCode=d),f[0]=d,h()},r),C2(l,"Fragment","Pixel",d=>{a&&(a._rawFragmentSourceCode=d),f[1]=d,h()},r)}function C2(n,e,t,i,r,s){if(typeof HTMLElement!="undefined"&&n instanceof HTMLElement){let l=CT(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=A.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=A.GetShadersRepository(r)+n,s=s||LT,!s)throw new Error("loadFileInjection is not defined");s(o+"."+e.toLowerCase()+".fx",i)}function Bne(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 S2,XM=M(()=>{Ea();BM();G();Pt();VT();af();S2=(n,e,t,i)=>{try{let r=n.context?Pn(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 ee.Error("Error compiling effect"),r}}});function T2(n,e,t){try{if(n())return e(),!0}catch(i){return t==null||t(i),!0}return!1}var kT,Ja,Ko,jo=M(()=>{kT=[],Ja=class{static SetImmediate(e){kT.length===0&&setTimeout(()=>{let t=kT;kT=[];for(let i of t)i()},1),kT.push(e)}};Ko=(n,e,t,i=16,r=3e4,s=!0,a)=>{if(s&&T2(n,e,t))return null;let o=!1,l=null,c=()=>{if(!o&&!T2(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 sr,Ph=M(()=>{di();Pt();G();XM();jo();sr=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 ie),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 _,g,v,x;this.defines="",this.onCompiled=null,this.onError=null,this.onBind=null,this.uniqueId=0,this.onCompileObservable=new ie,this.onErrorObservable=new ie,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,"|"),p;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=(_=A.shaderLanguage)!=null?_: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: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};E2(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(` +`+e}}else return{vertexSourceCode:n,fragmentSourceCode:e}}var L2,ZM=M(()=>{Ea();HM();G();Pt();zT();af();L2=(n,e,t,i)=>{try{let r=n.context?Ln(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 ee.Error("Error compiling effect"),r}}});function D2(n,e,t){try{if(n())return e(),!0}catch(i){return t==null||t(i),!0}return!1}var YT,eo,jo,qo=M(()=>{YT=[],eo=class{static SetImmediate(e){YT.length===0&&setTimeout(()=>{let t=YT;YT=[];for(let i of t)i()},1),YT.push(e)}};jo=(n,e,t,i=16,r=3e4,s=!0,a)=>{if(s&&D2(n,e,t))return null;let o=!1,l=null,c=()=>{if(!o&&!D2(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 sr,Ph=M(()=>{di();Pt();G();ZM();qo();sr=class n{static get ShadersRepository(){return A.ShadersRepository}static set ShadersRepository(e){A.ShadersRepository=e}get isDisposed(){return this._isDisposed}get onBindObservable(){return this._onBindObservable||(this._onBindObservable=new ie),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 _,g,v,x;this.defines="",this.onCompiled=null,this.onError=null,this.onBind=null,this.uniqueId=0,this.onCompileObservable=new ie,this.onErrorObservable=new ie,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,"|"),p;if(t.attributes){let T=t;if(this._engine=i,this._attributesNames=T.attributes,this._uniformsNames=T.uniformsNames.concat(T.samplers),this._samplerList=T.samplers.slice(),this.defines=T.defines,this.onError=T.onError,this.onCompiled=T.onCompiled,this._fallbacks=T.fallbacks,this._indexParameters=T.indexParameters,this._transformFeedbackVaryings=T.transformFeedbackVaryings||null,this._multiTarget=!!T.multiTarget,this._shaderLanguage=(_=T.shaderLanguage)!=null?_:0,this._disableParallelShaderCompilation=!!T.disableParallelShaderCompilation,T.uniformBuffersNames){this._uniformBuffersNamesList=T.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:A.GetShadersRepository(this._shaderLanguage),includesShadersStore:A.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};P2(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){jo(()=>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(ee.Error("Unable to compile effect:"),ee.Error(`Uniforms: ${this._uniformsNames.join(" ")}`),ee.Error(`Attributes: ${i.join(" ")}`),ee.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&&(ee.Error("Vertex code:"),ee.Error(h))),(o=this._pipelineContext)!=null&&o._getFragmentShaderCode()&&([h,f]=this._getShaderCodeAndErrorLine((l=this._pipelineContext)==null?void 0:l._getFragmentShaderCode(),this._compilationError,!0),h&&(ee.Error("Fragment code:"),ee.Error(h))),c&&ee.Error(c),f&&ee.Error(f)}ee.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,ee.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&>(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={}}};sr.LogShaderCodeOnCompilationError=!0;sr.PersistentMode=!1;sr.AutomaticallyClearCodeCache=!1;sr._UniqueIdSeed=0;sr._BaseCache={};sr.ShadersStore=T.ShadersStore;sr.IncludesShadersStore=T.IncludesShadersStore});var qn,YM=M(()=>{qn=class n{static SetMatrixPrecision(e){if(n.MatrixTrackPrecisionChange=!1,e&&!n.MatrixUse64Bits&&n.MatrixTrackedMatrices)for(let t=0;t{Ea();_r=class{static get Now(){return dr()&&window.performance&&window.performance.now?window.performance.now():Date.now()}}});var WT,A2=M(()=>{WT=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 HT,x2=M(()=>{HT=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 Lh,R2=M(()=>{Lh=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}};Lh.ALWAYS=519;Lh.KEEP=7680;Lh.REPLACE=7681});var Wu,KM=M(()=>{Wu=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{di();Ph();Oi();Pt();YM();Ul();A2();x2();R2();KM();hn();Ts();Ea();af();Me=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+=` +`+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&&(ee.Error("Vertex code:"),ee.Error(h))),(o=this._pipelineContext)!=null&&o._getFragmentShaderCode()&&([h,f]=this._getShaderCodeAndErrorLine((l=this._pipelineContext)==null?void 0:l._getFragmentShaderCode(),this._compilationError,!0),h&&(ee.Error("Fragment code:"),ee.Error(h))),c&&ee.Error(c),f&&ee.Error(f)}ee.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,ee.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&&XT(this._pipelineContext),this._engine._releaseEffect(this),this.clearCodeCache(),this._isDisposed=!0)}static RegisterShader(e,t,i,r=0){t&&(A.GetShadersStore(r)[`${e}PixelShader`]=t),i&&(A.GetShadersStore(r)[`${e}VertexShader`]=i)}static ResetCache(){n._BaseCache={}}};sr.LogShaderCodeOnCompilationError=!0;sr.PersistentMode=!1;sr.AutomaticallyClearCodeCache=!1;sr._UniqueIdSeed=0;sr._BaseCache={};sr.ShadersStore=A.ShadersStore;sr.IncludesShadersStore=A.IncludesShadersStore});var Zn,QM=M(()=>{Zn=class n{static SetMatrixPrecision(e){if(n.MatrixTrackPrecisionChange=!1,e&&!n.MatrixUse64Bits&&n.MatrixTrackedMatrices)for(let t=0;t{Ea();_r=class{static get Now(){return dr()&&window.performance&&window.performance.now?window.performance.now():Date.now()}}});var KT,O2=M(()=>{KT=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 jT,N2=M(()=>{jT=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 Lh,w2=M(()=>{Lh=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}};Lh.ALWAYS=519;Lh.KEEP=7680;Lh.REPLACE=7681});var Wu,$M=M(()=>{Wu=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{di();Ph();Ni();Pt();QM();Bl();O2();N2();w2();$M();hn();Rs();Ea();af();Me=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()}sr.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(){ee.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,dr()){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(S).toLowerCase():"");R.indexOf("?")>-1&&(R=R.split("?")[0]);let C=n.GetCompatibleTextureLoader(R,m);r&&r.addPendingData(A),A.url=e,A.generateMipMaps=!t,A.samplingMode=s,A.invertY=i,A._useSRGBBuffer=this._getUseSRGBBuffer(!!_,t),this._doNotHandleContextLost||(A._buffer=f);let y=null;a&&!h&&(y=A.onLoadedObservable.add(a)),h||this._internalTexturesCache.push(A);let D=(O,V)=>{r&&r.removePendingData(A),e===E?(y&&A.onLoadedObservable.remove(y),Oe.UseFallbackTexture&&e!==Oe.FallbackTexture&&this._createTextureBase(Oe.FallbackTexture,t,A.invertY,r,s,null,o,l,c,f,A),O=(O||"Unknown error")+(Oe.UseFallbackTexture?" - Fallback texture was used":""),A.onErrorObservable.notifyObservers({message:O,exception:V}),o&&o(O,V)):(ee.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(C){let O=async V=>{(await C).loadData(V,A,(w,B,W,te,$,J)=>{J?D("TextureLoader failed to load data"):l(A,R,r,{width:w,height:B},A.invertY,!W,te,()=>($(),!1),s)},p)};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:sf()?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,p;this._colorWrite=!0,this._colorWriteChanged=!0,this._depthCullingState=new WT,this._stencilStateComposer=new HT,this._stencilState=new Lh,this._alphaState=new Wu(!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 ie,this.onCanvasFocusObservable=new ie,this.onNewSceneAddedObservable=new ie,this.onResizeObservable=new ie,this.onCanvasPointerOutObservable=new ie,this.onEffectErrorObservable=new ie,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 ie,this.renderEvenInBackground=!0,this.preventCacheWipeBetweenFrames=!1,this._frameHandler=0,this._activeRenderLoops=new Array,this._windowIsBackground=!1,this._boundRenderFunction=_=>this._renderLoop(_),this._lastFrameTime=0,this._renderAccumulator=0,this.skipFrameRender=!1,this.onBeforeShaderCompilationObservable=new ie,this.onAfterShaderCompilationObservable=new ie,this.onBeginFrameObservable=new ie,this.onEndFrameObservable=new ie,this._transformTextureUrl=null,this._uniformBuffers=new Array,this._storageBuffers=new Array,this._highPrecisionShadersAllowed=!0,this.onContextLostObservable=new ie,this.onContextRestoredObservable=new ie,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 ie,this.onReleaseEffectsObservable=new ie,Oe.Instances.push(this),this.startTime=_r.Now,this._stencilStateComposer.stencilGlobal=this._stencilState,qn.SetMatrixPrecision(!!t.useLargeWorldRendering||!!t.useHighPrecisionMatrix),Fl()&&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=(p=t.useExactSrgbConversions)!=null?p:!1;let r=dr()&&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=dr()&&window.devicePixelRatio||1,o=this._lastDevicePixelRatio/a;this._lastDevicePixelRatio=a,this._hardwareScalingLevel*=o}if(dr()&&sf())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&&sf()&&"ontouchend"in document},this._checkForMobile(),dr()&&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 Ze("FileTools")}_loadFile(e,t,i,r,s,a){let o=IT(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(Vu.loadFile)return Vu.loadFile(e,t,i,r,s,a);throw Ze("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),sr.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(),dr()&&window.removeEventListener("resize",this._checkForMobile);let e=Oe.Instances.indexOf(this);e>=0&&Oe.Instances.splice(e,1),Oe.Instances.length||(Oe.OnEnginesDisposedObservable.notifyObservers(this),Oe.OnEnginesDisposedObservable.clear()),this.onBeginFrameObservable.clear(),this.onEndFrameObservable.clear()}static DefaultLoadingScreenFactory(e){throw Ze("LoadingScreen")}static MarkAllMaterialsAsDirty(e,t){for(let i=0;i{});var XT,I2=M(()=>{XT=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 Ane,YT,M2=M(()=>{Ane=/(flat\s)?\s*varying\s*.*/,YT=class{constructor(){this.shaderLanguage=0}attributeProcessor(e){return e.replace("attribute","in")}varyingCheck(e,t){return Ane.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()}sr.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(){ee.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,dr()){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(S).toLowerCase():"");R.indexOf("?")>-1&&(R=R.split("?")[0]);let C=n.GetCompatibleTextureLoader(R,m);r&&r.addPendingData(T),T.url=e,T.generateMipMaps=!t,T.samplingMode=s,T.invertY=i,T._useSRGBBuffer=this._getUseSRGBBuffer(!!_,t),this._doNotHandleContextLost||(T._buffer=f);let y=null;a&&!h&&(y=T.onLoadedObservable.add(a)),h||this._internalTexturesCache.push(T);let D=(O,V)=>{r&&r.removePendingData(T),e===E?(y&&T.onLoadedObservable.remove(y),Oe.UseFallbackTexture&&e!==Oe.FallbackTexture&&this._createTextureBase(Oe.FallbackTexture,t,T.invertY,r,s,null,o,l,c,f,T),O=(O||"Unknown error")+(Oe.UseFallbackTexture?" - Fallback texture was used":""),T.onErrorObservable.notifyObservers({message:O,exception:V}),o&&o(O,V)):(ee.Warn(`Failed to load ${e}, falling back to ${E}`),this._createTextureBase(E,t,T.invertY,r,s,a,o,l,c,f,T,d,u,m,p,_))};if(C){let O=async V=>{(await C).loadData(V,T,(w,U,W,te,$,J)=>{J?D("TextureLoader failed to load data"):l(T,R,r,{width:w,height:U},T.invertY,!W,te,()=>($(),!1),s)},p)};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&&(T._buffer=V),l(T,R,r,V,T.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,T.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,T.invertY&&this._features.needsInvertingBitmap?{imageOrientation:"flipY"}:void 0,this):f&&O(f)}return T}_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:sf()?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,p;this._colorWrite=!0,this._colorWriteChanged=!0,this._depthCullingState=new KT,this._stencilStateComposer=new jT,this._stencilState=new Lh,this._alphaState=new Wu(!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 ie,this.onCanvasFocusObservable=new ie,this.onNewSceneAddedObservable=new ie,this.onResizeObservable=new ie,this.onCanvasPointerOutObservable=new ie,this.onEffectErrorObservable=new ie,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 ie,this.renderEvenInBackground=!0,this.preventCacheWipeBetweenFrames=!1,this._frameHandler=0,this._activeRenderLoops=new Array,this._windowIsBackground=!1,this._boundRenderFunction=_=>this._renderLoop(_),this._lastFrameTime=0,this._renderAccumulator=0,this.skipFrameRender=!1,this.onBeforeShaderCompilationObservable=new ie,this.onAfterShaderCompilationObservable=new ie,this.onBeginFrameObservable=new ie,this.onEndFrameObservable=new ie,this._transformTextureUrl=null,this._uniformBuffers=new Array,this._storageBuffers=new Array,this._highPrecisionShadersAllowed=!0,this.onContextLostObservable=new ie,this.onContextRestoredObservable=new ie,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 ie,this.onReleaseEffectsObservable=new ie,Oe.Instances.push(this),this.startTime=_r.Now,this._stencilStateComposer.stencilGlobal=this._stencilState,Zn.SetMatrixPrecision(!!t.useLargeWorldRendering||!!t.useHighPrecisionMatrix),Fl()&&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=(p=t.useExactSrgbConversions)!=null?p:!1;let r=dr()&&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=dr()&&window.devicePixelRatio||1,o=this._lastDevicePixelRatio/a;this._lastDevicePixelRatio=a,this._hardwareScalingLevel*=o}if(dr()&&sf())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&&sf()&&"ontouchend"in document},this._checkForMobile(),dr()&&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 Ze("FileTools")}_loadFile(e,t,i,r,s,a){let o=LT(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(Vu.loadFile)return Vu.loadFile(e,t,i,r,s,a);throw Ze("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),sr.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(),dr()&&window.removeEventListener("resize",this._checkForMobile);let e=Oe.Instances.indexOf(this);e>=0&&Oe.Instances.splice(e,1),Oe.Instances.length||(Oe.OnEnginesDisposedObservable.notifyObservers(this),Oe.OnEnginesDisposedObservable.clear()),this.onBeginFrameObservable.clear(),this.onEndFrameObservable.clear()}static DefaultLoadingScreenFactory(e){throw Ze("LoadingScreen")}static MarkAllMaterialsAsDirty(e,t){for(let i=0;i{});var ZT,B2=M(()=>{ZT=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 Une,QT,U2=M(()=>{Une=/(flat\s)?\s*varying\s*.*/,QT=class{constructor(){this.shaderLanguage=0}attributeProcessor(e){return e.replace("attribute","in")}varyingCheck(e,t){return Une.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 Dh,qM=M(()=>{Dh=class n{get underlyingResource(){return null}constructor(){this.references=0,this.capacity=0,this.is32Bits=!1,this.uniqueId=n._Counter++}};Dh._Counter=0});var qo,KT=M(()=>{qM();qo=class extends Dh{constructor(e){super(),this._buffer=e}get underlyingResource(){return this._buffer}}});function Oh(n){let e=1;do e*=2;while(en-t?t:e}function C2(n){return n--,n|=n>>1,n|=n>>2,n|=n>>4,n|=n>>8,n|=n>>16,n++,n}function jT(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 gn(n,e,t=2){let i;switch(t){case 1:i=jT(n);break;case 2:i=ZM(n);break;default:i=C2(n);break}return Math.min(i,e)}var eo=M(()=>{});var Hu,QM=M(()=>{Hu=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 $M(n){return n===13||n===14||n===15||n===16||n===17||n===18||n===19}function Bl(n){return n===13||n===17||n===18||n===19}var W_=M(()=>{});var y2={};tt(y2,{ThinEngine:()=>bt});var JM,bt,Zn=M(()=>{Ph();BM();Br();jM();Pt();Ea();I2();M2();KT();eo();QM();Ts();af();XM();W_();KM();JM=class{},bt=class n extends Me{get name(){return this._name}set name(e){this._name=e}get version(){return this._webGLVersion}static get ShadersRepository(){return sr.ShadersRepository}static set ShadersRepository(e){sr.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,_=new RegExp(u).exec(l);if(_&&_.length>0&&parseInt(_[_.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=()=>{CT(this._gl)}:(this._onContextLost=l=>{l.preventDefault(),this._contextWasLost=!0,CT(this._gl),ee.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 YT:new XT;let a=`Babylon.js v${n.Version}`;ee.Log(a+` - ${this.description}`),this._renderingCanvas&&this._renderingCanvas.setAttribute&&this._renderingCanvas.setAttribute("data-engine",a);let o=Pn(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 Wu(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,ee.Warn("Float textures are not supported. Type forced to TEXTURETYPE_UNSIGNED_BYTE"));let _=$M(c),g=Bl(c),v=this._gl,x=new Di(this,r),A=e.width||e,E=e.height||e,S=e.depth||0,R=e.layers||0,I=this._getSamplingParameters(l,(s||a)&&!_),C=R!==0?v.TEXTURE_2D_ARRAY:S!==0?v.TEXTURE_3D:p?v.TEXTURE_CUBE_MAP:v.TEXTURE_2D,y=_?this._getInternalFormatFromDepthTextureFormat(c,!0,g):this._getRGBABufferInternalSizedFormat(o,c,f),D=_?g?v.DEPTH_STENCIL:v.DEPTH_COMPONENT:this._getInternalFormat(c),O=_?this._getWebGLTextureTypeFromDepthTextureFormat(c):this._getWebGLTextureType(o);if(this._bindTextureDirectly(C,x),R!==0)x.is2DArray=!0,v.texImage3D(C,0,y,A,E,R,0,D,O,null);else if(S!==0)x.is3D=!0,v.texImage3D(C,0,y,A,E,S,0,D,O,null);else if(p){x.isCube=!0;for(let N=0;N<6;N++)v.texImage2D(v.TEXTURE_CUBE_MAP_POSITIVE_X+N,0,y,A,E,0,D,O,null)}else v.texImage2D(C,0,y,A,E,0,D,O,null);if(v.texParameteri(C,v.TEXTURE_MAG_FILTER,I.mag),v.texParameteri(C,v.TEXTURE_MIN_FILTER,I.min),v.texParameteri(C,v.TEXTURE_WRAP_S,v.CLAMP_TO_EDGE),v.texParameteri(C,v.TEXTURE_WRAP_T,v.CLAMP_TO_EDGE),_&&this.webGLVersion>1&&(m===0?(v.texParameteri(C,v.TEXTURE_COMPARE_FUNC,515),v.texParameteri(C,v.TEXTURE_COMPARE_MODE,v.NONE)):(v.texParameteri(C,v.TEXTURE_COMPARE_FUNC,m),v.texParameteri(C,v.TEXTURE_COMPARE_MODE,v.COMPARE_REF_TO_TEXTURE))),(s||a)&&this._gl.generateMipmap(C),this._bindTextureDirectly(C,null),x._useSRGBBuffer=f,x.baseWidth=A,x.baseHeight=E,x.width=A,x.height=E,x.depth=R||S,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($M(x.format)?N=this._setupFramebufferDepthAttachments(Bl(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,p){return this._createTextureBase(e,t,i,r,s,a,o,(..._)=>this._prepareWebGLTexture(..._,f),(_,g,v,x,A,E)=>{let S=this._gl,R=v.width===_&&v.height===g;A._creationFlags=m!=null?m:0;let I=this._getTexImageParametersForCreateTexture(A.format,A._useSRGBBuffer);if(R)return S.texImage2D(S.TEXTURE_2D,0,I.internalFormat,I.format,I.type,v),!1;let C=this._caps.maxTextureSize;if(v.width>C||v.height>C||!this._supportsHardwareTextureRescaling)return this._prepareWorkingCanvas(),!this._workingCanvas||!this._workingContext||(this._workingCanvas.width=_,this._workingCanvas.height=g,this._workingContext.drawImage(v,0,0,v.width,v.height,0,0,_,g),S.texImage2D(S.TEXTURE_2D,0,I.internalFormat,I.format,I.type,this._workingCanvas),A.width=_,A.height=g),!1;{let y=new Di(this,2);this._bindTextureDirectly(S.TEXTURE_2D,y,!0),S.texImage2D(S.TEXTURE_2D,0,I.internalFormat,I.format,I.type,v),this._rescaleTexture(y,A,r,I.format,()=>{this._releaseTexture(y),this._bindTextureDirectly(S.TEXTURE_2D,A,!0),E()})}return!0},l,c,f,h,d,u,p)}_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)),p=a?e.height:Math.pow(2,Math.max(u-r,0));o.texImage2D(h,r,f,m,p,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?gn(r.width,h):r.width),u=Math.min(h,this.needPOTTextures?gn(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&&(n2(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 ee.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;dr()&&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()),CT(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{Ul();qT=class{constructor(e=30){this._enabled=!0,this._rollingFrameTime=new eC(e)}sampleFrame(e=_r.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()}},eC=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 L2=M(()=>{Zn();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 D2(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{Ts();Pt();Zn();eo();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 Di(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 Di(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,ee.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,ee.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,ee.Warn("Render to float textures is not supported. Mipmap generation forced to false.")):f===l.HALF_FLOAT&&!this._caps.colorBufferFloat&&(r=!1,ee.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||Oh(c.width)&&Oh(c.height)||(r=!1),n)this.updateRawCubeTexture(c,n,t,i,s,o);else{let _=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,_,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 p=this._getSamplingParameters(a,r);return l.texParameteri(l.TEXTURE_CUBE_MAP,l.TEXTURE_MAG_FILTER,p.mag),l.texParameteri(l.TEXTURE_CUBE_MAP,l.TEXTURE_MIN_FILTER,p.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=D2(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||Oh(n.width)&&Oh(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=(_,g)=>{e==null||e.removePendingData(u),c&&c(_?_.status+" "+_.statusText:"Failed to parse texture data",g)},p=async _=>{if(!u._hardwareTexture)return;let g=a(_);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),S=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 C=0;C>C;for(let D=0;D<6;D++){let O=I[C][D];R&&(O=D2(O,y,y,r)),d.texImage2D(D,C,S,y,y,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(_).catch(g=>{m(void 0,g)})},void 0,e==null?void 0:e.offlineProvider,!0,m),u};bt.prototype.createRawTexture2DArray=O2(!1);bt.prototype.createRawTexture3D=O2(!0);bt.prototype.updateRawTexture2DArray=N2(!1);bt.prototype.updateRawTexture3D=N2(!0)});var F2=M(()=>{Zn();af();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 p=f.createFramebuffer();if(!p)throw new Error("Unable to create dummy framebuffer");this._dummyFramebuffer=p}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;return o?s||(s=J3(n.type,4*e*t)):h===f.UNSIGNED_BYTE?(s||(s=new Uint8Array(4*e*t)),h=f.UNSIGNED_BYTE):(s||(s=new Float32Array(4*e*t)),h=f.FLOAT),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 U2=M(()=>{Zn();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 B2=M(()=>{Zn();Ts();Pt();eo();bt.prototype._createDepthStencilCubeTexture=function(n,e){let t=new Di(this,12);if(t.isCube=!0,this.webGLVersion===1)return ee.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 p=this._gl;return this.createCubeTextureBase(n,e,t,!!i,r,s,a,o,l,c,f,h,_=>this._bindTextureDirectly(p.TEXTURE_CUBE_MAP,_,!0),(_,g)=>{let v=this.needPOTTextures?gn(g[0].width,this._caps.maxCubemapTextureSize):g[0].width,x=v,A=[p.TEXTURE_CUBE_MAP_POSITIVE_X,p.TEXTURE_CUBE_MAP_POSITIVE_Y,p.TEXTURE_CUBE_MAP_POSITIVE_Z,p.TEXTURE_CUBE_MAP_NEGATIVE_X,p.TEXTURE_CUBE_MAP_NEGATIVE_Y,p.TEXTURE_CUBE_MAP_NEGATIVE_Z];this._bindTextureDirectly(p.TEXTURE_CUBE_MAP,_,!0),this._unpackFlipY(!1);let E=a?this._getInternalFormat(a,_._useSRGBBuffer):_._useSRGBBuffer?this._glSRGBExtensionValues.SRGB8_ALPHA8:p.RGBA,S=a?this._getInternalFormat(a):p.RGBA;_._useSRGBBuffer&&this.webGLVersion===1&&(S=E);for(let R=0;R{W_();ZT=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=Bl(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=[],S={};for(let C=0;C1&&e.setSamples(this.samples),e._swapRenderTargetWrapper(this),e.dispose()}}releaseTextures(){if(this._textures)for(let e=0;e{V2();W_();QT=class extends ZT{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,Bl(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 p=i!==void 0?m.TEXTURE_CUBE_MAP_POSITIVE_X+i:m.TEXTURE_2D;m.framebufferTexture2D(m.FRAMEBUFFER,c,p,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{Br();Me.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 k2=M(()=>{Ts();Pt();Zn();G2();W_();tC();bt.prototype._createHardwareRenderTargetWrapper=function(n,e,t){let i=new QT(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=(p=e.generateDepthBuffer)!=null?p:!0,r=!!e.generateStencilBuffer,s=!!e.noColorAttachment,a=e.colorAttachment,o=(_=e.samples)!=null?_: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 Di(this,12);if(o.label=e.label,!this._caps.depthTextureExtension)return ee.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 ee.Error(`Depth texture ${l.depthTextureFormat} format is not supported.`),o;o.format=l.depthTextureFormat}else o.format=l.generateStencil?13:16;let c=Bl(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 W2=M(()=>{Zn();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 H2=M(()=>{Ts();Pt();Zn();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 Di(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,ee.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 z2,zu,gr,Nt,Ln=M(()=>{z2=.45454545454545453,zu=2.2,gr=(1+Math.sqrt(5))/2,Nt=.001});function dn(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 $T(n,e){let t=Rne.map(i=>xne(n,i,e));return()=>{for(let i of t)i==null||i()}}var Rne,Zo=M(()=>{Rne=["push","splice","pop","shift","unshift"]});function Ft(n,e){X2[n]=e}function vn(n){return X2[n]}var X2,zi=M(()=>{X2={}});function Si(n,e,t=1401298e-51){return Math.abs(n-e)<=t}function ar(n,e){return n===e?n:Math.random()*(e-n)+n}function to(n,e,t){return n+(e-n)*t}function Y2(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 K2(n){return n-=Math.PI*2*Math.floor((n+Math.PI)/(Math.PI*2)),n}function io(n){let e=n.toString(16);return n<=15?("0"+e).toUpperCase():e.toUpperCase()}function j2(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 JT(n,e){let t=n%e;return t===0?e:JT(e,t)}var Dn=M(()=>{});function q2(n){n.updateFlag=Xu._UpdateFlagSeed++}function iC(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],p=r[9],_=r[10],g=r[11],v=r[12],x=r[13],A=r[14],E=r[15],S=s[0],R=s[1],I=s[2],C=s[3],y=s[4],D=s[5],O=s[6],V=s[7],N=s[8],w=s[9],B=s[10],W=s[11],te=s[12],$=s[13],J=s[14],z=s[15];t[i]=a*S+o*y+l*N+c*te,t[i+1]=a*R+o*D+l*w+c*$,t[i+2]=a*I+o*O+l*B+c*J,t[i+3]=a*C+o*V+l*W+c*z,t[i+4]=f*S+h*y+d*N+u*te,t[i+5]=f*R+h*D+d*w+u*$,t[i+6]=f*I+h*O+d*B+u*J,t[i+7]=f*C+h*V+d*W+u*z,t[i+8]=m*S+p*y+_*N+g*te,t[i+9]=m*R+p*D+_*w+g*$,t[i+10]=m*I+p*O+_*B+g*J,t[i+11]=m*C+p*V+_*W+g*z,t[i+12]=v*S+x*y+A*N+E*te,t[i+13]=v*R+x*D+A*w+E*$,t[i+14]=v*I+x*O+A*B+E*J,t[i+15]=v*C+x*V+A*W+E*z}function Nh(n,e,t,i=0){iC(n,e,t.asArray(),i),q2(t)}function Z2(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 H_(n,e){let t=rC(n,e.asArray());return t&&q2(e),t}function rC(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],p=t[12],_=t[13],g=t[14],v=t[15],x=u*v-g*m,A=d*v-_*m,E=d*g-_*u,S=h*v-p*m,R=h*g-u*p,I=h*_-p*d,C=+(l*x-c*A+f*E),y=-(o*x-c*S+f*R),D=+(o*A-l*S+f*I),O=-(o*E-l*R+c*I),V=i*C+r*y+s*D+a*O;if(V===0)return!1;let N=1/V,w=c*v-g*f,B=l*v-_*f,W=l*g-_*c,te=o*v-p*f,$=o*g-p*c,J=o*_-p*l,z=c*m-u*f,Y=l*m-d*f,me=l*u-d*c,xe=o*m-h*f,Ue=o*u-h*c,ae=o*d-h*l,ve=-(r*x-s*A+a*E),ne=+(i*x-s*S+a*R),ue=-(i*A-r*S+a*I),De=+(i*E-r*R+s*I),de=+(r*w-s*B+a*W),be=-(i*w-s*te+a*$),Ke=+(i*B-r*te+a*J),Tt=-(i*W-r*$+s*J),Xe=-(r*z-s*Y+a*me),je=+(i*z-s*xe+a*Ue),$t=-(i*Y-r*xe+a*ae),Dt=+(i*me-r*Ue+s*ae);return e[0]=C*N,e[1]=ve*N,e[2]=de*N,e[3]=Xe*N,e[4]=y*N,e[5]=ne*N,e[6]=be*N,e[7]=je*N,e[8]=D*N,e[9]=ue*N,e[10]=Ke*N,e[11]=$t*N,e[12]=O*N,e[13]=De*N,e[14]=Tt*N,e[15]=Dt*N,!0}var Xu,nC=M(()=>{Xu=class{};Xu._UpdateFlagSeed=0});var Qn,Fe,b,Ii,ze,j,He,Z,wh,Ge=M(()=>{Ln();Zo();zi();YM();Oi();Dn();nC();Qn=n=>parseInt(n.toString().replace(/\W/g,"")),Fe=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=Qn(this.x),t=Qn(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&&Si(this.x,e.x,t)&&Si(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(ar(e,t),ar(e,t))}static RandomToRef(e=0,t=1,i){return i.copyFromFloats(ar(e,t),ar(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)}};Fe._V8PerformanceHack=new Fe(.5,.5);Fe._ZeroReadOnly=Fe.Zero();Object.defineProperties(Fe.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=Qn(this._x),t=Qn(this._y),i=Qn(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=He.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&&Si(this._x,e._x,t)&&Si(this._y,e._y,t)&&Si(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(!Si(t,i,e))return!0;let r=Math.abs(this._z);return!Si(t,r,e)||!Si(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=He.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(He.Matrix[0]),n.TransformCoordinatesToRef(this,He.Matrix[0],t),t}rotateByQuaternionAroundPointToRef(e,t,i){return this.subtractToRef(t,He.Vector3[0]),He.Vector3[0].rotateByQuaternionToRef(e,He.Vector3[0]),t.addToRef(He.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(He.Vector3[1]),s=t.normalizeToRef(He.Vector3[2]),a=n.Dot(r,s);a=wt(a,-1,1);let o=Math.acos(a),l=He.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){He.Vector3[0].copyFrom(e);let r=He.Vector3[0];He.Vector3[1].copyFrom(t);let s=He.Vector3[1];He.Vector3[2].copyFrom(i);let a=He.Vector3[2],o=He.Vector3[3],l=He.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 K2(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=wt(i,0,1);let s=He.Vector3[0],a=He.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(to(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(ar(e,t),ar(e,t),ar(e,t))}static RandomToRef(e=0,t=1,i){return i.copyFromFloats(ar(e,t),ar(e,t),ar(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&&y<0?(O.copyFrom(a),V=t,N=i):y>0&&D<0?(O.copyFrom(l),V=i,N=r):(O.copyFrom(o).scaleInPlace(-1),V=r,N=t);let w=He.Vector3[9],B=He.Vector3[4];if(V.subtractToRef(v,S),N.subtractToRef(v,w),n.CrossToRef(S,w,B),!(n.Dot(B,c)<0))return s.copyFrom(v),Math.abs(p*_);let te=He.Vector3[5];n.CrossToRef(O,B,te),te.normalize();let $=He.Vector3[9];$.copyFrom(V).subtractInPlace(v);let J=$.length();if(Jthis._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(ar(e,t),ar(e,t),ar(e,t),ar(e,t))}static RandomToRef(e=0,t=1,i){return i.x=ar(e,t),i.y=ar(e,t),i.z=ar(e,t),i.w=ar(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}};Ii._V8PerformanceHack=new Ii(.5,.5,.5,.5);Ii._ZeroReadOnly=Ii.Zero();Object.defineProperties(Ii.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=Qn(this._x),t=Qn(this._y),i=Qn(this._z),r=Qn(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&&Si(this._x,e._x,t)&&Si(this._y,e._y,t)&&Si(this._z,e._z,t)&&Si(this._w,e._w,t)}isApprox(e,t=Nt){return e&&(Si(this._x,e._x,t)&&Si(this._y,e._y,t)&&Si(this._z,e._z,t)&&Si(this._w,e._w,t)||Si(this._x,-e._x,t)&&Si(this._y,-e._y,t)&&Si(this._z,-e._z,t)&&Si(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 j.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,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=He.Matrix[0];return e=e.normalizeToRef(He.Vector3[0]),t=t.normalizeToRef(He.Vector3[1]),i=i.normalizeToRef(He.Vector3[2]),j.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=He.Matrix[0];return j.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=He.Matrix[0];return j.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,p=e._w*l+i._w*c+t._w*f+r._w*h;return new n(d,u,m,p)}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(ar(e,t),ar(e,t),ar(e,t),ar(e,t))}static RandomToRef(e=0,t=1,i){return i.copyFromFloats(ar(e,t),ar(e,t),ar(e,t),ar(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}});j=class n{static get Use64Bits(){return qn.MatrixUse64Bits}get m(){return this._m}markAsUpdated(){this.updateFlag=Xu._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,qn.MatrixTrackPrecisionChange&&qn.MatrixTrackedMatrices.push(this),this._m=new qn.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],p=e[13],_=e[14],g=e[15],v=d*g-_*u,x=h*g-p*u,A=h*_-p*d,E=f*g-m*u,S=f*_-d*m,R=f*p-m*h,I=+(o*v-l*x+c*A),C=-(a*v-l*E+c*S),y=+(a*x-o*E+c*R),D=-(a*A-o*S+l*R);return t*I+i*C+r*y+s*D}toString(){return`{${this.m[0]}, ${this.m[1]}, ${this.m[2]}, ${this.m[3]} +`+e;return e}}});var Dh,eC=M(()=>{Dh=class n{get underlyingResource(){return null}constructor(){this.references=0,this.capacity=0,this.is32Bits=!1,this.uniqueId=n._Counter++}};Dh._Counter=0});var Zo,$T=M(()=>{eC();Zo=class extends Dh{constructor(e){super(),this._buffer=e}get underlyingResource(){return this._buffer}}});function Oh(n){let e=1;do e*=2;while(en-t?t:e}function V2(n){return n--,n|=n>>1,n|=n>>2,n|=n>>4,n|=n>>8,n|=n>>16,n++,n}function JT(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 vn(n,e,t=2){let i;switch(t){case 1:i=JT(n);break;case 2:i=tC(n);break;default:i=V2(n);break}return Math.min(i,e)}var to=M(()=>{});var Hu,iC=M(()=>{Hu=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 rC(n){return n===13||n===14||n===15||n===16||n===17||n===18||n===19}function Ul(n){return n===13||n===17||n===18||n===19}var H_=M(()=>{});var G2={};tt(G2,{ThinEngine:()=>bt});var nC,bt,Qn=M(()=>{Ph();HM();Ur();JM();Pt();Ea();B2();U2();$T();to();iC();Rs();af();ZM();H_();$M();nC=class{},bt=class n extends Me{get name(){return this._name}set name(e){this._name=e}get version(){return this._webGLVersion}static get ShadersRepository(){return sr.ShadersRepository}static set ShadersRepository(e){sr.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,_=new RegExp(u).exec(l);if(_&&_.length>0&&parseInt(_[_.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=()=>{OT(this._gl)}:(this._onContextLost=l=>{l.preventDefault(),this._contextWasLost=!0,OT(this._gl),ee.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 QT:new ZT;let a=`Babylon.js v${n.Version}`;ee.Log(a+` - ${this.description}`),this._renderingCanvas&&this._renderingCanvas.setAttribute&&this._renderingCanvas.setAttribute("data-engine",a);let o=Ln(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 Wu(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,ee.Warn("Float textures are not supported. Type forced to TEXTURETYPE_UNSIGNED_BYTE"));let _=rC(c),g=Ul(c),v=this._gl,x=new Oi(this,r),T=e.width||e,E=e.height||e,S=e.depth||0,R=e.layers||0,I=this._getSamplingParameters(l,(s||a)&&!_),C=R!==0?v.TEXTURE_2D_ARRAY:S!==0?v.TEXTURE_3D:p?v.TEXTURE_CUBE_MAP:v.TEXTURE_2D,y=_?this._getInternalFormatFromDepthTextureFormat(c,!0,g):this._getRGBABufferInternalSizedFormat(o,c,f),D=_?g?v.DEPTH_STENCIL:v.DEPTH_COMPONENT:this._getInternalFormat(c),O=_?this._getWebGLTextureTypeFromDepthTextureFormat(c):this._getWebGLTextureType(o);if(this._bindTextureDirectly(C,x),R!==0)x.is2DArray=!0,v.texImage3D(C,0,y,T,E,R,0,D,O,null);else if(S!==0)x.is3D=!0,v.texImage3D(C,0,y,T,E,S,0,D,O,null);else if(p){x.isCube=!0;for(let N=0;N<6;N++)v.texImage2D(v.TEXTURE_CUBE_MAP_POSITIVE_X+N,0,y,T,E,0,D,O,null)}else v.texImage2D(C,0,y,T,E,0,D,O,null);if(v.texParameteri(C,v.TEXTURE_MAG_FILTER,I.mag),v.texParameteri(C,v.TEXTURE_MIN_FILTER,I.min),v.texParameteri(C,v.TEXTURE_WRAP_S,v.CLAMP_TO_EDGE),v.texParameteri(C,v.TEXTURE_WRAP_T,v.CLAMP_TO_EDGE),_&&this.webGLVersion>1&&(m===0?(v.texParameteri(C,v.TEXTURE_COMPARE_FUNC,515),v.texParameteri(C,v.TEXTURE_COMPARE_MODE,v.NONE)):(v.texParameteri(C,v.TEXTURE_COMPARE_FUNC,m),v.texParameteri(C,v.TEXTURE_COMPARE_MODE,v.COMPARE_REF_TO_TEXTURE))),(s||a)&&this._gl.generateMipmap(C),this._bindTextureDirectly(C,null),x._useSRGBBuffer=f,x.baseWidth=T,x.baseHeight=E,x.width=T,x.height=E,x.depth=R||S,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(rC(x.format)?N=this._setupFramebufferDepthAttachments(Ul(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,p){return this._createTextureBase(e,t,i,r,s,a,o,(..._)=>this._prepareWebGLTexture(..._,f),(_,g,v,x,T,E)=>{let S=this._gl,R=v.width===_&&v.height===g;T._creationFlags=m!=null?m:0;let I=this._getTexImageParametersForCreateTexture(T.format,T._useSRGBBuffer);if(R)return S.texImage2D(S.TEXTURE_2D,0,I.internalFormat,I.format,I.type,v),!1;let C=this._caps.maxTextureSize;if(v.width>C||v.height>C||!this._supportsHardwareTextureRescaling)return this._prepareWorkingCanvas(),!this._workingCanvas||!this._workingContext||(this._workingCanvas.width=_,this._workingCanvas.height=g,this._workingContext.drawImage(v,0,0,v.width,v.height,0,0,_,g),S.texImage2D(S.TEXTURE_2D,0,I.internalFormat,I.format,I.type,this._workingCanvas),T.width=_,T.height=g),!1;{let y=new Oi(this,2);this._bindTextureDirectly(S.TEXTURE_2D,y,!0),S.texImage2D(S.TEXTURE_2D,0,I.internalFormat,I.format,I.type,v),this._rescaleTexture(y,T,r,I.format,()=>{this._releaseTexture(y),this._bindTextureDirectly(S.TEXTURE_2D,T,!0),E()})}return!0},l,c,f,h,d,u,p)}_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)),p=a?e.height:Math.pow(2,Math.max(u-r,0));o.texImage2D(h,r,f,m,p,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?vn(r.width,h):r.width),u=Math.min(h,this.needPOTTextures?vn(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&&(p2(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 ee.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;dr()&&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()),OT(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{Bl();eA=class{constructor(e=30){this._enabled=!0,this._rollingFrameTime=new sC(e)}sampleFrame(e=_r.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()}},sC=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 W2=M(()=>{Qn();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 H2(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{Rs();Pt();Qn();to();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 Oi(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 Oi(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,ee.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,ee.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,ee.Warn("Render to float textures is not supported. Mipmap generation forced to false.")):f===l.HALF_FLOAT&&!this._caps.colorBufferFloat&&(r=!1,ee.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||Oh(c.width)&&Oh(c.height)||(r=!1),n)this.updateRawCubeTexture(c,n,t,i,s,o);else{let _=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,_,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 p=this._getSamplingParameters(a,r);return l.texParameteri(l.TEXTURE_CUBE_MAP,l.TEXTURE_MAG_FILTER,p.mag),l.texParameteri(l.TEXTURE_CUBE_MAP,l.TEXTURE_MIN_FILTER,p.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=H2(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||Oh(n.width)&&Oh(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=(_,g)=>{e==null||e.removePendingData(u),c&&c(_?_.status+" "+_.statusText:"Failed to parse texture data",g)},p=async _=>{if(!u._hardwareTexture)return;let g=a(_);if(!g)return;let v=g instanceof Promise?await g:g,x=u.width;if(o){let T=this._getWebGLTextureType(r),E=this._getInternalFormat(i),S=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 C=0;C>C;for(let D=0;D<6;D++){let O=I[C][D];R&&(O=H2(O,y,y,r)),d.texImage2D(D,C,S,y,y,0,E,T,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(_).catch(g=>{m(void 0,g)})},void 0,e==null?void 0:e.offlineProvider,!0,m),u};bt.prototype.createRawTexture2DArray=z2(!1);bt.prototype.createRawTexture3D=z2(!0);bt.prototype.updateRawTexture2DArray=X2(!1);bt.prototype.updateRawTexture3D=X2(!0)});var K2=M(()=>{Qn();af();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 p=f.createFramebuffer();if(!p)throw new Error("Unable to create dummy framebuffer");this._dummyFramebuffer=p}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;return o?s||(s=f2(n.type,4*e*t)):h===f.UNSIGNED_BYTE?(s||(s=new Uint8Array(4*e*t)),h=f.UNSIGNED_BYTE):(s||(s=new Float32Array(4*e*t)),h=f.FLOAT),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 j2=M(()=>{Qn();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 q2=M(()=>{Qn();Rs();Pt();to();bt.prototype._createDepthStencilCubeTexture=function(n,e){let t=new Oi(this,12);if(t.isCube=!0,this.webGLVersion===1)return ee.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 p=this._gl;return this.createCubeTextureBase(n,e,t,!!i,r,s,a,o,l,c,f,h,_=>this._bindTextureDirectly(p.TEXTURE_CUBE_MAP,_,!0),(_,g)=>{let v=this.needPOTTextures?vn(g[0].width,this._caps.maxCubemapTextureSize):g[0].width,x=v,T=[p.TEXTURE_CUBE_MAP_POSITIVE_X,p.TEXTURE_CUBE_MAP_POSITIVE_Y,p.TEXTURE_CUBE_MAP_POSITIVE_Z,p.TEXTURE_CUBE_MAP_NEGATIVE_X,p.TEXTURE_CUBE_MAP_NEGATIVE_Y,p.TEXTURE_CUBE_MAP_NEGATIVE_Z];this._bindTextureDirectly(p.TEXTURE_CUBE_MAP,_,!0),this._unpackFlipY(!1);let E=a?this._getInternalFormat(a,_._useSRGBBuffer):_._useSRGBBuffer?this._glSRGBExtensionValues.SRGB8_ALPHA8:p.RGBA,S=a?this._getInternalFormat(a):p.RGBA;_._useSRGBBuffer&&this.webGLVersion===1&&(S=E);for(let R=0;R{H_();tA=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=Ul(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=[],T=[],E=[],S={};for(let C=0;C1&&e.setSamples(this.samples),e._swapRenderTargetWrapper(this),e.dispose()}}releaseTextures(){if(this._textures)for(let e=0;e{Z2();H_();iA=class extends tA{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,Ul(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 p=i!==void 0?m.TEXTURE_CUBE_MAP_POSITIVE_X+i:m.TEXTURE_2D;m.framebufferTexture2D(m.FRAMEBUFFER,c,p,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{Ur();Me.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 $2=M(()=>{Rs();Pt();Qn();Q2();H_();aC();bt.prototype._createHardwareRenderTargetWrapper=function(n,e,t){let i=new iA(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=(p=e.generateDepthBuffer)!=null?p:!0,r=!!e.generateStencilBuffer,s=!!e.noColorAttachment,a=e.colorAttachment,o=(_=e.samples)!=null?_: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 Oi(this,12);if(o.label=e.label,!this._caps.depthTextureExtension)return ee.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 ee.Error(`Depth texture ${l.depthTextureFormat} format is not supported.`),o;o.format=l.depthTextureFormat}else o.format=l.generateStencil?13:16;let c=Ul(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 J2=M(()=>{Qn();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 eB=M(()=>{Rs();Pt();Qn();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 Oi(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,ee.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 tB,zu,gr,Nt,Dn=M(()=>{tB=.45454545454545453,zu=2.2,gr=(1+Math.sqrt(5))/2,Nt=.001});function dn(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 rA(n,e){let t=Gne.map(i=>Vne(n,i,e));return()=>{for(let i of t)i==null||i()}}var Gne,Qo=M(()=>{Gne=["push","splice","pop","shift","unshift"]});function Ft(n,e){iB[n]=e}function En(n){return iB[n]}var iB,zi=M(()=>{iB={}});function Si(n,e,t=1401298e-51){return Math.abs(n-e)<=t}function ar(n,e){return n===e?n:Math.random()*(e-n)+n}function io(n,e,t){return n+(e-n)*t}function rB(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 nB(n){return n-=Math.PI*2*Math.floor((n+Math.PI)/(Math.PI*2)),n}function ro(n){let e=n.toString(16);return n<=15?("0"+e).toUpperCase():e.toUpperCase()}function sB(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 nA(n,e){let t=n%e;return t===0?e:nA(e,t)}var On=M(()=>{});function aB(n){n.updateFlag=Xu._UpdateFlagSeed++}function oC(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],p=r[9],_=r[10],g=r[11],v=r[12],x=r[13],T=r[14],E=r[15],S=s[0],R=s[1],I=s[2],C=s[3],y=s[4],D=s[5],O=s[6],V=s[7],N=s[8],w=s[9],U=s[10],W=s[11],te=s[12],$=s[13],J=s[14],z=s[15];t[i]=a*S+o*y+l*N+c*te,t[i+1]=a*R+o*D+l*w+c*$,t[i+2]=a*I+o*O+l*U+c*J,t[i+3]=a*C+o*V+l*W+c*z,t[i+4]=f*S+h*y+d*N+u*te,t[i+5]=f*R+h*D+d*w+u*$,t[i+6]=f*I+h*O+d*U+u*J,t[i+7]=f*C+h*V+d*W+u*z,t[i+8]=m*S+p*y+_*N+g*te,t[i+9]=m*R+p*D+_*w+g*$,t[i+10]=m*I+p*O+_*U+g*J,t[i+11]=m*C+p*V+_*W+g*z,t[i+12]=v*S+x*y+T*N+E*te,t[i+13]=v*R+x*D+T*w+E*$,t[i+14]=v*I+x*O+T*U+E*J,t[i+15]=v*C+x*V+T*W+E*z}function Nh(n,e,t,i=0){oC(n,e,t.asArray(),i),aB(t)}function oB(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 z_(n,e){let t=lC(n,e.asArray());return t&&aB(e),t}function lC(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],p=t[12],_=t[13],g=t[14],v=t[15],x=u*v-g*m,T=d*v-_*m,E=d*g-_*u,S=h*v-p*m,R=h*g-u*p,I=h*_-p*d,C=+(l*x-c*T+f*E),y=-(o*x-c*S+f*R),D=+(o*T-l*S+f*I),O=-(o*E-l*R+c*I),V=i*C+r*y+s*D+a*O;if(V===0)return!1;let N=1/V,w=c*v-g*f,U=l*v-_*f,W=l*g-_*c,te=o*v-p*f,$=o*g-p*c,J=o*_-p*l,z=c*m-u*f,Y=l*m-d*f,me=l*u-d*c,xe=o*m-h*f,Be=o*u-h*c,ae=o*d-h*l,ve=-(r*x-s*T+a*E),ne=+(i*x-s*S+a*R),ue=-(i*T-r*S+a*I),De=+(i*E-r*R+s*I),de=+(r*w-s*U+a*W),be=-(i*w-s*te+a*$),je=+(i*U-r*te+a*J),Tt=-(i*W-r*$+s*J),Xe=-(r*z-s*Y+a*me),qe=+(i*z-s*xe+a*Be),$t=-(i*Y-r*xe+a*ae),Dt=+(i*me-r*Be+s*ae);return e[0]=C*N,e[1]=ve*N,e[2]=de*N,e[3]=Xe*N,e[4]=y*N,e[5]=ne*N,e[6]=be*N,e[7]=qe*N,e[8]=D*N,e[9]=ue*N,e[10]=je*N,e[11]=$t*N,e[12]=O*N,e[13]=De*N,e[14]=Tt*N,e[15]=Dt*N,!0}var Xu,cC=M(()=>{Xu=class{};Xu._UpdateFlagSeed=0});var $n,Fe,b,Mi,ze,j,He,Z,wh,Ge=M(()=>{Dn();Qo();zi();QM();Ni();On();cC();$n=n=>parseInt(n.toString().replace(/\W/g,"")),Fe=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=$n(this.x),t=$n(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&&Si(this.x,e.x,t)&&Si(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(ar(e,t),ar(e,t))}static RandomToRef(e=0,t=1,i){return i.copyFromFloats(ar(e,t),ar(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)}};Fe._V8PerformanceHack=new Fe(.5,.5);Fe._ZeroReadOnly=Fe.Zero();Object.defineProperties(Fe.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=$n(this._x),t=$n(this._y),i=$n(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=He.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&&Si(this._x,e._x,t)&&Si(this._y,e._y,t)&&Si(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(!Si(t,i,e))return!0;let r=Math.abs(this._z);return!Si(t,r,e)||!Si(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=He.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(He.Matrix[0]),n.TransformCoordinatesToRef(this,He.Matrix[0],t),t}rotateByQuaternionAroundPointToRef(e,t,i){return this.subtractToRef(t,He.Vector3[0]),He.Vector3[0].rotateByQuaternionToRef(e,He.Vector3[0]),t.addToRef(He.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(He.Vector3[1]),s=t.normalizeToRef(He.Vector3[2]),a=n.Dot(r,s);a=wt(a,-1,1);let o=Math.acos(a),l=He.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){He.Vector3[0].copyFrom(e);let r=He.Vector3[0];He.Vector3[1].copyFrom(t);let s=He.Vector3[1];He.Vector3[2].copyFrom(i);let a=He.Vector3[2],o=He.Vector3[3],l=He.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 nB(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=wt(i,0,1);let s=He.Vector3[0],a=He.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(io(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(ar(e,t),ar(e,t),ar(e,t))}static RandomToRef(e=0,t=1,i){return i.copyFromFloats(ar(e,t),ar(e,t),ar(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&&y<0?(O.copyFrom(a),V=t,N=i):y>0&&D<0?(O.copyFrom(l),V=i,N=r):(O.copyFrom(o).scaleInPlace(-1),V=r,N=t);let w=He.Vector3[9],U=He.Vector3[4];if(V.subtractToRef(v,S),N.subtractToRef(v,w),n.CrossToRef(S,w,U),!(n.Dot(U,c)<0))return s.copyFrom(v),Math.abs(p*_);let te=He.Vector3[5];n.CrossToRef(O,U,te),te.normalize();let $=He.Vector3[9];$.copyFrom(V).subtractInPlace(v);let J=$.length();if(Jthis._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(ar(e,t),ar(e,t),ar(e,t),ar(e,t))}static RandomToRef(e=0,t=1,i){return i.x=ar(e,t),i.y=ar(e,t),i.z=ar(e,t),i.w=ar(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=$n(this._x),t=$n(this._y),i=$n(this._z),r=$n(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&&Si(this._x,e._x,t)&&Si(this._y,e._y,t)&&Si(this._z,e._z,t)&&Si(this._w,e._w,t)}isApprox(e,t=Nt){return e&&(Si(this._x,e._x,t)&&Si(this._y,e._y,t)&&Si(this._z,e._z,t)&&Si(this._w,e._w,t)||Si(this._x,-e._x,t)&&Si(this._y,-e._y,t)&&Si(this._z,-e._z,t)&&Si(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 j.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,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=He.Matrix[0];return e=e.normalizeToRef(He.Vector3[0]),t=t.normalizeToRef(He.Vector3[1]),i=i.normalizeToRef(He.Vector3[2]),j.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=He.Matrix[0];return j.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=He.Matrix[0];return j.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,p=e._w*l+i._w*c+t._w*f+r._w*h;return new n(d,u,m,p)}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(ar(e,t),ar(e,t),ar(e,t),ar(e,t))}static RandomToRef(e=0,t=1,i){return i.copyFromFloats(ar(e,t),ar(e,t),ar(e,t),ar(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}});j=class n{static get Use64Bits(){return Zn.MatrixUse64Bits}get m(){return this._m}markAsUpdated(){this.updateFlag=Xu._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,Zn.MatrixTrackPrecisionChange&&Zn.MatrixTrackedMatrices.push(this),this._m=new Zn.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],p=e[13],_=e[14],g=e[15],v=d*g-_*u,x=h*g-p*u,T=h*_-p*d,E=f*g-m*u,S=f*_-d*m,R=f*p-m*h,I=+(o*v-l*x+c*T),C=-(a*v-l*E+c*S),y=+(a*x-o*E+c*R),D=-(a*T-o*S+l*R);return t*I+i*C+r*y+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):(rC(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 Z2(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 iC(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(!Si(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=Qn(this._m[0]);for(let t=1;t<16;t++)e=e*397^Qn(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||He.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,He.Matrix[0]),ze.FromRotationMatrixToRef(He.Matrix[0],t)}return!0}getRow(e){if(e<0||e>3)return null;let t=e*4;return new Ii(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=He.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=He.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]=p,v[15]=_,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]=p,v[15]=_,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,p=a*d,_=o*h,g=o*d,v=l*d,x=c*f,A=c*h,E=c*d,S=e._x,R=e._y,I=e._z;return s[0]=(1-(_+v))*S,s[1]=(m+E)*S,s[2]=(p-A)*S,s[3]=0,s[4]=(m-E)*R,s[5]=(1-(u+v))*R,s[6]=(g+x)*R,s[7]=0,s[8]=(p+A)*I,s[9]=(g-x)*I,s[10]=(1-(u+_))*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(He.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,He.Quaternion[0]),He.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=He.Vector3[0],a=He.Quaternion[0],o=He.Vector3[1];e.decompose(s,a,o);let l=He.Vector3[2],c=He.Quaternion[1],f=He.Vector3[3];t.decompose(l,c,f);let h=He.Vector3[4];b.LerpToRef(s,l,i,h);let d=He.Quaternion[2];ze.SlerpToRef(a,c,i,d);let u=He.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=He.Vector3[0],a=He.Vector3[1],o=He.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=He.Vector3[0],a=He.Vector3[1],o=He.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=He.Vector3[0];r.copyFrom(e),r.scaleInPlace(-1);let s=He.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=He.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(wh,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),p=(e+t)/(e-t),_=(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(wh,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,He.Matrix[1]),n.FromValuesToRef(1,0,0,0,0,1,0,0,d,u,1,0,0,0,0,1,He.Matrix[0]),He.Matrix[1].multiplyToRef(He.Matrix[0],He.Matrix[0]),n.TranslationToRef(0,0,c,He.Matrix[1]),He.Matrix[0].multiplyToRef(He.Matrix[1],He.Matrix[0]),n.OrthoOffCenterLHToRef(e,t,i,r,s,a,f,h),He.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,He.Matrix[1]),n.FromValuesToRef(1,0,0,0,0,1,0,0,d,u,1,0,0,0,0,1,He.Matrix[0]),He.Matrix[1].multiplyToRef(He.Matrix[0],He.Matrix[0]),n.TranslationToRef(0,0,-c,He.Matrix[1]),He.Matrix[0].multiplyToRef(He.Matrix[1],He.Matrix[0]),n.OrthoOffCenterRHToRef(e,t,i,r,s,a,f,h),He.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(wh,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,p=c&&f===0?-1:h!==0?(h+f)/(h-f):1,_=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,p,1,0,0,_,0,s),o&&s.multiplyToRef(wh,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(wh,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,p=c&&f===0?1:h!==0?-(h+f)/(h-f):-1,_=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,p,-1,0,0,_,0,s),o&&s.multiplyToRef(wh,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(wh,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 qn.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 qn.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],p=i[14],_=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]=p,A[12]=_,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}};j._IdentityReadOnly=j.Identity();Object.defineProperties(j.prototype,{dimension:{value:[4,4]},rank:{value:2}});He=class{};He.Vector3=Vl(11,b.Zero);He.Matrix=Vl(2,j.Identity);He.Quaternion=Vl(3,ze.Zero);Z=class{};Z.Vector2=Vl(3,Fe.Zero);Z.Vector3=Vl(13,b.Zero);Z.Vector4=Vl(3,Ii.Zero);Z.Quaternion=Vl(3,ze.Zero);Z.Matrix=Vl(8,j.Identity);Ft("BABYLON.Vector2",Fe);Ft("BABYLON.Vector3",b);Ft("BABYLON.Vector4",Ii);Ft("BABYLON.Matrix",j);wh=j.FromValues(1,0,0,0,0,1,0,0,0,0,.5,0,0,0,.5,1)});var Q2,As,$2,Yu=M(()=>{Ge();(function(n){n[n.LOCAL=0]="LOCAL",n[n.WORLD=1]="WORLD",n[n.BONE=2]="BONE"})(Q2||(Q2={}));As=class{};As.X=new b(1,0,0);As.Y=new b(0,1,0);As.Z=new b(0,0,1);(function(n){n[n.X=0]="X",n[n.Y=1]="Y",n[n.Z=2]="Z"})($2||($2={}))});function Ku(n){return Math.pow(n,zu)}function ju(n){return n<=.04045?.0773993808*n:Math.pow(.947867299*(n+.055),2.4)}function qu(n){return Math.pow(n,z2)}function Zu(n){return n<=.0031308?12.92*n:1.055*Math.pow(n,.41666)-.055}var ge,lt,En,zt=M(()=>{Zo();zi();Ln();Dn();ge=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 Si(this.r,e.r,t)&&Si(this.g,e.g,t)&&Si(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"#"+io(e)+io(t)+io(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())}};ge._V8PerformanceHack=new ge(.5,.5,.5);ge._BlackReadOnly=ge.Black();Object.defineProperties(ge.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 Si(this.r,e.r,t)&&Si(this.g,e.g,t)&&Si(this.b,e.b,t)&&Si(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"#"+io(t)+io(i)+io(r);let s=Math.round(this.a*255);return"#"+io(t)+io(i)+io(r)+io(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=ju(this.r),e.g=ju(this.g),e.b=ju(this.b)):(e.r=Ku(this.r),e.g=Ku(this.g),e.b=Ku(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=Zu(this.r),e.g=Zu(this.g),e.b=Zu(this.b)):(e.r=qu(this.r),e.g=qu(this.g),e.b=qu(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,p=e.a*l+i.a*c+t.a*f+r.a*h;return new n(d,u,m,p)}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",ge);Ft("BABYLON.Color4",lt)});var ro,Qu=M(()=>{Ge();ro=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}};ro._TmpMatrix=j.Identity()});var of,eA=M(()=>{Qu();of=class n{static GetPlanes(e){let t=[];for(let i=0;i<6;i++)t.push(new ro(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 J2,$u,sC,Ju,Fh,Uh=M(()=>{Dn();Ge();Ln();(function(n){n[n.CW=0]="CW",n[n.CCW=1]="CCW"})(J2||(J2={}));$u=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)}},sC=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 Fe((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=$u.BetweenTwoPoints(this.centerPoint,this.startPoint);let l=this.startAngle.degrees(),c=$u.BetweenTwoPoints(this.centerPoint,this.midPoint).degrees(),f=$u.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=$u.FromDegrees(this.orientation===0?l-f:f-l)}},Ju=class n{constructor(e,t){this._points=new Array,this._length=0,this.closed=!1,this._points.push(new Fe(e,t))}addLineTo(e,t){if(this.closed)return this;let i=new Fe(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 Fe(e,t),l=new Fe(i,r),c=new sC(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 Fe.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 Fe(a.x+f.x*h,a.y+f.y*h)}i=c}return Fe.Zero()}static StartingAt(e,t){return new n(e,t)}},Fh=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:j.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;Si(Math.abs(e.y)/r,1,Nt)?Si(Math.abs(e.x)/r,1,Nt)?Si(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=j.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 Gl,tA=M(()=>{Gl=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 eU=M(()=>{Ge()});var no,em=M(()=>{no=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 tU=M(()=>{Yu();zt();Ln();eA();Uh();Qu();tA();Ge();eU();em()});var Qo,bne,kl,Wl,z_,$o,X_=M(()=>{Ge();tU();Qo=[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))],bne=[()=>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],kl=(n,e)=>Qo[n]*bne[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],z_=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(kl(0,e),Z.Vector3[2]),this.l00.addInPlace(Z.Vector3[2]),s.scaleToRef(kl(1,e),Z.Vector3[2]),this.l1_1.addInPlace(Z.Vector3[2]),s.scaleToRef(kl(2,e),Z.Vector3[2]),this.l10.addInPlace(Z.Vector3[2]),s.scaleToRef(kl(3,e),Z.Vector3[2]),this.l11.addInPlace(Z.Vector3[2]),s.scaleToRef(kl(4,e),Z.Vector3[2]),this.l2_2.addInPlace(Z.Vector3[2]),s.scaleToRef(kl(5,e),Z.Vector3[2]),this.l2_1.addInPlace(Z.Vector3[2]),s.scaleToRef(kl(6,e),Z.Vector3[2]),this.l20.addInPlace(Z.Vector3[2]),s.scaleToRef(kl(7,e),Z.Vector3[2]),this.l21.addInPlace(Z.Vector3[2]),s.scaleToRef(kl(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(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(Qo[0]),this.l1_1.scaleInPlace(Qo[1]),this.l10.scaleInPlace(Qo[2]),this.l11.scaleInPlace(Qo[3]),this.l2_2.scaleInPlace(Qo[4]),this.l2_1.scaleInPlace(Qo[5]),this.l20.scaleInPlace(Qo[6]),this.l21.scaleInPlace(Qo[7]),this.l22.scaleInPlace(Qo[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}},$o=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=z_.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 Gt=M(()=>{});function iU(n){let e=n.getClassName();return rA[e]||(rA[e]={}),rA[e]}function nA(n){let e=n.getClassName();if(iA[e])return iA[e];iA[e]={};let t=iA[e],i=n,r=e;for(;r;){let s=rA[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 iA,rA,aC=M(()=>{iA={},rA={}});function Sa(n,e){return(t,i)=>{let r=iU(t);r[i]||(r[i]={type:n,sourceName:e})}}function Ine(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 le(n,e=null){return Ine(n,e)}function F(n){return Sa(0,n)}function Bt(n){return Sa(1,n)}function vr(n){return Sa(2,n)}function tm(n){return Sa(3,n)}function im(n){return Sa(4,n)}function zr(n){return Sa(5,n)}function sA(n){return Sa(6,n)}function rU(n){return Sa(7,n)}function rm(n){return Sa(8,n)}function nU(n){return Sa(9,n)}function sU(n){return Sa(10,n)}function aU(n){return Sa(11,n)}function xs(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 ut(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 Vt=M(()=>{aC();xs.filter=function(n){return(e,t,i)=>xs(e,t,i,n)}});function lf(){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 Y_=M(()=>{});function Mne(){return typeof _native!="undefined"&&_native.XMLHttpRequest?new _native.XMLHttpRequest:new XMLHttpRequest}var Mr,Bh=M(()=>{Mr=class n{constructor(){this._xhr=Mne(),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)}};Mr.CustomRequestHeaders={};Mr.CustomRequestModifiers=new Array;Mr.SkipRequestModificationForBabylonCDN=!0});var cf,oU=M(()=>{cf=class{};cf.FilesToLoad={}});var aA,lU=M(()=>{aA=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 Hl,Ta,Rs,K_=M(()=>{Hl=class extends Error{};Hl._setPrototypeOf=Object.setPrototypeOf||((n,e)=>(n.__proto__=e,n));Ta={MeshInvalidPositionsError:0,UnsupportedTextureError:1e3,GLTFLoaderUnexpectedMagicError:2e3,SceneLoaderError:3e3,LoadFileError:4e3,RequestFileError:4001,ReadFileError:4002},Rs=class n extends Hl{constructor(e,t,i){super(e),this.errorCode=t,this.innerError=i,this.name="RuntimeError",Hl._setPrototypeOf(this,n.prototype)}}});function Cne(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 yne(n){let e=oC(n),t=e.length,i=new Uint8Array(new ArrayBuffer(t));for(let r=0;r{cU=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():Cne(e)},oC=n=>atob(n),fU=n=>typeof Uint8Array.fromBase64=="function"?Uint8Array.fromBase64(n).buffer:yne(n)});function Pne(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 Lne(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 lC(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 Vh(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(p{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 hf(n){return fU(n.split(",")[1])}var mU,am,lA,fC,Dne,Gi,cA,uU,om,Gh,el,fA,pU,_U,ff,gU,vU,One,q_,Nne,zl=M(()=>{Bh();Ea();di();oU();lU();K_();j_();VT();Oi();Pt();jo();af();Br();sm();mU=new RegExp(/^data:([^,]+\/[^,]+)?;base64,/i),am=class n extends Rs{constructor(e,t){super(e,Ta.LoadFileError),this.name="LoadFileError",Hl._setPrototypeOf(this,n.prototype),t instanceof Mr?this.request=t:this.file=t}},lA=class n extends Rs{constructor(e,t){super(e,Ta.RequestFileError),this.request=t,this.name="RequestFileError",Hl._setPrototypeOf(this,n.prototype)}},fC=class n extends Rs{constructor(e,t){super(e,Ta.ReadFileError),this.file=t,this.name="ReadFileError",Hl._setPrototypeOf(this,n.prototype)}},Dne=n=>(n=n.replace(/#/gm,"%23"),n),Gi={DefaultRetryStrategy:aA.ExponentialBackoff(),BaseUrl:"",CorsBehavior:"anonymous",PreprocessUrl:n=>n,ScriptBaseUrl:"",ScriptPreprocessUrl:n=>n,CleanUrl:Dne},cA=(n,e)=>{if(!(n&&n.indexOf("data:")===0)&&Gi.CorsBehavior)if(typeof Gi.CorsBehavior=="string"||Gi.CorsBehavior instanceof String)e.crossOrigin=Gi.CorsBehavior;else{let t=Gi.CorsBehavior(n);t&&(e.crossOrigin=t)}},uU={getRequiredSize:null},om=(n,e,t,i,r="",s,a=Oe.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=oA(n),o=URL.createObjectURL(new Blob([E],{type:r})),l=!0}else o=`data:${r};base64,`+nm(n);else n instanceof Blob?(o=URL.createObjectURL(n),l=!0):(o=Gi.CleanUrl(n),o=Gi.PreprocessUrl(o));let c=E=>{if(t){let S=o||n.toString();t(`Error while trying to load image: ${S.indexOf("http")===0||S.length<=128?S:S.slice(0,128)+"..."}`,E)}};if(a!=null&&a._features.forceBitmapOverHTMLImageElement)return el(o,E=>{a.createImageBitmap(new Blob([E],{type:r}),{premultiplyAlpha:"none",colorSpaceConversion:"none",...s}).then(S=>{e(S),l&&URL.revokeObjectURL(o)}).catch(S=>{t&&t("Error while trying to load image: "+n,S)})},void 0,i||void 0,!0,(E,S)=>{c(S)}),null;let f=new Image;if(uU.getRequiredSize){let E=uU.getRequiredSize(n);E.width&&(f.width=E.width),E.height&&(f.height=E.height)}cA(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)},p=E=>{u(),c(E),l&&f.src&&URL.revokeObjectURL(f.src)},_=E=>{if(E.blockedURI!==f.src||E.disposition==="report")return;u();let S=new Error(`CSP violation of policy ${E.effectiveDirective} ${E.blockedURI}. Current policy is ${E.originalPolicy}`);Oe.UseFallbackTexture=!1,c(S),l&&f.src&&URL.revokeObjectURL(f.src),f.src=""};h.push({target:f,name:"load",handler:m}),h.push({target:f,name:"error",handler:p}),h.push({target:document,name:"securitypolicyviolation",handler:_}),d();let g=o.substring(0,5)==="blob:",v=o.substring(0,5)==="data:",x=()=>{g||v||!Mr.IsCustomRequestAvailable?f.src=o:el(o,(E,S,R)=>{let I=!r&&R?R:r,C=new Blob([E],{type:I}),y=URL.createObjectURL(C);l=!0,f.src=y},void 0,i||void 0,!0,(E,S)=>{c(S)})},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(cf.FilesToLoad[E]&&typeof URL!="undefined"){try{let S;try{S=URL.createObjectURL(cf.FilesToLoad[E])}catch(R){S=URL.createObjectURL(cf.FilesToLoad[E])}f.src=S,l=!0}catch(S){f.src=""}return f}}x()}return f},Gh=(n,e,t,i,r)=>{let s=new FileReader,a={onCompleteObservable:new ie,abort:()=>s.abort()};return s.onloadend=()=>a.onCompleteObservable.notifyObservers(a),r&&(s.onerror=()=>{r(new fC(`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},el=(n,e,t,i,r,s,a)=>{if(n.name)return Gh(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=cf.FilesToLoad[f];if(h)return Gh(h,e,t,r,s?d=>s(void 0,new am(d.message,d.file)):void 0)}let{match:l,type:c}=gU(o);if(l){let f={onCompleteObservable:new ie,abort:()=>()=>{}};try{let h=r?hf(o):vU(o);e(h,void 0,c)}catch(h){s?s(void 0,h):ee.Error(h.message||"Failed to parse the Data URL")}return Ja.SetImmediate(()=>{f.onCompleteObservable.notifyObservers(f)}),f}return fA(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 am(f.message,f.request))}:void 0,a)},fA=(n,e,t,i,r,s,a)=>{var h;i!==null&&(i!=null||(i=(h=Oe.LastCreatedScene)==null?void 0:h.offlineProvider)),n=Gi.CleanUrl(n),n=Gi.PreprocessUrl(n);let o=Gi.BaseUrl+n,l=!1,c={onCompleteObservable:new ie,abort:()=>l=!0},f=()=>{let d=new Mr,u=null,m,p=()=>{d&&(t&&d.removeEventListener("progress",t),m&&d.removeEventListener("readystatechange",m),d.removeEventListener("loadend",_))},_=()=>{p(),c.onCompleteObservable.notifyObservers(c),c.onCompleteObservable.clear(),t=void 0,m=null,_=null,s=void 0,a=void 0,e=void 0};c.abort=()=>{l=!0,_&&_(),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 lA(A,d)):ee.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),_&&d.addEventListener("loadend",_),m=()=>{if(!(l||!d)&&d.readyState===(XMLHttpRequest.DONE||4)){if(m&&d.removeEventListener("readystatechange",m),d.status>=200&&d.status<300||d.status===0&&(!dr()||_U())){let S=r?d.response:d.responseText;if(S!==null){try{e&&e(S,d)}catch(R){g(R)}return}}let A=Gi.DefaultRetryStrategy;if(A){let S=A(o,d,x);if(S!==-1){p(),d=new Mr,u=setTimeout(()=>v(x+1),S);return}}let E=new lA("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(Gi.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},pU=n=>{let{match:e,type:t}=gU(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}},_U=()=>typeof location!="undefined"&&location.protocol==="file:",ff=n=>mU.test(n),gU=n=>{let e=mU.exec(n);return e===null||e.length===0?{match:!1,type:""}:{match:!0,type:e[0].replace("data:","").replace(";base64,","")}};vU=n=>oC(n.split(",")[1]),One=()=>{Me._FileToolsLoadImage=om,Vu.loadFile=el,zM.loadFile=el};One();Nne=(n,e,t,i,r,s,a,o,l,c)=>{q_={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(q_,"DefaultRetryStrategy",{get:function(){return t.DefaultRetryStrategy},set:function(f){t.DefaultRetryStrategy=f}}),Object.defineProperty(q_,"BaseUrl",{get:function(){return t.BaseUrl},set:function(f){t.BaseUrl=f}}),Object.defineProperty(q_,"PreprocessUrl",{get:function(){return t.PreprocessUrl},set:function(f){t.PreprocessUrl=f}}),Object.defineProperty(q_,"CorsBehavior",{get:function(){return t.CorsBehavior},set:function(f){t.CorsBehavior=f}})};Nne(hf,vU,Gi,ff,_U,el,om,Gh,fA,cA)});var hA,EU=M(()=>{tA();hA=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=Gl.Zero(),this._cachedBaseSize=Gl.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 dA,SU=M(()=>{dA=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,df=M(()=>{SU();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):dA.Eval(t,i=>n.HasTags(e)&&e._tags[i])}}});var TU,it,Ar=M(()=>{hn();df();zt();Ge();aC();TU=function(n,e,t,i={}){let r=n();Qt&&Qt.HasTags(e)&&Qt.AddTagsTo(r,Qt.GetTags(e,!0));let s=nA(r),a={};for(let o in s){let l=s[o],c=e[o],f=l.type;if(c!=null&&(o!=="uniqueId"||it.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},it=class n{static AppendSerializedAnimations(e,t){if(e.animations){t.animations=[];for(let i=0;i{throw Ze("ImageProcessingConfiguration")};it._FresnelParametersParser=n=>{throw Ze("FresnelParameters")};it._ColorCurvesParser=n=>{throw Ze("ColorCurves")};it._TextureParser=(n,e,t)=>{throw Ze("Texture")}});var pi,Z_=M(()=>{Gt();Vt();di();Ge();Oi();Y_();zl();EU();Ar();pi=class n extends hA{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=lf()),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 ie,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=Oe.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 j.IdentityReadOnly}getReflectionTextureMatrix(){return j.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=it.Serialize(this);return it.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 uf,Xl,hC=M(()=>{Ge();Dn();X_();Ln();zt();uf=class{constructor(e,t,i,r){this.name=e,this.worldAxisForNormal=t,this.worldAxisForFileX=i,this.worldAxisForFileY=r}},Xl=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,S,R,I,C,y])=>{let D=l;g&&(E=this._DownsampleFace(E,t,r,4),S=this._DownsampleFace(S,t,r,4),R=this._DownsampleFace(R,t,r,4),I=this._DownsampleFace(I,t,r,4),C=this._DownsampleFace(C,t,r,4),y=this._DownsampleFace(y,t,r,4),D=r);let O={size:D,right:S,left:E,up:R,down:I,front:C,back:y,format:_,type:E instanceof Float32Array?1:0,gammaSpace:p};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,p=["right","left","up","down","front","back"],_={};for(let g of p)_[g]=this._DownsampleFace(e[g],e.size,i,m);e={...e,..._,size:i}}let r=new z_,s=0,a=2/e.size,o=a,l=.5*a,c=l-1;for(let m=0;m<6;m++){let p=this._FileFaces[m],_=e[p.name],g=c,v=e.format===5?4:3;for(let x=0;xD){let N=D/V;I*=N,C*=N,y*=N}}else I=wt(I,0,D),C=wt(C,0,D),y=wt(y,0,D);let O=new ge(I,C,y);r.addLight(S,O,R),s+=R,A+=a}g+=o}}let u=4*Math.PI*6/6/s;return r.scaleInPlace(u),r.convertIncidentRadianceToIrradiance(),r.convertIrradianceToLambertianRadiance(),$o.FromHarmonics(r)}};Xl._FileFaces=[new uf("right",new b(1,0,0),new b(0,0,-1),new b(0,-1,0)),new uf("left",new b(-1,0,0),new b(0,0,1),new b(0,-1,0)),new uf("up",new b(0,1,0),new b(1,0,0),new b(0,0,1)),new uf("down",new b(0,-1,0),new b(1,0,0),new b(0,0,-1)),new uf("front",new b(0,0,1),new b(1,0,0),new b(0,-1,0)),new uf("back",new b(0,0,-1),new b(-1,0,0),new b(0,-1,0))];Xl.MAX_HDRI_VALUE=4096;Xl.PRESERVE_CLAMPED_COLORS=!1});var Yl,dC=M(()=>{Pt();zi();Yl=class{static Instantiate(e){if(this.RegisteredExternalClasses&&this.RegisteredExternalClasses[e])return this.RegisteredExternalClasses[e];let t=vn(e);if(t)return t;ee.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 xU(n,e=0,t=0){let i=n.getInternalTexture();if(!i)return null;let r=n._readPixelsSync(e,t);return r?AU(r,n.getSize(),i.invertY):null}async function RU(n,e=0,t=0){let i=n.getInternalTexture();if(!i)return null;let r=await n.readPixels(e,t);return r?AU(r,n.getSize(),i.invertY):null}var bU=M(()=>{});var Mt,tn=M(()=>{Mt=!1});var _e,Vr=M(()=>{Gt();Vt();di();Ge();Z_();zi();hn();jo();dC();Qu();j_();bU();tn();Ar();_e=class n extends pi{static _CreateVideoTexture(e,t,i,r=!1,s=!1,a=n.TRILINEAR_SAMPLINGMODE,o={},l,c=5){throw Ze("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,C,y,D,O,V,N,w,B,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 ie,this._isBlocking=!0,this.name=e||"",this.url=e;let p,_=!1,g=null,v=!0;typeof i=="object"&&i!==null?(p=(R=i.noMipmap)!=null?R:!1,r=(I=i.invertY)!=null?I:!Mt,s=(C=i.samplingMode)!=null?C:n.TRILINEAR_SAMPLINGMODE,a=(y=i.onLoad)!=null?y: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,_=(N=i.useSRGBBuffer)!=null?N:!1,g=(w=i.internalTexture)!=null?w:null,v=(B=i.gammaSpace)!=null?B:v,m=(W=i.forcedExtension)!=null?W:m):p=!!i,this._gammaSpace=v,this._noMipmap=p,this._invertY=r===void 0?!Mt:r,this._initialSamplingMode=s,this._buffer=l,this._deleteBuffer=c,this._mimeType=h,this._loaderOptions=d,this._creationFlags=u,this._useSRGBBuffer=_,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()},S=(te,$)=>{this._loadingError=!0,this._errorObject={message:te,exception:$},o&&o(te,$),n.OnTextureLoadErrorObservable.notifyObservers(this)};if(!this.url&&!g){this._delayedOnLoad=E,this._delayedOnError=S;return}if(this._texture=g!=null?g:this._getFromCache(this.url,p,s,this._invertY,_,this.isCube),this._texture)if(this._texture.isReady)Ja.SetImmediate(()=>E());else{let te=this._texture.onLoadedObservable.add(E);this._texture.onErrorObservable.add($=>{var J;S($.message,$.exception),(J=this._texture)==null||J.onLoadedObservable.remove(te)})}else if(!x||!x.useDelayedTextureLoading){try{this._texture=A.createTexture(this.url,p,this._invertY,x,s,E,S,this._buffer,void 0,this._format,this._forcedExtension,h,d,u,_)}catch(te){throw S("error loading",te),te}c&&(this._buffer=null)}else this.delayLoadState=4,this._delayedOnLoad=E,this._delayedOnError=S}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=j.Zero(),this._rowGenerationMatrix=new j,this._t0=b.Zero(),this._t1=b.Zero(),this._t2=b.Zero()),j.RotationYawPitchRollToRef(this.vAng,this.uAng,this.wAng,this._rowGenerationMatrix),this.homogeneousRotationInUVTransform?(j.TranslationToRef(-this._cachedURotationCenter,-this._cachedVRotationCenter,-this._cachedWRotationCenter,Z.Matrix[0]),j.TranslationToRef(this._cachedURotationCenter,this._cachedVRotationCenter,this._cachedWRotationCenter,Z.Matrix[1]),j.ScalingToRef(this._cachedUScale,this._cachedVScale,0,Z.Matrix[2]),j.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),j.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=j.Zero()),this._projectionModeMatrix||(this._projectionModeMatrix=j.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:{j.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:{j.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:j.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 it.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,${nm(this._buffer)}`}else(n.ForceSerializeBuffers||this.url&&this.url.startsWith("blob:")||this._forceSerialize)&&(t.base64String=!this._engine||this._engine._features.supportSyncTextureRead?xU(this):RU(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=Yl.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=ro.FromArray(e.mirrorPlane),a(m),m}else if(e.isRenderTarget&&!e.base64String){let m=null;if(e.isCube){if(t.reflectionProbes)for(let p=0;p{a(m)}},_=e.base64String,g=_.startsWith("data:")?_.substring(5):_;m=n.CreateFromBase64String("",g,t,p),m.name=e.name}else{let p;e.name&&(e.name.indexOf("://")>0||e.name.startsWith("data:"))?p=e.name:p=i+e.name,e.url&&(e.url.startsWith("data:")||n.UseSerializedUrlIfAny)&&(p=e.url);let _={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(p,t,_)}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)}};_e.SerializeBuffers=!0;_e.ForceSerializeBuffers=!1;_e.OnTextureLoadErrorObservable=new ie;_e._SerializeInternalTextureUniqueId=!1;_e._CubeTextureParser=(n,e,t)=>{throw Ze("CubeTexture")};_e._CreateMirror=(n,e,t,i)=>{throw Ze("MirrorTexture")};_e._CreateRenderTargetTexture=(n,e,t,i,r)=>{throw Ze("RenderTargetTexture")};_e.NEAREST_SAMPLINGMODE=1;_e.NEAREST_NEAREST_MIPLINEAR=8;_e.BILINEAR_SAMPLINGMODE=2;_e.LINEAR_LINEAR_MIPNEAREST=11;_e.TRILINEAR_SAMPLINGMODE=3;_e.LINEAR_LINEAR_MIPLINEAR=3;_e.NEAREST_NEAREST_MIPNEAREST=4;_e.NEAREST_LINEAR_MIPNEAREST=5;_e.NEAREST_LINEAR_MIPLINEAR=6;_e.NEAREST_LINEAR=7;_e.NEAREST_NEAREST=1;_e.LINEAR_NEAREST_MIPNEAREST=9;_e.LINEAR_NEAREST_MIPLINEAR=10;_e.LINEAR_LINEAR=2;_e.LINEAR_NEAREST=12;_e.EXPLICIT_MODE=0;_e.SPHERICAL_MODE=1;_e.PLANAR_MODE=2;_e.CUBIC_MODE=3;_e.PROJECTION_MODE=4;_e.SKYBOX_MODE=5;_e.INVCUBIC_MODE=6;_e.EQUIRECTANGULAR_MODE=7;_e.FIXED_EQUIRECTANGULAR_MODE=8;_e.FIXED_EQUIRECTANGULAR_MIRRORED_MODE=9;_e.CLAMP_ADDRESSMODE=0;_e.WRAP_ADDRESSMODE=1;_e.MIRROR_ADDRESSMODE=2;_e.UseSerializedUrlIfAny=!1;P([F()],_e.prototype,"url",void 0);P([F()],_e.prototype,"uOffset",void 0);P([F()],_e.prototype,"vOffset",void 0);P([F()],_e.prototype,"uScale",void 0);P([F()],_e.prototype,"vScale",void 0);P([F()],_e.prototype,"uAng",void 0);P([F()],_e.prototype,"vAng",void 0);P([F()],_e.prototype,"wAng",void 0);P([F()],_e.prototype,"uRotationCenter",void 0);P([F()],_e.prototype,"vRotationCenter",void 0);P([F()],_e.prototype,"wRotationCenter",void 0);P([F()],_e.prototype,"homogeneousRotationInUVTransform",void 0);P([F()],_e.prototype,"isBlocking",null);Ft("BABYLON.Texture",_e);it._TextureParser=_e.Parse});var so,L,ki=M(()=>{qM();Pt();sm();so=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 Dh?(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}ee.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 p;if(this.engine=e,typeof r=="object"&&r!==null?(p=(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):p=!!r,t instanceof so?(this._buffer=t,this._ownsBuffer=m):(this._buffer=new so(e,t,p,a,s,o,d,u,this._label),this._ownsBuffer=!0),this.uniqueId=n._Counter++,this._kind=i,f===void 0){let S=this.getData();this.type=S?n.GetDataType(S):n.FLOAT}else this.type=f;let _=Jo(this.type);d?(this._size=c||(a?a/_:n.DeduceStride(i)),this.byteStride=a||this._buffer.byteStride||this._size*_,this.byteOffset=l||0):(this._size=c||a||n.DeduceStride(i),this.byteStride=a?a*_:this._buffer.byteStride||this._size*_,this.byteOffset=(l||0)*_),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?cC(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){Vh(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{ki();di();Kl=class{constructor(e){this._vertexBuffers={},this._activePostProcesses=[],this.onBeforeRenderObservable=new ie,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();IU=(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;tl=class{static DeepCopy(e,t,i,r,s=!1){let a=wne(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{di();Ea();Pt();Q_();Ul();hn();Bh();Oi();zl();jo();dC();Y_();eo();pe=class{static get BaseUrl(){return Gi.BaseUrl}static set BaseUrl(e){Gi.BaseUrl=e}static get CleanUrl(){return Gi.CleanUrl}static set CleanUrl(e){Gi.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("://"){el(e,s=>{i(s)},void 0,void 0,t,(s,a)=>{r(a)})})}static GetAssetUrl(e){if(!e)return"";if(gt.AssetBaseUrl&&e.startsWith(gt._DefaultAssetsUrl)){let t=gt.AssetBaseUrl.endsWith("/")?gt.AssetBaseUrl.slice(0,-1):gt.AssetBaseUrl;return e.replace(gt._DefaultAssetsUrl,t)}return e}static GetBabylonScriptURL(e,t){if(!e)return"";if(e.startsWith(gt._DefaultCdnUrl)){if(gt.ScriptBaseUrl){let i=gt.ScriptBaseUrl.endsWith("/")?gt.ScriptBaseUrl.slice(0,-1):gt.ScriptBaseUrl;e=e.replace(gt._DefaultCdnUrl,i)}else if(gt._CdnVersion){let i=`${gt._DefaultCdnUrl}/v${gt._CdnVersion}`;e.startsWith(i)||(e=e.replace(gt._DefaultCdnUrl,i))}}return e=gt.ScriptPreprocessUrl(e),t&&!gt.IsAbsoluteUrl(e)&&(e=gt.GetAbsoluteUrl(e)),e}static LoadBabylonScript(e,t,i,r){e=gt.GetBabylonScriptURL(e),gt.LoadScript(e,t,i)}static async LoadBabylonScriptAsync(e){return e=gt.GetBabylonScriptURL(e),await gt.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 ie,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 Gh(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){tl.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"}gt.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&>.DownloadBlob(a,r),t&&t("")},i,s);else if(t){if(gt._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 Ze("ScreenshotTools")}static async CreateScreenshotAsync(e,t,i,r="image/png",s){throw Ze("ScreenshotTools")}static CreateScreenshotUsingRenderTarget(e,t,i,r,s="image/png",a=1,o=!1,l,c=!1,f=!1,h=!0,d,u){throw Ze("ScreenshotTools")}static async CreateScreenshotUsingRenderTargetAsync(e,t,i,r="image/png",s=1,a=!1,o,l=!1,c=!1,f=!0,h,d){throw Ze("ScreenshotTools")}static RandomId(){return lf()}static IsBase64(e){return ff(e)}static DecodeBase64(e){return hf(e)}static get errorsCount(){return ee.errorsCount}static Log(e){ee.Log(e)}static Warn(e){ee.Warn(e)}static Error(e){ee.Error(e)}static get LogCache(){return ee.LogCache}static ClearLogCache(){ee.ClearLogCache()}static set LogLevels(e){ee.LogLevels=e}static set PerformanceLogLevel(e){var t;if((e>.PerformanceUserMarkLogLevel)===gt.PerformanceUserMarkLogLevel){_native!=null&&_native.enablePerformanceLogging?(_native.enablePerformanceLogging(1),gt.StartPerformanceCounter=gt._StartMarkNative,gt.EndPerformanceCounter=gt._EndMarkNative):(gt.StartPerformanceCounter=gt._StartUserMark,gt.EndPerformanceCounter=gt._EndUserMark);return}if((e>.PerformanceConsoleLogLevel)===gt.PerformanceConsoleLogLevel){_native!=null&&_native.enablePerformanceLogging?(_native.enablePerformanceLogging(2),gt.StartPerformanceCounter=gt._StartMarkNative,gt.EndPerformanceCounter=gt._EndMarkNative):(gt.StartPerformanceCounter=gt._StartPerformanceConsole,gt.EndPerformanceCounter=gt._EndPerformanceConsole);return}gt.StartPerformanceCounter=gt._StartPerformanceCounterDisabled,gt.EndPerformanceCounter=gt._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(!gt._Performance){if(!dr())return;gt._Performance=window.performance}!t||!gt._Performance.mark||gt._Performance.mark(e+"-Begin")}static _EndUserMark(e,t=!0){!t||!gt._Performance.mark||(gt._Performance.mark(e+"-End"),gt._Performance.measure(e,e+"-Begin",e+"-End"))}static _StartPerformanceConsole(e,t=!0){t&&(gt._StartUserMark(e,t),console.time&&console.time(e))}static _EndPerformanceConsole(e,t=!0){t&&(gt._EndUserMark(e,t),console.timeEnd(e))}static _StartMarkNative(e,t=!0){if(t&&(_native!=null&&_native.startPerformanceCounter))if(gt._NativePerformanceCounterHandles.has(e))gt.Warn(`Performance counter with name ${e} is already started.`);else{let i=_native.startPerformanceCounter(e);gt._NativePerformanceCounterHandles.set(e,i)}}static _EndMarkNative(e,t=!0){if(t&&(_native!=null&&_native.endPerformanceCounter)){let i=gt._NativePerformanceCounterHandles.get(e);i?(_native.endPerformanceCounter(i),gt._NativePerformanceCounterHandles.delete(e)):gt.Warn(`Performance counter with name ${e} was not started.`)}}static get Now(){return _r.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 Fl()?/^((?!chrome|android).)*safari/i.test(navigator.userAgent):!1}};gt=pe;pe.AssetBaseUrl="";pe.UseCustomRequestHeaders=!1;pe.CustomRequestHeaders=Mr.CustomRequestHeaders;pe.GetDOMTextContent=xT;pe._DefaultCdnUrl="https://cdn.babylonjs.com";pe._CdnVersion="9.6.0";pe._DefaultAssetsUrl="https://assets.babylonjs.com/core";pe.LoadScript=typeof _native=="undefined"?gt._LoadScriptWeb:gt._LoadScriptNative;pe.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.")};pe.NoneLogLevel=ee.NoneLogLevel;pe.MessageLogLevel=ee.MessageLogLevel;pe.WarningLogLevel=ee.WarningLogLevel;pe.ErrorLogLevel=ee.ErrorLogLevel;pe.AllLogLevel=ee.AllLogLevel;pe.IsWindowObjectExist=dr;pe.PerformanceNoneLogLevel=0;pe.PerformanceUserMarkLogLevel=1;pe.PerformanceConsoleLogLevel=2;pe._NativePerformanceCounterHandles=new Map;pe.StartPerformanceCounter=gt._StartPerformanceCounterDisabled;pe.EndPerformanceCounter=gt._EndPerformanceCounterDisabled;mA=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)}};pe.Mix=k_;pe.IsExponentOfTwo=Oh;Oe.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 ur,mf=M(()=>{Pt();Mi();ur=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){ee.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{Bi=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}};Bi._GlobalId=0;ao=class extends Bi{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{oo();Ge();$_=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 Bi(256),this._transparentSubMeshes=new Bi(256),this._alphaTestSubMeshes=new Bi(256),this._depthOnlySubMeshes=new Bi(256),this._particleSystems=new Bi(256),this._spriteManagers=new Bi(256),this._empty=!0,this._edgesRenderers=new ao(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{MU();uC=class{},Aa=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 uC,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 xa,mC=M(()=>{mf();di();pA();Zo();jo();Pt();oo();J_();xa=class n{get renderList(){return this._renderList}set renderList(e){this._renderList!==e&&(this._unObserveRenderList&&(this._unObserveRenderList(),this._unObserveRenderList=null),e&&(this._unObserveRenderList=$T(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?(ee.Error("ObjectRenderer: Timeout while waiting for the renderer to be ready."),t&&ee.Error(t)):(ee.Error("ObjectRenderer: An unexpected error occurred while waiting for the renderer to be ready."),t&&(ee.Error(t),t.stack&&ee.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 ie,this.onAfterRenderObservable=new ie,this.onBeforeRenderingManagerRenderObservable=new ie,this.onAfterRenderingManagerRenderObservable=new ie,this.onInitRenderingObservable=new ie,this.onFinishRenderingObservable=new ie,this.onFastPathRenderObservable=new ie,this._currentRefreshId=-1,this._refreshRate=1,this._currentApplyByPostProcessSetting=!1,this._activeMeshes=new Bi(256),this._activeBoundingBoxes=new Bi(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 Aa(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{jo();$n=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 yU={};tt(yU,{postprocessVertexShader:()=>Fne});var pC,CU,Fne,_C=M(()=>{G();pC="postprocessVertexShader",CU=`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):(lC(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 oB(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 oC(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(!Si(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=$n(this._m[0]);for(let t=1;t<16;t++)e=e*397^$n(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||He.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,He.Matrix[0]),ze.FromRotationMatrixToRef(He.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=He.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=He.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]=p,v[15]=_,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]=p,v[15]=_,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,p=a*d,_=o*h,g=o*d,v=l*d,x=c*f,T=c*h,E=c*d,S=e._x,R=e._y,I=e._z;return s[0]=(1-(_+v))*S,s[1]=(m+E)*S,s[2]=(p-T)*S,s[3]=0,s[4]=(m-E)*R,s[5]=(1-(u+v))*R,s[6]=(g+x)*R,s[7]=0,s[8]=(p+T)*I,s[9]=(g-x)*I,s[10]=(1-(u+_))*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(He.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,He.Quaternion[0]),He.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=He.Vector3[0],a=He.Quaternion[0],o=He.Vector3[1];e.decompose(s,a,o);let l=He.Vector3[2],c=He.Quaternion[1],f=He.Vector3[3];t.decompose(l,c,f);let h=He.Vector3[4];b.LerpToRef(s,l,i,h);let d=He.Quaternion[2];ze.SlerpToRef(a,c,i,d);let u=He.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=He.Vector3[0],a=He.Vector3[1],o=He.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=He.Vector3[0],a=He.Vector3[1],o=He.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=He.Vector3[0];r.copyFrom(e),r.scaleInPlace(-1);let s=He.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=He.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(wh,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),p=(e+t)/(e-t),_=(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(wh,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,He.Matrix[1]),n.FromValuesToRef(1,0,0,0,0,1,0,0,d,u,1,0,0,0,0,1,He.Matrix[0]),He.Matrix[1].multiplyToRef(He.Matrix[0],He.Matrix[0]),n.TranslationToRef(0,0,c,He.Matrix[1]),He.Matrix[0].multiplyToRef(He.Matrix[1],He.Matrix[0]),n.OrthoOffCenterLHToRef(e,t,i,r,s,a,f,h),He.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,He.Matrix[1]),n.FromValuesToRef(1,0,0,0,0,1,0,0,d,u,1,0,0,0,0,1,He.Matrix[0]),He.Matrix[1].multiplyToRef(He.Matrix[0],He.Matrix[0]),n.TranslationToRef(0,0,-c,He.Matrix[1]),He.Matrix[0].multiplyToRef(He.Matrix[1],He.Matrix[0]),n.OrthoOffCenterRHToRef(e,t,i,r,s,a,f,h),He.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(wh,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,p=c&&f===0?-1:h!==0?(h+f)/(h-f):1,_=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,p,1,0,0,_,0,s),o&&s.multiplyToRef(wh,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(wh,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,p=c&&f===0?1:h!==0?-(h+f)/(h-f):-1,_=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,p,-1,0,0,_,0,s),o&&s.multiplyToRef(wh,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(wh,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 Zn.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 Zn.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],p=i[14],_=i[3],g=i[7],v=i[11],x=i[15],T=t._m;return 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]=p,T[12]=_,T[13]=g,T[14]=v,T[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}};j._IdentityReadOnly=j.Identity();Object.defineProperties(j.prototype,{dimension:{value:[4,4]},rank:{value:2}});He=class{};He.Vector3=Vl(11,b.Zero);He.Matrix=Vl(2,j.Identity);He.Quaternion=Vl(3,ze.Zero);Z=class{};Z.Vector2=Vl(3,Fe.Zero);Z.Vector3=Vl(13,b.Zero);Z.Vector4=Vl(3,Mi.Zero);Z.Quaternion=Vl(3,ze.Zero);Z.Matrix=Vl(8,j.Identity);Ft("BABYLON.Vector2",Fe);Ft("BABYLON.Vector3",b);Ft("BABYLON.Vector4",Mi);Ft("BABYLON.Matrix",j);wh=j.FromValues(1,0,0,0,0,1,0,0,0,0,.5,0,0,0,.5,1)});var lB,bs,cB,Yu=M(()=>{Ge();(function(n){n[n.LOCAL=0]="LOCAL",n[n.WORLD=1]="WORLD",n[n.BONE=2]="BONE"})(lB||(lB={}));bs=class{};bs.X=new b(1,0,0);bs.Y=new b(0,1,0);bs.Z=new b(0,0,1);(function(n){n[n.X=0]="X",n[n.Y=1]="Y",n[n.Z=2]="Z"})(cB||(cB={}))});function Ku(n){return Math.pow(n,zu)}function ju(n){return n<=.04045?.0773993808*n:Math.pow(.947867299*(n+.055),2.4)}function qu(n){return Math.pow(n,tB)}function Zu(n){return n<=.0031308?12.92*n:1.055*Math.pow(n,.41666)-.055}var pe,lt,Sn,zt=M(()=>{Qo();zi();Dn();On();pe=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 Si(this.r,e.r,t)&&Si(this.g,e.g,t)&&Si(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"#"+ro(e)+ro(t)+ro(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())}};pe._V8PerformanceHack=new pe(.5,.5,.5);pe._BlackReadOnly=pe.Black();Object.defineProperties(pe.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 Si(this.r,e.r,t)&&Si(this.g,e.g,t)&&Si(this.b,e.b,t)&&Si(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"#"+ro(t)+ro(i)+ro(r);let s=Math.round(this.a*255);return"#"+ro(t)+ro(i)+ro(r)+ro(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=ju(this.r),e.g=ju(this.g),e.b=ju(this.b)):(e.r=Ku(this.r),e.g=Ku(this.g),e.b=Ku(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=Zu(this.r),e.g=Zu(this.g),e.b=Zu(this.b)):(e.r=qu(this.r),e.g=qu(this.g),e.b=qu(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,p=e.a*l+i.a*c+t.a*f+r.a*h;return new n(d,u,m,p)}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",pe);Ft("BABYLON.Color4",lt)});var no,Qu=M(()=>{Ge();no=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}};no._TmpMatrix=j.Identity()});var of,sA=M(()=>{Qu();of=class n{static GetPlanes(e){let t=[];for(let i=0;i<6;i++)t.push(new no(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 fB,$u,fC,Ju,Fh,Bh=M(()=>{On();Ge();Dn();(function(n){n[n.CW=0]="CW",n[n.CCW=1]="CCW"})(fB||(fB={}));$u=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)}},fC=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 Fe((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=$u.BetweenTwoPoints(this.centerPoint,this.startPoint);let l=this.startAngle.degrees(),c=$u.BetweenTwoPoints(this.centerPoint,this.midPoint).degrees(),f=$u.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=$u.FromDegrees(this.orientation===0?l-f:f-l)}},Ju=class n{constructor(e,t){this._points=new Array,this._length=0,this.closed=!1,this._points.push(new Fe(e,t))}addLineTo(e,t){if(this.closed)return this;let i=new Fe(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 Fe(e,t),l=new Fe(i,r),c=new fC(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 Fe.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 Fe(a.x+f.x*h,a.y+f.y*h)}i=c}return Fe.Zero()}static StartingAt(e,t){return new n(e,t)}},Fh=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:j.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;Si(Math.abs(e.y)/r,1,Nt)?Si(Math.abs(e.x)/r,1,Nt)?Si(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=j.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 Gl,aA=M(()=>{Gl=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 hB=M(()=>{Ge()});var so,em=M(()=>{so=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 dB=M(()=>{Yu();zt();Dn();sA();Bh();Qu();aA();Ge();hB();em()});var $o,kne,kl,Wl,X_,Jo,Y_=M(()=>{Ge();dB();$o=[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))],kne=[()=>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],kl=(n,e)=>$o[n]*kne[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],X_=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(kl(0,e),Z.Vector3[2]),this.l00.addInPlace(Z.Vector3[2]),s.scaleToRef(kl(1,e),Z.Vector3[2]),this.l1_1.addInPlace(Z.Vector3[2]),s.scaleToRef(kl(2,e),Z.Vector3[2]),this.l10.addInPlace(Z.Vector3[2]),s.scaleToRef(kl(3,e),Z.Vector3[2]),this.l11.addInPlace(Z.Vector3[2]),s.scaleToRef(kl(4,e),Z.Vector3[2]),this.l2_2.addInPlace(Z.Vector3[2]),s.scaleToRef(kl(5,e),Z.Vector3[2]),this.l2_1.addInPlace(Z.Vector3[2]),s.scaleToRef(kl(6,e),Z.Vector3[2]),this.l20.addInPlace(Z.Vector3[2]),s.scaleToRef(kl(7,e),Z.Vector3[2]),this.l21.addInPlace(Z.Vector3[2]),s.scaleToRef(kl(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(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($o[0]),this.l1_1.scaleInPlace($o[1]),this.l10.scaleInPlace($o[2]),this.l11.scaleInPlace($o[3]),this.l2_2.scaleInPlace($o[4]),this.l2_1.scaleInPlace($o[5]),this.l20.scaleInPlace($o[6]),this.l21.scaleInPlace($o[7]),this.l22.scaleInPlace($o[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}},Jo=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=X_.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 Gt=M(()=>{});function uB(n){let e=n.getClassName();return lA[e]||(lA[e]={}),lA[e]}function cA(n){let e=n.getClassName();if(oA[e])return oA[e];oA[e]={};let t=oA[e],i=n,r=e;for(;r;){let s=lA[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 oA,lA,hC=M(()=>{oA={},lA={}});function Sa(n,e){return(t,i)=>{let r=uB(t);r[i]||(r[i]={type:n,sourceName:e})}}function Wne(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 le(n,e=null){return Wne(n,e)}function F(n){return Sa(0,n)}function Ut(n){return Sa(1,n)}function vr(n){return Sa(2,n)}function tm(n){return Sa(3,n)}function im(n){return Sa(4,n)}function zr(n){return Sa(5,n)}function fA(n){return Sa(6,n)}function mB(n){return Sa(7,n)}function rm(n){return Sa(8,n)}function pB(n){return Sa(9,n)}function _B(n){return Sa(10,n)}function gB(n){return Sa(11,n)}function Is(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 ut(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 Vt=M(()=>{hC();Is.filter=function(n){return(e,t,i)=>Is(e,t,i,n)}});function lf(){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 K_=M(()=>{});function Hne(){return typeof _native!="undefined"&&_native.XMLHttpRequest?new _native.XMLHttpRequest:new XMLHttpRequest}var yr,Uh=M(()=>{yr=class n{constructor(){this._xhr=Hne(),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)}};yr.CustomRequestHeaders={};yr.CustomRequestModifiers=new Array;yr.SkipRequestModificationForBabylonCDN=!0});var cf,vB=M(()=>{cf=class{};cf.FilesToLoad={}});var hA,EB=M(()=>{hA=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 Hl,Ta,Ms,j_=M(()=>{Hl=class extends Error{};Hl._setPrototypeOf=Object.setPrototypeOf||((n,e)=>(n.__proto__=e,n));Ta={MeshInvalidPositionsError:0,UnsupportedTextureError:1e3,GLTFLoaderUnexpectedMagicError:2e3,SceneLoaderError:3e3,LoadFileError:4e3,RequestFileError:4001,ReadFileError:4002},Ms=class n extends Hl{constructor(e,t,i){super(e),this.errorCode=t,this.innerError=i,this.name="RuntimeError",Hl._setPrototypeOf(this,n.prototype)}}});function zne(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 Xne(n){let e=dC(n),t=e.length,i=new Uint8Array(new ArrayBuffer(t));for(let r=0;r{SB=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():zne(e)},dC=n=>atob(n),TB=n=>typeof Uint8Array.fromBase64=="function"?Uint8Array.fromBase64(n).buffer:Xne(n)});function Yne(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 Kne(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 el(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 uC(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 Vh(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(p{for(let T=0;Tf.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 hf(n){return TB(n.split(",")[1])}var bB,am,uA,pC,jne,Gi,mA,RB,om,Gh,tl,pA,IB,MB,ff,CB,yB,qne,Z_,Zne,zl=M(()=>{Uh();Ea();di();vB();EB();j_();q_();zT();Ni();Pt();qo();af();Ur();sm();bB=new RegExp(/^data:([^,]+\/[^,]+)?;base64,/i),am=class n extends Ms{constructor(e,t){super(e,Ta.LoadFileError),this.name="LoadFileError",Hl._setPrototypeOf(this,n.prototype),t instanceof yr?this.request=t:this.file=t}},uA=class n extends Ms{constructor(e,t){super(e,Ta.RequestFileError),this.request=t,this.name="RequestFileError",Hl._setPrototypeOf(this,n.prototype)}},pC=class n extends Ms{constructor(e,t){super(e,Ta.ReadFileError),this.file=t,this.name="ReadFileError",Hl._setPrototypeOf(this,n.prototype)}},jne=n=>(n=n.replace(/#/gm,"%23"),n),Gi={DefaultRetryStrategy:hA.ExponentialBackoff(),BaseUrl:"",CorsBehavior:"anonymous",PreprocessUrl:n=>n,ScriptBaseUrl:"",ScriptPreprocessUrl:n=>n,CleanUrl:jne},mA=(n,e)=>{if(!(n&&n.indexOf("data:")===0)&&Gi.CorsBehavior)if(typeof Gi.CorsBehavior=="string"||Gi.CorsBehavior instanceof String)e.crossOrigin=Gi.CorsBehavior;else{let t=Gi.CorsBehavior(n);t&&(e.crossOrigin=t)}},RB={getRequiredSize:null},om=(n,e,t,i,r="",s,a=Oe.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=dA(n),o=URL.createObjectURL(new Blob([E],{type:r})),l=!0}else o=`data:${r};base64,`+nm(n);else n instanceof Blob?(o=URL.createObjectURL(n),l=!0):(o=Gi.CleanUrl(n),o=Gi.PreprocessUrl(o));let c=E=>{if(t){let S=o||n.toString();t(`Error while trying to load image: ${S.indexOf("http")===0||S.length<=128?S:S.slice(0,128)+"..."}`,E)}};if(a!=null&&a._features.forceBitmapOverHTMLImageElement)return tl(o,E=>{a.createImageBitmap(new Blob([E],{type:r}),{premultiplyAlpha:"none",colorSpaceConversion:"none",...s}).then(S=>{e(S),l&&URL.revokeObjectURL(o)}).catch(S=>{t&&t("Error while trying to load image: "+n,S)})},void 0,i||void 0,!0,(E,S)=>{c(S)}),null;let f=new Image;if(RB.getRequiredSize){let E=RB.getRequiredSize(n);E.width&&(f.width=E.width),E.height&&(f.height=E.height)}mA(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)},p=E=>{u(),c(E),l&&f.src&&URL.revokeObjectURL(f.src)},_=E=>{if(E.blockedURI!==f.src||E.disposition==="report")return;u();let S=new Error(`CSP violation of policy ${E.effectiveDirective} ${E.blockedURI}. Current policy is ${E.originalPolicy}`);Oe.UseFallbackTexture=!1,c(S),l&&f.src&&URL.revokeObjectURL(f.src),f.src=""};h.push({target:f,name:"load",handler:m}),h.push({target:f,name:"error",handler:p}),h.push({target:document,name:"securitypolicyviolation",handler:_}),d();let g=o.substring(0,5)==="blob:",v=o.substring(0,5)==="data:",x=()=>{g||v||!yr.IsCustomRequestAvailable?f.src=o:tl(o,(E,S,R)=>{let I=!r&&R?R:r,C=new Blob([E],{type:I}),y=URL.createObjectURL(C);l=!0,f.src=y},void 0,i||void 0,!0,(E,S)=>{c(S)})},T=()=>{i&&i.loadImage(o,f)};if(!g&&!v&&i&&i.enableTexturesOffline)i.open(T,x);else{if(o.indexOf("file:")!==-1){let E=decodeURIComponent(o.substring(5).toLowerCase());if(cf.FilesToLoad[E]&&typeof URL!="undefined"){try{let S;try{S=URL.createObjectURL(cf.FilesToLoad[E])}catch(R){S=URL.createObjectURL(cf.FilesToLoad[E])}f.src=S,l=!0}catch(S){f.src=""}return f}}x()}return f},Gh=(n,e,t,i,r)=>{let s=new FileReader,a={onCompleteObservable:new ie,abort:()=>s.abort()};return s.onloadend=()=>a.onCompleteObservable.notifyObservers(a),r&&(s.onerror=()=>{r(new pC(`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},tl=(n,e,t,i,r,s,a)=>{if(n.name)return Gh(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=cf.FilesToLoad[f];if(h)return Gh(h,e,t,r,s?d=>s(void 0,new am(d.message,d.file)):void 0)}let{match:l,type:c}=CB(o);if(l){let f={onCompleteObservable:new ie,abort:()=>()=>{}};try{let h=r?hf(o):yB(o);e(h,void 0,c)}catch(h){s?s(void 0,h):ee.Error(h.message||"Failed to parse the Data URL")}return eo.SetImmediate(()=>{f.onCompleteObservable.notifyObservers(f)}),f}return pA(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 am(f.message,f.request))}:void 0,a)},pA=(n,e,t,i,r,s,a)=>{var h;i!==null&&(i!=null||(i=(h=Oe.LastCreatedScene)==null?void 0:h.offlineProvider)),n=Gi.CleanUrl(n),n=Gi.PreprocessUrl(n);let o=Gi.BaseUrl+n,l=!1,c={onCompleteObservable:new ie,abort:()=>l=!0},f=()=>{let d=new yr,u=null,m,p=()=>{d&&(t&&d.removeEventListener("progress",t),m&&d.removeEventListener("readystatechange",m),d.removeEventListener("loadend",_))},_=()=>{p(),c.onCompleteObservable.notifyObservers(c),c.onCompleteObservable.clear(),t=void 0,m=null,_=null,s=void 0,a=void 0,e=void 0};c.abort=()=>{l=!0,_&&_(),d&&d.readyState!==(XMLHttpRequest.DONE||4)&&d.abort(),u!==null&&(clearTimeout(u),u=null),d=null};let g=x=>{let T=x.message||"Unknown error";s&&d?s(new uA(T,d)):ee.Error(T)},v=x=>{if(d){if(d.open("GET",o),a)try{a(d)}catch(T){g(T);return}r&&(d.responseType="arraybuffer"),t&&d.addEventListener("progress",t),_&&d.addEventListener("loadend",_),m=()=>{if(!(l||!d)&&d.readyState===(XMLHttpRequest.DONE||4)){if(m&&d.removeEventListener("readystatechange",m),d.status>=200&&d.status<300||d.status===0&&(!dr()||MB())){let S=r?d.response:d.responseText;if(S!==null){try{e&&e(S,d)}catch(R){g(R)}return}}let T=Gi.DefaultRetryStrategy;if(T){let S=T(o,d,x);if(S!==-1){p(),d=new yr,u=setTimeout(()=>v(x+1),S);return}}let E=new uA("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(Gi.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},IB=n=>{let{match:e,type:t}=CB(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}},MB=()=>typeof location!="undefined"&&location.protocol==="file:",ff=n=>bB.test(n),CB=n=>{let e=bB.exec(n);return e===null||e.length===0?{match:!1,type:""}:{match:!0,type:e[0].replace("data:","").replace(";base64,","")}};yB=n=>dC(n.split(",")[1]),qne=()=>{Me._FileToolsLoadImage=om,Vu.loadFile=tl,qM.loadFile=tl};qne();Zne=(n,e,t,i,r,s,a,o,l,c)=>{Z_={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(Z_,"DefaultRetryStrategy",{get:function(){return t.DefaultRetryStrategy},set:function(f){t.DefaultRetryStrategy=f}}),Object.defineProperty(Z_,"BaseUrl",{get:function(){return t.BaseUrl},set:function(f){t.BaseUrl=f}}),Object.defineProperty(Z_,"PreprocessUrl",{get:function(){return t.PreprocessUrl},set:function(f){t.PreprocessUrl=f}}),Object.defineProperty(Z_,"CorsBehavior",{get:function(){return t.CorsBehavior},set:function(f){t.CorsBehavior=f}})};Zne(hf,yB,Gi,ff,MB,tl,om,Gh,pA,mA)});var _A,PB=M(()=>{aA();_A=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=Gl.Zero(),this._cachedBaseSize=Gl.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 gA,LB=M(()=>{gA=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,df=M(()=>{LB();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):gA.Eval(t,i=>n.HasTags(e)&&e._tags[i])}}});var DB,it,xr=M(()=>{hn();df();zt();Ge();hC();DB=function(n,e,t,i={}){let r=n();Qt&&Qt.HasTags(e)&&Qt.AddTagsTo(r,Qt.GetTags(e,!0));let s=cA(r),a={};for(let o in s){let l=s[o],c=e[o],f=l.type;if(c!=null&&(o!=="uniqueId"||it.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},it=class n{static AppendSerializedAnimations(e,t){if(e.animations){t.animations=[];for(let i=0;i{throw Ze("ImageProcessingConfiguration")};it._FresnelParametersParser=n=>{throw Ze("FresnelParameters")};it._ColorCurvesParser=n=>{throw Ze("ColorCurves")};it._TextureParser=(n,e,t)=>{throw Ze("Texture")}});var pi,Q_=M(()=>{Gt();Vt();di();Ge();Ni();K_();zl();PB();xr();pi=class n extends _A{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=lf()),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 ie,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=Oe.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 j.IdentityReadOnly}getReflectionTextureMatrix(){return j.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=it.Serialize(this);return it.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([Ut()],pi.prototype,"irradianceTexture",null);P([F()],pi.prototype,"isRenderTarget",void 0)});var uf,Xl,_C=M(()=>{Ge();On();Y_();Dn();zt();uf=class{constructor(e,t,i,r){this.name=e,this.worldAxisForNormal=t,this.worldAxisForFileX=i,this.worldAxisForFileY=r}},Xl=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,S,R,I,C,y])=>{let D=l;g&&(E=this._DownsampleFace(E,t,r,4),S=this._DownsampleFace(S,t,r,4),R=this._DownsampleFace(R,t,r,4),I=this._DownsampleFace(I,t,r,4),C=this._DownsampleFace(C,t,r,4),y=this._DownsampleFace(y,t,r,4),D=r);let O={size:D,right:S,left:E,up:R,down:I,front:C,back:y,format:_,type:E instanceof Float32Array?1:0,gammaSpace:p};T(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,p=["right","left","up","down","front","back"],_={};for(let g of p)_[g]=this._DownsampleFace(e[g],e.size,i,m);e={...e,..._,size:i}}let r=new X_,s=0,a=2/e.size,o=a,l=.5*a,c=l-1;for(let m=0;m<6;m++){let p=this._FileFaces[m],_=e[p.name],g=c,v=e.format===5?4:3;for(let x=0;xD){let N=D/V;I*=N,C*=N,y*=N}}else I=wt(I,0,D),C=wt(C,0,D),y=wt(y,0,D);let O=new pe(I,C,y);r.addLight(S,O,R),s+=R,T+=a}g+=o}}let u=4*Math.PI*6/6/s;return r.scaleInPlace(u),r.convertIncidentRadianceToIrradiance(),r.convertIrradianceToLambertianRadiance(),Jo.FromHarmonics(r)}};Xl._FileFaces=[new uf("right",new b(1,0,0),new b(0,0,-1),new b(0,-1,0)),new uf("left",new b(-1,0,0),new b(0,0,1),new b(0,-1,0)),new uf("up",new b(0,1,0),new b(1,0,0),new b(0,0,1)),new uf("down",new b(0,-1,0),new b(1,0,0),new b(0,0,-1)),new uf("front",new b(0,0,1),new b(1,0,0),new b(0,-1,0)),new uf("back",new b(0,0,-1),new b(-1,0,0),new b(0,-1,0))];Xl.MAX_HDRI_VALUE=4096;Xl.PRESERVE_CLAMPED_COLORS=!1});var Yl,gC=M(()=>{Pt();zi();Yl=class{static Instantiate(e){if(this.RegisteredExternalClasses&&this.RegisteredExternalClasses[e])return this.RegisteredExternalClasses[e];let t=En(e);if(t)return t;ee.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 NB(n,e=0,t=0){let i=n.getInternalTexture();if(!i)return null;let r=n._readPixelsSync(e,t);return r?OB(r,n.getSize(),i.invertY):null}async function wB(n,e=0,t=0){let i=n.getInternalTexture();if(!i)return null;let r=await n.readPixels(e,t);return r?OB(r,n.getSize(),i.invertY):null}var FB=M(()=>{});var Mt,tn=M(()=>{Mt=!1});var ge,Vr=M(()=>{Gt();Vt();di();Ge();Q_();zi();hn();qo();gC();Qu();q_();FB();tn();xr();ge=class n extends pi{static _CreateVideoTexture(e,t,i,r=!1,s=!1,a=n.TRILINEAR_SAMPLINGMODE,o={},l,c=5){throw Ze("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,C,y,D,O,V,N,w,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 ie,this._isBlocking=!0,this.name=e||"",this.url=e;let p,_=!1,g=null,v=!0;typeof i=="object"&&i!==null?(p=(R=i.noMipmap)!=null?R:!1,r=(I=i.invertY)!=null?I:!Mt,s=(C=i.samplingMode)!=null?C:n.TRILINEAR_SAMPLINGMODE,a=(y=i.onLoad)!=null?y: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,_=(N=i.useSRGBBuffer)!=null?N:!1,g=(w=i.internalTexture)!=null?w:null,v=(U=i.gammaSpace)!=null?U:v,m=(W=i.forcedExtension)!=null?W:m):p=!!i,this._gammaSpace=v,this._noMipmap=p,this._invertY=r===void 0?!Mt:r,this._initialSamplingMode=s,this._buffer=l,this._deleteBuffer=c,this._mimeType=h,this._loaderOptions=d,this._creationFlags=u,this._useSRGBBuffer=_,this._forcedExtension=m,f!==void 0&&(this._format=f);let x=this.getScene(),T=this._getEngine();if(!T)return;T.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()},S=(te,$)=>{this._loadingError=!0,this._errorObject={message:te,exception:$},o&&o(te,$),n.OnTextureLoadErrorObservable.notifyObservers(this)};if(!this.url&&!g){this._delayedOnLoad=E,this._delayedOnError=S;return}if(this._texture=g!=null?g:this._getFromCache(this.url,p,s,this._invertY,_,this.isCube),this._texture)if(this._texture.isReady)eo.SetImmediate(()=>E());else{let te=this._texture.onLoadedObservable.add(E);this._texture.onErrorObservable.add($=>{var J;S($.message,$.exception),(J=this._texture)==null||J.onLoadedObservable.remove(te)})}else if(!x||!x.useDelayedTextureLoading){try{this._texture=T.createTexture(this.url,p,this._invertY,x,s,E,S,this._buffer,void 0,this._format,this._forcedExtension,h,d,u,_)}catch(te){throw S("error loading",te),te}c&&(this._buffer=null)}else this.delayLoadState=4,this._delayedOnLoad=E,this._delayedOnError=S}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?eo.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=j.Zero(),this._rowGenerationMatrix=new j,this._t0=b.Zero(),this._t1=b.Zero(),this._t2=b.Zero()),j.RotationYawPitchRollToRef(this.vAng,this.uAng,this.wAng,this._rowGenerationMatrix),this.homogeneousRotationInUVTransform?(j.TranslationToRef(-this._cachedURotationCenter,-this._cachedVRotationCenter,-this._cachedWRotationCenter,Z.Matrix[0]),j.TranslationToRef(this._cachedURotationCenter,this._cachedVRotationCenter,this._cachedWRotationCenter,Z.Matrix[1]),j.ScalingToRef(this._cachedUScale,this._cachedVScale,0,Z.Matrix[2]),j.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),j.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=j.Zero()),this._projectionModeMatrix||(this._projectionModeMatrix=j.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:{j.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:{j.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:j.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 it.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,${nm(this._buffer)}`}else(n.ForceSerializeBuffers||this.url&&this.url.startsWith("blob:")||this._forceSerialize)&&(t.base64String=!this._engine||this._engine._features.supportSyncTextureRead?NB(this):wB(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=Yl.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=no.FromArray(e.mirrorPlane),a(m),m}else if(e.isRenderTarget&&!e.base64String){let m=null;if(e.isCube){if(t.reflectionProbes)for(let p=0;p{a(m)}},_=e.base64String,g=_.startsWith("data:")?_.substring(5):_;m=n.CreateFromBase64String("",g,t,p),m.name=e.name}else{let p;e.name&&(e.name.indexOf("://")>0||e.name.startsWith("data:"))?p=e.name:p=i+e.name,e.url&&(e.url.startsWith("data:")||n.UseSerializedUrlIfAny)&&(p=e.url);let _={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(p,t,_)}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 ie;ge._SerializeInternalTextureUniqueId=!1;ge._CubeTextureParser=(n,e,t)=>{throw Ze("CubeTexture")};ge._CreateMirror=(n,e,t,i)=>{throw Ze("MirrorTexture")};ge._CreateRenderTargetTexture=(n,e,t,i,r)=>{throw Ze("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);Ft("BABYLON.Texture",ge);it._TextureParser=ge.Parse});var ao,L,ki=M(()=>{eC();Pt();sm();ao=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 Dh?(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}ee.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,T,E;this._isDisposed=!1;let p;if(this.engine=e,typeof r=="object"&&r!==null?(p=(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=(T=r.divisor)!=null?T:1,m=(E=r.takeBufferOwnership)!=null?E:!1,this._label=r.label):p=!!r,t instanceof ao?(this._buffer=t,this._ownsBuffer=m):(this._buffer=new ao(e,t,p,a,s,o,d,u,this._label),this._ownsBuffer=!0),this.uniqueId=n._Counter++,this._kind=i,f===void 0){let S=this.getData();this.type=S?n.GetDataType(S):n.FLOAT}else this.type=f;let _=el(this.type);d?(this._size=c||(a?a/_:n.DeduceStride(i)),this.byteStride=a||this._buffer.byteStride||this._size*_,this.byteOffset=l||0):(this._size=c||a||n.DeduceStride(i),this.byteStride=a?a*_:this._buffer.byteStride||this._size*_,this.byteOffset=(l||0)*_),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?mC(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/el(this.type)}getOffset(){return this.byteOffset/el(this.type)}getSize(e=!1){return e?this._size*el(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){Vh(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{ki();di();Kl=class{constructor(e){this._vertexBuffers={},this._activePostProcesses=[],this.onBeforeRenderObservable=new ie,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();BB=(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;il=class{static DeepCopy(e,t,i,r,s=!1){let a=Qne(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{di();Ea();Pt();$_();Bl();hn();Uh();Ni();zl();qo();gC();K_();to();_e=class{static get BaseUrl(){return Gi.BaseUrl}static set BaseUrl(e){Gi.BaseUrl=e}static get CleanUrl(){return Gi.CleanUrl}static set CleanUrl(e){Gi.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("://"){tl(e,s=>{i(s)},void 0,void 0,t,(s,a)=>{r(a)})})}static GetAssetUrl(e){if(!e)return"";if(gt.AssetBaseUrl&&e.startsWith(gt._DefaultAssetsUrl)){let t=gt.AssetBaseUrl.endsWith("/")?gt.AssetBaseUrl.slice(0,-1):gt.AssetBaseUrl;return e.replace(gt._DefaultAssetsUrl,t)}return e}static GetBabylonScriptURL(e,t){if(!e)return"";if(e.startsWith(gt._DefaultCdnUrl)){if(gt.ScriptBaseUrl){let i=gt.ScriptBaseUrl.endsWith("/")?gt.ScriptBaseUrl.slice(0,-1):gt.ScriptBaseUrl;e=e.replace(gt._DefaultCdnUrl,i)}else if(gt._CdnVersion){let i=`${gt._DefaultCdnUrl}/v${gt._CdnVersion}`;e.startsWith(i)||(e=e.replace(gt._DefaultCdnUrl,i))}}return e=gt.ScriptPreprocessUrl(e),t&&!gt.IsAbsoluteUrl(e)&&(e=gt.GetAbsoluteUrl(e)),e}static LoadBabylonScript(e,t,i,r){e=gt.GetBabylonScriptURL(e),gt.LoadScript(e,t,i)}static async LoadBabylonScriptAsync(e){return e=gt.GetBabylonScriptURL(e),await gt.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 ie,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 Gh(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){il.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"}gt.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&>.DownloadBlob(a,r),t&&t("")},i,s);else if(t){if(gt._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 Ze("ScreenshotTools")}static async CreateScreenshotAsync(e,t,i,r="image/png",s){throw Ze("ScreenshotTools")}static CreateScreenshotUsingRenderTarget(e,t,i,r,s="image/png",a=1,o=!1,l,c=!1,f=!1,h=!0,d,u){throw Ze("ScreenshotTools")}static async CreateScreenshotUsingRenderTargetAsync(e,t,i,r="image/png",s=1,a=!1,o,l=!1,c=!1,f=!0,h,d){throw Ze("ScreenshotTools")}static RandomId(){return lf()}static IsBase64(e){return ff(e)}static DecodeBase64(e){return hf(e)}static get errorsCount(){return ee.errorsCount}static Log(e){ee.Log(e)}static Warn(e){ee.Warn(e)}static Error(e){ee.Error(e)}static get LogCache(){return ee.LogCache}static ClearLogCache(){ee.ClearLogCache()}static set LogLevels(e){ee.LogLevels=e}static set PerformanceLogLevel(e){var t;if((e>.PerformanceUserMarkLogLevel)===gt.PerformanceUserMarkLogLevel){_native!=null&&_native.enablePerformanceLogging?(_native.enablePerformanceLogging(1),gt.StartPerformanceCounter=gt._StartMarkNative,gt.EndPerformanceCounter=gt._EndMarkNative):(gt.StartPerformanceCounter=gt._StartUserMark,gt.EndPerformanceCounter=gt._EndUserMark);return}if((e>.PerformanceConsoleLogLevel)===gt.PerformanceConsoleLogLevel){_native!=null&&_native.enablePerformanceLogging?(_native.enablePerformanceLogging(2),gt.StartPerformanceCounter=gt._StartMarkNative,gt.EndPerformanceCounter=gt._EndMarkNative):(gt.StartPerformanceCounter=gt._StartPerformanceConsole,gt.EndPerformanceCounter=gt._EndPerformanceConsole);return}gt.StartPerformanceCounter=gt._StartPerformanceCounterDisabled,gt.EndPerformanceCounter=gt._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(!gt._Performance){if(!dr())return;gt._Performance=window.performance}!t||!gt._Performance.mark||gt._Performance.mark(e+"-Begin")}static _EndUserMark(e,t=!0){!t||!gt._Performance.mark||(gt._Performance.mark(e+"-End"),gt._Performance.measure(e,e+"-Begin",e+"-End"))}static _StartPerformanceConsole(e,t=!0){t&&(gt._StartUserMark(e,t),console.time&&console.time(e))}static _EndPerformanceConsole(e,t=!0){t&&(gt._EndUserMark(e,t),console.timeEnd(e))}static _StartMarkNative(e,t=!0){if(t&&(_native!=null&&_native.startPerformanceCounter))if(gt._NativePerformanceCounterHandles.has(e))gt.Warn(`Performance counter with name ${e} is already started.`);else{let i=_native.startPerformanceCounter(e);gt._NativePerformanceCounterHandles.set(e,i)}}static _EndMarkNative(e,t=!0){if(t&&(_native!=null&&_native.endPerformanceCounter)){let i=gt._NativePerformanceCounterHandles.get(e);i?(_native.endPerformanceCounter(i),gt._NativePerformanceCounterHandles.delete(e)):gt.Warn(`Performance counter with name ${e} was not started.`)}}static get Now(){return _r.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 Fl()?/^((?!chrome|android).)*safari/i.test(navigator.userAgent):!1}};gt=_e;_e.AssetBaseUrl="";_e.UseCustomRequestHeaders=!1;_e.CustomRequestHeaders=yr.CustomRequestHeaders;_e.GetDOMTextContent=CT;_e._DefaultCdnUrl="https://cdn.babylonjs.com";_e._CdnVersion="9.6.0";_e._DefaultAssetsUrl="https://assets.babylonjs.com/core";_e.LoadScript=typeof _native=="undefined"?gt._LoadScriptWeb:gt._LoadScriptNative;_e.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.")};_e.NoneLogLevel=ee.NoneLogLevel;_e.MessageLogLevel=ee.MessageLogLevel;_e.WarningLogLevel=ee.WarningLogLevel;_e.ErrorLogLevel=ee.ErrorLogLevel;_e.AllLogLevel=ee.AllLogLevel;_e.IsWindowObjectExist=dr;_e.PerformanceNoneLogLevel=0;_e.PerformanceUserMarkLogLevel=1;_e.PerformanceConsoleLogLevel=2;_e._NativePerformanceCounterHandles=new Map;_e.StartPerformanceCounter=gt._StartPerformanceCounterDisabled;_e.EndPerformanceCounter=gt._EndPerformanceCounterDisabled;EA=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)}};_e.Mix=W_;_e.IsExponentOfTwo=Oh;Oe.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 ur,mf=M(()=>{Pt();Ci();ur=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){ee.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{Ui=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}};Ui._GlobalId=0;oo=class extends Ui{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{lo();Ge();J_=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 Ui(256),this._transparentSubMeshes=new Ui(256),this._alphaTestSubMeshes=new Ui(256),this._depthOnlySubMeshes=new Ui(256),this._particleSystems=new Ui(256),this._spriteManagers=new Ui(256),this._empty=!0,this._edgesRenderers=new oo(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{UB();vC=class{},Aa=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 vC,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 xa,EC=M(()=>{mf();di();SA();Qo();qo();Pt();lo();eg();xa=class n{get renderList(){return this._renderList}set renderList(e){this._renderList!==e&&(this._unObserveRenderList&&(this._unObserveRenderList(),this._unObserveRenderList=null),e&&(this._unObserveRenderList=rA(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?(ee.Error("ObjectRenderer: Timeout while waiting for the renderer to be ready."),t&&ee.Error(t)):(ee.Error("ObjectRenderer: An unexpected error occurred while waiting for the renderer to be ready."),t&&(ee.Error(t),t.stack&&ee.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 ie,this.onAfterRenderObservable=new ie,this.onBeforeRenderingManagerRenderObservable=new ie,this.onAfterRenderingManagerRenderObservable=new ie,this.onInitRenderingObservable=new ie,this.onFinishRenderingObservable=new ie,this.onFastPathRenderObservable=new ie,this._currentRefreshId=-1,this._refreshRate=1,this._currentApplyByPostProcessSetting=!1,this._activeMeshes=new Ui(256),this._activeBoundingBoxes=new Ui(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 Aa(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{qo();Jn=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():eo.SetImmediate(()=>{i.getEngine().onEndFrameObservable.addOnce(()=>{i.dispose()})}),this.effect=null}(t=this.drawContext)==null||t.dispose()}}});var GB={};tt(GB,{postprocessVertexShader:()=>$ne});var SC,VB,$ne,TC=M(()=>{G();SC="postprocessVertexShader",VB=`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 -}`;T.ShadersStore[pC]||(T.ShadersStore[pC]=CU);Fne={name:pC,shader:CU}});var LU={};tt(LU,{postprocessVertexShaderWGSL:()=>Une});var gC,PU,Une,vC=M(()=>{G();gC="postprocessVertexShader",PU=`attribute position: vec2;uniform scale: vec2;varying vUV: vec2;const madd=vec2(0.5,0.5); +}`;A.ShadersStore[SC]||(A.ShadersStore[SC]=VB);$ne={name:SC,shader:VB}});var WB={};tt(WB,{postprocessVertexShaderWGSL:()=>Jne});var AC,kB,Jne,xC=M(()=>{G();AC="postprocessVertexShader",kB=`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 { @@ -4156,16 +4156,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 } -`;T.ShadersStoreWGSL[gC]||(T.ShadersStoreWGSL[gC]=PU);Une={name:gC,shader:PU}});var EC,_A,Xr,Wh=M(()=>{ki();em();di();Ph();kh();_C();vC();EC={positions:[1,1,-1,1,-1,-1,1,-1],indices:[0,1,2,0,2,3]},_A=class{constructor(e,t=EC){var s,a;this._fullscreenViewport=new no(0,0,1,1);let i=(s=t.positions)!=null?s:EC.positions,r=(a=t.indices)!=null?a:EC.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)}},Xr=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 ie(void 0,!0),this.onApplyObservable=new ie,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 $n(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 p=(u=i==null?void 0:i.slice())!=null?u:[];p.push(...this.options.samplers),e=c.defineCustomBindings(this.name,e,m,p),t=m,i=p}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,p)=>c.processCodeAfterIncludes(this.name,m,p):null,processFinalCode:c!=null&&c.processFinalCode?(m,p)=>c.processFinalCode(this.name,m,p):null,shaderLanguage:this.options.shaderLanguage,extraInitializationsAsync:h},this.options.engine):this._drawWrapper.effect=new sr(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)}};Xr.ForceGLSL=!1;Xr._CustomShaderCodeProcessing={}});var TC={};tt(TC,{passPixelShader:()=>Bne});var SC,DU,Bne,AC=M(()=>{G();SC="passPixelShader",DU=`varying vec2 vUV;uniform sampler2D textureSampler; +`;A.ShadersStoreWGSL[AC]||(A.ShadersStoreWGSL[AC]=kB);Jne={name:AC,shader:kB}});var RC,TA,Xr,Wh=M(()=>{ki();em();di();Ph();kh();TC();xC();RC={positions:[1,1,-1,1,-1,-1,1,-1],indices:[0,1,2,0,2,3]},TA=class{constructor(e,t=RC){var s,a;this._fullscreenViewport=new so(0,0,1,1);let i=(s=t.positions)!=null?s:RC.positions,r=(a=t.indices)!=null?a:RC.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)}},Xr=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 ie(void 0,!0),this.onApplyObservable=new ie,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 Jn(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 p=(u=i==null?void 0:i.slice())!=null?u:[];p.push(...this.options.samplers),e=c.defineCustomBindings(this.name,e,m,p),t=m,i=p}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,p)=>c.processCodeAfterIncludes(this.name,m,p):null,processFinalCode:c!=null&&c.processFinalCode?(m,p)=>c.processFinalCode(this.name,m,p):null,shaderLanguage:this.options.shaderLanguage,extraInitializationsAsync:h},this.options.engine):this._drawWrapper.effect=new sr(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)}};Xr.ForceGLSL=!1;Xr._CustomShaderCodeProcessing={}});var IC={};tt(IC,{passPixelShader:()=>ese});var bC,HB,ese,MC=M(()=>{G();bC="passPixelShader",HB=`varying vec2 vUV;uniform sampler2D textureSampler; #define CUSTOM_FRAGMENT_DEFINITIONS void main(void) -{gl_FragColor=texture2D(textureSampler,vUV);}`;T.ShadersStore[SC]||(T.ShadersStore[SC]=DU);Bne={name:SC,shader:DU}});var OU={};tt(OU,{Dispose:()=>RC,DumpData:()=>gA,DumpDataAsync:()=>tg,DumpFramebuffer:()=>xC,DumpTools:()=>Wne,EncodeImageAsync:()=>kne});async function Vne(){var o,l;let n=(l=(o=Oe.LastCreatedEngine)==null?void 0:o.createCanvas(100,100))!=null?l:new OffscreenCanvas(100,100);n instanceof OffscreenCanvas&&ee.Warn("DumpData: OffscreenCanvas will be used for dumping data. This may result in lossy alpha values.");let{ThinEngine:e}=await Promise.resolve().then(()=>(Zn(),y2));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);Oe.Instances.pop(),Oe.OnEnginesDisposedObservable.add(c=>{i&&c!==i&&!i.isDisposed&&Oe.Instances.length===0&&RC()}),i.getCaps().parallelShaderCompile=void 0;let r=new _A(i),{passPixelShader:s}=await Promise.resolve().then(()=>(AC(),TC)),a=new Xr({engine:i,name:s.name,fragmentShader:s.shader,samplerNames:["textureSampler"]});return{canvas:n,dumpEngine:{engine:i,renderer:r,wrapper:a}}}async function Gne(){return pf||(pf=Vne()),await pf}async function xC(n,e,t,i,r="image/png",s,a){let o=await t.readPixels(0,0,n,e),l=new Uint8Array(o.buffer);gA(n,e,l,i,r,s,!0,void 0,a)}async function tg(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 eg.EncodeImageAsync(t,n,e,i,s,o);r!==void 0&&pe.DownloadBlob(l,r),l.type!==i&&ee.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,${nm(c)}`}function gA(n,e,t,i,r="image/png",s,a=!1,o=!1,l){s===void 0&&!i&&(s=""),tg(n,e,t,r,s,a,o,l).then(c=>{i&&i(c)})}function RC(){pf&&(pf==null||pf.then(n=>{n.canvas instanceof HTMLCanvasElement&&n.canvas.remove(),n.dumpEngine&&(n.dumpEngine.engine.dispose(),n.dumpEngine.renderer.dispose(),n.dumpEngine.wrapper.dispose())}),pf=null)}var pf,eg,kne,Wne,Hne,bC=M(()=>{Gt();Wh();Mi();Dn();Oi();Pt();j_();Vt();pf=null;eg=class{static async EncodeImageAsync(e,t,i,r,s,a){let o=await Gne(),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)=>{pe.ToBlob(o.canvas,d=>{d?f(d):h(new Error("EncodeImageAsync: Failed to convert canvas to blob."))},r,a)})}};P([xs],eg,"EncodeImageAsync",null);kne=eg.EncodeImageAsync;Wne={DumpData:gA,DumpDataAsync:tg,DumpFramebuffer:xC,Dispose:RC},Hne=()=>{pe.DumpData=gA,pe.DumpDataAsync=tg,pe.DumpFramebuffer=xC};Hne()});var Gr,_f=M(()=>{di();Ge();Vr();uA();eo();Ph();Pt();mC();sr.prototype.setDepthStencilTexture=function(n,e){this._engine.setDepthStencilTexture(this._samplers[n],this._uniforms[n],e,n)};Gr=class n extends _e{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=_e.TRILINEAR_SAMPLINGMODE,c=!0,f=!1,h=!1,d=5,u=!1,m,p,_=!1,g=!1){var R,I,C,y,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=(C=N.samplingMode)!=null?C:_e.TRILINEAR_SAMPLINGMODE,c=(y=N.generateDepthBuffer)!=null?y:!0,f=!!N.generateStencilBuffer,h=!!N.isMulti,d=(D=N.format)!=null?D:5,u=!!N.delayAllocation,m=N.samples,p=N.creationFlags,_=!!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 ie,this.onAfterUnbindObservable=new ie,this.onClearObservable=new ie,this.onResizeObservable=new ie,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 S=this.getScene().getEngine();this._gammaSpace=x,this._coordinatesMode=_e.PROJECTION_MODE,this.name=e,this.isRenderTarget=!0,this._initialSizeParameter=t,this._dontDisposeObjectRenderer=!!A,this._processSizeParameter(t),this._objectRenderer=A!=null?A:new xa(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 B of N._beforeRenderTargetClearStage)B.action(this,this._currentFaceIndex,this._currentLayer);if(this.onClearObservable.hasObservers()?this.onClearObservable.notifyObservers(S):this.skipInitialClear||S.clear((w=this.clearColor)!=null?w:N.clearColor,!0,!0,!0),this._doNotChangeAspectRatio||N.updateTransformMatrix(!0),!this._disableEngineStages)for(let B of N._beforeRenderTargetDrawStage)B.action(this,this._currentFaceIndex,this._currentLayer);S._debugPushGroup&&S._debugPushGroup(`Render to ${this.name} (face #${this._currentFaceIndex} layer #${this._currentLayer})`)}),this._onAfterRenderingManagerRenderObserver=this._objectRenderer.onAfterRenderingManagerRenderObservable.add(()=>{var w,B,W,te;if(S._debugPopGroup&&S._debugPopGroup(),!this._disableEngineStages)for(let $ of this._scene._afterRenderTargetDrawStage)$.action(this,this._currentFaceIndex,this._currentLayer);let N=(B=(w=this._texture)==null?void 0:w.generateMipMaps)!=null?B:!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,(te=this._renderTarget)!=null?te:void 0,this._currentFaceIndex),!this._disableEngineStages)for(let $ of this._scene._afterRenderTargetPostProcessStage)$.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(),S):ee.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(S):this.skipInitialClear||S.clear(this.clearColor||this._scene.clearColor,!0,!0,!0)}),this._resizeObserver=S.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:p,noColorAttachment:_,useSRGBBuffer:g,colorAttachment:v,label:this.name},this.samplingMode===_e.NEAREST_SAMPLINGMODE&&(this.wrapU=_e.CLAMP_ADDRESSMODE,this.wrapV=_e.CLAMP_ADDRESSMODE),u||(o?(this._renderTarget=i.getEngine().createRenderTargetCubeTexture(this.getRenderSize(),this._renderTargetOptions),this.coordinatesMode=_e.INVCUBIC_MODE,this._textureMatrix=j.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 Kl(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(()=>(bC(),OU)).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}};Gr.REFRESHRATE_RENDER_ONCE=xa.REFRESHRATE_RENDER_ONCE;Gr.REFRESHRATE_RENDER_ONEVERYFRAME=xa.REFRESHRATE_RENDER_ONEVERYFRAME;Gr.REFRESHRATE_RENDER_ONEVERYTWOFRAMES=xa.REFRESHRATE_RENDER_ONEVERYTWOFRAMES;_e._CreateRenderTargetTexture=(n,e,t,i,r)=>new Gr(n,e,t,i)});var Ri,jl=M(()=>{Gt();oo();di();Ge();Ph();Vt();Ar();zi();Br();eo();Wh();Me.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)};Me.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)};sr.prototype.setTextureFromPostProcess=function(n,e){this._engine.setTextureFromPostProcess(this._samplers[n],e,n)};sr.prototype.setTextureFromPostProcessOutput=function(n,e){this._engine.setTextureFromPostProcessOutput(this._samplers[n],e,n)};Ri=class n{static get ForceGLSL(){return Xr.ForceGLSL}static set ForceGLSL(e){Xr.ForceGLSL=e}static RegisterShaderCodeProcessing(e,t){Xr.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,p=5,_,g){var E,S,R,I,C,y,D,O,V,N,w,B;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 Bi(2),this._textureCache=[],this._currentRenderTextureInd=0,this._scaleRatio=new Fe(1,1),this._texelSize=Fe.Zero(),this.onActivateObservable=new ie,this.onSizeChangedObservable=new ie,this.onApplyObservable=new ie,this.onBeforeRenderObservable=new ie,this.onAfterRenderObservable=new ie,this.onDisposeObservable=new ie;let v=1,x=null,A;if(i&&!Array.isArray(i)){let W=i;i=(E=W.uniforms)!=null?E:null,r=(S=W.samplers)!=null?S:null,v=(R=W.size)!=null?R:1,a=(I=W.camera)!=null?I:null,o=(C=W.samplingMode)!=null?C:1,l=W.engine,c=W.reusable,f=Array.isArray(W.defines)?W.defines.join(` -`):(y=W.defines)!=null?y: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,p=(N=W.textureFormat)!=null?N:5,_=(w=W.shaderLanguage)!=null?w:0,x=(B=W.uniformBuffers)!=null?B: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 Xr({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:_,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=p,this._shaderLanguage=_||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(()=>(vC(),LU))])):t.push(Promise.all([Promise.resolve().then(()=>(_C(),yU))]))}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 Bi(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||_.call(p,`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=it.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=vn(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 it.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([rm()],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);Ft("BABYLON.PostProcess",Ri)});var wU={};tt(wU,{passPixelShaderWGSL:()=>zne});var IC,NU,zne,FU=M(()=>{G();IC="passPixelShader",NU=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_2d; +{gl_FragColor=texture2D(textureSampler,vUV);}`;A.ShadersStore[bC]||(A.ShadersStore[bC]=HB);ese={name:bC,shader:HB}});var zB={};tt(zB,{Dispose:()=>yC,DumpData:()=>AA,DumpDataAsync:()=>ig,DumpFramebuffer:()=>CC,DumpTools:()=>nse,EncodeImageAsync:()=>rse});async function tse(){var o,l;let n=(l=(o=Oe.LastCreatedEngine)==null?void 0:o.createCanvas(100,100))!=null?l:new OffscreenCanvas(100,100);n instanceof OffscreenCanvas&&ee.Warn("DumpData: OffscreenCanvas will be used for dumping data. This may result in lossy alpha values.");let{ThinEngine:e}=await Promise.resolve().then(()=>(Qn(),G2));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);Oe.Instances.pop(),Oe.OnEnginesDisposedObservable.add(c=>{i&&c!==i&&!i.isDisposed&&Oe.Instances.length===0&&yC()}),i.getCaps().parallelShaderCompile=void 0;let r=new TA(i),{passPixelShader:s}=await Promise.resolve().then(()=>(MC(),IC)),a=new Xr({engine:i,name:s.name,fragmentShader:s.shader,samplerNames:["textureSampler"]});return{canvas:n,dumpEngine:{engine:i,renderer:r,wrapper:a}}}async function ise(){return pf||(pf=tse()),await pf}async function CC(n,e,t,i,r="image/png",s,a){let o=await t.readPixels(0,0,n,e),l=new Uint8Array(o.buffer);AA(n,e,l,i,r,s,!0,void 0,a)}async function ig(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 tg.EncodeImageAsync(t,n,e,i,s,o);r!==void 0&&_e.DownloadBlob(l,r),l.type!==i&&ee.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,${nm(c)}`}function AA(n,e,t,i,r="image/png",s,a=!1,o=!1,l){s===void 0&&!i&&(s=""),ig(n,e,t,r,s,a,o,l).then(c=>{i&&i(c)})}function yC(){pf&&(pf==null||pf.then(n=>{n.canvas instanceof HTMLCanvasElement&&n.canvas.remove(),n.dumpEngine&&(n.dumpEngine.engine.dispose(),n.dumpEngine.renderer.dispose(),n.dumpEngine.wrapper.dispose())}),pf=null)}var pf,tg,rse,nse,sse,PC=M(()=>{Gt();Wh();Ci();On();Ni();Pt();q_();Vt();pf=null;tg=class{static async EncodeImageAsync(e,t,i,r,s,a){let o=await ise(),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)=>{_e.ToBlob(o.canvas,d=>{d?f(d):h(new Error("EncodeImageAsync: Failed to convert canvas to blob."))},r,a)})}};P([Is],tg,"EncodeImageAsync",null);rse=tg.EncodeImageAsync;nse={DumpData:AA,DumpDataAsync:ig,DumpFramebuffer:CC,Dispose:yC},sse=()=>{_e.DumpData=AA,_e.DumpDataAsync=ig,_e.DumpFramebuffer=CC};sse()});var Gr,_f=M(()=>{di();Ge();Vr();vA();to();Ph();Pt();EC();sr.prototype.setDepthStencilTexture=function(n,e){this._engine.setDepthStencilTexture(this._samplers[n],this._uniforms[n],e,n)};Gr=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,C,y,D,O,V;let v,x=!0,T,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=(C=N.samplingMode)!=null?C:ge.TRILINEAR_SAMPLINGMODE,c=(y=N.generateDepthBuffer)!=null?y:!0,f=!!N.generateStencilBuffer,h=!!N.isMulti,d=(D=N.format)!=null?D:5,u=!!N.delayAllocation,m=N.samples,p=N.creationFlags,_=!!N.noColorAttachment,g=!!N.useSRGBBuffer,v=N.colorAttachment,x=(O=N.gammaSpace)!=null?O:x,T=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 ie,this.onAfterUnbindObservable=new ie,this.onClearObservable=new ie,this.onResizeObservable=new ie,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 S=this.getScene().getEngine();this._gammaSpace=x,this._coordinatesMode=ge.PROJECTION_MODE,this.name=e,this.isRenderTarget=!0,this._initialSizeParameter=t,this._dontDisposeObjectRenderer=!!T,this._processSizeParameter(t),this._objectRenderer=T!=null?T:new xa(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(S):this.skipInitialClear||S.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);S._debugPushGroup&&S._debugPushGroup(`Render to ${this.name} (face #${this._currentFaceIndex} layer #${this._currentLayer})`)}),this._onAfterRenderingManagerRenderObserver=this._objectRenderer.onAfterRenderingManagerRenderObservable.add(()=>{var w,U,W,te;if(S._debugPopGroup&&S._debugPopGroup(),!this._disableEngineStages)for(let $ of this._scene._afterRenderTargetDrawStage)$.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,(W=this._renderTarget)!=null?W:void 0,this._currentFaceIndex,this._postProcesses,this.ignoreCameraViewport):this._currentUseCameraPostProcess&&this._scene.postProcessManager._finalizeFrame(!1,(te=this._renderTarget)!=null?te:void 0,this._currentFaceIndex),!this._disableEngineStages)for(let $ of this._scene._afterRenderTargetPostProcessStage)$.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(),S):ee.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(S):this.skipInitialClear||S.clear(this.clearColor||this._scene.clearColor,!0,!0,!0)}),this._resizeObserver=S.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:p,noColorAttachment:_,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=j.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 Kl(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(()=>(PC(),zB)).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}};Gr.REFRESHRATE_RENDER_ONCE=xa.REFRESHRATE_RENDER_ONCE;Gr.REFRESHRATE_RENDER_ONEVERYFRAME=xa.REFRESHRATE_RENDER_ONEVERYFRAME;Gr.REFRESHRATE_RENDER_ONEVERYTWOFRAMES=xa.REFRESHRATE_RENDER_ONEVERYTWOFRAMES;ge._CreateRenderTargetTexture=(n,e,t,i,r)=>new Gr(n,e,t,i)});var Ri,jl=M(()=>{Gt();lo();di();Ge();Ph();Vt();xr();zi();Ur();to();Wh();Me.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)};Me.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)};sr.prototype.setTextureFromPostProcess=function(n,e){this._engine.setTextureFromPostProcess(this._samplers[n],e,n)};sr.prototype.setTextureFromPostProcessOutput=function(n,e){this._engine.setTextureFromPostProcessOutput(this._samplers[n],e,n)};Ri=class n{static get ForceGLSL(){return Xr.ForceGLSL}static set ForceGLSL(e){Xr.ForceGLSL=e}static RegisterShaderCodeProcessing(e,t){Xr.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,p=5,_,g){var E,S,R,I,C,y,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 Ui(2),this._textureCache=[],this._currentRenderTextureInd=0,this._scaleRatio=new Fe(1,1),this._texelSize=Fe.Zero(),this.onActivateObservable=new ie,this.onSizeChangedObservable=new ie,this.onApplyObservable=new ie,this.onBeforeRenderObservable=new ie,this.onAfterRenderObservable=new ie,this.onDisposeObservable=new ie;let v=1,x=null,T;if(i&&!Array.isArray(i)){let W=i;i=(E=W.uniforms)!=null?E:null,r=(S=W.samplers)!=null?S:null,v=(R=W.size)!=null?R:1,a=(I=W.camera)!=null?I:null,o=(C=W.samplingMode)!=null?C:1,l=W.engine,c=W.reusable,f=Array.isArray(W.defines)?W.defines.join(` +`):(y=W.defines)!=null?y: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,p=(N=W.textureFormat)!=null?N:5,_=(w=W.shaderLanguage)!=null?w:0,x=(U=W.uniformBuffers)!=null?U:null,g=W.extraInitializations,T=W.effectWrapper}else s&&(typeof s=="number"?v=s:v={width:s.width,height:s.height});if(this._useExistingThinPostProcess=!!T,this._effectWrapper=T!=null?T:new Xr({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:_,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=p,this._shaderLanguage=_||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(()=>(xC(),WB))])):t.push(Promise.all([Promise.resolve().then(()=>(TC(),GB))]))}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 Ui(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||_.call(p,`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=it.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=En(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 it.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([rm()],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);Ft("BABYLON.PostProcess",Ri)});var YB={};tt(YB,{passPixelShaderWGSL:()=>ase});var LC,XB,ase,KB=M(()=>{G();LC="passPixelShader",XB=`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);}`;T.ShadersStoreWGSL[IC]||(T.ShadersStoreWGSL[IC]=NU);zne={name:IC,shader:NU}});var BU={};tt(BU,{passCubePixelShaderWGSL:()=>Xne});var MC,UU,Xne,VU=M(()=>{G();MC="passCubePixelShader",UU=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_cube; +fn main(input: FragmentInputs)->FragmentOutputs {fragmentOutputs.color=textureSample(textureSampler,textureSamplerSampler,input.vUV);}`;A.ShadersStoreWGSL[LC]||(A.ShadersStoreWGSL[LC]=XB);ase={name:LC,shader:XB}});var qB={};tt(qB,{passCubePixelShaderWGSL:()=>ose});var DC,jB,ose,ZB=M(()=>{G();DC="passCubePixelShader",jB=`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; @@ -4187,7 +4187,7 @@ fragmentOutputs.color=textureSample(textureSampler,textureSamplerSampler,vec3f(u #ifdef NEGATIVEZ fragmentOutputs.color=textureSample(textureSampler,textureSamplerSampler,vec3f(uv,-1.001)); #endif -}`;T.ShadersStoreWGSL[MC]||(T.ShadersStoreWGSL[MC]=UU);Xne={name:MC,shader:UU}});var kU={};tt(kU,{passCubePixelShader:()=>Yne});var CC,GU,Yne,WU=M(()=>{G();CC="passCubePixelShader",GU=`varying vec2 vUV;uniform samplerCube textureSampler; +}`;A.ShadersStoreWGSL[DC]||(A.ShadersStoreWGSL[DC]=jB);ose={name:DC,shader:jB}});var $B={};tt($B,{passCubePixelShader:()=>lse});var OC,QB,lse,JB=M(()=>{G();OC="passCubePixelShader",QB=`varying vec2 vUV;uniform samplerCube textureSampler; #define CUSTOM_FRAGMENT_DEFINITIONS void main(void) {vec2 uv=vUV*2.0-1.0; @@ -4209,8 +4209,8 @@ gl_FragColor=textureCube(textureSampler,vec3(uv,1.001)); #ifdef NEGATIVEZ gl_FragColor=textureCube(textureSampler,vec3(uv,-1.001)); #endif -}`;T.ShadersStore[CC]||(T.ShadersStore[CC]=GU);Yne={name:CC,shader:GU}});var ql,ig,yC=M(()=>{Wh();Oi();ql=class n extends Xr{_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.all([Promise.resolve().then(()=>(FU(),wU))]))):t.push(Promise.all([Promise.resolve().then(()=>(AC(),TC))])),super._gatherImports(e,t)}constructor(e,t=null,i){let r={name:e,engine:t||Oe.LastCreatedEngine,useShaderStore:!0,useAsPostProcess:!0,fragmentShader:n.FragmentUrl,...i};r.engine||(r.engine=Oe.LastCreatedEngine),super(r)}};ql.FragmentUrl="pass";ig=class n extends Xr{_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.all([Promise.resolve().then(()=>(VU(),BU))]))):t.push(Promise.all([Promise.resolve().then(()=>(WU(),kU))])),super._gatherImports(e,t)}constructor(e,t=null,i){super({...i,name:e,engine:t||Oe.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}}};ig.FragmentUrl="passCube"});var Hh,PC,LC=M(()=>{Gt();jl();Br();zi();Ar();yC();Vt();Hh=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,ql.FragmentUrl,{effectWrapper:typeof t=="number"||!t.effectWrapper?new ql(e,s,c):void 0,...c})}static _Parse(e,t,i,r){return it.Parse(()=>new n(e.name,e.options,t,e.renderTargetSamplingMode,e._engine,e.reusable),e,i,r)}};Ft("BABYLON.PassPostProcess",Hh);PC=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,ql.FragmentUrl,{effectWrapper:typeof t=="number"||!t.effectWrapper?new ig(e,s,c):void 0,...c})}static _Parse(e,t,i,r){return it.Parse(()=>new n(e.name,e.options,t,e.renderTargetSamplingMode,e._engine,e.reusable),e,i,r)}};P([F()],PC.prototype,"face",null);Me._RescalePostProcessFactory=n=>new Hh("rescale",1,null,2,n,!1,0)});function zU(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 zh(n){vA||(vA=new Float32Array(1),HU=new Int32Array(vA.buffer)),vA[0]=n;let e=HU[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 Zl(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 vA,HU,DC=M(()=>{Vr();_f();LC();jl();Dn()});function NC(n){return n.split(" ").filter(e=>e!=="").map(e=>parseFloat(e))}function OC(n,e,t){for(;t.length!==e;){let i=NC(n.lines[n.index++]);t.push(...i)}}function Kne(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=NC(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=NC(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)&&(p%=u*2,p>u&&(p=u*2-p)),h[_+p*l]=Kne(r,_,p)}return{width:c/2,height:1,data:h}}var YU=M(()=>{Dn()});var KU={};tt(KU,{_IESTextureLoader:()=>wC});var wC,jU=M(()=>{YU();wC=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=XU(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 qU={};tt(qU,{_DDSTextureLoader:()=>FC});var FC,ZU=M(()=>{X_();UC();FC=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),lo.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=lo.GetDDSInfo(c),t.width=a.width,t.height=a.height,i&&(a.sphericalPolynomial=new $o),o=(a.isRGB||a.isLuminance||a.mipmapCount>1)&&t.generateMipMaps,s._unpackFlipY(a.isCompressed),lo.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=lo.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,()=>{lo.UploadDDSLevels(t.getEngine(),t,e,r,s,1)})}}});function QU(){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 p=0;p>2&3],h[x++]=f[v>>4&3],h[x]=f[v>>6&3]}}return h}}async function $U(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?pe.GetBabylonScriptURL(t):void 0,wasmBinary:e},[e])})}var JU=M(()=>{Mi()});var Ql,gf,jne,BC,Xh,qne,Zne,Qne,SA,EA,TA,VC,eB=M(()=>{Mi();Vr();Ts();JU();(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"})(Ql||(Ql={}));gf={JSModuleURL:`${pe._DefaultCdnUrl}/basisTranscoder/1/basis_transcoder.js`,WasmModuleURL:`${pe._DefaultCdnUrl}/basisTranscoder/1/basis_transcoder.wasm`},jne=(n,e)=>{let t;switch(n){case Ql.cTFETC1:t=36196;break;case Ql.cTFBC1:t=33776;break;case Ql.cTFBC4:t=33779;break;case Ql.cTFASTC_4x4:t=37808;break;case Ql.cTFETC2:t=37496;break;case Ql.cTFBC7:t=36492;break}if(t===void 0)throw"The chosen Basis transcoder format is not currently supported";return t},BC=null,Xh=null,qne=0,Zne=!1,Qne=async()=>(BC||(BC=new Promise((n,e)=>{Xh?n(Xh):pe.LoadFileAsync(pe.GetBabylonScriptURL(gf.WasmModuleURL)).then(t=>{if(typeof URL!="function")return e("Basis transcoder requires an environment with a URL constructor");let i=URL.createObjectURL(new Blob([`(${QU})()`],{type:"application/javascript"}));Xh=new Worker(i),$U(Xh,t,gf.JSModuleURL).then(n,e)}).catch(e)})),await BC),SA=async(n,e)=>{let t=n instanceof ArrayBuffer?new Uint8Array(n):n;return await new Promise((i,r)=>{Qne().then(()=>{let s=qne++,a=l=>{l.data.action==="transcode"&&l.data.id===s&&(Xh.removeEventListener("message",a),l.data.success?i(l.data):r("Transcode is not supported on this device"))};Xh.addEventListener("message",a);let o=new Uint8Array(t.byteLength);o.set(new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),Xh.postMessage({action:"transcode",id:s,imageData:o,config:e,ignoreSupportedFormats:Zne},[o.buffer])},s=>{r(s)})})},EA=(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)},TA=(n,e)=>{let t=n.getEngine();for(let i=0;i{t._releaseTexture(s),EA(n,t)})}else n._invertVScale=!n.invertY,n.width=r.width+3&-4,n.height=r.height+3&-4,n.samplingMode=2,EA(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=VC.GetInternalFormatFromBasisFormat(e.format,t);n.format=s,EA(n,t);let a=e.fileInfo.images[i].levels;for(let o=0;oGC});var GC,iB=M(()=>{eB();Mi();GC=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}};SA(e,o).then(l=>{let c=l.fileInfo.images[0].levels.length>1&&t.generateMipMaps;TA(t,l),t.getEngine()._setCubeMapTextureParams(t,c),t.isReady=!0,t.onLoadedObservable.notifyObservers(t),t.onLoadedObservable.clear(),r&&r()}).catch(l=>{pe.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}};SA(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,()=>{TA(t,a)})}).catch(a=>{pe.Warn("Failed to transcode Basis file, transcoding may not be supported on this device"),pe.Warn(`Failed to transcode Basis file: ${a}`),i(0,0,!1,!1,()=>{},!0)})}}});var rg,rB=M(()=>{rg=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 AA(n){n.push("vCameraColorCurveNeutral","vCameraColorCurvePositive","vCameraColorCurveNegative")}var kC=M(()=>{});var rn,nB=M(()=>{Gt();Vt();zt();Ar();kC();rn=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 it.Clone(()=>new n,this)}serialize(){return it.Serialize(this)}static Parse(e){return it.Parse(()=>new n,e,null,null)}};rn.PrepareUniforms=AA;P([F()],rn.prototype,"_globalHue",void 0);P([F()],rn.prototype,"_globalDensity",void 0);P([F()],rn.prototype,"_globalSaturation",void 0);P([F()],rn.prototype,"_globalExposure",void 0);P([F()],rn.prototype,"_highlightsHue",void 0);P([F()],rn.prototype,"_highlightsDensity",void 0);P([F()],rn.prototype,"_highlightsSaturation",void 0);P([F()],rn.prototype,"_highlightsExposure",void 0);P([F()],rn.prototype,"_midtonesHue",void 0);P([F()],rn.prototype,"_midtonesDensity",void 0);P([F()],rn.prototype,"_midtonesSaturation",void 0);P([F()],rn.prototype,"_midtonesExposure",void 0);it._ColorCurvesParser=rn.Parse});function sB(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&&AA(n),e.DITHER&&n.push("ditherIntensity")}function aB(n,e){e.COLORGRADING&&n.push("txColorTransform")}var oB=M(()=>{kC()});var kt,ng=M(()=>{Gt();Vt();di();zt();nB();eo();Ar();oB();zi();kt=class n{constructor(){this.colorCurves=new rn,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 ie}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&&rn.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=k_(o,l,this.vignetteStretch),a=k_(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 it.Clone(()=>new n,this)}serialize(){return it.Serialize(this)}static Parse(e){let t=it.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}};kt.TONEMAPPING_STANDARD=0;kt.TONEMAPPING_ACES=1;kt.TONEMAPPING_KHR_PBR_NEUTRAL=2;kt.PrepareUniforms=sB;kt.PrepareSamplers=aB;kt._VIGNETTEMODE_MULTIPLY=0;kt._VIGNETTEMODE_OPAQUE=1;P([rU()],kt.prototype,"colorCurves",void 0);P([F()],kt.prototype,"_colorCurvesEnabled",void 0);P([Bt("colorGradingTexture")],kt.prototype,"_colorGradingTexture",void 0);P([F()],kt.prototype,"_colorGradingEnabled",void 0);P([F()],kt.prototype,"_colorGradingWithGreenDepth",void 0);P([F()],kt.prototype,"_colorGradingBGR",void 0);P([F()],kt.prototype,"_exposure",void 0);P([F()],kt.prototype,"_toneMappingEnabled",void 0);P([F()],kt.prototype,"_toneMappingType",void 0);P([F()],kt.prototype,"_contrast",void 0);P([F()],kt.prototype,"vignetteStretch",void 0);P([F()],kt.prototype,"vignetteCenterX",void 0);P([F()],kt.prototype,"vignetteCenterY",void 0);P([F()],kt.prototype,"vignetteWeight",void 0);P([rm()],kt.prototype,"vignetteColor",void 0);P([F()],kt.prototype,"vignetteCameraFov",void 0);P([F()],kt.prototype,"_vignetteBlendMode",void 0);P([F()],kt.prototype,"_vignetteEnabled",void 0);P([F()],kt.prototype,"_ditheringEnabled",void 0);P([F()],kt.prototype,"_ditheringIntensity",void 0);P([F()],kt.prototype,"_skipFinalColorClamp",void 0);P([F()],kt.prototype,"_applyByPostProcess",void 0);P([F()],kt.prototype,"_isEnabled",void 0);P([F()],kt.prototype,"outputTextureWidth",void 0);P([F()],kt.prototype,"outputTextureHeight",void 0);it._ImageProcessingConfigurationParser=kt.Parse;Ft("BABYLON.ImageProcessingConfiguration",kt)});var Jn,sg=M(()=>{Ge();ki();Jn=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];j.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=Fe.FromArray(i,t[this.faceId*3]*2),s=Fe.FromArray(i,t[this.faceId*3+1]*2),a=Fe.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 Fe(r.x+s.x+a.x,r.y+s.y+a.y)}}});var nn,WC=M(()=>{nn=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 ag(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 hB(n,e,t){return H_(e,ba),ag(n,ba,Ia),H_(Ia,t),t}function xA(n,e,t){if(!Ma.eyeAtCamera)return hB(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 HC(n,e,t,i){return Nh(xA(n,e,i),t,i),i}function dB(n,e,t,i,r){for(let s=0;s{Ph();Ge();nC();mf();Ra=new j,ba=new j,Ia=new j,Ma={getScene:()=>{},eyeAtCamera:!0};og=ur,zC=sr,uB=og.prototype._updateMatrixForUniform,mB=sr.prototype.setMatrix});var et,or,lm=M(()=>{et=class{};et.NAME_EFFECTLAYER="EffectLayer";et.NAME_LAYER="Layer";et.NAME_LENSFLARESYSTEM="LensFlareSystem";et.NAME_BOUNDINGBOXRENDERER="BoundingBoxRenderer";et.NAME_PARTICLESYSTEM="ParticleSystem";et.NAME_GAMEPAD="Gamepad";et.NAME_SIMPLIFICATIONQUEUE="SimplificationQueue";et.NAME_GEOMETRYBUFFERRENDERER="GeometryBufferRenderer";et.NAME_PREPASSRENDERER="PrePassRenderer";et.NAME_DEPTHRENDERER="DepthRenderer";et.NAME_DEPTHPEELINGRENDERER="DepthPeelingRenderer";et.NAME_POSTPROCESSRENDERPIPELINEMANAGER="PostProcessRenderPipelineManager";et.NAME_SPRITE="Sprite";et.NAME_SUBSURFACE="SubSurface";et.NAME_OUTLINERENDERER="Outline";et.NAME_PROCEDURALTEXTURE="ProceduralTexture";et.NAME_SHADOWGENERATOR="ShadowGenerator";et.NAME_OCTREE="Octree";et.NAME_PHYSICSENGINE="PhysicsEngine";et.NAME_AUDIO="Audio";et.NAME_FLUIDRENDERER="FluidRenderer";et.NAME_IBLCDFGENERATOR="iblCDFGenerator";et.NAME_CLUSTEREDLIGHTING="ClusteredLighting";et.STEP_ISREADYFORMESH_EFFECTLAYER=0;et.STEP_ISREADYFORMESH_DEPTHRENDERER=1;et.STEP_BEFOREEVALUATEACTIVEMESH_BOUNDINGBOXRENDERER=0;et.STEP_EVALUATESUBMESH_BOUNDINGBOXRENDERER=0;et.STEP_PREACTIVEMESH_BOUNDINGBOXRENDERER=0;et.STEP_CAMERADRAWRENDERTARGET_EFFECTLAYER=1;et.STEP_BEFORECAMERADRAW_PREPASS=0;et.STEP_BEFORECAMERADRAW_EFFECTLAYER=1;et.STEP_BEFORECAMERADRAW_LAYER=2;et.STEP_BEFORERENDERTARGETDRAW_PREPASS=0;et.STEP_BEFORERENDERTARGETDRAW_LAYER=1;et.STEP_BEFORERENDERINGMESH_PREPASS=0;et.STEP_BEFORERENDERINGMESH_OUTLINE=1;et.STEP_AFTERRENDERINGMESH_PREPASS=0;et.STEP_AFTERRENDERINGMESH_OUTLINE=1;et.STEP_AFTERRENDERINGGROUPDRAW_EFFECTLAYER_DRAW=0;et.STEP_AFTERRENDERINGGROUPDRAW_BOUNDINGBOXRENDERER=1;et.STEP_BEFORECAMERAUPDATE_SIMPLIFICATIONQUEUE=0;et.STEP_BEFORECLEAR_PROCEDURALTEXTURE=0;et.STEP_BEFORECLEAR_PREPASS=1;et.STEP_BEFORERENDERTARGETCLEAR_PREPASS=0;et.STEP_AFTERRENDERTARGETDRAW_PREPASS=0;et.STEP_AFTERRENDERTARGETDRAW_LAYER=1;et.STEP_AFTERCAMERADRAW_PREPASS=0;et.STEP_AFTERCAMERADRAW_EFFECTLAYER=1;et.STEP_AFTERCAMERADRAW_LENSFLARESYSTEM=2;et.STEP_AFTERCAMERADRAW_EFFECTLAYER_DRAW=3;et.STEP_AFTERCAMERADRAW_LAYER=4;et.STEP_AFTERCAMERADRAW_FLUIDRENDERER=5;et.STEP_AFTERCAMERAPOSTPROCESS_LAYER=0;et.STEP_AFTERRENDERTARGETPOSTPROCESS_LAYER=0;et.STEP_AFTERRENDER_AUDIO=0;et.STEP_GATHERRENDERTARGETS_DEPTHRENDERER=0;et.STEP_GATHERRENDERTARGETS_GEOMETRYBUFFERRENDERER=1;et.STEP_GATHERRENDERTARGETS_SHADOWGENERATOR=2;et.STEP_GATHERRENDERTARGETS_POSTPROCESSRENDERPIPELINEMANAGER=3;et.STEP_GATHERACTIVECAMERARENDERTARGETS_DEPTHRENDERER=0;et.STEP_GATHERACTIVECAMERARENDERTARGETS_FLUIDRENDERER=1;et.STEP_GATHERACTIVECAMERARENDERTARGETS_CLUSTEREDLIGHTING=2;et.STEP_POINTERMOVE_SPRITE=0;et.STEP_POINTERDOWN_SPRITE=0;et.STEP_POINTERUP_SPRITE=0;or=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();st=class{};st.POINTERDOWN=1;st.POINTERUP=2;st.POINTERMOVE=4;st.POINTERWHEEL=8;st.POINTERPICK=16;st.POINTERTAP=32;st.POINTERDOUBLETAP=64;RA=class{constructor(e,t){this.type=e,this.event=t}},bA=class extends RA{constructor(e,t,i,r){super(e,t),this.ray=null,this.originalPickingInfo=null,this.skipOnPointerObservable=!1,this.localPosition=new Fe(i,r)}},Ca=class extends RA{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 $l,gB=M(()=>{$l=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}};$l.Triggers={}});var fo,cm,cg,IA=M(()=>{fo=class{};fo.KEYDOWN=1;fo.KEYUP=2;cm=class{constructor(e,t){this.type=e,this.event=t}},cg=class extends cm{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 $e,vt,vB,EB,SB,TB,AB,Yh=M(()=>{(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"})($e||($e={}));(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"})(vt||(vt={}));(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"})(vB||(vB={}));(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"})(SB||(SB={}));(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"})(TB||(TB={}));(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"})(AB||(AB={}))});var xB,ho,MA=M(()=>{(function(n){n[n.PointerMove=0]="PointerMove",n[n.PointerDown=1]="PointerDown",n[n.PointerUp=2]="PointerUp"})(xB||(xB={}));ho=class{};ho.DOM_DELTA_PIXEL=0;ho.DOM_DELTA_LINE=1;ho.DOM_DELTA_PAGE=2});var uo,YC=M(()=>{MA();Yh();uo=class{static CreateDeviceEvent(e,t,i,r,s,a,o){switch(e){case $e.Keyboard:return this._CreateKeyboardEvent(i,r,s,a);case $e.Mouse:if(i===vt.MouseWheelX||i===vt.MouseWheelY||i===vt.MouseWheelZ)return this._CreateWheelEvent(e,t,i,r,s,a);case $e.Touch:return this._CreatePointerEvent(e,t,i,r,s,a,o);default:throw`Unable to generate event for device ${$e[e]}`}}static _CreatePointerEvent(e,t,i,r,s,a,o){let l=this._CreateMouseEvent(e,t,i,r,s,a);e===$e.Mouse?(l.deviceType=$e.Mouse,l.pointerId=1,l.pointerType="mouse"):(l.deviceType=$e.Touch,l.pointerId=o!=null?o:t,l.pointerType="touch");let c=0;return c+=s.pollInput(e,t,vt.LeftClick),c+=s.pollInput(e,t,vt.RightClick)*2,c+=s.pollInput(e,t,vt.MiddleClick)*4,l.buttons=c,i===vt.Move?l.type="pointermove":i>=vt.LeftClick&&i<=vt.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=ho.DOM_DELTA_PIXEL,o.deltaX=0,o.deltaY=0,o.deltaZ=0,i){case vt.MouseWheelX:o.deltaX=r;break;case vt.MouseWheelY:o.deltaY=r;break;case vt.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,vt.Horizontal),c=s.pollInput(e,t,vt.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=$e.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($e.Keyboard),r=i&&t.pollInput($e.Keyboard,0,18)===1,s=i&&t.pollInput($e.Keyboard,0,17)===1,a=i&&(t.pollInput($e.Keyboard,0,91)===1||t.pollInput($e.Keyboard,0,92)===1||t.pollInput($e.Keyboard,0,93)===1),o=i&&t.pollInput($e.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 CA,RB=M(()=>{YC();Yh();CA=class{constructor(e,t,i){this._nativeInput=_native.DeviceInputSystem?new _native.DeviceInputSystem(e,t,(r,s,a,o)=>{let l=uo.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===$e.Mouse||e===$e.Touch}dispose(){this._nativeInput.dispose()}_createDummyNativeInput(){return{pollInput:()=>0,isDeviceAvailable:()=>!1,dispose:()=>{}}}}});var bB,IB,yA,MB=M(()=>{Ea();Mi();YC();Yh();bB=255,IB=Object.keys(vt).length/2,yA=class{constructor(e,t,i,r){this._inputs=[],this._keyboardActive=!1,this._pointerActive=!1,this._usingSafari=pe.IsSafari(),this._usingMacOs=Fl()&&/(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=Fl()&&navigator.userAgent&&navigator.userAgent.indexOf("Firefox")!==-1,this._isUsingChromium=Fl()&&navigator.userAgent&&navigator.userAgent.indexOf("Chrome")!==-1,this._maxTouchPoints=0,this._pointerInputClearObserver=null,this._gamepadConnectedEvent=s=>{},this._gamepadDisconnectedEvent=s=>{},this._eventPrefix=pe.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 ${$e[e]}`;e>=$e.DualShock&&e<=$e.DualSense&&this._updateDevice(e,t,i);let s=r[i];if(s===void 0)throw`Unable to find input ${i} for device ${$e[e]} in slot ${t}`;return i===vt.Move&&pe.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($e.Keyboard,0,bB));let t=this._inputs[$e.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($e.Keyboard,0,i)}},this._keyboardUpEvent=e=>{this._keyboardActive||(this._keyboardActive=!0,this._registerDevice($e.Keyboard,0,bB));let t=this._inputs[$e.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=uo.CreateDeviceEvent($e.Keyboard,0,r,0,this,this._elementToAttachTo);t[r]=0,this._onInputChanged($e.Keyboard,0,s)}this._metaKeys.splice(0,this._metaKeys.length)}this._onInputChanged($e.Keyboard,0,i)}},this._keyboardBlurEvent=()=>{if(this._keyboardActive){let e=this._inputs[$e.Keyboard][0];for(let t=0;t{let r=this._getPointerType(i),s=r===$e.Mouse?0:this._activeTouchIds.indexOf(i.pointerId);if(r===$e.Touch&&s===-1){let o=this._activeTouchIds.indexOf(-1);if(o>=0)s=o,this._activeTouchIds[o]=i.pointerId,this._onDeviceConnected(r,s);else{pe.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=vt.Move,a[vt.Horizontal]=i.clientX,a[vt.Vertical]=i.clientY,r===$e.Touch&&a[vt.LeftClick]===0&&(a[vt.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===$e.Mouse?0:i.pointerId;if(r===$e.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{pe.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===$e.Touch&&this._onDeviceConnected(r,s):this._addPointerDevice(r,s,i.clientX,i.clientY);let a=this._inputs[r][s];if(a){let o=a[vt.Horizontal],l=a[vt.Vertical];if(r===$e.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[vt.Horizontal]=i.clientX,a[vt.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=vt.Move,this._onInputChanged(r,s,c))}},this._pointerUpEvent=i=>{var c,f,h,d,u;let r=this._getPointerType(i),s=r===$e.Mouse?0:this._activeTouchIds.indexOf(i.pointerId);if(r===$e.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[vt.Horizontal],p=a[vt.Vertical];a[vt.Horizontal]=i.clientX,a[vt.Vertical]=i.clientY,a[o+2]=0;let _=i;i.pointerId===void 0&&(i.pointerId=this._mouseId),(m!==i.clientX||p!==i.clientY)&&(_.inputIndex=vt.Move,this._onInputChanged(r,s,_)),_.inputIndex=o+2,r===$e.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,_),r===$e.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[$e.Touch][r][vt.LeftClick]=0;let s=uo.CreateDeviceEvent($e.Touch,r,vt.LeftClick,0,this,this._elementToAttachTo,i);this._onInputChanged($e.Touch,r,s),this._activeTouchIds[r]=-1,this._onDeviceDisconnected($e.Touch,r)},this._pointerCancelEvent=i=>{var r,s;if(i.pointerType==="mouse"){let a=this._inputs[$e.Mouse][0];this._mouseId>=0&&((s=(r=this._elementToAttachTo).hasPointerCapture)!=null&&s.call(r,this._mouseId))&&this._elementToAttachTo.releasePointerCapture(this._mouseId);for(let o=vt.LeftClick;o<=vt.BrowserForward;o++)if(a[o]===1){a[o]=0;let l=uo.CreateDeviceEvent($e.Mouse,0,o,0,this,this._elementToAttachTo);this._onInputChanged($e.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($e.Mouse)){let l=this._inputs[$e.Mouse][0];this._mouseId>=0&&((r=(i=this._elementToAttachTo).hasPointerCapture)!=null&&r.call(i,this._mouseId))&&this._elementToAttachTo.releasePointerCapture(this._mouseId);for(let c=vt.LeftClick;c<=vt.BrowserForward;c++)if(l[c]===1){l[c]=0;let f=uo.CreateDeviceEvent($e.Mouse,0,c,0,this,this._elementToAttachTo);this._onInputChanged($e.Mouse,0,f)}}if(this.isDeviceAvailable($e.Touch)){let l=this._inputs[$e.Touch];for(let c=0;c{let r=$e.Mouse,s=0;this._inputs[r]||(this._inputs[r]=[]),this._inputs[r][s]||(this._pointerActive=!0,this._registerDevice(r,s,IB));let a=this._inputs[r][s];if(a){a[vt.MouseWheelX]=i.deltaX||0,a[vt.MouseWheelY]=i.deltaY||i.wheelDelta||0,a[vt.MouseWheelZ]=i.deltaZ||0;let o=i;i.pointerId===void 0&&(i.pointerId=this._mouseId),a[vt.MouseWheelX]!==0&&(o.inputIndex=vt.MouseWheelX,this._onInputChanged(r,s,o)),a[vt.MouseWheelY]!==0&&(o.inputIndex=vt.MouseWheelY,this._onInputChanged(r,s,o)),a[vt.MouseWheelZ]!==0&&(o.inputIndex=vt.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($e.Mouse)){let i=this._inputs[$e.Mouse][0];i[vt.MouseWheelX]=0,i[vt.MouseWheelY]=0,i[vt.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?$e.DualSense:$e.DualShock:e.indexOf("Xbox One")!==-1||e.search("Xbox 360")!==-1||e.search("xinput")!==-1?$e.Xbox:e.indexOf("057e")!==-1?$e.Switch:$e.Generic}_getPointerType(e){let t=$e.Mouse;return(e.pointerType==="touch"||e.pointerType==="pen"||e.touches)&&(t=$e.Touch),t}}});var fg,CB=M(()=>{di();fg=class{constructor(e,t,i=0){this.deviceType=t,this.deviceSlot=i,this.onInputChangedObservable=new ie,this._deviceInputSystem=e}getInput(e){return this._deviceInputSystem.pollInput(this.deviceType,this.deviceSlot,e)}}});var PA,yB=M(()=>{Yh();RB();MB();CB();PA=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($e).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 fg(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 CA(i,r,s):this._deviceInputSystem=new yA(e,i,r,s)}dispose(){this._deviceInputSystem.dispose()}}});var LA,PB=M(()=>{Yh();di();yB();LA=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($e).length/2;this._devices=new Array(t),this._firstDevice=new Array(t),this._engine=e,this._engine._deviceSourceManager||(this._engine._deviceSourceManager=new PA(e)),this._engine._deviceSourceManager._refCount++,this.onDeviceConnectedObservable=new ie(i=>{for(let r of this._devices)if(r)for(let s of r)s&&this.onDeviceConnectedObservable.notifyObserver(i,s)}),this.onDeviceDisconnectedObservable=new ie,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 $e.Keyboard:case $e.Mouse:this._firstDevice[e]=0;break;case $e.Touch:case $e.DualSense:case $e.DualShock:case $e.Xbox:case $e.Switch:case $e.Generic:{delete this._firstDevice[e];let t=this._devices[e];if(t){for(let i=0;i{Kh=class{};Kh._IsPickingAvailable=!1});var DA,On,LB=M(()=>{co();gB();sg();Ge();WC();IA();Yh();PB();Oi();KC();DA=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}},On=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 Fe(0,0),this._previousStartingPointerPosition=new Fe(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||Oe.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 Fe(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>=vt.MouseWheelX&&t.inputIndex<=vt.MouseWheelZ?st.POINTERWHEEL:st.POINTERMOVE;i.onPointerMove&&(e=e||this._pickMove(t),i.onPointerMove(t,e,a));let o;e?(o=new Ca(a,t,e),this._setRayOnPointerInfo(e,t)):(o=new Ca(a,t,null,this),this._movePointerInfo=o),i.onPointerObservable.hasObservers()&&i.onPointerObservable.notifyObservers(o,a)}_setRayOnPointerInfo(e,t){let i=this._scene;e&&Kh._IsPickingAvailable&&(e.ray||(e.ray=i.createPickingRay(t.offsetX,t.offsetY,j.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 bA(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=vt.Move,!this._checkPrePointerObservable(e,i,st.POINTERMOVE)&&this._processPointerMove(e,i)}simulatePointerDown(e,t){let i=new PointerEvent("pointerdown",t);i.inputIndex=i.button+2,!this._checkPrePointerObservable(e,i,st.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 nn(e.pickedMesh,i.pointerX,i.pointerY,e.pickedMesh,t,e)),t.button){case 0:a.processTrigger(2,new nn(e.pickedMesh,i.pointerX,i.pointerY,e.pickedMesh,t,e));break;case 1:a.processTrigger(4,new nn(e.pickedMesh,i.pointerX,i.pointerY,e.pickedMesh,t,e));break;case 2:a.processTrigger(3,new nn(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,nn.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=st.POINTERDOWN;e?(i.onPointerDown&&i.onPointerDown(t,e,s),r=new Ca(s,t,e),this._setRayOnPointerInfo(e,t)):r=new Ca(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=vt.Move;let s=new DA;i?s.doubleClick=!0:s.singleClick=!0,!this._checkPrePointerObservable(e,r,st.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=st.POINTERPICK,o=new Ca(a,t,e);this._setRayOnPointerInfo(e,t),r.onPointerObservable.notifyObservers(o,a)}let s=e.pickedMesh._getActionManagerForTrigger();if(s&&!i.ignore){s.processTrigger(7,nn.CreateNew(e.pickedMesh,t,e)),!i.hasSwiped&&i.singleClick&&s.processTrigger(1,nn.CreateNew(e.pickedMesh,t,e));let a=e.pickedMesh._getActionManagerForTrigger(6);i.doubleClick&&a&&a.processTrigger(6,nn.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,nn.CreateNew(this._pickedDownMesh,t))}if(!i.ignore){let s=new Ca(st.POINTERUP,t,e);if(this._setRayOnPointerInfo(e,t),r.onPointerObservable.notifyObservers(s,st.POINTERUP),r.onPointerUp&&r.onPointerUp(t,e,st.POINTERUP),!i.hasSwiped&&!this._skipPointerTap&&!this._isMultiTouchGesture){let a=0;if(i.singleClick?a=st.POINTERTAP:i.doubleClick&&(a=st.POINTERDOUBLETAP),a){let o=new Ca(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 LA(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=st.POINTERTAP,d=new Ca(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 DA;this._currentPickResult=null;let d=null,u=o.hasSpecificMask(st.POINTERPICK)||l.hasSpecificMask(st.POINTERPICK)||o.hasSpecificMask(st.POINTERTAP)||l.hasSpecificMask(st.POINTERTAP)||o.hasSpecificMask(st.POINTERDOUBLETAP)||l.hasSpecificMask(st.POINTERDOUBLETAP);!u&&$l&&(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(st.POINTERDOUBLETAP)&&!l.hasSpecificMask(st.POINTERDOUBLETAP),v&&!$l.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(st.POINTERDOUBLETAP)||l.hasSpecificMask(st.POINTERDOUBLETAP);!x&&$l.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>=vt.MouseWheelX&&o.inputIndex<=vt.MouseWheelZ?st.POINTERWHEEL:st.POINTERMOVE)||!s.cameraToUseForPointers&&!s.activeCamera)return;if(s.skipPointerMovePicking){this._processPointerMove(new Jn,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 Jn: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,st.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(st.POINTERTAP)&&this._checkPrePointerObservable(null,o,st.POINTERTAP)&&(this._skipPointerTap=!0),c.doubleClick&&s.onPrePointerObservable.hasSpecificMask(st.POINTERDOUBLETAP)&&this._checkPrePointerObservable(null,o,st.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&&($l&&$l.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=fo.KEYDOWN;if(s.onPreKeyboardObservable.hasObservers()){let c=new cg(l,o);if(s.onPreKeyboardObservable.notifyObservers(c,l),c.skipOnKeyboardObservable)return}if(s.onKeyboardObservable.hasObservers()){let c=new cm(l,o);s.onKeyboardObservable.notifyObservers(c,l)}s.actionManager&&s.actionManager.processTrigger(14,nn.CreateNewFromScene(s,o))},this._onKeyUp=o=>{let l=fo.KEYUP;if(s.onPreKeyboardObservable.hasObservers()){let c=new cg(l,o);if(s.onPreKeyboardObservable.notifyObservers(c,l),c.skipOnKeyboardObservable)return}if(s.onKeyboardObservable.hasObservers()){let c=new cm(l,o);s.onKeyboardObservable.notifyObservers(c,l)}s.actionManager&&s.actionManager.processTrigger(15,nn.CreateNewFromScene(s,o))},this._deviceSourceManager.onDeviceConnectedObservable.add(o=>{o.deviceType===$e.Mouse?o.onInputChangedObservable.add(l=>{this._originMouseEvent=l,l.inputIndex===vt.LeftClick||l.inputIndex===vt.MiddleClick||l.inputIndex===vt.RightClick||l.inputIndex===vt.BrowserBack||l.inputIndex===vt.BrowserForward?t&&o.getInput(l.inputIndex)===1?this._onPointerDown(l):e&&o.getInput(l.inputIndex)===0&&this._onPointerUp(l):i&&(l.inputIndex===vt.Move?this._onPointerMove(l):(l.inputIndex===vt.MouseWheelX||l.inputIndex===vt.MouseWheelY||l.inputIndex===vt.MouseWheelZ)&&this._onPointerMove(l))}):o.deviceType===$e.Touch?o.onInputChangedObservable.add(l=>{l.inputIndex===vt.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===vt.Move&&this._onPointerMove(l)}):o.deviceType===$e.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 nn(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 nn(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]}};On.DragMovementThreshold=10;On.LongPressDelay=500;On.DoubleClickDelay=300;On.ExclusiveDoubleClickMode=!1});var il,jC=M(()=>{Ul();il=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=_r.Now)}endMonitoring(e=!0){if(!n.Enabled)return;e&&this.fetchNewFrame();let t=_r.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=_r.Now;e-this._lastSecTime>1e3&&(this._lastSecAverage=this._lastSecAccumulated/this._lastSecValueCount,this._lastSecTime=e,this._lastSecAccumulated=0,this._lastSecValueCount=0)}};il.Enabled=!0});var Jl,OA=M(()=>{Jl=class{static get UniqueId(){let e=this._UniqueIdCounter;return this._UniqueIdCounter++,e}};Jl._UniqueIdCounter=1});var NA,DB=M(()=>{NA=class{constructor(){this.pointerDownFastCheck=!1,this.pointerUpFastCheck=!1,this.pointerMoveFastCheck=!1,this.skipPointerMovePicking=!1,this.skipPointerDownPicking=!1,this.skipPointerUpPicking=!1}}});var $ne,Jne,OB,Jt,bs=M(()=>{Mi();Ul();di();oo();rB();df();Ge();ng();mf();sg();WC();uA();lg();pA();lm();Ea();Oi();hn();LB();jC();zt();eA();OA();zl();J_();Zo();DB();Pt();zi();jo();$ne=new Ii,Jne=new Ii;(function(n){n[n.BackwardCompatible=0]="BackwardCompatible",n[n.Intermediate=1]="Intermediate",n[n.Aggressive=2]="Aggressive"})(OB||(OB={}));Jt=class n{static DefaultMaterialFactory(e){throw Ze("StandardMaterial")}static CollisionCoordinatorFactory(){throw Ze("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 On.DragMovementThreshold}static set DragMovementThreshold(e){On.DragMovementThreshold=e}static get LongPressDelay(){return On.LongPressDelay}static set LongPressDelay(e){On.LongPressDelay=e}static get DoubleClickDelay(){return On.DoubleClickDelay}static set DoubleClickDelay(e){On.DoubleClickDelay=e}static get ExclusiveDoubleClickMode(){return On.ExclusiveDoubleClickMode}static set ExclusiveDoubleClickMode(e){On.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=$ne.set(r.x,r.y,r.z,s?-1:1),l=o.subtractFromFloatsToRef(a.x,a.y,a.z,0,Jne);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=$T(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 On(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 ie,this.ambientColor=new ge(0,0,0),this.environmentIntensity=1,this.iblIntensity=1,this._performancePriority=0,this.onScenePerformancePriorityChangedObservable=new ie,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 ie,this._onDisposeObserver=null,this.onBeforeRenderObservable=new ie,this._onBeforeRenderObserver=null,this.onAfterRenderObservable=new ie,this.onAfterRenderCameraObservable=new ie,this._onAfterRenderObserver=null,this.onBeforeAnimationsObservable=new ie,this.onAfterAnimationsObservable=new ie,this.onBeforeDrawPhaseObservable=new ie,this.onAfterDrawPhaseObservable=new ie,this.onReadyObservable=new ie,this.onBeforeCameraRenderObservable=new ie,this._onBeforeCameraRenderObserver=null,this.onAfterCameraRenderObservable=new ie,this._onAfterCameraRenderObserver=null,this.onBeforeActiveMeshesEvaluationObservable=new ie,this.onAfterActiveMeshesEvaluationObservable=new ie,this.onBeforeParticlesRenderingObservable=new ie,this.onAfterParticlesRenderingObservable=new ie,this.onDataLoadedObservable=new ie,this.onNewCameraAddedObservable=new ie,this.onCameraRemovedObservable=new ie,this.onNewLightAddedObservable=new ie,this.onLightRemovedObservable=new ie,this.onNewGeometryAddedObservable=new ie,this.onGeometryRemovedObservable=new ie,this.onNewTransformNodeAddedObservable=new ie,this.onTransformNodeRemovedObservable=new ie,this.onNewMeshAddedObservable=new ie,this.onMeshRemovedObservable=new ie,this.onNewSkeletonAddedObservable=new ie,this.onSkeletonRemovedObservable=new ie,this.onNewParticleSystemAddedObservable=new ie,this.onParticleSystemRemovedObservable=new ie,this.onNewAnimationGroupAddedObservable=new ie,this.onAnimationGroupRemovedObservable=new ie,this.onNewMaterialAddedObservable=new ie,this.onNewMultiMaterialAddedObservable=new ie,this.onMaterialRemovedObservable=new ie,this.onMultiMaterialRemovedObservable=new ie,this.onNewTextureAddedObservable=new ie,this.onTextureRemovedObservable=new ie,this.onNewFrameGraphAddedObservable=new ie,this.onFrameGraphRemovedObservable=new ie,this.onNewObjectRendererAddedObservable=new ie,this.onObjectRendererRemovedObservable=new ie,this.onNewPostProcessAddedObservable=new ie,this.onPostProcessRemovedObservable=new ie,this.onNewEffectLayerAddedObservable=new ie,this.onEffectLayerRemovedObservable=new ie,this.onBeforeRenderTargetsRenderObservable=new ie,this.onAfterRenderTargetsRenderObservable=new ie,this.onBeforeStepObservable=new ie,this.onAfterStepObservable=new ie,this.onActiveCameraChanged=new ie,this.onActiveCamerasChanged=new ie,this.onBeforeRenderingGroupObservable=new ie,this.onAfterRenderingGroupObservable=new ie,this.onMeshImportedObservable=new ie,this.onAnimationFileImportedObservable=new ie,this.onEnvironmentTextureChangedObservable=new ie,this.onMeshUnderPointerUpdatedObservable=new ie,this._registeredForLateAnimationBindings=new ao(256),this._pointerPickingConfiguration=new NA,this.onPrePointerObservable=new ie,this.onPointerObservable=new ie,this.onPreKeyboardObservable=new ie,this.onKeyboardObservable=new ie,this._useRightHandedSystem=!1,this._timeAccumulator=0,this._currentStepId=0,this._currentInternalStep=0,this._fogEnabled=!0,this._fogMode=n.FOGMODE_NONE,this.fogColor=new ge(.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 ao(256),this.proceduralTexturesEnabled=!0,this._totalVertices=new il,this._activeIndices=new il,this._activeParticles=new il,this._activeBones=new il,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 Bi(256),this._processedMaterials=new Bi(256),this._renderTargets=new ao(256),this._materialsRenderTargets=new ao(256),this._activeParticleSystems=new Bi(256),this._activeSkeletons=new ao(32),this._softwareSkinnedMeshes=new ao(32),this._activeAnimatables=new Array,this._transformMatrix=j.Zero(),this.requireLightSorting=!1,this._components=[],this._serializableComponents=[],this._transientComponents=[],this._beforeCameraUpdateStage=or.Create(),this._beforeClearStage=or.Create(),this._beforeRenderTargetClearStage=or.Create(),this._gatherRenderTargetsStage=or.Create(),this._gatherActiveCameraRenderTargetsStage=or.Create(),this._isReadyForMeshStage=or.Create(),this._beforeEvaluateActiveMeshStage=or.Create(),this._evaluateSubMeshStage=or.Create(),this._preActiveMeshStage=or.Create(),this._cameraDrawRenderTargetStage=or.Create(),this._beforeCameraDrawStage=or.Create(),this._beforeRenderTargetDrawStage=or.Create(),this._beforeRenderingGroupDrawStage=or.Create(),this._beforeRenderingMeshStage=or.Create(),this._afterRenderingMeshStage=or.Create(),this._afterRenderingGroupDrawStage=or.Create(),this._afterCameraDrawStage=or.Create(),this._afterCameraPostProcessStage=or.Create(),this._afterRenderTargetDrawStage=or.Create(),this._afterRenderTargetPostProcessStage=or.Create(),this._afterRenderStage=or.Create(),this._pointerMoveStage=or.Create(),this._pointerDownStage=or.Create(),this._pointerUpStage=or.Create(),this._geometriesByUniqueId=null,this._uniqueId=0,this._defaultMeshCandidates={data:[],length:0},this._defaultSubMeshCandidates={data:[],length:0},this.onReadyTimeoutObservable=new ie,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||Oe.LastCreatedEngine,i.virtual?e._virtualScenes.push(this):(Oe._LastCreatedScene=this,e.scenes.push(this)),(e.getCreationOptions().useLargeWorldRendering||t!=null&&t.useFloatingOrigin)&&(_B(),this._floatingOriginScene=this,Ma.getScene=this._getFloatingOriginScene),this._uid=null,this._renderingManager=new Aa(this),Kl&&(this.postProcessManager=new Kl(this)),dr()&&this.attachControl(),this._createUbo(),kt&&(this._imageProcessingConfiguration=new kt),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=_r.Now;else if(this.onReadyTimeoutDuration>0&&_r.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=_r.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 j),this._projectionMatrix.invertToRef(this._inverseProjectionMatrix),this._viewMatrix.multiplyToRef(this._projectionMatrix,this._transformMatrix),this._frustumPlanes?of.GetPlanesToRef(this._transformMatrix,this._frustumPlanes):this._frustumPlanes=of.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 ur(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 Jl.UniqueId}addMesh(e,t=!1){if(!this._blockEntityCollection&&(this.meshes.push(e),e._resyncLightSources(),e.parent||e._addToSceneRootNodes(),pe.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),pe.SetImmediate(()=>{this.onNewCameraAddedObservable.notifyObservers(e)}),e.parent||e._addToSceneRootNodes())}addSkeleton(e){this._blockEntityCollection||(this.skeletons.push(e),pe.SetImmediate(()=>{this.onNewSkeletonAddedObservable.notifyObservers(e)}))}addParticleSystem(e){this._blockEntityCollection||(this.particleSystems.push(e),pe.SetImmediate(()=>{this.onNewParticleSystemAddedObservable.notifyObservers(e)}))}addAnimation(e){this._blockEntityCollection||this.animations.push(e)}addAnimationGroup(e){this._blockEntityCollection||(this.animationGroups.push(e),pe.SetImmediate(()=>{this.onNewAnimationGroupAddedObservable.notifyObservers(e)}))}addMultiMaterial(e){this._blockEntityCollection||(this.multiMaterials.push(e),pe.SetImmediate(()=>{this.onNewMultiMaterialAddedObservable.notifyObservers(e)}))}addMaterial(e){this._blockEntityCollection||e.getScene()===this&&e._indexInSceneMaterialArray!==-1||(e._indexInSceneMaterialArray=this.materials.length,this.materials.push(e),pe.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),pe.SetImmediate(()=>{this.onNewFrameGraphAddedObservable.notifyObservers(e)})}addObjectRenderer(e){this.objectRenderers.push(e),pe.SetImmediate(()=>{this.onNewObjectRendererAddedObservable.notifyObservers(e)})}addPostProcess(e){this._blockEntityCollection||(this.postProcesses.push(e),pe.SetImmediate(()=>{this.onNewPostProcessAddedObservable.notifyObservers(e)}))}addEffectLayer(e){this._blockEntityCollection||(this.effectLayers.push(e),pe.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):(ee.Error(c),o&&ee.Error(o))}else{let c="Scene: An unexpected error occurred while trying to freeze active meshes.";i?i(c):(ee.Error(c),o&&(ee.Error(o),o.stack&&ee.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){pe.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),p.render(_,this.dumpNextRenderTargets),s=!0}}u&&d&&(u.renderList.data=d,u.renderList.length=d.length),pe.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(nn.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&&pB(),Oe._LastCreatedScene===this){Oe._LastCreatedScene=null;let s=Oe.Instances.length-1;for(;s>=0;){let a=Oe.Instances[s];if(a.scenes.length>0){Oe._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 Ze("Ray")}createPickingRayToRef(e,t,i,r,s,a=!1,o=!1){throw Ze("Ray")}createPickingRayInCameraSpace(e,t,i){throw Ze("Ray")}createPickingRayInCameraSpaceToRef(e,t,i,r){throw Ze("Ray")}pick(e,t,i,r,s,a){let o=Ze("Ray",!0);return o&&ee.Warn(o),new Jn}pickWithBoundingInfo(e,t,i,r,s){let a=Ze("Ray",!0);return a&&ee.Warn(a),new Jn}pickWithRay(e,t,i,r){throw Ze("Ray")}multiPick(e,t,i,r,s){throw Ze("Ray")}multiPickWithRay(e,t,i){throw Ze("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=el(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=fA(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=Gh(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 Ze("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)}};Jt.FOGMODE_NONE=0;Jt.FOGMODE_EXP=1;Jt.FOGMODE_EXP2=2;Jt.FOGMODE_LINEAR=3;Jt.MinDeltaTime=1;Jt.MaxDeltaTime=1e3;Jt._OriginalDefaultMaterialFactory=Jt.DefaultMaterialFactory;Ft("BABYLON.Scene",Jt)});var NB,ese,ya=M(()=>{G();NB="helperFunctions",ese=`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; +}`;A.ShadersStore[OC]||(A.ShadersStore[OC]=QB);lse={name:OC,shader:QB}});var ql,rg,NC=M(()=>{Wh();Ni();ql=class n extends Xr{_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.all([Promise.resolve().then(()=>(KB(),YB))]))):t.push(Promise.all([Promise.resolve().then(()=>(MC(),IC))])),super._gatherImports(e,t)}constructor(e,t=null,i){let r={name:e,engine:t||Oe.LastCreatedEngine,useShaderStore:!0,useAsPostProcess:!0,fragmentShader:n.FragmentUrl,...i};r.engine||(r.engine=Oe.LastCreatedEngine),super(r)}};ql.FragmentUrl="pass";rg=class n extends Xr{_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.all([Promise.resolve().then(()=>(ZB(),qB))]))):t.push(Promise.all([Promise.resolve().then(()=>(JB(),$B))])),super._gatherImports(e,t)}constructor(e,t=null,i){super({...i,name:e,engine:t||Oe.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}}};rg.FragmentUrl="passCube"});var Hh,wC,FC=M(()=>{Gt();jl();Ur();zi();xr();NC();Vt();Hh=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,ql.FragmentUrl,{effectWrapper:typeof t=="number"||!t.effectWrapper?new ql(e,s,c):void 0,...c})}static _Parse(e,t,i,r){return it.Parse(()=>new n(e.name,e.options,t,e.renderTargetSamplingMode,e._engine,e.reusable),e,i,r)}};Ft("BABYLON.PassPostProcess",Hh);wC=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,ql.FragmentUrl,{effectWrapper:typeof t=="number"||!t.effectWrapper?new rg(e,s,c):void 0,...c})}static _Parse(e,t,i,r){return it.Parse(()=>new n(e.name,e.options,t,e.renderTargetSamplingMode,e._engine,e.reusable),e,i,r)}};P([F()],wC.prototype,"face",null);Me._RescalePostProcessFactory=n=>new Hh("rescale",1,null,2,n,!1,0)});function tU(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 zh(n){xA||(xA=new Float32Array(1),eU=new Int32Array(xA.buffer)),xA[0]=n;let e=eU[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 Zl(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 xA,eU,BC=M(()=>{Vr();_f();FC();jl();On()});function VC(n){return n.split(" ").filter(e=>e!=="").map(e=>parseFloat(e))}function UC(n,e,t){for(;t.length!==e;){let i=VC(n.lines[n.index++]);t.push(...i)}}function cse(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=VC(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=VC(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)&&(p%=u*2,p>u&&(p=u*2-p)),h[_+p*l]=cse(r,_,p)}return{width:c/2,height:1,data:h}}var rU=M(()=>{On()});var nU={};tt(nU,{_IESTextureLoader:()=>GC});var GC,sU=M(()=>{rU();GC=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=iU(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 aU={};tt(aU,{_DDSTextureLoader:()=>kC});var kC,oU=M(()=>{Y_();WC();kC=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),co.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=co.GetDDSInfo(c),t.width=a.width,t.height=a.height,i&&(a.sphericalPolynomial=new Jo),o=(a.isRGB||a.isLuminance||a.mipmapCount>1)&&t.generateMipMaps,s._unpackFlipY(a.isCompressed),co.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=co.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,()=>{co.UploadDDSLevels(t.getEngine(),t,e,r,s,1)})}}});function lU(){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 p=0;p>2&3],h[x++]=f[v>>4&3],h[x]=f[v>>6&3]}}return h}}async function cU(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?_e.GetBabylonScriptURL(t):void 0,wasmBinary:e},[e])})}var fU=M(()=>{Ci()});var Ql,gf,fse,HC,Xh,hse,dse,use,bA,RA,IA,zC,hU=M(()=>{Ci();Vr();Rs();fU();(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"})(Ql||(Ql={}));gf={JSModuleURL:`${_e._DefaultCdnUrl}/basisTranscoder/1/basis_transcoder.js`,WasmModuleURL:`${_e._DefaultCdnUrl}/basisTranscoder/1/basis_transcoder.wasm`},fse=(n,e)=>{let t;switch(n){case Ql.cTFETC1:t=36196;break;case Ql.cTFBC1:t=33776;break;case Ql.cTFBC4:t=33779;break;case Ql.cTFASTC_4x4:t=37808;break;case Ql.cTFETC2:t=37496;break;case Ql.cTFBC7:t=36492;break}if(t===void 0)throw"The chosen Basis transcoder format is not currently supported";return t},HC=null,Xh=null,hse=0,dse=!1,use=async()=>(HC||(HC=new Promise((n,e)=>{Xh?n(Xh):_e.LoadFileAsync(_e.GetBabylonScriptURL(gf.WasmModuleURL)).then(t=>{if(typeof URL!="function")return e("Basis transcoder requires an environment with a URL constructor");let i=URL.createObjectURL(new Blob([`(${lU})()`],{type:"application/javascript"}));Xh=new Worker(i),cU(Xh,t,gf.JSModuleURL).then(n,e)}).catch(e)})),await HC),bA=async(n,e)=>{let t=n instanceof ArrayBuffer?new Uint8Array(n):n;return await new Promise((i,r)=>{use().then(()=>{let s=hse++,a=l=>{l.data.action==="transcode"&&l.data.id===s&&(Xh.removeEventListener("message",a),l.data.success?i(l.data):r("Transcode is not supported on this device"))};Xh.addEventListener("message",a);let o=new Uint8Array(t.byteLength);o.set(new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),Xh.postMessage({action:"transcode",id:s,imageData:o,config:e,ignoreSupportedFormats:dse},[o.buffer])},s=>{r(s)})})},RA=(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)},IA=(n,e)=>{let t=n.getEngine();for(let i=0;i{t._releaseTexture(s),RA(n,t)})}else n._invertVScale=!n.invertY,n.width=r.width+3&-4,n.height=r.height+3&-4,n.samplingMode=2,RA(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=zC.GetInternalFormatFromBasisFormat(e.format,t);n.format=s,RA(n,t);let a=e.fileInfo.images[i].levels;for(let o=0;oXC});var XC,uU=M(()=>{hU();Ci();XC=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}};bA(e,o).then(l=>{let c=l.fileInfo.images[0].levels.length>1&&t.generateMipMaps;IA(t,l),t.getEngine()._setCubeMapTextureParams(t,c),t.isReady=!0,t.onLoadedObservable.notifyObservers(t),t.onLoadedObservable.clear(),r&&r()}).catch(l=>{_e.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}};bA(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,()=>{IA(t,a)})}).catch(a=>{_e.Warn("Failed to transcode Basis file, transcoding may not be supported on this device"),_e.Warn(`Failed to transcode Basis file: ${a}`),i(0,0,!1,!1,()=>{},!0)})}}});var ng,mU=M(()=>{ng=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 MA(n){n.push("vCameraColorCurveNeutral","vCameraColorCurvePositive","vCameraColorCurveNegative")}var YC=M(()=>{});var rn,pU=M(()=>{Gt();Vt();zt();xr();YC();rn=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 it.Clone(()=>new n,this)}serialize(){return it.Serialize(this)}static Parse(e){return it.Parse(()=>new n,e,null,null)}};rn.PrepareUniforms=MA;P([F()],rn.prototype,"_globalHue",void 0);P([F()],rn.prototype,"_globalDensity",void 0);P([F()],rn.prototype,"_globalSaturation",void 0);P([F()],rn.prototype,"_globalExposure",void 0);P([F()],rn.prototype,"_highlightsHue",void 0);P([F()],rn.prototype,"_highlightsDensity",void 0);P([F()],rn.prototype,"_highlightsSaturation",void 0);P([F()],rn.prototype,"_highlightsExposure",void 0);P([F()],rn.prototype,"_midtonesHue",void 0);P([F()],rn.prototype,"_midtonesDensity",void 0);P([F()],rn.prototype,"_midtonesSaturation",void 0);P([F()],rn.prototype,"_midtonesExposure",void 0);it._ColorCurvesParser=rn.Parse});function _U(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&&MA(n),e.DITHER&&n.push("ditherIntensity")}function gU(n,e){e.COLORGRADING&&n.push("txColorTransform")}var vU=M(()=>{YC()});var kt,sg=M(()=>{Gt();Vt();di();zt();pU();to();xr();vU();zi();kt=class n{constructor(){this.colorCurves=new rn,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 ie}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&&rn.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=W_(o,l,this.vignetteStretch),a=W_(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 it.Clone(()=>new n,this)}serialize(){return it.Serialize(this)}static Parse(e){let t=it.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}};kt.TONEMAPPING_STANDARD=0;kt.TONEMAPPING_ACES=1;kt.TONEMAPPING_KHR_PBR_NEUTRAL=2;kt.PrepareUniforms=_U;kt.PrepareSamplers=gU;kt._VIGNETTEMODE_MULTIPLY=0;kt._VIGNETTEMODE_OPAQUE=1;P([mB()],kt.prototype,"colorCurves",void 0);P([F()],kt.prototype,"_colorCurvesEnabled",void 0);P([Ut("colorGradingTexture")],kt.prototype,"_colorGradingTexture",void 0);P([F()],kt.prototype,"_colorGradingEnabled",void 0);P([F()],kt.prototype,"_colorGradingWithGreenDepth",void 0);P([F()],kt.prototype,"_colorGradingBGR",void 0);P([F()],kt.prototype,"_exposure",void 0);P([F()],kt.prototype,"_toneMappingEnabled",void 0);P([F()],kt.prototype,"_toneMappingType",void 0);P([F()],kt.prototype,"_contrast",void 0);P([F()],kt.prototype,"vignetteStretch",void 0);P([F()],kt.prototype,"vignetteCenterX",void 0);P([F()],kt.prototype,"vignetteCenterY",void 0);P([F()],kt.prototype,"vignetteWeight",void 0);P([rm()],kt.prototype,"vignetteColor",void 0);P([F()],kt.prototype,"vignetteCameraFov",void 0);P([F()],kt.prototype,"_vignetteBlendMode",void 0);P([F()],kt.prototype,"_vignetteEnabled",void 0);P([F()],kt.prototype,"_ditheringEnabled",void 0);P([F()],kt.prototype,"_ditheringIntensity",void 0);P([F()],kt.prototype,"_skipFinalColorClamp",void 0);P([F()],kt.prototype,"_applyByPostProcess",void 0);P([F()],kt.prototype,"_isEnabled",void 0);P([F()],kt.prototype,"outputTextureWidth",void 0);P([F()],kt.prototype,"outputTextureHeight",void 0);it._ImageProcessingConfigurationParser=kt.Parse;Ft("BABYLON.ImageProcessingConfiguration",kt)});var es,ag=M(()=>{Ge();ki();es=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];j.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=Fe.FromArray(i,t[this.faceId*3]*2),s=Fe.FromArray(i,t[this.faceId*3+1]*2),a=Fe.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 Fe(r.x+s.x+a.x,r.y+s.y+a.y)}}});var nn,KC=M(()=>{nn=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 og(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 AU(n,e,t){return z_(e,ba),og(n,ba,Ia),z_(Ia,t),t}function CA(n,e,t){if(!Ma.eyeAtCamera)return AU(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 jC(n,e,t,i){return Nh(CA(n,e,i),t,i),i}function xU(n,e,t,i,r){for(let s=0;s{Ph();Ge();cC();mf();Ra=new j,ba=new j,Ia=new j,Ma={getScene:()=>{},eyeAtCamera:!0};lg=ur,qC=sr,RU=lg.prototype._updateMatrixForUniform,bU=sr.prototype.setMatrix});var et,or,lm=M(()=>{et=class{};et.NAME_EFFECTLAYER="EffectLayer";et.NAME_LAYER="Layer";et.NAME_LENSFLARESYSTEM="LensFlareSystem";et.NAME_BOUNDINGBOXRENDERER="BoundingBoxRenderer";et.NAME_PARTICLESYSTEM="ParticleSystem";et.NAME_GAMEPAD="Gamepad";et.NAME_SIMPLIFICATIONQUEUE="SimplificationQueue";et.NAME_GEOMETRYBUFFERRENDERER="GeometryBufferRenderer";et.NAME_PREPASSRENDERER="PrePassRenderer";et.NAME_DEPTHRENDERER="DepthRenderer";et.NAME_DEPTHPEELINGRENDERER="DepthPeelingRenderer";et.NAME_POSTPROCESSRENDERPIPELINEMANAGER="PostProcessRenderPipelineManager";et.NAME_SPRITE="Sprite";et.NAME_SUBSURFACE="SubSurface";et.NAME_OUTLINERENDERER="Outline";et.NAME_PROCEDURALTEXTURE="ProceduralTexture";et.NAME_SHADOWGENERATOR="ShadowGenerator";et.NAME_OCTREE="Octree";et.NAME_PHYSICSENGINE="PhysicsEngine";et.NAME_AUDIO="Audio";et.NAME_FLUIDRENDERER="FluidRenderer";et.NAME_IBLCDFGENERATOR="iblCDFGenerator";et.NAME_CLUSTEREDLIGHTING="ClusteredLighting";et.STEP_ISREADYFORMESH_EFFECTLAYER=0;et.STEP_ISREADYFORMESH_DEPTHRENDERER=1;et.STEP_BEFOREEVALUATEACTIVEMESH_BOUNDINGBOXRENDERER=0;et.STEP_EVALUATESUBMESH_BOUNDINGBOXRENDERER=0;et.STEP_PREACTIVEMESH_BOUNDINGBOXRENDERER=0;et.STEP_CAMERADRAWRENDERTARGET_EFFECTLAYER=1;et.STEP_BEFORECAMERADRAW_PREPASS=0;et.STEP_BEFORECAMERADRAW_EFFECTLAYER=1;et.STEP_BEFORECAMERADRAW_LAYER=2;et.STEP_BEFORERENDERTARGETDRAW_PREPASS=0;et.STEP_BEFORERENDERTARGETDRAW_LAYER=1;et.STEP_BEFORERENDERINGMESH_PREPASS=0;et.STEP_BEFORERENDERINGMESH_OUTLINE=1;et.STEP_AFTERRENDERINGMESH_PREPASS=0;et.STEP_AFTERRENDERINGMESH_OUTLINE=1;et.STEP_AFTERRENDERINGGROUPDRAW_EFFECTLAYER_DRAW=0;et.STEP_AFTERRENDERINGGROUPDRAW_BOUNDINGBOXRENDERER=1;et.STEP_BEFORECAMERAUPDATE_SIMPLIFICATIONQUEUE=0;et.STEP_BEFORECLEAR_PROCEDURALTEXTURE=0;et.STEP_BEFORECLEAR_PREPASS=1;et.STEP_BEFORERENDERTARGETCLEAR_PREPASS=0;et.STEP_AFTERRENDERTARGETDRAW_PREPASS=0;et.STEP_AFTERRENDERTARGETDRAW_LAYER=1;et.STEP_AFTERCAMERADRAW_PREPASS=0;et.STEP_AFTERCAMERADRAW_EFFECTLAYER=1;et.STEP_AFTERCAMERADRAW_LENSFLARESYSTEM=2;et.STEP_AFTERCAMERADRAW_EFFECTLAYER_DRAW=3;et.STEP_AFTERCAMERADRAW_LAYER=4;et.STEP_AFTERCAMERADRAW_FLUIDRENDERER=5;et.STEP_AFTERCAMERAPOSTPROCESS_LAYER=0;et.STEP_AFTERRENDERTARGETPOSTPROCESS_LAYER=0;et.STEP_AFTERRENDER_AUDIO=0;et.STEP_GATHERRENDERTARGETS_DEPTHRENDERER=0;et.STEP_GATHERRENDERTARGETS_GEOMETRYBUFFERRENDERER=1;et.STEP_GATHERRENDERTARGETS_SHADOWGENERATOR=2;et.STEP_GATHERRENDERTARGETS_POSTPROCESSRENDERPIPELINEMANAGER=3;et.STEP_GATHERACTIVECAMERARENDERTARGETS_DEPTHRENDERER=0;et.STEP_GATHERACTIVECAMERARENDERTARGETS_FLUIDRENDERER=1;et.STEP_GATHERACTIVECAMERARENDERTARGETS_CLUSTEREDLIGHTING=2;et.STEP_POINTERMOVE_SPRITE=0;et.STEP_POINTERDOWN_SPRITE=0;et.STEP_POINTERUP_SPRITE=0;or=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();st=class{};st.POINTERDOWN=1;st.POINTERUP=2;st.POINTERMOVE=4;st.POINTERWHEEL=8;st.POINTERPICK=16;st.POINTERTAP=32;st.POINTERDOUBLETAP=64;yA=class{constructor(e,t){this.type=e,this.event=t}},PA=class extends yA{constructor(e,t,i,r){super(e,t),this.ray=null,this.originalPickingInfo=null,this.skipOnPointerObservable=!1,this.localPosition=new Fe(i,r)}},Ca=class extends yA{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 $l,CU=M(()=>{$l=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}};$l.Triggers={}});var ho,cm,fg,LA=M(()=>{ho=class{};ho.KEYDOWN=1;ho.KEYUP=2;cm=class{constructor(e,t){this.type=e,this.event=t}},fg=class extends cm{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 $e,vt,yU,PU,LU,DU,OU,Yh=M(()=>{(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"})($e||($e={}));(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"})(vt||(vt={}));(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"})(yU||(yU={}));(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"})(PU||(PU={}));(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"})(LU||(LU={}));(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"})(DU||(DU={}));(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"})(OU||(OU={}))});var NU,uo,DA=M(()=>{(function(n){n[n.PointerMove=0]="PointerMove",n[n.PointerDown=1]="PointerDown",n[n.PointerUp=2]="PointerUp"})(NU||(NU={}));uo=class{};uo.DOM_DELTA_PIXEL=0;uo.DOM_DELTA_LINE=1;uo.DOM_DELTA_PAGE=2});var mo,QC=M(()=>{DA();Yh();mo=class{static CreateDeviceEvent(e,t,i,r,s,a,o){switch(e){case $e.Keyboard:return this._CreateKeyboardEvent(i,r,s,a);case $e.Mouse:if(i===vt.MouseWheelX||i===vt.MouseWheelY||i===vt.MouseWheelZ)return this._CreateWheelEvent(e,t,i,r,s,a);case $e.Touch:return this._CreatePointerEvent(e,t,i,r,s,a,o);default:throw`Unable to generate event for device ${$e[e]}`}}static _CreatePointerEvent(e,t,i,r,s,a,o){let l=this._CreateMouseEvent(e,t,i,r,s,a);e===$e.Mouse?(l.deviceType=$e.Mouse,l.pointerId=1,l.pointerType="mouse"):(l.deviceType=$e.Touch,l.pointerId=o!=null?o:t,l.pointerType="touch");let c=0;return c+=s.pollInput(e,t,vt.LeftClick),c+=s.pollInput(e,t,vt.RightClick)*2,c+=s.pollInput(e,t,vt.MiddleClick)*4,l.buttons=c,i===vt.Move?l.type="pointermove":i>=vt.LeftClick&&i<=vt.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=uo.DOM_DELTA_PIXEL,o.deltaX=0,o.deltaY=0,o.deltaZ=0,i){case vt.MouseWheelX:o.deltaX=r;break;case vt.MouseWheelY:o.deltaY=r;break;case vt.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,vt.Horizontal),c=s.pollInput(e,t,vt.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=$e.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($e.Keyboard),r=i&&t.pollInput($e.Keyboard,0,18)===1,s=i&&t.pollInput($e.Keyboard,0,17)===1,a=i&&(t.pollInput($e.Keyboard,0,91)===1||t.pollInput($e.Keyboard,0,92)===1||t.pollInput($e.Keyboard,0,93)===1),o=i&&t.pollInput($e.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 OA,wU=M(()=>{QC();Yh();OA=class{constructor(e,t,i){this._nativeInput=_native.DeviceInputSystem?new _native.DeviceInputSystem(e,t,(r,s,a,o)=>{let l=mo.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===$e.Mouse||e===$e.Touch}dispose(){this._nativeInput.dispose()}_createDummyNativeInput(){return{pollInput:()=>0,isDeviceAvailable:()=>!1,dispose:()=>{}}}}});var FU,BU,NA,UU=M(()=>{Ea();Ci();QC();Yh();FU=255,BU=Object.keys(vt).length/2,NA=class{constructor(e,t,i,r){this._inputs=[],this._keyboardActive=!1,this._pointerActive=!1,this._usingSafari=_e.IsSafari(),this._usingMacOs=Fl()&&/(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=Fl()&&navigator.userAgent&&navigator.userAgent.indexOf("Firefox")!==-1,this._isUsingChromium=Fl()&&navigator.userAgent&&navigator.userAgent.indexOf("Chrome")!==-1,this._maxTouchPoints=0,this._pointerInputClearObserver=null,this._gamepadConnectedEvent=s=>{},this._gamepadDisconnectedEvent=s=>{},this._eventPrefix=_e.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 ${$e[e]}`;e>=$e.DualShock&&e<=$e.DualSense&&this._updateDevice(e,t,i);let s=r[i];if(s===void 0)throw`Unable to find input ${i} for device ${$e[e]} in slot ${t}`;return i===vt.Move&&_e.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($e.Keyboard,0,FU));let t=this._inputs[$e.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($e.Keyboard,0,i)}},this._keyboardUpEvent=e=>{this._keyboardActive||(this._keyboardActive=!0,this._registerDevice($e.Keyboard,0,FU));let t=this._inputs[$e.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=mo.CreateDeviceEvent($e.Keyboard,0,r,0,this,this._elementToAttachTo);t[r]=0,this._onInputChanged($e.Keyboard,0,s)}this._metaKeys.splice(0,this._metaKeys.length)}this._onInputChanged($e.Keyboard,0,i)}},this._keyboardBlurEvent=()=>{if(this._keyboardActive){let e=this._inputs[$e.Keyboard][0];for(let t=0;t{let r=this._getPointerType(i),s=r===$e.Mouse?0:this._activeTouchIds.indexOf(i.pointerId);if(r===$e.Touch&&s===-1){let o=this._activeTouchIds.indexOf(-1);if(o>=0)s=o,this._activeTouchIds[o]=i.pointerId,this._onDeviceConnected(r,s);else{_e.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=vt.Move,a[vt.Horizontal]=i.clientX,a[vt.Vertical]=i.clientY,r===$e.Touch&&a[vt.LeftClick]===0&&(a[vt.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===$e.Mouse?0:i.pointerId;if(r===$e.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{_e.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===$e.Touch&&this._onDeviceConnected(r,s):this._addPointerDevice(r,s,i.clientX,i.clientY);let a=this._inputs[r][s];if(a){let o=a[vt.Horizontal],l=a[vt.Vertical];if(r===$e.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[vt.Horizontal]=i.clientX,a[vt.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=vt.Move,this._onInputChanged(r,s,c))}},this._pointerUpEvent=i=>{var c,f,h,d,u;let r=this._getPointerType(i),s=r===$e.Mouse?0:this._activeTouchIds.indexOf(i.pointerId);if(r===$e.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[vt.Horizontal],p=a[vt.Vertical];a[vt.Horizontal]=i.clientX,a[vt.Vertical]=i.clientY,a[o+2]=0;let _=i;i.pointerId===void 0&&(i.pointerId=this._mouseId),(m!==i.clientX||p!==i.clientY)&&(_.inputIndex=vt.Move,this._onInputChanged(r,s,_)),_.inputIndex=o+2,r===$e.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,_),r===$e.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[$e.Touch][r][vt.LeftClick]=0;let s=mo.CreateDeviceEvent($e.Touch,r,vt.LeftClick,0,this,this._elementToAttachTo,i);this._onInputChanged($e.Touch,r,s),this._activeTouchIds[r]=-1,this._onDeviceDisconnected($e.Touch,r)},this._pointerCancelEvent=i=>{var r,s;if(i.pointerType==="mouse"){let a=this._inputs[$e.Mouse][0];this._mouseId>=0&&((s=(r=this._elementToAttachTo).hasPointerCapture)!=null&&s.call(r,this._mouseId))&&this._elementToAttachTo.releasePointerCapture(this._mouseId);for(let o=vt.LeftClick;o<=vt.BrowserForward;o++)if(a[o]===1){a[o]=0;let l=mo.CreateDeviceEvent($e.Mouse,0,o,0,this,this._elementToAttachTo);this._onInputChanged($e.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($e.Mouse)){let l=this._inputs[$e.Mouse][0];this._mouseId>=0&&((r=(i=this._elementToAttachTo).hasPointerCapture)!=null&&r.call(i,this._mouseId))&&this._elementToAttachTo.releasePointerCapture(this._mouseId);for(let c=vt.LeftClick;c<=vt.BrowserForward;c++)if(l[c]===1){l[c]=0;let f=mo.CreateDeviceEvent($e.Mouse,0,c,0,this,this._elementToAttachTo);this._onInputChanged($e.Mouse,0,f)}}if(this.isDeviceAvailable($e.Touch)){let l=this._inputs[$e.Touch];for(let c=0;c{let r=$e.Mouse,s=0;this._inputs[r]||(this._inputs[r]=[]),this._inputs[r][s]||(this._pointerActive=!0,this._registerDevice(r,s,BU));let a=this._inputs[r][s];if(a){a[vt.MouseWheelX]=i.deltaX||0,a[vt.MouseWheelY]=i.deltaY||i.wheelDelta||0,a[vt.MouseWheelZ]=i.deltaZ||0;let o=i;i.pointerId===void 0&&(i.pointerId=this._mouseId),a[vt.MouseWheelX]!==0&&(o.inputIndex=vt.MouseWheelX,this._onInputChanged(r,s,o)),a[vt.MouseWheelY]!==0&&(o.inputIndex=vt.MouseWheelY,this._onInputChanged(r,s,o)),a[vt.MouseWheelZ]!==0&&(o.inputIndex=vt.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($e.Mouse)){let i=this._inputs[$e.Mouse][0];i[vt.MouseWheelX]=0,i[vt.MouseWheelY]=0,i[vt.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?$e.DualSense:$e.DualShock:e.indexOf("Xbox One")!==-1||e.search("Xbox 360")!==-1||e.search("xinput")!==-1?$e.Xbox:e.indexOf("057e")!==-1?$e.Switch:$e.Generic}_getPointerType(e){let t=$e.Mouse;return(e.pointerType==="touch"||e.pointerType==="pen"||e.touches)&&(t=$e.Touch),t}}});var hg,VU=M(()=>{di();hg=class{constructor(e,t,i=0){this.deviceType=t,this.deviceSlot=i,this.onInputChangedObservable=new ie,this._deviceInputSystem=e}getInput(e){return this._deviceInputSystem.pollInput(this.deviceType,this.deviceSlot,e)}}});var wA,GU=M(()=>{Yh();wU();UU();VU();wA=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($e).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 hg(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 OA(i,r,s):this._deviceInputSystem=new NA(e,i,r,s)}dispose(){this._deviceInputSystem.dispose()}}});var FA,kU=M(()=>{Yh();di();GU();FA=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($e).length/2;this._devices=new Array(t),this._firstDevice=new Array(t),this._engine=e,this._engine._deviceSourceManager||(this._engine._deviceSourceManager=new wA(e)),this._engine._deviceSourceManager._refCount++,this.onDeviceConnectedObservable=new ie(i=>{for(let r of this._devices)if(r)for(let s of r)s&&this.onDeviceConnectedObservable.notifyObserver(i,s)}),this.onDeviceDisconnectedObservable=new ie,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 $e.Keyboard:case $e.Mouse:this._firstDevice[e]=0;break;case $e.Touch:case $e.DualSense:case $e.DualShock:case $e.Xbox:case $e.Switch:case $e.Generic:{delete this._firstDevice[e];let t=this._devices[e];if(t){for(let i=0;i{Kh=class{};Kh._IsPickingAvailable=!1});var BA,Nn,WU=M(()=>{fo();CU();ag();Ge();KC();LA();Yh();kU();Ni();$C();BA=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}},Nn=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 Fe(0,0),this._previousStartingPointerPosition=new Fe(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||Oe.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 Fe(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>=vt.MouseWheelX&&t.inputIndex<=vt.MouseWheelZ?st.POINTERWHEEL:st.POINTERMOVE;i.onPointerMove&&(e=e||this._pickMove(t),i.onPointerMove(t,e,a));let o;e?(o=new Ca(a,t,e),this._setRayOnPointerInfo(e,t)):(o=new Ca(a,t,null,this),this._movePointerInfo=o),i.onPointerObservable.hasObservers()&&i.onPointerObservable.notifyObservers(o,a)}_setRayOnPointerInfo(e,t){let i=this._scene;e&&Kh._IsPickingAvailable&&(e.ray||(e.ray=i.createPickingRay(t.offsetX,t.offsetY,j.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 PA(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=vt.Move,!this._checkPrePointerObservable(e,i,st.POINTERMOVE)&&this._processPointerMove(e,i)}simulatePointerDown(e,t){let i=new PointerEvent("pointerdown",t);i.inputIndex=i.button+2,!this._checkPrePointerObservable(e,i,st.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 nn(e.pickedMesh,i.pointerX,i.pointerY,e.pickedMesh,t,e)),t.button){case 0:a.processTrigger(2,new nn(e.pickedMesh,i.pointerX,i.pointerY,e.pickedMesh,t,e));break;case 1:a.processTrigger(4,new nn(e.pickedMesh,i.pointerX,i.pointerY,e.pickedMesh,t,e));break;case 2:a.processTrigger(3,new nn(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,nn.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=st.POINTERDOWN;e?(i.onPointerDown&&i.onPointerDown(t,e,s),r=new Ca(s,t,e),this._setRayOnPointerInfo(e,t)):r=new Ca(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=vt.Move;let s=new BA;i?s.doubleClick=!0:s.singleClick=!0,!this._checkPrePointerObservable(e,r,st.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=st.POINTERPICK,o=new Ca(a,t,e);this._setRayOnPointerInfo(e,t),r.onPointerObservable.notifyObservers(o,a)}let s=e.pickedMesh._getActionManagerForTrigger();if(s&&!i.ignore){s.processTrigger(7,nn.CreateNew(e.pickedMesh,t,e)),!i.hasSwiped&&i.singleClick&&s.processTrigger(1,nn.CreateNew(e.pickedMesh,t,e));let a=e.pickedMesh._getActionManagerForTrigger(6);i.doubleClick&&a&&a.processTrigger(6,nn.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,nn.CreateNew(this._pickedDownMesh,t))}if(!i.ignore){let s=new Ca(st.POINTERUP,t,e);if(this._setRayOnPointerInfo(e,t),r.onPointerObservable.notifyObservers(s,st.POINTERUP),r.onPointerUp&&r.onPointerUp(t,e,st.POINTERUP),!i.hasSwiped&&!this._skipPointerTap&&!this._isMultiTouchGesture){let a=0;if(i.singleClick?a=st.POINTERTAP:i.doubleClick&&(a=st.POINTERDOUBLETAP),a){let o=new Ca(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 FA(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=st.POINTERTAP,d=new Ca(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 BA;this._currentPickResult=null;let d=null,u=o.hasSpecificMask(st.POINTERPICK)||l.hasSpecificMask(st.POINTERPICK)||o.hasSpecificMask(st.POINTERTAP)||l.hasSpecificMask(st.POINTERTAP)||o.hasSpecificMask(st.POINTERDOUBLETAP)||l.hasSpecificMask(st.POINTERDOUBLETAP);!u&&$l&&(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(st.POINTERDOUBLETAP)&&!l.hasSpecificMask(st.POINTERDOUBLETAP),v&&!$l.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 T={evt:c,clickInfo:h,timeoutId:window.setTimeout(this._delayedSimpleClick.bind(this,g,h,f),n.DoubleClickDelay)};this._delayedClicks[g]=T}let x=o.hasSpecificMask(st.POINTERDOUBLETAP)||l.hasSpecificMask(st.POINTERDOUBLETAP);!x&&$l.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>=vt.MouseWheelX&&o.inputIndex<=vt.MouseWheelZ?st.POINTERWHEEL:st.POINTERMOVE)||!s.cameraToUseForPointers&&!s.activeCamera)return;if(s.skipPointerMovePicking){this._processPointerMove(new es,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 es: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,st.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(st.POINTERTAP)&&this._checkPrePointerObservable(null,o,st.POINTERTAP)&&(this._skipPointerTap=!0),c.doubleClick&&s.onPrePointerObservable.hasSpecificMask(st.POINTERDOUBLETAP)&&this._checkPrePointerObservable(null,o,st.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&&($l&&$l.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=ho.KEYDOWN;if(s.onPreKeyboardObservable.hasObservers()){let c=new fg(l,o);if(s.onPreKeyboardObservable.notifyObservers(c,l),c.skipOnKeyboardObservable)return}if(s.onKeyboardObservable.hasObservers()){let c=new cm(l,o);s.onKeyboardObservable.notifyObservers(c,l)}s.actionManager&&s.actionManager.processTrigger(14,nn.CreateNewFromScene(s,o))},this._onKeyUp=o=>{let l=ho.KEYUP;if(s.onPreKeyboardObservable.hasObservers()){let c=new fg(l,o);if(s.onPreKeyboardObservable.notifyObservers(c,l),c.skipOnKeyboardObservable)return}if(s.onKeyboardObservable.hasObservers()){let c=new cm(l,o);s.onKeyboardObservable.notifyObservers(c,l)}s.actionManager&&s.actionManager.processTrigger(15,nn.CreateNewFromScene(s,o))},this._deviceSourceManager.onDeviceConnectedObservable.add(o=>{o.deviceType===$e.Mouse?o.onInputChangedObservable.add(l=>{this._originMouseEvent=l,l.inputIndex===vt.LeftClick||l.inputIndex===vt.MiddleClick||l.inputIndex===vt.RightClick||l.inputIndex===vt.BrowserBack||l.inputIndex===vt.BrowserForward?t&&o.getInput(l.inputIndex)===1?this._onPointerDown(l):e&&o.getInput(l.inputIndex)===0&&this._onPointerUp(l):i&&(l.inputIndex===vt.Move?this._onPointerMove(l):(l.inputIndex===vt.MouseWheelX||l.inputIndex===vt.MouseWheelY||l.inputIndex===vt.MouseWheelZ)&&this._onPointerMove(l))}):o.deviceType===$e.Touch?o.onInputChangedObservable.add(l=>{l.inputIndex===vt.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===vt.Move&&this._onPointerMove(l)}):o.deviceType===$e.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 nn(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 nn(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]}};Nn.DragMovementThreshold=10;Nn.LongPressDelay=500;Nn.DoubleClickDelay=300;Nn.ExclusiveDoubleClickMode=!1});var rl,JC=M(()=>{Bl();rl=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=_r.Now)}endMonitoring(e=!0){if(!n.Enabled)return;e&&this.fetchNewFrame();let t=_r.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=_r.Now;e-this._lastSecTime>1e3&&(this._lastSecAverage=this._lastSecAccumulated/this._lastSecValueCount,this._lastSecTime=e,this._lastSecAccumulated=0,this._lastSecValueCount=0)}};rl.Enabled=!0});var Jl,UA=M(()=>{Jl=class{static get UniqueId(){let e=this._UniqueIdCounter;return this._UniqueIdCounter++,e}};Jl._UniqueIdCounter=1});var VA,HU=M(()=>{VA=class{constructor(){this.pointerDownFastCheck=!1,this.pointerUpFastCheck=!1,this.pointerMoveFastCheck=!1,this.skipPointerMovePicking=!1,this.skipPointerDownPicking=!1,this.skipPointerUpPicking=!1}}});var mse,pse,zU,Jt,Cs=M(()=>{Ci();Bl();di();lo();mU();df();Ge();sg();mf();ag();KC();vA();cg();SA();lm();Ea();Ni();hn();WU();JC();zt();sA();UA();zl();eg();Qo();HU();Pt();zi();qo();mse=new Mi,pse=new Mi;(function(n){n[n.BackwardCompatible=0]="BackwardCompatible",n[n.Intermediate=1]="Intermediate",n[n.Aggressive=2]="Aggressive"})(zU||(zU={}));Jt=class n{static DefaultMaterialFactory(e){throw Ze("StandardMaterial")}static CollisionCoordinatorFactory(){throw Ze("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 Nn.DragMovementThreshold}static set DragMovementThreshold(e){Nn.DragMovementThreshold=e}static get LongPressDelay(){return Nn.LongPressDelay}static set LongPressDelay(e){Nn.LongPressDelay=e}static get DoubleClickDelay(){return Nn.DoubleClickDelay}static set DoubleClickDelay(e){Nn.DoubleClickDelay=e}static get ExclusiveDoubleClickMode(){return Nn.ExclusiveDoubleClickMode}static set ExclusiveDoubleClickMode(e){Nn.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=mse.set(r.x,r.y,r.z,s?-1:1),l=o.subtractFromFloatsToRef(a.x,a.y,a.z,0,pse);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=rA(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 Nn(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 ie,this.ambientColor=new pe(0,0,0),this.environmentIntensity=1,this.iblIntensity=1,this._performancePriority=0,this.onScenePerformancePriorityChangedObservable=new ie,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 ie,this._onDisposeObserver=null,this.onBeforeRenderObservable=new ie,this._onBeforeRenderObserver=null,this.onAfterRenderObservable=new ie,this.onAfterRenderCameraObservable=new ie,this._onAfterRenderObserver=null,this.onBeforeAnimationsObservable=new ie,this.onAfterAnimationsObservable=new ie,this.onBeforeDrawPhaseObservable=new ie,this.onAfterDrawPhaseObservable=new ie,this.onReadyObservable=new ie,this.onBeforeCameraRenderObservable=new ie,this._onBeforeCameraRenderObserver=null,this.onAfterCameraRenderObservable=new ie,this._onAfterCameraRenderObserver=null,this.onBeforeActiveMeshesEvaluationObservable=new ie,this.onAfterActiveMeshesEvaluationObservable=new ie,this.onBeforeParticlesRenderingObservable=new ie,this.onAfterParticlesRenderingObservable=new ie,this.onDataLoadedObservable=new ie,this.onNewCameraAddedObservable=new ie,this.onCameraRemovedObservable=new ie,this.onNewLightAddedObservable=new ie,this.onLightRemovedObservable=new ie,this.onNewGeometryAddedObservable=new ie,this.onGeometryRemovedObservable=new ie,this.onNewTransformNodeAddedObservable=new ie,this.onTransformNodeRemovedObservable=new ie,this.onNewMeshAddedObservable=new ie,this.onMeshRemovedObservable=new ie,this.onNewSkeletonAddedObservable=new ie,this.onSkeletonRemovedObservable=new ie,this.onNewParticleSystemAddedObservable=new ie,this.onParticleSystemRemovedObservable=new ie,this.onNewAnimationGroupAddedObservable=new ie,this.onAnimationGroupRemovedObservable=new ie,this.onNewMaterialAddedObservable=new ie,this.onNewMultiMaterialAddedObservable=new ie,this.onMaterialRemovedObservable=new ie,this.onMultiMaterialRemovedObservable=new ie,this.onNewTextureAddedObservable=new ie,this.onTextureRemovedObservable=new ie,this.onNewFrameGraphAddedObservable=new ie,this.onFrameGraphRemovedObservable=new ie,this.onNewObjectRendererAddedObservable=new ie,this.onObjectRendererRemovedObservable=new ie,this.onNewPostProcessAddedObservable=new ie,this.onPostProcessRemovedObservable=new ie,this.onNewEffectLayerAddedObservable=new ie,this.onEffectLayerRemovedObservable=new ie,this.onBeforeRenderTargetsRenderObservable=new ie,this.onAfterRenderTargetsRenderObservable=new ie,this.onBeforeStepObservable=new ie,this.onAfterStepObservable=new ie,this.onActiveCameraChanged=new ie,this.onActiveCamerasChanged=new ie,this.onBeforeRenderingGroupObservable=new ie,this.onAfterRenderingGroupObservable=new ie,this.onMeshImportedObservable=new ie,this.onAnimationFileImportedObservable=new ie,this.onEnvironmentTextureChangedObservable=new ie,this.onMeshUnderPointerUpdatedObservable=new ie,this._registeredForLateAnimationBindings=new oo(256),this._pointerPickingConfiguration=new VA,this.onPrePointerObservable=new ie,this.onPointerObservable=new ie,this.onPreKeyboardObservable=new ie,this.onKeyboardObservable=new ie,this._useRightHandedSystem=!1,this._timeAccumulator=0,this._currentStepId=0,this._currentInternalStep=0,this._fogEnabled=!0,this._fogMode=n.FOGMODE_NONE,this.fogColor=new pe(.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 oo(256),this.proceduralTexturesEnabled=!0,this._totalVertices=new rl,this._activeIndices=new rl,this._activeParticles=new rl,this._activeBones=new rl,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 Ui(256),this._processedMaterials=new Ui(256),this._renderTargets=new oo(256),this._materialsRenderTargets=new oo(256),this._activeParticleSystems=new Ui(256),this._activeSkeletons=new oo(32),this._softwareSkinnedMeshes=new oo(32),this._activeAnimatables=new Array,this._transformMatrix=j.Zero(),this.requireLightSorting=!1,this._components=[],this._serializableComponents=[],this._transientComponents=[],this._beforeCameraUpdateStage=or.Create(),this._beforeClearStage=or.Create(),this._beforeRenderTargetClearStage=or.Create(),this._gatherRenderTargetsStage=or.Create(),this._gatherActiveCameraRenderTargetsStage=or.Create(),this._isReadyForMeshStage=or.Create(),this._beforeEvaluateActiveMeshStage=or.Create(),this._evaluateSubMeshStage=or.Create(),this._preActiveMeshStage=or.Create(),this._cameraDrawRenderTargetStage=or.Create(),this._beforeCameraDrawStage=or.Create(),this._beforeRenderTargetDrawStage=or.Create(),this._beforeRenderingGroupDrawStage=or.Create(),this._beforeRenderingMeshStage=or.Create(),this._afterRenderingMeshStage=or.Create(),this._afterRenderingGroupDrawStage=or.Create(),this._afterCameraDrawStage=or.Create(),this._afterCameraPostProcessStage=or.Create(),this._afterRenderTargetDrawStage=or.Create(),this._afterRenderTargetPostProcessStage=or.Create(),this._afterRenderStage=or.Create(),this._pointerMoveStage=or.Create(),this._pointerDownStage=or.Create(),this._pointerUpStage=or.Create(),this._geometriesByUniqueId=null,this._uniqueId=0,this._defaultMeshCandidates={data:[],length:0},this._defaultSubMeshCandidates={data:[],length:0},this.onReadyTimeoutObservable=new ie,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||Oe.LastCreatedEngine,i.virtual?e._virtualScenes.push(this):(Oe._LastCreatedScene=this,e.scenes.push(this)),(e.getCreationOptions().useLargeWorldRendering||t!=null&&t.useFloatingOrigin)&&(MU(),this._floatingOriginScene=this,Ma.getScene=this._getFloatingOriginScene),this._uid=null,this._renderingManager=new Aa(this),Kl&&(this.postProcessManager=new Kl(this)),dr()&&this.attachControl(),this._createUbo(),kt&&(this._imageProcessingConfiguration=new kt),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=_r.Now;else if(this.onReadyTimeoutDuration>0&&_r.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=_r.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 j),this._projectionMatrix.invertToRef(this._inverseProjectionMatrix),this._viewMatrix.multiplyToRef(this._projectionMatrix,this._transformMatrix),this._frustumPlanes?of.GetPlanesToRef(this._transformMatrix,this._frustumPlanes):this._frustumPlanes=of.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 ur(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 Jl.UniqueId}addMesh(e,t=!1){if(!this._blockEntityCollection&&(this.meshes.push(e),e._resyncLightSources(),e.parent||e._addToSceneRootNodes(),_e.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),_e.SetImmediate(()=>{this.onNewCameraAddedObservable.notifyObservers(e)}),e.parent||e._addToSceneRootNodes())}addSkeleton(e){this._blockEntityCollection||(this.skeletons.push(e),_e.SetImmediate(()=>{this.onNewSkeletonAddedObservable.notifyObservers(e)}))}addParticleSystem(e){this._blockEntityCollection||(this.particleSystems.push(e),_e.SetImmediate(()=>{this.onNewParticleSystemAddedObservable.notifyObservers(e)}))}addAnimation(e){this._blockEntityCollection||this.animations.push(e)}addAnimationGroup(e){this._blockEntityCollection||(this.animationGroups.push(e),_e.SetImmediate(()=>{this.onNewAnimationGroupAddedObservable.notifyObservers(e)}))}addMultiMaterial(e){this._blockEntityCollection||(this.multiMaterials.push(e),_e.SetImmediate(()=>{this.onNewMultiMaterialAddedObservable.notifyObservers(e)}))}addMaterial(e){this._blockEntityCollection||e.getScene()===this&&e._indexInSceneMaterialArray!==-1||(e._indexInSceneMaterialArray=this.materials.length,this.materials.push(e),_e.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),_e.SetImmediate(()=>{this.onNewFrameGraphAddedObservable.notifyObservers(e)})}addObjectRenderer(e){this.objectRenderers.push(e),_e.SetImmediate(()=>{this.onNewObjectRendererAddedObservable.notifyObservers(e)})}addPostProcess(e){this._blockEntityCollection||(this.postProcesses.push(e),_e.SetImmediate(()=>{this.onNewPostProcessAddedObservable.notifyObservers(e)}))}addEffectLayer(e){this._blockEntityCollection||(this.effectLayers.push(e),_e.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):(ee.Error(c),o&&ee.Error(o))}else{let c="Scene: An unexpected error occurred while trying to freeze active meshes.";i?i(c):(ee.Error(c),o&&(ee.Error(o),o.stack&&ee.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){_e.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),p.render(_,this.dumpNextRenderTargets),s=!0}}u&&d&&(u.renderList.data=d,u.renderList.length=d.length),_e.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(nn.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&&IU(),Oe._LastCreatedScene===this){Oe._LastCreatedScene=null;let s=Oe.Instances.length-1;for(;s>=0;){let a=Oe.Instances[s];if(a.scenes.length>0){Oe._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 Ze("Ray")}createPickingRayToRef(e,t,i,r,s,a=!1,o=!1){throw Ze("Ray")}createPickingRayInCameraSpace(e,t,i){throw Ze("Ray")}createPickingRayInCameraSpaceToRef(e,t,i,r){throw Ze("Ray")}pick(e,t,i,r,s,a){let o=Ze("Ray",!0);return o&&ee.Warn(o),new es}pickWithBoundingInfo(e,t,i,r,s){let a=Ze("Ray",!0);return a&&ee.Warn(a),new es}pickWithRay(e,t,i,r){throw Ze("Ray")}multiPick(e,t,i,r,s){throw Ze("Ray")}multiPickWithRay(e,t,i){throw Ze("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=tl(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=pA(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=Gh(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 Ze("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)}};Jt.FOGMODE_NONE=0;Jt.FOGMODE_EXP=1;Jt.FOGMODE_EXP2=2;Jt.FOGMODE_LINEAR=3;Jt.MinDeltaTime=1;Jt.MaxDeltaTime=1e3;Jt._OriginalDefaultMaterialFactory=Jt.DefaultMaterialFactory;Ft("BABYLON.Scene",Jt)});var XU,_se,ya=M(()=>{G();XU="helperFunctions",_se=`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));} @@ -4296,11 +4296,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));} -`;T.IncludesShadersStoreWGSL[NB]||(T.IncludesShadersStoreWGSL[NB]=ese)});var ZC={};tt(ZC,{rgbdDecodePixelShaderWGSL:()=>tse});var qC,wB,tse,QC=M(()=>{G();ya();qC="rgbdDecodePixelShader",wB=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_2d; +`;A.IncludesShadersStoreWGSL[XU]||(A.IncludesShadersStoreWGSL[XU]=_se)});var ty={};tt(ty,{rgbdDecodePixelShaderWGSL:()=>gse});var ey,YU,gse,iy=M(()=>{G();ya();ey="rgbdDecodePixelShader",YU=`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);}`;T.ShadersStoreWGSL[qC]||(T.ShadersStoreWGSL[qC]=wB);tse={name:qC,shader:wB}});var FB,ise,Pa=M(()=>{G();FB="helperFunctions",ise=`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);}`;A.ShadersStoreWGSL[ey]||(A.ShadersStoreWGSL[ey]=YU);gse={name:ey,shader:YU}});var KU,vse,Pa=M(()=>{G();KU="helperFunctions",vse=`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 @@ -4418,28 +4418,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 -`;T.IncludesShadersStore[FB]||(T.IncludesShadersStore[FB]=ise)});var JC={};tt(JC,{rgbdDecodePixelShader:()=>rse});var $C,UB,rse,ey=M(()=>{G();Pa();$C="rgbdDecodePixelShader",UB=`varying vec2 vUV;uniform sampler2D textureSampler; +`;A.IncludesShadersStore[KU]||(A.IncludesShadersStore[KU]=vse)});var ny={};tt(ny,{rgbdDecodePixelShader:()=>Ese});var ry,jU,Ese,sy=M(()=>{G();Pa();ry="rgbdDecodePixelShader",jU=`varying vec2 vUV;uniform sampler2D textureSampler; #include #define CUSTOM_FRAGMENT_DEFINITIONS void main(void) -{gl_FragColor=vec4(fromRGBD(texture2D(textureSampler,vUV)),1.0);}`;T.ShadersStore[$C]||(T.ShadersStore[$C]=UB);rse={name:$C,shader:UB}});var VB={};tt(VB,{rgbdEncodePixelShader:()=>nse});var ty,BB,nse,GB=M(()=>{G();Pa();ty="rgbdEncodePixelShader",BB=`varying vec2 vUV;uniform sampler2D textureSampler; +{gl_FragColor=vec4(fromRGBD(texture2D(textureSampler,vUV)),1.0);}`;A.ShadersStore[ry]||(A.ShadersStore[ry]=jU);Ese={name:ry,shader:jU}});var ZU={};tt(ZU,{rgbdEncodePixelShader:()=>Sse});var ay,qU,Sse,QU=M(()=>{G();Pa();ay="rgbdEncodePixelShader",qU=`varying vec2 vUV;uniform sampler2D textureSampler; #include #define CUSTOM_FRAGMENT_DEFINITIONS void main(void) -{gl_FragColor=toRGBD(texture2D(textureSampler,vUV).rgb);}`;T.ShadersStore[ty]||(T.ShadersStore[ty]=BB);nse={name:ty,shader:BB}});var WB={};tt(WB,{rgbdEncodePixelShaderWGSL:()=>sse});var iy,kB,sse,HB=M(()=>{G();ya();iy="rgbdEncodePixelShader",kB=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_2d; +{gl_FragColor=toRGBD(texture2D(textureSampler,vUV).rgb);}`;A.ShadersStore[ay]||(A.ShadersStore[ay]=qU);Sse={name:ay,shader:qU}});var JU={};tt(JU,{rgbdEncodePixelShaderWGSL:()=>Tse});var oy,$U,Tse,eV=M(()=>{G();ya();oy="rgbdEncodePixelShader",$U=`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);}`;T.ShadersStoreWGSL[iy]||(T.ShadersStoreWGSL[iy]=kB);sse={name:iy,shader:kB}});var fm,ry=M(()=>{jl();DC();fm=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(()=>(QC(),ZC)):await Promise.resolve().then(()=>(ey(),JC));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(()=>(HB(),WB)):await Promise.resolve().then(()=>(GB(),VB)),await zU("rgbdEncode",e,t,i,1,5)}}});var ny=M(()=>{hC();Z_();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=Xl.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 KB(n){let e=new DataView(n.buffer,n.byteOffset,n.byteLength),t=0;for(let a=0;azB)throw new Error(`Unsupported babylon environment map version "${n.version}". Latest supported version is "${zB}".`);return n.version===2||(n={...n,version:2,imageType:wA}),n}function ase(n,e){e=hg(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=p=>{p._bindTexture("textureSampler",u),p.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 lse(n,e,t=wA){let i=n.getEngine();n.format=5,n.type=0,n.generateMipMaps=!0,n._cachedAnisotropicFilteringLevel=null,i.updateTextureSamplingMode(3,n),await qB(n,e,!0,t),n.isReady=!0}async function cse(n,e,t,i=wA,r=null){let s=n.getEngine(),a=new Di(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 qB(a,[e],!1,i),s.generateMipMapsForCubemap(a),a.isReady=!0}async function qB(n,e,t,i=wA){if(!pe.IsExponentOfTwo(n.width))throw new Error("Texture size must be a power of two");let r=j2(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(()=>(QC(),ZC))):await Promise.resolve().then(()=>(ey(),JC)),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 p=n._lodGenerationScale,_=n._lodGenerationOffset;for(let g=0;g<3;g++){let x=1-g/2,A=_,E=(r-1)*p+_,S=A+(E-A)*x,R=Math.round(Math.min(Math.max(S,0),E)),I=new Di(s,2);I.isCube=!0,I.invertY=!0,I.generateMipMaps=!1,s.updateTextureSamplingMode(2,I);let C=new pi(null);switch(C._isCube=!0,C._texture=I,f[R]=C,g){case 0:n._lodTextureLow=C;break;case 1:n._lodTextureMid=C;break;case 2:n._lodTextureHigh=C;break}}}let u=[];for(let m=0;mawait YB(E,s,a,l,x,p,m,o,f,c,n));else{let E=new Image;E.src=x,A=new Promise((S,R)=>{E.onload=()=>{YB(E,s,a,l,x,p,m,o,f,c,n).then(()=>S()).catch(I=>{R(I)})},E.onerror=I=>{R(I)}})}u.push(A)}if(await Promise.all(u),e.length{Mi();Ge();Dn();X_();Ts();Z_();bs();jl();Pt();ry();bC();ny();sm();wA="image/png",zB=2,XB=[134,22,135,150,246,214,150,54]});var $B={};tt($B,{_ENVTextureLoader:()=>sy});var sy,JB=M(()=>{QB();sy=class{constructor(){this.supportCascades=!1}loadCubeData(e,t,i,r,s){if(Array.isArray(e))return;let a=KB(e);if(a){t.width=a.width,t.height=a.width;try{ZB(t,a),jB(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 ec,eV=M(()=>{Ge();ec=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),p=t[3].subtract(t[2]).scale(d/e),_=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],p=t[u*i*s+h*s+1],_=t[u*i*s+h*s+2];return{r:m,g:p,b:_}}};ec.FACE_LEFT=[new b(-1,-1,-1),new b(1,-1,-1),new b(-1,1,-1),new b(1,1,-1)];ec.FACE_RIGHT=[new b(1,-1,1),new b(-1,-1,1),new b(1,1,1),new b(-1,1,1)];ec.FACE_FRONT=[new b(1,-1,-1),new b(1,-1,1),new b(1,1,-1),new b(1,1,1)];ec.FACE_BACK=[new b(-1,-1,1),new b(-1,-1,-1),new b(-1,1,1),new b(-1,1,-1)];ec.FACE_DOWN=[new b(1,1,-1),new b(1,1,1),new b(-1,1,-1),new b(-1,1,1)];ec.FACE_UP=[new b(-1,-1,-1),new b(-1,-1,1),new b(1,-1,-1),new b(1,-1,1)]});function fse(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 tV(n,e,t,i,r,s){r>0?(r=fse(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 ay(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 rV(n,e){return hse(n,e)}function hse(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),p=new ArrayBuffer(e.width*e.height*4*3),_=new Float32Array(p);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 dse(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{eV()});var sV={};tt(sV,{_HDRTextureLoader:()=>oy});var oy,aV=M(()=>{nV();oy=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=iV(r),a=rV(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 mo,oV=M(()=>{Pt();mo=class n{constructor(e,t){if(this.data=e,this.isInvalid=!1,!n.IsValid(e)){this.isInvalid=!0,ee.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){ee.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){ee.Error("only 2D textures currently supported"),this.isInvalid=!0;return}if(this.numberOfArrayElements!==0){ee.Error("texture arrays not currently supported"),this.isInvalid=!0;return}if(this.numberOfFaces!==t){ee.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}};mo.HEADER_LEN=64;mo.COMPRESSED_2D=0;mo.COMPRESSED_3D=1;mo.TEX_2D=2;mo.TEX_3D=3});var ly,dg,lV=M(()=>{ly=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})})}},dg=class n extends ly{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))})})}};dg.DefaultOptions={idleTimeElapsedBeforeRelease:1e3}});var cV,hm,fV,hV=M(()=>{(function(n){n[n.ETC1S=0]="ETC1S",n[n.UASTC4x4=1]="UASTC4x4"})(cV||(cV={}));(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"})(hm||(hm={}));(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"})(fV||(fV={}))});function ug(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 dV(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),ug(i)),t.data.wasmBinaries&&ug(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 uV(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 mV=M(()=>{});var cy,tc,pV=M(()=>{lV();Mi();hV();mV();cy=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:[hm.BC1_RGB,hm.BC3_RGBA],yes:{transcodeFormat:hm.RGBA32,engineFormat:32856,roundToMultiple4:!1}}}),this._ktx2DecoderOptions=e,e}},tc=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:pe.ScriptBaseUrl,jsDecoderModule:pe.GetBabylonScriptURL(this.URLConfig.jsDecoderModule,!0),wasmUASTCToASTC:pe.GetBabylonScriptURL(this.URLConfig.wasmUASTCToASTC,!0),wasmUASTCToBC7:pe.GetBabylonScriptURL(this.URLConfig.wasmUASTCToBC7,!0),wasmUASTCToRGBA_UNORM:pe.GetBabylonScriptURL(this.URLConfig.wasmUASTCToRGBA_UNORM,!0),wasmUASTCToRGBA_SRGB:pe.GetBabylonScriptURL(this.URLConfig.wasmUASTCToRGBA_SRGB,!0),wasmUASTCToR8_UNORM:pe.GetBabylonScriptURL(this.URLConfig.wasmUASTCToR8_UNORM,!0),wasmUASTCToRG8_UNORM:pe.GetBabylonScriptURL(this.URLConfig.wasmUASTCToRG8_UNORM,!0),jsMSCTranscoder:pe.GetBabylonScriptURL(this.URLConfig.jsMSCTranscoder,!0),wasmMSCTranscoder:pe.GetBabylonScriptURL(this.URLConfig.wasmMSCTranscoder,!0),wasmZSTDDecoder:pe.GetBabylonScriptURL(this.URLConfig.wasmZSTDDecoder,!0)};e&&typeof Worker=="function"&&typeof URL!="undefined"?n._WorkerPoolPromise=new Promise(i=>{let r=`${ug}(${dV})()`,s=URL.createObjectURL(new Blob([r],{type:"application/javascript"}));i(new dg(e,async()=>await uV(new Worker(s),void 0,t)))}):typeof n._KTX2DecoderModule=="undefined"?n._DecoderModulePromise=pe.LoadBabylonScriptAsync(t.jsDecoderModule).then(()=>(n._KTX2DecoderModule=KTX2DECODER,n._KTX2DecoderModule.MSCTranscoder.UseFromWorkerThread=!1,n._KTX2DecoderModule.WASMMemoryManager.LoadBinariesFromCurrentThread=!0,ug(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(p){l({message:p})}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}};tc.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};tc.DefaultNumWorkers=tc.GetDefaultNumWorkers();tc.DefaultDecoderOptions=new cy});var hy={};tt(hy,{_KTXTextureLoader:()=>fy});function use(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 fy,dy=M(()=>{oV();pV();Pt();fy=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 mo(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(mo.IsValid(e)){t._invertVScale=!t.invertY;let s=new mo(e,1),a=use(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 tc.IsValid(e)?new tc(t.getEngine())._uploadAsync(e,t,r).then(()=>{i(t.width,t.height,t.generateMipMaps,!0,()=>{},!1)},a=>{ee.Warn(`Failed to load KTX2 texture data: ${a.message}`),i(0,0,!1,!1,()=>{},!0)}):(ee.Error("texture missing KTX identifier"),i(0,0,!1,!1,()=>{},!0))}}});function FA(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 uy(n,e){if(e.length<19){ee.Error("Unable to load TGA file - Not enough data to contain header");return}let t=18,i=FA(e);if(i.id_length+t>e.length){ee.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 gse:r=!0;case mse:s=!0;break;case vse:r=!0;case pse:break;case Ese:r=!0;case _se: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,S,R=0,I=new Uint8Array(l);for(;t>Tse){default:case Rse:h=0,u=1,_=i.width,d=0,m=1,p=i.height;break;case Ase:h=0,u=1,_=i.width,d=i.height-1,m=-1,p=-1;break;case bse:h=i.width-1,u=-1,_=-1,d=0,m=1,p=i.height;break;case xse:h=i.width-1,u=-1,_=-1,d=i.height-1,m=-1,p=-1;break}let g="_getImageData"+(a?"Grey":"")+i.pixel_size+"bits",v=Dse[g](i,f,o,d,m,p,h,u,_);n.getEngine()._uploadDataToTextureDirectly(n,v)}function Ise(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(_=i;_!==s;_+=r)for(p=a;p!==l;p+=o,m++)u=c[m],g[(p+h*_)*4+3]=255,g[(p+h*_)*4+2]=f[u*3+0],g[(p+h*_)*4+1]=f[u*3+1],g[(p+h*_)*4+0]=f[u*3+2];return g}function Mse(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(p=i;p!==s;p+=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;_[(m+f*p)*4+0]=g,_[(m+f*p)*4+1]=v,_[(m+f*p)*4+2]=x,_[(m+f*p)*4+3]=d&32768?0:255}return _}function Cse(n,e,t,i,r,s,a,o,l){let c=t,f=n.width,h=n.height,d=0,u,m,p=new Uint8Array(f*h*4);for(m=i;m!==s;m+=r)for(u=a;u!==l;u+=o,d+=3)p[(u+f*m)*4+3]=255,p[(u+f*m)*4+2]=c[d+0],p[(u+f*m)*4+1]=c[d+1],p[(u+f*m)*4+0]=c[d+2];return p}function yse(n,e,t,i,r,s,a,o,l){let c=t,f=n.width,h=n.height,d=0,u,m,p=new Uint8Array(f*h*4);for(m=i;m!==s;m+=r)for(u=a;u!==l;u+=o,d+=4)p[(u+f*m)*4+2]=c[d+0],p[(u+f*m)*4+1]=c[d+1],p[(u+f*m)*4+0]=c[d+2],p[(u+f*m)*4+3]=c[d+3];return p}function Pse(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(p=i;p!==s;p+=r)for(m=a;m!==l;m+=o,u++)d=c[u],_[(m+f*p)*4+0]=d,_[(m+f*p)*4+1]=d,_[(m+f*p)*4+2]=d,_[(m+f*p)*4+3]=255;return _}function Lse(n,e,t,i,r,s,a,o,l){let c=t,f=n.width,h=n.height,d=0,u,m,p=new Uint8Array(f*h*4);for(m=i;m!==s;m+=r)for(u=a;u!==l;u+=o,d+=2)p[(u+f*m)*4+0]=c[d+0],p[(u+f*m)*4+1]=c[d+0],p[(u+f*m)*4+2]=c[d+0],p[(u+f*m)*4+3]=c[d+1];return p}var mse,pse,_se,gse,vse,Ese,Sse,Tse,Ase,xse,Rse,bse,Dse,_V=M(()=>{Pt();mse=1,pse=2,_se=3,gse=9,vse=10,Ese=11,Sse=48,Tse=4,Ase=0,xse=1,Rse=2,bse=3;Dse={GetTGAHeader:FA,UploadContent:uy,_getImageData8bits:Ise,_getImageData16bits:Mse,_getImageData24bits:Cse,_getImageData32bits:yse,_getImageDataGrey8bits:Pse,_getImageDataGrey16bits:Lse}});var gV={};tt(gV,{_TGATextureLoader:()=>my});var my,vV=M(()=>{_V();my=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=FA(r);i(s.width,s.height,t.generateMipMaps,!1,()=>{uy(t,r)})}}});var mg=M(()=>{});function Nse(){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 VA(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 po(n,e){let t=n.getInt32(e.value,!0);return e.value+=4,t}function Qs(n,e){let t=n.getUint32(e.value,!0);return e.value+=4,t}function pg(n,e){let t=n.getUint8(e.value);return e.value+=1,t}function dm(n,e){let t=n.getUint16(e.value,!0);return e.value+=2,t}function _y(n,e){let t=n[e.value];return e.value+=1,t}function TV(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 Sn(n,e){let t=n.getFloat32(e.value,!0);return e.value+=4,t}function AV(n,e){return wse(dm(n,e))}function wse(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 Fse(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),UA.floatView[0]=n;let e=UA.uint32View[0],t=e>>23&511;return UA.baseTable[t]+((e&8388607)>>UA.shiftTable[t])}function xV(n,e){return Fse(Sn(n,e))}function Use(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 Bse(n,e){let t=po(n,e),i=Qs(n,e);return[t,i]}function Vse(n,e){let t=Qs(n,e),i=Qs(n,e);return[t,i]}function Gse(n,e){let t=Sn(n,e),i=Sn(n,e);return[t,i]}function kse(n,e){let t=Sn(n,e),i=Sn(n,e),r=Sn(n,e);return[t,i,r]}function Wse(n,e,t){let i=e.value,r=[];for(;e.values||(e[r++]=n[t++],r>s));)e[r++]=n[i++]}var rl,py,UA,_g=M(()=>{Dn();mg();(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"})(rl||(rl={}));(function(n){n[n.INCREASING_Y=0]="INCREASING_Y",n[n.DECREASING_Y=1]="DECREASING_Y"})(py||(py={}));UA=Nse()});function Ey(n,e){if(n.getUint32(0,!0)!=Kse)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=VA(n.buffer,e);if(!o)a=!1;else{let l=VA(n.buffer,e),c=Qs(n,e),f=RV(n,e,l,c);f===void 0?ee.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 Kse,bV=M(()=>{Pt();_g();Kse=20000630});function OV(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 Qse(n){for(let e=0;e<16384;e++)n[e]={},n[e].len=0,n[e].lit=0,n[e].p=null}function yV(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+gg[t]>>1;gg[t]=e,e=i}for(let t=0;t<65537;++t){let i=n[t];i>0&&(n[t]=i|gg[i]++<<6)}}function Jse(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=yV(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=yV(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--}}$se(s)}function NV(n){return n&63}function wV(n){return n>>6}function eae(n,e,t,i){for(;e<=t;e++){let r=wV(n[e]),s=NV(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 tae(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 p=c>>f-14&16383,_=e[p];if(_.len){f-=_.len;let g=Sy(_.lit,s,c,f,t,i,o,l,h);g&&(c=g.c,f=g.lc)}else{if(!_.p)throw new Error("hufDecode issues");let g;for(g=0;g<_.lit;g++){let v=NV(n[_.p[g]]);for(;f=v&&wV(n[_.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 p=Sy(m.lit,s,c,f,t,i,o,l,h);p&&(c=p.c,f=p.lc)}else throw new Error("HufDecode issues")}return!0}function FV(n,e,t,i,r,s){let a={value:0},o=t.value,l=Qs(e,t),c=Qs(e,t);t.value+=4;let f=Qs(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);Qse(d);let u=i-(t.value-o);if(Jse(n,t,u,l,c,h),f>8*(i-(t.value-o)))throw new Error("Wrong hufUncompress");eae(h,l,c,d),tae(h,d,n,t,f,c,s,r,a)}function Ay(n){return n&65535}function PV(n){let e=Ay(n);return e>32767?e-65536:e}function um(n,e){let t=PV(n),r=PV(e),s=t+(r&1)+(r>>1),a=s,o=s-r;return{a,b:o}}function mm(n,e){let t=Ay(n),i=Ay(e),r=t-(i>>1)&CV;return{a:i+r-Zse&CV,b:r}}function UV(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,p=i*c,_=i*f,g,v,x,A;for(;h<=d;h+=m){let E=h,S=h+i*(t-f);for(;E<=S;E+=_){let R=E+p,I=E+u,C=I+p;if(o){let y=um(n[E+e],n[I+e]);g=y.a,x=y.b,y=um(n[R+e],n[C+e]),v=y.a,A=y.b,y=um(g,v),n[E+e]=y.a,n[R+e]=y.b,y=um(x,A),n[I+e]=y.a,n[C+e]=y.b}else{let y=mm(n[E+e],n[I+e]);g=y.a,x=y.b,y=mm(n[R+e],n[C+e]),v=y.a,A=y.b,y=mm(g,v),n[E+e]=y.a,n[R+e]=y.b,y=mm(x,A),n[I+e]=y.a,n[C+e]=y.b}}if(t&c){let R=E+u,I;o?I=um(n[E+e],n[R+e]):I=mm(n[E+e],n[R+e]),g=I.a,n[R+e]=I.b,n[E+e]=g}}if(r&c){let E=h,S=h+i*(t-f);for(;E<=S;E+=_){let R=E+p,I;o?I=um(n[E+e],n[R+e]):I=mm(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 BV(n,e,t){for(let i=0;i{_g();mg();DV=16,Zse=1<0;){let s=r.getInt8(i++);if(s<0){let a=-s;e-=a+1;for(let o=0;o{});function xy(n){return new DataView(n.array.buffer,n.offset.value,n.size)}function HV(n){let e=n.viewer.buffer.slice(n.offset.value,n.offset.value+n.size),t=new Uint8Array(GV(e)),i=new Uint8Array(t.length);return gy(t),vy(t,i),new DataView(i.buffer)}function Ry(n){let e=n.array.slice(n.offset.value,n.offset.value+n.size),t=fflate.unzlibSync(e),i=new Uint8Array(t.length);return gy(t),vy(t,i),new DataView(i.buffer)}function zV(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{VV();kV();_g();mg()});var La,nl,by=M(()=>{(function(n){n[n.Float=0]="Float",n[n.HalfFloat=1]="HalfFloat"})(La||(La={}));nl=class{};nl.DefaultOutputType=La.HalfFloat;nl.FFLATEUrl="https://unpkg.com/fflate@0.8.2"});async function Iy(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 rl.NO_COMPRESSION:r.lines=1,r.uncompress=xy;break;case rl.RLE_COMPRESSION:r.lines=1,r.uncompress=HV;break;case rl.ZIPS_COMPRESSION:r.lines=1,r.uncompress=Ry,await pe.LoadScriptAsync(nl.FFLATEUrl);break;case rl.ZIP_COMPRESSION:r.lines=16,r.uncompress=Ry,await pe.LoadScriptAsync(nl.FFLATEUrl);break;case rl.PIZ_COMPRESSION:r.lines=32,r.uncompress=XV;break;case rl.PXR24_COMPRESSION:r.lines=16,r.uncompress=zV,await pe.LoadScriptAsync(nl.FFLATEUrl);break;default:throw new Error(rl[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 La.Float:r.getter=AV,r.inputSize=2;break;case La.HalfFloat:r.getter=dm,r.inputSize=2;break}else if(r.type===2)switch(i){case La.Float:r.getter=Sn,r.inputSize=4;break;case La.HalfFloat:r.getter=xV,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 My(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{_g();YV();mg();Mi();by()});var jV={};tt(jV,{ReadExrDataAsync:()=>iae,_ExrTextureLoader:()=>Cy});async function iae(n){let e=new DataView(n),t={value:0},i=Ey(e,t);try{let r=await Iy(i,e,t,La.Float);return My(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)}:(ee.Error("Failed to decode EXR data: No byte array available."),{width:0,height:0,data:null})}catch(r){ee.Error("Failed to load EXR data: ",r)}return{width:0,height:0,data:null}}var Cy,qV=M(()=>{bV();KV();by();Pt();Cy=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=Ey(r,s);Iy(a,r,s,nl.DefaultOutputType).then(o=>{My(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=>{ee.Error("Failed to load EXR texture: ",o)})}}});function ic(n,e){rae(n)&&ee.Warn(`Extension with the name '${n}' already exists`),kA.set(n,e)}function rae(n){return kA.delete(n)}function WA(n,e){(e==="image/ktx"||e==="image/ktx2")&&(n=".ktx"),kA.has(n)||(n.endsWith(".ies")&&ic(".ies",async()=>await Promise.resolve().then(()=>(jU(),KU)).then(i=>new i._IESTextureLoader)),n.endsWith(".dds")&&ic(".dds",async()=>await Promise.resolve().then(()=>(ZU(),qU)).then(i=>new i._DDSTextureLoader)),n.endsWith(".basis")&&ic(".basis",async()=>await Promise.resolve().then(()=>(iB(),tB)).then(i=>new i._BasisTextureLoader)),n.endsWith(".env")&&ic(".env",async()=>await Promise.resolve().then(()=>(JB(),$B)).then(i=>new i._ENVTextureLoader)),n.endsWith(".hdr")&&ic(".hdr",async()=>await Promise.resolve().then(()=>(aV(),sV)).then(i=>new i._HDRTextureLoader)),(n.endsWith(".ktx")||n.endsWith(".ktx2"))&&(ic(".ktx",async()=>await Promise.resolve().then(()=>(dy(),hy)).then(i=>new i._KTXTextureLoader)),ic(".ktx2",async()=>await Promise.resolve().then(()=>(dy(),hy)).then(i=>new i._KTXTextureLoader))),n.endsWith(".tga")&&ic(".tga",async()=>await Promise.resolve().then(()=>(vV(),gV)).then(i=>new i._TGATextureLoader)),n.endsWith(".exr")&&ic(".exr",async()=>await Promise.resolve().then(()=>(qV(),jV)).then(i=>new i._ExrTextureLoader)));let t=kA.get(n);return t?Promise.resolve(t(e)):null}var kA,yy=M(()=>{Pt();kA=new Map});function ZV(n){let e=n.split("?")[0],t=e.lastIndexOf(".");return t>-1?e.substring(t).toLowerCase():""}var QV=M(()=>{});var $V=M(()=>{Ts();Pt();zl();Y_();Br();yy();QV();Me.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)};Me.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)};Me.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)};Me.prototype._partialLoadImg=function(n,e,t,i,r,s,a=null,o){let l=lf();om(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)};Me.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,p=null){let _=h||new Di(this,7);_.isCube=!0,_.url=n,_.generateMipMaps=!i,_._lodGenerationScale=c,_._lodGenerationOffset=f,_._useSRGBBuffer=!!m&&this._caps.supportSRGBBuffers&&(this.version>1||this.isWebGPU||!!i),_!==h&&(_.label=n.substring(0,60)),this._doNotHandleContextLost||(_._extension=o,_._files=t,_._buffer=p);let g=n;this._transformTextureUrl&&!h&&(n=this._transformTextureUrl(n));let v=o!=null?o:ZV(n),x=WA(v),A=(S,R)=>{_.dispose(),s?s(S,R):S&&ee.Warn(S)},E=(S,R)=>{n===g?S&&A(S.status+" "+S.statusText,R):(ee.Warn(`Failed to load ${n}, falling back to the ${g}`),this.createCubeTextureBase(g,e,t,!!i,r,A,a,o,l,c,f,_,d,u,m,p))};if(x)x.then(S=>{let R=I=>{d&&d(_,I),S.loadCubeData(I,_,l,r,(C,y)=>{A(C,y)})};p?R(p):t&&t.length===6?S.supportCascades?this._cascadeLoadFiles(e,I=>R(I.map(C=>new Uint8Array(C))),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,_,(S,R)=>{u&&u(S,R)},t,A)}return this._internalTexturesCache.push(_),_}});var pG={};tt(pG,{DDSTools:()=>lo});function HA(n){return n.charCodeAt(0)+(n.charCodeAt(1)<<8)+(n.charCodeAt(2)<<16)+(n.charCodeAt(3)<<24)}function sae(n){return String.fromCharCode(n&255,n>>8&255,n>>16&255,n>>24&255)}var nae,JV,eG,tG,iG,rG,nG,sG,aG,Py,oG,lG,cG,fG,aae,Ly,oae,lae,hG,dG,Dy,uG,Oy,mG,cae,fae,hae,dae,uae,mae,pae,lo,UC=M(()=>{Dn();Pt();hC();DC();$V();nae=542327876,JV=131072,eG=512,tG=4,iG=64,rG=131072;nG=HA("DXT1"),sG=HA("DXT3"),aG=HA("DXT5"),Py=HA("DX10"),oG=113,lG=116,cG=2,fG=10,aae=88,Ly=31,oae=0,lae=1,hG=2,dG=3,Dy=4,uG=7,Oy=20,mG=21,cae=22,fae=23,hae=24,dae=25,uae=26,mae=28,pae=32,lo=class n{static GetDDSInfo(e){let t=new Int32Array(e.buffer,e.byteOffset,Ly),i=new Int32Array(e.buffer,e.byteOffset,Ly+4),r=1;t[hG]&JV&&(r=Math.max(1,t[uG]));let s=t[mG],a=s===Py?i[pae]:0,o=0;switch(s){case oG:o=2;break;case lG:o=1;break;case Py:if(a===fG){o=2;break}if(a===cG){o=1;break}}return{width:t[Dy],height:t[dG],mipmapCount:r,isFourCC:(t[Oy]&tG)===tG,isRGB:(t[Oy]&iG)===iG,isLuminance:(t[Oy]&rG)===rG,isCube:(t[mae]&eG)===eG,isCompressed:s===nG||s===sG||s===aG,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=Xl.ConvertCubeMapToSphericalPolynomial({size:d[Dy],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}};lo.StoreLODInAlphaChannel=!1});var _G=M(()=>{Zn();Ts();Pt();X_();Z_();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 $o,h._source=9,this.getCaps().textureLOD){r&&r(h);return}let d=3,u=this._gl,m=f.width;if(!m)return;let{DDSTools:p}=await Promise.resolve().then(()=>(UC(),pG)),_=[];for(let v=0;v{Zn();KT();bt.prototype.createUniformBuffer=function(n,e){let t=this._gl.createBuffer();if(!t)throw new Error("Unable to create uniform buffer");let i=new qo(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 qo(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 vG=M(()=>{Ea();Br();Me.prototype.displayLoadingUI=function(){if(!dr())return;let n=this.loadingScreen;n&&n.displayLoadingUI()};Me.prototype.hideLoadingUI=function(){if(!dr())return;let n=this._loadingScreen;n&&n.hideLoadingUI()};Object.defineProperty(Me.prototype,"loadingScreen",{get:function(){return!this._loadingScreen&&this._renderingCanvas&&(this._loadingScreen=Me.DefaultLoadingScreenFactory(this._renderingCanvas)),this._loadingScreen},set:function(n){this._loadingScreen=n},enumerable:!0,configurable:!0});Object.defineProperty(Me.prototype,"loadingUIText",{set:function(n){this.loadingScreen.loadingUIText=n},enumerable:!0,configurable:!0});Object.defineProperty(Me.prototype,"loadingUIBackgroundColor",{set:function(n){this.loadingScreen.loadingUIBackgroundColor=n},enumerable:!0,configurable:!0})});var EG=M(()=>{Br();Me.prototype.getInputElement=function(){return this._renderingCanvas};Me.prototype.getRenderingCanvasClientRect=function(){return this._renderingCanvas?this._renderingCanvas.getBoundingClientRect():null};Me.prototype.getInputElementClientRect=function(){return this._renderingCanvas?this.getInputElement().getBoundingClientRect():null};Me.prototype.getAspectRatio=function(n,e=!1){let t=n.viewport;return this.getRenderWidth(e)*t.width/(this.getRenderHeight(e)*t.height)};Me.prototype.getScreenAspectRatio=function(){return this.getRenderWidth(!0)/this.getRenderHeight(!0)};Me.prototype._verifyPointerLock=function(){var n;(n=this._onPointerLockChange)==null||n.call(this)}});var Ny=M(()=>{Br();Me.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 SG=M(()=>{Br();Ny();Me.prototype.getInputElement=function(){return this._renderingCanvas};Me.prototype.getDepthFunction=function(){return this._depthCullingState.depthFunc};Me.prototype.setDepthFunction=function(n){this._depthCullingState.depthFunc=n};Me.prototype.setDepthFunctionToGreater=function(){this.setDepthFunction(516)};Me.prototype.setDepthFunctionToGreaterOrEqual=function(){this.setDepthFunction(518)};Me.prototype.setDepthFunctionToLess=function(){this.setDepthFunction(513)};Me.prototype.setDepthFunctionToLessOrEqual=function(){this.setDepthFunction(515)};Me.prototype.getDepthWrite=function(){return this._depthCullingState.depthMask};Me.prototype.setDepthWrite=function(n){this._depthCullingState.depthMask=n};Me.prototype.setAlphaConstants=function(n,e,t,i){this._alphaState.setAlphaBlendConstants(n,e,t,i)};Me.prototype.getAlphaMode=function(n=0){return this._alphaMode[n]};Me.prototype.getAlphaEquation=function(n=0){return this._alphaEquation[n]}});var TG=M(()=>{Br();Ny();Me.prototype.getStencilBuffer=function(){return this._stencilState.stencilTest};Me.prototype.setStencilBuffer=function(n){this._stencilState.stencilTest=n};Me.prototype.getStencilMask=function(){return this._stencilState.stencilMask};Me.prototype.setStencilMask=function(n){this._stencilState.stencilMask=n};Me.prototype.getStencilFunction=function(){return this._stencilState.stencilFunc};Me.prototype.getStencilBackFunction=function(){return this._stencilState.stencilBackFunc};Me.prototype.getStencilFunctionReference=function(){return this._stencilState.stencilFuncRef};Me.prototype.getStencilFunctionMask=function(){return this._stencilState.stencilFuncMask};Me.prototype.setStencilFunction=function(n){this._stencilState.stencilFunc=n};Me.prototype.setStencilBackFunction=function(n){this._stencilState.stencilBackFunc=n};Me.prototype.setStencilFunctionReference=function(n){this._stencilState.stencilFuncRef=n};Me.prototype.setStencilFunctionMask=function(n){this._stencilState.stencilFuncMask=n};Me.prototype.getStencilOperationFail=function(){return this._stencilState.stencilOpStencilFail};Me.prototype.getStencilBackOperationFail=function(){return this._stencilState.stencilBackOpStencilFail};Me.prototype.getStencilOperationDepthFail=function(){return this._stencilState.stencilOpDepthFail};Me.prototype.getStencilBackOperationDepthFail=function(){return this._stencilState.stencilBackOpDepthFail};Me.prototype.getStencilOperationPass=function(){return this._stencilState.stencilOpStencilDepthPass};Me.prototype.getStencilBackOperationPass=function(){return this._stencilState.stencilBackOpStencilDepthPass};Me.prototype.setStencilOperationFail=function(n){this._stencilState.stencilOpStencilFail=n};Me.prototype.setStencilBackOperationFail=function(n){this._stencilState.stencilBackOpStencilFail=n};Me.prototype.setStencilOperationDepthFail=function(n){this._stencilState.stencilOpDepthFail=n};Me.prototype.setStencilBackOperationDepthFail=function(n){this._stencilState.stencilBackOpDepthFail=n};Me.prototype.setStencilOperationPass=function(n){this._stencilState.stencilOpStencilDepthPass=n};Me.prototype.setStencilBackOperationPass=function(n){this._stencilState.stencilBackOpStencilDepthPass=n};Me.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()};Me.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 AG=M(()=>{Br();Me.prototype.getRenderPassNames=function(){return this._renderPassNames};Me.prototype.getCurrentRenderPassName=function(){return this._renderPassNames[this.currentRenderPassId]};Me.prototype.createRenderPassId=function(n){let e=++Me._RenderPassIdCounter;return this._renderPassNames[e]=n!=null?n:"NONAME",e};Me.prototype.releaseRenderPassId=function(n){this._renderPassNames[n]=void 0;for(let e=0;e{Br();Me.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 RG=M(()=>{yy();Br();Me.GetCompatibleTextureLoader=WA});function _ae(n){!n||!n.setAttribute||(n.setAttribute("touch-action","none"),n.style.touchAction="none",n.style.webkitTapHighlightColor="transparent")}function bG(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||_ae(e),!Me.audioEngine&&t.audioEngine&&Me.AudioEngineFactory&&(Me.audioEngine=Me.AudioEngineFactory(n.getRenderingCanvas(),n.getAudioContext(),n.getAudioDestination())),sf()&&(n._onFullscreenChange=()=>{n.isFullscreen=!!document.fullscreenElement,n.isFullscreen&&n._pointerLockRequested&&e&&wy(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=Me.OfflineProviderFactory!==void 0,n._deterministicLockstep=!!t.deterministicLockstep,n._lockstepMaxSteps=t.lockstepMaxSteps||0,n._timeStep=t.timeStep||1/60}function IG(n,e){Oe.Instances.length===1&&Me.audioEngine&&(Me.audioEngine.dispose(),Me.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)),sf()&&(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 MG(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 CG(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 yG(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 PG(n){let e=n.requestFullscreen||n.webkitRequestFullscreen;e&&e.call(n)}function LG(){let n=document;document.exitFullscreen?document.exitFullscreen():n.webkitCancelFullScreen&&n.webkitCancelFullScreen()}function wy(n){if(n.requestPointerLock){let e=n.requestPointerLock();e instanceof Promise?e.then(()=>{n.focus()}).catch(()=>{}):n.focus()}}function DG(){document.exitPointerLock&&document.exitPointerLock()}var OG=M(()=>{Ea();Br();Oi()});var Be,Fy=M(()=>{Ts();Oi();Zn();P2();KT();Pt();QM();L2();w2();F2();U2();B2();k2();W2();H2();_G();gG();vG();EG();SG();TG();AG();tC();xG();RG();Br();OG();jC();jo();Be=class n extends bt{static get NpmPackage(){return Me.NpmPackage}static get Version(){return Me.Version}static get Instances(){return Oe.Instances}static get LastCreatedEngine(){return Oe.LastCreatedEngine}static get LastCreatedScene(){return Oe.LastCreatedScene}static DefaultLoadingScreenFactory(e){return Me.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 qT,this._drawCalls=new il,e&&(this._features.supportRenderPasses=!0)}_initGLContext(){super._initGLContext(),this._rescalePostProcess=null}_sharedInit(e){super._sharedInit(e),bG(this,e,this._creationOptions)}resizeImageBitmap(e,t,i){return yG(this,e,t,i)}async _createImageBitmapFromSource(e,t){return await CG(this,e,t)}switchFullscreen(e){this.isFullscreen?this.exitFullscreen():this.enterFullscreen(e)}enterFullscreen(e){this.isFullscreen||(this._pointerLockRequested=e,this._renderingCanvas&&PG(this._renderingCanvas))}exitFullscreen(){this.isFullscreen&&LG()}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 MG(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&&wy(this._renderingCanvas)}exitPointerlock(){DG()}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 Hu(e,this._gl),o=new Di(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){ee.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 qo(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(),IG(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 Uy,_i,$s=M(()=>{Gt();Ge();Vt();di();Oi();hn();Ar();Uy=class{constructor(){this._doNotSerialize=!1,this._isDisposed=!1,this._sceneRootNodesIndex=-1,this._isEnabled=!0,this._isParentEnabled=!0,this._isReady=!0,this._onEnabledStateChangedObservable=new ie,this._onClonedObservable=new ie,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 Uy,this.state="",this.metadata=null,this.reservedDataStore=null,this._accessibilityTag=null,this.onAccessibilityTagChangedObservable=new ie,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=j.Identity(),this._worldMatrixDeterminant=0,this._worldMatrixDeterminantIsDirty=!0,this._animationPropertiesOverride=null,this._isNode=!0,this.onDisposeObservable=new ie,this._onDisposeObserver=null,this._behaviors=new Array,this.name=e,this.id=e,this._scene=t||Oe.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 Ze("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 By(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 NG(n=25){let e;return(t,i,r)=>{let s=performance.now();e===void 0||s-e>n?(e=s,setTimeout(()=>{By(t,i,r)},0)):By(t,i,r)}}function wG(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 Eg(n,e){let t;return wG(n,By,i=>t=i,i=>{throw i},e),t}async function FG(n,e,t){return await new Promise((i,r)=>{wG(n,e,i,r,t)})}function UG(n,e){return(...t)=>Eg(n(...t),e)}var Vy=M(()=>{});var mt,sl=M(()=>{Gt();Vt();oo();Mi();di();Ge();$s();Pt();zi();hn();em();eA();Ar();mt=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 no(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 ie,this.onProjectionMatrixChangedObservable=new ie,this.onAfterCheckInputsObservable=new ie,this.onRestoreStateObservable=new ie,this.isRigCamera=!1,this._hasMoved=!1,this._rigCameras=new Array,this._skipRendering=!1,this._projectionMatrix=new j,this._postProcesses=new Array,this._activeMeshes=new Bi(256),this._globalPosition=b.Zero(),this._computedViewMatrix=j.Identity(),this._doNotComputeProjectionMatrix=!1,this._transformMatrix=j.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?(ee.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 j.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,S,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 C;r.useRightHandedSystem?C=j.PerspectiveFovRHToRef:C=j.PerspectiveFovLHToRef,C(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 C=i.getRenderWidth()/2,y=i.getRenderHeight()/2;r.useRightHandedSystem?this.oblique?j.ObliqueOffCenterRHToRef((a=this.orthoLeft)!=null?a:-C,(o=this.orthoRight)!=null?o:C,(l=this.orthoBottom)!=null?l:-y,(c=this.orthoTop)!=null?c:y,s?t:this.minZ,s?this.minZ:t,this.oblique.length,this.oblique.angle,this._computeObliqueDistance(this.oblique.offset),this._projectionMatrix,i.isNDCHalfZRange):j.OrthoOffCenterRHToRef((f=this.orthoLeft)!=null?f:-C,(h=this.orthoRight)!=null?h:C,(d=this.orthoBottom)!=null?d:-y,(u=this.orthoTop)!=null?u:y,s?t:this.minZ,s?this.minZ:t,this._projectionMatrix,i.isNDCHalfZRange):this.oblique?j.ObliqueOffCenterLHToRef((m=this.orthoLeft)!=null?m:-C,(p=this.orthoRight)!=null?p:C,(_=this.orthoBottom)!=null?_:-y,(g=this.orthoTop)!=null?g:y,s?t:this.minZ,s?this.minZ:t,this.oblique.length,this.oblique.angle,this._computeObliqueDistance(this.oblique.offset),this._projectionMatrix,i.isNDCHalfZRange):j.OrthoOffCenterLHToRef((v=this.orthoLeft)!=null?v:-C,(x=this.orthoRight)!=null?x:C,(A=this.orthoBottom)!=null?A:-y,(E=this.orthoTop)!=null?E:y,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=(S=this.oblique)==null?void 0:S.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?of.GetPlanesToRef(this._transformMatrix,this._frustumPlanes):this._frustumPlanes=of.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 Ze("Ray")}getForwardRayToRef(e,t=100,i,r){throw Ze("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=pe.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 j.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=pe.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=it.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 Ze("UniversalCamera")};mt.PERSPECTIVE_CAMERA=0;mt.ORTHOGRAPHIC_CAMERA=1;mt.FOVMODE_VERTICAL_FIXED=0;mt.FOVMODE_HORIZONTAL_FIXED=1;mt.RIG_MODE_NONE=0;mt.RIG_MODE_STEREOSCOPIC_ANAGLYPH=10;mt.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL=11;mt.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED=12;mt.RIG_MODE_STEREOSCOPIC_OVERUNDER=13;mt.RIG_MODE_STEREOSCOPIC_INTERLACED=14;mt.RIG_MODE_VR=20;mt.RIG_MODE_CUSTOM=22;mt.ForceAttachControlToAlwaysPreventDefault=!1;P([zr("position")],mt.prototype,"_position",void 0);P([zr("upVector")],mt.prototype,"_upVector",void 0);P([F()],mt.prototype,"orthoLeft",null);P([F()],mt.prototype,"orthoRight",null);P([F()],mt.prototype,"orthoBottom",null);P([F()],mt.prototype,"orthoTop",null);P([F()],mt.prototype,"fov",void 0);P([F()],mt.prototype,"projectionPlaneTilt",void 0);P([F()],mt.prototype,"minZ",void 0);P([F()],mt.prototype,"maxZ",void 0);P([F()],mt.prototype,"inertia",void 0);P([F()],mt.prototype,"mode",null);P([F()],mt.prototype,"layerMask",void 0);P([F()],mt.prototype,"fovMode",void 0);P([F()],mt.prototype,"cameraRigMode",void 0);P([F()],mt.prototype,"interaxialDistance",void 0);P([F()],mt.prototype,"isStereoscopicSideBySide",void 0);P([F()],mt.prototype,"ignoreCameraMaxZ",void 0)});var qh,Gy=M(()=>{qh=class{constructor(e,t,i){this.bu=e,this.bv=t,this.distance=i,this.faceId=0,this.subMeshId=0,this._internalSubMeshId=0}}});var Ef,ky=M(()=>{Zo();Ge();Ln();Ef=class n{constructor(e,t,i){this.vectors=dn(8,b.Zero),this.center=b.Zero(),this.centerWorld=b.Zero(),this.extendSize=b.Zero(),this.extendSizeWorld=b.Zero(),this.directions=dn(3,b.Zero),this.vectorsWorld=dn(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||j.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,p=t.y,_=t.z;return!(lm||cp||f_)}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}};Ef._TmpVector3=dn(3,b.Zero)});var pm,BG=M(()=>{Zo();Ge();pm=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||j.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{Zo();Ge();ky();BG();Wy={min:0,max:0},Hy={min:0,max:0},VG=(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},es=(n,e,t)=>(VG(n,e,Wy),VG(n,t,Hy),!(Wy.min>Hy.max||Hy.min>Wy.max)),un=class n{constructor(e,t,i){this._isLocked=!1,this.boundingBox=new Ef(e,t,i),this.boundingSphere=new pm(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(!pm.Intersects(this.boundingSphere,e.boundingSphere)||!Ef.Intersects(this.boundingBox,e.boundingBox))return!1;if(!t)return!0;let i=this.boundingBox,r=e.boundingBox;return!(!es(i.directions[0],i,r)||!es(i.directions[1],i,r)||!es(i.directions[2],i,r)||!es(r.directions[0],i,r)||!es(r.directions[1],i,r)||!es(r.directions[2],i,r)||!es(b.Cross(i.directions[0],r.directions[0]),i,r)||!es(b.Cross(i.directions[0],r.directions[1]),i,r)||!es(b.Cross(i.directions[0],r.directions[2]),i,r)||!es(b.Cross(i.directions[1],r.directions[0]),i,r)||!es(b.Cross(i.directions[1],r.directions[1]),i,r)||!es(b.Cross(i.directions[1],r.directions[2]),i,r)||!es(b.Cross(i.directions[2],r.directions[0]),i,r)||!es(b.Cross(i.directions[2],r.directions[1]),i,r)||!es(b.Cross(i.directions[2],r.directions[2]),i,r))}};un._TmpVector3=dn(2,b.Zero)});function GG(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 gm.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 zA(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),gm.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 gm,XA=M(()=>{Gt();Ge();Vt();gm=class{static extractMinAndMaxIndexed(e,t,i,r,s,a){for(let o=i;o!Array.isArray(n[0])&&!Array.isArray(n[1]))],gm,"extractMinAndMaxIndexed",null);P([xs.filter((...n)=>!Array.isArray(n[0]))],gm,"extractMinAndMax",null)});var Is,Sg=M(()=>{ki();Gy();_m();XA();kh();Is=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 $n(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=GG(e,t,this.indexStart,this.indexCount,this._renderingMesh.geometry.boundingBias);return this._boundingInfo?this._boundingInfo.reConstruct(i.minimum,i.maximum):this._boundingInfo=new un(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 Tg,Ce,mr=M(()=>{Gt();Ge();ki();hn();zt();Pt();Vt();Vy();K_();Sg();Tg=class{},Ce=class n{constructor(){this.uniqueId=0,this.metadata={},this._applyTo=UG(this._applyToCoroutine.bind(this)),this.uniqueId=n._UniqueIdGenerator,n._UniqueIdGenerator++}set(e,t){switch(e.length||ee.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 Is(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 Eg(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,S=[];for(let I of this.splitBasedOnMaterialID())S.push({vertexData:I,transform:e});for(let I of t)if(I.vertexData)for(let C of I.vertexData.splitBasedOnMaterialID())S.push({vertexData:C,transform:I.transform});S.sort((I,C)=>{let y=I.vertexData.materialInfos?I.vertexData.materialInfos[0].materialIndex:0,D=C.vertexData.materialInfos?C.vertexData.materialInfos[0].materialIndex:0;return y>D?1:y===D?0:-1});for(let I of S){let C=I.vertexData;if(C.materialInfos?g=C.materialInfos[0].materialIndex:g=0,E&&E.materialIndex===g)E.indexCount+=C.indices.length,E.verticesCount+=C.positions.length/3;else{let y=new Tg;y.materialIndex=g,y.indexStart=v,y.indexCount=C.indices.length,y.verticesStart=x,y.verticesCount=C.positions.length/3,A.push(y),E=y}v+=C.indices.length,x+=C.positions.length/3}let R=S.splice(0,1)[0];c=R.vertexData,e=R.transform,l=S.map(I=>I.vertexData),t=S,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)?(p=c.indices)==null?void 0:p.slice():c.indices;if(f>0){let g=(_=d==null?void 0:d.length)!=null?_: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]))],Ce,"_TransformVector3Coordinates",null);P([xs.filter((...n)=>!Array.isArray(n[0]))],Ce,"_TransformVector3Normals",null);P([xs.filter((...n)=>!Array.isArray(n[0]))],Ce,"_TransformVector4Normals",null);P([xs.filter((...n)=>!Array.isArray(n[0]))],Ce,"_FlipFaces",null)});var Yr,YA=M(()=>{Yr=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}};Yr._ForceFullSceneLoadingForIncremental=!1;Yr._ShowLoadingScreen=!0;Yr._CleanBoneMatrixWeights=!1;Yr._LoggingLevel=0});var mn,KA=M(()=>{Ge();zt();mr();ki();Sg();YA();_m();Mi();df();XA();Oi();tn();sm();mn=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||Oe.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=zA(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 p=hU(o,c,f,h,d,m,!0),_=new L(this._engine,p,s,{updatable:l,useBytes:!1,stride:c,size:c,offset:0,type:f,normalized:u,takeBufferOwnership:!0,instanced:a.getIsInstanced()});t.setVerticesBuffer(_,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 un(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 pe.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(Mt)for(let l=1;l0){let o=new Float32Array(e,a.uvs2AttrDesc.offset,a.uvs2AttrDesc.count);if(Mt)for(let l=1;l0){let o=new Float32Array(e,a.uvs3AttrDesc.offset,a.uvs3AttrDesc.count);if(Mt)for(let l=1;l0){let o=new Float32Array(e,a.uvs4AttrDesc.offset,a.uvs4AttrDesc.count);if(Mt)for(let l=1;l0){let o=new Float32Array(e,a.uvs5AttrDesc.offset,a.uvs5AttrDesc.count);if(Mt)for(let l=1;l0){let o=new Float32Array(e,a.uvs6AttrDesc.offset,a.uvs6AttrDesc.count);if(Mt)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 p=0;p<4;p++)o[h+p]*=m;if(l)for(let p=0;p<4;p++)l[h+p]*=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 un(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=Ce.ImportVertexData):Ce.ImportVertexData(e,r),t.pushGeometry(r,!0),r}}});var ei,Zh=M(()=>{Gt();Vt();Ar();di();Ge();$s();zi();ei=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=j.Zero(),this._usePivotMatrix=!1,this._absolutePosition=b.Zero(),this._absoluteScaling=b.Zero(),this._absoluteRotationQuaternion=ze.Identity(),this._pivotMatrix=j.Identity(),this._postMultiplyPivotMatrix=!1,this._isWorldMatrixFrozen=!1,this._indexInSceneTransformNodesArray=-1,this.onAfterWorldMatrixUpdateObservable=new ie,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=j.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=j.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(j.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];j.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)),j.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(j.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),j.TranslationToRef(r.x,r.y,r.z,l),j.TranslationToRef(-r.x,-r.y,-r.z,c),j.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];j.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 j.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),j.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 p=Z.Vector3[1];Z.Quaternion[0].toEulerAnglesToRef(p),(this.billboardMode&n.BILLBOARDMODE_X)!==n.BILLBOARDMODE_X&&(p.x=0),(this.billboardMode&n.BILLBOARDMODE_Y)!==n.BILLBOARDMODE_Y&&(p.y=0),(this.billboardMode&n.BILLBOARDMODE_Z)!==n.BILLBOARDMODE_Z&&(p.z=0),j.RotationYawPitchRollToRef(p.y,p.x,p.z,Z.Matrix[0])}else j.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),j.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=j.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(j.FromArray(e.localMatrix)):e.pivotMatrix&&r.setPivotMatrix(j.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)}};ei.BILLBOARDMODE_NONE=0;ei.BILLBOARDMODE_X=1;ei.BILLBOARDMODE_Y=2;ei.BILLBOARDMODE_Z=4;ei.BILLBOARDMODE_ALL=7;ei.BILLBOARDMODE_USE_POSITION=128;ei.BillboardUseParentOrientation=!1;ei._TmpRotation=ze.Zero();ei._TmpScaling=b.Zero();ei._TmpTranslation=b.Zero();ei._TmpRHRestore=j.Scaling(1,1,-1);ei._LookAtVectorCache=new b(0,0,0);ei._RotationAxisCache=new ze;P([zr("position")],ei.prototype,"_position",void 0);P([zr("rotation")],ei.prototype,"_rotation",void 0);P([sU("rotationQuaternion")],ei.prototype,"_rotationQuaternion",void 0);P([zr("scaling")],ei.prototype,"_scaling",void 0);P([F("billboardMode")],ei.prototype,"_billboardMode",void 0);P([F()],ei.prototype,"scalingDeterminant",void 0);P([F("infiniteDistance")],ei.prototype,"_infiniteDistance",void 0);P([F()],ei.prototype,"ignoreNonUniformScaling",void 0);P([F()],ei.prototype,"reIntegrateRotationIntoRotationQuaternion",void 0)});var jA,kG=M(()=>{Ge();jA=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 WG(n){return Math.floor(n/8)}function HG(n){return 1<{qA=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=WG(e),i=HG(e);return(this._byteArray[t]&i)!==0}set(e,t){if(e>=this.size)throw new RangeError("Bit index out of range");let i=WG(e),r=HG(e);t?this._byteArray[i]|=r:this._byteArray[i]&=~r}}});var XG={};tt(XG,{OptimizeIndices:()=>gae});function gae(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{zG()});function vae(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&&(j.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&&(j.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 zy,Xy,Er,vm=M(()=>{Gt();di();Ge();ki();mr();Zh();sg();_m();mf();kG();hn();XA();zt();Ln();Yu();zi();Vt();Br();zy=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}},Xy=class{constructor(){this._hasVertexAlpha=!1,this._useVertexColors=!0,this._numBoneInfluencers=4,this._applyFog=!0,this._receiveShadows=!1,this._facetData=new zy,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 jA,this._enableDistantPicking=!1,this._rawBoundingInfo=null,this._sideOrientationHint=!1,this._wasActiveLastFrame=!1}},Er=class n extends ei{static get BILLBOARDMODE_NONE(){return ei.BILLBOARDMODE_NONE}static get BILLBOARDMODE_X(){return ei.BILLBOARDMODE_X}static get BILLBOARDMODE_Y(){return ei.BILLBOARDMODE_Y}static get BILLBOARDMODE_Z(){return ei.BILLBOARDMODE_Z}static get BILLBOARDMODE_ALL(){return ei.BILLBOARDMODE_ALL}static get BILLBOARDMODE_USE_POSITION(){return ei.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 Xy,this._waitingMaterialId=null,this._waitingMorphTargetManagerId=null,this._waitingSkeletonId=null,this._waitingSkeletonUniqueId=null,this.cullingStrategy=n.CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY,this.onCollideObservable=new ie,this.onCollisionPositionChangeObservable=new ie,this.onMaterialChangedObservable=new ie,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=ge.Red(),this.outlineWidth=.02,this.overlayColor=ge.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 ie,this._onCollisionPositionChange=(i,r,s=null)=>{r.subtractToRef(this._internalAbstractMeshDataInfo._meshCollisionData._oldPositionForCollisions,this._internalAbstractMeshDataInfo._meshCollisionData._diffPositionForCollisions),this._internalAbstractMeshDataInfo._meshCollisionData._diffPositionForCollisions.length()>Me.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 ur(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!==ei.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 un(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===ei.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 j;(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=zA(e,0,this.getTotalVertices(),t);this._boundingInfo?this._boundingInfo.reConstruct(i.minimum,i.maximum):this._boundingInfo=new un(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&&vae(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 j.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 Jn,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 p=0;p1&&!a&&!_.canIntersects(e))continue;let g=_.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&&Ce.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,S,R;for(let I=0;I=0||s&&!a&&h<=0)&&(h=S.x*R.x+S.y*R.y+S.z*R.z,d=-(S.x*e+S.y*t+S.z*i-h)/(S.x*S.x+S.y*S.y+S.z*S.z),u=e+S.x*d,m=t+S.y*d,p=i+S.z*d,l=u-e,c=m-t,f=p-i,A=l*l+c*c+f*f,A(YG(),XG));return t(e),this.setIndices(e,this.getTotalVertices()),this}alignWithNormal(e,t){t||(t=As.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 Ze("EdgesRenderer")}enableEdgesRendering(e,t,i){throw Ze("EdgesRenderer")}getConnectedParticleSystems(){return this._scene.particleSystems.filter(e=>e.emitter===this)}};Er.OCCLUSION_TYPE_NONE=0;Er.OCCLUSION_TYPE_OPTIMISTIC=1;Er.OCCLUSION_TYPE_STRICT=2;Er.OCCLUSION_ALGORITHM_TYPE_ACCURATE=0;Er.OCCLUSION_ALGORITHM_TYPE_CONSERVATIVE=1;Er.CULLINGSTRATEGY_STANDARD=0;Er.CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY=1;Er.CULLINGSTRATEGY_OPTIMISTIC_INCLUSION=2;Er.CULLINGSTRATEGY_OPTIMISTIC_INCLUSION_THEN_BSPHERE_ONLY=3;Er.DefaultIsPickable=!0;P([xs.filter((...n)=>!Array.isArray(n[0])&&!Array.isArray(n[3])&&!Array.isArray(n[4])&&!Array.isArray(n[5])&&!Array.isArray(n[6]))],Er,"_ApplySkeleton",null);Ft("BABYLON.AbstractMesh",Er)});var Nn,KG=M(()=>{Gt();Ar();Vt();Nn=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){it.Clone(()=>e,this)}serialize(){return it.Serialize(this)}parse(e,t,i){it.Parse(()=>this,e,t,i)}};P([F()],Nn.prototype,"func",null);P([F()],Nn.prototype,"backFunc",null);P([F()],Nn.prototype,"funcRef",null);P([F()],Nn.prototype,"funcMask",null);P([F()],Nn.prototype,"opStencilFail",null);P([F()],Nn.prototype,"opDepthFail",null);P([F()],Nn.prototype,"opStencilDepthPass",null);P([F()],Nn.prototype,"backOpStencilFail",null);P([F()],Nn.prototype,"backOpDepthFail",null);P([F()],Nn.prototype,"backOpStencilDepthPass",null);P([F()],Nn.prototype,"mask",null);P([F()],Nn.prototype,"enabled",null)});function wn(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 al(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 jG(n,e,t){var f,h,d,u,m,p;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=!!((p=n.clipPlane6)!=null?p: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 Fn(n,e,t){var r,s,a,o,l,c;let i=(r=e.clipPlane)!=null?r:t.clipPlane;Em(n,"vClipPlane",i),i=(s=e.clipPlane2)!=null?s:t.clipPlane2,Em(n,"vClipPlane2",i),i=(a=e.clipPlane3)!=null?a:t.clipPlane3,Em(n,"vClipPlane3",i),i=(o=e.clipPlane4)!=null?o:t.clipPlane4,Em(n,"vClipPlane4",i),i=(l=e.clipPlane5)!=null?l:t.clipPlane5,Em(n,"vClipPlane5",i),i=(c=e.clipPlane6)!=null?c:t.clipPlane6,Em(n,"vClipPlane6",i)}function Em(n,e,t){var i;if(t){let r=((i=Ma.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 ol=M(()=>{lg();Ge()});var ce,Da=M(()=>{Br();ce=class{static get DiffuseTextureEnabled(){return this._DiffuseTextureEnabled}static set DiffuseTextureEnabled(e){this._DiffuseTextureEnabled!==e&&(this._DiffuseTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get BaseWeightTextureEnabled(){return this._BaseWeightTextureEnabled}static set BaseWeightTextureEnabled(e){this._BaseWeightTextureEnabled!==e&&(this._BaseWeightTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get BaseDiffuseRoughnessTextureEnabled(){return this._BaseDiffuseRoughnessTextureEnabled}static set BaseDiffuseRoughnessTextureEnabled(e){this._BaseDiffuseRoughnessTextureEnabled!==e&&(this._BaseDiffuseRoughnessTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get DetailTextureEnabled(){return this._DetailTextureEnabled}static set DetailTextureEnabled(e){this._DetailTextureEnabled!==e&&(this._DetailTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get DecalMapEnabled(){return this._DecalMapEnabled}static set DecalMapEnabled(e){this._DecalMapEnabled!==e&&(this._DecalMapEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get AmbientTextureEnabled(){return this._AmbientTextureEnabled}static set AmbientTextureEnabled(e){this._AmbientTextureEnabled!==e&&(this._AmbientTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get OpacityTextureEnabled(){return this._OpacityTextureEnabled}static set OpacityTextureEnabled(e){this._OpacityTextureEnabled!==e&&(this._OpacityTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get ReflectionTextureEnabled(){return this._ReflectionTextureEnabled}static set ReflectionTextureEnabled(e){this._ReflectionTextureEnabled!==e&&(this._ReflectionTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get EmissiveTextureEnabled(){return this._EmissiveTextureEnabled}static set EmissiveTextureEnabled(e){this._EmissiveTextureEnabled!==e&&(this._EmissiveTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get SpecularTextureEnabled(){return this._SpecularTextureEnabled}static set SpecularTextureEnabled(e){this._SpecularTextureEnabled!==e&&(this._SpecularTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get BumpTextureEnabled(){return this._BumpTextureEnabled}static set BumpTextureEnabled(e){this._BumpTextureEnabled!==e&&(this._BumpTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get LightmapTextureEnabled(){return this._LightmapTextureEnabled}static set LightmapTextureEnabled(e){this._LightmapTextureEnabled!==e&&(this._LightmapTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get RefractionTextureEnabled(){return this._RefractionTextureEnabled}static set RefractionTextureEnabled(e){this._RefractionTextureEnabled!==e&&(this._RefractionTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get ColorGradingTextureEnabled(){return this._ColorGradingTextureEnabled}static set ColorGradingTextureEnabled(e){this._ColorGradingTextureEnabled!==e&&(this._ColorGradingTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get FresnelEnabled(){return this._FresnelEnabled}static set FresnelEnabled(e){this._FresnelEnabled!==e&&(this._FresnelEnabled=e,Me.MarkAllMaterialsAsDirty(4))}static get ClearCoatTextureEnabled(){return this._ClearCoatTextureEnabled}static set ClearCoatTextureEnabled(e){this._ClearCoatTextureEnabled!==e&&(this._ClearCoatTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get ClearCoatBumpTextureEnabled(){return this._ClearCoatBumpTextureEnabled}static set ClearCoatBumpTextureEnabled(e){this._ClearCoatBumpTextureEnabled!==e&&(this._ClearCoatBumpTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get ClearCoatTintTextureEnabled(){return this._ClearCoatTintTextureEnabled}static set ClearCoatTintTextureEnabled(e){this._ClearCoatTintTextureEnabled!==e&&(this._ClearCoatTintTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get SheenTextureEnabled(){return this._SheenTextureEnabled}static set SheenTextureEnabled(e){this._SheenTextureEnabled!==e&&(this._SheenTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get AnisotropicTextureEnabled(){return this._AnisotropicTextureEnabled}static set AnisotropicTextureEnabled(e){this._AnisotropicTextureEnabled!==e&&(this._AnisotropicTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get ThicknessTextureEnabled(){return this._ThicknessTextureEnabled}static set ThicknessTextureEnabled(e){this._ThicknessTextureEnabled!==e&&(this._ThicknessTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get RefractionIntensityTextureEnabled(){return this._ThicknessTextureEnabled}static set RefractionIntensityTextureEnabled(e){this._RefractionIntensityTextureEnabled!==e&&(this._RefractionIntensityTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get TranslucencyIntensityTextureEnabled(){return this._TranslucencyIntensityTextureEnabled}static set TranslucencyIntensityTextureEnabled(e){this._TranslucencyIntensityTextureEnabled!==e&&(this._TranslucencyIntensityTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get TranslucencyColorTextureEnabled(){return this._TranslucencyColorTextureEnabled}static set TranslucencyColorTextureEnabled(e){this._TranslucencyColorTextureEnabled!==e&&(this._TranslucencyColorTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get IridescenceTextureEnabled(){return this._IridescenceTextureEnabled}static set IridescenceTextureEnabled(e){this._IridescenceTextureEnabled!==e&&(this._IridescenceTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}};ce._DiffuseTextureEnabled=!0;ce._BaseWeightTextureEnabled=!0;ce._BaseDiffuseRoughnessTextureEnabled=!0;ce._DetailTextureEnabled=!0;ce._DecalMapEnabled=!0;ce._AmbientTextureEnabled=!0;ce._OpacityTextureEnabled=!0;ce._ReflectionTextureEnabled=!0;ce._EmissiveTextureEnabled=!0;ce._SpecularTextureEnabled=!0;ce._BumpTextureEnabled=!0;ce._LightmapTextureEnabled=!0;ce._RefractionTextureEnabled=!0;ce._ColorGradingTextureEnabled=!0;ce._FresnelEnabled=!0;ce._ClearCoatTextureEnabled=!0;ce._ClearCoatBumpTextureEnabled=!0;ce._ClearCoatTintTextureEnabled=!0;ce._SheenTextureEnabled=!0;ce._AnisotropicTextureEnabled=!0;ce._ThicknessTextureEnabled=!0;ce._RefractionIntensityTextureEnabled=!0;ce._TranslucencyIntensityTextureEnabled=!0;ce._TranslucencyColorTextureEnabled=!0;ce._IridescenceTextureEnabled=!0});function Sf(n,e,t){if(!n||n.LOGARITHMICDEPTH||n.indexOf&&n.indexOf("LOGARITHMICDEPTH")>=0){let i=t.activeCamera;i.mode===1&&ee.Error("Logarithmic depth is not compatible with orthographic cameras!",20),e.setFloat("logarithmicDepthConstant",2/(Math.log(i.maxZ+1)/Math.LN2))}}var qG=M(()=>{Pt()});function Tf(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(ZG,n.getEngine().useExactSrgbConversions),t.setColor3("vFogColor",ZG)):t.setColor3("vFogColor",n.fogColor))}function ll(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"),Qh.NUM_MORPH_INFLUENCERS=f,Qh.NORMAL=s,Qh.TANGENT=a,Qh.UV=o,Qh.UV2=l,Qh.COLOR=c,$h(t,i,Qh,r),f)}function $h(n,e,t,i=!0){let r=t.NUM_MORPH_INFLUENCERS;if(r>0&&Oe.LastCreatedEngine){let s=Oe.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&&ee.Error("Cannot add more vertex attributes for mesh "+e.name)}}function _o(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 Un(n,e){let t=n.morphTargetManager;!n||!t||e.setFloatArray("morphTargetInfluences",t.influences)}function Af(n,e){e.bindToEffect(n,"Scene")}function Sm(n,e,t,i,r=null,s=!1,a=!1,o=!1,l=!1,c=!1,f=!1,h=0){if(n.texturesEnabled&&r&&ce.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 ZA(n,e,t,i=null,r=!1){if(i&&ce.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 ni(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 si(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 Sae(n,e){return e.set(n),e}function Ms(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]),Sae(r,t.previousBones[n.uniqueId])))}}}function Tae(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 Rm(n,e){(e.INSTANCES||e.THIN_INSTANCES)&&_o(n,!!e.PREPASS_VELOCITY),e.INSTANCESCOLOR&&n.push("instanceColor")}function bm(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 Aae(n,e){return e.fogEnabled&&n.applyFog&&e.fogMode!==0}function Im(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&&Aae(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 Mm(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===_e.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 _e.EXPLICIT_MODE:t.REFLECTIONMAP_EXPLICIT=!0;break;case _e.PLANAR_MODE:t.REFLECTIONMAP_PLANAR=!0;break;case _e.PROJECTION_MODE:t.REFLECTIONMAP_PROJECTION=!0;break;case _e.SKYBOX_MODE:t.REFLECTIONMAP_SKYBOX=!0;break;case _e.SPHERICAL_MODE:t.REFLECTIONMAP_SPHERICAL=!0;break;case _e.EQUIRECTANGULAR_MODE:t.REFLECTIONMAP_EQUIRECTANGULAR=!0;break;case _e.FIXED_EQUIRECTANGULAR_MODE:t.REFLECTIONMAP_EQUIRECTANGULAR_FIXED=!0;break;case _e.FIXED_EQUIRECTANGULAR_MIRRORED_MODE:t.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED=!0;break;case _e.CUBIC_MODE:case _e.INVCUBIC_MODE:default:t.REFLECTIONMAP_CUBIC=!0,t.USE_LOCAL_REFLECTIONMAP_CUBIC=!!e.boundingBoxSize;break}e.coordinatesMode!==_e.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 xae(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 ym(n,e,t,i,r,s=null,a=!1){let o=Mae(n,i);s!==!1&&(o=jG(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 Rae(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 bae(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 Iae(n,e){let t=n.bakedVertexAnimationManager;e.BAKED_VERTEX_ANIMATION_TEXTURE=!!(t&&t.isEnabled)}function Pm(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&&Rae(n,e),r&&bae(n,e),a&&Iae(n,e),!0}function Lm(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 Om(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();Oi();J_();ol();Da();Vr();qG();ZG={r:0,g:0,b:0},Qh={NUM_MORPH_INFLUENCERS:0,NORMAL:!1,TANGENT:!1,UV:!1,UV2:!1,COLOR:!1}});var Ee,Vn=M(()=>{Gt();Vt();Mi();di();Oi();Sg();mf();Pt();Qu();kh();KG();Bn();Ar();jM();Ee=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 ie),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 ie),this._onUnBindObservable}get onEffectCreatedObservable(){return this._onEffectCreatedObservable||(this._onEffectCreatedObservable=new ie),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&&ee.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 ie,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 Nn,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||Oe.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||pe.RandomId(),this.uniqueId=this._scene.getUniqueId(),this._materialContext=this._scene.getEngine().createMaterialContext(),this._drawWrapper=new $n(this._scene.getEngine(),!1),this._drawWrapper.materialContext=this._materialContext,this._uniformBuffer=new ur(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 ur(e,void 0,void 0,this.name,!0),this._shaderLanguage=1):this._uniformBuffer=new ur(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 zT(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,Af(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 ro(0,0,0,1)),this._storeEffectOnSubMeshes){let f=!0,h=null;if(e.subMeshes){let d=new Is(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();Ee._ImageProcessingDirtyCallBack=n=>n.markAsImageProcessingDirty();Ee._TextureDirtyCallBack=n=>n.markAsTexturesDirty();Ee._FresnelDirtyCallBack=n=>n.markAsFresnelDirty();Ee._MiscDirtyCallBack=n=>n.markAsMiscDirty();Ee._PrePassDirtyCallBack=n=>n.markAsPrePassDirty();Ee._LightsDirtyCallBack=n=>n.markAsLightDirty();Ee._AttributeDirtyCallBack=n=>n.markAsAttributesDirty();Ee._FresnelAndMiscDirtyCallBack=n=>{Ee._FresnelDirtyCallBack(n),Ee._MiscDirtyCallBack(n)};Ee._TextureAndMiscDirtyCallBack=n=>{Ee._TextureDirtyCallBack(n),Ee._MiscDirtyCallBack(n)};Ee._DirtyCallbackArray=[];Ee._RunDirtyCallBacks=n=>{for(let e of Ee._DirtyCallbackArray)e(n)};P([F()],Ee.prototype,"id",void 0);P([F()],Ee.prototype,"uniqueId",void 0);P([F()],Ee.prototype,"name",void 0);P([F()],Ee.prototype,"metadata",void 0);P([F()],Ee.prototype,"checkReadyOnEveryCall",void 0);P([F()],Ee.prototype,"checkReadyOnlyOnce",void 0);P([F()],Ee.prototype,"state",void 0);P([F("alpha")],Ee.prototype,"_alpha",void 0);P([F("backFaceCulling")],Ee.prototype,"_backFaceCulling",void 0);P([F("cullBackFaces")],Ee.prototype,"_cullBackFaces",void 0);P([F()],Ee.prototype,"sideOrientation",void 0);P([F()],Ee.prototype,"_alphaMode",void 0);P([F()],Ee.prototype,"_needDepthPrePass",void 0);P([F()],Ee.prototype,"disableDepthWrite",void 0);P([F()],Ee.prototype,"disableColorWrite",void 0);P([F()],Ee.prototype,"forceDepthWrite",void 0);P([F()],Ee.prototype,"depthFunction",void 0);P([F()],Ee.prototype,"separateCullingPass",void 0);P([F("fogEnabled")],Ee.prototype,"_fogEnabled",void 0);P([F()],Ee.prototype,"pointSize",void 0);P([F()],Ee.prototype,"zOffset",void 0);P([F()],Ee.prototype,"zOffsetUnits",void 0);P([F()],Ee.prototype,"pointsCloud",null);P([F()],Ee.prototype,"fillMode",null);P([F()],Ee.prototype,"useLogarithmicDepth",null);P([F()],Ee.prototype,"_isVertexOutputInvariant",void 0);P([F()],Ee.prototype,"transparencyMode",null)});var Fm,QG=M(()=>{Vn();df();zi();Fm=class n extends Ee{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}};Ft("BABYLON.MultiMaterial",Fm)});var QA,$G=M(()=>{QA=class{constructor(e,t){this.distanceOrScreenCoverage=e,this.mesh=t}}});var Um,$A,Yy,JA,Ky,jy,cl,q,Ci=M(()=>{di();Mi();Q_();df();Vy();sl();Ge();zt();$s();ki();mr();KA();vm();Sg();Vn();QG();YA();Ar();Pt();zi();hn();lm();$G();Um=class{},$A=class{constructor(){this.batchCache=new JA(this),this.batchCacheReplacementModeInFrozenMode=new JA(this),this.instancesBufferSize=512*4}},Yy=class{constructor(){this.renderPasses={}}},JA=class{constructor(e){this.parent=e,this.mustReturn=!1,this.visibleInstances=new Array,this.renderSelf=[],this.hardwareInstancedRendering=[]}},Ky=class{constructor(){this.instancesCount=0,this.matrixBuffer=null,this.previousMatrixBuffer=null,this.matrixBufferSize=512,this.matrixData=null,this.boundingVectors=[],this.worldMatrices=null}},jy=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}},cl={source:null,parent:null,doNotCloneChildren:!1,clonePhysicsImpostor:!0,cloneThinInstances:!1},q=class n extends Er{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 ie),this._internalMeshDataInfo._onBeforeRenderObservable}get onBeforeBindObservable(){return this._internalMeshDataInfo._onBeforeBindObservable||(this._internalMeshDataInfo._onBeforeBindObservable=new ie),this._internalMeshDataInfo._onBeforeBindObservable}get onAfterRenderObservable(){return this._internalMeshDataInfo._onAfterRenderObservable||(this._internalMeshDataInfo._onAfterRenderObservable=new ie),this._internalMeshDataInfo._onAfterRenderObservable}get onBetweenPassObservable(){return this._internalMeshDataInfo._onBetweenPassObservable||(this._internalMeshDataInfo._onBetweenPassObservable=new ie),this._internalMeshDataInfo._onBetweenPassObservable}get onBeforeDrawObservable(){return this._internalMeshDataInfo._onBeforeDrawObservable||(this._internalMeshDataInfo._onBeforeDrawObservable=new ie),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),tl.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&&_&&(this._uniformBuffer?this.transferToEffect(p):_.bindOnlyWorldMatrix(p))};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 ie(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 ee.Warn("You cannot use a mesh as LOD level twice"),this;let i=new QA(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 p of this.subMeshes){let _=p.getMaterial();if(_){if(_._storeEffectOnSubMeshes){if(!_.isReadyForSubMesh(this,p,s))return!1}else if(!_.isReady(this,s))return!1}}else if(!a.isReady(this,s))return!1}let o=i.currentRenderPassId;for(let p of this.lightSources){let _=p.getShadowGenerators();if(!_)continue;let g=_.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 S=0;S0){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 Is(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++)Is.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 Ce;s.set(t,e);let a=this.getScene();new mn(mn.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=mn.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;Ce.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(mn.RandomId());return e.releaseForMesh(this,!0),t.applyToMesh(this),this}setIndexBuffer(e,t,i,r=null){let s=this._geometry;s||(s=new mn(mn.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 Ce;s.indices=e;let a=this.getScene();new mn(mn.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)this._getRenderingFillMode(i)===Ee.WireFrameFillMode?a=e._getLinesIndexBuffer(this.getIndices(),s):a=null;else switch(this._getRenderingFillMode(i)){case Ee.PointFillMode:a=null;break;case Ee.WireFrameFillMode:a=e._getLinesIndexBuffer(this.getIndices(),s);break;default:case Ee.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!==Ee.WireFrameFillMode||t==Ee.PointFillMode?s.drawArraysType(t,e.verticesStart,e.verticesCount,this.forcedInstanceCount||i):t==Ee.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,p=t.renderSelf[e._id],_=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(p){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]-_.x,c.instancesData[u+13]=A[13]-_.y,c.instancesData[u+14]=A[14]-_.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>S._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,p=e.getMaterial();if(!p)return h&&(h.maxZ=f,r.updateTransformMatrix(!0)),this;if(!m.isFrozen||!this._internalMeshDataInfo._effectiveMaterial||this._internalMeshDataInfo._effectiveMaterial!==p){if(p._storeEffectOnSubMeshes){if(!p.isReadyForSubMesh(this,e,u))return h&&(h.maxZ=f,r.updateTransformMatrix(!0)),this}else if(!p.isReady(this,u))return h&&(h.maxZ=f,r.updateTransformMatrix(!0)),this;this._internalMeshDataInfo._effectiveMaterial=p}else if(p._storeEffectOnSubMeshes&&!((y=e._drawWrapper)!=null&&y._wasPreviouslyReady)||!p._storeEffectOnSubMeshes&&!p._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 S=0;Sf&&o++}}let h=this.skeleton.bones.length,d=this.getVerticesData(L.MatricesIndicesKind),u=this.getVerticesData(L.MatricesIndicesExtraKind),m=0;for(let _=0;_=h||v<0)&&m++}let p="Number of Weights = "+i/4+` +fn main(input: FragmentInputs)->FragmentOutputs {fragmentOutputs.color=toRGBD(textureSample(textureSampler,textureSamplerSampler,input.vUV).rgb);}`;A.ShadersStoreWGSL[oy]||(A.ShadersStoreWGSL[oy]=$U);Tse={name:oy,shader:$U}});var fm,ly=M(()=>{jl();BC();fm=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(()=>(iy(),ty)):await Promise.resolve().then(()=>(sy(),ny));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(()=>(eV(),JU)):await Promise.resolve().then(()=>(QU(),ZU)),await tU("rgbdEncode",e,t,i,1,5)}}});var cy=M(()=>{_C();Q_();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=Xl.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 nV(n){let e=new DataView(n.buffer,n.byteOffset,n.byteLength),t=0;for(let a=0;atV)throw new Error(`Unsupported babylon environment map version "${n.version}". Latest supported version is "${tV}".`);return n.version===2||(n={...n,version:2,imageType:GA}),n}function Ase(n,e){e=dg(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=p=>{p._bindTexture("textureSampler",u),p.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 Rse(n,e,t=GA){let i=n.getEngine();n.format=5,n.type=0,n.generateMipMaps=!0,n._cachedAnisotropicFilteringLevel=null,i.updateTextureSamplingMode(3,n),await aV(n,e,!0,t),n.isReady=!0}async function bse(n,e,t,i=GA,r=null){let s=n.getEngine(),a=new Oi(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 aV(a,[e],!1,i),s.generateMipMapsForCubemap(a),a.isReady=!0}async function aV(n,e,t,i=GA){if(!_e.IsExponentOfTwo(n.width))throw new Error("Texture size must be a power of two");let r=sB(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(()=>(iy(),ty))):await Promise.resolve().then(()=>(sy(),ny)),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 p=n._lodGenerationScale,_=n._lodGenerationOffset;for(let g=0;g<3;g++){let x=1-g/2,T=_,E=(r-1)*p+_,S=T+(E-T)*x,R=Math.round(Math.min(Math.max(S,0),E)),I=new Oi(s,2);I.isCube=!0,I.invertY=!0,I.generateMipMaps=!1,s.updateTextureSamplingMode(2,I);let C=new pi(null);switch(C._isCube=!0,C._texture=I,f[R]=C,g){case 0:n._lodTextureLow=C;break;case 1:n._lodTextureMid=C;break;case 2:n._lodTextureHigh=C;break}}}let u=[];for(let m=0;mawait rV(E,s,a,l,x,p,m,o,f,c,n));else{let E=new Image;E.src=x,T=new Promise((S,R)=>{E.onload=()=>{rV(E,s,a,l,x,p,m,o,f,c,n).then(()=>S()).catch(I=>{R(I)})},E.onerror=I=>{R(I)}})}u.push(T)}if(await Promise.all(u),e.length{Ci();Ge();On();Y_();Rs();Q_();Cs();jl();Pt();ly();PC();cy();sm();GA="image/png",tV=2,iV=[134,22,135,150,246,214,150,54]});var cV={};tt(cV,{_ENVTextureLoader:()=>fy});var fy,fV=M(()=>{lV();fy=class{constructor(){this.supportCascades=!1}loadCubeData(e,t,i,r,s){if(Array.isArray(e))return;let a=nV(e);if(a){t.width=a.width,t.height=a.width;try{oV(t,a),sV(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 ec,hV=M(()=>{Ge();ec=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),p=t[3].subtract(t[2]).scale(d/e),_=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],p=t[u*i*s+h*s+1],_=t[u*i*s+h*s+2];return{r:m,g:p,b:_}}};ec.FACE_LEFT=[new b(-1,-1,-1),new b(1,-1,-1),new b(-1,1,-1),new b(1,1,-1)];ec.FACE_RIGHT=[new b(1,-1,1),new b(-1,-1,1),new b(1,1,1),new b(-1,1,1)];ec.FACE_FRONT=[new b(1,-1,-1),new b(1,-1,1),new b(1,1,-1),new b(1,1,1)];ec.FACE_BACK=[new b(-1,-1,1),new b(-1,-1,-1),new b(-1,1,1),new b(-1,1,-1)];ec.FACE_DOWN=[new b(1,1,-1),new b(1,1,1),new b(-1,1,-1),new b(-1,1,1)];ec.FACE_UP=[new b(-1,-1,-1),new b(-1,-1,1),new b(1,-1,-1),new b(1,-1,1)]});function Ise(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 dV(n,e,t,i,r,s){r>0?(r=Ise(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 hy(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 mV(n,e){return Mse(n,e)}function Mse(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),p=new ArrayBuffer(e.width*e.height*4*3),_=new Float32Array(p);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 Cse(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{hV()});var _V={};tt(_V,{_HDRTextureLoader:()=>dy});var dy,gV=M(()=>{pV();dy=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=uV(r),a=mV(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 po,vV=M(()=>{Pt();po=class n{constructor(e,t){if(this.data=e,this.isInvalid=!1,!n.IsValid(e)){this.isInvalid=!0,ee.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){ee.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){ee.Error("only 2D textures currently supported"),this.isInvalid=!0;return}if(this.numberOfArrayElements!==0){ee.Error("texture arrays not currently supported"),this.isInvalid=!0;return}if(this.numberOfFaces!==t){ee.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}};po.HEADER_LEN=64;po.COMPRESSED_2D=0;po.COMPRESSED_3D=1;po.TEX_2D=2;po.TEX_3D=3});var uy,ug,EV=M(()=>{uy=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})})}},ug=class n extends uy{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))})})}};ug.DefaultOptions={idleTimeElapsedBeforeRelease:1e3}});var SV,hm,TV,AV=M(()=>{(function(n){n[n.ETC1S=0]="ETC1S",n[n.UASTC4x4=1]="UASTC4x4"})(SV||(SV={}));(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"})(hm||(hm={}));(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"})(TV||(TV={}))});function mg(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 xV(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),mg(i)),t.data.wasmBinaries&&mg(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 RV(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 bV=M(()=>{});var my,tc,IV=M(()=>{EV();Ci();AV();bV();my=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:[hm.BC1_RGB,hm.BC3_RGBA],yes:{transcodeFormat:hm.RGBA32,engineFormat:32856,roundToMultiple4:!1}}}),this._ktx2DecoderOptions=e,e}},tc=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:_e.ScriptBaseUrl,jsDecoderModule:_e.GetBabylonScriptURL(this.URLConfig.jsDecoderModule,!0),wasmUASTCToASTC:_e.GetBabylonScriptURL(this.URLConfig.wasmUASTCToASTC,!0),wasmUASTCToBC7:_e.GetBabylonScriptURL(this.URLConfig.wasmUASTCToBC7,!0),wasmUASTCToRGBA_UNORM:_e.GetBabylonScriptURL(this.URLConfig.wasmUASTCToRGBA_UNORM,!0),wasmUASTCToRGBA_SRGB:_e.GetBabylonScriptURL(this.URLConfig.wasmUASTCToRGBA_SRGB,!0),wasmUASTCToR8_UNORM:_e.GetBabylonScriptURL(this.URLConfig.wasmUASTCToR8_UNORM,!0),wasmUASTCToRG8_UNORM:_e.GetBabylonScriptURL(this.URLConfig.wasmUASTCToRG8_UNORM,!0),jsMSCTranscoder:_e.GetBabylonScriptURL(this.URLConfig.jsMSCTranscoder,!0),wasmMSCTranscoder:_e.GetBabylonScriptURL(this.URLConfig.wasmMSCTranscoder,!0),wasmZSTDDecoder:_e.GetBabylonScriptURL(this.URLConfig.wasmZSTDDecoder,!0)};e&&typeof Worker=="function"&&typeof URL!="undefined"?n._WorkerPoolPromise=new Promise(i=>{let r=`${mg}(${xV})()`,s=URL.createObjectURL(new Blob([r],{type:"application/javascript"}));i(new ug(e,async()=>await RV(new Worker(s),void 0,t)))}):typeof n._KTX2DecoderModule=="undefined"?n._DecoderModulePromise=_e.LoadBabylonScriptAsync(t.jsDecoderModule).then(()=>(n._KTX2DecoderModule=KTX2DECODER,n._KTX2DecoderModule.MSCTranscoder.UseFromWorkerThread=!1,n._KTX2DecoderModule.WASMMemoryManager.LoadBinariesFromCurrentThread=!0,mg(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(p){l({message:p})}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}};tc.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};tc.DefaultNumWorkers=tc.GetDefaultNumWorkers();tc.DefaultDecoderOptions=new my});var _y={};tt(_y,{_KTXTextureLoader:()=>py});function yse(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 py,gy=M(()=>{vV();IV();Pt();py=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 po(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(po.IsValid(e)){t._invertVScale=!t.invertY;let s=new po(e,1),a=yse(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 tc.IsValid(e)?new tc(t.getEngine())._uploadAsync(e,t,r).then(()=>{i(t.width,t.height,t.generateMipMaps,!0,()=>{},!1)},a=>{ee.Warn(`Failed to load KTX2 texture data: ${a.message}`),i(0,0,!1,!1,()=>{},!0)}):(ee.Error("texture missing KTX identifier"),i(0,0,!1,!1,()=>{},!0))}}});function kA(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 vy(n,e){if(e.length<19){ee.Error("Unable to load TGA file - Not enough data to contain header");return}let t=18,i=kA(e);if(i.id_length+t>e.length){ee.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 Ose:r=!0;case Pse:s=!0;break;case Nse:r=!0;case Lse:break;case wse:r=!0;case Dse: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 T,E,S,R=0,I=new Uint8Array(l);for(;t>Bse){default:case Gse:h=0,u=1,_=i.width,d=0,m=1,p=i.height;break;case Use:h=0,u=1,_=i.width,d=i.height-1,m=-1,p=-1;break;case kse:h=i.width-1,u=-1,_=-1,d=0,m=1,p=i.height;break;case Vse:h=i.width-1,u=-1,_=-1,d=i.height-1,m=-1,p=-1;break}let g="_getImageData"+(a?"Grey":"")+i.pixel_size+"bits",v=jse[g](i,f,o,d,m,p,h,u,_);n.getEngine()._uploadDataToTextureDirectly(n,v)}function Wse(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(_=i;_!==s;_+=r)for(p=a;p!==l;p+=o,m++)u=c[m],g[(p+h*_)*4+3]=255,g[(p+h*_)*4+2]=f[u*3+0],g[(p+h*_)*4+1]=f[u*3+1],g[(p+h*_)*4+0]=f[u*3+2];return g}function Hse(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(p=i;p!==s;p+=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;_[(m+f*p)*4+0]=g,_[(m+f*p)*4+1]=v,_[(m+f*p)*4+2]=x,_[(m+f*p)*4+3]=d&32768?0:255}return _}function zse(n,e,t,i,r,s,a,o,l){let c=t,f=n.width,h=n.height,d=0,u,m,p=new Uint8Array(f*h*4);for(m=i;m!==s;m+=r)for(u=a;u!==l;u+=o,d+=3)p[(u+f*m)*4+3]=255,p[(u+f*m)*4+2]=c[d+0],p[(u+f*m)*4+1]=c[d+1],p[(u+f*m)*4+0]=c[d+2];return p}function Xse(n,e,t,i,r,s,a,o,l){let c=t,f=n.width,h=n.height,d=0,u,m,p=new Uint8Array(f*h*4);for(m=i;m!==s;m+=r)for(u=a;u!==l;u+=o,d+=4)p[(u+f*m)*4+2]=c[d+0],p[(u+f*m)*4+1]=c[d+1],p[(u+f*m)*4+0]=c[d+2],p[(u+f*m)*4+3]=c[d+3];return p}function Yse(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(p=i;p!==s;p+=r)for(m=a;m!==l;m+=o,u++)d=c[u],_[(m+f*p)*4+0]=d,_[(m+f*p)*4+1]=d,_[(m+f*p)*4+2]=d,_[(m+f*p)*4+3]=255;return _}function Kse(n,e,t,i,r,s,a,o,l){let c=t,f=n.width,h=n.height,d=0,u,m,p=new Uint8Array(f*h*4);for(m=i;m!==s;m+=r)for(u=a;u!==l;u+=o,d+=2)p[(u+f*m)*4+0]=c[d+0],p[(u+f*m)*4+1]=c[d+0],p[(u+f*m)*4+2]=c[d+0],p[(u+f*m)*4+3]=c[d+1];return p}var Pse,Lse,Dse,Ose,Nse,wse,Fse,Bse,Use,Vse,Gse,kse,jse,MV=M(()=>{Pt();Pse=1,Lse=2,Dse=3,Ose=9,Nse=10,wse=11,Fse=48,Bse=4,Use=0,Vse=1,Gse=2,kse=3;jse={GetTGAHeader:kA,UploadContent:vy,_getImageData8bits:Wse,_getImageData16bits:Hse,_getImageData24bits:zse,_getImageData32bits:Xse,_getImageDataGrey8bits:Yse,_getImageDataGrey16bits:Kse}});var CV={};tt(CV,{_TGATextureLoader:()=>Ey});var Ey,yV=M(()=>{MV();Ey=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=kA(r);i(s.width,s.height,t.generateMipMaps,!1,()=>{vy(t,r)})}}});var pg=M(()=>{});function Zse(){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 zA(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 _o(n,e){let t=n.getInt32(e.value,!0);return e.value+=4,t}function $s(n,e){let t=n.getUint32(e.value,!0);return e.value+=4,t}function _g(n,e){let t=n.getUint8(e.value);return e.value+=1,t}function dm(n,e){let t=n.getUint16(e.value,!0);return e.value+=2,t}function Ty(n,e){let t=n[e.value];return e.value+=1,t}function DV(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 Tn(n,e){let t=n.getFloat32(e.value,!0);return e.value+=4,t}function OV(n,e){return Qse(dm(n,e))}function Qse(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 $se(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),WA.floatView[0]=n;let e=WA.uint32View[0],t=e>>23&511;return WA.baseTable[t]+((e&8388607)>>WA.shiftTable[t])}function NV(n,e){return $se(Tn(n,e))}function Jse(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 eae(n,e){let t=_o(n,e),i=$s(n,e);return[t,i]}function tae(n,e){let t=$s(n,e),i=$s(n,e);return[t,i]}function iae(n,e){let t=Tn(n,e),i=Tn(n,e);return[t,i]}function rae(n,e){let t=Tn(n,e),i=Tn(n,e),r=Tn(n,e);return[t,i,r]}function nae(n,e,t){let i=e.value,r=[];for(;e.values||(e[r++]=n[t++],r>s));)e[r++]=n[i++]}var nl,Sy,WA,gg=M(()=>{On();pg();(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"})(nl||(nl={}));(function(n){n[n.INCREASING_Y=0]="INCREASING_Y",n[n.DECREASING_Y=1]="DECREASING_Y"})(Sy||(Sy={}));WA=Zse()});function Ry(n,e){if(n.getUint32(0,!0)!=cae)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=zA(n.buffer,e);if(!o)a=!1;else{let l=zA(n.buffer,e),c=$s(n,e),f=wV(n,e,l,c);f===void 0?ee.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 cae,FV=M(()=>{Pt();gg();cae=20000630});function zV(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 uae(n){for(let e=0;e<16384;e++)n[e]={},n[e].len=0,n[e].lit=0,n[e].p=null}function GV(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+vg[t]>>1;vg[t]=e,e=i}for(let t=0;t<65537;++t){let i=n[t];i>0&&(n[t]=i|vg[i]++<<6)}}function pae(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=GV(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=GV(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--}}mae(s)}function XV(n){return n&63}function YV(n){return n>>6}function _ae(n,e,t,i){for(;e<=t;e++){let r=YV(n[e]),s=XV(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 gae(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 p=c>>f-14&16383,_=e[p];if(_.len){f-=_.len;let g=by(_.lit,s,c,f,t,i,o,l,h);g&&(c=g.c,f=g.lc)}else{if(!_.p)throw new Error("hufDecode issues");let g;for(g=0;g<_.lit;g++){let v=XV(n[_.p[g]]);for(;f=v&&YV(n[_.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 p=by(m.lit,s,c,f,t,i,o,l,h);p&&(c=p.c,f=p.lc)}else throw new Error("HufDecode issues")}return!0}function KV(n,e,t,i,r,s){let a={value:0},o=t.value,l=$s(e,t),c=$s(e,t);t.value+=4;let f=$s(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);uae(d);let u=i-(t.value-o);if(pae(n,t,u,l,c,h),f>8*(i-(t.value-o)))throw new Error("Wrong hufUncompress");_ae(h,l,c,d),gae(h,d,n,t,f,c,s,r,a)}function My(n){return n&65535}function kV(n){let e=My(n);return e>32767?e-65536:e}function um(n,e){let t=kV(n),r=kV(e),s=t+(r&1)+(r>>1),a=s,o=s-r;return{a,b:o}}function mm(n,e){let t=My(n),i=My(e),r=t-(i>>1)&VV;return{a:i+r-dae&VV,b:r}}function jV(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,p=i*c,_=i*f,g,v,x,T;for(;h<=d;h+=m){let E=h,S=h+i*(t-f);for(;E<=S;E+=_){let R=E+p,I=E+u,C=I+p;if(o){let y=um(n[E+e],n[I+e]);g=y.a,x=y.b,y=um(n[R+e],n[C+e]),v=y.a,T=y.b,y=um(g,v),n[E+e]=y.a,n[R+e]=y.b,y=um(x,T),n[I+e]=y.a,n[C+e]=y.b}else{let y=mm(n[E+e],n[I+e]);g=y.a,x=y.b,y=mm(n[R+e],n[C+e]),v=y.a,T=y.b,y=mm(g,v),n[E+e]=y.a,n[R+e]=y.b,y=mm(x,T),n[I+e]=y.a,n[C+e]=y.b}}if(t&c){let R=E+u,I;o?I=um(n[E+e],n[R+e]):I=mm(n[E+e],n[R+e]),g=I.a,n[R+e]=I.b,n[E+e]=g}}if(r&c){let E=h,S=h+i*(t-f);for(;E<=S;E+=_){let R=E+p,I;o?I=um(n[E+e],n[R+e]):I=mm(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 qV(n,e,t){for(let i=0;i{gg();pg();HV=16,dae=1<0;){let s=r.getInt8(i++);if(s<0){let a=-s;e-=a+1;for(let o=0;o{});function Cy(n){return new DataView(n.array.buffer,n.offset.value,n.size)}function eG(n){let e=n.viewer.buffer.slice(n.offset.value,n.offset.value+n.size),t=new Uint8Array(QV(e)),i=new Uint8Array(t.length);return Ay(t),xy(t,i),new DataView(i.buffer)}function yy(n){let e=n.array.slice(n.offset.value,n.offset.value+n.size),t=fflate.unzlibSync(e),i=new Uint8Array(t.length);return Ay(t),xy(t,i),new DataView(i.buffer)}function tG(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{ZV();$V();gg();pg()});var La,sl,Py=M(()=>{(function(n){n[n.Float=0]="Float",n[n.HalfFloat=1]="HalfFloat"})(La||(La={}));sl=class{};sl.DefaultOutputType=La.HalfFloat;sl.FFLATEUrl="https://unpkg.com/fflate@0.8.2"});async function Ly(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 nl.NO_COMPRESSION:r.lines=1,r.uncompress=Cy;break;case nl.RLE_COMPRESSION:r.lines=1,r.uncompress=eG;break;case nl.ZIPS_COMPRESSION:r.lines=1,r.uncompress=yy,await _e.LoadScriptAsync(sl.FFLATEUrl);break;case nl.ZIP_COMPRESSION:r.lines=16,r.uncompress=yy,await _e.LoadScriptAsync(sl.FFLATEUrl);break;case nl.PIZ_COMPRESSION:r.lines=32,r.uncompress=iG;break;case nl.PXR24_COMPRESSION:r.lines=16,r.uncompress=tG,await _e.LoadScriptAsync(sl.FFLATEUrl);break;default:throw new Error(nl[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 La.Float:r.getter=OV,r.inputSize=2;break;case La.HalfFloat:r.getter=dm,r.inputSize=2;break}else if(r.type===2)switch(i){case La.Float:r.getter=Tn,r.inputSize=4;break;case La.HalfFloat:r.getter=NV,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 Dy(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{gg();rG();pg();Ci();Py()});var sG={};tt(sG,{ReadExrDataAsync:()=>vae,_ExrTextureLoader:()=>Oy});async function vae(n){let e=new DataView(n),t={value:0},i=Ry(e,t);try{let r=await Ly(i,e,t,La.Float);return Dy(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)}:(ee.Error("Failed to decode EXR data: No byte array available."),{width:0,height:0,data:null})}catch(r){ee.Error("Failed to load EXR data: ",r)}return{width:0,height:0,data:null}}var Oy,aG=M(()=>{FV();nG();Py();Pt();Oy=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=Ry(r,s);Ly(a,r,s,sl.DefaultOutputType).then(o=>{Dy(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=>{ee.Error("Failed to load EXR texture: ",o)})}}});function ic(n,e){Eae(n)&&ee.Warn(`Extension with the name '${n}' already exists`),YA.set(n,e)}function Eae(n){return YA.delete(n)}function KA(n,e){(e==="image/ktx"||e==="image/ktx2")&&(n=".ktx"),YA.has(n)||(n.endsWith(".ies")&&ic(".ies",async()=>await Promise.resolve().then(()=>(sU(),nU)).then(i=>new i._IESTextureLoader)),n.endsWith(".dds")&&ic(".dds",async()=>await Promise.resolve().then(()=>(oU(),aU)).then(i=>new i._DDSTextureLoader)),n.endsWith(".basis")&&ic(".basis",async()=>await Promise.resolve().then(()=>(uU(),dU)).then(i=>new i._BasisTextureLoader)),n.endsWith(".env")&&ic(".env",async()=>await Promise.resolve().then(()=>(fV(),cV)).then(i=>new i._ENVTextureLoader)),n.endsWith(".hdr")&&ic(".hdr",async()=>await Promise.resolve().then(()=>(gV(),_V)).then(i=>new i._HDRTextureLoader)),(n.endsWith(".ktx")||n.endsWith(".ktx2"))&&(ic(".ktx",async()=>await Promise.resolve().then(()=>(gy(),_y)).then(i=>new i._KTXTextureLoader)),ic(".ktx2",async()=>await Promise.resolve().then(()=>(gy(),_y)).then(i=>new i._KTXTextureLoader))),n.endsWith(".tga")&&ic(".tga",async()=>await Promise.resolve().then(()=>(yV(),CV)).then(i=>new i._TGATextureLoader)),n.endsWith(".exr")&&ic(".exr",async()=>await Promise.resolve().then(()=>(aG(),sG)).then(i=>new i._ExrTextureLoader)));let t=YA.get(n);return t?Promise.resolve(t(e)):null}var YA,Ny=M(()=>{Pt();YA=new Map});function oG(n){let e=n.split("?")[0],t=e.lastIndexOf(".");return t>-1?e.substring(t).toLowerCase():""}var lG=M(()=>{});var cG=M(()=>{Rs();Pt();zl();K_();Ur();Ny();lG();Me.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)};Me.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)};Me.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)};Me.prototype._partialLoadImg=function(n,e,t,i,r,s,a=null,o){let l=lf();om(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)};Me.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,p=null){let _=h||new Oi(this,7);_.isCube=!0,_.url=n,_.generateMipMaps=!i,_._lodGenerationScale=c,_._lodGenerationOffset=f,_._useSRGBBuffer=!!m&&this._caps.supportSRGBBuffers&&(this.version>1||this.isWebGPU||!!i),_!==h&&(_.label=n.substring(0,60)),this._doNotHandleContextLost||(_._extension=o,_._files=t,_._buffer=p);let g=n;this._transformTextureUrl&&!h&&(n=this._transformTextureUrl(n));let v=o!=null?o:oG(n),x=KA(v),T=(S,R)=>{_.dispose(),s?s(S,R):S&&ee.Warn(S)},E=(S,R)=>{n===g?S&&T(S.status+" "+S.statusText,R):(ee.Warn(`Failed to load ${n}, falling back to the ${g}`),this.createCubeTextureBase(g,e,t,!!i,r,T,a,o,l,c,f,_,d,u,m,p))};if(x)x.then(S=>{let R=I=>{d&&d(_,I),S.loadCubeData(I,_,l,r,(C,y)=>{T(C,y)})};p?R(p):t&&t.length===6?S.supportCascades?this._cascadeLoadFiles(e,I=>R(I.map(C=>new Uint8Array(C))),t,T):T("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,_,(S,R)=>{u&&u(S,R)},t,T)}return this._internalTexturesCache.push(_),_}});var IG={};tt(IG,{DDSTools:()=>co});function jA(n){return n.charCodeAt(0)+(n.charCodeAt(1)<<8)+(n.charCodeAt(2)<<16)+(n.charCodeAt(3)<<24)}function Tae(n){return String.fromCharCode(n&255,n>>8&255,n>>16&255,n>>24&255)}var Sae,fG,hG,dG,uG,mG,pG,_G,gG,wy,vG,EG,SG,TG,Aae,Fy,xae,Rae,AG,xG,By,RG,Uy,bG,bae,Iae,Mae,Cae,yae,Pae,Lae,co,WC=M(()=>{On();Pt();_C();BC();cG();Sae=542327876,fG=131072,hG=512,dG=4,uG=64,mG=131072;pG=jA("DXT1"),_G=jA("DXT3"),gG=jA("DXT5"),wy=jA("DX10"),vG=113,EG=116,SG=2,TG=10,Aae=88,Fy=31,xae=0,Rae=1,AG=2,xG=3,By=4,RG=7,Uy=20,bG=21,bae=22,Iae=23,Mae=24,Cae=25,yae=26,Pae=28,Lae=32,co=class n{static GetDDSInfo(e){let t=new Int32Array(e.buffer,e.byteOffset,Fy),i=new Int32Array(e.buffer,e.byteOffset,Fy+4),r=1;t[AG]&fG&&(r=Math.max(1,t[RG]));let s=t[bG],a=s===wy?i[Lae]:0,o=0;switch(s){case vG:o=2;break;case EG:o=1;break;case wy:if(a===TG){o=2;break}if(a===SG){o=1;break}}return{width:t[By],height:t[xG],mipmapCount:r,isFourCC:(t[Uy]&dG)===dG,isRGB:(t[Uy]&uG)===uG,isLuminance:(t[Uy]&mG)===mG,isCube:(t[Pae]&hG)===hG,isCompressed:s===pG||s===_G||s===gG,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=Xl.ConvertCubeMapToSphericalPolynomial({size:d[By],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}};co.StoreLODInAlphaChannel=!1});var MG=M(()=>{Qn();Rs();Pt();Y_();Q_();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 Jo,h._source=9,this.getCaps().textureLOD){r&&r(h);return}let d=3,u=this._gl,m=f.width;if(!m)return;let{DDSTools:p}=await Promise.resolve().then(()=>(WC(),IG)),_=[];for(let v=0;v{Qn();$T();bt.prototype.createUniformBuffer=function(n,e){let t=this._gl.createBuffer();if(!t)throw new Error("Unable to create uniform buffer");let i=new Zo(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 Zo(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 yG=M(()=>{Ea();Ur();Me.prototype.displayLoadingUI=function(){if(!dr())return;let n=this.loadingScreen;n&&n.displayLoadingUI()};Me.prototype.hideLoadingUI=function(){if(!dr())return;let n=this._loadingScreen;n&&n.hideLoadingUI()};Object.defineProperty(Me.prototype,"loadingScreen",{get:function(){return!this._loadingScreen&&this._renderingCanvas&&(this._loadingScreen=Me.DefaultLoadingScreenFactory(this._renderingCanvas)),this._loadingScreen},set:function(n){this._loadingScreen=n},enumerable:!0,configurable:!0});Object.defineProperty(Me.prototype,"loadingUIText",{set:function(n){this.loadingScreen.loadingUIText=n},enumerable:!0,configurable:!0});Object.defineProperty(Me.prototype,"loadingUIBackgroundColor",{set:function(n){this.loadingScreen.loadingUIBackgroundColor=n},enumerable:!0,configurable:!0})});var PG=M(()=>{Ur();Me.prototype.getInputElement=function(){return this._renderingCanvas};Me.prototype.getRenderingCanvasClientRect=function(){return this._renderingCanvas?this._renderingCanvas.getBoundingClientRect():null};Me.prototype.getInputElementClientRect=function(){return this._renderingCanvas?this.getInputElement().getBoundingClientRect():null};Me.prototype.getAspectRatio=function(n,e=!1){let t=n.viewport;return this.getRenderWidth(e)*t.width/(this.getRenderHeight(e)*t.height)};Me.prototype.getScreenAspectRatio=function(){return this.getRenderWidth(!0)/this.getRenderHeight(!0)};Me.prototype._verifyPointerLock=function(){var n;(n=this._onPointerLockChange)==null||n.call(this)}});var Vy=M(()=>{Ur();Me.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 LG=M(()=>{Ur();Vy();Me.prototype.getInputElement=function(){return this._renderingCanvas};Me.prototype.getDepthFunction=function(){return this._depthCullingState.depthFunc};Me.prototype.setDepthFunction=function(n){this._depthCullingState.depthFunc=n};Me.prototype.setDepthFunctionToGreater=function(){this.setDepthFunction(516)};Me.prototype.setDepthFunctionToGreaterOrEqual=function(){this.setDepthFunction(518)};Me.prototype.setDepthFunctionToLess=function(){this.setDepthFunction(513)};Me.prototype.setDepthFunctionToLessOrEqual=function(){this.setDepthFunction(515)};Me.prototype.getDepthWrite=function(){return this._depthCullingState.depthMask};Me.prototype.setDepthWrite=function(n){this._depthCullingState.depthMask=n};Me.prototype.setAlphaConstants=function(n,e,t,i){this._alphaState.setAlphaBlendConstants(n,e,t,i)};Me.prototype.getAlphaMode=function(n=0){return this._alphaMode[n]};Me.prototype.getAlphaEquation=function(n=0){return this._alphaEquation[n]}});var DG=M(()=>{Ur();Vy();Me.prototype.getStencilBuffer=function(){return this._stencilState.stencilTest};Me.prototype.setStencilBuffer=function(n){this._stencilState.stencilTest=n};Me.prototype.getStencilMask=function(){return this._stencilState.stencilMask};Me.prototype.setStencilMask=function(n){this._stencilState.stencilMask=n};Me.prototype.getStencilFunction=function(){return this._stencilState.stencilFunc};Me.prototype.getStencilBackFunction=function(){return this._stencilState.stencilBackFunc};Me.prototype.getStencilFunctionReference=function(){return this._stencilState.stencilFuncRef};Me.prototype.getStencilFunctionMask=function(){return this._stencilState.stencilFuncMask};Me.prototype.setStencilFunction=function(n){this._stencilState.stencilFunc=n};Me.prototype.setStencilBackFunction=function(n){this._stencilState.stencilBackFunc=n};Me.prototype.setStencilFunctionReference=function(n){this._stencilState.stencilFuncRef=n};Me.prototype.setStencilFunctionMask=function(n){this._stencilState.stencilFuncMask=n};Me.prototype.getStencilOperationFail=function(){return this._stencilState.stencilOpStencilFail};Me.prototype.getStencilBackOperationFail=function(){return this._stencilState.stencilBackOpStencilFail};Me.prototype.getStencilOperationDepthFail=function(){return this._stencilState.stencilOpDepthFail};Me.prototype.getStencilBackOperationDepthFail=function(){return this._stencilState.stencilBackOpDepthFail};Me.prototype.getStencilOperationPass=function(){return this._stencilState.stencilOpStencilDepthPass};Me.prototype.getStencilBackOperationPass=function(){return this._stencilState.stencilBackOpStencilDepthPass};Me.prototype.setStencilOperationFail=function(n){this._stencilState.stencilOpStencilFail=n};Me.prototype.setStencilBackOperationFail=function(n){this._stencilState.stencilBackOpStencilFail=n};Me.prototype.setStencilOperationDepthFail=function(n){this._stencilState.stencilOpDepthFail=n};Me.prototype.setStencilBackOperationDepthFail=function(n){this._stencilState.stencilBackOpDepthFail=n};Me.prototype.setStencilOperationPass=function(n){this._stencilState.stencilOpStencilDepthPass=n};Me.prototype.setStencilBackOperationPass=function(n){this._stencilState.stencilBackOpStencilDepthPass=n};Me.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()};Me.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 OG=M(()=>{Ur();Me.prototype.getRenderPassNames=function(){return this._renderPassNames};Me.prototype.getCurrentRenderPassName=function(){return this._renderPassNames[this.currentRenderPassId]};Me.prototype.createRenderPassId=function(n){let e=++Me._RenderPassIdCounter;return this._renderPassNames[e]=n!=null?n:"NONAME",e};Me.prototype.releaseRenderPassId=function(n){this._renderPassNames[n]=void 0;for(let e=0;e{Ur();Me.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 wG=M(()=>{Ny();Ur();Me.GetCompatibleTextureLoader=KA});function Dae(n){!n||!n.setAttribute||(n.setAttribute("touch-action","none"),n.style.touchAction="none",n.style.webkitTapHighlightColor="transparent")}function FG(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||Dae(e),!Me.audioEngine&&t.audioEngine&&Me.AudioEngineFactory&&(Me.audioEngine=Me.AudioEngineFactory(n.getRenderingCanvas(),n.getAudioContext(),n.getAudioDestination())),sf()&&(n._onFullscreenChange=()=>{n.isFullscreen=!!document.fullscreenElement,n.isFullscreen&&n._pointerLockRequested&&e&&Gy(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=Me.OfflineProviderFactory!==void 0,n._deterministicLockstep=!!t.deterministicLockstep,n._lockstepMaxSteps=t.lockstepMaxSteps||0,n._timeStep=t.timeStep||1/60}function BG(n,e){Oe.Instances.length===1&&Me.audioEngine&&(Me.audioEngine.dispose(),Me.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)),sf()&&(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 UG(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 VG(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 GG(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 kG(n){let e=n.requestFullscreen||n.webkitRequestFullscreen;e&&e.call(n)}function WG(){let n=document;document.exitFullscreen?document.exitFullscreen():n.webkitCancelFullScreen&&n.webkitCancelFullScreen()}function Gy(n){if(n.requestPointerLock){let e=n.requestPointerLock();e instanceof Promise?e.then(()=>{n.focus()}).catch(()=>{}):n.focus()}}function HG(){document.exitPointerLock&&document.exitPointerLock()}var zG=M(()=>{Ea();Ur();Ni()});var Ue,ky=M(()=>{Rs();Ni();Qn();k2();$T();Pt();iC();W2();Y2();K2();j2();q2();$2();J2();eB();MG();CG();yG();PG();LG();DG();OG();aC();NG();wG();Ur();zG();JC();qo();Ue=class n extends bt{static get NpmPackage(){return Me.NpmPackage}static get Version(){return Me.Version}static get Instances(){return Oe.Instances}static get LastCreatedEngine(){return Oe.LastCreatedEngine}static get LastCreatedScene(){return Oe.LastCreatedScene}static DefaultLoadingScreenFactory(e){return Me.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 eA,this._drawCalls=new rl,e&&(this._features.supportRenderPasses=!0)}_initGLContext(){super._initGLContext(),this._rescalePostProcess=null}_sharedInit(e){super._sharedInit(e),FG(this,e,this._creationOptions)}resizeImageBitmap(e,t,i){return GG(this,e,t,i)}async _createImageBitmapFromSource(e,t){return await VG(this,e,t)}switchFullscreen(e){this.isFullscreen?this.exitFullscreen():this.enterFullscreen(e)}enterFullscreen(e){this.isFullscreen||(this._pointerLockRequested=e,this._renderingCanvas&&kG(this._renderingCanvas))}exitFullscreen(){this.isFullscreen&&WG()}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 UG(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&&Gy(this._renderingCanvas)}exitPointerlock(){HG()}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 Hu(e,this._gl),o=new Oi(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){ee.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 Zo(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)=>{jo(()=>{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(),BG(this,this._renderingCanvas),super.dispose()}};Ue.ALPHA_DISABLE=0;Ue.ALPHA_ADD=1;Ue.ALPHA_COMBINE=2;Ue.ALPHA_SUBTRACT=3;Ue.ALPHA_MULTIPLY=4;Ue.ALPHA_MAXIMIZED=5;Ue.ALPHA_ONEONE=6;Ue.ALPHA_PREMULTIPLIED=7;Ue.ALPHA_PREMULTIPLIED_PORTERDUFF=8;Ue.ALPHA_INTERPOLATE=9;Ue.ALPHA_SCREENMODE=10;Ue.DELAYLOADSTATE_NONE=0;Ue.DELAYLOADSTATE_LOADED=1;Ue.DELAYLOADSTATE_LOADING=2;Ue.DELAYLOADSTATE_NOTLOADED=4;Ue.NEVER=512;Ue.ALWAYS=519;Ue.LESS=513;Ue.EQUAL=514;Ue.LEQUAL=515;Ue.GREATER=516;Ue.GEQUAL=518;Ue.NOTEQUAL=517;Ue.KEEP=7680;Ue.REPLACE=7681;Ue.INCR=7682;Ue.DECR=7683;Ue.INVERT=5386;Ue.INCR_WRAP=34055;Ue.DECR_WRAP=34056;Ue.TEXTURE_CLAMP_ADDRESSMODE=0;Ue.TEXTURE_WRAP_ADDRESSMODE=1;Ue.TEXTURE_MIRROR_ADDRESSMODE=2;Ue.TEXTUREFORMAT_ALPHA=0;Ue.TEXTUREFORMAT_LUMINANCE=1;Ue.TEXTUREFORMAT_LUMINANCE_ALPHA=2;Ue.TEXTUREFORMAT_RGB=4;Ue.TEXTUREFORMAT_RGBA=5;Ue.TEXTUREFORMAT_RED=6;Ue.TEXTUREFORMAT_R=6;Ue.TEXTUREFORMAT_R16_UNORM=33322;Ue.TEXTUREFORMAT_RG16_UNORM=33324;Ue.TEXTUREFORMAT_RGB16_UNORM=32852;Ue.TEXTUREFORMAT_RGBA16_UNORM=32859;Ue.TEXTUREFORMAT_R16_SNORM=36760;Ue.TEXTUREFORMAT_RG16_SNORM=36761;Ue.TEXTUREFORMAT_RGB16_SNORM=36762;Ue.TEXTUREFORMAT_RGBA16_SNORM=36763;Ue.TEXTUREFORMAT_RG=7;Ue.TEXTUREFORMAT_RED_INTEGER=8;Ue.TEXTUREFORMAT_R_INTEGER=8;Ue.TEXTUREFORMAT_RG_INTEGER=9;Ue.TEXTUREFORMAT_RGB_INTEGER=10;Ue.TEXTUREFORMAT_RGBA_INTEGER=11;Ue.TEXTURETYPE_UNSIGNED_BYTE=0;Ue.TEXTURETYPE_UNSIGNED_INT=0;Ue.TEXTURETYPE_FLOAT=1;Ue.TEXTURETYPE_HALF_FLOAT=2;Ue.TEXTURETYPE_BYTE=3;Ue.TEXTURETYPE_SHORT=4;Ue.TEXTURETYPE_UNSIGNED_SHORT=5;Ue.TEXTURETYPE_INT=6;Ue.TEXTURETYPE_UNSIGNED_INTEGER=7;Ue.TEXTURETYPE_UNSIGNED_SHORT_4_4_4_4=8;Ue.TEXTURETYPE_UNSIGNED_SHORT_5_5_5_1=9;Ue.TEXTURETYPE_UNSIGNED_SHORT_5_6_5=10;Ue.TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV=11;Ue.TEXTURETYPE_UNSIGNED_INT_24_8=12;Ue.TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV=13;Ue.TEXTURETYPE_UNSIGNED_INT_5_9_9_9_REV=14;Ue.TEXTURETYPE_FLOAT_32_UNSIGNED_INT_24_8_REV=15;Ue.TEXTURE_NEAREST_SAMPLINGMODE=1;Ue.TEXTURE_BILINEAR_SAMPLINGMODE=2;Ue.TEXTURE_TRILINEAR_SAMPLINGMODE=3;Ue.TEXTURE_NEAREST_NEAREST_MIPLINEAR=8;Ue.TEXTURE_LINEAR_LINEAR_MIPNEAREST=11;Ue.TEXTURE_LINEAR_LINEAR_MIPLINEAR=3;Ue.TEXTURE_NEAREST_NEAREST_MIPNEAREST=4;Ue.TEXTURE_NEAREST_LINEAR_MIPNEAREST=5;Ue.TEXTURE_NEAREST_LINEAR_MIPLINEAR=6;Ue.TEXTURE_NEAREST_LINEAR=7;Ue.TEXTURE_NEAREST_NEAREST=1;Ue.TEXTURE_LINEAR_NEAREST_MIPNEAREST=9;Ue.TEXTURE_LINEAR_NEAREST_MIPLINEAR=10;Ue.TEXTURE_LINEAR_LINEAR=2;Ue.TEXTURE_LINEAR_NEAREST=12;Ue.TEXTURE_EXPLICIT_MODE=0;Ue.TEXTURE_SPHERICAL_MODE=1;Ue.TEXTURE_PLANAR_MODE=2;Ue.TEXTURE_CUBIC_MODE=3;Ue.TEXTURE_PROJECTION_MODE=4;Ue.TEXTURE_SKYBOX_MODE=5;Ue.TEXTURE_INVCUBIC_MODE=6;Ue.TEXTURE_EQUIRECTANGULAR_MODE=7;Ue.TEXTURE_FIXED_EQUIRECTANGULAR_MODE=8;Ue.TEXTURE_FIXED_EQUIRECTANGULAR_MIRRORED_MODE=9;Ue.SCALEMODE_FLOOR=1;Ue.SCALEMODE_NEAREST=2;Ue.SCALEMODE_CEILING=3});var Wy,_i,Js=M(()=>{Gt();Ge();Vt();di();Ni();hn();xr();Wy=class{constructor(){this._doNotSerialize=!1,this._isDisposed=!1,this._sceneRootNodesIndex=-1,this._isEnabled=!0,this._isParentEnabled=!0,this._isReady=!0,this._onEnabledStateChangedObservable=new ie,this._onClonedObservable=new ie,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 Wy,this.state="",this.metadata=null,this.reservedDataStore=null,this._accessibilityTag=null,this.onAccessibilityTagChangedObservable=new ie,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=j.Identity(),this._worldMatrixDeterminant=0,this._worldMatrixDeterminantIsDirty=!0,this._animationPropertiesOverride=null,this._isNode=!0,this.onDisposeObservable=new ie,this._onDisposeObserver=null,this._behaviors=new Array,this.name=e,this.id=e,this._scene=t||Oe.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 Ze("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 Hy(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 XG(n=25){let e;return(t,i,r)=>{let s=performance.now();e===void 0||s-e>n?(e=s,setTimeout(()=>{Hy(t,i,r)},0)):Hy(t,i,r)}}function YG(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 Sg(n,e){let t;return YG(n,Hy,i=>t=i,i=>{throw i},e),t}async function KG(n,e,t){return await new Promise((i,r)=>{YG(n,e,i,r,t)})}function jG(n,e){return(...t)=>Sg(n(...t),e)}var zy=M(()=>{});var mt,al=M(()=>{Gt();Vt();lo();Ci();di();Ge();Js();Pt();zi();hn();em();sA();xr();mt=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 so(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 ie,this.onProjectionMatrixChangedObservable=new ie,this.onAfterCheckInputsObservable=new ie,this.onRestoreStateObservable=new ie,this.isRigCamera=!1,this._hasMoved=!1,this._rigCameras=new Array,this._skipRendering=!1,this._projectionMatrix=new j,this._postProcesses=new Array,this._activeMeshes=new Ui(256),this._globalPosition=b.Zero(),this._computedViewMatrix=j.Identity(),this._doNotComputeProjectionMatrix=!1,this._transformMatrix=j.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?(ee.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 j.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,T,E,S,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 C;r.useRightHandedSystem?C=j.PerspectiveFovRHToRef:C=j.PerspectiveFovLHToRef,C(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 C=i.getRenderWidth()/2,y=i.getRenderHeight()/2;r.useRightHandedSystem?this.oblique?j.ObliqueOffCenterRHToRef((a=this.orthoLeft)!=null?a:-C,(o=this.orthoRight)!=null?o:C,(l=this.orthoBottom)!=null?l:-y,(c=this.orthoTop)!=null?c:y,s?t:this.minZ,s?this.minZ:t,this.oblique.length,this.oblique.angle,this._computeObliqueDistance(this.oblique.offset),this._projectionMatrix,i.isNDCHalfZRange):j.OrthoOffCenterRHToRef((f=this.orthoLeft)!=null?f:-C,(h=this.orthoRight)!=null?h:C,(d=this.orthoBottom)!=null?d:-y,(u=this.orthoTop)!=null?u:y,s?t:this.minZ,s?this.minZ:t,this._projectionMatrix,i.isNDCHalfZRange):this.oblique?j.ObliqueOffCenterLHToRef((m=this.orthoLeft)!=null?m:-C,(p=this.orthoRight)!=null?p:C,(_=this.orthoBottom)!=null?_:-y,(g=this.orthoTop)!=null?g:y,s?t:this.minZ,s?this.minZ:t,this.oblique.length,this.oblique.angle,this._computeObliqueDistance(this.oblique.offset),this._projectionMatrix,i.isNDCHalfZRange):j.OrthoOffCenterLHToRef((v=this.orthoLeft)!=null?v:-C,(x=this.orthoRight)!=null?x:C,(T=this.orthoBottom)!=null?T:-y,(E=this.orthoTop)!=null?E:y,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=(S=this.oblique)==null?void 0:S.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?of.GetPlanesToRef(this._transformMatrix,this._frustumPlanes):this._frustumPlanes=of.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 Ze("Ray")}getForwardRayToRef(e,t=100,i,r){throw Ze("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=_e.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 j.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=_e.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=it.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 Ze("UniversalCamera")};mt.PERSPECTIVE_CAMERA=0;mt.ORTHOGRAPHIC_CAMERA=1;mt.FOVMODE_VERTICAL_FIXED=0;mt.FOVMODE_HORIZONTAL_FIXED=1;mt.RIG_MODE_NONE=0;mt.RIG_MODE_STEREOSCOPIC_ANAGLYPH=10;mt.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL=11;mt.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED=12;mt.RIG_MODE_STEREOSCOPIC_OVERUNDER=13;mt.RIG_MODE_STEREOSCOPIC_INTERLACED=14;mt.RIG_MODE_VR=20;mt.RIG_MODE_CUSTOM=22;mt.ForceAttachControlToAlwaysPreventDefault=!1;P([zr("position")],mt.prototype,"_position",void 0);P([zr("upVector")],mt.prototype,"_upVector",void 0);P([F()],mt.prototype,"orthoLeft",null);P([F()],mt.prototype,"orthoRight",null);P([F()],mt.prototype,"orthoBottom",null);P([F()],mt.prototype,"orthoTop",null);P([F()],mt.prototype,"fov",void 0);P([F()],mt.prototype,"projectionPlaneTilt",void 0);P([F()],mt.prototype,"minZ",void 0);P([F()],mt.prototype,"maxZ",void 0);P([F()],mt.prototype,"inertia",void 0);P([F()],mt.prototype,"mode",null);P([F()],mt.prototype,"layerMask",void 0);P([F()],mt.prototype,"fovMode",void 0);P([F()],mt.prototype,"cameraRigMode",void 0);P([F()],mt.prototype,"interaxialDistance",void 0);P([F()],mt.prototype,"isStereoscopicSideBySide",void 0);P([F()],mt.prototype,"ignoreCameraMaxZ",void 0)});var qh,Xy=M(()=>{qh=class{constructor(e,t,i){this.bu=e,this.bv=t,this.distance=i,this.faceId=0,this.subMeshId=0,this._internalSubMeshId=0}}});var Ef,Yy=M(()=>{Qo();Ge();Dn();Ef=class n{constructor(e,t,i){this.vectors=dn(8,b.Zero),this.center=b.Zero(),this.centerWorld=b.Zero(),this.extendSize=b.Zero(),this.extendSizeWorld=b.Zero(),this.directions=dn(3,b.Zero),this.vectorsWorld=dn(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||j.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,p=t.y,_=t.z;return!(lm||cp||f_)}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}};Ef._TmpVector3=dn(3,b.Zero)});var pm,qG=M(()=>{Qo();Ge();pm=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||j.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{Qo();Ge();Yy();qG();Ky={min:0,max:0},jy={min:0,max:0},ZG=(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},ts=(n,e,t)=>(ZG(n,e,Ky),ZG(n,t,jy),!(Ky.min>jy.max||jy.min>Ky.max)),un=class n{constructor(e,t,i){this._isLocked=!1,this.boundingBox=new Ef(e,t,i),this.boundingSphere=new pm(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(!pm.Intersects(this.boundingSphere,e.boundingSphere)||!Ef.Intersects(this.boundingBox,e.boundingBox))return!1;if(!t)return!0;let i=this.boundingBox,r=e.boundingBox;return!(!ts(i.directions[0],i,r)||!ts(i.directions[1],i,r)||!ts(i.directions[2],i,r)||!ts(r.directions[0],i,r)||!ts(r.directions[1],i,r)||!ts(r.directions[2],i,r)||!ts(b.Cross(i.directions[0],r.directions[0]),i,r)||!ts(b.Cross(i.directions[0],r.directions[1]),i,r)||!ts(b.Cross(i.directions[0],r.directions[2]),i,r)||!ts(b.Cross(i.directions[1],r.directions[0]),i,r)||!ts(b.Cross(i.directions[1],r.directions[1]),i,r)||!ts(b.Cross(i.directions[1],r.directions[2]),i,r)||!ts(b.Cross(i.directions[2],r.directions[0]),i,r)||!ts(b.Cross(i.directions[2],r.directions[1]),i,r)||!ts(b.Cross(i.directions[2],r.directions[2]),i,r))}};un._TmpVector3=dn(2,b.Zero)});function QG(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 gm.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 qA(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),gm.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 gm,ZA=M(()=>{Gt();Ge();Vt();gm=class{static extractMinAndMaxIndexed(e,t,i,r,s,a){for(let o=i;o!Array.isArray(n[0])&&!Array.isArray(n[1]))],gm,"extractMinAndMaxIndexed",null);P([Is.filter((...n)=>!Array.isArray(n[0]))],gm,"extractMinAndMax",null)});var ys,Tg=M(()=>{ki();Xy();_m();ZA();kh();ys=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 Jn(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=QG(e,t,this.indexStart,this.indexCount,this._renderingMesh.geometry.boundingBias);return this._boundingInfo?this._boundingInfo.reConstruct(i.minimum,i.maximum):this._boundingInfo=new un(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 Ag,Ce,mr=M(()=>{Gt();Ge();ki();hn();zt();Pt();Vt();zy();j_();Tg();Ag=class{},Ce=class n{constructor(){this.uniqueId=0,this.metadata={},this._applyTo=jG(this._applyToCoroutine.bind(this)),this.uniqueId=n._UniqueIdGenerator,n._UniqueIdGenerator++}set(e,t){switch(e.length||ee.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 ys(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 Sg(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,T=[],E=null,S=[];for(let I of this.splitBasedOnMaterialID())S.push({vertexData:I,transform:e});for(let I of t)if(I.vertexData)for(let C of I.vertexData.splitBasedOnMaterialID())S.push({vertexData:C,transform:I.transform});S.sort((I,C)=>{let y=I.vertexData.materialInfos?I.vertexData.materialInfos[0].materialIndex:0,D=C.vertexData.materialInfos?C.vertexData.materialInfos[0].materialIndex:0;return y>D?1:y===D?0:-1});for(let I of S){let C=I.vertexData;if(C.materialInfos?g=C.materialInfos[0].materialIndex:g=0,E&&E.materialIndex===g)E.indexCount+=C.indices.length,E.verticesCount+=C.positions.length/3;else{let y=new Ag;y.materialIndex=g,y.indexStart=v,y.indexCount=C.indices.length,y.verticesStart=x,y.verticesCount=C.positions.length/3,T.push(y),E=y}v+=C.indices.length,x+=C.positions.length/3}let R=S.splice(0,1)[0];c=R.vertexData,e=R.transform,l=S.map(I=>I.vertexData),t=S,this.materialInfos=T}let f=l.reduce((g,v)=>{var x,T;return g+((T=(x=v.indices)==null?void 0:x.length)!=null?T:0)},(m=(u=c.indices)==null?void 0:u.length)!=null?m:0),d=s||l.some(g=>g.indices===c.indices)?(p=c.indices)==null?void 0:p.slice():c.indices;if(f>0){let g=(_=d==null?void 0:d.length)!=null?_: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:T}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]))],Ce,"_TransformVector3Coordinates",null);P([Is.filter((...n)=>!Array.isArray(n[0]))],Ce,"_TransformVector3Normals",null);P([Is.filter((...n)=>!Array.isArray(n[0]))],Ce,"_TransformVector4Normals",null);P([Is.filter((...n)=>!Array.isArray(n[0]))],Ce,"_FlipFaces",null)});var Yr,QA=M(()=>{Yr=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}};Yr._ForceFullSceneLoadingForIncremental=!1;Yr._ShowLoadingScreen=!0;Yr._CleanBoneMatrixWeights=!1;Yr._LoggingLevel=0});var mn,$A=M(()=>{Ge();zt();mr();ki();Tg();QA();_m();Ci();df();ZA();Ni();tn();sm();mn=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||Oe.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=qA(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 p=AB(o,c,f,h,d,m,!0),_=new L(this._engine,p,s,{updatable:l,useBytes:!1,stride:c,size:c,offset:0,type:f,normalized:u,takeBufferOwnership:!0,instanced:a.getIsInstanced()});t.setVerticesBuffer(_,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 un(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 _e.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(Mt)for(let l=1;l0){let o=new Float32Array(e,a.uvs2AttrDesc.offset,a.uvs2AttrDesc.count);if(Mt)for(let l=1;l0){let o=new Float32Array(e,a.uvs3AttrDesc.offset,a.uvs3AttrDesc.count);if(Mt)for(let l=1;l0){let o=new Float32Array(e,a.uvs4AttrDesc.offset,a.uvs4AttrDesc.count);if(Mt)for(let l=1;l0){let o=new Float32Array(e,a.uvs5AttrDesc.offset,a.uvs5AttrDesc.count);if(Mt)for(let l=1;l0){let o=new Float32Array(e,a.uvs6AttrDesc.offset,a.uvs6AttrDesc.count);if(Mt)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 p=0;p<4;p++)o[h+p]*=m;if(l)for(let p=0;p<4;p++)l[h+p]*=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 un(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=Ce.ImportVertexData):Ce.ImportVertexData(e,r),t.pushGeometry(r,!0),r}}});var ei,Zh=M(()=>{Gt();Vt();xr();di();Ge();Js();zi();ei=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=j.Zero(),this._usePivotMatrix=!1,this._absolutePosition=b.Zero(),this._absoluteScaling=b.Zero(),this._absoluteRotationQuaternion=ze.Identity(),this._pivotMatrix=j.Identity(),this._postMultiplyPivotMatrix=!1,this._isWorldMatrixFrozen=!1,this._indexInSceneTransformNodesArray=-1,this.onAfterWorldMatrixUpdateObservable=new ie,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=j.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=j.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(j.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];j.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)),j.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(j.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),j.TranslationToRef(r.x,r.y,r.z,l),j.TranslationToRef(-r.x,-r.y,-r.z,c),j.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];j.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 j.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),j.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 p=Z.Vector3[1];Z.Quaternion[0].toEulerAnglesToRef(p),(this.billboardMode&n.BILLBOARDMODE_X)!==n.BILLBOARDMODE_X&&(p.x=0),(this.billboardMode&n.BILLBOARDMODE_Y)!==n.BILLBOARDMODE_Y&&(p.y=0),(this.billboardMode&n.BILLBOARDMODE_Z)!==n.BILLBOARDMODE_Z&&(p.z=0),j.RotationYawPitchRollToRef(p.y,p.x,p.z,Z.Matrix[0])}else j.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),j.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=j.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(j.FromArray(e.localMatrix)):e.pivotMatrix&&r.setPivotMatrix(j.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)}};ei.BILLBOARDMODE_NONE=0;ei.BILLBOARDMODE_X=1;ei.BILLBOARDMODE_Y=2;ei.BILLBOARDMODE_Z=4;ei.BILLBOARDMODE_ALL=7;ei.BILLBOARDMODE_USE_POSITION=128;ei.BillboardUseParentOrientation=!1;ei._TmpRotation=ze.Zero();ei._TmpScaling=b.Zero();ei._TmpTranslation=b.Zero();ei._TmpRHRestore=j.Scaling(1,1,-1);ei._LookAtVectorCache=new b(0,0,0);ei._RotationAxisCache=new ze;P([zr("position")],ei.prototype,"_position",void 0);P([zr("rotation")],ei.prototype,"_rotation",void 0);P([_B("rotationQuaternion")],ei.prototype,"_rotationQuaternion",void 0);P([zr("scaling")],ei.prototype,"_scaling",void 0);P([F("billboardMode")],ei.prototype,"_billboardMode",void 0);P([F()],ei.prototype,"scalingDeterminant",void 0);P([F("infiniteDistance")],ei.prototype,"_infiniteDistance",void 0);P([F()],ei.prototype,"ignoreNonUniformScaling",void 0);P([F()],ei.prototype,"reIntegrateRotationIntoRotationQuaternion",void 0)});var JA,$G=M(()=>{Ge();JA=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 JG(n){return Math.floor(n/8)}function ek(n){return 1<{ex=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=JG(e),i=ek(e);return(this._byteArray[t]&i)!==0}set(e,t){if(e>=this.size)throw new RangeError("Bit index out of range");let i=JG(e),r=ek(e);t?this._byteArray[i]|=r:this._byteArray[i]&=~r}}});var ik={};tt(ik,{OptimizeIndices:()=>Oae});function Oae(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{tk()});function Nae(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&&(j.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&&(j.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 qy,Zy,Er,vm=M(()=>{Gt();di();Ge();ki();mr();Zh();ag();_m();mf();$G();hn();ZA();zt();Dn();Yu();zi();Vt();Ur();qy=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}},Zy=class{constructor(){this._hasVertexAlpha=!1,this._useVertexColors=!0,this._numBoneInfluencers=4,this._applyFog=!0,this._receiveShadows=!1,this._facetData=new qy,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 JA,this._enableDistantPicking=!1,this._rawBoundingInfo=null,this._sideOrientationHint=!1,this._wasActiveLastFrame=!1}},Er=class n extends ei{static get BILLBOARDMODE_NONE(){return ei.BILLBOARDMODE_NONE}static get BILLBOARDMODE_X(){return ei.BILLBOARDMODE_X}static get BILLBOARDMODE_Y(){return ei.BILLBOARDMODE_Y}static get BILLBOARDMODE_Z(){return ei.BILLBOARDMODE_Z}static get BILLBOARDMODE_ALL(){return ei.BILLBOARDMODE_ALL}static get BILLBOARDMODE_USE_POSITION(){return ei.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 Zy,this._waitingMaterialId=null,this._waitingMorphTargetManagerId=null,this._waitingSkeletonId=null,this._waitingSkeletonUniqueId=null,this.cullingStrategy=n.CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY,this.onCollideObservable=new ie,this.onCollisionPositionChangeObservable=new ie,this.onMaterialChangedObservable=new ie,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=pe.Red(),this.outlineWidth=.02,this.overlayColor=pe.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 ie,this._onCollisionPositionChange=(i,r,s=null)=>{r.subtractToRef(this._internalAbstractMeshDataInfo._meshCollisionData._oldPositionForCollisions,this._internalAbstractMeshDataInfo._meshCollisionData._diffPositionForCollisions),this._internalAbstractMeshDataInfo._meshCollisionData._diffPositionForCollisions.length()>Me.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 ur(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!==ei.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 un(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===ei.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 j;(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=qA(e,0,this.getTotalVertices(),t);this._boundingInfo?this._boundingInfo.reConstruct(i.minimum,i.maximum):this._boundingInfo=new un(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&&Nae(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 j.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 es,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 p=0;p1&&!a&&!_.canIntersects(e))continue;let g=_.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&&Ce.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,T,E,S,R;for(let I=0;I=0||s&&!a&&h<=0)&&(h=S.x*R.x+S.y*R.y+S.z*R.z,d=-(S.x*e+S.y*t+S.z*i-h)/(S.x*S.x+S.y*S.y+S.z*S.z),u=e+S.x*d,m=t+S.y*d,p=i+S.z*d,l=u-e,c=m-t,f=p-i,T=l*l+c*c+f*f,T(rk(),ik));return t(e),this.setIndices(e,this.getTotalVertices()),this}alignWithNormal(e,t){t||(t=bs.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 Ze("EdgesRenderer")}enableEdgesRendering(e,t,i){throw Ze("EdgesRenderer")}getConnectedParticleSystems(){return this._scene.particleSystems.filter(e=>e.emitter===this)}};Er.OCCLUSION_TYPE_NONE=0;Er.OCCLUSION_TYPE_OPTIMISTIC=1;Er.OCCLUSION_TYPE_STRICT=2;Er.OCCLUSION_ALGORITHM_TYPE_ACCURATE=0;Er.OCCLUSION_ALGORITHM_TYPE_CONSERVATIVE=1;Er.CULLINGSTRATEGY_STANDARD=0;Er.CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY=1;Er.CULLINGSTRATEGY_OPTIMISTIC_INCLUSION=2;Er.CULLINGSTRATEGY_OPTIMISTIC_INCLUSION_THEN_BSPHERE_ONLY=3;Er.DefaultIsPickable=!0;P([Is.filter((...n)=>!Array.isArray(n[0])&&!Array.isArray(n[3])&&!Array.isArray(n[4])&&!Array.isArray(n[5])&&!Array.isArray(n[6]))],Er,"_ApplySkeleton",null);Ft("BABYLON.AbstractMesh",Er)});var wn,nk=M(()=>{Gt();xr();Vt();wn=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){it.Clone(()=>e,this)}serialize(){return it.Serialize(this)}parse(e,t,i){it.Parse(()=>this,e,t,i)}};P([F()],wn.prototype,"func",null);P([F()],wn.prototype,"backFunc",null);P([F()],wn.prototype,"funcRef",null);P([F()],wn.prototype,"funcMask",null);P([F()],wn.prototype,"opStencilFail",null);P([F()],wn.prototype,"opDepthFail",null);P([F()],wn.prototype,"opStencilDepthPass",null);P([F()],wn.prototype,"backOpStencilFail",null);P([F()],wn.prototype,"backOpDepthFail",null);P([F()],wn.prototype,"backOpStencilDepthPass",null);P([F()],wn.prototype,"mask",null);P([F()],wn.prototype,"enabled",null)});function Fn(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 ol(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 sk(n,e,t){var f,h,d,u,m,p;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=!!((p=n.clipPlane6)!=null?p: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 Bn(n,e,t){var r,s,a,o,l,c;let i=(r=e.clipPlane)!=null?r:t.clipPlane;Em(n,"vClipPlane",i),i=(s=e.clipPlane2)!=null?s:t.clipPlane2,Em(n,"vClipPlane2",i),i=(a=e.clipPlane3)!=null?a:t.clipPlane3,Em(n,"vClipPlane3",i),i=(o=e.clipPlane4)!=null?o:t.clipPlane4,Em(n,"vClipPlane4",i),i=(l=e.clipPlane5)!=null?l:t.clipPlane5,Em(n,"vClipPlane5",i),i=(c=e.clipPlane6)!=null?c:t.clipPlane6,Em(n,"vClipPlane6",i)}function Em(n,e,t){var i;if(t){let r=((i=Ma.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 ll=M(()=>{cg();Ge()});var ce,Da=M(()=>{Ur();ce=class{static get DiffuseTextureEnabled(){return this._DiffuseTextureEnabled}static set DiffuseTextureEnabled(e){this._DiffuseTextureEnabled!==e&&(this._DiffuseTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get BaseWeightTextureEnabled(){return this._BaseWeightTextureEnabled}static set BaseWeightTextureEnabled(e){this._BaseWeightTextureEnabled!==e&&(this._BaseWeightTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get BaseDiffuseRoughnessTextureEnabled(){return this._BaseDiffuseRoughnessTextureEnabled}static set BaseDiffuseRoughnessTextureEnabled(e){this._BaseDiffuseRoughnessTextureEnabled!==e&&(this._BaseDiffuseRoughnessTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get DetailTextureEnabled(){return this._DetailTextureEnabled}static set DetailTextureEnabled(e){this._DetailTextureEnabled!==e&&(this._DetailTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get DecalMapEnabled(){return this._DecalMapEnabled}static set DecalMapEnabled(e){this._DecalMapEnabled!==e&&(this._DecalMapEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get AmbientTextureEnabled(){return this._AmbientTextureEnabled}static set AmbientTextureEnabled(e){this._AmbientTextureEnabled!==e&&(this._AmbientTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get OpacityTextureEnabled(){return this._OpacityTextureEnabled}static set OpacityTextureEnabled(e){this._OpacityTextureEnabled!==e&&(this._OpacityTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get ReflectionTextureEnabled(){return this._ReflectionTextureEnabled}static set ReflectionTextureEnabled(e){this._ReflectionTextureEnabled!==e&&(this._ReflectionTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get EmissiveTextureEnabled(){return this._EmissiveTextureEnabled}static set EmissiveTextureEnabled(e){this._EmissiveTextureEnabled!==e&&(this._EmissiveTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get SpecularTextureEnabled(){return this._SpecularTextureEnabled}static set SpecularTextureEnabled(e){this._SpecularTextureEnabled!==e&&(this._SpecularTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get BumpTextureEnabled(){return this._BumpTextureEnabled}static set BumpTextureEnabled(e){this._BumpTextureEnabled!==e&&(this._BumpTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get LightmapTextureEnabled(){return this._LightmapTextureEnabled}static set LightmapTextureEnabled(e){this._LightmapTextureEnabled!==e&&(this._LightmapTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get RefractionTextureEnabled(){return this._RefractionTextureEnabled}static set RefractionTextureEnabled(e){this._RefractionTextureEnabled!==e&&(this._RefractionTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get ColorGradingTextureEnabled(){return this._ColorGradingTextureEnabled}static set ColorGradingTextureEnabled(e){this._ColorGradingTextureEnabled!==e&&(this._ColorGradingTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get FresnelEnabled(){return this._FresnelEnabled}static set FresnelEnabled(e){this._FresnelEnabled!==e&&(this._FresnelEnabled=e,Me.MarkAllMaterialsAsDirty(4))}static get ClearCoatTextureEnabled(){return this._ClearCoatTextureEnabled}static set ClearCoatTextureEnabled(e){this._ClearCoatTextureEnabled!==e&&(this._ClearCoatTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get ClearCoatBumpTextureEnabled(){return this._ClearCoatBumpTextureEnabled}static set ClearCoatBumpTextureEnabled(e){this._ClearCoatBumpTextureEnabled!==e&&(this._ClearCoatBumpTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get ClearCoatTintTextureEnabled(){return this._ClearCoatTintTextureEnabled}static set ClearCoatTintTextureEnabled(e){this._ClearCoatTintTextureEnabled!==e&&(this._ClearCoatTintTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get SheenTextureEnabled(){return this._SheenTextureEnabled}static set SheenTextureEnabled(e){this._SheenTextureEnabled!==e&&(this._SheenTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get AnisotropicTextureEnabled(){return this._AnisotropicTextureEnabled}static set AnisotropicTextureEnabled(e){this._AnisotropicTextureEnabled!==e&&(this._AnisotropicTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get ThicknessTextureEnabled(){return this._ThicknessTextureEnabled}static set ThicknessTextureEnabled(e){this._ThicknessTextureEnabled!==e&&(this._ThicknessTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get RefractionIntensityTextureEnabled(){return this._ThicknessTextureEnabled}static set RefractionIntensityTextureEnabled(e){this._RefractionIntensityTextureEnabled!==e&&(this._RefractionIntensityTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get TranslucencyIntensityTextureEnabled(){return this._TranslucencyIntensityTextureEnabled}static set TranslucencyIntensityTextureEnabled(e){this._TranslucencyIntensityTextureEnabled!==e&&(this._TranslucencyIntensityTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get TranslucencyColorTextureEnabled(){return this._TranslucencyColorTextureEnabled}static set TranslucencyColorTextureEnabled(e){this._TranslucencyColorTextureEnabled!==e&&(this._TranslucencyColorTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}static get IridescenceTextureEnabled(){return this._IridescenceTextureEnabled}static set IridescenceTextureEnabled(e){this._IridescenceTextureEnabled!==e&&(this._IridescenceTextureEnabled=e,Me.MarkAllMaterialsAsDirty(1))}};ce._DiffuseTextureEnabled=!0;ce._BaseWeightTextureEnabled=!0;ce._BaseDiffuseRoughnessTextureEnabled=!0;ce._DetailTextureEnabled=!0;ce._DecalMapEnabled=!0;ce._AmbientTextureEnabled=!0;ce._OpacityTextureEnabled=!0;ce._ReflectionTextureEnabled=!0;ce._EmissiveTextureEnabled=!0;ce._SpecularTextureEnabled=!0;ce._BumpTextureEnabled=!0;ce._LightmapTextureEnabled=!0;ce._RefractionTextureEnabled=!0;ce._ColorGradingTextureEnabled=!0;ce._FresnelEnabled=!0;ce._ClearCoatTextureEnabled=!0;ce._ClearCoatBumpTextureEnabled=!0;ce._ClearCoatTintTextureEnabled=!0;ce._SheenTextureEnabled=!0;ce._AnisotropicTextureEnabled=!0;ce._ThicknessTextureEnabled=!0;ce._RefractionIntensityTextureEnabled=!0;ce._TranslucencyIntensityTextureEnabled=!0;ce._TranslucencyColorTextureEnabled=!0;ce._IridescenceTextureEnabled=!0});function Sf(n,e,t){if(!n||n.LOGARITHMICDEPTH||n.indexOf&&n.indexOf("LOGARITHMICDEPTH")>=0){let i=t.activeCamera;i.mode===1&&ee.Error("Logarithmic depth is not compatible with orthographic cameras!",20),e.setFloat("logarithmicDepthConstant",2/(Math.log(i.maxZ+1)/Math.LN2))}}var ak=M(()=>{Pt()});function Tf(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(ok,n.getEngine().useExactSrgbConversions),t.setColor3("vFogColor",ok)):t.setColor3("vFogColor",n.fogColor))}function cl(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"),Qh.NUM_MORPH_INFLUENCERS=f,Qh.NORMAL=s,Qh.TANGENT=a,Qh.UV=o,Qh.UV2=l,Qh.COLOR=c,$h(t,i,Qh,r),f)}function $h(n,e,t,i=!0){let r=t.NUM_MORPH_INFLUENCERS;if(r>0&&Oe.LastCreatedEngine){let s=Oe.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&&ee.Error("Cannot add more vertex attributes for mesh "+e.name)}}function go(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 Un(n,e){let t=n.morphTargetManager;!n||!t||e.setFloatArray("morphTargetInfluences",t.influences)}function Af(n,e){e.bindToEffect(n,"Scene")}function Sm(n,e,t,i,r=null,s=!1,a=!1,o=!1,l=!1,c=!1,f=!1,h=0){if(n.texturesEnabled&&r&&ce.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 tx(n,e,t,i=null,r=!1){if(i&&ce.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 ni(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 si(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 Fae(n,e){return e.set(n),e}function Ps(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]),Fae(r,t.previousBones[n.uniqueId])))}}}function Bae(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 Rm(n,e){(e.INSTANCES||e.THIN_INSTANCES)&&go(n,!!e.PREPASS_VELOCITY),e.INSTANCESCOLOR&&n.push("instanceColor")}function bm(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 Uae(n,e){return e.fogEnabled&&n.applyFog&&e.fogMode!==0}function Im(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&&Uae(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 Mm(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 Vae(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 ym(n,e,t,i,r,s=null,a=!1){let o=Hae(n,i);s!==!1&&(o=sk(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 Gae(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 kae(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 Wae(n,e){let t=n.bakedVertexAnimationManager;e.BAKED_VERTEX_ANIMATION_TEXTURE=!!(t&&t.isEnabled)}function Pm(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&&Gae(n,e),r&&kae(n,e),a&&Wae(n,e),!0}function Lm(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 Om(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();Ni();eg();ll();Da();Vr();ak();ok={r:0,g:0,b:0},Qh={NUM_MORPH_INFLUENCERS:0,NORMAL:!1,TANGENT:!1,UV:!1,UV2:!1,COLOR:!1}});var Ee,Gn=M(()=>{Gt();Vt();Ci();di();Ni();Tg();mf();Pt();Qu();kh();nk();Vn();xr();JM();Ee=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 ie),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 ie),this._onUnBindObservable}get onEffectCreatedObservable(){return this._onEffectCreatedObservable||(this._onEffectCreatedObservable=new ie),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&&ee.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 ie,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 wn,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||Oe.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||_e.RandomId(),this.uniqueId=this._scene.getUniqueId(),this._materialContext=this._scene.getEngine().createMaterialContext(),this._drawWrapper=new Jn(this._scene.getEngine(),!1),this._drawWrapper.materialContext=this._materialContext,this._uniformBuffer=new ur(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 ur(e,void 0,void 0,this.name,!0),this._shaderLanguage=1):this._uniformBuffer=new ur(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 qT(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,Af(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 no(0,0,0,1)),this._storeEffectOnSubMeshes){let f=!0,h=null;if(e.subMeshes){let d=new ys(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();Ee._ImageProcessingDirtyCallBack=n=>n.markAsImageProcessingDirty();Ee._TextureDirtyCallBack=n=>n.markAsTexturesDirty();Ee._FresnelDirtyCallBack=n=>n.markAsFresnelDirty();Ee._MiscDirtyCallBack=n=>n.markAsMiscDirty();Ee._PrePassDirtyCallBack=n=>n.markAsPrePassDirty();Ee._LightsDirtyCallBack=n=>n.markAsLightDirty();Ee._AttributeDirtyCallBack=n=>n.markAsAttributesDirty();Ee._FresnelAndMiscDirtyCallBack=n=>{Ee._FresnelDirtyCallBack(n),Ee._MiscDirtyCallBack(n)};Ee._TextureAndMiscDirtyCallBack=n=>{Ee._TextureDirtyCallBack(n),Ee._MiscDirtyCallBack(n)};Ee._DirtyCallbackArray=[];Ee._RunDirtyCallBacks=n=>{for(let e of Ee._DirtyCallbackArray)e(n)};P([F()],Ee.prototype,"id",void 0);P([F()],Ee.prototype,"uniqueId",void 0);P([F()],Ee.prototype,"name",void 0);P([F()],Ee.prototype,"metadata",void 0);P([F()],Ee.prototype,"checkReadyOnEveryCall",void 0);P([F()],Ee.prototype,"checkReadyOnlyOnce",void 0);P([F()],Ee.prototype,"state",void 0);P([F("alpha")],Ee.prototype,"_alpha",void 0);P([F("backFaceCulling")],Ee.prototype,"_backFaceCulling",void 0);P([F("cullBackFaces")],Ee.prototype,"_cullBackFaces",void 0);P([F()],Ee.prototype,"sideOrientation",void 0);P([F()],Ee.prototype,"_alphaMode",void 0);P([F()],Ee.prototype,"_needDepthPrePass",void 0);P([F()],Ee.prototype,"disableDepthWrite",void 0);P([F()],Ee.prototype,"disableColorWrite",void 0);P([F()],Ee.prototype,"forceDepthWrite",void 0);P([F()],Ee.prototype,"depthFunction",void 0);P([F()],Ee.prototype,"separateCullingPass",void 0);P([F("fogEnabled")],Ee.prototype,"_fogEnabled",void 0);P([F()],Ee.prototype,"pointSize",void 0);P([F()],Ee.prototype,"zOffset",void 0);P([F()],Ee.prototype,"zOffsetUnits",void 0);P([F()],Ee.prototype,"pointsCloud",null);P([F()],Ee.prototype,"fillMode",null);P([F()],Ee.prototype,"useLogarithmicDepth",null);P([F()],Ee.prototype,"_isVertexOutputInvariant",void 0);P([F()],Ee.prototype,"transparencyMode",null)});var Fm,lk=M(()=>{Gn();df();zi();Fm=class n extends Ee{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}};Ft("BABYLON.MultiMaterial",Fm)});var ix,ck=M(()=>{ix=class{constructor(e,t){this.distanceOrScreenCoverage=e,this.mesh=t}}});var Bm,rx,Qy,nx,$y,Jy,fl,q,yi=M(()=>{di();Ci();$_();df();zy();al();Ge();zt();Js();ki();mr();$A();vm();Tg();Gn();lk();QA();xr();Pt();zi();hn();lm();ck();Bm=class{},rx=class{constructor(){this.batchCache=new nx(this),this.batchCacheReplacementModeInFrozenMode=new nx(this),this.instancesBufferSize=512*4}},Qy=class{constructor(){this.renderPasses={}}},nx=class{constructor(e){this.parent=e,this.mustReturn=!1,this.visibleInstances=new Array,this.renderSelf=[],this.hardwareInstancedRendering=[]}},$y=class{constructor(){this.instancesCount=0,this.matrixBuffer=null,this.previousMatrixBuffer=null,this.matrixBufferSize=512,this.matrixData=null,this.boundingVectors=[],this.worldMatrices=null}},Jy=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}},fl={source:null,parent:null,doNotCloneChildren:!1,clonePhysicsImpostor:!0,cloneThinInstances:!1},q=class n extends Er{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 ie),this._internalMeshDataInfo._onBeforeRenderObservable}get onBeforeBindObservable(){return this._internalMeshDataInfo._onBeforeBindObservable||(this._internalMeshDataInfo._onBeforeBindObservable=new ie),this._internalMeshDataInfo._onBeforeBindObservable}get onAfterRenderObservable(){return this._internalMeshDataInfo._onAfterRenderObservable||(this._internalMeshDataInfo._onAfterRenderObservable=new ie),this._internalMeshDataInfo._onAfterRenderObservable}get onBetweenPassObservable(){return this._internalMeshDataInfo._onBetweenPassObservable||(this._internalMeshDataInfo._onBetweenPassObservable=new ie),this._internalMeshDataInfo._onBetweenPassObservable}get onBeforeDrawObservable(){return this._internalMeshDataInfo._onBeforeDrawObservable||(this._internalMeshDataInfo._onBeforeDrawObservable=new ie),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),il.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&&_&&(this._uniformBuffer?this.transferToEffect(p):_.bindOnlyWorldMatrix(p))};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 ie(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 ee.Warn("You cannot use a mesh as LOD level twice"),this;let i=new ix(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 p of this.subMeshes){let _=p.getMaterial();if(_){if(_._storeEffectOnSubMeshes){if(!_.isReadyForSubMesh(this,p,s))return!1}else if(!_.isReady(this,s))return!1}}else if(!a.isReady(this,s))return!1}let o=i.currentRenderPassId;for(let p of this.lightSources){let _=p.getShadowGenerators();if(!_)continue;let g=_.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 S=0;S0){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 ys(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++)ys.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 Ce;s.set(t,e);let a=this.getScene();new mn(mn.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=mn.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;Ce.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(mn.RandomId());return e.releaseForMesh(this,!0),t.applyToMesh(this),this}setIndexBuffer(e,t,i,r=null){let s=this._geometry;s||(s=new mn(mn.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 Ce;s.indices=e;let a=this.getScene();new mn(mn.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)this._getRenderingFillMode(i)===Ee.WireFrameFillMode?a=e._getLinesIndexBuffer(this.getIndices(),s):a=null;else switch(this._getRenderingFillMode(i)){case Ee.PointFillMode:a=null;break;case Ee.WireFrameFillMode:a=e._getLinesIndexBuffer(this.getIndices(),s);break;default:case Ee.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!==Ee.WireFrameFillMode||t==Ee.PointFillMode?s.drawArraysType(t,e.verticesStart,e.verticesCount,this.forcedInstanceCount||i):t==Ee.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,p=t.renderSelf[e._id],_=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(p){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 T=x.asArray();c.instancesData[u+12]=T[12]-_.x,c.instancesData[u+13]=T[13]-_.y,c.instancesData[u+14]=T[14]-_.z,u+=16,m++}if(o){if(n.INSTANCEDMESH_SORT_TRANSPARENT&&this._scene.activeCamera&&((v=e.getMaterial())!=null&&v.needAlphaBlendingForMesh(e.getRenderingMesh()))){let T=this._scene.activeCamera.globalPosition;for(let E=0;EE._distanceToCamera>S._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,p=e.getMaterial();if(!p)return h&&(h.maxZ=f,r.updateTransformMatrix(!0)),this;if(!m.isFrozen||!this._internalMeshDataInfo._effectiveMaterial||this._internalMeshDataInfo._effectiveMaterial!==p){if(p._storeEffectOnSubMeshes){if(!p.isReadyForSubMesh(this,e,u))return h&&(h.maxZ=f,r.updateTransformMatrix(!0)),this}else if(!p.isReady(this,u))return h&&(h.maxZ=f,r.updateTransformMatrix(!0)),this;this._internalMeshDataInfo._effectiveMaterial=p}else if(p._storeEffectOnSubMeshes&&!((y=e._drawWrapper)!=null&&y._wasPreviouslyReady)||!p._storeEffectOnSubMeshes&&!p._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 T=1/v,E=0;for(let S=0;Sf&&o++}}let h=this.skeleton.bones.length,d=this.getVerticesData(L.MatricesIndicesKind),u=this.getVerticesData(L.MatricesIndicesExtraKind),m=0;for(let _=0;_=h||v<0)&&m++}let p="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:p}}_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 pe.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,p=this.getEngine().createCanvas(d,u).getContext("2d");p.drawImage(h,0,0);let _=p.getImageData(0,0,d,u).data;this.applyDisplacementMapFromBuffer(_,d,u,t,i,s,a,o),r&&r(this)};return pe.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 ee.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=Fe.Zero();a=a||Fe.Zero(),o=o||new Fe(1,1);for(let p=0;p{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 j,m=new j,p=0,_;for(let g=0;g0&&(j.FromFloat32ArrayToRefScaled(h,Math.floor(a[p+_]*16),v,m),u.addToSelf(m));if(l)for(_=0;_<4;_++)v=f[p+_],v>0&&(j.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 Eg(n._MergeMeshesCoroutine(e,t,i,r,s,a,!1))}static async MergeMeshesAsync(e,t=!0,i,r,s,a){return await FG(n._MergeMeshesCoroutine(e,t,i,r,s,a,!0),NG())}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 ee.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 C,y,D,O;return((y=(C=R.material)==null?void 0:C.uniqueId)!=null?y:-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(C,y.start+y.count),0);if(a)if(R.material){let C=R.material;if(C instanceof Fm){for(let y=0;y1){let R=0;for(let I=1;I{let I=R.computeWorldMatrix(!0);return{vertexData:Ce.ExtractFromMesh(R,!1,!1),transform:I}},{vertexData:p,transform:_}=m(e[0]);o&&(yield);let g=new Array(e.length-1);for(let R=1;R{throw Ze("GroundMesh")};q._GoldbergMeshParser=(n,e)=>{throw Ze("GoldbergMesh")};q._LinesMeshParser=(n,e)=>{throw Ze("LinesMesh")};q._GreasedLineMeshParser=(n,e)=>{throw Ze("GreasedLineMesh")};q._GreasedLineRibbonMeshParser=(n,e)=>{throw Ze("GreasedLineRibbonMesh")};q._TrailMeshParser=(n,e)=>{throw Ze("TrailMesh")};q._GaussianSplattingMeshParser=(n,e)=>{throw Ze("GaussianSplattingMesh")};q._GaussianSplattingPartProxyMeshParser=(n,e)=>{throw Ze("GaussianSplattingPartProxyMesh")};q._GaussianSplattingCompoundMeshParser=(n,e)=>{throw Ze("GaussianSplattingCompoundMesh")};Ft("BABYLON.Mesh",q)});var Bm,qy=M(()=>{co();Ul();Ln();Bm=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===st.POINTERDOWN){this._isPointerDown=!0;return}i.type===st.POINTERUP&&(this._isPointerDown=!1)}),this._onAfterCheckInputsObserver=e.onAfterCheckInputsObservable.add(()=>{if(this._reachTargetAlpha())return;let i=_r.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:_r.Now}_reachTargetAlpha(){return this._attachedCamera&&this.targetAlpha?Math.abs(this._attachedCamera.alpha-this.targetAlpha){Uh();go=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}};go.EASINGMODE_EASEIN=0;go.EASINGMODE_EASEOUT=1;go.EASINGMODE_EASEINOUT=2;ex=class extends go{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)}},tx=class extends go{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 bf,Qy=M(()=>{bf=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 $y,Jy,eP,tP,iP,rP,vo,ht,If=M(()=>{Ge();zt();Dn();zi();Qy();$s();tA();Bh();Ar();$y=Object.freeze(new ze(0,0,0,0)),Jy=Object.freeze(b.Zero()),eP=Object.freeze(Fe.Zero()),tP=Object.freeze(Gl.Zero()),iP=Object.freeze(ge.Black()),rP=Object.freeze(new lt(0,0,0,0)),vo={key:0,repeatCount:0,loopMode:2},ht=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 Fe?c=n.ANIMATIONTYPE_VECTOR2:s instanceof ge?c=n.ANIMATIONTYPE_COLOR3:s instanceof lt?c=n.ANIMATIONTYPE_COLOR4:s instanceof Gl&&(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,p=d.frame;if(a.range){let A=o.getRange(a.range);A&&(m=A.from,p=A.to)}else m=(v=a.fromFrame)!=null?v:m,p=(x=a.toFrame)!=null?x:p;if(m!==f.frame&&(c=o.createKeyForFrame(m)),p!==d.frame&&(h=o.createKeyForFrame(p)),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{vo.key=0;let A=o._interpolate(l,vo);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 _=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&&(_===Number.MAX_VALUE&&(_=E.frame),E.frame-=_,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),j.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 p=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>p-1)return i?void 0:this._getKeyValue(r[p-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 p=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 p;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return((m=t.offsetValue)!=null?m:0)*t.repeatCount+p}break}case n.ANIMATIONTYPE_QUATERNION:{let p=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 p;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return p.addInPlace((t.offsetValue||$y).scale(t.repeatCount))}return p}case n.ANIMATIONTYPE_VECTOR3:{let p=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 p;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return p.add((t.offsetValue||Jy).scale(t.repeatCount))}break}case n.ANIMATIONTYPE_VECTOR2:{let p=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 p;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return p.add((t.offsetValue||eP).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||tP).scale(t.repeatCount))}break}case n.ANIMATIONTYPE_COLOR3:{let p=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 p;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return p.add((t.offsetValue||iP).scale(t.repeatCount))}break}case n.ANIMATIONTYPE_COLOR4:{let p=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 p;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return p.add((t.offsetValue||rP).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?(j.DecomposeLerpToRef(e,t,i,r),r):j.DecomposeLerp(e,t,i):r?(j.LerpToRef(e,t,i,r),r):j.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=j.FromArray(o.values),o.values.length>=17&&(f=o.values[16]);break;case n.ANIMATIONTYPE_COLOR3:s=ge.FromArray(o.values),o.values[3]&&(l=ge.FromArray(o.values[3])),o.values[4]&&(c=ge.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 Mr;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 Mr;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()})}};ht._UniqueIdGenerator=0;ht.AllowMatricesInterpolation=!1;ht.AllowMatrixDecomposeForInterpolation=!0;ht.InheritOriginalValueFromActiveAnimations=!1;ht.SnippetUrl="https://snippet.babylonjs.com";ht.ANIMATIONTYPE_FLOAT=0;ht.ANIMATIONTYPE_VECTOR3=1;ht.ANIMATIONTYPE_QUATERNION=2;ht.ANIMATIONTYPE_MATRIX=3;ht.ANIMATIONTYPE_COLOR3=4;ht.ANIMATIONTYPE_COLOR4=7;ht.ANIMATIONTYPE_VECTOR2=5;ht.ANIMATIONTYPE_SIZE=6;ht.ANIMATIONLOOPMODE_RELATIVE=0;ht.ANIMATIONLOOPMODE_CYCLE=1;ht.ANIMATIONLOOPMODE_CONSTANT=2;ht.ANIMATIONLOOPMODE_YOYO=4;ht.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT=5;ht.CreateFromSnippetAsync=ht.ParseFromSnippetAsync;Ft("BABYLON.Animation",ht);_i._AnimationRangeFactory=(n,e,t)=>new bf(n,e,t)});var Vm,JG=M(()=>{Zy();If();Vm=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=ht.CreateAnimation("radius",ht.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=ht.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()}};Vm.EasingFunction=new ex(.3);Vm.EasingMode=go.EASINGMODE_EASEOUT});var Mf,ek=M(()=>{Zy();di();co();Ul();Ge();If();Mf=class n{constructor(){this.onTargetFramingAnimationEndObservable=new ie,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===st.POINTERDOWN){this._isPointerDown=!0;return}i.type===st.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=_r.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=ht.CreateAnimation("beta",ht.ANIMATIONTYPE_FLOAT,60,n.EasingFunction));let r=ht.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=_r.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}};Mf.EasingFunction=new tx;Mf.EasingMode=go.EASINGMODE_EASEINOUT;Mf.IgnoreBoundsSizeMode=0;Mf.FitFrustumSidesMode=1});var ix,nP,Cs,sP=M(()=>{Gt();Vt();sl();Ge();Ln();Yu();$s();_i.AddNodeConstructor("TargetCamera",(n,e)=>()=>new Cs(n,b.Zero(),e));ix=j.Zero(),nP=ze.Identity(),Cs=class n extends mt{constructor(e,t,i,r=!0){super(e,t,i,r),this.cameraDirection=new b(0,0,0),this.cameraRotation=new Fe(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=j.Zero(),this._cameraTransformMatrix=j.Zero(),this._cameraRotationMatrix=j.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?j.LookAtRHToRef(this.position,e,b.UpReadOnly,ix):j.LookAtLHToRef(this.position,e,b.UpReadOnly,ix),ix.invert();let t=this.rotationQuaternion||nP;ze.FromRotationMatrixToRef(ix,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();Ar();sl();Gn={},Gm=class{constructor(e){this.attachedToElement=!1,this.attached={},this.camera=e,this.checkInputs=()=>{}}add(e){let t=e.getSimpleName();if(this.attached[t]){ee.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=mt.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=it.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=Gn[i];if(r){let s=t[i],a=it.Parse(()=>new r,s,null);this.add(a)}}}else for(let i in this.attached){let r=Gn[this.attached[i].getClassName()];if(r){let s=it.Parse(()=>new r,e,null);this.remove(this.attached[i]),this.add(s)}}}}});var Ag,tk=M(()=>{Gt();Vt();Mi();co();Ag=class{constructor(){this._currentMousePointerIdDown=-1,this.buttons=[0,1,2]}attachControl(e){e=pe.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!==st.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!==st.POINTERDOWN&&o.type!==st.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===st.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===st.POINTERDOUBLETAP)this.onDoubleTap(l.pointerType);else if(o.type===st.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===st.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,p=this._pointA.y-this._pointB.y,_=m*m+p*p,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,_,s,g),s=g,r=_}}}},this._observer=this.camera.getScene()._inputManager._addCameraPointerObserver(this._pointerInput,st.POINTERDOWN|st.POINTERUP|st.POINTERMOVE|st.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&&pe.RegisterTopRootEvents(a,[{name:"blur",handler:this._onLostFocus}])}detachControl(){if(this._onLostFocus){let e=this.camera.getScene().getEngine().getHostWindow();e&&pe.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()],Ag.prototype,"buttons",void 0)});var Jh,ik=M(()=>{Gt();Vt();tk();Jh=class extends Ag{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()],Jh.prototype,"pinchZoom",void 0);P([F()],Jh.prototype,"multiTouchPanning",void 0);P([F()],Jh.prototype,"multiTouchPanAndZoom",void 0)});var Js,rk=M(()=>{Gt();Vt();fl();ik();Js=class n extends Jh{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()}};Js.MinimumRadiusForPinch=.001;P([F()],Js.prototype,"buttons",void 0);P([F()],Js.prototype,"angularSensibilityX",void 0);P([F()],Js.prototype,"angularSensibilityY",void 0);P([F()],Js.prototype,"pinchPrecision",void 0);P([F()],Js.prototype,"pinchDeltaPercentage",void 0);P([F()],Js.prototype,"useNaturalPinchZoom",void 0);P([F()],Js.prototype,"panningSensibility",void 0);Gn.ArcRotateCameraPointersInput=Js});var ys,nk=M(()=>{Gt();Vt();fl();IA();Mi();ys=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=pe.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===fo.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{Gt();Vt();fl();co();Qu();Ge();Ln();MA();Dn();Mi();yae=40,Cf=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=pe.BackCompatCameraNoPreventDefault(arguments),this._wheel=t=>{if(t.type!==st.POINTERWHEEL)return;let i=t.event,r,s=i.deltaMode===ho.DOM_DELTA_LINE?yae: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,st.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=ro.FromPositionAndNormal(e.target,t)}_getPosition(){var s;let e=this.camera,t=e.getScene(),i=t.createPickingRay(t.pointerX,t.pointerY,j.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){rk();nk();sk();fl();rx=class extends Gm{constructor(e){super(e)}addMouseWheel(){return this.add(new Cf),this}addPointers(){return this.add(new Js),this}addKeyboard(){return this.add(new ys),this}}});function Pae(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 Lae(n,e){return Math.acos(n/e)}function kn(n,e){return isNaN(n)?e:n}var gi,nx=M(()=>{Gt();Vt();di();Ge();Dn();$s();Ci();qy();JG();ek();sl();sP();ak();Ln();Mi();zi();_i.AddNodeConstructor("ArcRotateCamera",(n,e)=>()=>new gi(n,0,0,1,b.Zero(),e));gi=class n extends Cs{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 j,this._upToYMatrix=new j,this._upVector=b.Zero()),e.normalize(),this._upVector.copyFrom(e),this.setMatUp()}get upVector(){return this._upVector}setMatUp(){j.RotationAlignToRef(b.UpReadOnly,this._upVector,this._yToUpMatrix),j.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 Vm,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 Mf,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 Bm,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=Fe.Zero(),this.allowUpsideDown=!0,this.useInputToRestoreState=!0,this.restoreStateInterpolationFactor=0,this._currentInterpolationFactor=0,this._viewMatrix=new j,this.panningAxis=new b(1,1,0),this._transformedDirection=new b,this.mapPanning=!1,this._isInterpolating=!1,this.onMeshTargetChangedObservable=new ie,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 Fe(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 p=this._getTargetPosition();this._computationVector.copyFromFloats(this.radius*h*m,this.radius*u,this.radius*d*m),p.addToRef(this._computationVector,this._newPosition),this._position.copyFrom(this._newPosition);let _=this.upVector;this.allowUpsideDown&&this.beta<0&&(_=_.clone(),_=_.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 rx(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=Fe.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=kn(e,this._goalAlpha),this._goalBeta=kn(t,this._goalBeta),this._goalRadius=kn(i,this._goalRadius),this._goalTarget.set(kn(r.x,this._goalTarget.x),kn(r.y,this._goalTarget.y),kn(r.z,this._goalTarget.z)),this._goalTargetScreenOffset.set(kn(s.x,this._goalTargetScreenOffset.x),kn(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=pe.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=Pae(this._computationVector),this.beta=Lae(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===mt.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 mt.RIG_MODE_STEREOSCOPIC_ANAGLYPH:case mt.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL:case mt.RIG_MODE_STEREOSCOPIC_OVERUNDER:case mt.RIG_MODE_STEREOSCOPIC_INTERLACED:case mt.RIG_MODE_VR:i=this._cameraRigParams.stereoHalfAngle*(t===0?1:-1);break;case mt.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 mt.RIG_MODE_STEREOSCOPIC_ANAGLYPH:case mt.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL:case mt.RIG_MODE_STEREOSCOPIC_OVERUNDER:case mt.RIG_MODE_STEREOSCOPIC_INTERLACED:case mt.RIG_MODE_VR:e.alpha=this.alpha-this._cameraRigParams.stereoHalfAngle,t.alpha=this.alpha+this._cameraRigParams.stereoHalfAngle;break;case mt.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([zr("target")],gi.prototype,"_target",void 0);P([sA("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([zr()],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([im()],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);Ft("BABYLON.ArcRotateCamera",gi)});var Xt,yf=M(()=>{Gt();Vt();Ge();zt();$s();mf();zi();J_();Ar();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 ge(1,1,1),this.specular=new ge(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 ur(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,En.Color3[0]),this._uniformBuffer.updateColor4("vLightDiffuse",En.Color3[0],this.range,a),r&&(this.specular.scaleToRef(c,En.Color3[1]),this._uniformBuffer.updateColor4("vLightSpecular",En.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=it.Clone(i,this);return e&&(r.name=e),t&&(r.parent=t),r.setEnabled(this.isEnabled()),this.onClonedObservable.notifyObservers(r),r}serialize(){let e=it.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 it.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=it.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([vr()],Xt.prototype,"diffuse",void 0);P([vr()],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([le("_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 ea,sx=M(()=>{Gt();Vt();Ge();zt();$s();yf();zi();_i.AddNodeConstructor("Light_Type_3",(n,e)=>()=>new ea(n,b.Zero(),e));ea=class extends Xt{constructor(e,t,i,r){super(e,i,r),this.groundColor=new ge(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=j.Identity()),this._worldMatrix}getTypeID(){return Xt.LIGHTTYPEID_HEMISPHERICLIGHT}prepareLightSpecificDefines(e,t){e["HEMILIGHT"+t]=!0}};P([vr()],ea.prototype,"groundColor",void 0);P([zr()],ea.prototype,"direction",void 0);Ft("BABYLON.HemisphericLight",ea)});var Oa,ax=M(()=>{Gt();Vt();Ge();yf();Yu();Oa=class extends Xt{constructor(){super(...arguments),this._needProjectionMatrixCompute=!0,this._viewMatrix=j.Identity(),this._projectionMatrix=j.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,As.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=j.Identity()),j.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),j.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([zr()],Oa.prototype,"position",null);P([zr()],Oa.prototype,"direction",null);P([F()],Oa.prototype,"shadowMinZ",null);P([F()],Oa.prototype,"shadowMaxZ",null)});var Ps,ok=M(()=>{Gt();Vt();Ge();$s();yf();ax();zi();_i.AddNodeConstructor("Light_Type_1",(n,e)=>()=>new Ps(n,b.Zero(),e));Ps=class extends Oa{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;j.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;j.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()],Ps.prototype,"shadowFrustumSize",null);P([F()],Ps.prototype,"shadowOrthoScale",null);P([F()],Ps.prototype,"autoUpdateExtends",void 0);P([F()],Ps.prototype,"autoCalcShadowZBounds",void 0);P([F("orthoLeft")],Ps.prototype,"_orthoLeft",void 0);P([F("orthoRight")],Ps.prototype,"_orthoRight",void 0);P([F("orthoTop")],Ps.prototype,"_orthoTop",void 0);P([F("orthoBottom")],Ps.prototype,"_orthoBottom",void 0);Ft("BABYLON.DirectionalLight",Ps)});var Pf,lk=M(()=>{Gt();Vt();Ge();$s();yf();ax();zi();_i.AddNodeConstructor("Light_Type_0",(n,e)=>()=>new Pf(n,b.Zero(),e));Pf=class extends Oa{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;j.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()],Pf.prototype,"shadowAngle",null);Ft("BABYLON.PointLight",Pf)});var kr,aP=M(()=>{Gt();Vt();Ge();$s();yf();ax();Vr();zi();_i.AddNodeConstructor("Light_Type_2",(n,e)=>()=>new kr(n,b.Zero(),b.Zero(),0,0,e));kr=class n extends Oa{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=j.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=j.Zero(),this._projectionTextureProjectionLightMatrix=j.Zero(),this._projectionTextureScalingMatrix=j.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;j.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),j.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);j.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 _e){let e=this._projectionTexture.uScale/2,t=this._projectionTexture.vScale/2;j.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()],kr.prototype,"angle",null);P([F()],kr.prototype,"innerAngle",null);P([F()],kr.prototype,"shadowAngleScale",null);P([F()],kr.prototype,"exponent",void 0);P([F()],kr.prototype,"projectionTextureLightNear",null);P([F()],kr.prototype,"projectionTextureLightFar",null);P([F()],kr.prototype,"projectionTextureUpDirection",null);P([Bt("projectedLightTexture")],kr.prototype,"_projectionTexture",void 0);Ft("BABYLON.SpotLight",kr)});function ck(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||Ce.DEFAULTSIDE,l=n.uvs,c=n.colors,f=[],h=[],d=[],u=[],m=[],p=[],_=[],g=[],v,x=[],A=[],E,S,R;if(e.length<2){let be=[],Ke=[];for(S=0;S0&&(V=D[R].subtract(D[R-1]).length(),N=V+_[E],m[E].push(N),_[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+_[E],m[E].push(N),_[E]=N),x[E]=O+C,A[E]=I,I+=O+C}let w,B,W,te;for(S=0;S{let m=i[0].length,p=o,_=0,g=p._originalBuilderSideOrientation===q.DOUBLESIDE?2:1;for(let v=1;v<=g;++v)for(let x=0;x{Ge();Ci();ki();mr();tn();Ce.CreateRibbon=ck;q.CreateRibbon=(n,e,t=!1,i,r,s,a=!1,o,l)=>Eo(n,{pathArray:e,closeArray:t,closePath:i,offset:r,updatable:a,sideOrientation:o,instance:l},s)});function fk(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||Ce.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{Ci();mr();tn();Ce.CreateDisc=fk;q.CreateDisc=(n,e,t,i=null,r,s)=>oP(n,{radius:e,tessellation:t,sideOrientation:s,updatable:r},i)});var km,dk=M(()=>{Ge();ki();Ci();q._GroundMeshParser=(n,e)=>km.Parse(n,e);km=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,p=n.buffer[m]/255,_=n.buffer[m+1]/255,g=n.buffer[m+2]/255,v=n.buffer[m+3]/255;c&&(p=1-p,_=1-_,g=1-g);let x=p*o.r+_*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,_=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&&p&&g&&(e.push(m),e.push(h),e.push(u))}Ce.ComputeNormals(t,e,i);let f=new Ce;return f.indices=e,f.positions=t,f.normals=i,f.uvs=r,f}function cP(n,e={},t){let i=new km(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,lP(e).applyToMesh(i,e.updatable),i._setReady(!0),i}function fP(n,e,t=null){let i=new q(n,t);return uk(e).applyToMesh(i,e.updatable),i}function hP(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 ge(.3,.59,.11),f=t.alphaFilter||0,h=t.updatable,d=t.onReady;i=i||Oe.LastCreatedScene;let u=new km(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)=>{mk({width:r,height:s,subdivisions:a,minHeight:o,maxHeight:l,colorFilter:c,buffer:_,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 _=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);p(E,x,A),i.removePendingData(u)},g=(v,x)=>{i.removePendingData(u),t.onError&&t.onError(v,x)};pe.LoadImage(e,_,g,i.offlineProvider)}else p(e.data,e.width,e.height);return u}var dP=M(()=>{Ge();zt();Ci();mr();dk();Mi();Oi();Ln();tn();Ce.CreateGround=lP;Ce.CreateTiledGround=uk;Ce.CreateGroundFromHeightMap=mk;q.CreateGround=(n,e,t,i,r,s)=>cP(n,{width:e,height:t,subdivisions:i,updatable:s},r);q.CreateTiledGround=(n,e,t,i,r,s,a,o,l)=>fP(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)=>hP(n,e,{width:t,height:i,subdivisions:r,minHeight:s,maxHeight:a,updatable:l,onReady:c,alphaFilter:f},o)});function ox(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],p=[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],p=[-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]],C=[17,18,19,16],y=[22,23,20,21];for(;u>0;)R.unshift(R.pop()),C.unshift(C.pop()),u--;for(;m>0;)I.unshift(I.pop()),y.unshift(y.pop()),m--;R=R.flat(),I=I.flat(),p=p.concat(R).concat(I),t.push(C[0],C[2],C[3],C[0],C[1],C[2]),t.push(y[0],y[2],y[3],y[0],y[1],y[2])}let _=[s/2,a/2,o/2],g=p.reduce((R,I,C)=>R.concat(I*_[C%3]),[]),v=n.sideOrientation===0?0:n.sideOrientation||Ce.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 Ii(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,Mt?1-x[R].w:x[R].w),r.push(x[R].x,Mt?1-x[R].w:x[R].w),r.push(x[R].x,Mt?1-x[R].y:x[R].y),r.push(x[R].z,Mt?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);Ce._ComputeSides(v,g,t,i,r,n.frontUVs,n.backUVs);let S=new Ce;if(S.indices=t,S.positions=g,S.normals=i,S.uvs=r,A){let R=v===Ce.DOUBLESIDE?E.concat(E):E;S.colors=R}return S}function uP(n,e={},t=null){let i=new q(n,t);return e.sideOrientation=q._GetDefaultSideOrientation(e.sideOrientation),i._originalBuilderSideOrientation=e.sideOrientation,ox(e).applyToMesh(i,e.updatable),i}var mP=M(()=>{Ge();zt();Ci();mr();tn();dP();Ce.CreateBox=ox;q.CreateBox=(n,e,t=null,i,r)=>uP(n,{size:e,sideOrientation:r,updatable:i},t)});function Wm(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,p=0,_=0,g=0,v=0,x=0;if(l>0||h>0){switch(_=-d,g=-u,v=d,x=u,r){case q.CENTER:l/=2,_-=l,v+=l;break;case q.LEFT:v+=l,m=-l/2;break;case q.RIGHT:_-=l,m=l/2;break}switch(s){case q.CENTER:h/=2,g-=h,x+=h;break;case q.BOTTOM:x+=h,p=-h/2;break;case q.TOP:g-=h,p=h/2;break}}let A=[],E=[],S=[];S[0]=[0,0,1,0,1,1,0,1],S[1]=[0,0,1,0,1,1,0,1],(e===q.ROTATE_TILE||e===q.ROTATE_ROW)&&(S[1]=[1,1,0,1,0,0,1,0]),(e===q.FLIP_TILE||e===q.FLIP_ROW)&&(S[1]=[1,0,0,0,0,1,1,1]),(e===q.FLIP_N_ROTATE_TILE||e===q.FLIP_N_ROTATE_ROW)&&(S[1]=[0,1,1,1,1,0,0,0]);let R=[],I=[],C=[],y=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),B=l>0&&(r===q.CENTER||r===q.RIGHT),W=l>0&&(r===q.CENTER||r===q.LEFT),te,$,J,z,Y;if(N&&B&&(A.push(_+m,g+p,0),A.push(-d+m,g+p,0),A.push(-d+m,g+h+p,0),A.push(_+m,g+h+p,0),C.push(y,y+1,y+3,y+1,y+2,y+3),y+=4,$=1-l/t,J=1-h/i,z=1,Y=1,te=[$,J,z,J,z,Y,$,Y],e===q.ROTATE_ROW&&(te=[1-$,1-J,1-z,1-J,1-z,1-Y,1-$,1-Y]),e===q.FLIP_ROW&&(te=[1-$,J,1-z,J,1-z,Y,1-$,Y]),e===q.FLIP_N_ROTATE_ROW&&(te=[$,1-J,z,1-J,z,1-Y,$,1-Y]),R=R.concat(te),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&&W&&(A.push(d+m,g+p,0),A.push(v+m,g+p,0),A.push(v+m,g+h+p,0),A.push(d+m,g+h+p,0),C.push(y,y+1,y+3,y+1,y+2,y+3),y+=4,$=0,J=1-h/i,z=l/t,Y=1,te=[$,J,z,J,z,Y,$,Y],(e===q.ROTATE_ROW||e===q.ROTATE_TILE&&o%2===0)&&(te=[1-$,1-J,1-z,1-J,1-z,1-Y,1-$,1-Y]),(e===q.FLIP_ROW||e===q.FLIP_TILE&&o%2===0)&&(te=[1-$,J,1-z,J,1-z,Y,1-$,Y]),(e===q.FLIP_N_ROTATE_ROW||e===q.FLIP_N_ROTATE_TILE&&o%2===0)&&(te=[$,1-J,z,1-J,z,1-Y,$,1-Y]),R=R.concat(te),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&&B&&(A.push(_+m,u+p,0),A.push(-d+m,u+p,0),A.push(-d+m,x+p,0),A.push(_+m,x+p,0),C.push(y,y+1,y+3,y+1,y+2,y+3),y+=4,$=1-l/t,J=0,z=1,Y=h/i,te=[$,J,z,J,z,Y,$,Y],(e===q.ROTATE_ROW&&f%2===1||e===q.ROTATE_TILE&&f%1===0)&&(te=[1-$,1-J,1-z,1-J,1-z,1-Y,1-$,1-Y]),(e===q.FLIP_ROW&&f%2===1||e===q.FLIP_TILE&&f%2===0)&&(te=[1-$,J,1-z,J,1-z,Y,1-$,Y]),(e===q.FLIP_N_ROTATE_ROW&&f%2===1||e===q.FLIP_N_ROTATE_TILE&&f%2===0)&&(te=[$,1-J,z,1-J,z,1-Y,$,1-Y]),R=R.concat(te),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&&W&&(A.push(d+m,u+p,0),A.push(v+m,u+p,0),A.push(v+m,x+p,0),A.push(d+m,x+p,0),C.push(y,y+1,y+3,y+1,y+2,y+3),y+=4,$=0,J=0,z=l/t,Y=h/i,te=[$,J,z,J,z,Y,$,Y],(e===q.ROTATE_ROW&&f%2===1||e===q.ROTATE_TILE&&(f+o)%2===1)&&(te=[1-$,1-J,1-z,1-J,1-z,1-Y,1-$,1-Y]),(e===q.FLIP_ROW&&f%2===1||e===q.FLIP_TILE&&(f+o)%2===1)&&(te=[1-$,J,1-z,J,1-z,Y,1-$,Y]),(e===q.FLIP_N_ROTATE_ROW&&f%2===1||e===q.FLIP_N_ROTATE_TILE&&(f+o)%2===1)&&(te=[$,1-J,z,1-J,z,1-Y,$,1-Y]),R=R.concat(te),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=[];$=0,J=1-h/i,z=1,Y=1,me[0]=[$,J,z,J,z,Y,$,Y],me[1]=[$,J,z,J,z,Y,$,Y],(e===q.ROTATE_TILE||e===q.ROTATE_ROW)&&(me[1]=[1-$,1-J,1-z,1-J,1-z,1-Y,1-$,1-Y]),(e===q.FLIP_TILE||e===q.FLIP_ROW)&&(me[1]=[1-$,J,1-z,J,1-z,Y,1-$,Y]),(e===q.FLIP_N_ROTATE_TILE||e===q.FLIP_N_ROTATE_ROW)&&(me[1]=[$,1-J,z,1-J,z,1-Y,$,1-Y]);for(let xe=0;xe{Ci();mr();Ce.CreateTiledPlane=Wm});function _k(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||Ce.DEFAULTSIDE;for(let N=0;N<6;N++)t[N]===void 0&&(t[N]=new Ii(0,0,1,1)),i&&i[N]===void 0&&(i[N]=new lt(1,1,1,1));let u=s/2,m=a/2,p=o/2,_=[];for(let N=0;N<2;N++)_[N]=Wm({pattern:r,tileWidth:l,tileHeight:c,width:s,height:a,alignVertical:h,alignHorizontal:f,sideOrientation:d});for(let N=2;N<4;N++)_[N]=Wm({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++)_[N]=Wm({pattern:r,tileWidth:l,tileHeight:c,width:s,height:o,alignVertical:g,alignHorizontal:f,sideOrientation:d});let v=[],x=[],A=[],E=[],S=[],R=[],I=[],C=[],y,D=0;for(let N=0;N<6;N++){let w=_[N].positions.length;R[N]=[],I[N]=[];for(let B=0;BB+D)),D+=R[N].length,i){let B=i[N];for(let W=0;W{Ge();zt();Ci();mr();pP();tn();lx=1,_P=-1;Ce.CreateTiledBox=_k});function Ek(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||Ce.DEFAULTSIDE,l=!!n.dedupTopBottomIndices,c=new b(t/2,i/2,r/2),f=2+e,h=2*f,d=[],u=[],m=[],p=[];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,S=E*Math.PI*2*s,R=j.RotationZ(-x),I=j.RotationY(S),C=b.TransformCoordinates(b.Up(),R),y=b.TransformCoordinates(C,I),D=y.multiply(c),O=y.divide(c).normalize();u.push(D.x,D.y,D.z),m.push(O.x,O.y,O.z),p.push(E,Mt?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{Ge();Ci();mr();tn();Ce.CreateSphere=Ek;q.CreateSphere=(n,e,t,i,r,s)=>gP(n,{segments:e,diameterX:t,diameterY:t,diameterZ:t,sideOrientation:s,updatable:r},i)});function Tk(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||Ce.DEFAULTSIDE,h=n.faceUV||new Array(3),d=n.faceColors,u=c!==1&&o?2:0,m=a?s:1,p=2+(1+u)*m,_;for(_=0;_{let ne=ve?t/2:i/2;if(ne===0)return;let ue,De,de,be=ve?h[p-1]:h[0],Ke=null;d&&(Ke=ve?d[p-1]:d[0]);let Tt=v.length/3,Xe=ve?e/2:-e/2,je=new b(0,Xe,0);v.push(je.x,je.y,je.z),x.push(0,ve?1:-1,0);let $t=be.y+(be.w-be.y)*.5;A.push(be.x+(be.z-be.x)*.5,Mt?1-$t:$t),Ke&&E.push(Ke.r,Ke.g,Ke.b,Ke.a);let Dt=new Fe(.5,.5);for(de=0;de<=r;de++){ue=Math.PI*2*de*c/r;let xi=Math.cos(-ue),oe=Math.sin(-ue);De=new b(xi*ne,Xe,oe*ne);let Vi=new Fe(xi*Dt.x+.5,oe*Dt.y+.5);v.push(De.x,De.y,De.z),x.push(0,ve?1:-1,0);let ti=be.y+(be.w-be.y)*Vi.y;A.push(be.x+(be.z-be.x)*Vi.x,Mt?1-ti:ti),Ke&&E.push(Ke.r,Ke.g,Ke.b,Ke.a)}for(de=0;de{Ge();zt();Ci();mr();bs();Yu();tn();Ce.CreateCylinder=Tk;q.CreateCylinder=(n,e,t,i,r,s,a,o,l)=>((a===void 0||!(a instanceof Jt))&&(a!==void 0&&(l=o||q.DEFAULTSIDE,o=a),a=s,s=1),vP(n,{height:e,diameterTop:t,diameterBottom:i,tessellation:r,subdivisions:s,sideOrientation:l,updatable:o},a))});function xk(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||Ce.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=j.Translation(s/2,0,0).multiply(j.RotationY(u));for(let p=0;p<=o;p++){let _=1-p/o,g=p*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),S=new Fe(d,_);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(S.x,Mt?1-S.y:S.y);let R=(h+1)%c,I=(p+1)%c;e.push(h*c+p),e.push(h*c+I),e.push(R*c+p),e.push(h*c+I),e.push(R*c+I),e.push(R*c+p)}}Ce._ComputeSides(l,t,e,i,r,n.frontUVs,n.backUVs);let f=new Ce;return f.indices=e,f.positions=t,f.normals=i,f.uvs=r,f}function EP(n,e={},t){let i=new q(n,t);return e.sideOrientation=q._GetDefaultSideOrientation(e.sideOrientation),i._originalBuilderSideOrientation=e.sideOrientation,xk(e).applyToMesh(i,e.updatable),i}var Rk=M(()=>{Ge();Ci();mr();tn();Ce.CreateTorus=xk;q.CreateTorus=(n,e,t,i,r,s,a)=>EP(n,{diameter:e,thickness:t,tessellation:i,sideOrientation:a,updatable:s},r)});function bk(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||Ce.DEFAULTSIDE,d=_=>{let g=Math.cos(_),v=Math.sin(_),x=f/c*_,A=Math.cos(x),E=s*(2+A)*.5*g,S=s*(2+A)*v*.5,R=s*Math.sin(x)*.5;return new b(E,S,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),S=b.Cross(A,E);for(E=b.Cross(S,A),S.normalize(),E.normalize(),m=0;m{Ge();Ci();mr();tn();Ce.CreateTorusKnot=bk;q.CreateTorusKnot=(n,e,t,i,r,s,a,o,l,c)=>SP(n,{radius:e,tube:t,radialSegments:i,tubularSegments:r,p:s,q:a,sideOrientation:c,updatable:l},o)});var rc,TP=M(()=>{Ge();Pt();vm();Ci();Q_();Zh();ki();Mi();zi();q._instancedMeshFactory=(n,e)=>{let t=new rc(n,e);if(e.instancedBuffers){t.instancedBuffers={};for(let i in e.instancedBuffers)t.instancedBuffers[i]=e.instancedBuffers[i]}return t};rc=class extends Er{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&&pe.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&&pe.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&&pe.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&&pe.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||ee.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||ee.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!==ei.BILLBOARDMODE_NONE&&this._currentLOD._masterMesh!==this){this._billboardWorldMatrix||(this._billboardWorldMatrix=new j);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{Wn=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();Vn();hl=class extends Ee{constructor(e,t,i=!0,r=!1){super(e,t,void 0,r),this._normalMatrix=new j,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 Df(n){let e=n.getVertexBuffers();if(!e)return null;let t=Mk.get(n);if(!t)t=new Map,Mk.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 Of(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 Mk,bg=M(()=>{Mk=new WeakMap});var AP,So,xP=M(()=>{Ar();bs();Ge();ki();Vr();zi();Lf();Bh();Rg();Oi();ol();Bn();bg();AP={effect:null,subMesh:null},So=class n extends hl{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 j,this._cachedWorldViewProjectionMatrix=new j,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 S,R,I,C;let r=i&&this._storeEffectOnSubMeshes;if(this.isFrozen){let y=r?i._drawWrapper:this._drawWrapper;if(y.effect&&y._wasPreviouslyReady&&y._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 y=0;y4&&(l.push(L.MatricesIndicesExtraKind),l.push(L.MatricesWeightsExtraKind));let y=e.skeleton;o.push("#define NUM_BONE_INFLUENCERS "+e.numBoneInfluencers),c=new Wn,c.addCPUSkinningFallback(0,e),y.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 "+(y.bones.length+1)),h.indexOf("mBones")===-1&&h.push("mBones"))}else o.push("#define NUM_BONE_INFLUENCERS 0");let m=0,p=e?e.morphTargetManager:null;if(p){let y=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=ll(p,o,l,e,!0,V,O,y,D,N),p.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 y=e.bakedVertexAnimationManager;y&&y.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 y in this._textures)if(!this._textures[y].isReady())return!1;for(let y in this._internalTextures)if(!this._internalTextures[y].isReady)return!1;e&&this.needAlphaTestingForMesh(e)&&o.push("#define ALPHATEST"),this._options.useClipPlane!==!1&&(wn(h),al(this,s,o)),s.fogEnabled&&(e!=null&&e.applyFog)&&s.fogMode!==Jt.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 _=i?i.getRenderingMesh():e;if(_&&this.useVertexPulling){let y=_.geometry;y&&(this._vertexPullingMetadata=Df(y),this._vertexPullingMetadata&&this._vertexPullingMetadata.forEach((O,V)=>{h.push(`vp_${V}_info`)})),o.push("#define USE_VERTEX_PULLING");let D=(S=_.geometry)==null?void 0:S.getIndexBuffer();D&&!_.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&&(AP.effect=E,AP.subMesh=(C=i!=null?i:e==null?void 0:e.subMeshes[0])!=null?C:null,this._onEffectCreatedObservable.notifyObservers(AP))),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,_e.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,j.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 Mr;o.addEventListener("readystatechange",()=>{if(o.readyState==4)if(o.status==200){let l=JSON.parse(o.responseText),c=this.Parse(l,i||Oe.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 Mr;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||Oe.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()})}};So.SnippetUrl="https://snippet.babylonjs.com";So.CreateFromSnippetAsync=So.ParseFromSnippetAsync;Ft("BABYLON.ShaderMaterial",So)});var Ck,Dae,nc=M(()=>{G();Ck="bonesDeclaration",Dae=`#if NUM_BONE_INFLUENCERS>0 +Bad Bone Indices = `+m;return{skinned:!0,valid:s===0&&o===0&&m===0,report:p}}_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 _e.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,p=this.getEngine().createCanvas(d,u).getContext("2d");p.drawImage(h,0,0);let _=p.getImageData(0,0,d,u).data;this.applyDisplacementMapFromBuffer(_,d,u,t,i,s,a,o),r&&r(this)};return _e.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 ee.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=Fe.Zero();a=a||Fe.Zero(),o=o||new Fe(1,1);for(let p=0;p{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 j,m=new j,p=0,_;for(let g=0;g0&&(j.FromFloat32ArrayToRefScaled(h,Math.floor(a[p+_]*16),v,m),u.addToSelf(m));if(l)for(_=0;_<4;_++)v=f[p+_],v>0&&(j.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 Sg(n._MergeMeshesCoroutine(e,t,i,r,s,a,!1))}static async MergeMeshesAsync(e,t=!0,i,r,s,a){return await KG(n._MergeMeshesCoroutine(e,t,i,r,s,a,!0),XG())}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 ee.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 C,y,D,O;return((y=(C=R.material)==null?void 0:C.uniqueId)!=null?y:-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(C,y.start+y.count),0);if(a)if(R.material){let C=R.material;if(C instanceof Fm){for(let y=0;y1){let R=0;for(let I=1;I{let I=R.computeWorldMatrix(!0);return{vertexData:Ce.ExtractFromMesh(R,!1,!1),transform:I}},{vertexData:p,transform:_}=m(e[0]);o&&(yield);let g=new Array(e.length-1);for(let R=1;R{throw Ze("GroundMesh")};q._GoldbergMeshParser=(n,e)=>{throw Ze("GoldbergMesh")};q._LinesMeshParser=(n,e)=>{throw Ze("LinesMesh")};q._GreasedLineMeshParser=(n,e)=>{throw Ze("GreasedLineMesh")};q._GreasedLineRibbonMeshParser=(n,e)=>{throw Ze("GreasedLineRibbonMesh")};q._TrailMeshParser=(n,e)=>{throw Ze("TrailMesh")};q._GaussianSplattingMeshParser=(n,e)=>{throw Ze("GaussianSplattingMesh")};q._GaussianSplattingPartProxyMeshParser=(n,e)=>{throw Ze("GaussianSplattingPartProxyMesh")};q._GaussianSplattingCompoundMeshParser=(n,e)=>{throw Ze("GaussianSplattingCompoundMesh")};Ft("BABYLON.Mesh",q)});var Um,eP=M(()=>{fo();Bl();Dn();Um=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===st.POINTERDOWN){this._isPointerDown=!0;return}i.type===st.POINTERUP&&(this._isPointerDown=!1)}),this._onAfterCheckInputsObserver=e.onAfterCheckInputsObservable.add(()=>{if(this._reachTargetAlpha())return;let i=_r.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:_r.Now}_reachTargetAlpha(){return this._attachedCamera&&this.targetAlpha?Math.abs(this._attachedCamera.alpha-this.targetAlpha){Bh();vo=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}};vo.EASINGMODE_EASEIN=0;vo.EASINGMODE_EASEOUT=1;vo.EASINGMODE_EASEINOUT=2;sx=class extends vo{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)}},ax=class extends vo{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 bf,iP=M(()=>{bf=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 rP,nP,sP,aP,oP,lP,Eo,ht,If=M(()=>{Ge();zt();On();zi();iP();Js();aA();Uh();xr();rP=Object.freeze(new ze(0,0,0,0)),nP=Object.freeze(b.Zero()),sP=Object.freeze(Fe.Zero()),aP=Object.freeze(Gl.Zero()),oP=Object.freeze(pe.Black()),lP=Object.freeze(new lt(0,0,0,0)),Eo={key:0,repeatCount:0,loopMode:2},ht=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 Fe?c=n.ANIMATIONTYPE_VECTOR2:s instanceof pe?c=n.ANIMATIONTYPE_COLOR3:s instanceof lt?c=n.ANIMATIONTYPE_COLOR4:s instanceof Gl&&(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,p=d.frame;if(a.range){let T=o.getRange(a.range);T&&(m=T.from,p=T.to)}else m=(v=a.fromFrame)!=null?v:m,p=(x=a.toFrame)!=null?x:p;if(m!==f.frame&&(c=o.createKeyForFrame(m)),p!==d.frame&&(h=o.createKeyForFrame(p)),o._keys.length===1){let T=o._getKeyValue(o._keys[0]);u.referenceValue=T.clone?T.clone():T}else if(l<=f.frame){let T=o._getKeyValue(f.value);u.referenceValue=T.clone?T.clone():T}else if(l>=d.frame){let T=o._getKeyValue(d.value);u.referenceValue=T.clone?T.clone():T}else{Eo.key=0;let T=o._interpolate(l,Eo);u.referenceValue=T.clone?T.clone():T}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 _=Number.MAX_VALUE,g=a.clipKeys?[]:null;for(let T=c;T<=h;T++){let E=o._keys[T];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&&(_===Number.MAX_VALUE&&(_=E.frame),E.frame-=_,g.push(E))),!(T&&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),j.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 p=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>p-1)return i?void 0:this._getKeyValue(r[p-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 p=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 p;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return((m=t.offsetValue)!=null?m:0)*t.repeatCount+p}break}case n.ANIMATIONTYPE_QUATERNION:{let p=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 p;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return p.addInPlace((t.offsetValue||rP).scale(t.repeatCount))}return p}case n.ANIMATIONTYPE_VECTOR3:{let p=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 p;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return p.add((t.offsetValue||nP).scale(t.repeatCount))}break}case n.ANIMATIONTYPE_VECTOR2:{let p=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 p;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return p.add((t.offsetValue||sP).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||aP).scale(t.repeatCount))}break}case n.ANIMATIONTYPE_COLOR3:{let p=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 p;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return p.add((t.offsetValue||oP).scale(t.repeatCount))}break}case n.ANIMATIONTYPE_COLOR4:{let p=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 p;case n.ANIMATIONLOOPMODE_RELATIVE:case n.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT:return p.add((t.offsetValue||lP).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?(j.DecomposeLerpToRef(e,t,i,r),r):j.DecomposeLerp(e,t,i):r?(j.LerpToRef(e,t,i,r),r):j.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=j.FromArray(o.values),o.values.length>=17&&(f=o.values[16]);break;case n.ANIMATIONTYPE_COLOR3:s=pe.FromArray(o.values),o.values[3]&&(l=pe.FromArray(o.values[3])),o.values[4]&&(c=pe.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 yr;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 yr;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()})}};ht._UniqueIdGenerator=0;ht.AllowMatricesInterpolation=!1;ht.AllowMatrixDecomposeForInterpolation=!0;ht.InheritOriginalValueFromActiveAnimations=!1;ht.SnippetUrl="https://snippet.babylonjs.com";ht.ANIMATIONTYPE_FLOAT=0;ht.ANIMATIONTYPE_VECTOR3=1;ht.ANIMATIONTYPE_QUATERNION=2;ht.ANIMATIONTYPE_MATRIX=3;ht.ANIMATIONTYPE_COLOR3=4;ht.ANIMATIONTYPE_COLOR4=7;ht.ANIMATIONTYPE_VECTOR2=5;ht.ANIMATIONTYPE_SIZE=6;ht.ANIMATIONLOOPMODE_RELATIVE=0;ht.ANIMATIONLOOPMODE_CYCLE=1;ht.ANIMATIONLOOPMODE_CONSTANT=2;ht.ANIMATIONLOOPMODE_YOYO=4;ht.ANIMATIONLOOPMODE_RELATIVE_FROM_CURRENT=5;ht.CreateFromSnippetAsync=ht.ParseFromSnippetAsync;Ft("BABYLON.Animation",ht);_i._AnimationRangeFactory=(n,e,t)=>new bf(n,e,t)});var Vm,fk=M(()=>{tP();If();Vm=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=ht.CreateAnimation("radius",ht.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=ht.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()}};Vm.EasingFunction=new sx(.3);Vm.EasingMode=vo.EASINGMODE_EASEOUT});var Mf,hk=M(()=>{tP();di();fo();Bl();Ge();If();Mf=class n{constructor(){this.onTargetFramingAnimationEndObservable=new ie,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===st.POINTERDOWN){this._isPointerDown=!0;return}i.type===st.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=_r.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=ht.CreateAnimation("beta",ht.ANIMATIONTYPE_FLOAT,60,n.EasingFunction));let r=ht.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=_r.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}};Mf.EasingFunction=new ax;Mf.EasingMode=vo.EASINGMODE_EASEINOUT;Mf.IgnoreBoundsSizeMode=0;Mf.FitFrustumSidesMode=1});var ox,cP,Ls,fP=M(()=>{Gt();Vt();al();Ge();Dn();Yu();Js();_i.AddNodeConstructor("TargetCamera",(n,e)=>()=>new Ls(n,b.Zero(),e));ox=j.Zero(),cP=ze.Identity(),Ls=class n extends mt{constructor(e,t,i,r=!0){super(e,t,i,r),this.cameraDirection=new b(0,0,0),this.cameraRotation=new Fe(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=j.Zero(),this._cameraTransformMatrix=j.Zero(),this._cameraRotationMatrix=j.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?j.LookAtRHToRef(this.position,e,b.UpReadOnly,ox):j.LookAtLHToRef(this.position,e,b.UpReadOnly,ox),ox.invert();let t=this.rotationQuaternion||cP;ze.FromRotationMatrixToRef(ox,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();xr();al();kn={},Gm=class{constructor(e){this.attachedToElement=!1,this.attached={},this.camera=e,this.checkInputs=()=>{}}add(e){let t=e.getSimpleName();if(this.attached[t]){ee.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=mt.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=it.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=kn[i];if(r){let s=t[i],a=it.Parse(()=>new r,s,null);this.add(a)}}}else for(let i in this.attached){let r=kn[this.attached[i].getClassName()];if(r){let s=it.Parse(()=>new r,e,null);this.remove(this.attached[i]),this.add(s)}}}}});var xg,dk=M(()=>{Gt();Vt();Ci();fo();xg=class{constructor(){this._currentMousePointerIdDown=-1,this.buttons=[0,1,2]}attachControl(e){e=_e.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!==st.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!==st.POINTERDOWN&&o.type!==st.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===st.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===st.POINTERDOUBLETAP)this.onDoubleTap(l.pointerType);else if(o.type===st.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===st.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,p=this._pointA.y-this._pointB.y,_=m*m+p*p,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,_,s,g),s=g,r=_}}}},this._observer=this.camera.getScene()._inputManager._addCameraPointerObserver(this._pointerInput,st.POINTERDOWN|st.POINTERUP|st.POINTERMOVE|st.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&&_e.RegisterTopRootEvents(a,[{name:"blur",handler:this._onLostFocus}])}detachControl(){if(this._onLostFocus){let e=this.camera.getScene().getEngine().getHostWindow();e&&_e.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()],xg.prototype,"buttons",void 0)});var Jh,uk=M(()=>{Gt();Vt();dk();Jh=class extends xg{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()],Jh.prototype,"pinchZoom",void 0);P([F()],Jh.prototype,"multiTouchPanning",void 0);P([F()],Jh.prototype,"multiTouchPanAndZoom",void 0)});var ea,mk=M(()=>{Gt();Vt();hl();uk();ea=class n extends Jh{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()}};ea.MinimumRadiusForPinch=.001;P([F()],ea.prototype,"buttons",void 0);P([F()],ea.prototype,"angularSensibilityX",void 0);P([F()],ea.prototype,"angularSensibilityY",void 0);P([F()],ea.prototype,"pinchPrecision",void 0);P([F()],ea.prototype,"pinchDeltaPercentage",void 0);P([F()],ea.prototype,"useNaturalPinchZoom",void 0);P([F()],ea.prototype,"panningSensibility",void 0);kn.ArcRotateCameraPointersInput=ea});var Ds,pk=M(()=>{Gt();Vt();hl();LA();Ci();Ds=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=_e.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===ho.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{Gt();Vt();hl();fo();Qu();Ge();Dn();DA();On();Ci();Xae=40,Cf=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=_e.BackCompatCameraNoPreventDefault(arguments),this._wheel=t=>{if(t.type!==st.POINTERWHEEL)return;let i=t.event,r,s=i.deltaMode===uo.DOM_DELTA_LINE?Xae: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,st.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=no.FromPositionAndNormal(e.target,t)}_getPosition(){var s;let e=this.camera,t=e.getScene(),i=t.createPickingRay(t.pointerX,t.pointerY,j.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){mk();pk();_k();hl();lx=class extends Gm{constructor(e){super(e)}addMouseWheel(){return this.add(new Cf),this}addPointers(){return this.add(new ea),this}addKeyboard(){return this.add(new Ds),this}}});function Yae(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 Kae(n,e){return Math.acos(n/e)}function Wn(n,e){return isNaN(n)?e:n}var gi,cx=M(()=>{Gt();Vt();di();Ge();On();Js();yi();eP();fk();hk();al();fP();gk();Dn();Ci();zi();_i.AddNodeConstructor("ArcRotateCamera",(n,e)=>()=>new gi(n,0,0,1,b.Zero(),e));gi=class n extends Ls{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 j,this._upToYMatrix=new j,this._upVector=b.Zero()),e.normalize(),this._upVector.copyFrom(e),this.setMatUp()}get upVector(){return this._upVector}setMatUp(){j.RotationAlignToRef(b.UpReadOnly,this._upVector,this._yToUpMatrix),j.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 Vm,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 Mf,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 Um,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=Fe.Zero(),this.allowUpsideDown=!0,this.useInputToRestoreState=!0,this.restoreStateInterpolationFactor=0,this._currentInterpolationFactor=0,this._viewMatrix=new j,this.panningAxis=new b(1,1,0),this._transformedDirection=new b,this.mapPanning=!1,this._isInterpolating=!1,this.onMeshTargetChangedObservable=new ie,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 Fe(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 p=this._getTargetPosition();this._computationVector.copyFromFloats(this.radius*h*m,this.radius*u,this.radius*d*m),p.addToRef(this._computationVector,this._newPosition),this._position.copyFrom(this._newPosition);let _=this.upVector;this.allowUpsideDown&&this.beta<0&&(_=_.clone(),_=_.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 lx(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=Fe.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=Wn(e,this._goalAlpha),this._goalBeta=Wn(t,this._goalBeta),this._goalRadius=Wn(i,this._goalRadius),this._goalTarget.set(Wn(r.x,this._goalTarget.x),Wn(r.y,this._goalTarget.y),Wn(r.z,this._goalTarget.z)),this._goalTargetScreenOffset.set(Wn(s.x,this._goalTargetScreenOffset.x),Wn(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=_e.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=Yae(this._computationVector),this.beta=Kae(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===mt.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 mt.RIG_MODE_STEREOSCOPIC_ANAGLYPH:case mt.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL:case mt.RIG_MODE_STEREOSCOPIC_OVERUNDER:case mt.RIG_MODE_STEREOSCOPIC_INTERLACED:case mt.RIG_MODE_VR:i=this._cameraRigParams.stereoHalfAngle*(t===0?1:-1);break;case mt.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 mt.RIG_MODE_STEREOSCOPIC_ANAGLYPH:case mt.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL:case mt.RIG_MODE_STEREOSCOPIC_OVERUNDER:case mt.RIG_MODE_STEREOSCOPIC_INTERLACED:case mt.RIG_MODE_VR:e.alpha=this.alpha-this._cameraRigParams.stereoHalfAngle,t.alpha=this.alpha+this._cameraRigParams.stereoHalfAngle;break;case mt.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([zr("target")],gi.prototype,"_target",void 0);P([fA("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([zr()],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([im()],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);Ft("BABYLON.ArcRotateCamera",gi)});var Xt,yf=M(()=>{Gt();Vt();Ge();zt();Js();mf();zi();eg();xr();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 pe(1,1,1),this.specular=new pe(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 ur(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,Sn.Color3[0]),this._uniformBuffer.updateColor4("vLightDiffuse",Sn.Color3[0],this.range,a),r&&(this.specular.scaleToRef(c,Sn.Color3[1]),this._uniformBuffer.updateColor4("vLightSpecular",Sn.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=it.Clone(i,this);return e&&(r.name=e),t&&(r.parent=t),r.setEnabled(this.isEnabled()),this.onClonedObservable.notifyObservers(r),r}serialize(){let e=it.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 it.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=it.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([vr()],Xt.prototype,"diffuse",void 0);P([vr()],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([le("_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 ta,fx=M(()=>{Gt();Vt();Ge();zt();Js();yf();zi();_i.AddNodeConstructor("Light_Type_3",(n,e)=>()=>new ta(n,b.Zero(),e));ta=class extends Xt{constructor(e,t,i,r){super(e,i,r),this.groundColor=new pe(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=j.Identity()),this._worldMatrix}getTypeID(){return Xt.LIGHTTYPEID_HEMISPHERICLIGHT}prepareLightSpecificDefines(e,t){e["HEMILIGHT"+t]=!0}};P([vr()],ta.prototype,"groundColor",void 0);P([zr()],ta.prototype,"direction",void 0);Ft("BABYLON.HemisphericLight",ta)});var Oa,hx=M(()=>{Gt();Vt();Ge();yf();Yu();Oa=class extends Xt{constructor(){super(...arguments),this._needProjectionMatrixCompute=!0,this._viewMatrix=j.Identity(),this._projectionMatrix=j.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,bs.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=j.Identity()),j.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),j.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([zr()],Oa.prototype,"position",null);P([zr()],Oa.prototype,"direction",null);P([F()],Oa.prototype,"shadowMinZ",null);P([F()],Oa.prototype,"shadowMaxZ",null)});var Os,vk=M(()=>{Gt();Vt();Ge();Js();yf();hx();zi();_i.AddNodeConstructor("Light_Type_1",(n,e)=>()=>new Os(n,b.Zero(),e));Os=class extends Oa{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;j.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;j.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()],Os.prototype,"shadowFrustumSize",null);P([F()],Os.prototype,"shadowOrthoScale",null);P([F()],Os.prototype,"autoUpdateExtends",void 0);P([F()],Os.prototype,"autoCalcShadowZBounds",void 0);P([F("orthoLeft")],Os.prototype,"_orthoLeft",void 0);P([F("orthoRight")],Os.prototype,"_orthoRight",void 0);P([F("orthoTop")],Os.prototype,"_orthoTop",void 0);P([F("orthoBottom")],Os.prototype,"_orthoBottom",void 0);Ft("BABYLON.DirectionalLight",Os)});var Pf,Ek=M(()=>{Gt();Vt();Ge();Js();yf();hx();zi();_i.AddNodeConstructor("Light_Type_0",(n,e)=>()=>new Pf(n,b.Zero(),e));Pf=class extends Oa{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;j.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()],Pf.prototype,"shadowAngle",null);Ft("BABYLON.PointLight",Pf)});var kr,hP=M(()=>{Gt();Vt();Ge();Js();yf();hx();Vr();zi();_i.AddNodeConstructor("Light_Type_2",(n,e)=>()=>new kr(n,b.Zero(),b.Zero(),0,0,e));kr=class n extends Oa{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=j.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=j.Zero(),this._projectionTextureProjectionLightMatrix=j.Zero(),this._projectionTextureScalingMatrix=j.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;j.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),j.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);j.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;j.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()],kr.prototype,"angle",null);P([F()],kr.prototype,"innerAngle",null);P([F()],kr.prototype,"shadowAngleScale",null);P([F()],kr.prototype,"exponent",void 0);P([F()],kr.prototype,"projectionTextureLightNear",null);P([F()],kr.prototype,"projectionTextureLightFar",null);P([F()],kr.prototype,"projectionTextureUpDirection",null);P([Ut("projectedLightTexture")],kr.prototype,"_projectionTexture",void 0);Ft("BABYLON.SpotLight",kr)});function Sk(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||Ce.DEFAULTSIDE,l=n.uvs,c=n.colors,f=[],h=[],d=[],u=[],m=[],p=[],_=[],g=[],v,x=[],T=[],E,S,R;if(e.length<2){let be=[],je=[];for(S=0;S0&&(V=D[R].subtract(D[R-1]).length(),N=V+_[E],m[E].push(N),_[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+_[E],m[E].push(N),_[E]=N),x[E]=O+C,T[E]=I,I+=O+C}let w,U,W,te;for(S=0;S{let m=i[0].length,p=o,_=0,g=p._originalBuilderSideOrientation===q.DOUBLESIDE?2:1;for(let v=1;v<=g;++v)for(let x=0;x{Ge();yi();ki();mr();tn();Ce.CreateRibbon=Sk;q.CreateRibbon=(n,e,t=!1,i,r,s,a=!1,o,l)=>So(n,{pathArray:e,closeArray:t,closePath:i,offset:r,updatable:a,sideOrientation:o,instance:l},s)});function Tk(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||Ce.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{yi();mr();tn();Ce.CreateDisc=Tk;q.CreateDisc=(n,e,t,i=null,r,s)=>dP(n,{radius:e,tessellation:t,sideOrientation:s,updatable:r},i)});var km,xk=M(()=>{Ge();ki();yi();q._GroundMeshParser=(n,e)=>km.Parse(n,e);km=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,p=n.buffer[m]/255,_=n.buffer[m+1]/255,g=n.buffer[m+2]/255,v=n.buffer[m+3]/255;c&&(p=1-p,_=1-_,g=1-g);let x=p*o.r+_*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,_=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&&p&&g&&(e.push(m),e.push(h),e.push(u))}Ce.ComputeNormals(t,e,i);let f=new Ce;return f.indices=e,f.positions=t,f.normals=i,f.uvs=r,f}function mP(n,e={},t){let i=new km(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,uP(e).applyToMesh(i,e.updatable),i._setReady(!0),i}function pP(n,e,t=null){let i=new q(n,t);return Rk(e).applyToMesh(i,e.updatable),i}function _P(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 pe(.3,.59,.11),f=t.alphaFilter||0,h=t.updatable,d=t.onReady;i=i||Oe.LastCreatedScene;let u=new km(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)=>{bk({width:r,height:s,subdivisions:a,minHeight:o,maxHeight:l,colorFilter:c,buffer:_,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 _=v=>{let x=v.width,T=v.height;if(i.isDisposed){i.removePendingData(u);return}let E=i==null?void 0:i.getEngine().resizeImageBitmap(v,x,T);p(E,x,T),i.removePendingData(u)},g=(v,x)=>{i.removePendingData(u),t.onError&&t.onError(v,x)};_e.LoadImage(e,_,g,i.offlineProvider)}else p(e.data,e.width,e.height);return u}var gP=M(()=>{Ge();zt();yi();mr();xk();Ci();Ni();Dn();tn();Ce.CreateGround=uP;Ce.CreateTiledGround=Rk;Ce.CreateGroundFromHeightMap=bk;q.CreateGround=(n,e,t,i,r,s)=>mP(n,{width:e,height:t,subdivisions:i,updatable:s},r);q.CreateTiledGround=(n,e,t,i,r,s,a,o,l)=>pP(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)=>_P(n,e,{width:t,height:i,subdivisions:r,minHeight:s,maxHeight:a,updatable:l,onReady:c,alphaFilter:f},o)});function dx(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],p=[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],p=[-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]],C=[17,18,19,16],y=[22,23,20,21];for(;u>0;)R.unshift(R.pop()),C.unshift(C.pop()),u--;for(;m>0;)I.unshift(I.pop()),y.unshift(y.pop()),m--;R=R.flat(),I=I.flat(),p=p.concat(R).concat(I),t.push(C[0],C[2],C[3],C[0],C[1],C[2]),t.push(y[0],y[2],y[3],y[0],y[1],y[2])}let _=[s/2,a/2,o/2],g=p.reduce((R,I,C)=>R.concat(I*_[C%3]),[]),v=n.sideOrientation===0?0:n.sideOrientation||Ce.DEFAULTSIDE,x=n.faceUV||new Array(6),T=n.faceColors,E=[];for(let R=0;R<6;R++)x[R]===void 0&&(x[R]=new Mi(0,0,1,1)),T&&T[R]===void 0&&(T[R]=new lt(1,1,1,1));for(let R=0;R<6;R++)if(r.push(x[R].z,Mt?1-x[R].w:x[R].w),r.push(x[R].x,Mt?1-x[R].w:x[R].w),r.push(x[R].x,Mt?1-x[R].y:x[R].y),r.push(x[R].z,Mt?1-x[R].y:x[R].y),T)for(let I=0;I<4;I++)E.push(T[R].r,T[R].g,T[R].b,T[R].a);Ce._ComputeSides(v,g,t,i,r,n.frontUVs,n.backUVs);let S=new Ce;if(S.indices=t,S.positions=g,S.normals=i,S.uvs=r,T){let R=v===Ce.DOUBLESIDE?E.concat(E):E;S.colors=R}return S}function vP(n,e={},t=null){let i=new q(n,t);return e.sideOrientation=q._GetDefaultSideOrientation(e.sideOrientation),i._originalBuilderSideOrientation=e.sideOrientation,dx(e).applyToMesh(i,e.updatable),i}var EP=M(()=>{Ge();zt();yi();mr();tn();gP();Ce.CreateBox=dx;q.CreateBox=(n,e,t=null,i,r)=>vP(n,{size:e,sideOrientation:r,updatable:i},t)});function Wm(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,p=0,_=0,g=0,v=0,x=0;if(l>0||h>0){switch(_=-d,g=-u,v=d,x=u,r){case q.CENTER:l/=2,_-=l,v+=l;break;case q.LEFT:v+=l,m=-l/2;break;case q.RIGHT:_-=l,m=l/2;break}switch(s){case q.CENTER:h/=2,g-=h,x+=h;break;case q.BOTTOM:x+=h,p=-h/2;break;case q.TOP:g-=h,p=h/2;break}}let T=[],E=[],S=[];S[0]=[0,0,1,0,1,1,0,1],S[1]=[0,0,1,0,1,1,0,1],(e===q.ROTATE_TILE||e===q.ROTATE_ROW)&&(S[1]=[1,1,0,1,0,0,1,0]),(e===q.FLIP_TILE||e===q.FLIP_ROW)&&(S[1]=[1,0,0,0,0,1,1,1]),(e===q.FLIP_N_ROTATE_TILE||e===q.FLIP_N_ROTATE_ROW)&&(S[1]=[0,1,1,1,1,0,0,0]);let R=[],I=[],C=[],y=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),W=l>0&&(r===q.CENTER||r===q.LEFT),te,$,J,z,Y;if(N&&U&&(T.push(_+m,g+p,0),T.push(-d+m,g+p,0),T.push(-d+m,g+h+p,0),T.push(_+m,g+h+p,0),C.push(y,y+1,y+3,y+1,y+2,y+3),y+=4,$=1-l/t,J=1-h/i,z=1,Y=1,te=[$,J,z,J,z,Y,$,Y],e===q.ROTATE_ROW&&(te=[1-$,1-J,1-z,1-J,1-z,1-Y,1-$,1-Y]),e===q.FLIP_ROW&&(te=[1-$,J,1-z,J,1-z,Y,1-$,Y]),e===q.FLIP_N_ROTATE_ROW&&(te=[$,1-J,z,1-J,z,1-Y,$,1-Y]),R=R.concat(te),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&&W&&(T.push(d+m,g+p,0),T.push(v+m,g+p,0),T.push(v+m,g+h+p,0),T.push(d+m,g+h+p,0),C.push(y,y+1,y+3,y+1,y+2,y+3),y+=4,$=0,J=1-h/i,z=l/t,Y=1,te=[$,J,z,J,z,Y,$,Y],(e===q.ROTATE_ROW||e===q.ROTATE_TILE&&o%2===0)&&(te=[1-$,1-J,1-z,1-J,1-z,1-Y,1-$,1-Y]),(e===q.FLIP_ROW||e===q.FLIP_TILE&&o%2===0)&&(te=[1-$,J,1-z,J,1-z,Y,1-$,Y]),(e===q.FLIP_N_ROTATE_ROW||e===q.FLIP_N_ROTATE_TILE&&o%2===0)&&(te=[$,1-J,z,1-J,z,1-Y,$,1-Y]),R=R.concat(te),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&&(T.push(_+m,u+p,0),T.push(-d+m,u+p,0),T.push(-d+m,x+p,0),T.push(_+m,x+p,0),C.push(y,y+1,y+3,y+1,y+2,y+3),y+=4,$=1-l/t,J=0,z=1,Y=h/i,te=[$,J,z,J,z,Y,$,Y],(e===q.ROTATE_ROW&&f%2===1||e===q.ROTATE_TILE&&f%1===0)&&(te=[1-$,1-J,1-z,1-J,1-z,1-Y,1-$,1-Y]),(e===q.FLIP_ROW&&f%2===1||e===q.FLIP_TILE&&f%2===0)&&(te=[1-$,J,1-z,J,1-z,Y,1-$,Y]),(e===q.FLIP_N_ROTATE_ROW&&f%2===1||e===q.FLIP_N_ROTATE_TILE&&f%2===0)&&(te=[$,1-J,z,1-J,z,1-Y,$,1-Y]),R=R.concat(te),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&&W&&(T.push(d+m,u+p,0),T.push(v+m,u+p,0),T.push(v+m,x+p,0),T.push(d+m,x+p,0),C.push(y,y+1,y+3,y+1,y+2,y+3),y+=4,$=0,J=0,z=l/t,Y=h/i,te=[$,J,z,J,z,Y,$,Y],(e===q.ROTATE_ROW&&f%2===1||e===q.ROTATE_TILE&&(f+o)%2===1)&&(te=[1-$,1-J,1-z,1-J,1-z,1-Y,1-$,1-Y]),(e===q.FLIP_ROW&&f%2===1||e===q.FLIP_TILE&&(f+o)%2===1)&&(te=[1-$,J,1-z,J,1-z,Y,1-$,Y]),(e===q.FLIP_N_ROTATE_ROW&&f%2===1||e===q.FLIP_N_ROTATE_TILE&&(f+o)%2===1)&&(te=[$,1-J,z,1-J,z,1-Y,$,1-Y]),R=R.concat(te),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=[];$=0,J=1-h/i,z=1,Y=1,me[0]=[$,J,z,J,z,Y,$,Y],me[1]=[$,J,z,J,z,Y,$,Y],(e===q.ROTATE_TILE||e===q.ROTATE_ROW)&&(me[1]=[1-$,1-J,1-z,1-J,1-z,1-Y,1-$,1-Y]),(e===q.FLIP_TILE||e===q.FLIP_ROW)&&(me[1]=[1-$,J,1-z,J,1-z,Y,1-$,Y]),(e===q.FLIP_N_ROTATE_TILE||e===q.FLIP_N_ROTATE_ROW)&&(me[1]=[$,1-J,z,1-J,z,1-Y,$,1-Y]);for(let xe=0;xe{yi();mr();Ce.CreateTiledPlane=Wm});function Mk(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||Ce.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,p=o/2,_=[];for(let N=0;N<2;N++)_[N]=Wm({pattern:r,tileWidth:l,tileHeight:c,width:s,height:a,alignVertical:h,alignHorizontal:f,sideOrientation:d});for(let N=2;N<4;N++)_[N]=Wm({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++)_[N]=Wm({pattern:r,tileWidth:l,tileHeight:c,width:s,height:o,alignVertical:g,alignHorizontal:f,sideOrientation:d});let v=[],x=[],T=[],E=[],S=[],R=[],I=[],C=[],y,D=0;for(let N=0;N<6;N++){let w=_[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();yi();mr();SP();tn();ux=1,TP=-1;Ce.CreateTiledBox=Mk});function Pk(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||Ce.DEFAULTSIDE,l=!!n.dedupTopBottomIndices,c=new b(t/2,i/2,r/2),f=2+e,h=2*f,d=[],u=[],m=[],p=[];for(let g=0;g<=f;g++){let v=g/f,x=v*Math.PI*a;for(let T=0;T<=h;T++){let E=T/h,S=E*Math.PI*2*s,R=j.RotationZ(-x),I=j.RotationY(S),C=b.TransformCoordinates(b.Up(),R),y=b.TransformCoordinates(C,I),D=y.multiply(c),O=y.divide(c).normalize();u.push(D.x,D.y,D.z),m.push(O.x,O.y,O.z),p.push(E,Mt?1-v:v)}if(g>0){let T=u.length/3;for(let E=T-2*(h+1);E+h+21&&(d.push(E),d.push(E+1),d.push(E+h+1)),(g{Ge();yi();mr();tn();Ce.CreateSphere=Pk;q.CreateSphere=(n,e,t,i,r,s)=>AP(n,{segments:e,diameterX:t,diameterY:t,diameterZ:t,sideOrientation:s,updatable:r},i)});function Dk(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||Ce.DEFAULTSIDE,h=n.faceUV||new Array(3),d=n.faceColors,u=c!==1&&o?2:0,m=a?s:1,p=2+(1+u)*m,_;for(_=0;_{let ne=ve?t/2:i/2;if(ne===0)return;let ue,De,de,be=ve?h[p-1]:h[0],je=null;d&&(je=ve?d[p-1]:d[0]);let Tt=v.length/3,Xe=ve?e/2:-e/2,qe=new b(0,Xe,0);v.push(qe.x,qe.y,qe.z),x.push(0,ve?1:-1,0);let $t=be.y+(be.w-be.y)*.5;T.push(be.x+(be.z-be.x)*.5,Mt?1-$t:$t),je&&E.push(je.r,je.g,je.b,je.a);let Dt=new Fe(.5,.5);for(de=0;de<=r;de++){ue=Math.PI*2*de*c/r;let xi=Math.cos(-ue),oe=Math.sin(-ue);De=new b(xi*ne,Xe,oe*ne);let Vi=new Fe(xi*Dt.x+.5,oe*Dt.y+.5);v.push(De.x,De.y,De.z),x.push(0,ve?1:-1,0);let ii=be.y+(be.w-be.y)*Vi.y;T.push(be.x+(be.z-be.x)*Vi.x,Mt?1-ii:ii),je&&E.push(je.r,je.g,je.b,je.a)}for(de=0;de{Ge();zt();yi();mr();Cs();Yu();tn();Ce.CreateCylinder=Dk;q.CreateCylinder=(n,e,t,i,r,s,a,o,l)=>((a===void 0||!(a instanceof Jt))&&(a!==void 0&&(l=o||q.DEFAULTSIDE,o=a),a=s,s=1),xP(n,{height:e,diameterTop:t,diameterBottom:i,tessellation:r,subdivisions:s,sideOrientation:l,updatable:o},a))});function Nk(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||Ce.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=j.Translation(s/2,0,0).multiply(j.RotationY(u));for(let p=0;p<=o;p++){let _=1-p/o,g=p*Math.PI*2/o+Math.PI,v=Math.cos(g),x=Math.sin(g),T=new b(v,x,0),E=T.scale(a/2),S=new Fe(d,_);E=b.TransformCoordinates(E,m),T=b.TransformNormal(T,m),t.push(E.x,E.y,E.z),i.push(T.x,T.y,T.z),r.push(S.x,Mt?1-S.y:S.y);let R=(h+1)%c,I=(p+1)%c;e.push(h*c+p),e.push(h*c+I),e.push(R*c+p),e.push(h*c+I),e.push(R*c+I),e.push(R*c+p)}}Ce._ComputeSides(l,t,e,i,r,n.frontUVs,n.backUVs);let f=new Ce;return f.indices=e,f.positions=t,f.normals=i,f.uvs=r,f}function RP(n,e={},t){let i=new q(n,t);return e.sideOrientation=q._GetDefaultSideOrientation(e.sideOrientation),i._originalBuilderSideOrientation=e.sideOrientation,Nk(e).applyToMesh(i,e.updatable),i}var wk=M(()=>{Ge();yi();mr();tn();Ce.CreateTorus=Nk;q.CreateTorus=(n,e,t,i,r,s,a)=>RP(n,{diameter:e,thickness:t,tessellation:i,sideOrientation:a,updatable:s},r)});function Fk(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||Ce.DEFAULTSIDE,d=_=>{let g=Math.cos(_),v=Math.sin(_),x=f/c*_,T=Math.cos(x),E=s*(2+T)*.5*g,S=s*(2+T)*v*.5,R=s*Math.sin(x)*.5;return new b(E,S,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),T=x.subtract(v),E=x.add(v),S=b.Cross(T,E);for(E=b.Cross(S,T),S.normalize(),E.normalize(),m=0;m{Ge();yi();mr();tn();Ce.CreateTorusKnot=Fk;q.CreateTorusKnot=(n,e,t,i,r,s,a,o,l,c)=>bP(n,{radius:e,tube:t,radialSegments:i,tubularSegments:r,p:s,q:a,sideOrientation:c,updatable:l},o)});var rc,IP=M(()=>{Ge();Pt();vm();yi();$_();Zh();ki();Ci();zi();q._instancedMeshFactory=(n,e)=>{let t=new rc(n,e);if(e.instancedBuffers){t.instancedBuffers={};for(let i in e.instancedBuffers)t.instancedBuffers[i]=e.instancedBuffers[i]}return t};rc=class extends Er{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&&_e.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&&_e.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&&_e.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&&_e.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||ee.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||ee.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!==ei.BILLBOARDMODE_NONE&&this._currentLOD._masterMesh!==this){this._billboardWorldMatrix||(this._billboardWorldMatrix=new j);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{Hn=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();Gn();dl=class extends Ee{constructor(e,t,i=!0,r=!1){super(e,t,void 0,r),this._normalMatrix=new j,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 Df(n){let e=n.getVertexBuffers();if(!e)return null;let t=Uk.get(n);if(!t)t=new Map,Uk.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 Of(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 Uk,Ig=M(()=>{Uk=new WeakMap});var MP,To,CP=M(()=>{xr();Cs();Ge();ki();Vr();zi();Lf();Uh();bg();Ni();ll();Vn();Ig();MP={effect:null,subMesh:null},To=class n extends dl{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 j,this._cachedWorldViewProjectionMatrix=new j,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 S,R,I,C;let r=i&&this._storeEffectOnSubMeshes;if(this.isFrozen){let y=r?i._drawWrapper:this._drawWrapper;if(y.effect&&y._wasPreviouslyReady&&y._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 y=0;y4&&(l.push(L.MatricesIndicesExtraKind),l.push(L.MatricesWeightsExtraKind));let y=e.skeleton;o.push("#define NUM_BONE_INFLUENCERS "+e.numBoneInfluencers),c=new Hn,c.addCPUSkinningFallback(0,e),y.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 "+(y.bones.length+1)),h.indexOf("mBones")===-1&&h.push("mBones"))}else o.push("#define NUM_BONE_INFLUENCERS 0");let m=0,p=e?e.morphTargetManager:null;if(p){let y=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=cl(p,o,l,e,!0,V,O,y,D,N),p.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 y=e.bakedVertexAnimationManager;y&&y.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 y in this._textures)if(!this._textures[y].isReady())return!1;for(let y in this._internalTextures)if(!this._internalTextures[y].isReady)return!1;e&&this.needAlphaTestingForMesh(e)&&o.push("#define ALPHATEST"),this._options.useClipPlane!==!1&&(Fn(h),ol(this,s,o)),s.fogEnabled&&(e!=null&&e.applyFog)&&s.fogMode!==Jt.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 _=i?i.getRenderingMesh():e;if(_&&this.useVertexPulling){let y=_.geometry;y&&(this._vertexPullingMetadata=Df(y),this._vertexPullingMetadata&&this._vertexPullingMetadata.forEach((O,V)=>{h.push(`vp_${V}_info`)})),o.push("#define USE_VERTEX_PULLING");let D=(S=_.geometry)==null?void 0:S.getIndexBuffer();D&&!_.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,T=o.join(` +`),E=v;return x!==T&&(E=a.createEffect(f,{attributes:l,uniformsNames:h,uniformBuffersNames:d,samplers:u,defines:T,fallbacks:c,onCompiled:this.onCompiled,onError:this.onError,indexParameters:{maxSimultaneousMorphTargets:m},shaderLanguage:this._options.shaderLanguage,extraInitializationsAsync:this._options.extraInitializationsAsync},a),r?i.setEffect(E,T,this._materialContext):g&&g.setEffect(E,T),this._onEffectCreatedObservable&&(MP.effect=E,MP.subMesh=(C=i!=null?i:e==null?void 0:e.subMeshes[0])!=null?C:null,this._onEffectCreatedObservable.notifyObservers(MP))),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,j.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 yr;o.addEventListener("readystatechange",()=>{if(o.readyState==4)if(o.status==200){let l=JSON.parse(o.responseText),c=this.Parse(l,i||Oe.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 yr;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||Oe.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()})}};To.SnippetUrl="https://snippet.babylonjs.com";To.CreateFromSnippetAsync=To.ParseFromSnippetAsync;Ft("BABYLON.ShaderMaterial",To)});var Vk,jae,nc=M(()=>{G();Vk="bonesDeclaration",jae=`#if NUM_BONE_INFLUENCERS>0 #ifndef USE_VERTEX_PULLING attribute matricesIndices : vec4f;attribute matricesWeights : vec4f; #if NUM_BONE_INFLUENCERS>4 @@ -4462,7 +4462,7 @@ let textureWidth=i32(uniforms.boneTextureInfo.x);let y=offset/textureWidth;let x #endif #endif #endif -`;T.IncludesShadersStoreWGSL[Ck]||(T.IncludesShadersStoreWGSL[Ck]=Dae)});var yk,Oae,sc=M(()=>{G();yk="bakedVertexAnimationDeclaration",Oae=`#ifdef BAKED_VERTEX_ANIMATION_TEXTURE +`;A.IncludesShadersStoreWGSL[Vk]||(A.IncludesShadersStoreWGSL[Vk]=jae)});var Gk,qae,sc=M(()=>{G();Gk="bakedVertexAnimationDeclaration",qae=`#ifdef BAKED_VERTEX_ANIMATION_TEXTURE uniform bakedVertexAnimationTime: f32;uniform bakedVertexAnimationSettings: vec4;var bakedVertexAnimationTexture : texture_2d; #ifdef INSTANCES attribute bakedVertexAnimationSettingsInstanced : vec4; @@ -4470,7 +4470,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 -`;T.IncludesShadersStoreWGSL[yk]||(T.IncludesShadersStoreWGSL[yk]=Oae)});var Pk,Nae,ac=M(()=>{G();Pk="clipPlaneVertexDeclaration",Nae=`#ifdef CLIPPLANE +`;A.IncludesShadersStoreWGSL[Gk]||(A.IncludesShadersStoreWGSL[Gk]=qae)});var kk,Zae,ac=M(()=>{G();kk="clipPlaneVertexDeclaration",Zae=`#ifdef CLIPPLANE uniform vClipPlane: vec4;varying fClipDistance: f32; #endif #ifdef CLIPPLANE2 @@ -4488,10 +4488,10 @@ uniform vClipPlane5: vec4;varying fClipDistance5: f32; #ifdef CLIPPLANE6 uniform vClipPlane6: vec4;varying fClipDistance6: f32; #endif -`;T.IncludesShadersStoreWGSL[Pk]||(T.IncludesShadersStoreWGSL[Pk]=Nae)});var Lk,wae,Ig=M(()=>{G();Lk="fogVertexDeclaration",wae=`#ifdef FOG +`;A.IncludesShadersStoreWGSL[kk]||(A.IncludesShadersStoreWGSL[kk]=Zae)});var Wk,Qae,Mg=M(()=>{G();Wk="fogVertexDeclaration",Qae=`#ifdef FOG varying vFogDistance: vec3f; #endif -`;T.IncludesShadersStoreWGSL[Lk]||(T.IncludesShadersStoreWGSL[Lk]=wae)});var Dk,Fae,Nf=M(()=>{G();Dk="instancesDeclaration",Fae=`#ifdef INSTANCES +`;A.IncludesShadersStoreWGSL[Wk]||(A.IncludesShadersStoreWGSL[Wk]=Qae)});var Hk,$ae,Nf=M(()=>{G();Hk="instancesDeclaration",$ae=`#ifdef INSTANCES attribute world0 : vec4;attribute world1 : vec4;attribute world2 : vec4;attribute world3 : vec4; #ifdef INSTANCESCOLOR attribute instanceColor : vec4; @@ -4513,7 +4513,7 @@ uniform world : mat4x4; uniform previousWorld : mat4x4; #endif #endif -`;T.IncludesShadersStoreWGSL[Dk]||(T.IncludesShadersStoreWGSL[Dk]=Fae)});var Ok,Uae,oc=M(()=>{G();Ok="instancesVertex",Uae=`#ifdef INSTANCES +`;A.IncludesShadersStoreWGSL[Hk]||(A.IncludesShadersStoreWGSL[Hk]=$ae)});var zk,Jae,oc=M(()=>{G();zk="instancesVertex",Jae=`#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( @@ -4540,7 +4540,7 @@ var finalWorld=mesh.world; var finalPreviousWorld=uniforms.previousWorld; #endif #endif -`;T.IncludesShadersStoreWGSL[Ok]||(T.IncludesShadersStoreWGSL[Ok]=Uae)});var Nk,Bae,lc=M(()=>{G();Nk="bonesVertex",Bae=`#ifndef BAKED_VERTEX_ANIMATION_TEXTURE +`;A.IncludesShadersStoreWGSL[zk]||(A.IncludesShadersStoreWGSL[zk]=Jae)});var Xk,eoe,lc=M(()=>{G();Xk="bonesVertex",eoe=`#ifndef BAKED_VERTEX_ANIMATION_TEXTURE #if NUM_BONE_INFLUENCERS>0 var influence : mat4x4; #ifdef BONETEXTURE @@ -4593,7 +4593,7 @@ influence=influence+uniforms.mBones[i32(vertexInputs.matricesIndicesExtra[3])]*v finalWorld=finalWorld*influence; #endif #endif -`;T.IncludesShadersStoreWGSL[Nk]||(T.IncludesShadersStoreWGSL[Nk]=Bae)});var wk,Vae,cc=M(()=>{G();wk="bakedVertexAnimation",Vae=`#ifdef BAKED_VERTEX_ANIMATION_TEXTURE +`;A.IncludesShadersStoreWGSL[Xk]||(A.IncludesShadersStoreWGSL[Xk]=eoe)});var Yk,toe,cc=M(()=>{G();Yk="bakedVertexAnimation",toe=`#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; @@ -4624,7 +4624,7 @@ VATInfluence=VATInfluence+readMatrixFromRawSamplerVAT(bakedVertexAnimationTextur #endif finalWorld=finalWorld*VATInfluence;} #endif -`;T.IncludesShadersStoreWGSL[wk]||(T.IncludesShadersStoreWGSL[wk]=Vae)});var Fk,Gae,fc=M(()=>{G();Fk="clipPlaneVertex",Gae=`#ifdef CLIPPLANE +`;A.IncludesShadersStoreWGSL[Yk]||(A.IncludesShadersStoreWGSL[Yk]=toe)});var Kk,ioe,fc=M(()=>{G();Kk="clipPlaneVertex",ioe=`#ifdef CLIPPLANE vertexOutputs.fClipDistance=dot(worldPos,uniforms.vClipPlane); #endif #ifdef CLIPPLANE2 @@ -4642,14 +4642,14 @@ vertexOutputs.fClipDistance5=dot(worldPos,uniforms.vClipPlane5); #ifdef CLIPPLANE6 vertexOutputs.fClipDistance6=dot(worldPos,uniforms.vClipPlane6); #endif -`;T.IncludesShadersStoreWGSL[Fk]||(T.IncludesShadersStoreWGSL[Fk]=Gae)});var Uk,kae,Mg=M(()=>{G();Uk="fogVertex",kae=`#ifdef FOG +`;A.IncludesShadersStoreWGSL[Kk]||(A.IncludesShadersStoreWGSL[Kk]=ioe)});var jk,roe,Cg=M(()=>{G();jk="fogVertex",roe=`#ifdef FOG #ifdef SCENE_UBO vertexOutputs.vFogDistance=(scene.view*worldPos).xyz; #else vertexOutputs.vFogDistance=(uniforms.view*worldPos).xyz; #endif #endif -`;T.IncludesShadersStoreWGSL[Uk]||(T.IncludesShadersStoreWGSL[Uk]=kae)});var Bk,Wae,Cg=M(()=>{G();Bk="vertexColorMixing",Wae=`#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES) +`;A.IncludesShadersStoreWGSL[jk]||(A.IncludesShadersStoreWGSL[jk]=roe)});var qk,noe,yg=M(()=>{G();qk="vertexColorMixing",noe=`#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES) vertexOutputs.vColor=vec4f(1.0); #ifdef VERTEXCOLOR #ifdef VERTEXALPHA @@ -4662,7 +4662,7 @@ vertexOutputs.vColor=vec4f(vertexOutputs.vColor.rgb*colorUpdated.rgb,vertexOutpu vertexOutputs.vColor*=vertexInputs.instanceColor; #endif #endif -`;T.IncludesShadersStoreWGSL[Bk]||(T.IncludesShadersStoreWGSL[Bk]=Wae)});var Gk={};tt(Gk,{colorVertexShaderWGSL:()=>Hae});var RP,Vk,Hae,kk=M(()=>{G();nc();sc();ac();Ig();Nf();oc();lc();cc();fc();Mg();Cg();RP="colorVertexShader",Vk=`attribute position: vec3f; +`;A.IncludesShadersStoreWGSL[qk]||(A.IncludesShadersStoreWGSL[qk]=noe)});var Qk={};tt(Qk,{colorVertexShaderWGSL:()=>soe});var yP,Zk,soe,$k=M(()=>{G();nc();sc();ac();Mg();Nf();oc();lc();cc();fc();Cg();yg();yP="colorVertexShader",Zk=`attribute position: vec3f; #ifdef VERTEXCOLOR attribute color: vec4f; #endif @@ -4693,7 +4693,7 @@ var worldPos: vec4f=finalWorld* vec4f(vertexInputs.position,1.0);vertexOutputs.p #include #include #define CUSTOM_VERTEX_MAIN_END -}`;T.ShadersStoreWGSL[RP]||(T.ShadersStoreWGSL[RP]=Vk);Hae={name:RP,shader:Vk}});var Wk,zae,hc=M(()=>{G();Wk="clipPlaneFragmentDeclaration",zae=`#ifdef CLIPPLANE +}`;A.ShadersStoreWGSL[yP]||(A.ShadersStoreWGSL[yP]=Zk);soe={name:yP,shader:Zk}});var Jk,aoe,hc=M(()=>{G();Jk="clipPlaneFragmentDeclaration",aoe=`#ifdef CLIPPLANE varying fClipDistance: f32; #endif #ifdef CLIPPLANE2 @@ -4711,7 +4711,7 @@ varying fClipDistance5: f32; #ifdef CLIPPLANE6 varying fClipDistance6: f32; #endif -`;T.IncludesShadersStoreWGSL[Wk]||(T.IncludesShadersStoreWGSL[Wk]=zae)});var Hk,Xae,yg=M(()=>{G();Hk="fogFragmentDeclaration",Xae=`#ifdef FOG +`;A.IncludesShadersStoreWGSL[Jk]||(A.IncludesShadersStoreWGSL[Jk]=aoe)});var eW,ooe,Pg=M(()=>{G();eW="fogFragmentDeclaration",ooe=`#ifdef FOG #define FOGMODE_NONE 0. #define FOGMODE_EXP 1. #define FOGMODE_EXP2 2. @@ -4725,7 +4725,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 -`;T.IncludesShadersStoreWGSL[Hk]||(T.IncludesShadersStoreWGSL[Hk]=Xae)});var zk,Yae,dc=M(()=>{G();zk="clipPlaneFragment",Yae=`#if defined(CLIPPLANE) || defined(CLIPPLANE2) || defined(CLIPPLANE3) || defined(CLIPPLANE4) || defined(CLIPPLANE5) || defined(CLIPPLANE6) +`;A.IncludesShadersStoreWGSL[eW]||(A.IncludesShadersStoreWGSL[eW]=ooe)});var tW,loe,dc=M(()=>{G();tW="clipPlaneFragment",loe=`#if defined(CLIPPLANE) || defined(CLIPPLANE2) || defined(CLIPPLANE3) || defined(CLIPPLANE4) || defined(CLIPPLANE5) || defined(CLIPPLANE6) if (false) {} #endif #ifdef CLIPPLANE @@ -4752,14 +4752,14 @@ else if (fragmentInputs.fClipDistance5>0.0) else if (fragmentInputs.fClipDistance6>0.0) {discard;} #endif -`;T.IncludesShadersStoreWGSL[zk]||(T.IncludesShadersStoreWGSL[zk]=Yae)});var Xk,Kae,Pg=M(()=>{G();Xk="fogFragment",Kae=`#ifdef FOG +`;A.IncludesShadersStoreWGSL[tW]||(A.IncludesShadersStoreWGSL[tW]=loe)});var iW,coe,Lg=M(()=>{G();iW="fogFragment",coe=`#ifdef FOG var fog: f32=CalcFogFactor(); #ifdef PBR fog=toLinearSpace(fog); #endif color= vec4f(mix(uniforms.vFogColor,color.rgb,fog),color.a); #endif -`;T.IncludesShadersStoreWGSL[Xk]||(T.IncludesShadersStoreWGSL[Xk]=Kae)});var Kk={};tt(Kk,{colorPixelShaderWGSL:()=>jae});var bP,Yk,jae,jk=M(()=>{G();hc();yg();dc();Pg();bP="colorPixelShader",Yk=`#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES) +`;A.IncludesShadersStoreWGSL[iW]||(A.IncludesShadersStoreWGSL[iW]=coe)});var nW={};tt(nW,{colorPixelShaderWGSL:()=>foe});var PP,rW,foe,sW=M(()=>{G();hc();Pg();dc();Lg();PP="colorPixelShader",rW=`#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES) #define VERTEXCOLOR varying vColor: vec4f; #else @@ -4779,7 +4779,7 @@ fragmentOutputs.color=uniforms.color; #endif #include(color,fragmentOutputs.color) #define CUSTOM_FRAGMENT_MAIN_END -}`;T.ShadersStoreWGSL[bP]||(T.ShadersStoreWGSL[bP]=Yk);jae={name:bP,shader:Yk}});var qk,qae,uc=M(()=>{G();qk="bonesDeclaration",qae=`#if NUM_BONE_INFLUENCERS>0 +}`;A.ShadersStoreWGSL[PP]||(A.ShadersStoreWGSL[PP]=rW);foe={name:PP,shader:rW}});var aW,hoe,uc=M(()=>{G();aW="bonesDeclaration",hoe=`#if NUM_BONE_INFLUENCERS>0 attribute vec4 matricesIndices;attribute vec4 matricesWeights; #if NUM_BONE_INFLUENCERS>4 attribute vec4 matricesIndicesExtra;attribute vec4 matricesWeightsExtra; @@ -4808,7 +4808,7 @@ return mat4(m0,m1,m2,m3); #endif #endif #endif -`;T.IncludesShadersStore[qk]||(T.IncludesShadersStore[qk]=qae)});var Zk,Zae,mc=M(()=>{G();Zk="bakedVertexAnimationDeclaration",Zae=`#ifdef BAKED_VERTEX_ANIMATION_TEXTURE +`;A.IncludesShadersStore[aW]||(A.IncludesShadersStore[aW]=hoe)});var oW,doe,mc=M(()=>{G();oW="bakedVertexAnimationDeclaration",doe=`#ifdef BAKED_VERTEX_ANIMATION_TEXTURE uniform float bakedVertexAnimationTime; #if !defined(WEBGL2) && !defined(WEBGPU) uniform vec2 bakedVertexAnimationTextureSizeInverted; @@ -4827,7 +4827,7 @@ float offset=index*4.0;float frameUV=(frame+0.5)*bakedVertexAnimationTextureSize #endif } #endif -`;T.IncludesShadersStore[Zk]||(T.IncludesShadersStore[Zk]=Zae)});var Qk,Qae,pc=M(()=>{G();Qk="clipPlaneVertexDeclaration",Qae=`#ifdef CLIPPLANE +`;A.IncludesShadersStore[oW]||(A.IncludesShadersStore[oW]=doe)});var lW,uoe,pc=M(()=>{G();lW="clipPlaneVertexDeclaration",uoe=`#ifdef CLIPPLANE uniform vec4 vClipPlane;varying float fClipDistance; #endif #ifdef CLIPPLANE2 @@ -4845,10 +4845,10 @@ uniform vec4 vClipPlane5;varying float fClipDistance5; #ifdef CLIPPLANE6 uniform vec4 vClipPlane6;varying float fClipDistance6; #endif -`;T.IncludesShadersStore[Qk]||(T.IncludesShadersStore[Qk]=Qae)});var $k,$ae,Lg=M(()=>{G();$k="fogVertexDeclaration",$ae=`#ifdef FOG +`;A.IncludesShadersStore[lW]||(A.IncludesShadersStore[lW]=uoe)});var cW,moe,Dg=M(()=>{G();cW="fogVertexDeclaration",moe=`#ifdef FOG varying vec3 vFogDistance; #endif -`;T.IncludesShadersStore[$k]||(T.IncludesShadersStore[$k]=$ae)});var Jk,Jae,wf=M(()=>{G();Jk="instancesDeclaration",Jae=`#ifdef INSTANCES +`;A.IncludesShadersStore[cW]||(A.IncludesShadersStore[cW]=moe)});var fW,poe,wf=M(()=>{G();fW="instancesDeclaration",poe=`#ifdef INSTANCES attribute vec4 world0;attribute vec4 world1;attribute vec4 world2;attribute vec4 world3; #ifdef INSTANCESCOLOR attribute vec4 instanceColor; @@ -4870,7 +4870,7 @@ uniform mat4 world; uniform mat4 previousWorld; #endif #endif -`;T.IncludesShadersStore[Jk]||(T.IncludesShadersStore[Jk]=Jae)});var eW,eoe,_c=M(()=>{G();eW="instancesVertex",eoe=`#ifdef INSTANCES +`;A.IncludesShadersStore[fW]||(A.IncludesShadersStore[fW]=poe)});var hW,_oe,_c=M(()=>{G();hW="instancesVertex",_oe=`#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, @@ -4888,7 +4888,7 @@ mat4 finalWorld=world; mat4 finalPreviousWorld=previousWorld; #endif #endif -`;T.IncludesShadersStore[eW]||(T.IncludesShadersStore[eW]=eoe)});var tW,toe,gc=M(()=>{G();tW="bonesVertex",toe=`#ifndef BAKED_VERTEX_ANIMATION_TEXTURE +`;A.IncludesShadersStore[hW]||(A.IncludesShadersStore[hW]=_oe)});var dW,goe,gc=M(()=>{G();dW="bonesVertex",goe=`#ifndef BAKED_VERTEX_ANIMATION_TEXTURE #if NUM_BONE_INFLUENCERS>0 mat4 influence; #ifdef BONETEXTURE @@ -4941,7 +4941,7 @@ influence+=mBones[int(matricesIndicesExtra[3])]*matricesWeightsExtra[3]; finalWorld=finalWorld*influence; #endif #endif -`;T.IncludesShadersStore[tW]||(T.IncludesShadersStore[tW]=toe)});var iW,ioe,vc=M(()=>{G();iW="bakedVertexAnimation",ioe=`#ifdef BAKED_VERTEX_ANIMATION_TEXTURE +`;A.IncludesShadersStore[dW]||(A.IncludesShadersStore[dW]=goe)});var uW,voe,vc=M(()=>{G();uW="bakedVertexAnimation",voe=`#ifdef BAKED_VERTEX_ANIMATION_TEXTURE { #ifdef INSTANCES #define BVASNAME bakedVertexAnimationSettingsInstanced @@ -4972,7 +4972,7 @@ VATInfluence+=readMatrixFromRawSamplerVAT(bakedVertexAnimationTexture,matricesIn #endif finalWorld=finalWorld*VATInfluence;} #endif -`;T.IncludesShadersStore[iW]||(T.IncludesShadersStore[iW]=ioe)});var rW,roe,Ec=M(()=>{G();rW="clipPlaneVertex",roe=`#ifdef CLIPPLANE +`;A.IncludesShadersStore[uW]||(A.IncludesShadersStore[uW]=voe)});var mW,Eoe,Ec=M(()=>{G();mW="clipPlaneVertex",Eoe=`#ifdef CLIPPLANE fClipDistance=dot(worldPos,vClipPlane); #endif #ifdef CLIPPLANE2 @@ -4990,10 +4990,10 @@ fClipDistance5=dot(worldPos,vClipPlane5); #ifdef CLIPPLANE6 fClipDistance6=dot(worldPos,vClipPlane6); #endif -`;T.IncludesShadersStore[rW]||(T.IncludesShadersStore[rW]=roe)});var nW,noe,Dg=M(()=>{G();nW="fogVertex",noe=`#ifdef FOG +`;A.IncludesShadersStore[mW]||(A.IncludesShadersStore[mW]=Eoe)});var pW,Soe,Og=M(()=>{G();pW="fogVertex",Soe=`#ifdef FOG vFogDistance=(view*worldPos).xyz; #endif -`;T.IncludesShadersStore[nW]||(T.IncludesShadersStore[nW]=noe)});var sW,soe,Og=M(()=>{G();sW="vertexColorMixing",soe=`#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES) +`;A.IncludesShadersStore[pW]||(A.IncludesShadersStore[pW]=Soe)});var _W,Toe,Ng=M(()=>{G();_W="vertexColorMixing",Toe=`#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES) vColor=vec4(1.0); #ifdef VERTEXCOLOR #ifdef VERTEXALPHA @@ -5006,7 +5006,7 @@ vColor.rgb*=colorUpdated.rgb; vColor*=instanceColor; #endif #endif -`;T.IncludesShadersStore[sW]||(T.IncludesShadersStore[sW]=soe)});var oW={};tt(oW,{colorVertexShader:()=>aoe});var IP,aW,aoe,lW=M(()=>{G();uc();mc();pc();Lg();wf();_c();gc();vc();Ec();Dg();Og();IP="colorVertexShader",aW=`attribute vec3 position; +`;A.IncludesShadersStore[_W]||(A.IncludesShadersStore[_W]=Toe)});var vW={};tt(vW,{colorVertexShader:()=>Aoe});var LP,gW,Aoe,EW=M(()=>{G();uc();mc();pc();Dg();wf();_c();gc();vc();Ec();Og();Ng();LP="colorVertexShader",gW=`attribute vec3 position; #ifdef VERTEXCOLOR attribute vec4 color; #endif @@ -5044,7 +5044,7 @@ gl_Position=viewProjection*worldPos; #include #include #define CUSTOM_VERTEX_MAIN_END -}`;T.ShadersStore[IP]||(T.ShadersStore[IP]=aW);aoe={name:IP,shader:aW}});var cW,ooe,Sc=M(()=>{G();cW="clipPlaneFragmentDeclaration",ooe=`#ifdef CLIPPLANE +}`;A.ShadersStore[LP]||(A.ShadersStore[LP]=gW);Aoe={name:LP,shader:gW}});var SW,xoe,Sc=M(()=>{G();SW="clipPlaneFragmentDeclaration",xoe=`#ifdef CLIPPLANE varying float fClipDistance; #endif #ifdef CLIPPLANE2 @@ -5062,7 +5062,7 @@ varying float fClipDistance5; #ifdef CLIPPLANE6 varying float fClipDistance6; #endif -`;T.IncludesShadersStore[cW]||(T.IncludesShadersStore[cW]=ooe)});var fW,loe,Ng=M(()=>{G();fW="fogFragmentDeclaration",loe=`#ifdef FOG +`;A.IncludesShadersStore[SW]||(A.IncludesShadersStore[SW]=xoe)});var TW,Roe,wg=M(()=>{G();TW="fogFragmentDeclaration",Roe=`#ifdef FOG #define FOGMODE_NONE 0. #define FOGMODE_EXP 1. #define FOGMODE_EXP2 2. @@ -5077,7 +5077,7 @@ else if (FOGMODE_EXP2==vFogInfos.x) {fogCoeff=1.0/pow(E,fogDistance*fogDistance*fogDensity*fogDensity);} return clamp(fogCoeff,0.0,1.0);} #endif -`;T.IncludesShadersStore[fW]||(T.IncludesShadersStore[fW]=loe)});var hW,coe,Tc=M(()=>{G();hW="clipPlaneFragment",coe=`#if defined(CLIPPLANE) || defined(CLIPPLANE2) || defined(CLIPPLANE3) || defined(CLIPPLANE4) || defined(CLIPPLANE5) || defined(CLIPPLANE6) +`;A.IncludesShadersStore[TW]||(A.IncludesShadersStore[TW]=Roe)});var AW,boe,Tc=M(()=>{G();AW="clipPlaneFragment",boe=`#if defined(CLIPPLANE) || defined(CLIPPLANE2) || defined(CLIPPLANE3) || defined(CLIPPLANE4) || defined(CLIPPLANE5) || defined(CLIPPLANE6) if (false) {} #endif #ifdef CLIPPLANE @@ -5104,14 +5104,14 @@ else if (fClipDistance5>0.0) else if (fClipDistance6>0.0) {discard;} #endif -`;T.IncludesShadersStore[hW]||(T.IncludesShadersStore[hW]=coe)});var dW,foe,wg=M(()=>{G();dW="fogFragment",foe=`#ifdef FOG +`;A.IncludesShadersStore[AW]||(A.IncludesShadersStore[AW]=boe)});var xW,Ioe,Fg=M(()=>{G();xW="fogFragment",Ioe=`#ifdef FOG float fog=CalcFogFactor(); #ifdef PBR fog=toLinearSpace(fog); #endif color.rgb=mix(vFogColor,color.rgb,fog); #endif -`;T.IncludesShadersStore[dW]||(T.IncludesShadersStore[dW]=foe)});var mW={};tt(mW,{colorPixelShader:()=>hoe});var MP,uW,hoe,pW=M(()=>{G();Sc();Ng();Tc();wg();MP="colorPixelShader",uW=`#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES) +`;A.IncludesShadersStore[xW]||(A.IncludesShadersStore[xW]=Ioe)});var bW={};tt(bW,{colorPixelShader:()=>Moe});var DP,RW,Moe,IW=M(()=>{G();Sc();wg();Tc();Fg();DP="colorPixelShader",RW=`#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES) #define VERTEXCOLOR varying vec4 vColor; #else @@ -5130,18 +5130,18 @@ gl_FragColor=color; #endif #include(color,gl_FragColor) #define CUSTOM_FRAGMENT_MAIN_END -}`;T.ShadersStore[MP]||(T.ShadersStore[MP]=uW);hoe={name:MP,shader:uW}});var ed,CP,_W=M(()=>{zt();ki();Ci();TP();Vn();xP();q._LinesMeshParser=(n,e)=>ed.Parse(n,e);ed=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 ge(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(()=>(kk(),Gk)),Promise.resolve().then(()=>(jk(),Kk))]):await Promise.all([Promise.resolve().then(()=>(lW(),oW)),Promise.resolve().then(()=>(pW(),mW))])};let d=new So("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=Ee.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(Ee.LineListDrawMode,e.verticesStart,e.verticesCount,i):r.drawElementsType(Ee.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 CP(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=ge.FromArray(e.color),i.alpha=e.alpha,i}};ed.ForceGLSL=!1;CP=class extends rc{constructor(e,t){super(e,t),this.intersectionThreshold=t.intersectionThreshold}getClassName(){return"InstancedLinesMesh"}}});function gW(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 Ce;return o.indices=e,o.positions=t,r&&(o.colors=s),o}function vW(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();Ci();mr();_W();ki();Pt();Ce.CreateLineSystem=gW;Ce.CreateDashedLines=vW;q.CreateLines=(n,e,t=null,i=!1,r=null)=>PP(n,{points:e,updatable:i,instance:r},t);q.CreateDashedLines=(n,e,t,i,r,s=null,a,o)=>LP(n,{points:e,dashSize:t,gapSize:i,dashNb:r,updatable:a,instance:o},s)});var DP,Fg,cx,SW=M(()=>{Pt();Ge();ki();Ci();mr();Uh();Ln();Oi();DP=class extends Fe{constructor(e,t){super(e.x,e.y),this.index=t}},Fg=class{constructor(){this.elements=[]}add(e){let t=[];for(let i of e){let r=new DP(i,this.elements.length);t.push(r),this.elements.push(r)}return t}computeBounds(){let e=new Fe(this.elements[0].x,this.elements[0].y),t=new Fe(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}}},cx=class{_addToepoint(e){for(let t of e)this._epoints.push(t.x,t.y)}constructor(e,t,i,r=earcut){this._points=new Fg,this._outlinepoints=new Fg,this._holes=new Array,this._epoints=new Array,this._eholes=new Array,this.bjsEarcut=r,this._name=e,this._scene=i||Oe.LastCreatedScene;let s;t instanceof Ju?s=t.getPoints():s=t,this._addToepoint(s),this._points.add(s),this._outlinepoints.add(s),typeof this.bjsEarcut=="undefined"&&ee.Warn("Earcut was not found, the polygon will not be built.")}addHole(e){this._points.add(e);let t=new Fg;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 Ce,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();Ci();mr();SW();ki();Oi();tn();Ce.CreatePolygon=TW;q.CreatePolygon=(n,e,t,i,r,s,a=earcut)=>fx(n,{shape:e,holes:i,updatable:r,sideOrientation:s},t,a);q.ExtrudePolygon=(n,e,t,i,r,s,a,o=earcut)=>Ug(n,{shape:e,holes:r,depth:t,updatable:s,sideOrientation:a},i,o)});function NP(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 AW(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 wP(n,e,t=null){var v;let i=e.path,r=e.shape,s=b.Zero(),a=(x,A)=>{var S,R;let E=(R=(S=e.scaleFunction)==null?void 0:S.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),p=e.instance,_=e.invertUV||!1,g=e.capFunction||null;return AW(n,r,i,null,null,(v=e.scaleVectorFunction)!=null?v:a,o,l,c,f,!0,t,!!h,m,p||null,_,e.frontUVs||null,e.backUVs||null,d,u,g||null)}function AW(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,B,W,te,$,J,z)=>{let Y=V.getTangents(),me=V.getNormals(),xe=V.getBinormals(),Ue=V.getDistances();if(z){for(let Xe=0;Xe0){let je=Y[Xe-1];b.Dot(je,Y[Xe])<0&&Y[Xe].scaleInPlace(-1),je=me[Xe-1],b.Dot(je,me[Xe])<0&&me[Xe].scaleInPlace(-1),je=xe[Xe-1],b.Dot(je,xe[Xe])<0&&xe[Xe].scaleInPlace(-1)}}let ae=0,ve=()=>w!==null?w:b.OneReadOnly,ue=J&&te?te:()=>B!==null?B:0,De=J&&W?W:ve,de=$===q.NO_CAP||$===q.CAP_END?0:2,be=Z.Matrix[0];for(let Xe=0;Xe{let je=Array(),$t=b.Zero(),Dt;for(Dt=0;Dt3?0:c,R=E(e,t,I,C,S,r,s,a,c,f,x);let y=Eo(n,{pathArray:R,closeArray:o,closePath:l,updatable:d,sideOrientation:u,invertUV:p,frontUVs:_||void 0,backUVs:g||void 0},h);return y._creationDataStorage.pathArray=R,y._creationDataStorage.path3D=I,y._creationDataStorage.cap=c,y}var xW=M(()=>{Ge();Ci();xg();Uh();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 NP(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 wP(n,d,l)}});function FP(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(p=0;p<=o-l;p++){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(p*g)*s[0].x*a,s[0].y,Math.sin(p*g)*s[0].x*a))),_=0;_{Ge();Ci();xg();q.CreateLathe=(n,e,t,i,r,s,a)=>FP(n,{shape:e,radius:t,tessellation:i,sideOrientation:a,updatable:s},r)});function bW(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||Ce.DEFAULTSIDE,l=s/2,c=a/2;t.push(-l,-c,0),i.push(0,0,-1),r.push(0,Mt?1:0),t.push(l,-c,0),i.push(0,0,-1),r.push(1,Mt?1:0),t.push(l,c,0),i.push(0,0,-1),r.push(1,Mt?0:1),t.push(-l,c,0),i.push(0,0,-1),r.push(0,Mt?0:1),e.push(0),e.push(1),e.push(2),e.push(0),e.push(2),e.push(3),Ce._ComputeSides(o,t,e,i,r,n.frontUVs,n.backUVs);let f=new Ce;return f.indices=e,f.positions=t,f.normals=i,f.uvs=r,f}function UP(n,e={},t=null){let i=new q(n,t);return e.sideOrientation=q._GetDefaultSideOrientation(e.sideOrientation),i._originalBuilderSideOrientation=e.sideOrientation,bW(e).applyToMesh(i,e.updatable),e.sourcePlane&&(i.translate(e.sourcePlane.normal,-e.sourcePlane.d),i.setDirection(e.sourcePlane.normal.scale(-1))),i}var IW=M(()=>{Ci();mr();tn();Ce.CreatePlane=bW;q.CreatePlane=(n,e,t,i,r)=>UP(n,{size:e,width:e,height:e,sideOrientation:r,updatable:i},t)});function BP(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,S,R,I)=>{let C=v.getTangents(),y=v.getNormals(),D=v.getDistances(),V=Math.PI*2/E*I,w=S||(()=>A),B,W,te,$,J=Z.Matrix[0],z=R===q.NO_CAP||R===q.CAP_END?0:2;for(let me=0;me{let Ue=Array();for(let ae=0;ae3?0:l,m=d(i,u,p,s,a,o,l,e.arc);let _=Eo(n,{pathArray:m,closePath:!0,closeArray:!1,updatable:f,sideOrientation:h,invertUV:c,frontUVs:e.frontUVs,backUVs:e.backUVs},t);return _._creationDataStorage.pathArray=m,_._creationDataStorage.path3D=u,_._creationDataStorage.tessellation=a,_._creationDataStorage.cap=l,_._creationDataStorage.arc=e.arc,_._creationDataStorage.radius=s,_}var MW=M(()=>{Ge();Ci();xg();Uh();q.CreateTube=(n,e,t,i,r,s,a,o,l,c)=>BP(n,{path:e,radius:t,tessellation:i,radiusFunction:r,arc:1,cap:s,updatable:o,sideOrientation:l,instance:c},a)});function CW(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||Ce.DEFAULTSIDE,u=[],m=[],p=[],_=[],g=[],v=0,x=0,A=[],E,S,R,I,C,y,D,O;if(h)for(S=0;S{Ge();zt();Ci();mr();tn();Ce.CreatePolyhedron=CW;q.CreatePolyhedron=(n,e,t)=>Bg(n,e,t)});function yW(n){let e=n.sideOrientation||Ce.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,p=60/1024,_=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=[],S=[],R=[],I=0,C=new Array(3),y=new Array(3),D;for(D=0;D<3;D++)C[D]=b.Zero(),y[D]=Fe.Zero();for(let V=0;V<20;V++){for(D=0;D<3;D++){let w=f[3*V+D];C[D].copyFromFloats(c[3*h[w]],c[3*h[w]+1],c[3*h[w]+2]),C[D].normalize(),y[D].copyFromFloats(d[2*w]*u+p+x[V]*g,d[2*w+1]*m+_+x[V]*v)}let N=(w,B,W,te)=>{let $=b.Lerp(C[0],C[2],B/r),J=b.Lerp(C[1],C[2],B/r),z=r===B?C[2]:b.Lerp($,J,w/(r-B));z.normalize();let Y;if(i){let ae=b.Lerp(C[0],C[2],te/r),ve=b.Lerp(C[1],C[2],te/r);Y=b.Lerp(ae,ve,W/(r-te))}else Y=new b(z.x,z.y,z.z);Y.x/=s,Y.y/=a,Y.z/=o,Y.normalize();let me=Fe.Lerp(y[0],y[2],B/r),xe=Fe.Lerp(y[1],y[2],B/r),Ue=r===B?y[2]:Fe.Lerp(me,xe,w/(r-B));E.push(z.x*s,z.y*a,z.z*o),S.push(Y.x,Y.y,Y.z),R.push(Ue.x,Mt?1-Ue.y:Ue.y),A.push(I),I++};for(let w=0;w{Ge();Ci();mr();tn();Ce.CreateIcoSphere=yW;q.CreateIcoSphere=(n,e,t)=>GP(n,e,t)});function kP(n,e,t){var W,te,$,J,z;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,p=i?e.getVerticesData(L.MatricesWeightsExtraKind):null,_=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),me=e.getScene().activeCamera,xe=b.TransformCoordinates(Y,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),S=Math.atan2(g.y,E),R=new Ce;R.indices=[],R.positions=[],R.normals=[],R.uvs=[],R.matricesIndices=i?[]:null,R.matricesWeights=i?[]:null,R.matricesIndicesExtra=m?[]:null,R.matricesWeightsExtra=p?[]:null;let I=0,C=(Y,me)=>{let xe=new hx;if(!a||!o||!l)return xe;let Ue=a[Y];if(xe.vertexIdx=Ue*3,xe.vertexIdxForBones=Ue*4,xe.position=new b(o[Ue*3],o[Ue*3+1],o[Ue*3+2]),b.TransformCoordinatesToRef(xe.position,me,xe.position),xe.normal=new b(l[Ue*3],l[Ue*3+1],l[Ue*3+2]),b.TransformNormalToRef(xe.normal,me,xe.normal),t.captureUVS&&h){let ae=h[Ue*2+1];xe.uv=new Fe(h[Ue*2],Mt?1-ae:ae)}return xe},y=[0,0,0,0],D=(Y,me)=>{if(Y.length===0)return Y;let xe=.5*Math.abs(b.Dot(v,me)),Ue=(ne,ue,De,de)=>{for(let be=0;be{var Le,Ve,Je,rt,ye,Ie,ct,St,nt,Qe,Wt,qt,re,K,Pe,Ae;let De=b.GetClipFactor(ne.position,ue.position,me,xe),de=y,be=y;if(d&&u){let qe=ne.matrixIndicesOverride?0:ne.vertexIdxForBones,Ye=(Le=ne.matrixIndicesOverride)!=null?Le:d,we=(Ve=ne.matrixWeightsOverride)!=null?Ve:u,At=ue.matrixIndicesOverride?0:ue.vertexIdxForBones,Zt=(Je=ue.matrixIndicesOverride)!=null?Je:d,tr=(rt=ue.matrixWeightsOverride)!=null?rt:u;de=[0,0,0,0],be=[0,0,0,0];let vi=0;for(let Zi=0;Zi<4;++Zi)if(we[qe+Zi]>0){let Ba=Ue(Zt,Ye[qe+Zi],At,4);de[vi]=Ye[qe+Zi],be[vi]=to(we[qe+Zi],Ba>=0?tr[Ba]:0,De),vi++}for(let Zi=0;Zi<4&&vi<4;++Zi){let Ba=Zt[At+Zi];Ue(Ye,Ba,qe,4)===-1&&(de[vi]=Ba,be[vi]=to(0,tr[At+Zi],De),vi++)}let xn=be[0]+be[1]+be[2]+be[3];be[0]/=xn,be[1]/=xn,be[2]/=xn,be[3]/=xn}let Ke=ne.localPositionOverride?ne.localPositionOverride[0]:(ye=c==null?void 0:c[ne.vertexIdx])!=null?ye:0,Tt=ne.localPositionOverride?ne.localPositionOverride[1]:(Ie=c==null?void 0:c[ne.vertexIdx+1])!=null?Ie:0,Xe=ne.localPositionOverride?ne.localPositionOverride[2]:(ct=c==null?void 0:c[ne.vertexIdx+2])!=null?ct:0,je=ue.localPositionOverride?ue.localPositionOverride[0]:(St=c==null?void 0:c[ue.vertexIdx])!=null?St:0,$t=ue.localPositionOverride?ue.localPositionOverride[1]:(nt=c==null?void 0:c[ue.vertexIdx+1])!=null?nt:0,Dt=ue.localPositionOverride?ue.localPositionOverride[2]:(Qe=c==null?void 0:c[ue.vertexIdx+2])!=null?Qe:0,xi=ne.localNormalOverride?ne.localNormalOverride[0]:(Wt=f==null?void 0:f[ne.vertexIdx])!=null?Wt:0,oe=ne.localNormalOverride?ne.localNormalOverride[1]:(qt=f==null?void 0:f[ne.vertexIdx+1])!=null?qt:0,Vi=ne.localNormalOverride?ne.localNormalOverride[2]:(re=f==null?void 0:f[ne.vertexIdx+2])!=null?re:0,ti=ue.localNormalOverride?ue.localNormalOverride[0]:(K=f==null?void 0:f[ue.vertexIdx])!=null?K:0,wi=ue.localNormalOverride?ue.localNormalOverride[1]:(Pe=f==null?void 0:f[ue.vertexIdx+1])!=null?Pe:0,ot=ue.localNormalOverride?ue.localNormalOverride[2]:(Ae=f==null?void 0:f[ue.vertexIdx+2])!=null?Ae:0,Pi=xi+(ti-xi)*De,X=oe+(wi-oe)*De,U=Vi+(ot-Vi)*De,he=Math.sqrt(Pi*Pi+X*X+U*U);return new hx(b.Lerp(ne.position,ue.position,De),b.Lerp(ne.normal,ue.normal,De).normalize(),Fe.Lerp(ne.uv,ue.uv,De),-1,-1,c?[Ke+(je-Ke)*De,Tt+($t-Tt)*De,Xe+(Dt-Xe)*De]:null,f?[Pi/he,X/he,U/he]:null,de,be)},ve=null;Y.length>3&&(ve=[]);for(let ne=0;ne0,$t=Tt>0,Dt=Xe>0;switch((je?1:0)+($t?1:0)+(Dt?1:0)){case 0:Y.length>3?(ve.push(Y[ne]),ve.push(Y[ne+1]),ve.push(Y[ne+2])):ve=Y;break;case 1:if(ve=ve!=null?ve:new Array,je&&(ue=Y[ne+1],De=Y[ne+2],de=ae(Y[ne],ue),be=ae(Y[ne],De)),$t){ue=Y[ne],De=Y[ne+2],de=ae(Y[ne+1],ue),be=ae(Y[ne+1],De),ve.push(de),ve.push(De.clone()),ve.push(ue.clone()),ve.push(De.clone()),ve.push(de.clone()),ve.push(be);break}Dt&&(ue=Y[ne],De=Y[ne+1],de=ae(Y[ne+2],ue),be=ae(Y[ne+2],De)),ue&&De&&de&&be&&(ve.push(ue.clone()),ve.push(De.clone()),ve.push(de),ve.push(be),ve.push(de.clone()),ve.push(De.clone()));break;case 2:ve=ve!=null?ve:new Array,je||(ue=Y[ne].clone(),De=ae(ue,Y[ne+1]),de=ae(ue,Y[ne+2]),ve.push(ue),ve.push(De),ve.push(de)),$t||(ue=Y[ne+1].clone(),De=ae(ue,Y[ne+2]),de=ae(ue,Y[ne]),ve.push(ue),ve.push(De),ve.push(de)),Dt||(ue=Y[ne+2].clone(),De=ae(ue,Y[ne]),de=ae(ue,Y[ne+1]),ve.push(ue),ve.push(De),ve.push(de));break;case 3:break}}return ve},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(j.IdentityReadOnly);for(let Y=0;Y{Ge();Dn();Ci();ki();mr();tn();doe=new b(1,0,0),uoe=new b(-1,0,0),moe=new b(0,1,0),poe=new b(0,-1,0),_oe=new b(0,0,1),goe=new b(0,0,-1),hx=class n{constructor(e=b.Zero(),t=b.Up(),i=Fe.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)=>kP(n,e,{position:t,normal:i,size:r,angle:s})});function DW(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),p=Math.acos((c-l)/i),_=[],g=[],v=[],x=[],A=0,E=[],S=f*.5,R=Math.PI*.5,I,C,y=b.Zero(),D=b.Zero(),O=Math.cos(p),V=Math.sin(p),N=new Fe(l*V,S+l*O).subtract(new Fe(c*V,-S+c*O)).length(),w=l*p+N+c*(R-p),B=0;for(C=0;C<=u;C++){let J=[],z=R-p*(C/u);B+=l*p/u;let Y=Math.cos(z),me=Math.sin(z),xe=Y*l;for(I=0;I<=a;I++){let Ue=I/a,ae=Ue*d+h,ve=Math.sin(ae),ne=Math.cos(ae);D.x=xe*ve,D.y=S+me*l,D.z=xe*ne,g.push(D.x,D.y,D.z),y.set(Y*ve,me,Y*ne),v.push(y.x,y.y,y.z),x.push(Ue,Mt?B/w:1-B/w),J.push(A),A++}E.push(J)}let W=i-l-c+O*l-O*c,te=V*(c-l)/W;for(C=1;C<=o;C++){let J=[];B+=N/o;let z=V*(C*(c-l)/o+l);for(I=0;I<=a;I++){let Y=I/a,me=Y*d+h,xe=Math.sin(me),Ue=Math.cos(me);D.x=z*xe,D.y=S+O*l-C*W/o,D.z=z*Ue,g.push(D.x,D.y,D.z),y.set(xe,te,Ue).normalize(),v.push(y.x,y.y,y.z),x.push(Y,Mt?B/w:1-B/w),J.push(A),A++}E.push(J)}for(C=1;C<=m;C++){let J=[],z=R-p-(Math.PI-p)*(C/m);B+=c*p/m;let Y=Math.cos(z),me=Math.sin(z),xe=Y*c;for(I=0;I<=a;I++){let Ue=I/a,ae=Ue*d+h,ve=Math.sin(ae),ne=Math.cos(ae);D.x=xe*ve,D.y=-S+me*c,D.z=xe*ne,g.push(D.x,D.y,D.z),y.set(Y*ve,me,Y*ne),v.push(y.x,y.y,y.z),x.push(Ue,Mt?B/w:1-B/w),J.push(A),A++}E.push(J)}for(I=0;I{mr();Ge();Ci();tn();q.CreateCapsule=(n,e,t)=>WP(n,e,t);Ce.CreateCapsule=DW});var qi,NW=M(()=>{Pt();Ge();qi=class n{constructor(e=0,t=0){this.x=e,this.y=t,e!==Math.floor(e)&&(e=Math.floor(e),ee.Warn("x is not an integer, floor(x) used")),t!==Math.floor(t)&&(t=Math.floor(t),ee.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),ee.Warn("m not an integer only floor(m) used")),t!==Math.floor(t)&&(t=Math.floor(t),ee.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),ee.Warn("m is not an integer, floor(m) used")),t!==Math.floor(t)&&(t=Math.floor(t),ee.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 Hm,Vg,zm,HP=M(()=>{Ge();Dn();Ln();NW();Hm=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 Vg("icosahedron","Regular",[[0,gr,-1],[-gr,1,0],[-1,0,-gr],[1,0,-gr],[gr,1,0],[0,gr,1],[-1,0,gr],[-gr,-1,0],[0,-gr,-1],[gr,-1,0],[1,0,gr],[0,-gr,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=JT(i,r));let a=i/s,o=r/s,l,c,f,h,d,u=qi.Zero(),m=new qi(i,r),p=new qi(-r,i+r),_=qi.Zero(),g=qi.Zero(),v=qi.Zero(),x=[],A,E,S,R,I=[],C=this.vertByDist,y=(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++),C[V][0]>2?I[t[A]]=[-C[V][0],C[V][1],t[A]]:I[t[A]]=[x[C[V][0]],C[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],S=u.x+"|"+u.y,A=D+"|"+S,A in t||(t[A]=f,I[f]=[x[C[S][0]],C[S][1]]),S=m.x+"|"+m.y,A=D+"|"+S,A in t||(t[A]=h,I[h]=[x[C[S][0]],C[S][1]]),S=p.x+"|"+p.y,A=D+"|"+S,A in t||(t[A]=d,I[d]=[x[C[S][0]],C[S][1]]),l=this.IDATA.edgematch[D][0],c=this.IDATA.edgematch[D][1],c==="B")for(let O=1;O2?I[t[A]]=[-C[S][0],C[S][1],t[A]]:I[t[A]]=[x[C[S][0]],C[S][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=JT(e,t),S=e/E,R=t/E;for(let C=1;CE.x-S.x),i.sort((E,S)=>E.y-S.y);let o=new Array(e+t+1),l=new Array(e+t+1);for(let E=0;E{let R=E.clone();return S==="A"&&R.rotateNeg120(e,t),S==="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]-S[2]),v.sort((E,S)=>E[3]-S[3]),v.sort((E,S)=>E[1]-S[1]),v.sort((E,S)=>E[0]-S[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 Vg("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,ee.Warn("n > m therefore m and n swapped")}let s=new Hm;s.build(i,r);let o={custom:zm.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 Bg(n,o,t)}var FW=M(()=>{VP();Pt();HP()});var Gg,UW=M(()=>{Ge();ki();Ci();zt();Pt();q._GoldbergMeshParser=(n,e)=>Gg.Parse(n,e);Gg=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&&(ee.Warn("Maximum number of unshared faces used"),e=this.goldbergData.nbUnsharedFaces-1),this.goldbergData.nbUnsharedFaces+e):(e>11&&(ee.Warn("Last pole used"),e=11),t>this.goldbergData.nbFacesAtPole-1&&(ee.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 voe(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||Ce.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,ee.Warn("n > m therefore m and n swapped")}let c=new Hm;c.build(o,l);let f=zm.BuildGeodesicData(c),h=f.toGoldbergPolyhedronData(),d=new Gg(n,t);e.sideOrientation=q._GetDefaultSideOrientation(e.sideOrientation),d._originalBuilderSideOrientation=e.sideOrientation,voe(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();Ci();mr();Pt();HP();UW();tn()});function Eoe(n,e,t,i,r,s){let a=s.glyphs[n]||s.glyphs["?"];if(!a)return null;let o=new zP(r);if(a.o){let l=a.o.split(" ");for(let c=0,f=l.length;c{Uh();Ge();Ci();Zh();OP();zP=class{constructor(e){this._paths=[],this._tempPaths=[],this._holes=[],this._resolution=e}moveTo(e,t){this._currentPath=new Ju(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 ts,XP=M(()=>{xg();hk();mP();vk();Sk();Ak();Rk();Ik();EW();OP();xW();RW();IW();pP();dP();MW();VP();PW();LW();OW();FW();VW();kW();ts={CreateBox:uP,CreateTiledBox:gk,CreateSphere:gP,CreateDisc:oP,CreateIcoSphere:GP,CreateRibbon:Eo,CreateCylinder:vP,CreateTorus:EP,CreateTorusKnot:SP,CreateLineSystem:yP,CreateLines:PP,CreateDashedLines:LP,ExtrudeShape:NP,ExtrudeShapeCustom:wP,CreateLathe:FP,CreateTiledPlane:pk,CreatePlane:UP,CreateGround:cP,CreateTiledGround:fP,CreateGroundFromHeightMap:hP,CreatePolygon:fx,ExtrudePolygon:Ug,CreateTube:BP,CreatePolyhedron:Bg,CreateGeodesic:wW,CreateGoldberg:BW,CreateDecal:kP,CreateCapsule:WP,CreateText:GW}});var Ls,dx=M(()=>{Ls=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 Rr,Na=M(()=>{Rr=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();ki();yi();IP();Gn();CP();q._LinesMeshParser=(n,e)=>ed.Parse(n,e);ed=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 pe(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(()=>($k(),Qk)),Promise.resolve().then(()=>(sW(),nW))]):await Promise.all([Promise.resolve().then(()=>(EW(),vW)),Promise.resolve().then(()=>(IW(),bW))])};let d=new To("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=Ee.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(Ee.LineListDrawMode,e.verticesStart,e.verticesCount,i):r.drawElementsType(Ee.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 OP(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=pe.FromArray(e.color),i.alpha=e.alpha,i}};ed.ForceGLSL=!1;OP=class extends rc{constructor(e,t){super(e,t),this.intersectionThreshold=t.intersectionThreshold}getClassName(){return"InstancedLinesMesh"}}});function CW(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 Ce;return o.indices=e,o.positions=t,r&&(o.colors=s),o}function yW(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();yi();mr();MW();ki();Pt();Ce.CreateLineSystem=CW;Ce.CreateDashedLines=yW;q.CreateLines=(n,e,t=null,i=!1,r=null)=>wP(n,{points:e,updatable:i,instance:r},t);q.CreateDashedLines=(n,e,t,i,r,s=null,a,o)=>FP(n,{points:e,dashSize:t,gapSize:i,dashNb:r,updatable:a,instance:o},s)});var BP,Bg,mx,LW=M(()=>{Pt();Ge();ki();yi();mr();Bh();Dn();Ni();BP=class extends Fe{constructor(e,t){super(e.x,e.y),this.index=t}},Bg=class{constructor(){this.elements=[]}add(e){let t=[];for(let i of e){let r=new BP(i,this.elements.length);t.push(r),this.elements.push(r)}return t}computeBounds(){let e=new Fe(this.elements[0].x,this.elements[0].y),t=new Fe(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}}},mx=class{_addToepoint(e){for(let t of e)this._epoints.push(t.x,t.y)}constructor(e,t,i,r=earcut){this._points=new Bg,this._outlinepoints=new Bg,this._holes=new Array,this._epoints=new Array,this._eholes=new Array,this.bjsEarcut=r,this._name=e,this._scene=i||Oe.LastCreatedScene;let s;t instanceof Ju?s=t.getPoints():s=t,this._addToepoint(s),this._points.add(s),this._outlinepoints.add(s),typeof this.bjsEarcut=="undefined"&&ee.Warn("Earcut was not found, the polygon will not be built.")}addHole(e){this._points.add(e);let t=new Bg;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 Ce,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();yi();mr();LW();ki();Ni();tn();Ce.CreatePolygon=DW;q.CreatePolygon=(n,e,t,i,r,s,a=earcut)=>px(n,{shape:e,holes:i,updatable:r,sideOrientation:s},t,a);q.ExtrudePolygon=(n,e,t,i,r,s,a,o=earcut)=>Ug(n,{shape:e,holes:r,depth:t,updatable:s,sideOrientation:a},i,o)});function VP(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 OW(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 GP(n,e,t=null){var v;let i=e.path,r=e.shape,s=b.Zero(),a=(x,T)=>{var S,R;let E=(R=(S=e.scaleFunction)==null?void 0:S.call(e,x,T))!=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),p=e.instance,_=e.invertUV||!1,g=e.capFunction||null;return OW(n,r,i,null,null,(v=e.scaleVectorFunction)!=null?v:a,o,l,c,f,!0,t,!!h,m,p||null,_,e.frontUVs||null,e.backUVs||null,d,u,g||null)}function OW(n,e,t,i,r,s,a,o,l,c,f,h,d,u,m,p,_,g,v,x,T){let E=(D,O,V,N,w,U,W,te,$,J,z)=>{let Y=V.getTangents(),me=V.getNormals(),xe=V.getBinormals(),Be=V.getDistances();if(z){for(let Xe=0;Xe0){let qe=Y[Xe-1];b.Dot(qe,Y[Xe])<0&&Y[Xe].scaleInPlace(-1),qe=me[Xe-1],b.Dot(qe,me[Xe])<0&&me[Xe].scaleInPlace(-1),qe=xe[Xe-1],b.Dot(qe,xe[Xe])<0&&xe[Xe].scaleInPlace(-1)}}let ae=0,ve=()=>w!==null?w:b.OneReadOnly,ue=J&&te?te:()=>U!==null?U:0,De=J&&W?W:ve,de=$===q.NO_CAP||$===q.CAP_END?0:2,be=Z.Matrix[0];for(let Xe=0;Xe{let qe=Array(),$t=b.Zero(),Dt;for(Dt=0;Dt3?0:c,R=E(e,t,I,C,S,r,s,a,c,f,x);let y=So(n,{pathArray:R,closeArray:o,closePath:l,updatable:d,sideOrientation:u,invertUV:p,frontUVs:_||void 0,backUVs:g||void 0},h);return y._creationDataStorage.pathArray=R,y._creationDataStorage.path3D=I,y._creationDataStorage.cap=c,y}var NW=M(()=>{Ge();yi();Rg();Bh();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 VP(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 GP(n,d,l)}});function kP(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(p=0;p<=o-l;p++){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(p*g)*s[0].x*a,s[0].y,Math.sin(p*g)*s[0].x*a))),_=0;_{Ge();yi();Rg();q.CreateLathe=(n,e,t,i,r,s,a)=>kP(n,{shape:e,radius:t,tessellation:i,sideOrientation:a,updatable:s},r)});function FW(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||Ce.DEFAULTSIDE,l=s/2,c=a/2;t.push(-l,-c,0),i.push(0,0,-1),r.push(0,Mt?1:0),t.push(l,-c,0),i.push(0,0,-1),r.push(1,Mt?1:0),t.push(l,c,0),i.push(0,0,-1),r.push(1,Mt?0:1),t.push(-l,c,0),i.push(0,0,-1),r.push(0,Mt?0:1),e.push(0),e.push(1),e.push(2),e.push(0),e.push(2),e.push(3),Ce._ComputeSides(o,t,e,i,r,n.frontUVs,n.backUVs);let f=new Ce;return f.indices=e,f.positions=t,f.normals=i,f.uvs=r,f}function WP(n,e={},t=null){let i=new q(n,t);return e.sideOrientation=q._GetDefaultSideOrientation(e.sideOrientation),i._originalBuilderSideOrientation=e.sideOrientation,FW(e).applyToMesh(i,e.updatable),e.sourcePlane&&(i.translate(e.sourcePlane.normal,-e.sourcePlane.d),i.setDirection(e.sourcePlane.normal.scale(-1))),i}var BW=M(()=>{yi();mr();tn();Ce.CreatePlane=FW;q.CreatePlane=(n,e,t,i,r)=>WP(n,{size:e,width:e,height:e,sideOrientation:r,updatable:i},t)});function HP(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,T,E,S,R,I)=>{let C=v.getTangents(),y=v.getNormals(),D=v.getDistances(),V=Math.PI*2/E*I,w=S||(()=>T),U,W,te,$,J=Z.Matrix[0],z=R===q.NO_CAP||R===q.CAP_END?0:2;for(let me=0;me{let Be=Array();for(let ae=0;ae3?0:l,m=d(i,u,p,s,a,o,l,e.arc);let _=So(n,{pathArray:m,closePath:!0,closeArray:!1,updatable:f,sideOrientation:h,invertUV:c,frontUVs:e.frontUVs,backUVs:e.backUVs},t);return _._creationDataStorage.pathArray=m,_._creationDataStorage.path3D=u,_._creationDataStorage.tessellation=a,_._creationDataStorage.cap=l,_._creationDataStorage.arc=e.arc,_._creationDataStorage.radius=s,_}var UW=M(()=>{Ge();yi();Rg();Bh();q.CreateTube=(n,e,t,i,r,s,a,o,l,c)=>HP(n,{path:e,radius:t,tessellation:i,radiusFunction:r,arc:1,cap:s,updatable:o,sideOrientation:l,instance:c},a)});function VW(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||Ce.DEFAULTSIDE,u=[],m=[],p=[],_=[],g=[],v=0,x=0,T=[],E,S,R,I,C,y,D,O;if(h)for(S=0;S{Ge();zt();yi();mr();tn();Ce.CreatePolyhedron=VW;q.CreatePolyhedron=(n,e,t)=>Vg(n,e,t)});function GW(n){let e=n.sideOrientation||Ce.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,p=60/1024,_=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],T=[],E=[],S=[],R=[],I=0,C=new Array(3),y=new Array(3),D;for(D=0;D<3;D++)C[D]=b.Zero(),y[D]=Fe.Zero();for(let V=0;V<20;V++){for(D=0;D<3;D++){let w=f[3*V+D];C[D].copyFromFloats(c[3*h[w]],c[3*h[w]+1],c[3*h[w]+2]),C[D].normalize(),y[D].copyFromFloats(d[2*w]*u+p+x[V]*g,d[2*w+1]*m+_+x[V]*v)}let N=(w,U,W,te)=>{let $=b.Lerp(C[0],C[2],U/r),J=b.Lerp(C[1],C[2],U/r),z=r===U?C[2]:b.Lerp($,J,w/(r-U));z.normalize();let Y;if(i){let ae=b.Lerp(C[0],C[2],te/r),ve=b.Lerp(C[1],C[2],te/r);Y=b.Lerp(ae,ve,W/(r-te))}else Y=new b(z.x,z.y,z.z);Y.x/=s,Y.y/=a,Y.z/=o,Y.normalize();let me=Fe.Lerp(y[0],y[2],U/r),xe=Fe.Lerp(y[1],y[2],U/r),Be=r===U?y[2]:Fe.Lerp(me,xe,w/(r-U));E.push(z.x*s,z.y*a,z.z*o),S.push(Y.x,Y.y,Y.z),R.push(Be.x,Mt?1-Be.y:Be.y),T.push(I),I++};for(let w=0;w{Ge();yi();mr();tn();Ce.CreateIcoSphere=GW;q.CreateIcoSphere=(n,e,t)=>XP(n,e,t)});function YP(n,e,t){var W,te,$,J,z;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,p=i?e.getVerticesData(L.MatricesWeightsExtraKind):null,_=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),me=e.getScene().activeCamera,xe=b.TransformCoordinates(Y,me.getWorldMatrix());g=me.globalPosition.subtract(xe)}let T=-Math.atan2(g.z,g.x)-Math.PI/2,E=Math.sqrt(g.x*g.x+g.z*g.z),S=Math.atan2(g.y,E),R=new Ce;R.indices=[],R.positions=[],R.normals=[],R.uvs=[],R.matricesIndices=i?[]:null,R.matricesWeights=i?[]:null,R.matricesIndicesExtra=m?[]:null,R.matricesWeightsExtra=p?[]:null;let I=0,C=(Y,me)=>{let xe=new _x;if(!a||!o||!l)return xe;let Be=a[Y];if(xe.vertexIdx=Be*3,xe.vertexIdxForBones=Be*4,xe.position=new b(o[Be*3],o[Be*3+1],o[Be*3+2]),b.TransformCoordinatesToRef(xe.position,me,xe.position),xe.normal=new b(l[Be*3],l[Be*3+1],l[Be*3+2]),b.TransformNormalToRef(xe.normal,me,xe.normal),t.captureUVS&&h){let ae=h[Be*2+1];xe.uv=new Fe(h[Be*2],Mt?1-ae:ae)}return xe},y=[0,0,0,0],D=(Y,me)=>{if(Y.length===0)return Y;let xe=.5*Math.abs(b.Dot(v,me)),Be=(ne,ue,De,de)=>{for(let be=0;be{var Le,Ve,Je,rt,ye,Ie,ct,St,nt,Qe,Wt,qt,re,K,Pe,Ae;let De=b.GetClipFactor(ne.position,ue.position,me,xe),de=y,be=y;if(d&&u){let Ye=ne.matrixIndicesOverride?0:ne.vertexIdxForBones,Ke=(Le=ne.matrixIndicesOverride)!=null?Le:d,we=(Ve=ne.matrixWeightsOverride)!=null?Ve:u,At=ue.matrixIndicesOverride?0:ue.vertexIdxForBones,Zt=(Je=ue.matrixIndicesOverride)!=null?Je:d,tr=(rt=ue.matrixWeightsOverride)!=null?rt:u;de=[0,0,0,0],be=[0,0,0,0];let vi=0;for(let Zi=0;Zi<4;++Zi)if(we[Ye+Zi]>0){let Ua=Be(Zt,Ke[Ye+Zi],At,4);de[vi]=Ke[Ye+Zi],be[vi]=io(we[Ye+Zi],Ua>=0?tr[Ua]:0,De),vi++}for(let Zi=0;Zi<4&&vi<4;++Zi){let Ua=Zt[At+Zi];Be(Ke,Ua,Ye,4)===-1&&(de[vi]=Ua,be[vi]=io(0,tr[At+Zi],De),vi++)}let bn=be[0]+be[1]+be[2]+be[3];be[0]/=bn,be[1]/=bn,be[2]/=bn,be[3]/=bn}let je=ne.localPositionOverride?ne.localPositionOverride[0]:(ye=c==null?void 0:c[ne.vertexIdx])!=null?ye:0,Tt=ne.localPositionOverride?ne.localPositionOverride[1]:(Ie=c==null?void 0:c[ne.vertexIdx+1])!=null?Ie:0,Xe=ne.localPositionOverride?ne.localPositionOverride[2]:(ct=c==null?void 0:c[ne.vertexIdx+2])!=null?ct:0,qe=ue.localPositionOverride?ue.localPositionOverride[0]:(St=c==null?void 0:c[ue.vertexIdx])!=null?St:0,$t=ue.localPositionOverride?ue.localPositionOverride[1]:(nt=c==null?void 0:c[ue.vertexIdx+1])!=null?nt:0,Dt=ue.localPositionOverride?ue.localPositionOverride[2]:(Qe=c==null?void 0:c[ue.vertexIdx+2])!=null?Qe:0,xi=ne.localNormalOverride?ne.localNormalOverride[0]:(Wt=f==null?void 0:f[ne.vertexIdx])!=null?Wt:0,oe=ne.localNormalOverride?ne.localNormalOverride[1]:(qt=f==null?void 0:f[ne.vertexIdx+1])!=null?qt:0,Vi=ne.localNormalOverride?ne.localNormalOverride[2]:(re=f==null?void 0:f[ne.vertexIdx+2])!=null?re:0,ii=ue.localNormalOverride?ue.localNormalOverride[0]:(K=f==null?void 0:f[ue.vertexIdx])!=null?K:0,Fi=ue.localNormalOverride?ue.localNormalOverride[1]:(Pe=f==null?void 0:f[ue.vertexIdx+1])!=null?Pe:0,ot=ue.localNormalOverride?ue.localNormalOverride[2]:(Ae=f==null?void 0:f[ue.vertexIdx+2])!=null?Ae:0,Li=xi+(ii-xi)*De,X=oe+(Fi-oe)*De,B=Vi+(ot-Vi)*De,he=Math.sqrt(Li*Li+X*X+B*B);return new _x(b.Lerp(ne.position,ue.position,De),b.Lerp(ne.normal,ue.normal,De).normalize(),Fe.Lerp(ne.uv,ue.uv,De),-1,-1,c?[je+(qe-je)*De,Tt+($t-Tt)*De,Xe+(Dt-Xe)*De]:null,f?[Li/he,X/he,B/he]:null,de,be)},ve=null;Y.length>3&&(ve=[]);for(let ne=0;ne0,$t=Tt>0,Dt=Xe>0;switch((qe?1:0)+($t?1:0)+(Dt?1:0)){case 0:Y.length>3?(ve.push(Y[ne]),ve.push(Y[ne+1]),ve.push(Y[ne+2])):ve=Y;break;case 1:if(ve=ve!=null?ve:new Array,qe&&(ue=Y[ne+1],De=Y[ne+2],de=ae(Y[ne],ue),be=ae(Y[ne],De)),$t){ue=Y[ne],De=Y[ne+2],de=ae(Y[ne+1],ue),be=ae(Y[ne+1],De),ve.push(de),ve.push(De.clone()),ve.push(ue.clone()),ve.push(De.clone()),ve.push(de.clone()),ve.push(be);break}Dt&&(ue=Y[ne],De=Y[ne+1],de=ae(Y[ne+2],ue),be=ae(Y[ne+2],De)),ue&&De&&de&&be&&(ve.push(ue.clone()),ve.push(De.clone()),ve.push(de),ve.push(be),ve.push(de.clone()),ve.push(De.clone()));break;case 2:ve=ve!=null?ve:new Array,qe||(ue=Y[ne].clone(),De=ae(ue,Y[ne+1]),de=ae(ue,Y[ne+2]),ve.push(ue),ve.push(De),ve.push(de)),$t||(ue=Y[ne+1].clone(),De=ae(ue,Y[ne+2]),de=ae(ue,Y[ne]),ve.push(ue),ve.push(De),ve.push(de)),Dt||(ue=Y[ne+2].clone(),De=ae(ue,Y[ne]),de=ae(ue,Y[ne+1]),ve.push(ue),ve.push(De),ve.push(de));break;case 3:break}}return ve},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(j.IdentityReadOnly);for(let Y=0;Y{Ge();On();yi();ki();mr();tn();Coe=new b(1,0,0),yoe=new b(-1,0,0),Poe=new b(0,1,0),Loe=new b(0,-1,0),Doe=new b(0,0,1),Ooe=new b(0,0,-1),_x=class n{constructor(e=b.Zero(),t=b.Up(),i=Fe.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)=>YP(n,e,{position:t,normal:i,size:r,angle:s})});function HW(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),p=Math.acos((c-l)/i),_=[],g=[],v=[],x=[],T=0,E=[],S=f*.5,R=Math.PI*.5,I,C,y=b.Zero(),D=b.Zero(),O=Math.cos(p),V=Math.sin(p),N=new Fe(l*V,S+l*O).subtract(new Fe(c*V,-S+c*O)).length(),w=l*p+N+c*(R-p),U=0;for(C=0;C<=u;C++){let J=[],z=R-p*(C/u);U+=l*p/u;let Y=Math.cos(z),me=Math.sin(z),xe=Y*l;for(I=0;I<=a;I++){let Be=I/a,ae=Be*d+h,ve=Math.sin(ae),ne=Math.cos(ae);D.x=xe*ve,D.y=S+me*l,D.z=xe*ne,g.push(D.x,D.y,D.z),y.set(Y*ve,me,Y*ne),v.push(y.x,y.y,y.z),x.push(Be,Mt?U/w:1-U/w),J.push(T),T++}E.push(J)}let W=i-l-c+O*l-O*c,te=V*(c-l)/W;for(C=1;C<=o;C++){let J=[];U+=N/o;let z=V*(C*(c-l)/o+l);for(I=0;I<=a;I++){let Y=I/a,me=Y*d+h,xe=Math.sin(me),Be=Math.cos(me);D.x=z*xe,D.y=S+O*l-C*W/o,D.z=z*Be,g.push(D.x,D.y,D.z),y.set(xe,te,Be).normalize(),v.push(y.x,y.y,y.z),x.push(Y,Mt?U/w:1-U/w),J.push(T),T++}E.push(J)}for(C=1;C<=m;C++){let J=[],z=R-p-(Math.PI-p)*(C/m);U+=c*p/m;let Y=Math.cos(z),me=Math.sin(z),xe=Y*c;for(I=0;I<=a;I++){let Be=I/a,ae=Be*d+h,ve=Math.sin(ae),ne=Math.cos(ae);D.x=xe*ve,D.y=-S+me*c,D.z=xe*ne,g.push(D.x,D.y,D.z),y.set(Y*ve,me,Y*ne),v.push(y.x,y.y,y.z),x.push(Be,Mt?U/w:1-U/w),J.push(T),T++}E.push(J)}for(I=0;I{mr();Ge();yi();tn();q.CreateCapsule=(n,e,t)=>KP(n,e,t);Ce.CreateCapsule=HW});var qi,XW=M(()=>{Pt();Ge();qi=class n{constructor(e=0,t=0){this.x=e,this.y=t,e!==Math.floor(e)&&(e=Math.floor(e),ee.Warn("x is not an integer, floor(x) used")),t!==Math.floor(t)&&(t=Math.floor(t),ee.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),ee.Warn("m not an integer only floor(m) used")),t!==Math.floor(t)&&(t=Math.floor(t),ee.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),ee.Warn("m is not an integer, floor(m) used")),t!==Math.floor(t)&&(t=Math.floor(t),ee.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 Hm,Gg,zm,jP=M(()=>{Ge();On();Dn();XW();Hm=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 Gg("icosahedron","Regular",[[0,gr,-1],[-gr,1,0],[-1,0,-gr],[1,0,-gr],[gr,1,0],[0,gr,1],[-1,0,gr],[-gr,-1,0],[0,-gr,-1],[gr,-1,0],[1,0,gr],[0,-gr,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=nA(i,r));let a=i/s,o=r/s,l,c,f,h,d,u=qi.Zero(),m=new qi(i,r),p=new qi(-r,i+r),_=qi.Zero(),g=qi.Zero(),v=qi.Zero(),x=[],T,E,S,R,I=[],C=this.vertByDist,y=(D,O,V,N)=>{T=D+"|"+V,E=O+"|"+N,T in t||E in t?T in t&&!(E in t)?t[E]=t[T]:E in t&&!(T in t)&&(t[T]=t[E]):(t[T]=e,t[E]=e,e++),C[V][0]>2?I[t[T]]=[-C[V][0],C[V][1],t[T]]:I[t[T]]=[x[C[V][0]],C[V][1],t[T]]};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],S=u.x+"|"+u.y,T=D+"|"+S,T in t||(t[T]=f,I[f]=[x[C[S][0]],C[S][1]]),S=m.x+"|"+m.y,T=D+"|"+S,T in t||(t[T]=h,I[h]=[x[C[S][0]],C[S][1]]),S=p.x+"|"+p.y,T=D+"|"+S,T in t||(t[T]=d,I[d]=[x[C[S][0]],C[S][1]]),l=this.IDATA.edgematch[D][0],c=this.IDATA.edgematch[D][1],c==="B")for(let O=1;O2?I[t[T]]=[-C[S][0],C[S][1],t[T]]:I[t[T]]=[x[C[S][0]],C[S][1],t[T]])}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=nA(e,t),S=e/E,R=t/E;for(let C=1;CE.x-S.x),i.sort((E,S)=>E.y-S.y);let o=new Array(e+t+1),l=new Array(e+t+1);for(let E=0;E{let R=E.clone();return S==="A"&&R.rotateNeg120(e,t),S==="B"&&R.rotate120(e,t),R.x<0?R.y:R.x+R.y},u=[],m=[],p=[],_=[],g={},v=[],x=-1,T=-1;for(let E=0;EE[2]-S[2]),v.sort((E,S)=>E[3]-S[3]),v.sort((E,S)=>E[1]-S[1]),v.sort((E,S)=>E[0]-S[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 Gg("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,ee.Warn("n > m therefore m and n swapped")}let s=new Hm;s.build(i,r);let o={custom:zm.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 Vg(n,o,t)}var KW=M(()=>{zP();Pt();jP()});var kg,jW=M(()=>{Ge();ki();yi();zt();Pt();q._GoldbergMeshParser=(n,e)=>kg.Parse(n,e);kg=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&&(ee.Warn("Maximum number of unshared faces used"),e=this.goldbergData.nbUnsharedFaces-1),this.goldbergData.nbUnsharedFaces+e):(e>11&&(ee.Warn("Last pole used"),e=11),t>this.goldbergData.nbFacesAtPole-1&&(ee.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 Noe(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||Ce.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,ee.Warn("n > m therefore m and n swapped")}let c=new Hm;c.build(o,l);let f=zm.BuildGeodesicData(c),h=f.toGoldbergPolyhedronData(),d=new kg(n,t);e.sideOrientation=q._GetDefaultSideOrientation(e.sideOrientation),d._originalBuilderSideOrientation=e.sideOrientation,Noe(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();yi();mr();Pt();jP();jW();tn()});function woe(n,e,t,i,r,s){let a=s.glyphs[n]||s.glyphs["?"];if(!a)return null;let o=new qP(r);if(a.o){let l=a.o.split(" ");for(let c=0,f=l.length;c{Bh();Ge();yi();Zh();UP();qP=class{constructor(e){this._paths=[],this._tempPaths=[],this._holes=[],this._resolution=e}moveTo(e,t){this._currentPath=new Ju(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 is,ZP=M(()=>{Rg();Ak();EP();yk();Lk();Ok();wk();Bk();PW();UP();NW();wW();BW();SP();gP();UW();zP();kW();WW();zW();KW();ZW();$W();is={CreateBox:vP,CreateTiledBox:Ck,CreateSphere:AP,CreateDisc:dP,CreateIcoSphere:XP,CreateRibbon:So,CreateCylinder:xP,CreateTorus:RP,CreateTorusKnot:bP,CreateLineSystem:NP,CreateLines:wP,CreateDashedLines:FP,ExtrudeShape:VP,ExtrudeShapeCustom:GP,CreateLathe:kP,CreateTiledPlane:Ik,CreatePlane:WP,CreateGround:mP,CreateTiledGround:pP,CreateGroundFromHeightMap:_P,CreatePolygon:px,ExtrudePolygon:Ug,CreateTube:HP,CreatePolyhedron:Vg,CreateGeodesic:YW,CreateGoldberg:qW,CreateDecal:YP,CreateCapsule:KP,CreateText:QW}});var Ns,gx=M(()=>{Ns=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 br,Na=M(()=>{br=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{Na()});function Roe(){Aoe.length=0,xoe=!1,Ee.OnEventObservable.remove(WW),WW=null}var Toe,Ym,Aoe,xoe,WW,HW=M(()=>{Vn();Oi();VT();G();Toe=new RegExp("^([gimus]+)!"),Ym=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 Xm(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 vx=M(()=>{Na()});function Goe(){Uoe.length=0,Voe=!1,Ee.OnEventObservable.remove(JW),JW=null}var Boe,Ym,Uoe,Voe,JW,eH=M(()=>{Gn();Ni();zT();G();Boe=new RegExp("^([gimus]+)!"),Ym=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: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",G_(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 p=Toe.exec(c);p&&p.length>=2&&(h=p[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 p=f;for(let _=0;_{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:A.GetShadersRepository(d),includesShadersStore:A.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",k_(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 p=Boe.exec(c);p&&p.length>=2&&(h=p[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 p=f;for(let _=0;_{Roe()});Aoe=[],xoe=!1,WW=null});var Wr,Ff=M(()=>{Gt();Vt();HW();Ar();zi();Wr=class{isCompatible(e){return e===0}_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 Ym(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){it.Clone(()=>e,this)}serialize(){return it.Serialize(this)}parse(e,t,i){it.Parse(()=>this,e,t,i)}};P([F()],Wr.prototype,"name",void 0);P([F()],Wr.prototype,"priority",void 0);P([F()],Wr.prototype,"resolveIncludes",void 0);P([F()],Wr.prototype,"registerForExtraEvents",void 0);Ft("BABYLON.MaterialPluginBase",Wr)});var YP,wa,KP=M(()=>{Gt();Vn();Vt();Da();Na();Ff();Bn();YP=class extends Rr{constructor(){super(...arguments),this.DETAIL=!1,this.DETAILDIRECTUV=0,this.DETAIL_NORMALBLENDMETHOD=0}},wa=class extends Wr{_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"DetailMap",140,new YP,t),this._texture=null,this.diffuseBlendLevel=1,this.roughnessBlendLevel=1,this.bumpLevel=1,this._normalBlendMethod=Ee.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&&ce.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&&ce.DetailTextureEnabled&&this._isEnabled?(ni(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&&ce.DetailTextureEnabled&&(e.updateFloat4("vDetailInfos",this._texture.coordinatesIndex,this.diffuseBlendLevel,this.bumpLevel,this.roughnessBlendLevel),si(this._texture,e,"detail")),t.texturesEnabled&&this._texture&&ce.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"),le("_markAllSubMeshesAsTexturesDirty")],wa.prototype,"texture",void 0);P([F()],wa.prototype,"diffuseBlendLevel",void 0);P([F()],wa.prototype,"roughnessBlendLevel",void 0);P([F()],wa.prototype,"bumpLevel",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],wa.prototype,"normalBlendMethod",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],wa.prototype,"isEnabled",void 0)});var zW,Hn,mx=M(()=>{Ge();(function(n){n[n.Zero=0]="Zero",n[n.One=1]="One",n[n.MaxViewZ=2]="MaxViewZ",n[n.NoClear=3]="NoClear"})(zW||(zW={}));Hn=class n{static CreateConfiguration(e){return n._Configurations[e]={defines:{},previousWorldMatrices:{},previousViewProjection:j.Zero(),currentViewProjection:j.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 jm(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 _x=M(()=>{});function qm(n){return class extends n{constructor(...e){super(...e),nU()(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 gx=M(()=>{Vt()});var XW,boe,td=M(()=>{G();XW="sceneUboDeclaration",boe=`struct Scene {viewProjection : mat4x4, +`+h)}}return r}}};Ym._MaterialPluginClassToMainDefine={};Ym._MaterialPluginCounter=0;Oe.OnEnginesDisposedObservable.add(()=>{Goe()});Uoe=[],Voe=!1,JW=null});var Wr,Ff=M(()=>{Gt();Vt();eH();xr();zi();Wr=class{isCompatible(e){return e===0}_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 Ym(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){it.Clone(()=>e,this)}serialize(){return it.Serialize(this)}parse(e,t,i){it.Parse(()=>this,e,t,i)}};P([F()],Wr.prototype,"name",void 0);P([F()],Wr.prototype,"priority",void 0);P([F()],Wr.prototype,"resolveIncludes",void 0);P([F()],Wr.prototype,"registerForExtraEvents",void 0);Ft("BABYLON.MaterialPluginBase",Wr)});var QP,wa,$P=M(()=>{Gt();Gn();Vt();Da();Na();Ff();Vn();QP=class extends br{constructor(){super(...arguments),this.DETAIL=!1,this.DETAILDIRECTUV=0,this.DETAIL_NORMALBLENDMETHOD=0}},wa=class extends Wr{_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"DetailMap",140,new QP,t),this._texture=null,this.diffuseBlendLevel=1,this.roughnessBlendLevel=1,this.bumpLevel=1,this._normalBlendMethod=Ee.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&&ce.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&&ce.DetailTextureEnabled&&this._isEnabled?(ni(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&&ce.DetailTextureEnabled&&(e.updateFloat4("vDetailInfos",this._texture.coordinatesIndex,this.diffuseBlendLevel,this.bumpLevel,this.roughnessBlendLevel),si(this._texture,e,"detail")),t.texturesEnabled&&this._texture&&ce.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([Ut("detailTexture"),le("_markAllSubMeshesAsTexturesDirty")],wa.prototype,"texture",void 0);P([F()],wa.prototype,"diffuseBlendLevel",void 0);P([F()],wa.prototype,"roughnessBlendLevel",void 0);P([F()],wa.prototype,"bumpLevel",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],wa.prototype,"normalBlendMethod",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],wa.prototype,"isEnabled",void 0)});var tH,zn,Ex=M(()=>{Ge();(function(n){n[n.Zero=0]="Zero",n[n.One=1]="One",n[n.MaxViewZ=2]="MaxViewZ",n[n.NoClear=3]="NoClear"})(tH||(tH={}));zn=class n{static CreateConfiguration(e){return n._Configurations[e]={defines:{},previousWorldMatrices:{},previousViewProjection:j.Zero(),currentViewProjection:j.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 jm(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 Tx=M(()=>{});function qm(n){return class extends n{constructor(...e){super(...e),pB()(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 Ax=M(()=>{Vt()});var iH,koe,td=M(()=>{G();iH="sceneUboDeclaration",koe=`struct Scene {viewProjection : mat4x4, #ifdef MULTIVIEW viewProjectionR : mat4x4, #endif @@ -5151,17 +5151,17 @@ vEyePosition : vec4, inverseProjection : mat4x4,}; #define SCENE_UBO var scene : Scene; -`;T.IncludesShadersStoreWGSL[XW]||(T.IncludesShadersStoreWGSL[XW]=boe)});var YW,Ioe,kg=M(()=>{G();YW="meshUboDeclaration",Ioe=`struct Mesh {world : mat4x4, +`;A.IncludesShadersStoreWGSL[iH]||(A.IncludesShadersStoreWGSL[iH]=koe)});var rH,Woe,Wg=M(()=>{G();rH="meshUboDeclaration",Woe=`struct Mesh {world : mat4x4, visibility : f32,};var mesh : Mesh; #define WORLD_UBO -`;T.IncludesShadersStoreWGSL[YW]||(T.IncludesShadersStoreWGSL[YW]=Ioe)});var KW,Moe,jP=M(()=>{G();td();kg();KW="defaultUboDeclaration",Moe=`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; +`;A.IncludesShadersStoreWGSL[rH]||(A.IncludesShadersStoreWGSL[rH]=Woe)});var nH,Hoe,JP=M(()=>{G();td();Wg();nH="defaultUboDeclaration",Hoe=`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 -`;T.IncludesShadersStoreWGSL[KW]||(T.IncludesShadersStoreWGSL[KW]=Moe)});var jW,Coe,vx=M(()=>{G();jW="uvAttributeDeclaration",Coe=`#if defined(UV{X}) && !defined(USE_VERTEX_PULLING) +`;A.IncludesShadersStoreWGSL[nH]||(A.IncludesShadersStoreWGSL[nH]=Hoe)});var sH,zoe,xx=M(()=>{G();sH="uvAttributeDeclaration",zoe=`#if defined(UV{X}) && !defined(USE_VERTEX_PULLING) attribute uv{X}: vec2f; #endif -`;T.IncludesShadersStoreWGSL[jW]||(T.IncludesShadersStoreWGSL[jW]=Coe)});var qW,yoe,Ex=M(()=>{G();qW="prePassVertexDeclaration",yoe=`#ifdef PREPASS +`;A.IncludesShadersStoreWGSL[sH]||(A.IncludesShadersStoreWGSL[sH]=zoe)});var aH,Xoe,Rx=M(()=>{G();aH="prePassVertexDeclaration",Xoe=`#ifdef PREPASS #ifdef PREPASS_LOCAL_POSITION varying vPosition : vec3f; #endif @@ -5175,18 +5175,18 @@ varying vNormViewDepth: f32; uniform previousViewProjection: mat4x4f;varying vCurrentPosition: vec4f;varying vPreviousPosition: vec4f; #endif #endif -`;T.IncludesShadersStoreWGSL[qW]||(T.IncludesShadersStoreWGSL[qW]=yoe)});var ZW,Poe,Zm=M(()=>{G();ZW="mainUVVaryingDeclaration",Poe=`#ifdef MAINUV{X} +`;A.IncludesShadersStoreWGSL[aH]||(A.IncludesShadersStoreWGSL[aH]=Xoe)});var oH,Yoe,Zm=M(()=>{G();oH="mainUVVaryingDeclaration",Yoe=`#ifdef MAINUV{X} varying vMainUV{X}: vec2f; #endif -`;T.IncludesShadersStoreWGSL[ZW]||(T.IncludesShadersStoreWGSL[ZW]=Poe)});var QW,Loe,Sx=M(()=>{G();QW="samplerVertexDeclaration",Loe=`#if defined(_DEFINENAME_) && _DEFINENAME_DIRECTUV==0 +`;A.IncludesShadersStoreWGSL[oH]||(A.IncludesShadersStoreWGSL[oH]=Yoe)});var lH,Koe,bx=M(()=>{G();lH="samplerVertexDeclaration",Koe=`#if defined(_DEFINENAME_) && _DEFINENAME_DIRECTUV==0 varying v_VARYINGNAME_UV: vec2f; #endif -`;T.IncludesShadersStoreWGSL[QW]||(T.IncludesShadersStoreWGSL[QW]=Loe)});var $W,Doe,qP=M(()=>{G();$W="bumpVertexDeclaration",Doe=`#if defined(BUMP) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) +`;A.IncludesShadersStoreWGSL[lH]||(A.IncludesShadersStoreWGSL[lH]=Koe)});var cH,joe,eL=M(()=>{G();cH="bumpVertexDeclaration",joe=`#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 -`;T.IncludesShadersStoreWGSL[$W]||(T.IncludesShadersStoreWGSL[$W]=Doe)});var JW,Ooe,eH=M(()=>{G();JW="lightVxFragmentDeclaration",Ooe=`#ifdef LIGHT{X} +`;A.IncludesShadersStoreWGSL[cH]||(A.IncludesShadersStoreWGSL[cH]=joe)});var fH,qoe,hH=M(()=>{G();fH="lightVxFragmentDeclaration",qoe=`#ifdef LIGHT{X} uniform vLightData{X}: vec4f;uniform vLightDiffuse{X}: vec4f; #ifdef SPECULARTERM uniform vLightSpecular{X}: vec4f; @@ -5213,7 +5213,7 @@ uniform vLightGround{X}: vec3f; uniform vLightWidth{X}: vec4f;uniform vLightHeight{X}: vec4f; #endif #endif -`;T.IncludesShadersStoreWGSL[JW]||(T.IncludesShadersStoreWGSL[JW]=Ooe)});var tH,Noe,Tx=M(()=>{G();tH="lightVxUboDeclaration",Noe=`#ifdef LIGHT{X} +`;A.IncludesShadersStoreWGSL[fH]||(A.IncludesShadersStoreWGSL[fH]=qoe)});var dH,Zoe,Ix=M(()=>{G();dH="lightVxUboDeclaration",Zoe=`#ifdef LIGHT{X} struct Light{X} {vLightData: vec4f, vLightDiffuse: vec4f, @@ -5244,7 +5244,7 @@ varying vPositionFromLight{X}: vec4f;varying vDepthMetric{X}: f32;uniform lightM #endif #endif #endif -`;T.IncludesShadersStoreWGSL[tH]||(T.IncludesShadersStoreWGSL[tH]=Noe)});var iH,woe,Uf=M(()=>{G();iH="morphTargetsVertexGlobalDeclaration",woe=`#ifdef MORPHTARGETS +`;A.IncludesShadersStoreWGSL[dH]||(A.IncludesShadersStoreWGSL[dH]=Zoe)});var uH,Qoe,Bf=M(()=>{G();uH="morphTargetsVertexGlobalDeclaration",Qoe=`#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 @@ -5256,7 +5256,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 -`;T.IncludesShadersStoreWGSL[iH]||(T.IncludesShadersStoreWGSL[iH]=woe)});var rH,Foe,Bf=M(()=>{G();rH="morphTargetsVertexDeclaration",Foe=`#ifdef MORPHTARGETS +`;A.IncludesShadersStoreWGSL[uH]||(A.IncludesShadersStoreWGSL[uH]=Qoe)});var mH,$oe,Uf=M(()=>{G();mH="morphTargetsVertexDeclaration",$oe=`#ifdef MORPHTARGETS #ifndef MORPHTARGETS_TEXTURE #ifdef MORPHTARGETS_POSITION attribute position{X} : vec3; @@ -5280,10 +5280,10 @@ attribute color{X} : vec4; uniform morphTargetCount: f32; #endif #endif -`;T.IncludesShadersStoreWGSL[rH]||(T.IncludesShadersStoreWGSL[rH]=Foe)});var nH,Uoe,id=M(()=>{G();nH="logDepthDeclaration",Uoe=`#ifdef LOGARITHMICDEPTH +`;A.IncludesShadersStoreWGSL[mH]||(A.IncludesShadersStoreWGSL[mH]=$oe)});var pH,Joe,id=M(()=>{G();pH="logDepthDeclaration",Joe=`#ifdef LOGARITHMICDEPTH uniform logarithmicDepthConstant: f32;varying vFragmentDepth: f32; #endif -`;T.IncludesShadersStoreWGSL[nH]||(T.IncludesShadersStoreWGSL[nH]=Uoe)});var sH,Boe,Ax=M(()=>{G();sH="vertexPullingDeclaration",Boe=`#ifdef USE_VERTEX_PULLING +`;A.IncludesShadersStoreWGSL[pH]||(A.IncludesShadersStoreWGSL[pH]=Joe)});var _H,ele,Mx=M(()=>{G();_H="vertexPullingDeclaration",ele=`#ifdef USE_VERTEX_PULLING #ifdef VERTEX_PULLING_USE_INDEX_BUFFER var indices : array; #endif @@ -5461,7 +5461,7 @@ vp_readMatrixWeightExtraValue(offset+cs*3u,dataType,normalized) #endif #endif #endif -`;T.IncludesShadersStoreWGSL[sH]||(T.IncludesShadersStoreWGSL[sH]=Boe)});var aH,Voe,xx=M(()=>{G();aH="vertexPullingVertex",Voe=`#ifdef USE_VERTEX_PULLING +`;A.IncludesShadersStoreWGSL[_H]||(A.IncludesShadersStoreWGSL[_H]=ele)});var gH,tle,Cx=M(()=>{G();gH="vertexPullingVertex",tle=`#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); @@ -5515,12 +5515,12 @@ var vp_matricesIndicesExtra: vec4f=vp_readBoneIndicesExtra(uniforms.vp_matricesI #endif #endif #endif -`;T.IncludesShadersStoreWGSL[aH]||(T.IncludesShadersStoreWGSL[aH]=Voe)});var oH,Goe,Vf=M(()=>{G();oH="morphTargetsVertexGlobal",Goe=`#ifdef MORPHTARGETS +`;A.IncludesShadersStoreWGSL[gH]||(A.IncludesShadersStoreWGSL[gH]=tle)});var vH,ile,Vf=M(()=>{G();vH="morphTargetsVertexGlobal",ile=`#ifdef MORPHTARGETS #ifdef MORPHTARGETS_TEXTURE var vertexID : f32; #endif #endif -`;T.IncludesShadersStoreWGSL[oH]||(T.IncludesShadersStoreWGSL[oH]=Goe)});var lH,koe,Gf=M(()=>{G();lH="morphTargetsVertex",koe=`#ifdef MORPHTARGETS +`;A.IncludesShadersStoreWGSL[vH]||(A.IncludesShadersStoreWGSL[vH]=ile)});var EH,rle,Gf=M(()=>{G();EH="morphTargetsVertex",rle=`#ifdef MORPHTARGETS #ifdef MORPHTARGETS_TEXTURE #if {X}==0 for (var i=0; i=uniforms.morphTargetCount) {break;} @@ -5630,7 +5630,7 @@ colorUpdated=colorUpdated+(vertexInputs.color{X}-vertexInputs.color)*uniforms.mo #endif #endif #endif -`;T.IncludesShadersStoreWGSL[lH]||(T.IncludesShadersStoreWGSL[lH]=koe)});var cH,Woe,Rx=M(()=>{G();cH="prePassVertex",Woe=`#ifdef PREPASS_DEPTH +`;A.IncludesShadersStoreWGSL[EH]||(A.IncludesShadersStoreWGSL[EH]=rle)});var SH,nle,yx=M(()=>{G();SH="prePassVertex",nle=`#ifdef PREPASS_DEPTH vertexOutputs.vViewPos=(scene.view*worldPos).rgb; #endif #ifdef PREPASS_NORMALIZED_VIEW_DEPTH @@ -5669,7 +5669,7 @@ vertexOutputs.vPreviousPosition=uniforms.previousViewProjection*finalPreviousWor vertexOutputs.vPreviousPosition=uniforms.previousViewProjection*finalPreviousWorld* vec4f(positionUpdated,1.0); #endif #endif -`;T.IncludesShadersStoreWGSL[cH]||(T.IncludesShadersStoreWGSL[cH]=Woe)});var fH,Hoe,bx=M(()=>{G();fH="uvVariableDeclaration",Hoe=`#ifdef MAINUV{X} +`;A.IncludesShadersStoreWGSL[SH]||(A.IncludesShadersStoreWGSL[SH]=nle)});var TH,sle,Px=M(()=>{G();TH="uvVariableDeclaration",sle=`#ifdef MAINUV{X} #if !defined(UV{X}) var uv{X}: vec2f=vec2f(0.,0.); #elif defined(USE_VERTEX_PULLING) @@ -5679,7 +5679,7 @@ var uv{X}: vec2f=vertexInputs.uv{X}; #endif vertexOutputs.vMainUV{X}=uv{X}; #endif -`;T.IncludesShadersStoreWGSL[fH]||(T.IncludesShadersStoreWGSL[fH]=Hoe)});var hH,zoe,Ix=M(()=>{G();hH="samplerVertexImplementation",zoe=`#if defined(_DEFINENAME_) && _DEFINENAME_DIRECTUV==0 +`;A.IncludesShadersStoreWGSL[TH]||(A.IncludesShadersStoreWGSL[TH]=sle)});var AH,ale,Lx=M(()=>{G();AH="samplerVertexImplementation",ale=`#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 @@ -5703,12 +5703,12 @@ else if (uniforms.v_INFONAME_==5.) {vertexOutputs.v_VARYINGNAME_UV= (uniforms._MATRIXNAME_Matrix* vec4f(vertexInputs.uv6,1.0,0.0)).xy;} #endif #endif -`;T.IncludesShadersStoreWGSL[hH]||(T.IncludesShadersStoreWGSL[hH]=zoe)});var dH,Xoe,Mx=M(()=>{G();dH="bumpVertex",Xoe=`#if defined(BUMP) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) +`;A.IncludesShadersStoreWGSL[AH]||(A.IncludesShadersStoreWGSL[AH]=ale)});var xH,ole,Dx=M(()=>{G();xH="bumpVertex",ole=`#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 -`;T.IncludesShadersStoreWGSL[dH]||(T.IncludesShadersStoreWGSL[dH]=Xoe)});var uH,Yoe,Cx=M(()=>{G();uH="shadowsVertex",Yoe=`#ifdef SHADOWS +`;A.IncludesShadersStoreWGSL[xH]||(A.IncludesShadersStoreWGSL[xH]=ole)});var RH,lle,Ox=M(()=>{G();RH="shadowsVertex",lle=`#ifdef SHADOWS #if defined(SHADOWCSM{X}) #ifdef SCENE_UBO vertexOutputs.vPositionFromCamera{X}=scene.view*worldPos; @@ -5756,10 +5756,10 @@ vertexOutputs.vDepthMetric{X}=(vertexOutputs.vPositionFromLight{X}.z+light{X}.de #endif #endif #endif -`;T.IncludesShadersStoreWGSL[uH]||(T.IncludesShadersStoreWGSL[uH]=Yoe)});var mH,Koe,yx=M(()=>{G();mH="logDepthVertex",Koe=`#ifdef LOGARITHMICDEPTH +`;A.IncludesShadersStoreWGSL[RH]||(A.IncludesShadersStoreWGSL[RH]=lle)});var bH,cle,Nx=M(()=>{G();bH="logDepthVertex",cle=`#ifdef LOGARITHMICDEPTH vertexOutputs.vFragmentDepth=1.0+vertexOutputs.position.w;vertexOutputs.position.z=log2(max(0.000001,vertexOutputs.vFragmentDepth))*uniforms.logarithmicDepthConstant; #endif -`;T.IncludesShadersStoreWGSL[mH]||(T.IncludesShadersStoreWGSL[mH]=Koe)});var _H={};tt(_H,{defaultVertexShaderWGSL:()=>joe});var ZP,pH,joe,gH=M(()=>{G();jP();vx();ya();nc();sc();Nf();Ex();Zm();Sx();qP();ac();Ig();eH();Tx();Uf();Bf();id();Ax();xx();Vf();Gf();oc();lc();cc();Rx();bx();Ix();Mx();fc();Mg();Cx();Cg();yx();ZP="defaultVertexShader",pH=`#include +`;A.IncludesShadersStoreWGSL[bH]||(A.IncludesShadersStoreWGSL[bH]=cle)});var MH={};tt(MH,{defaultVertexShaderWGSL:()=>fle});var tL,IH,fle,CH=M(()=>{G();JP();xx();ya();nc();sc();Nf();Rx();Zm();bx();eL();ac();Mg();hH();Ix();Bf();Uf();id();Mx();Cx();Vf();Gf();oc();lc();cc();yx();Px();Lx();Dx();fc();Cg();Ox();yg();Nx();tL="defaultVertexShader",IH=`#include #define CUSTOM_VERTEX_BEGIN #ifndef USE_VERTEX_PULLING attribute position: vec3f; @@ -5940,7 +5940,7 @@ vertexOutputs.vMainUV2=uv2Updated; #include #define CUSTOM_VERTEX_MAIN_END } -`;T.ShadersStoreWGSL[ZP]||(T.ShadersStoreWGSL[ZP]=pH);joe={name:ZP,shader:pH}});var vH,qoe,Px=M(()=>{G();vH="prePassDeclaration",qoe=`#ifdef PREPASS +`;A.ShadersStoreWGSL[tL]||(A.ShadersStoreWGSL[tL]=IH);fle={name:tL,shader:IH}});var yH,hle,wx=M(()=>{G();yH="prePassDeclaration",hle=`#ifdef PREPASS #ifdef PREPASS_LOCAL_POSITION varying vPosition : vec3f; #endif @@ -5954,11 +5954,11 @@ varying vNormViewDepth: f32; varying vCurrentPosition: vec4f;varying vPreviousPosition: vec4f; #endif #endif -`;T.IncludesShadersStoreWGSL[vH]||(T.IncludesShadersStoreWGSL[vH]=qoe)});var EH,Zoe,Lx=M(()=>{G();EH="oitDeclaration",Zoe=`#ifdef ORDER_INDEPENDENT_TRANSPARENCY +`;A.IncludesShadersStoreWGSL[yH]||(A.IncludesShadersStoreWGSL[yH]=hle)});var PH,dle,Fx=M(()=>{G();PH="oitDeclaration",dle=`#ifdef ORDER_INDEPENDENT_TRANSPARENCY #define MAX_DEPTH 99999.0 var oitDepthSamplerSampler: sampler;var oitDepthSampler: texture_2d;var oitFrontColorSamplerSampler: sampler;var oitFrontColorSampler: texture_2d; #endif -`;T.IncludesShadersStoreWGSL[EH]||(T.IncludesShadersStoreWGSL[EH]=Zoe)});var SH,Qoe,Dx=M(()=>{G();SH="lightUboDeclaration",Qoe=`#ifdef LIGHT{X} +`;A.IncludesShadersStoreWGSL[PH]||(A.IncludesShadersStoreWGSL[PH]=dle)});var LH,ule,Bx=M(()=>{G();LH="lightUboDeclaration",ule=`#ifdef LIGHT{X} struct Light{X} {vLightData: vec4f, vLightDiffuse: vec4f, @@ -6035,7 +6035,7 @@ uniform lightMatrix{X}: mat4x4f; #endif #endif #endif -`;T.IncludesShadersStoreWGSL[SH]||(T.IncludesShadersStoreWGSL[SH]=Qoe)});var TH,$oe,QP=M(()=>{G();TH="ltcHelperFunctions",$oe=`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;} +`;A.IncludesShadersStoreWGSL[LH]||(A.IncludesShadersStoreWGSL[LH]=ule)});var DH,mle,iL=M(()=>{G();DH="ltcHelperFunctions",mle=`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;} @@ -6079,7 +6079,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;} -`;T.IncludesShadersStoreWGSL[TH]||(T.IncludesShadersStoreWGSL[TH]=$oe)});var AH,Joe,$P=M(()=>{G();AH="clusteredLightingFunctions",Joe=`struct ClusteredLight {vLightData: vec4f, +`;A.IncludesShadersStoreWGSL[DH]||(A.IncludesShadersStoreWGSL[DH]=mle)});var OH,ple,rL=M(()=>{G();OH="clusteredLightingFunctions",ple=`struct ClusteredLight {vLightData: vec4f, vLightDiffuse: vec4f, vLightSpecular: vec4f, vLightDirection: vec4f, @@ -6092,7 +6092,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);} -`;T.IncludesShadersStoreWGSL[AH]||(T.IncludesShadersStoreWGSL[AH]=Joe)});var xH,ele,RH=M(()=>{G();QP();$P();xH="lightsFragmentFunctions",ele=`struct lightingInfo +`;A.IncludesShadersStoreWGSL[OH]||(A.IncludesShadersStoreWGSL[OH]=ple)});var NH,_le,wH=M(()=>{G();iL();rL();NH="lightsFragmentFunctions",_le=`struct lightingInfo {diffuse: vec3f, #ifdef SPECULARTERM specular: vec3f, @@ -6189,7 +6189,7 @@ result.specular+=info.specular; batchOffset+=CLUSTLIGHT_BATCH;} return result;} #endif -`;T.IncludesShadersStoreWGSL[xH]||(T.IncludesShadersStoreWGSL[xH]=ele)});var bH,tle,Ox=M(()=>{G();bH="shadowsFragmentFunctions",tle=`#ifdef SHADOWS +`;A.IncludesShadersStoreWGSL[NH]||(A.IncludesShadersStoreWGSL[NH]=_le)});var FH,gle,Ux=M(()=>{G();FH="shadowsFragmentFunctions",gle=`#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);} @@ -6481,7 +6481,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 -`;T.IncludesShadersStoreWGSL[bH]||(T.IncludesShadersStoreWGSL[bH]=tle)});var IH,ile,rd=M(()=>{G();IH="samplerFragmentDeclaration",ile=`#ifdef _DEFINENAME_ +`;A.IncludesShadersStoreWGSL[FH]||(A.IncludesShadersStoreWGSL[FH]=gle)});var BH,vle,rd=M(()=>{G();BH="samplerFragmentDeclaration",vle=`#ifdef _DEFINENAME_ #if _DEFINENAME_DIRECTUV==1 #define v_VARYINGNAME_UV vMainUV1 #elif _DEFINENAME_DIRECTUV==2 @@ -6499,11 +6499,11 @@ varying v_VARYINGNAME_UV: vec2f; #endif var _SAMPLERNAME_SamplerSampler: sampler;var _SAMPLERNAME_Sampler: texture_2d; #endif -`;T.IncludesShadersStoreWGSL[IH]||(T.IncludesShadersStoreWGSL[IH]=ile)});var MH,rle,CH=M(()=>{G();MH="fresnelFunction",rle=`#ifdef FRESNEL +`;A.IncludesShadersStoreWGSL[BH]||(A.IncludesShadersStoreWGSL[BH]=vle)});var UH,Ele,VH=M(()=>{G();UH="fresnelFunction",Ele=`#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 -`;T.IncludesShadersStoreWGSL[MH]||(T.IncludesShadersStoreWGSL[MH]=rle)});var yH,nle,Wg=M(()=>{G();yH="reflectionFunction",nle=`fn computeFixedEquirectangularCoords(worldPos: vec4f,worldNormal: vec3f,direction: vec3f)->vec3f +`;A.IncludesShadersStoreWGSL[UH]||(A.IncludesShadersStoreWGSL[UH]=Ele)});var GH,Sle,Hg=M(()=>{G();GH="reflectionFunction",Sle=`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); } @@ -6567,7 +6567,7 @@ return vec3f(0,0,0); #endif } #endif -`;T.IncludesShadersStoreWGSL[yH]||(T.IncludesShadersStoreWGSL[yH]=nle)});var PH,sle,Nx=M(()=>{G();PH="imageProcessingDeclaration",sle=`#ifdef EXPOSURE +`;A.IncludesShadersStoreWGSL[GH]||(A.IncludesShadersStoreWGSL[GH]=Sle)});var kH,Tle,Vx=M(()=>{G();kH="imageProcessingDeclaration",Tle=`#ifdef EXPOSURE uniform exposureLinear: f32; #endif #ifdef CONTRAST @@ -6593,7 +6593,7 @@ uniform colorTransformSettings: vec4f; #ifdef DITHER uniform ditherIntensity: f32; #endif -`;T.IncludesShadersStoreWGSL[PH]||(T.IncludesShadersStoreWGSL[PH]=sle)});var LH,ale,wx=M(()=>{G();LH="imageProcessingFunctions",ale=`#if TONEMAPPING==3 +`;A.IncludesShadersStoreWGSL[kH]||(A.IncludesShadersStoreWGSL[kH]=Tle)});var WH,Ale,Gx=M(()=>{G();WH="imageProcessingFunctions",Ale=`#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{G();DH="bumpFragmentMainFunctions",ole=`#if defined(BUMP) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) || defined(DETAIL) +return vec4f(rgb,result.a);}`;A.IncludesShadersStoreWGSL[WH]||(A.IncludesShadersStoreWGSL[WH]=Ale)});var HH,xle,kx=M(()=>{G();HH="bumpFragmentMainFunctions",xle=`#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 @@ -6695,7 +6695,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 -`;T.IncludesShadersStoreWGSL[DH]||(T.IncludesShadersStoreWGSL[DH]=ole)});var OH,lle,Ux=M(()=>{G();rd();OH="bumpFragmentFunctions",lle=`#if defined(BUMP) +`;A.IncludesShadersStoreWGSL[HH]||(A.IncludesShadersStoreWGSL[HH]=xle)});var zH,Rle,Wx=M(()=>{G();rd();zH="bumpFragmentFunctions",Rle=`#if defined(BUMP) #include(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump,_SAMPLERNAME_,bump) #endif #if defined(DETAIL) @@ -6725,7 +6725,7 @@ return -texCoordOffset; #endif } #endif -`;T.IncludesShadersStoreWGSL[OH]||(T.IncludesShadersStoreWGSL[OH]=lle)});var NH,cle,Bx=M(()=>{G();NH="bumpFragment",cle=`var uvOffset: vec2f= vec2f(0.0,0.0); +`;A.IncludesShadersStoreWGSL[zH]||(A.IncludesShadersStoreWGSL[zH]=Rle)});var XH,ble,Hx=M(()=>{G();XH="bumpFragment",ble=`var uvOffset: vec2f= vec2f(0.0,0.0); #if defined(BUMP) || defined(PARALLAX) || defined(DETAIL) #ifdef NORMALXYSCALE var normalScale: f32=1.0; @@ -6777,7 +6777,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 -`;T.IncludesShadersStoreWGSL[NH]||(T.IncludesShadersStoreWGSL[NH]=cle)});var wH,fle,JP=M(()=>{G();wH="decalFragment",fle=`#ifdef DECAL +`;A.IncludesShadersStoreWGSL[XH]||(A.IncludesShadersStoreWGSL[XH]=ble)});var YH,Ile,nL=M(()=>{G();YH="decalFragment",Ile=`#ifdef DECAL var decalTempColor=decalColor.rgb;var decalTempAlpha=decalColor.a; #ifdef GAMMADECAL decalTempColor=toLinearSpaceVec3(decalColor.rgb); @@ -6787,13 +6787,13 @@ decalTempAlpha=decalColor.a*decalColor.a; #endif surfaceAlbedo=mix(surfaceAlbedo.rgb,decalTempColor,decalTempAlpha); #endif -`;T.IncludesShadersStoreWGSL[wH]||(T.IncludesShadersStoreWGSL[wH]=fle)});var FH,hle,Vx=M(()=>{G();FH="depthPrePass",hle=`#ifdef DEPTHPREPASS +`;A.IncludesShadersStoreWGSL[YH]||(A.IncludesShadersStoreWGSL[YH]=Ile)});var KH,Mle,zx=M(()=>{G();KH="depthPrePass",Mle=`#ifdef DEPTHPREPASS #if !defined(PREPASS) && !defined(ORDER_INDEPENDENT_TRANSPARENCY) fragmentOutputs.color= vec4f(0.,0.,0.,1.0); #endif return fragmentOutputs; #endif -`;T.IncludesShadersStoreWGSL[FH]||(T.IncludesShadersStoreWGSL[FH]=hle)});var UH,dle,eL=M(()=>{G();UH="lightFragment",dle=`#ifdef LIGHT{X} +`;A.IncludesShadersStoreWGSL[KH]||(A.IncludesShadersStoreWGSL[KH]=Mle)});var jH,Cle,sL=M(()=>{G();jH="lightFragment",Cle=`#ifdef LIGHT{X} #if defined(SHADOWONLY) || defined(LIGHTMAP) && defined(LIGHTMAPEXCLUDED{X}) && defined(LIGHTMAPNOSPECULAR{X}) #else var diffuse{X}: vec4f=light{X}.vLightDiffuse; @@ -7180,10 +7180,10 @@ sheenBase+=info.sheen.rgb*shadow; #endif #endif #endif -`;T.IncludesShadersStoreWGSL[UH]||(T.IncludesShadersStoreWGSL[UH]=dle)});var BH,ule,Gx=M(()=>{G();BH="logDepthFragment",ule=`#ifdef LOGARITHMICDEPTH +`;A.IncludesShadersStoreWGSL[jH]||(A.IncludesShadersStoreWGSL[jH]=Cle)});var qH,yle,Xx=M(()=>{G();qH="logDepthFragment",yle=`#ifdef LOGARITHMICDEPTH fragmentOutputs.fragDepth=log2(fragmentInputs.vFragmentDepth)*uniforms.logarithmicDepthConstant*0.5; #endif -`;T.IncludesShadersStoreWGSL[BH]||(T.IncludesShadersStoreWGSL[BH]=ule)});var VH,mle,kx=M(()=>{G();VH="oitFragment",mle=`#ifdef ORDER_INDEPENDENT_TRANSPARENCY +`;A.IncludesShadersStoreWGSL[qH]||(A.IncludesShadersStoreWGSL[qH]=yle)});var ZH,Ple,Yx=M(()=>{G();ZH="oitFragment",Ple=`#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; @@ -7208,7 +7208,7 @@ if (fragDepth>nearestDepth && fragDepthple});var tL,GH,ple,WH=M(()=>{G();jP();Px();Lx();Zm();ya();Dx();RH();Ox();rd();CH();Wg();Nx();wx();Fx();Ux();hc();id();yg();dc();Bx();JP();Vx();eL();Gx();Pg();kx();tL="defaultPixelShader",GH=`#include +`;A.IncludesShadersStoreWGSL[ZH]||(A.IncludesShadersStoreWGSL[ZH]=Ple)});var $H={};tt($H,{defaultPixelShaderWGSL:()=>Lle});var aL,QH,Lle,JH=M(()=>{G();JP();wx();Fx();Zm();ya();Bx();wH();Ux();rd();VH();Hg();Vx();Gx();kx();Wx();hc();id();Pg();dc();Hx();nL();zx();sL();Xx();Lg();Yx();aL="defaultPixelShader",QH=`#include #include[SCENE_MRT_COUNT] #include #define CUSTOM_FRAGMENT_BEGIN @@ -7574,10 +7574,10 @@ if (fragDepth==nearestDepth) {fragmentOutputs.frontColor=vec4f(fragmentOutputs.f #endif #define CUSTOM_FRAGMENT_MAIN_END } -`;T.ShadersStoreWGSL[tL]||(T.ShadersStoreWGSL[tL]=GH);ple={name:tL,shader:GH}});var HH,_le,Wx=M(()=>{G();HH="decalVertexDeclaration",_le=`#ifdef DECAL +`;A.ShadersStoreWGSL[aL]||(A.ShadersStoreWGSL[aL]=QH);Lle={name:aL,shader:QH}});var ez,Dle,Kx=M(()=>{G();ez="decalVertexDeclaration",Dle=`#ifdef DECAL uniform vec4 vDecalInfos;uniform mat4 decalMatrix; #endif -`;T.IncludesShadersStore[HH]||(T.IncludesShadersStore[HH]=_le)});var zH,gle,XH=M(()=>{G();Wx();zH="defaultVertexDeclaration",gle=`uniform mat4 viewProjection; +`;A.IncludesShadersStore[ez]||(A.IncludesShadersStore[ez]=Dle)});var tz,Ole,iz=M(()=>{G();Kx();tz="defaultVertexDeclaration",Ole=`uniform mat4 viewProjection; #ifdef MULTIVIEW mat4 viewProjectionR; #endif @@ -7615,28 +7615,28 @@ uniform vec4 vDetailInfos;uniform mat4 detailMatrix; uniform vec4 cameraInfo; #include #define ADDITIONAL_VERTEX_DECLARATION -`;T.IncludesShadersStore[zH]||(T.IncludesShadersStore[zH]=gle)});var YH,vle,nd=M(()=>{G();YH="sceneUboDeclaration",vle=`layout(std140,column_major) uniform;uniform Scene {mat4 viewProjection; +`;A.IncludesShadersStore[tz]||(A.IncludesShadersStore[tz]=Ole)});var rz,Nle,nd=M(()=>{G();rz="sceneUboDeclaration",Nle=`layout(std140,column_major) uniform;uniform Scene {mat4 viewProjection; #ifdef MULTIVIEW mat4 viewProjectionR; #endif mat4 view;mat4 projection;vec4 vEyePosition;mat4 inverseProjection;}; -`;T.IncludesShadersStore[YH]||(T.IncludesShadersStore[YH]=vle)});var KH,Ele,Hg=M(()=>{G();KH="meshUboDeclaration",Ele=`#ifdef WEBGL2 +`;A.IncludesShadersStore[rz]||(A.IncludesShadersStore[rz]=Nle)});var nz,wle,zg=M(()=>{G();nz="meshUboDeclaration",wle=`#ifdef WEBGL2 uniform mat4 world;uniform float visibility; #else layout(std140,column_major) uniform;uniform Mesh {mat4 world;float visibility;}; #endif #define WORLD_UBO -`;T.IncludesShadersStore[KH]||(T.IncludesShadersStore[KH]=Ele)});var jH,Sle,iL=M(()=>{G();nd();Hg();jH="defaultUboDeclaration",Sle=`layout(std140,column_major) uniform;uniform Material +`;A.IncludesShadersStore[nz]||(A.IncludesShadersStore[nz]=wle)});var sz,Fle,oL=M(()=>{G();nd();zg();sz="defaultUboDeclaration",Fle=`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 -`;T.IncludesShadersStore[jH]||(T.IncludesShadersStore[jH]=Sle)});var qH,Tle,Hx=M(()=>{G();qH="uvAttributeDeclaration",Tle=`#ifdef UV{X} +`;A.IncludesShadersStore[sz]||(A.IncludesShadersStore[sz]=Fle)});var az,Ble,jx=M(()=>{G();az="uvAttributeDeclaration",Ble=`#ifdef UV{X} attribute vec2 uv{X}; #endif -`;T.IncludesShadersStore[qH]||(T.IncludesShadersStore[qH]=Tle)});var ZH,Ale,zx=M(()=>{G();ZH="prePassVertexDeclaration",Ale=`#ifdef PREPASS +`;A.IncludesShadersStore[az]||(A.IncludesShadersStore[az]=Ble)});var oz,Ule,qx=M(()=>{G();oz="prePassVertexDeclaration",Ule=`#ifdef PREPASS #ifdef PREPASS_LOCAL_POSITION varying vec3 vPosition; #endif @@ -7650,18 +7650,18 @@ varying float vNormViewDepth; uniform mat4 previousViewProjection;varying vec4 vCurrentPosition;varying vec4 vPreviousPosition; #endif #endif -`;T.IncludesShadersStore[ZH]||(T.IncludesShadersStore[ZH]=Ale)});var QH,xle,Qm=M(()=>{G();QH="mainUVVaryingDeclaration",xle=`#ifdef MAINUV{X} +`;A.IncludesShadersStore[oz]||(A.IncludesShadersStore[oz]=Ule)});var lz,Vle,Qm=M(()=>{G();lz="mainUVVaryingDeclaration",Vle=`#ifdef MAINUV{X} varying vec2 vMainUV{X}; #endif -`;T.IncludesShadersStore[QH]||(T.IncludesShadersStore[QH]=xle)});var $H,Rle,Xx=M(()=>{G();$H="samplerVertexDeclaration",Rle=`#if defined(_DEFINENAME_) && _DEFINENAME_DIRECTUV==0 +`;A.IncludesShadersStore[lz]||(A.IncludesShadersStore[lz]=Vle)});var cz,Gle,Zx=M(()=>{G();cz="samplerVertexDeclaration",Gle=`#if defined(_DEFINENAME_) && _DEFINENAME_DIRECTUV==0 varying vec2 v_VARYINGNAME_UV; #endif -`;T.IncludesShadersStore[$H]||(T.IncludesShadersStore[$H]=Rle)});var JH,ble,rL=M(()=>{G();JH="bumpVertexDeclaration",ble=`#if defined(BUMP) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) +`;A.IncludesShadersStore[cz]||(A.IncludesShadersStore[cz]=Gle)});var fz,kle,lL=M(()=>{G();fz="bumpVertexDeclaration",kle=`#if defined(BUMP) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) #if defined(TANGENT) && defined(NORMAL) varying mat3 vTBN; #endif #endif -`;T.IncludesShadersStore[JH]||(T.IncludesShadersStore[JH]=ble)});var ez,Ile,Yx=M(()=>{G();ez="lightVxFragmentDeclaration",Ile=`#ifdef LIGHT{X} +`;A.IncludesShadersStore[fz]||(A.IncludesShadersStore[fz]=kle)});var hz,Wle,Qx=M(()=>{G();hz="lightVxFragmentDeclaration",Wle=`#ifdef LIGHT{X} uniform vec4 vLightData{X};uniform vec4 vLightDiffuse{X}; #ifdef SPECULARTERM uniform vec4 vLightSpecular{X}; @@ -7688,7 +7688,7 @@ uniform vec3 vLightGround{X}; uniform vec4 vLightWidth{X};uniform vec4 vLightHeight{X}; #endif #endif -`;T.IncludesShadersStore[ez]||(T.IncludesShadersStore[ez]=Ile)});var tz,Mle,Kx=M(()=>{G();tz="lightVxUboDeclaration",Mle=`#ifdef LIGHT{X} +`;A.IncludesShadersStore[hz]||(A.IncludesShadersStore[hz]=Wle)});var dz,Hle,$x=M(()=>{G();dz="lightVxUboDeclaration",Hle=`#ifdef LIGHT{X} uniform Light{X} {vec4 vLightData;vec4 vLightDiffuse;vec4 vLightSpecular; #ifdef SPOTLIGHT{X} @@ -7713,7 +7713,7 @@ varying vec4 vPositionFromLight{X};varying float vDepthMetric{X};uniform mat4 li #endif #endif #endif -`;T.IncludesShadersStore[tz]||(T.IncludesShadersStore[tz]=Mle)});var iz,Cle,kf=M(()=>{G();iz="morphTargetsVertexGlobalDeclaration",Cle=`#ifdef MORPHTARGETS +`;A.IncludesShadersStore[dz]||(A.IncludesShadersStore[dz]=Hle)});var uz,zle,kf=M(()=>{G();uz="morphTargetsVertexGlobalDeclaration",zle=`#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) @@ -7734,7 +7734,7 @@ float y=floor(vertexIndex/morphTargetTextureInfo.y);float x=vertexIndex-y*morphT } #endif #endif -`;T.IncludesShadersStore[iz]||(T.IncludesShadersStore[iz]=Cle)});var rz,yle,Wf=M(()=>{G();rz="morphTargetsVertexDeclaration",yle=`#ifdef MORPHTARGETS +`;A.IncludesShadersStore[uz]||(A.IncludesShadersStore[uz]=zle)});var mz,Xle,Wf=M(()=>{G();mz="morphTargetsVertexDeclaration",Xle=`#ifdef MORPHTARGETS #ifndef MORPHTARGETS_TEXTURE #ifdef MORPHTARGETS_POSITION attribute vec3 position{X}; @@ -7758,15 +7758,15 @@ attribute vec4 color{X}; uniform float morphTargetCount; #endif #endif -`;T.IncludesShadersStore[rz]||(T.IncludesShadersStore[rz]=yle)});var nz,Ple,sd=M(()=>{G();nz="logDepthDeclaration",Ple=`#ifdef LOGARITHMICDEPTH +`;A.IncludesShadersStore[mz]||(A.IncludesShadersStore[mz]=Xle)});var pz,Yle,sd=M(()=>{G();pz="logDepthDeclaration",Yle=`#ifdef LOGARITHMICDEPTH uniform float logarithmicDepthConstant;varying float vFragmentDepth; #endif -`;T.IncludesShadersStore[nz]||(T.IncludesShadersStore[nz]=Ple)});var sz,Lle,Hf=M(()=>{G();sz="morphTargetsVertexGlobal",Lle=`#ifdef MORPHTARGETS +`;A.IncludesShadersStore[pz]||(A.IncludesShadersStore[pz]=Yle)});var _z,Kle,Hf=M(()=>{G();_z="morphTargetsVertexGlobal",Kle=`#ifdef MORPHTARGETS #ifdef MORPHTARGETS_TEXTURE float vertexID; #endif #endif -`;T.IncludesShadersStore[sz]||(T.IncludesShadersStore[sz]=Lle)});var az,Dle,zf=M(()=>{G();az="morphTargetsVertex",Dle=`#ifdef MORPHTARGETS +`;A.IncludesShadersStore[_z]||(A.IncludesShadersStore[_z]=Kle)});var gz,jle,zf=M(()=>{G();gz="morphTargetsVertex",jle=`#ifdef MORPHTARGETS #ifdef MORPHTARGETS_TEXTURE #if {X}==0 for (int i=0; i=morphTargetCount) break;vertexID=float(gl_VertexID)*morphTargetTextureInfo.x; @@ -7826,7 +7826,7 @@ colorUpdated+=(color{X}-color)*morphTargetInfluences[{X}]; #endif #endif #endif -`;T.IncludesShadersStore[az]||(T.IncludesShadersStore[az]=Dle)});var oz,Ole,jx=M(()=>{G();oz="prePassVertex",Ole=`#ifdef PREPASS_DEPTH +`;A.IncludesShadersStore[gz]||(A.IncludesShadersStore[gz]=jle)});var vz,qle,Jx=M(()=>{G();vz="prePassVertex",qle=`#ifdef PREPASS_DEPTH vViewPos=(view*worldPos).rgb; #endif #ifdef PREPASS_NORMALIZED_VIEW_DEPTH @@ -7865,13 +7865,13 @@ vPreviousPosition=previousViewProjection*finalPreviousWorld*previousInfluence*ve vPreviousPosition=previousViewProjection*finalPreviousWorld*vec4(positionUpdated,1.0); #endif #endif -`;T.IncludesShadersStore[oz]||(T.IncludesShadersStore[oz]=Ole)});var lz,Nle,qx=M(()=>{G();lz="uvVariableDeclaration",Nle=`#if !defined(UV{X}) && defined(MAINUV{X}) +`;A.IncludesShadersStore[vz]||(A.IncludesShadersStore[vz]=qle)});var Ez,Zle,eR=M(()=>{G();Ez="uvVariableDeclaration",Zle=`#if !defined(UV{X}) && defined(MAINUV{X}) vec2 uv{X}=vec2(0.,0.); #endif #ifdef MAINUV{X} vMainUV{X}=uv{X}; #endif -`;T.IncludesShadersStore[lz]||(T.IncludesShadersStore[lz]=Nle)});var cz,wle,Zx=M(()=>{G();cz="samplerVertexImplementation",wle=`#if defined(_DEFINENAME_) && _DEFINENAME_DIRECTUV==0 +`;A.IncludesShadersStore[Ez]||(A.IncludesShadersStore[Ez]=Zle)});var Sz,Qle,tR=M(()=>{G();Sz="samplerVertexImplementation",Qle=`#if defined(_DEFINENAME_) && _DEFINENAME_DIRECTUV==0 if (v_INFONAME_==0.) {v_VARYINGNAME_UV=vec2(_MATRIXNAME_Matrix*vec4(uvUpdated,1.0,0.0));} #ifdef UV2 @@ -7895,12 +7895,12 @@ else if (v_INFONAME_==5.) {v_VARYINGNAME_UV=vec2(_MATRIXNAME_Matrix*vec4(uv6,1.0,0.0));} #endif #endif -`;T.IncludesShadersStore[cz]||(T.IncludesShadersStore[cz]=wle)});var fz,Fle,Qx=M(()=>{G();fz="bumpVertex",Fle=`#if defined(BUMP) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) +`;A.IncludesShadersStore[Sz]||(A.IncludesShadersStore[Sz]=Qle)});var Tz,$le,iR=M(()=>{G();Tz="bumpVertex",$le=`#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 -`;T.IncludesShadersStore[fz]||(T.IncludesShadersStore[fz]=Fle)});var hz,Ule,$x=M(()=>{G();hz="shadowsVertex",Ule=`#ifdef SHADOWS +`;A.IncludesShadersStore[Tz]||(A.IncludesShadersStore[Tz]=$le)});var Az,Jle,rR=M(()=>{G();Az="shadowsVertex",Jle=`#ifdef SHADOWS #if defined(SHADOWCSM{X}) vPositionFromCamera{X}=view*worldPos;for (int i=0; i{G();dz="pointCloudVertex",Ble=`#if defined(POINTSIZE) && !defined(WEBGPU) +`;A.IncludesShadersStore[Az]||(A.IncludesShadersStore[Az]=Jle)});var xz,ece,cL=M(()=>{G();xz="pointCloudVertex",ece=`#if defined(POINTSIZE) && !defined(WEBGPU) gl_PointSize=pointSize; #endif -`;T.IncludesShadersStore[dz]||(T.IncludesShadersStore[dz]=Ble)});var uz,Vle,Jx=M(()=>{G();uz="logDepthVertex",Vle=`#ifdef LOGARITHMICDEPTH +`;A.IncludesShadersStore[xz]||(A.IncludesShadersStore[xz]=ece)});var Rz,tce,nR=M(()=>{G();Rz="logDepthVertex",tce=`#ifdef LOGARITHMICDEPTH vFragmentDepth=1.0+gl_Position.w;gl_Position.z=log2(max(0.000001,vFragmentDepth))*logarithmicDepthConstant; #endif -`;T.IncludesShadersStore[uz]||(T.IncludesShadersStore[uz]=Vle)});var pz={};tt(pz,{defaultVertexShader:()=>Gle});var sL,mz,Gle,_z=M(()=>{G();XH();iL();Hx();Pa();uc();mc();wf();zx();Qm();Xx();rL();pc();Lg();Yx();Kx();kf();Wf();sd();Hf();zf();_c();gc();vc();jx();qx();Zx();Qx();Ec();Dg();$x();Og();nL();Jx();sL="defaultVertexShader",mz=`#define CUSTOM_VERTEX_EXTENSION +`;A.IncludesShadersStore[Rz]||(A.IncludesShadersStore[Rz]=tce)});var Iz={};tt(Iz,{defaultVertexShader:()=>ice});var fL,bz,ice,Mz=M(()=>{G();iz();oL();jx();Pa();uc();mc();wf();qx();Qm();Zx();lL();pc();Dg();Qx();$x();kf();Wf();sd();Hf();zf();_c();gc();vc();Jx();eR();tR();iR();Ec();Og();rR();Ng();cL();nR();fL="defaultVertexShader",bz=`#define CUSTOM_VERTEX_EXTENSION #include<__decl__defaultVertex> #define CUSTOM_VERTEX_BEGIN attribute vec3 position; @@ -8078,10 +8078,10 @@ vMainUV2=uv2Updated; #include #define CUSTOM_VERTEX_MAIN_END } -`;T.ShadersStore[sL]||(T.ShadersStore[sL]=mz);Gle={name:sL,shader:mz}});var gz,kle,eR=M(()=>{G();gz="decalFragmentDeclaration",kle=`#ifdef DECAL +`;A.ShadersStore[fL]||(A.ShadersStore[fL]=bz);ice={name:fL,shader:bz}});var Cz,rce,sR=M(()=>{G();Cz="decalFragmentDeclaration",rce=`#ifdef DECAL uniform vec4 vDecalInfos; #endif -`;T.IncludesShadersStore[gz]||(T.IncludesShadersStore[gz]=kle)});var vz,Wle,Ez=M(()=>{G();eR();vz="defaultFragmentDeclaration",Wle=`uniform vec4 vEyePosition;uniform vec4 vDiffuseColor;uniform vec4 vSpecularColor;uniform vec3 vEmissiveColor;uniform vec3 vAmbientColor;uniform float visibility; +`;A.IncludesShadersStore[Cz]||(A.IncludesShadersStore[Cz]=rce)});var yz,nce,Pz=M(()=>{G();sR();yz="defaultFragmentDeclaration",nce=`uniform vec4 vEyePosition;uniform vec4 vDiffuseColor;uniform vec4 vSpecularColor;uniform vec3 vEmissiveColor;uniform vec3 vAmbientColor;uniform float visibility; #ifdef DIFFUSE uniform vec2 vDiffuseInfos; #endif @@ -8149,7 +8149,7 @@ uniform vec4 vDetailInfos; #endif #include #define ADDITIONAL_FRAGMENT_DECLARATION -`;T.IncludesShadersStore[vz]||(T.IncludesShadersStore[vz]=Wle)});var Sz,Hle,tR=M(()=>{G();Sz="prePassDeclaration",Hle=`#ifdef PREPASS +`;A.IncludesShadersStore[yz]||(A.IncludesShadersStore[yz]=nce)});var Lz,sce,aR=M(()=>{G();Lz="prePassDeclaration",sce=`#ifdef PREPASS #extension GL_EXT_draw_buffers : require layout(location=0) out highp vec4 glFragData[{X}];highp vec4 gl_FragColor; #ifdef PREPASS_LOCAL_POSITION @@ -8165,14 +8165,14 @@ varying highp float vNormViewDepth; varying highp vec4 vCurrentPosition;varying highp vec4 vPreviousPosition; #endif #endif -`;T.IncludesShadersStore[Sz]||(T.IncludesShadersStore[Sz]=Hle)});var Tz,zle,iR=M(()=>{G();Tz="oitDeclaration",zle=`#ifdef ORDER_INDEPENDENT_TRANSPARENCY +`;A.IncludesShadersStore[Lz]||(A.IncludesShadersStore[Lz]=sce)});var Dz,ace,oR=M(()=>{G();Dz="oitDeclaration",ace=`#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 -`;T.IncludesShadersStore[Tz]||(T.IncludesShadersStore[Tz]=zle)});var Az,Xle,rR=M(()=>{G();Az="lightFragmentDeclaration",Xle=`#ifdef LIGHT{X} +`;A.IncludesShadersStore[Dz]||(A.IncludesShadersStore[Dz]=ace)});var Oz,oce,lR=M(()=>{G();Oz="lightFragmentDeclaration",oce=`#ifdef LIGHT{X} uniform vec4 vLightData{X};uniform vec4 vLightDiffuse{X}; #ifdef SPECULARTERM uniform vec4 vLightSpecular{X}; @@ -8246,7 +8246,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 -`;T.IncludesShadersStore[Az]||(T.IncludesShadersStore[Az]=Xle)});var xz,Yle,nR=M(()=>{G();xz="lightUboDeclaration",Yle=`#ifdef LIGHT{X} +`;A.IncludesShadersStore[Oz]||(A.IncludesShadersStore[Oz]=oce)});var Nz,lce,cR=M(()=>{G();Nz="lightUboDeclaration",lce=`#ifdef LIGHT{X} uniform Light{X} {vec4 vLightData;vec4 vLightDiffuse;vec4 vLightSpecular; #ifdef SPOTLIGHT{X} @@ -8318,7 +8318,7 @@ uniform mat4 lightMatrix{X}; #endif #endif #endif -`;T.IncludesShadersStore[xz]||(T.IncludesShadersStore[xz]=Yle)});var Rz,Kle,aL=M(()=>{G();Rz="ltcHelperFunctions",Kle=`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;} +`;A.IncludesShadersStore[Nz]||(A.IncludesShadersStore[Nz]=lce)});var wz,cce,hL=M(()=>{G();wz="ltcHelperFunctions",cce=`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;} @@ -8356,7 +8356,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;}`;T.IncludesShadersStore[Rz]||(T.IncludesShadersStore[Rz]=Kle)});var bz,jle,oL=M(()=>{G();bz="clusteredLightingFunctions",jle=`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;}`;A.IncludesShadersStore[wz]||(A.IncludesShadersStore[wz]=cce)});var Fz,fce,dL=M(()=>{G();Fz="clusteredLightingFunctions",fce=`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), @@ -8366,7 +8366,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);} -`;T.IncludesShadersStore[bz]||(T.IncludesShadersStore[bz]=jle)});var Iz,qle,Mz=M(()=>{G();aL();oL();Iz="lightsFragmentFunctions",qle=`struct lightingInfo +`;A.IncludesShadersStore[Fz]||(A.IncludesShadersStore[Fz]=fce)});var Bz,hce,Uz=M(()=>{G();hL();dL();Bz="lightsFragmentFunctions",hce=`struct lightingInfo {vec3 diffuse; #ifdef SPECULARTERM vec3 specular; @@ -8470,7 +8470,7 @@ result.specular+=info.specular; batchOffset+=CLUSTLIGHT_BATCH;} return result;} #endif -`;T.IncludesShadersStore[Iz]||(T.IncludesShadersStore[Iz]=qle)});var Cz,Zle,sR=M(()=>{G();Cz="shadowsFragmentFunctions",Zle=`#ifdef SHADOWS +`;A.IncludesShadersStore[Bz]||(A.IncludesShadersStore[Bz]=hce)});var Vz,dce,fR=M(()=>{G();Vz="shadowsFragmentFunctions",dce=`#ifdef SHADOWS #if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE) #define TEXTUREFUNC(s,c,l) texture2DLodEXT(s,c,l) #else @@ -8813,7 +8813,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 -`;T.IncludesShadersStore[Cz]||(T.IncludesShadersStore[Cz]=Zle)});var yz,Qle,ad=M(()=>{G();yz="samplerFragmentDeclaration",Qle=`#ifdef _DEFINENAME_ +`;A.IncludesShadersStore[Vz]||(A.IncludesShadersStore[Vz]=dce)});var Gz,uce,ad=M(()=>{G();Gz="samplerFragmentDeclaration",uce=`#ifdef _DEFINENAME_ #if _DEFINENAME_DIRECTUV==1 #define v_VARYINGNAME_UV vMainUV1 #elif _DEFINENAME_DIRECTUV==2 @@ -8831,11 +8831,11 @@ varying vec2 v_VARYINGNAME_UV; #endif uniform sampler2D _SAMPLERNAME_Sampler; #endif -`;T.IncludesShadersStore[yz]||(T.IncludesShadersStore[yz]=Qle)});var Pz,$le,Lz=M(()=>{G();Pz="fresnelFunction",$le=`#ifdef FRESNEL +`;A.IncludesShadersStore[Gz]||(A.IncludesShadersStore[Gz]=uce)});var kz,mce,Wz=M(()=>{G();kz="fresnelFunction",mce=`#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 -`;T.IncludesShadersStore[Pz]||(T.IncludesShadersStore[Pz]=$le)});var Dz,Jle,zg=M(()=>{G();Dz="reflectionFunction",Jle=`vec3 computeFixedEquirectangularCoords(vec4 worldPos,vec3 worldNormal,vec3 direction) +`;A.IncludesShadersStore[kz]||(A.IncludesShadersStore[kz]=mce)});var Hz,pce,Xg=M(()=>{G();Hz="reflectionFunction",pce=`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); } @@ -8897,7 +8897,7 @@ return vec3(0,0,0); #endif } #endif -`;T.IncludesShadersStore[Dz]||(T.IncludesShadersStore[Dz]=Jle)});var Oz,ece,aR=M(()=>{G();Oz="imageProcessingDeclaration",ece=`#ifdef EXPOSURE +`;A.IncludesShadersStore[Hz]||(A.IncludesShadersStore[Hz]=pce)});var zz,_ce,hR=M(()=>{G();zz="imageProcessingDeclaration",_ce=`#ifdef EXPOSURE uniform float exposureLinear; #endif #ifdef CONTRAST @@ -8923,7 +8923,7 @@ uniform vec4 colorTransformSettings; #ifdef DITHER uniform float ditherIntensity; #endif -`;T.IncludesShadersStore[Oz]||(T.IncludesShadersStore[Oz]=ece)});var Nz,tce,oR=M(()=>{G();Nz="imageProcessingFunctions",tce=`#if defined(COLORGRADING) && !defined(COLORGRADING3D) +`;A.IncludesShadersStore[zz]||(A.IncludesShadersStore[zz]=_ce)});var Xz,gce,dR=M(()=>{G();Xz="imageProcessingFunctions",gce=`#if defined(COLORGRADING) && !defined(COLORGRADING3D) /** * Polyfill for SAMPLE_TEXTURE_3D,which is unsupported in WebGL. * sampler3dSetting.x=textureOffset (0.5/textureSize). @@ -9011,7 +9011,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;}`;T.IncludesShadersStore[Nz]||(T.IncludesShadersStore[Nz]=tce)});var wz,ice,lR=M(()=>{G();wz="bumpFragmentMainFunctions",ice=`#if defined(BUMP) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) || defined(DETAIL) +return result;}`;A.IncludesShadersStore[Xz]||(A.IncludesShadersStore[Xz]=gce)});var Yz,vce,uR=M(()=>{G();Yz="bumpFragmentMainFunctions",vce=`#if defined(BUMP) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) || defined(DETAIL) #if defined(TANGENT) && defined(NORMAL) varying mat3 vTBN; #endif @@ -9072,7 +9072,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 -`;T.IncludesShadersStore[wz]||(T.IncludesShadersStore[wz]=ice)});var Fz,rce,cR=M(()=>{G();ad();Fz="bumpFragmentFunctions",rce=`#if defined(BUMP) +`;A.IncludesShadersStore[Yz]||(A.IncludesShadersStore[Yz]=vce)});var Kz,Ece,mR=M(()=>{G();ad();Kz="bumpFragmentFunctions",Ece=`#if defined(BUMP) #include(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump,_SAMPLERNAME_,bump) #endif #if defined(DETAIL) @@ -9102,7 +9102,7 @@ return -texCoordOffset; #endif } #endif -`;T.IncludesShadersStore[Fz]||(T.IncludesShadersStore[Fz]=rce)});var Uz,nce,fR=M(()=>{G();Uz="bumpFragment",nce=`vec2 uvOffset=vec2(0.0,0.0); +`;A.IncludesShadersStore[Kz]||(A.IncludesShadersStore[Kz]=Ece)});var jz,Sce,pR=M(()=>{G();jz="bumpFragment",Sce=`vec2 uvOffset=vec2(0.0,0.0); #if defined(BUMP) || defined(PARALLAX) || defined(DETAIL) #ifdef NORMALXYSCALE float normalScale=1.0; @@ -9154,7 +9154,7 @@ normalW=perturbNormalBase(TBN,blendedNormal,vBumpInfos.y); #elif defined(DETAIL) detailNormal.xy*=vDetailInfos.z;normalW=perturbNormalBase(TBN,detailNormal,vDetailInfos.z); #endif -`;T.IncludesShadersStore[Uz]||(T.IncludesShadersStore[Uz]=nce)});var Bz,sce,lL=M(()=>{G();Bz="decalFragment",sce=`#ifdef DECAL +`;A.IncludesShadersStore[jz]||(A.IncludesShadersStore[jz]=Sce)});var qz,Tce,uL=M(()=>{G();qz="decalFragment",Tce=`#ifdef DECAL #ifdef GAMMADECAL decalColor.rgb=toLinearSpace(decalColor.rgb); #endif @@ -9163,10 +9163,10 @@ decalColor.a*=decalColor.a; #endif surfaceAlbedo.rgb=mix(surfaceAlbedo.rgb,decalColor.rgb,decalColor.a); #endif -`;T.IncludesShadersStore[Bz]||(T.IncludesShadersStore[Bz]=sce)});var Vz,ace,hR=M(()=>{G();Vz="depthPrePass",ace=`#ifdef DEPTHPREPASS +`;A.IncludesShadersStore[qz]||(A.IncludesShadersStore[qz]=Tce)});var Zz,Ace,_R=M(()=>{G();Zz="depthPrePass",Ace=`#ifdef DEPTHPREPASS gl_FragColor=vec4(0.,0.,0.,1.0);return; #endif -`;T.IncludesShadersStore[Vz]||(T.IncludesShadersStore[Vz]=ace)});var Gz,oce,cL=M(()=>{G();Gz="lightFragment",oce=`#ifdef LIGHT{X} +`;A.IncludesShadersStore[Zz]||(A.IncludesShadersStore[Zz]=Ace)});var Qz,xce,mL=M(()=>{G();Qz="lightFragment",xce=`#ifdef LIGHT{X} #if defined(SHADOWONLY) || defined(LIGHTMAP) && defined(LIGHTMAPEXCLUDED{X}) && defined(LIGHTMAPNOSPECULAR{X}) #else vec4 diffuse{X}=light{X}.vLightDiffuse; @@ -9544,10 +9544,10 @@ sheenBase+=info.sheen.rgb*shadow; #endif #endif #endif -`;T.IncludesShadersStore[Gz]||(T.IncludesShadersStore[Gz]=oce)});var kz,lce,dR=M(()=>{G();kz="logDepthFragment",lce=`#ifdef LOGARITHMICDEPTH +`;A.IncludesShadersStore[Qz]||(A.IncludesShadersStore[Qz]=xce)});var $z,Rce,gR=M(()=>{G();$z="logDepthFragment",Rce=`#ifdef LOGARITHMICDEPTH gl_FragDepthEXT=log2(vFragmentDepth)*logarithmicDepthConstant*0.5; #endif -`;T.IncludesShadersStore[kz]||(T.IncludesShadersStore[kz]=lce)});var Wz,cce,uR=M(()=>{G();Wz="oitFragment",cce=`#ifdef ORDER_INDEPENDENT_TRANSPARENCY +`;A.IncludesShadersStore[$z]||(A.IncludesShadersStore[$z]=Rce)});var Jz,bce,vR=M(()=>{G();Jz="oitFragment",bce=`#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; @@ -9572,7 +9572,7 @@ if (fragDepth>nearestDepth && fragDepthfce});var fL,Hz,fce,Xz=M(()=>{G();Ez();iL();tR();iR();Qm();Pa();rR();nR();Mz();sR();ad();Lz();zg();aR();oR();lR();cR();Sc();sd();Ng();Tc();fR();lL();hR();cL();dR();wg();uR();fL="defaultPixelShader",Hz=`#define CUSTOM_FRAGMENT_EXTENSION +`;A.IncludesShadersStore[Jz]||(A.IncludesShadersStore[Jz]=bce)});var t4={};tt(t4,{defaultPixelShader:()=>Ice});var pL,e4,Ice,i4=M(()=>{G();Pz();oL();aR();oR();Qm();Pa();lR();cR();Uz();fR();ad();Wz();Xg();hR();dR();uR();mR();Sc();sd();wg();Tc();pR();uL();_R();mL();gR();Fg();vR();pL="defaultPixelShader",e4=`#define CUSTOM_FRAGMENT_EXTENSION #include<__decl__defaultFragment> #if defined(BUMP) || !defined(NORMAL) #extension GL_OES_standard_derivatives : enable @@ -9921,10 +9921,10 @@ if (fragDepth==nearestDepth) {frontColor.rgb+=color.rgb*color.a*alphaMultiplier; #endif #define CUSTOM_FRAGMENT_MAIN_END } -`;T.ShadersStore[fL]||(T.ShadersStore[fL]=Hz);fce={name:fL,shader:Hz}});var hL,dL,uL,mL,ke,Ac=M(()=>{Gt();Vt();oo();bs();zt();ki();dx();ux();ng();Vn();Na();Rg();zi();Da();Lf();KP();ol();bg();Bn();Ar();mx();px();_x();gx();hL={effect:null,subMesh:null},dL=class extends jm(Km(Rr)){},uL=class extends Xm(dL){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()}},mL=class extends qm(hl){},ke=class n extends mL{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 ge(0,0,0),this.diffuseColor=new ge(1,1,1),this.specularColor=new ge(1,1,1),this.emissiveColor=new ge(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 Bi(16),this._globalAmbientColor=new ge(0,0,0),this._cacheHasRenderTargetTextures=!1,this.detailMap=new wa(this),this._attachImageProcessingConfiguration(null),this.prePassConfiguration=new Ls,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===Ee.MATERIAL_ALPHATEST)}_shouldUseAlphaFromDiffuseTexture(){return this._diffuseTexture!=null&&this._diffuseTexture.hasAlpha&&this._useAlphaFromDiffuseTexture&&this._transparencyMode!==Ee.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 uL(this._eventInfo.defineNames));let s=this.getScene(),a=t.materialDefines;if(this._isReadyForSubMesh(t))return!0;let o=s.getEngine();if(a._needNormals=Cm(s,e,a,!0,this._maxSimultaneousLights,this._disableLighting),!Mm(s,e,this._maxSimultaneousLights,this._disableLighting))return!1;Lm(s,a);let l=this.needAlphaBlendingForMesh(e)&&this.getScene().useOrderIndependentTransparency;if(Om(s,a,this.canRenderToMRT&&!l),Dm(s,a,l),Hn.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())ni(this._diffuseTexture,a,"DIFFUSE");else return!1;else a.DIFFUSE=!1;if(this._ambientTexture&&n.AmbientTextureEnabled)if(this._ambientTexture.isReadyOrNotBlocking())ni(this._ambientTexture,a,"AMBIENT");else return!1;else a.AMBIENT=!1;if(this._opacityTexture&&n.OpacityTextureEnabled)if(this._opacityTexture.isReadyOrNotBlocking())ni(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),!xf(s,this._reflectionTexture,a))return!1;if(this._emissiveTexture&&n.EmissiveTextureEnabled)if(this._emissiveTexture.isReadyOrNotBlocking())ni(this._emissiveTexture,a,"EMISSIVE");else return!1;else a.EMISSIVE=!1;if(this._lightmapTexture&&n.LightmapTextureEnabled)if(this._lightmapTexture.isReadyOrNotBlocking())ni(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())ni(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())ni(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_${C}_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:_,samplers:p,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(()=>(gH(),_H)),Promise.resolve().then(()=>(WH(),kH))]):await Promise.all([Promise.resolve().then(()=>(_z(),pz)),Promise.resolve().then(()=>(Xz(),zz))]),this._shadersLoaded=!0}},o);if(this._eventInfo.customCode=void 0,E)if(this._onEffectCreatedObservable&&(hL.effect=E,hL.subMesh=t,this._onEffectCreatedObservable.notifyObservers(hL)),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),wm(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),Hn.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);Ms(t,a),this._vertexPullingMetadata&&Of(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=En.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),si(this._diffuseTexture,c,"diffuse")),this._ambientTexture&&n.AmbientTextureEnabled&&(c.updateFloat2("vAmbientInfos",this._ambientTexture.coordinatesIndex,this._ambientTexture.level),si(this._ambientTexture,c,"ambient")),this._opacityTexture&&n.OpacityTextureEnabled&&(c.updateFloat2("vOpacityInfos",this._opacityTexture.coordinatesIndex,this._opacityTexture.level),si(this._opacityTexture,c,"opacity")),this._hasAlphaChannel()&&c.updateFloat("alphaCutOff",this.alphaCutOff),Sm(r,s,c,ge.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),si(this._emissiveTexture,c,"emissive")),this._lightmapTexture&&n.LightmapTextureEnabled&&(c.updateFloat2("vLightmapInfos",this._lightmapTexture.coordinatesIndex,this._lightmapTexture.level),si(this._lightmapTexture,c,"lightmap")),this._specularTexture&&n.SpecularTextureEnabled&&(c.updateFloat2("vSpecularInfos",this._specularTexture.coordinatesIndex,this._specularTexture.level),si(this._specularTexture,c,"specular")),this._bumpTexture&&r.getEngine().getCaps().standardDerivatives&&n.BumpTextureEnabled&&(c.updateFloat3("vBumpInfos",this._bumpTexture.coordinatesIndex,1/this._bumpTexture.level,this.parallaxScaleBias),si(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:ge.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),Fn(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!==Jt.FOGMODE_NONE||this._reflectionTexture||this._refractionTexture||t.receiveShadows||s.PREPASS||s.CLUSTLIGHT_BATCH)&&this.bindView(a),Tf(r,t,a),s.NUM_MORPH_INFLUENCERS&&Un(t,a),s.BAKED_VERTEX_ANIMATION_TEXTURE&&((f=t.bakedVertexAnimationManager)==null||f.bind(a,s.INSTANCES)),this.useLogarithmicDepth&&Sf(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=it.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=it.Parse(()=>new n(e.name,t),e,t,i);return e.stencil&&r.stencil.parse(e.stencil,t,i),Ee._ParsePlugins(e,r,t,i),r}static get DiffuseTextureEnabled(){return ce.DiffuseTextureEnabled}static set DiffuseTextureEnabled(e){ce.DiffuseTextureEnabled=e}static get DetailTextureEnabled(){return ce.DetailTextureEnabled}static set DetailTextureEnabled(e){ce.DetailTextureEnabled=e}static get AmbientTextureEnabled(){return ce.AmbientTextureEnabled}static set AmbientTextureEnabled(e){ce.AmbientTextureEnabled=e}static get OpacityTextureEnabled(){return ce.OpacityTextureEnabled}static set OpacityTextureEnabled(e){ce.OpacityTextureEnabled=e}static get ReflectionTextureEnabled(){return ce.ReflectionTextureEnabled}static set ReflectionTextureEnabled(e){ce.ReflectionTextureEnabled=e}static get EmissiveTextureEnabled(){return ce.EmissiveTextureEnabled}static set EmissiveTextureEnabled(e){ce.EmissiveTextureEnabled=e}static get SpecularTextureEnabled(){return ce.SpecularTextureEnabled}static set SpecularTextureEnabled(e){ce.SpecularTextureEnabled=e}static get BumpTextureEnabled(){return ce.BumpTextureEnabled}static set BumpTextureEnabled(e){ce.BumpTextureEnabled=e}static get LightmapTextureEnabled(){return ce.LightmapTextureEnabled}static set LightmapTextureEnabled(e){ce.LightmapTextureEnabled=e}static get RefractionTextureEnabled(){return ce.RefractionTextureEnabled}static set RefractionTextureEnabled(e){ce.RefractionTextureEnabled=e}static get ColorGradingTextureEnabled(){return ce.ColorGradingTextureEnabled}static set ColorGradingTextureEnabled(e){ce.ColorGradingTextureEnabled=e}static get FresnelEnabled(){return ce.FresnelEnabled}static set FresnelEnabled(e){ce.FresnelEnabled=e}};ke.ForceGLSL=!1;P([Bt("diffuseTexture")],ke.prototype,"_diffuseTexture",void 0);P([le("_markAllSubMeshesAsTexturesAndMiscDirty")],ke.prototype,"diffuseTexture",void 0);P([Bt("ambientTexture")],ke.prototype,"_ambientTexture",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"ambientTexture",void 0);P([Bt("opacityTexture")],ke.prototype,"_opacityTexture",void 0);P([le("_markAllSubMeshesAsTexturesAndMiscDirty")],ke.prototype,"opacityTexture",void 0);P([Bt("reflectionTexture")],ke.prototype,"_reflectionTexture",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"reflectionTexture",void 0);P([Bt("emissiveTexture")],ke.prototype,"_emissiveTexture",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"emissiveTexture",void 0);P([Bt("specularTexture")],ke.prototype,"_specularTexture",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"specularTexture",void 0);P([Bt("bumpTexture")],ke.prototype,"_bumpTexture",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"bumpTexture",void 0);P([Bt("lightmapTexture")],ke.prototype,"_lightmapTexture",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"lightmapTexture",void 0);P([Bt("refractionTexture")],ke.prototype,"_refractionTexture",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"refractionTexture",void 0);P([vr("ambient")],ke.prototype,"ambientColor",void 0);P([vr("diffuse")],ke.prototype,"diffuseColor",void 0);P([vr("specular")],ke.prototype,"specularColor",void 0);P([vr("emissive")],ke.prototype,"emissiveColor",void 0);P([F()],ke.prototype,"specularPower",void 0);P([F("useAlphaFromDiffuseTexture")],ke.prototype,"_useAlphaFromDiffuseTexture",void 0);P([le("_markAllSubMeshesAsTexturesAndMiscDirty")],ke.prototype,"useAlphaFromDiffuseTexture",void 0);P([F("useEmissiveAsIllumination")],ke.prototype,"_useEmissiveAsIllumination",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"useEmissiveAsIllumination",void 0);P([F("linkEmissiveWithDiffuse")],ke.prototype,"_linkEmissiveWithDiffuse",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"linkEmissiveWithDiffuse",void 0);P([F("useSpecularOverAlpha")],ke.prototype,"_useSpecularOverAlpha",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"useSpecularOverAlpha",void 0);P([F("useReflectionOverAlpha")],ke.prototype,"_useReflectionOverAlpha",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"useReflectionOverAlpha",void 0);P([F("disableLighting")],ke.prototype,"_disableLighting",void 0);P([le("_markAllSubMeshesAsLightsDirty")],ke.prototype,"disableLighting",void 0);P([F("useObjectSpaceNormalMap")],ke.prototype,"_useObjectSpaceNormalMap",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"useObjectSpaceNormalMap",void 0);P([F("useParallax")],ke.prototype,"_useParallax",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"useParallax",void 0);P([F("useParallaxOcclusion")],ke.prototype,"_useParallaxOcclusion",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"useParallaxOcclusion",void 0);P([F()],ke.prototype,"parallaxScaleBias",void 0);P([F("roughness")],ke.prototype,"_roughness",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"roughness",void 0);P([F()],ke.prototype,"indexOfRefraction",void 0);P([F()],ke.prototype,"invertRefractionY",void 0);P([F()],ke.prototype,"alphaCutOff",void 0);P([F("useLightmapAsShadowmap")],ke.prototype,"_useLightmapAsShadowmap",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"useLightmapAsShadowmap",void 0);P([tm("diffuseFresnelParameters")],ke.prototype,"_diffuseFresnelParameters",void 0);P([le("_markAllSubMeshesAsFresnelDirty")],ke.prototype,"diffuseFresnelParameters",void 0);P([tm("opacityFresnelParameters")],ke.prototype,"_opacityFresnelParameters",void 0);P([le("_markAllSubMeshesAsFresnelAndMiscDirty")],ke.prototype,"opacityFresnelParameters",void 0);P([tm("reflectionFresnelParameters")],ke.prototype,"_reflectionFresnelParameters",void 0);P([le("_markAllSubMeshesAsFresnelDirty")],ke.prototype,"reflectionFresnelParameters",void 0);P([tm("refractionFresnelParameters")],ke.prototype,"_refractionFresnelParameters",void 0);P([le("_markAllSubMeshesAsFresnelDirty")],ke.prototype,"refractionFresnelParameters",void 0);P([tm("emissiveFresnelParameters")],ke.prototype,"_emissiveFresnelParameters",void 0);P([le("_markAllSubMeshesAsFresnelDirty")],ke.prototype,"emissiveFresnelParameters",void 0);P([F("useReflectionFresnelFromSpecular")],ke.prototype,"_useReflectionFresnelFromSpecular",void 0);P([le("_markAllSubMeshesAsFresnelDirty")],ke.prototype,"useReflectionFresnelFromSpecular",void 0);P([F("useGlossinessFromSpecularMapAlpha")],ke.prototype,"_useGlossinessFromSpecularMapAlpha",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"useGlossinessFromSpecularMapAlpha",void 0);P([F("maxSimultaneousLights")],ke.prototype,"_maxSimultaneousLights",void 0);P([le("_markAllSubMeshesAsLightsDirty")],ke.prototype,"maxSimultaneousLights",void 0);P([F("invertNormalMapX")],ke.prototype,"_invertNormalMapX",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"invertNormalMapX",void 0);P([F("invertNormalMapY")],ke.prototype,"_invertNormalMapY",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"invertNormalMapY",void 0);P([F("twoSidedLighting")],ke.prototype,"_twoSidedLighting",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"twoSidedLighting",void 0);P([F("applyDecalMapAfterDetailMap")],ke.prototype,"_applyDecalMapAfterDetailMap",void 0);P([le("_markAllSubMeshesAsMiscDirty")],ke.prototype,"applyDecalMapAfterDetailMap",void 0);Ft("BABYLON.StandardMaterial",ke);Jt.DefaultMaterialFactory=n=>new ke("default material",n)});var Yz=M(()=>{eo();Zn();Ts();bt.prototype.createDynamicTexture=function(n,e,t,i){let r=new Di(this,4);return r.baseWidth=n,r.baseHeight=e,t&&(n=this.needPOTTextures?gn(n,this._caps.maxTextureSize):n,e=this.needPOTTextures?gn(e,this._caps.maxTextureSize):e),r.width=n,r.height=e,r.isReady=!1,r.generateMipMaps=t,r.samplingMode=i,this.updateTextureSamplingMode(i,r),this._internalTexturesCache.push(r),r};bt.prototype.updateDynamicTexture=function(n,e,t,i=!1,r,s=!1,a=!1){if(!n)return;let o=this._gl,l=o.TEXTURE_2D,c=this._bindTextureDirectly(l,n,!0,s);this._unpackFlipY(t===void 0?n.invertY:t),i&&o.pixelStorei(o.UNPACK_PREMULTIPLY_ALPHA_WEBGL,1);let f=this._getWebGLTextureType(n.type),h=this._getInternalFormat(r||n.format),d=this._getRGBABufferInternalSizedFormat(n.type,h);o.texImage2D(l,0,d,h,f,e),n.generateMipMaps&&o.generateMipmap(l),c||this._bindTextureDirectly(l,null),i&&o.pixelStorei(o.UNPACK_PREMULTIPLY_ALPHA_WEBGL,0),r&&(n.format=r),n._dynamicTextureSource=e,n._premulAlpha=i,n.invertY=t||!1,n.isReady=!0}});var mR,Kz=M(()=>{Pt();Vr();Yz();mR=class n extends _e{constructor(e,t,i,r=!1,s=3,a=5,o){let l=!i||i._isScene,c=l?i:i==null?void 0:i.scene,f=l?!r:i;super(null,c,f,o,s,void 0,void 0,void 0,void 0,a),this.name=e,this.wrapU=_e.CLAMP_ADDRESSMODE,this.wrapV=_e.CLAMP_ADDRESSMODE,this._generateMipMaps=r;let h=this._getEngine();if(!h)return;if(t.getContext)this._canvas=t,this._ownCanvas=!1,this._texture=h.createDynamicTexture(this._canvas.width,this._canvas.height,r,s);else{this._canvas=h.createCanvas(1,1),this._ownCanvas=!0;let u=t;u.width||u.width===0?this._texture=h.createDynamicTexture(u.width,u.height,r,s):this._texture=h.createDynamicTexture(t,t,r,s)}let d=this.getSize();this._canvas.width!==d.width&&(this._canvas.width=d.width),this._canvas.height!==d.height&&(this._canvas.height=d.height),this._context=this._canvas.getContext("2d")}getClassName(){return"DynamicTexture"}get canRescale(){return!0}_recreate(e){this._canvas.width=e.width,this._canvas.height=e.height,this.releaseInternalTexture(),this._texture=this._getEngine().createDynamicTexture(e.width,e.height,this._generateMipMaps,this.samplingMode)}scale(e){let t=this.getSize();t.width*=e,t.height*=e,this._recreate(t)}scaleTo(e,t){let i=this.getSize();i.width=e,i.height=t,this._recreate(i)}getContext(){return this._context}clear(e){let t=this.getSize();e&&(this._context.fillStyle=e),this._context.clearRect(0,0,t.width,t.height)}update(e,t=!1,i=!1){this._texture&&this._getEngine().updateDynamicTexture(this._texture,this._canvas,e===void 0?!0:e,t,this._format||void 0,void 0,i)}drawText(e,t,i,r,s,a,o,l=!0){let c=this.getSize();if(a&&(this._context.fillStyle=a,this._context.fillRect(0,0,c.width,c.height)),this._context.font=r,t==null){let f=this._context.measureText(e);t=(c.width-f.width)/2}if(i==null){let f=parseInt(r.replace(/\D/g,""));i=c.height/2+f/3.65}this._context.fillStyle=s||"",this._context.fillText(e,t,i),l&&this.update(o)}dispose(){var e,t;super.dispose(),this._ownCanvas&&((t=(e=this._canvas)==null?void 0:e.remove)==null||t.call(e)),this._canvas=null,this._context=null}clone(){let e=this.getScene();if(!e)return this;let t=this.getSize(),i=new n(this.name,t,e,this._generateMipMaps);return i.hasAlpha=this.hasAlpha,i.level=this.level,i.wrapU=this.wrapU,i.wrapV=this.wrapV,i}serialize(){let e=this.getScene();e&&!e.isReady()&&ee.Warn("The scene must be ready before serializing the dynamic texture");let t=super.serialize();return n._IsCanvasElement(this._canvas)&&(t.base64String=this._canvas.toDataURL()),t.invertY=this._invertY,t.samplingMode=this.samplingMode,t}static _IsCanvasElement(e){return e.toDataURL!==void 0}_rebuild(){this.update()}}});function _R(n,e,t,i,r,s=!1){let a=Kr.Zero();return Xg(n,e,t,i,a,r,s),a}function Xg(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),p=1/l.getHardwareScalingLevel();return e=e*p-h,t=t*p-(f-d-m),r.update(e,t,u,m,i||j.IdentityReadOnly,a?j.IdentityReadOnly:s.getViewMatrix(),s.getProjectionMatrix(),o),n}function Zz(n,e,t,i){let r=Kr.Zero();return pL(n,e,t,r,i),r}function pL(n,e,t,i,r){if(!Jn)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=j.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 pR(n,e,t,i,r,s,a,o){let l=e(i,t.enableDistantPicking);return _L(n,t,i,l,r,s,a,o)}function _L(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 hce(n,e){return n==="InstancedLinesMesh"||n==="LinesMesh"?e.intersectionThreshold:0}function Qz(n){let e=n.getClassName();if(e==="GreasedLineMesh")return{rawBoundingInfo:null,intersectionThreshold:0};let t=n.rawBoundingInfo;return{rawBoundingInfo:t,intersectionThreshold:t?hce(e,n):0}}function $z(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 gL(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=qz.internalPickerForMesh||pR,f=c===pR;for(let h=0;h>4);for(let S=0;S1&&n.cameraToUseForPointers!==n.activeCamera),a=n.cameraToUseForPointers||n.activeCamera,o=qz.internalPickerForMesh||pR,l=o===pR;for(let c=0;c>4);for(let A=0;A(n._tempPickingRay||(n._tempPickingRay=Kr.Zero()),Xg(n,e,t,o,n._tempPickingRay,s||null),n._tempPickingRay),i,r,!0);return a&&(a.ray=_R(n,e,t,j.Identity(),s||null)),a}function t4(n,e,t,i,r,s,a,o=!1){let l=gL(n,(c,f)=>(n._tempPickingRay||(n._tempPickingRay=Kr.Zero()),Xg(n,e,t,c,n._tempPickingRay,s||null,!1,f),n._tempPickingRay),i,r,!1,a);return l&&(l.ray=_R(n,e,t,j.Identity(),s||null)),l}function i4(n,e,t,i,r){let s=gL(n,a=>(n._pickWithRayInverseMatrix||(n._pickWithRayInverseMatrix=j.Identity()),a.invertToRef(n._pickWithRayInverseMatrix),n._cachedRayForTransform||(n._cachedRayForTransform=Kr.Zero()),Kr.TransformToRef(e,n._pickWithRayInverseMatrix,n._cachedRayForTransform),n._cachedRayForTransform),t,i,!1,r);return s&&(s.ray=e),s}function r4(n,e,t,i,r,s){return Jz(n,a=>_R(n,e,t,a,r||null),i,s)}function n4(n,e,t,i){return Jz(n,r=>(n._pickWithRayInverseMatrix||(n._pickWithRayInverseMatrix=j.Identity()),r.invertToRef(n._pickWithRayInverseMatrix),n._cachedRayForTransform||(n._cachedRayForTransform=Kr.Zero()),Kr.TransformToRef(e,n._pickWithRayInverseMatrix,n._cachedRayForTransform),n._cachedRayForTransform),t,i)}function jz(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 s4(n,e){e&&(e.prototype.getForwardRay=function(t=100,i,r){return jz(this,new Kr(b.Zero(),b.Zero(),t),t,i,r)},e.prototype.getForwardRayToRef=function(t,i=100,r,s){return jz(this,t,i,r,s)}),n&&(Kh._IsPickingAvailable=!0,n.prototype.createPickingRay=function(t,i,r,s,a=!1){return _R(this,t,i,r,s,a)})}var qz,Kr,vL=M(()=>{Ln();Ge();Zo();Gy();sg();Oi();KC();qz={internalPickerForMesh:void 0},Kr=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 qh(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;m_&&(p=_,g=u+f,v=h)),g<0?(g=0,-d<0?p=0:-d>c?p=_:(p=-d,_=c)):g>v&&(g=v,-d+f<0?p=0:-d+f>c?p=_:(p=-d+f,_=c));let x=Math.abs(p)0&&A<=this.length&&R.lengthSquared(){bs();sl();vL();vL();s4(Jt,mt);Jt.prototype.createPickingRayToRef=function(n,e,t,i,r,s=!1,a=!1){return Xg(this,n,e,t,i,r,s,a)};Jt.prototype.createPickingRayInCameraSpace=function(n,e,t){return Zz(this,n,e,t)};Jt.prototype.createPickingRayInCameraSpaceToRef=function(n,e,t,i){return pL(this,n,e,t,i)};Jt.prototype.pickWithBoundingInfo=function(n,e,t,i,r){return e4(this,n,e,t,i,r)};Jt.prototype.pick=function(n,e,t,i,r,s,a=!1){return t4(this,n,e,t,i,r,s,a)};Jt.prototype.pickWithRay=function(n,e,t,i){return i4(this,n,e,t,i)};Jt.prototype.multiPick=function(n,e,t,i,r){return r4(this,n,e,t,i,r)};Jt.prototype.multiPickWithRay=function(n,e,t){return n4(this,n,e,t)}});var a4,dce,SL=M(()=>{G();a4="kernelBlurVaryingDeclaration",dce="varying sampleCoord{X}: vec2f;";T.IncludesShadersStoreWGSL[a4]||(T.IncludesShadersStoreWGSL[a4]=dce)});var o4,uce,gR=M(()=>{G();o4="packingFunctions",uce=`fn pack(depth: f32)->vec4f +`;A.ShadersStore[pL]||(A.ShadersStore[pL]=e4);Ice={name:pL,shader:e4}});var _L,gL,vL,EL,ke,Ac=M(()=>{Gt();Vt();lo();Cs();zt();ki();gx();vx();sg();Gn();Na();bg();zi();Da();Lf();$P();ll();Ig();Vn();xr();Ex();Sx();Tx();Ax();_L={effect:null,subMesh:null},gL=class extends jm(Km(br)){},vL=class extends Xm(gL){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()}},EL=class extends qm(dl){},ke=class n extends EL{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 pe(0,0,0),this.diffuseColor=new pe(1,1,1),this.specularColor=new pe(1,1,1),this.emissiveColor=new pe(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 Ui(16),this._globalAmbientColor=new pe(0,0,0),this._cacheHasRenderTargetTextures=!1,this.detailMap=new wa(this),this._attachImageProcessingConfiguration(null),this.prePassConfiguration=new Ns,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===Ee.MATERIAL_ALPHATEST)}_shouldUseAlphaFromDiffuseTexture(){return this._diffuseTexture!=null&&this._diffuseTexture.hasAlpha&&this._useAlphaFromDiffuseTexture&&this._transparencyMode!==Ee.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 vL(this._eventInfo.defineNames));let s=this.getScene(),a=t.materialDefines;if(this._isReadyForSubMesh(t))return!0;let o=s.getEngine();if(a._needNormals=Cm(s,e,a,!0,this._maxSimultaneousLights,this._disableLighting),!Mm(s,e,this._maxSimultaneousLights,this._disableLighting))return!1;Lm(s,a);let l=this.needAlphaBlendingForMesh(e)&&this.getScene().useOrderIndependentTransparency;if(Om(s,a,this.canRenderToMRT&&!l),Dm(s,a,l),zn.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())ni(this._diffuseTexture,a,"DIFFUSE");else return!1;else a.DIFFUSE=!1;if(this._ambientTexture&&n.AmbientTextureEnabled)if(this._ambientTexture.isReadyOrNotBlocking())ni(this._ambientTexture,a,"AMBIENT");else return!1;else a.AMBIENT=!1;if(this._opacityTexture&&n.OpacityTextureEnabled)if(this._opacityTexture.isReadyOrNotBlocking())ni(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),!xf(s,this._reflectionTexture,a))return!1;if(this._emissiveTexture&&n.EmissiveTextureEnabled)if(this._emissiveTexture.isReadyOrNotBlocking())ni(this._emissiveTexture,a,"EMISSIVE");else return!1;else a.EMISSIVE=!1;if(this._lightmapTexture&&n.LightmapTextureEnabled)if(this._lightmapTexture.isReadyOrNotBlocking())ni(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())ni(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())ni(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_${C}_info`)}))}else this._vertexPullingMetadata=null;let v={};this.customShaderNameResolve&&(u=this.customShaderNameResolve(u,m,_,p,a,d,v));let x=a.toString(),T=t.effect,E=s.getEngine().createEffect(u,{attributes:d,uniformsNames:m,uniformBuffersNames:_,samplers:p,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(()=>(CH(),MH)),Promise.resolve().then(()=>(JH(),$H))]):await Promise.all([Promise.resolve().then(()=>(Mz(),Iz)),Promise.resolve().then(()=>(i4(),t4))]),this._shadersLoaded=!0}},o);if(this._eventInfo.customCode=void 0,E)if(this._onEffectCreatedObservable&&(_L.effect=E,_L.subMesh=t,this._onEffectCreatedObservable.notifyObservers(_L)),this.allowShaderHotSwapping&&T&&!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),wm(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),zn.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);Ps(t,a),this._vertexPullingMetadata&&Of(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=Sn.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),si(this._diffuseTexture,c,"diffuse")),this._ambientTexture&&n.AmbientTextureEnabled&&(c.updateFloat2("vAmbientInfos",this._ambientTexture.coordinatesIndex,this._ambientTexture.level),si(this._ambientTexture,c,"ambient")),this._opacityTexture&&n.OpacityTextureEnabled&&(c.updateFloat2("vOpacityInfos",this._opacityTexture.coordinatesIndex,this._opacityTexture.level),si(this._opacityTexture,c,"opacity")),this._hasAlphaChannel()&&c.updateFloat("alphaCutOff",this.alphaCutOff),Sm(r,s,c,pe.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),si(this._emissiveTexture,c,"emissive")),this._lightmapTexture&&n.LightmapTextureEnabled&&(c.updateFloat2("vLightmapInfos",this._lightmapTexture.coordinatesIndex,this._lightmapTexture.level),si(this._lightmapTexture,c,"lightmap")),this._specularTexture&&n.SpecularTextureEnabled&&(c.updateFloat2("vSpecularInfos",this._specularTexture.coordinatesIndex,this._specularTexture.level),si(this._specularTexture,c,"specular")),this._bumpTexture&&r.getEngine().getCaps().standardDerivatives&&n.BumpTextureEnabled&&(c.updateFloat3("vBumpInfos",this._bumpTexture.coordinatesIndex,1/this._bumpTexture.level,this.parallaxScaleBias),si(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:pe.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),Bn(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!==Jt.FOGMODE_NONE||this._reflectionTexture||this._refractionTexture||t.receiveShadows||s.PREPASS||s.CLUSTLIGHT_BATCH)&&this.bindView(a),Tf(r,t,a),s.NUM_MORPH_INFLUENCERS&&Un(t,a),s.BAKED_VERTEX_ANIMATION_TEXTURE&&((f=t.bakedVertexAnimationManager)==null||f.bind(a,s.INSTANCES)),this.useLogarithmicDepth&&Sf(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=it.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=it.Parse(()=>new n(e.name,t),e,t,i);return e.stencil&&r.stencil.parse(e.stencil,t,i),Ee._ParsePlugins(e,r,t,i),r}static get DiffuseTextureEnabled(){return ce.DiffuseTextureEnabled}static set DiffuseTextureEnabled(e){ce.DiffuseTextureEnabled=e}static get DetailTextureEnabled(){return ce.DetailTextureEnabled}static set DetailTextureEnabled(e){ce.DetailTextureEnabled=e}static get AmbientTextureEnabled(){return ce.AmbientTextureEnabled}static set AmbientTextureEnabled(e){ce.AmbientTextureEnabled=e}static get OpacityTextureEnabled(){return ce.OpacityTextureEnabled}static set OpacityTextureEnabled(e){ce.OpacityTextureEnabled=e}static get ReflectionTextureEnabled(){return ce.ReflectionTextureEnabled}static set ReflectionTextureEnabled(e){ce.ReflectionTextureEnabled=e}static get EmissiveTextureEnabled(){return ce.EmissiveTextureEnabled}static set EmissiveTextureEnabled(e){ce.EmissiveTextureEnabled=e}static get SpecularTextureEnabled(){return ce.SpecularTextureEnabled}static set SpecularTextureEnabled(e){ce.SpecularTextureEnabled=e}static get BumpTextureEnabled(){return ce.BumpTextureEnabled}static set BumpTextureEnabled(e){ce.BumpTextureEnabled=e}static get LightmapTextureEnabled(){return ce.LightmapTextureEnabled}static set LightmapTextureEnabled(e){ce.LightmapTextureEnabled=e}static get RefractionTextureEnabled(){return ce.RefractionTextureEnabled}static set RefractionTextureEnabled(e){ce.RefractionTextureEnabled=e}static get ColorGradingTextureEnabled(){return ce.ColorGradingTextureEnabled}static set ColorGradingTextureEnabled(e){ce.ColorGradingTextureEnabled=e}static get FresnelEnabled(){return ce.FresnelEnabled}static set FresnelEnabled(e){ce.FresnelEnabled=e}};ke.ForceGLSL=!1;P([Ut("diffuseTexture")],ke.prototype,"_diffuseTexture",void 0);P([le("_markAllSubMeshesAsTexturesAndMiscDirty")],ke.prototype,"diffuseTexture",void 0);P([Ut("ambientTexture")],ke.prototype,"_ambientTexture",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"ambientTexture",void 0);P([Ut("opacityTexture")],ke.prototype,"_opacityTexture",void 0);P([le("_markAllSubMeshesAsTexturesAndMiscDirty")],ke.prototype,"opacityTexture",void 0);P([Ut("reflectionTexture")],ke.prototype,"_reflectionTexture",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"reflectionTexture",void 0);P([Ut("emissiveTexture")],ke.prototype,"_emissiveTexture",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"emissiveTexture",void 0);P([Ut("specularTexture")],ke.prototype,"_specularTexture",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"specularTexture",void 0);P([Ut("bumpTexture")],ke.prototype,"_bumpTexture",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"bumpTexture",void 0);P([Ut("lightmapTexture")],ke.prototype,"_lightmapTexture",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"lightmapTexture",void 0);P([Ut("refractionTexture")],ke.prototype,"_refractionTexture",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"refractionTexture",void 0);P([vr("ambient")],ke.prototype,"ambientColor",void 0);P([vr("diffuse")],ke.prototype,"diffuseColor",void 0);P([vr("specular")],ke.prototype,"specularColor",void 0);P([vr("emissive")],ke.prototype,"emissiveColor",void 0);P([F()],ke.prototype,"specularPower",void 0);P([F("useAlphaFromDiffuseTexture")],ke.prototype,"_useAlphaFromDiffuseTexture",void 0);P([le("_markAllSubMeshesAsTexturesAndMiscDirty")],ke.prototype,"useAlphaFromDiffuseTexture",void 0);P([F("useEmissiveAsIllumination")],ke.prototype,"_useEmissiveAsIllumination",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"useEmissiveAsIllumination",void 0);P([F("linkEmissiveWithDiffuse")],ke.prototype,"_linkEmissiveWithDiffuse",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"linkEmissiveWithDiffuse",void 0);P([F("useSpecularOverAlpha")],ke.prototype,"_useSpecularOverAlpha",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"useSpecularOverAlpha",void 0);P([F("useReflectionOverAlpha")],ke.prototype,"_useReflectionOverAlpha",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"useReflectionOverAlpha",void 0);P([F("disableLighting")],ke.prototype,"_disableLighting",void 0);P([le("_markAllSubMeshesAsLightsDirty")],ke.prototype,"disableLighting",void 0);P([F("useObjectSpaceNormalMap")],ke.prototype,"_useObjectSpaceNormalMap",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"useObjectSpaceNormalMap",void 0);P([F("useParallax")],ke.prototype,"_useParallax",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"useParallax",void 0);P([F("useParallaxOcclusion")],ke.prototype,"_useParallaxOcclusion",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"useParallaxOcclusion",void 0);P([F()],ke.prototype,"parallaxScaleBias",void 0);P([F("roughness")],ke.prototype,"_roughness",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"roughness",void 0);P([F()],ke.prototype,"indexOfRefraction",void 0);P([F()],ke.prototype,"invertRefractionY",void 0);P([F()],ke.prototype,"alphaCutOff",void 0);P([F("useLightmapAsShadowmap")],ke.prototype,"_useLightmapAsShadowmap",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"useLightmapAsShadowmap",void 0);P([tm("diffuseFresnelParameters")],ke.prototype,"_diffuseFresnelParameters",void 0);P([le("_markAllSubMeshesAsFresnelDirty")],ke.prototype,"diffuseFresnelParameters",void 0);P([tm("opacityFresnelParameters")],ke.prototype,"_opacityFresnelParameters",void 0);P([le("_markAllSubMeshesAsFresnelAndMiscDirty")],ke.prototype,"opacityFresnelParameters",void 0);P([tm("reflectionFresnelParameters")],ke.prototype,"_reflectionFresnelParameters",void 0);P([le("_markAllSubMeshesAsFresnelDirty")],ke.prototype,"reflectionFresnelParameters",void 0);P([tm("refractionFresnelParameters")],ke.prototype,"_refractionFresnelParameters",void 0);P([le("_markAllSubMeshesAsFresnelDirty")],ke.prototype,"refractionFresnelParameters",void 0);P([tm("emissiveFresnelParameters")],ke.prototype,"_emissiveFresnelParameters",void 0);P([le("_markAllSubMeshesAsFresnelDirty")],ke.prototype,"emissiveFresnelParameters",void 0);P([F("useReflectionFresnelFromSpecular")],ke.prototype,"_useReflectionFresnelFromSpecular",void 0);P([le("_markAllSubMeshesAsFresnelDirty")],ke.prototype,"useReflectionFresnelFromSpecular",void 0);P([F("useGlossinessFromSpecularMapAlpha")],ke.prototype,"_useGlossinessFromSpecularMapAlpha",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"useGlossinessFromSpecularMapAlpha",void 0);P([F("maxSimultaneousLights")],ke.prototype,"_maxSimultaneousLights",void 0);P([le("_markAllSubMeshesAsLightsDirty")],ke.prototype,"maxSimultaneousLights",void 0);P([F("invertNormalMapX")],ke.prototype,"_invertNormalMapX",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"invertNormalMapX",void 0);P([F("invertNormalMapY")],ke.prototype,"_invertNormalMapY",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"invertNormalMapY",void 0);P([F("twoSidedLighting")],ke.prototype,"_twoSidedLighting",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],ke.prototype,"twoSidedLighting",void 0);P([F("applyDecalMapAfterDetailMap")],ke.prototype,"_applyDecalMapAfterDetailMap",void 0);P([le("_markAllSubMeshesAsMiscDirty")],ke.prototype,"applyDecalMapAfterDetailMap",void 0);Ft("BABYLON.StandardMaterial",ke);Jt.DefaultMaterialFactory=n=>new ke("default material",n)});var r4=M(()=>{to();Qn();Rs();bt.prototype.createDynamicTexture=function(n,e,t,i){let r=new Oi(this,4);return r.baseWidth=n,r.baseHeight=e,t&&(n=this.needPOTTextures?vn(n,this._caps.maxTextureSize):n,e=this.needPOTTextures?vn(e,this._caps.maxTextureSize):e),r.width=n,r.height=e,r.isReady=!1,r.generateMipMaps=t,r.samplingMode=i,this.updateTextureSamplingMode(i,r),this._internalTexturesCache.push(r),r};bt.prototype.updateDynamicTexture=function(n,e,t,i=!1,r,s=!1,a=!1){if(!n)return;let o=this._gl,l=o.TEXTURE_2D,c=this._bindTextureDirectly(l,n,!0,s);this._unpackFlipY(t===void 0?n.invertY:t),i&&o.pixelStorei(o.UNPACK_PREMULTIPLY_ALPHA_WEBGL,1);let f=this._getWebGLTextureType(n.type),h=this._getInternalFormat(r||n.format),d=this._getRGBABufferInternalSizedFormat(n.type,h);o.texImage2D(l,0,d,h,f,e),n.generateMipMaps&&o.generateMipmap(l),c||this._bindTextureDirectly(l,null),i&&o.pixelStorei(o.UNPACK_PREMULTIPLY_ALPHA_WEBGL,0),r&&(n.format=r),n._dynamicTextureSource=e,n._premulAlpha=i,n.invertY=t||!1,n.isReady=!0}});var ER,n4=M(()=>{Pt();Vr();r4();ER=class n extends ge{constructor(e,t,i,r=!1,s=3,a=5,o){let l=!i||i._isScene,c=l?i:i==null?void 0:i.scene,f=l?!r:i;super(null,c,f,o,s,void 0,void 0,void 0,void 0,a),this.name=e,this.wrapU=ge.CLAMP_ADDRESSMODE,this.wrapV=ge.CLAMP_ADDRESSMODE,this._generateMipMaps=r;let h=this._getEngine();if(!h)return;if(t.getContext)this._canvas=t,this._ownCanvas=!1,this._texture=h.createDynamicTexture(this._canvas.width,this._canvas.height,r,s);else{this._canvas=h.createCanvas(1,1),this._ownCanvas=!0;let u=t;u.width||u.width===0?this._texture=h.createDynamicTexture(u.width,u.height,r,s):this._texture=h.createDynamicTexture(t,t,r,s)}let d=this.getSize();this._canvas.width!==d.width&&(this._canvas.width=d.width),this._canvas.height!==d.height&&(this._canvas.height=d.height),this._context=this._canvas.getContext("2d")}getClassName(){return"DynamicTexture"}get canRescale(){return!0}_recreate(e){this._canvas.width=e.width,this._canvas.height=e.height,this.releaseInternalTexture(),this._texture=this._getEngine().createDynamicTexture(e.width,e.height,this._generateMipMaps,this.samplingMode)}scale(e){let t=this.getSize();t.width*=e,t.height*=e,this._recreate(t)}scaleTo(e,t){let i=this.getSize();i.width=e,i.height=t,this._recreate(i)}getContext(){return this._context}clear(e){let t=this.getSize();e&&(this._context.fillStyle=e),this._context.clearRect(0,0,t.width,t.height)}update(e,t=!1,i=!1){this._texture&&this._getEngine().updateDynamicTexture(this._texture,this._canvas,e===void 0?!0:e,t,this._format||void 0,void 0,i)}drawText(e,t,i,r,s,a,o,l=!0){let c=this.getSize();if(a&&(this._context.fillStyle=a,this._context.fillRect(0,0,c.width,c.height)),this._context.font=r,t==null){let f=this._context.measureText(e);t=(c.width-f.width)/2}if(i==null){let f=parseInt(r.replace(/\D/g,""));i=c.height/2+f/3.65}this._context.fillStyle=s||"",this._context.fillText(e,t,i),l&&this.update(o)}dispose(){var e,t;super.dispose(),this._ownCanvas&&((t=(e=this._canvas)==null?void 0:e.remove)==null||t.call(e)),this._canvas=null,this._context=null}clone(){let e=this.getScene();if(!e)return this;let t=this.getSize(),i=new n(this.name,t,e,this._generateMipMaps);return i.hasAlpha=this.hasAlpha,i.level=this.level,i.wrapU=this.wrapU,i.wrapV=this.wrapV,i}serialize(){let e=this.getScene();e&&!e.isReady()&&ee.Warn("The scene must be ready before serializing the dynamic texture");let t=super.serialize();return n._IsCanvasElement(this._canvas)&&(t.base64String=this._canvas.toDataURL()),t.invertY=this._invertY,t.samplingMode=this.samplingMode,t}static _IsCanvasElement(e){return e.toDataURL!==void 0}_rebuild(){this.update()}}});function TR(n,e,t,i,r,s=!1){let a=Kr.Zero();return Yg(n,e,t,i,a,r,s),a}function Yg(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),p=1/l.getHardwareScalingLevel();return e=e*p-h,t=t*p-(f-d-m),r.update(e,t,u,m,i||j.IdentityReadOnly,a?j.IdentityReadOnly:s.getViewMatrix(),s.getProjectionMatrix(),o),n}function o4(n,e,t,i){let r=Kr.Zero();return SL(n,e,t,r,i),r}function SL(n,e,t,i,r){if(!es)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=j.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 SR(n,e,t,i,r,s,a,o){let l=e(i,t.enableDistantPicking);return TL(n,t,i,l,r,s,a,o)}function TL(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 Mce(n,e){return n==="InstancedLinesMesh"||n==="LinesMesh"?e.intersectionThreshold:0}function l4(n){let e=n.getClassName();if(e==="GreasedLineMesh")return{rawBoundingInfo:null,intersectionThreshold:0};let t=n.rawBoundingInfo;return{rawBoundingInfo:t,intersectionThreshold:t?Mce(e,n):0}}function c4(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 AL(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=a4.internalPickerForMesh||SR,f=c===SR;for(let h=0;h>4);for(let S=0;S1&&n.cameraToUseForPointers!==n.activeCamera),a=n.cameraToUseForPointers||n.activeCamera,o=a4.internalPickerForMesh||SR,l=o===SR;for(let c=0;c>4);for(let T=0;T(n._tempPickingRay||(n._tempPickingRay=Kr.Zero()),Yg(n,e,t,o,n._tempPickingRay,s||null),n._tempPickingRay),i,r,!0);return a&&(a.ray=TR(n,e,t,j.Identity(),s||null)),a}function d4(n,e,t,i,r,s,a,o=!1){let l=AL(n,(c,f)=>(n._tempPickingRay||(n._tempPickingRay=Kr.Zero()),Yg(n,e,t,c,n._tempPickingRay,s||null,!1,f),n._tempPickingRay),i,r,!1,a);return l&&(l.ray=TR(n,e,t,j.Identity(),s||null)),l}function u4(n,e,t,i,r){let s=AL(n,a=>(n._pickWithRayInverseMatrix||(n._pickWithRayInverseMatrix=j.Identity()),a.invertToRef(n._pickWithRayInverseMatrix),n._cachedRayForTransform||(n._cachedRayForTransform=Kr.Zero()),Kr.TransformToRef(e,n._pickWithRayInverseMatrix,n._cachedRayForTransform),n._cachedRayForTransform),t,i,!1,r);return s&&(s.ray=e),s}function m4(n,e,t,i,r,s){return f4(n,a=>TR(n,e,t,a,r||null),i,s)}function p4(n,e,t,i){return f4(n,r=>(n._pickWithRayInverseMatrix||(n._pickWithRayInverseMatrix=j.Identity()),r.invertToRef(n._pickWithRayInverseMatrix),n._cachedRayForTransform||(n._cachedRayForTransform=Kr.Zero()),Kr.TransformToRef(e,n._pickWithRayInverseMatrix,n._cachedRayForTransform),n._cachedRayForTransform),t,i)}function s4(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 _4(n,e){e&&(e.prototype.getForwardRay=function(t=100,i,r){return s4(this,new Kr(b.Zero(),b.Zero(),t),t,i,r)},e.prototype.getForwardRayToRef=function(t,i=100,r,s){return s4(this,t,i,r,s)}),n&&(Kh._IsPickingAvailable=!0,n.prototype.createPickingRay=function(t,i,r,s,a=!1){return TR(this,t,i,r,s,a)})}var a4,Kr,xL=M(()=>{Dn();Ge();Qo();Xy();ag();Ni();$C();a4={internalPickerForMesh:void 0},Kr=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 qh(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;m_&&(p=_,g=u+f,v=h)),g<0?(g=0,-d<0?p=0:-d>c?p=_:(p=-d,_=c)):g>v&&(g=v,-d+f<0?p=0:-d+f>c?p=_:(p=-d+f,_=c));let x=Math.abs(p)0&&T<=this.length&&R.lengthSquared(){Cs();al();xL();xL();_4(Jt,mt);Jt.prototype.createPickingRayToRef=function(n,e,t,i,r,s=!1,a=!1){return Yg(this,n,e,t,i,r,s,a)};Jt.prototype.createPickingRayInCameraSpace=function(n,e,t){return o4(this,n,e,t)};Jt.prototype.createPickingRayInCameraSpaceToRef=function(n,e,t,i){return SL(this,n,e,t,i)};Jt.prototype.pickWithBoundingInfo=function(n,e,t,i,r){return h4(this,n,e,t,i,r)};Jt.prototype.pick=function(n,e,t,i,r,s,a=!1){return d4(this,n,e,t,i,r,s,a)};Jt.prototype.pickWithRay=function(n,e,t,i){return u4(this,n,e,t,i)};Jt.prototype.multiPick=function(n,e,t,i,r){return m4(this,n,e,t,i,r)};Jt.prototype.multiPickWithRay=function(n,e,t){return p4(this,n,e,t)}});var g4,Cce,bL=M(()=>{G();g4="kernelBlurVaryingDeclaration",Cce="varying sampleCoord{X}: vec2f;";A.IncludesShadersStoreWGSL[g4]||(A.IncludesShadersStoreWGSL[g4]=Cce)});var v4,yce,AR=M(()=>{G();v4="packingFunctions",yce=`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);}`;T.IncludesShadersStoreWGSL[o4]||(T.IncludesShadersStoreWGSL[o4]=uce)});var l4,mce,c4=M(()=>{G();l4="kernelBlurFragment",mce=`#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);}`;A.IncludesShadersStoreWGSL[v4]||(A.IncludesShadersStoreWGSL[v4]=yce)});var E4,Pce,S4=M(()=>{G();E4="kernelBlurFragment",Pce=`#ifdef DOF factor=sampleCoC(fragmentInputs.sampleCoord{X}); computedWeight=KERNEL_WEIGHT{X}*factor;sumOfWeights+=computedWeight; #else @@ -9935,7 +9935,7 @@ blend+=unpack(textureSample(textureSampler,textureSamplerSampler,fragmentInputs. #else blend+=textureSample(textureSampler,textureSamplerSampler,fragmentInputs.sampleCoord{X})*computedWeight; #endif -`;T.IncludesShadersStoreWGSL[l4]||(T.IncludesShadersStoreWGSL[l4]=mce)});var f4,pce,h4=M(()=>{G();f4="kernelBlurFragment2",pce=`#ifdef DOF +`;A.IncludesShadersStoreWGSL[E4]||(A.IncludesShadersStoreWGSL[E4]=Pce)});var T4,Lce,A4=M(()=>{G();T4="kernelBlurFragment2",Lce=`#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}; @@ -9945,7 +9945,7 @@ blend+=unpack(textureSample(textureSampler,textureSamplerSampler,fragmentInputs. #else blend+=textureSample(textureSampler,textureSamplerSampler,fragmentInputs.sampleCenter+uniforms.delta*KERNEL_DEP_OFFSET{X})*computedWeight; #endif -`;T.IncludesShadersStoreWGSL[f4]||(T.IncludesShadersStoreWGSL[f4]=pce)});var u4={};tt(u4,{kernelBlurPixelShaderWGSL:()=>_ce});var TL,d4,_ce,m4=M(()=>{G();SL();gR();c4();h4();TL="kernelBlurPixelShader",d4=`var textureSamplerSampler: sampler;var textureSampler: texture_2d;uniform delta: vec2f;varying sampleCenter: vec2f; +`;A.IncludesShadersStoreWGSL[T4]||(A.IncludesShadersStoreWGSL[T4]=Lce)});var R4={};tt(R4,{kernelBlurPixelShaderWGSL:()=>Dce});var IL,x4,Dce,b4=M(()=>{G();bL();AR();S4();A4();IL="kernelBlurPixelShader",x4=`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 @@ -9980,7 +9980,7 @@ fragmentOutputs.color=blend; #ifdef DOF fragmentOutputs.color/=sumOfWeights; #endif -}`;T.ShadersStoreWGSL[TL]||(T.ShadersStoreWGSL[TL]=d4);_ce={name:TL,shader:d4}});var p4,gce,_4=M(()=>{G();p4="kernelBlurVertex",gce="vertexOutputs.sampleCoord{X}=vertexOutputs.sampleCenter+uniforms.delta*KERNEL_OFFSET{X};";T.IncludesShadersStoreWGSL[p4]||(T.IncludesShadersStoreWGSL[p4]=gce)});var v4={};tt(v4,{kernelBlurVertexShaderWGSL:()=>vce});var AL,g4,vce,E4=M(()=>{G();SL();_4();AL="kernelBlurVertexShader",g4=`attribute position: vec2f;uniform delta: vec2f;varying sampleCenter: vec2f; +}`;A.ShadersStoreWGSL[IL]||(A.ShadersStoreWGSL[IL]=x4);Dce={name:IL,shader:x4}});var I4,Oce,M4=M(()=>{G();I4="kernelBlurVertex",Oce="vertexOutputs.sampleCoord{X}=vertexOutputs.sampleCenter+uniforms.delta*KERNEL_OFFSET{X};";A.IncludesShadersStoreWGSL[I4]||(A.IncludesShadersStoreWGSL[I4]=Oce)});var y4={};tt(y4,{kernelBlurVertexShaderWGSL:()=>Nce});var ML,C4,Nce,P4=M(()=>{G();bL();M4();ML="kernelBlurVertexShader",C4=`attribute position: vec2f;uniform delta: vec2f;varying sampleCenter: vec2f; #include[0..varyingCount] #define CUSTOM_VERTEX_DEFINITIONS @vertex @@ -9990,10 +9990,10 @@ vertexOutputs.sampleCenter=(vertexInputs.position*madd+madd); #include[0..varyingCount] vertexOutputs.position= vec4f(vertexInputs.position,0.0,1.0); #define CUSTOM_VERTEX_MAIN_END -}`;T.ShadersStoreWGSL[AL]||(T.ShadersStoreWGSL[AL]=g4);vce={name:AL,shader:g4}});var S4,Ece,xL=M(()=>{G();S4="kernelBlurVaryingDeclaration",Ece="varying vec2 sampleCoord{X};";T.IncludesShadersStore[S4]||(T.IncludesShadersStore[S4]=Ece)});var T4,Sce,vR=M(()=>{G();T4="packingFunctions",Sce=`vec4 pack(float depth) +}`;A.ShadersStoreWGSL[ML]||(A.ShadersStoreWGSL[ML]=C4);Nce={name:ML,shader:C4}});var L4,wce,CL=M(()=>{G();L4="kernelBlurVaryingDeclaration",wce="varying vec2 sampleCoord{X};";A.IncludesShadersStore[L4]||(A.IncludesShadersStore[L4]=wce)});var D4,Fce,xR=M(()=>{G();D4="packingFunctions",Fce=`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);}`;T.IncludesShadersStore[T4]||(T.IncludesShadersStore[T4]=Sce)});var A4,Tce,x4=M(()=>{G();A4="kernelBlurFragment",Tce=`#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);}`;A.IncludesShadersStore[D4]||(A.IncludesShadersStore[D4]=Fce)});var O4,Bce,N4=M(()=>{G();O4="kernelBlurFragment",Bce=`#ifdef DOF factor=sampleCoC(sampleCoord{X}); computedWeight=KERNEL_WEIGHT{X}*factor;sumOfWeights+=computedWeight; #else @@ -10004,7 +10004,7 @@ blend+=unpack(texture2D(textureSampler,sampleCoord{X}))*computedWeight; #else blend+=texture2D(textureSampler,sampleCoord{X})*computedWeight; #endif -`;T.IncludesShadersStore[A4]||(T.IncludesShadersStore[A4]=Tce)});var R4,Ace,b4=M(()=>{G();R4="kernelBlurFragment2",Ace=`#ifdef DOF +`;A.IncludesShadersStore[O4]||(A.IncludesShadersStore[O4]=Bce)});var w4,Uce,F4=M(()=>{G();w4="kernelBlurFragment2",Uce=`#ifdef DOF factor=sampleCoC(sampleCenter+delta*KERNEL_DEP_OFFSET{X});computedWeight=KERNEL_DEP_WEIGHT{X}*factor;sumOfWeights+=computedWeight; #else computedWeight=KERNEL_DEP_WEIGHT{X}; @@ -10014,7 +10014,7 @@ blend+=unpack(texture2D(textureSampler,sampleCenter+delta*KERNEL_DEP_OFFSET{X})) #else blend+=texture2D(textureSampler,sampleCenter+delta*KERNEL_DEP_OFFSET{X})*computedWeight; #endif -`;T.IncludesShadersStore[R4]||(T.IncludesShadersStore[R4]=Ace)});var M4={};tt(M4,{kernelBlurPixelShader:()=>xce});var RL,I4,xce,C4=M(()=>{G();xL();vR();x4();b4();RL="kernelBlurPixelShader",I4=`uniform sampler2D textureSampler;uniform vec2 delta;varying vec2 sampleCenter; +`;A.IncludesShadersStore[w4]||(A.IncludesShadersStore[w4]=Uce)});var U4={};tt(U4,{kernelBlurPixelShader:()=>Vce});var yL,B4,Vce,V4=M(()=>{G();CL();xR();N4();F4();yL="kernelBlurPixelShader",B4=`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 @@ -10049,7 +10049,7 @@ gl_FragColor=blend; #ifdef DOF gl_FragColor/=sumOfWeights; #endif -}`;T.ShadersStore[RL]||(T.ShadersStore[RL]=I4);xce={name:RL,shader:I4}});var y4,Rce,P4=M(()=>{G();y4="kernelBlurVertex",Rce="sampleCoord{X}=sampleCenter+delta*KERNEL_OFFSET{X};";T.IncludesShadersStore[y4]||(T.IncludesShadersStore[y4]=Rce)});var D4={};tt(D4,{kernelBlurVertexShader:()=>bce});var bL,L4,bce,O4=M(()=>{G();xL();P4();bL="kernelBlurVertexShader",L4=`attribute vec2 position;uniform vec2 delta;varying vec2 sampleCenter; +}`;A.ShadersStore[yL]||(A.ShadersStore[yL]=B4);Vce={name:yL,shader:B4}});var G4,Gce,k4=M(()=>{G();G4="kernelBlurVertex",Gce="sampleCoord{X}=sampleCenter+delta*KERNEL_OFFSET{X};";A.IncludesShadersStore[G4]||(A.IncludesShadersStore[G4]=Gce)});var H4={};tt(H4,{kernelBlurVertexShader:()=>kce});var PL,W4,kce,z4=M(()=>{G();CL();k4();PL="kernelBlurVertexShader",W4=`attribute vec2 position;uniform vec2 delta;varying vec2 sampleCenter; #include[0..varyingCount] const vec2 madd=vec2(0.5,0.5); #define CUSTOM_VERTEX_DEFINITIONS @@ -10059,13 +10059,13 @@ sampleCenter=(position*madd+madd); #include[0..varyingCount] gl_Position=vec4(position,0.0,1.0); #define CUSTOM_VERTEX_MAIN_END -}`;T.ShadersStore[bL]||(T.ShadersStore[bL]=L4);bce={name:bL,shader:L4}});var is,IL=M(()=>{Wh();Oi();is=class n extends Xr{_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.all([Promise.resolve().then(()=>(m4(),u4)),Promise.resolve().then(()=>(E4(),v4))]))):t.push(Promise.all([Promise.resolve().then(()=>(C4(),M4)),Promise.resolve().then(()=>(O4(),D4))]))}constructor(e,t=null,i,r,s){let a=!!(s!=null&&s.blockCompilation);super({...s,name:e,engine:t||Oe.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 _=0;_{Wh();Ni();rs=class n extends Xr{_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.all([Promise.resolve().then(()=>(b4(),R4)),Promise.resolve().then(()=>(P4(),y4))]))):t.push(Promise.all([Promise.resolve().then(()=>(V4(),U4)),Promise.resolve().then(()=>(z4(),H4))]))}constructor(e,t=null,i,r,s){let a=!!(s!=null&&s.blockCompilation);super({...s,name:e,engine:t||Oe.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 _=0;_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+$/,"")}};is.VertexUrl="kernelBlur";is.FragmentUrl="kernelBlur";is.Uniforms=["delta","direction"];is.Samplers=["circleOfConfusionSampler"]});var Fa,ML=M(()=>{Gt();jl();Vr();zi();Vt();Ar();IL();Fa=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=_e.BILINEAR_SAMPLINGMODE,o,l,c=0,f="",h=!1,d=5){let u=typeof r=="number"?h:!!r.blockCompilation,m={uniforms:is.Uniforms,samplers:is.Samplers,size:typeof r=="number"?r:void 0,camera:s,samplingMode:a,engine:o,reusable:l,textureType:c,vertexUrl:is.VertexUrl,indexParameters:{varyingCount:0,depCount:0},textureFormat:d,defines:f,...r,blockCompilation:!0};super(e,is.FragmentUrl,{effectWrapper:typeof r=="number"||!r.effectWrapper?new is(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 it.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([im()],Fa.prototype,"direction",null);P([F()],Fa.prototype,"kernel",null);P([F()],Fa.prototype,"packedFloat",null);Ft("BABYLON.BlurPostProcess",Fa)});var N4,Ice,w4=M(()=>{G();N4="bayerDitherFunctions",Ice=`fn bayerDither2(_P: vec2f)->f32 {return ((2.0*_P.y+_P.x+1.0)%(4.0));} +`,p++;this.packedFloat&&(m+="#define PACKEDFLOAT 1"),this.options.blockCompilation=!1,this.updateEffect(m,null,null,{varyingCount:u,depCount:p},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+$/,"")}};rs.VertexUrl="kernelBlur";rs.FragmentUrl="kernelBlur";rs.Uniforms=["delta","direction"];rs.Samplers=["circleOfConfusionSampler"]});var Fa,DL=M(()=>{Gt();jl();Vr();zi();Vt();xr();LL();Fa=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:rs.Uniforms,samplers:rs.Samplers,size:typeof r=="number"?r:void 0,camera:s,samplingMode:a,engine:o,reusable:l,textureType:c,vertexUrl:rs.VertexUrl,indexParameters:{varyingCount:0,depCount:0},textureFormat:d,defines:f,...r,blockCompilation:!0};super(e,rs.FragmentUrl,{effectWrapper:typeof r=="number"||!r.effectWrapper?new rs(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 it.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([im()],Fa.prototype,"direction",null);P([F()],Fa.prototype,"kernel",null);P([F()],Fa.prototype,"packedFloat",null);Ft("BABYLON.BlurPostProcess",Fa)});var X4,Wce,Y4=M(()=>{G();X4="bayerDitherFunctions",Wce=`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);} @@ -10073,7 +10073,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);} -`;T.IncludesShadersStoreWGSL[N4]||(T.IncludesShadersStoreWGSL[N4]=Ice)});var F4,Mce,U4=M(()=>{G();gR();w4();F4="shadowMapFragmentExtraDeclaration",Mce=`#if SM_FLOAT==0 +`;A.IncludesShadersStoreWGSL[X4]||(A.IncludesShadersStoreWGSL[X4]=Wce)});var K4,Hce,j4=M(()=>{G();AR();Y4();K4="shadowMapFragmentExtraDeclaration",Hce=`#if SM_FLOAT==0 #include #endif #if SM_SOFTTRANSPARENTSHADOW==1 @@ -10088,7 +10088,7 @@ uniform biasAndScaleSM: vec3f;uniform depthValuesSM: vec2f; #if defined(SM_DEPTHCLAMP) && SM_DEPTHCLAMP==1 varying zSM: f32; #endif -`;T.IncludesShadersStoreWGSL[F4]||(T.IncludesShadersStoreWGSL[F4]=Mce)});var B4,Cce,V4=M(()=>{G();B4="shadowMapFragment",Cce=`var depthSM: f32=fragmentInputs.vDepthMetricSM; +`;A.IncludesShadersStoreWGSL[K4]||(A.IncludesShadersStoreWGSL[K4]=Hce)});var q4,zce,Z4=M(()=>{G();q4="shadowMapFragment",zce=`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; @@ -10116,7 +10116,7 @@ fragmentOutputs.color= vec4f(depthSM,1.0,1.0,1.0); #else fragmentOutputs.color=pack(depthSM); #endif -`;T.IncludesShadersStoreWGSL[B4]||(T.IncludesShadersStoreWGSL[B4]=Cce)});var k4={};tt(k4,{shadowMapPixelShaderWGSL:()=>yce});var CL,G4,yce,W4=M(()=>{G();U4();hc();dc();V4();CL="shadowMapPixelShader",G4=`#include +`;A.IncludesShadersStoreWGSL[q4]||(A.IncludesShadersStoreWGSL[q4]=zce)});var $4={};tt($4,{shadowMapPixelShaderWGSL:()=>Xce});var OL,Q4,Xce,J4=M(()=>{G();j4();hc();dc();Z4();OL="shadowMapPixelShader",Q4=`#include #ifdef ALPHATEXTURE varying vUV: vec2f;var diffuseSamplerSampler: sampler;var diffuseSampler: texture_2d; #endif @@ -10142,7 +10142,7 @@ if ((bayerDither8(floor(((fragmentInputs.position.xy)%(8.0)))))/64.0>=uniforms.s #endif #endif #include -}`;T.ShadersStoreWGSL[CL]||(T.ShadersStoreWGSL[CL]=G4);yce={name:CL,shader:G4}});var H4,Pce,z4=M(()=>{G();H4="shadowMapVertexExtraDeclaration",Pce=`#if SM_NORMALBIAS==1 +}`;A.ShadersStoreWGSL[OL]||(A.ShadersStoreWGSL[OL]=Q4);Xce={name:OL,shader:Q4}});var eX,Yce,tX=M(()=>{G();eX="shadowMapVertexExtraDeclaration",Yce=`#if SM_NORMALBIAS==1 uniform lightDataSM: vec3f; #endif uniform biasAndScaleSM: vec3f;uniform depthValuesSM: vec2f;varying vDepthMetricSM: f32; @@ -10152,7 +10152,7 @@ varying vPositionWSM: vec3f; #if defined(SM_DEPTHCLAMP) && SM_DEPTHCLAMP==1 varying zSM: f32; #endif -`;T.IncludesShadersStoreWGSL[H4]||(T.IncludesShadersStoreWGSL[H4]=Pce)});var X4,Lce,Y4=M(()=>{G();X4="shadowMapVertexNormalBias",Lce=`#if SM_NORMALBIAS==1 +`;A.IncludesShadersStoreWGSL[eX]||(A.IncludesShadersStoreWGSL[eX]=Yce)});var iX,Kce,rX=M(()=>{G();iX="shadowMapVertexNormalBias",Kce=`#if SM_NORMALBIAS==1 #if SM_DIRECTIONINLIGHTDATA==1 var worldLightDirSM: vec3f=normalize(-uniforms.lightDataSM.xyz); #else @@ -10160,7 +10160,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 -`;T.IncludesShadersStoreWGSL[X4]||(T.IncludesShadersStoreWGSL[X4]=Lce)});var K4,Dce,j4=M(()=>{G();K4="shadowMapVertexMetric",Dce=`#if SM_USEDISTANCE==1 +`;A.IncludesShadersStoreWGSL[iX]||(A.IncludesShadersStoreWGSL[iX]=Kce)});var nX,jce,sX=M(()=>{G();nX="shadowMapVertexMetric",jce=`#if SM_USEDISTANCE==1 vertexOutputs.vPositionWSM=worldPos.xyz; #endif #if SM_DEPTHTEXTURE==1 @@ -10184,7 +10184,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 -`;T.IncludesShadersStoreWGSL[K4]||(T.IncludesShadersStoreWGSL[K4]=Dce)});var Z4={};tt(Z4,{shadowMapVertexShaderWGSL:()=>Oce});var yL,q4,Oce,Q4=M(()=>{G();nc();sc();Uf();Bf();ya();td();kg();z4();ac();Vf();Gf();oc();lc();cc();Y4();j4();fc();yL="shadowMapVertexShader",q4=`attribute position: vec3f; +`;A.IncludesShadersStoreWGSL[nX]||(A.IncludesShadersStoreWGSL[nX]=jce)});var oX={};tt(oX,{shadowMapVertexShaderWGSL:()=>qce});var NL,aX,qce,lX=M(()=>{G();nc();sc();Bf();Uf();ya();td();Wg();tX();ac();Vf();Gf();oc();lc();cc();rX();sX();fc();NL="shadowMapVertexShader",aX=`attribute position: vec3f; #ifdef NORMAL attribute normal: vec3f; #endif @@ -10250,14 +10250,14 @@ vertexOutputs.vUV= (uniforms.diffuseMatrix* vec4f(uv2Updated,1.0,0.0)).xy; #endif #endif #include -}`;T.ShadersStoreWGSL[yL]||(T.ShadersStoreWGSL[yL]=q4);Oce={name:yL,shader:q4}});var J4={};tt(J4,{depthBoxBlurPixelShaderWGSL:()=>Nce});var PL,$4,Nce,eX=M(()=>{G();PL="depthBoxBlurPixelShader",$4=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_2d;uniform screenSize: vec2f; +}`;A.ShadersStoreWGSL[NL]||(A.ShadersStoreWGSL[NL]=aX);qce={name:NL,shader:aX}});var fX={};tt(fX,{depthBoxBlurPixelShaderWGSL:()=>Zce});var wL,cX,Zce,hX=M(()=>{G();wL="depthBoxBlurPixelShader",cX=`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)));}`;T.ShadersStoreWGSL[PL]||(T.ShadersStoreWGSL[PL]=$4);Nce={name:PL,shader:$4}});var iX={};tt(iX,{shadowMapFragmentSoftTransparentShadowWGSL:()=>wce});var LL,tX,wce,rX=M(()=>{G();LL="shadowMapFragmentSoftTransparentShadow",tX=`#if SM_SOFTTRANSPARENTSHADOW==1 +fragmentOutputs.color=(colorDepth/ f32((OFFSET*2+1)*(OFFSET*2+1)));}`;A.ShadersStoreWGSL[wL]||(A.ShadersStoreWGSL[wL]=cX);Zce={name:wL,shader:cX}});var uX={};tt(uX,{shadowMapFragmentSoftTransparentShadowWGSL:()=>Qce});var FL,dX,Qce,mX=M(()=>{G();FL="shadowMapFragmentSoftTransparentShadow",dX=`#if SM_SOFTTRANSPARENTSHADOW==1 if ((bayerDither8(floor(((fragmentInputs.position.xy)%(8.0)))))/64.0>=uniforms.softTransparentShadowSM.x*alpha) {discard;} #endif -`;T.IncludesShadersStoreWGSL[LL]||(T.IncludesShadersStoreWGSL[LL]=tX);wce={name:LL,shader:tX}});var nX,Fce,sX=M(()=>{G();nX="bayerDitherFunctions",Fce=`float bayerDither2(vec2 _P) {return mod(2.0*_P.y+_P.x+1.0,4.0);} +`;A.IncludesShadersStoreWGSL[FL]||(A.IncludesShadersStoreWGSL[FL]=dX);Qce={name:FL,shader:dX}});var pX,$ce,_X=M(()=>{G();pX="bayerDitherFunctions",$ce=`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);} @@ -10265,7 +10265,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);} -`;T.IncludesShadersStore[nX]||(T.IncludesShadersStore[nX]=Fce)});var aX,Uce,oX=M(()=>{G();vR();sX();aX="shadowMapFragmentExtraDeclaration",Uce=`#if SM_FLOAT==0 +`;A.IncludesShadersStore[pX]||(A.IncludesShadersStore[pX]=$ce)});var gX,Jce,vX=M(()=>{G();xR();_X();gX="shadowMapFragmentExtraDeclaration",Jce=`#if SM_FLOAT==0 #include #endif #if SM_SOFTTRANSPARENTSHADOW==1 @@ -10280,7 +10280,7 @@ uniform vec3 biasAndScaleSM;uniform vec2 depthValuesSM; #if defined(SM_DEPTHCLAMP) && SM_DEPTHCLAMP==1 varying float zSM; #endif -`;T.IncludesShadersStore[aX]||(T.IncludesShadersStore[aX]=Uce)});var lX,Bce,cX=M(()=>{G();lX="shadowMapFragment",Bce=`float depthSM=vDepthMetricSM; +`;A.IncludesShadersStore[gX]||(A.IncludesShadersStore[gX]=Jce)});var EX,efe,SX=M(()=>{G();EX="shadowMapFragment",efe=`float depthSM=vDepthMetricSM; #if defined(SM_DEPTHCLAMP) && SM_DEPTHCLAMP==1 #if SM_USEDISTANCE==1 depthSM=(length(vPositionWSM-lightDataSM)+depthValuesSM.x)/depthValuesSM.y+biasAndScaleSM.x; @@ -10308,7 +10308,7 @@ gl_FragColor=vec4(depthSM,1.0,1.0,1.0); #else gl_FragColor=pack(depthSM); #endif -return;`;T.IncludesShadersStore[lX]||(T.IncludesShadersStore[lX]=Bce)});var hX={};tt(hX,{shadowMapPixelShader:()=>Vce});var DL,fX,Vce,dX=M(()=>{G();oX();Sc();Tc();cX();DL="shadowMapPixelShader",fX=`#include +return;`;A.IncludesShadersStore[EX]||(A.IncludesShadersStore[EX]=efe)});var AX={};tt(AX,{shadowMapPixelShader:()=>tfe});var BL,TX,tfe,xX=M(()=>{G();vX();Sc();Tc();SX();BL="shadowMapPixelShader",TX=`#include #ifdef ALPHATEXTURE varying vec2 vUV;uniform sampler2D diffuseSampler; #endif @@ -10335,18 +10335,18 @@ if ((bayerDither8(floor(mod(gl_FragCoord.xy,8.0))))/64.0>=softTransparentShadowS #endif #endif #include -}`;T.ShadersStore[DL]||(T.ShadersStore[DL]=fX);Vce={name:DL,shader:fX}});var uX,Gce,OL=M(()=>{G();uX="sceneVertexDeclaration",Gce=`uniform mat4 viewProjection; +}`;A.ShadersStore[BL]||(A.ShadersStore[BL]=TX);tfe={name:BL,shader:TX}});var RX,ife,UL=M(()=>{G();RX="sceneVertexDeclaration",ife=`uniform mat4 viewProjection; #ifdef MULTIVIEW uniform mat4 viewProjectionR; #endif uniform mat4 view;uniform mat4 projection;uniform vec4 vEyePosition; -`;T.IncludesShadersStore[uX]||(T.IncludesShadersStore[uX]=Gce)});var mX,kce,pX=M(()=>{G();mX="meshVertexDeclaration",kce=`uniform mat4 world;uniform float visibility; -`;T.IncludesShadersStore[mX]||(T.IncludesShadersStore[mX]=kce)});var _X,Wce,gX=M(()=>{G();OL();pX();_X="shadowMapVertexDeclaration",Wce=`#include +`;A.IncludesShadersStore[RX]||(A.IncludesShadersStore[RX]=ife)});var bX,rfe,IX=M(()=>{G();bX="meshVertexDeclaration",rfe=`uniform mat4 world;uniform float visibility; +`;A.IncludesShadersStore[bX]||(A.IncludesShadersStore[bX]=rfe)});var MX,nfe,CX=M(()=>{G();UL();IX();MX="shadowMapVertexDeclaration",nfe=`#include #include -`;T.IncludesShadersStore[_X]||(T.IncludesShadersStore[_X]=Wce)});var vX,Hce,EX=M(()=>{G();nd();Hg();vX="shadowMapUboDeclaration",Hce=`layout(std140,column_major) uniform; +`;A.IncludesShadersStore[MX]||(A.IncludesShadersStore[MX]=nfe)});var yX,sfe,PX=M(()=>{G();nd();zg();yX="shadowMapUboDeclaration",sfe=`layout(std140,column_major) uniform; #include #include -`;T.IncludesShadersStore[vX]||(T.IncludesShadersStore[vX]=Hce)});var SX,zce,TX=M(()=>{G();SX="shadowMapVertexExtraDeclaration",zce=`#if SM_NORMALBIAS==1 +`;A.IncludesShadersStore[yX]||(A.IncludesShadersStore[yX]=sfe)});var LX,afe,DX=M(()=>{G();LX="shadowMapVertexExtraDeclaration",afe=`#if SM_NORMALBIAS==1 uniform vec3 lightDataSM; #endif uniform vec3 biasAndScaleSM;uniform vec2 depthValuesSM;varying float vDepthMetricSM; @@ -10356,7 +10356,7 @@ varying vec3 vPositionWSM; #if defined(SM_DEPTHCLAMP) && SM_DEPTHCLAMP==1 varying float zSM; #endif -`;T.IncludesShadersStore[SX]||(T.IncludesShadersStore[SX]=zce)});var AX,Xce,xX=M(()=>{G();AX="shadowMapVertexNormalBias",Xce=`#if SM_NORMALBIAS==1 +`;A.IncludesShadersStore[LX]||(A.IncludesShadersStore[LX]=afe)});var OX,ofe,NX=M(()=>{G();OX="shadowMapVertexNormalBias",ofe=`#if SM_NORMALBIAS==1 #if SM_DIRECTIONINLIGHTDATA==1 vec3 worldLightDirSM=normalize(-lightDataSM.xyz); #else @@ -10364,7 +10364,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 -`;T.IncludesShadersStore[AX]||(T.IncludesShadersStore[AX]=Xce)});var RX,Yce,bX=M(()=>{G();RX="shadowMapVertexMetric",Yce=`#if SM_USEDISTANCE==1 +`;A.IncludesShadersStore[OX]||(A.IncludesShadersStore[OX]=ofe)});var wX,lfe,FX=M(()=>{G();wX="shadowMapVertexMetric",lfe=`#if SM_USEDISTANCE==1 vPositionWSM=worldPos.xyz; #endif #if SM_DEPTHTEXTURE==1 @@ -10388,7 +10388,7 @@ vDepthMetricSM=(-gl_Position.z+depthValuesSM.x)/depthValuesSM.y+biasAndScaleSM.x vDepthMetricSM=(gl_Position.z+depthValuesSM.x)/depthValuesSM.y+biasAndScaleSM.x; #endif #endif -`;T.IncludesShadersStore[RX]||(T.IncludesShadersStore[RX]=Yce)});var MX={};tt(MX,{shadowMapVertexShader:()=>Kce});var NL,IX,Kce,CX=M(()=>{G();uc();mc();kf();Wf();Pa();gX();EX();TX();pc();Hf();zf();_c();gc();vc();xX();bX();Ec();NL="shadowMapVertexShader",IX=`attribute vec3 position; +`;A.IncludesShadersStore[wX]||(A.IncludesShadersStore[wX]=lfe)});var UX={};tt(UX,{shadowMapVertexShader:()=>cfe});var VL,BX,cfe,VX=M(()=>{G();uc();mc();kf();Wf();Pa();CX();PX();DX();pc();Hf();zf();_c();gc();vc();NX();FX();Ec();VL="shadowMapVertexShader",BX=`attribute vec3 position; #ifdef NORMAL attribute vec3 normal; #endif @@ -10453,16 +10453,16 @@ vUV=vec2(diffuseMatrix*vec4(uv2Updated,1.0,0.0)); #endif #endif #include -}`;T.ShadersStore[NL]||(T.ShadersStore[NL]=IX);Kce={name:NL,shader:IX}});var PX={};tt(PX,{depthBoxBlurPixelShader:()=>jce});var wL,yX,jce,LX=M(()=>{G();wL="depthBoxBlurPixelShader",yX=`varying vec2 vUV;uniform sampler2D textureSampler;uniform vec2 screenSize; +}`;A.ShadersStore[VL]||(A.ShadersStore[VL]=BX);cfe={name:VL,shader:BX}});var kX={};tt(kX,{depthBoxBlurPixelShader:()=>ffe});var GL,GX,ffe,WX=M(()=>{G();GL="depthBoxBlurPixelShader",GX=`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)));}`;T.ShadersStore[wL]||(T.ShadersStore[wL]=yX);jce={name:wL,shader:yX}});var OX={};tt(OX,{shadowMapFragmentSoftTransparentShadow:()=>qce});var FL,DX,qce,NX=M(()=>{G();FL="shadowMapFragmentSoftTransparentShadow",DX=`#if SM_SOFTTRANSPARENTSHADOW==1 +colorDepth+=texture2D(textureSampler,vUV+vec2(x,y)/screenSize);gl_FragColor=(colorDepth/float((OFFSET*2+1)*(OFFSET*2+1)));}`;A.ShadersStore[GL]||(A.ShadersStore[GL]=GX);ffe={name:GL,shader:GX}});var zX={};tt(zX,{shadowMapFragmentSoftTransparentShadow:()=>hfe});var kL,HX,hfe,XX=M(()=>{G();kL="shadowMapFragmentSoftTransparentShadow",HX=`#if SM_SOFTTRANSPARENTSHADOW==1 if ((bayerDither8(floor(mod(gl_FragCoord.xy,8.0))))/64.0>=softTransparentShadowSM.x*alpha) discard; #endif -`;T.IncludesShadersStore[FL]||(T.IncludesShadersStore[FL]=DX);qce={name:FL,shader:DX}});var yi,ER=M(()=>{Ge();zt();ki();yf();Vr();_f();jl();ML();di();hn();Lf();pA();kh();ol();Bn();lg();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 ie,this.onAfterShadowMapRenderObservable=new ie,this.onBeforeShadowMapRenderMeshObservable=new ie,this.onAfterShadowMapRenderMeshObservable=new ie,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=j.Zero(),this._projectionMatrix=j.Zero(),this._transformMatrix=j.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=j.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 Gr(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 Gr(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=_e.CLAMP_ADDRESSMODE,this._shadowMap.wrapV=_e.CLAMP_ADDRESSMODE,this._shadowMap.anisotropicFilteringLevel=1,this._shadowMap.updateSamplingMode(_e.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),p=d.needAlphaBlendingForMesh(c);o=this.isReady(l,m,p)&&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(),Ma.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),Ma.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=Aa.MIN_RENDERINGGROUPS;r(W4(),k4)),Promise.resolve().then(()=>(Q4(),Z4)),Promise.resolve().then(()=>(eX(),J4)),Promise.resolve().then(()=>(rX(),iX))])):await Promise.all([Promise.resolve().then(()=>(dX(),hX)),Promise.resolve().then(()=>(CX(),MX)),Promise.resolve().then(()=>(LX(),PX)),Promise.resolve().then(()=>(NX(),OX))]),this._shadersLoaded=!0}_initializeBlurRTTAndPostProcesses(){let e=this._scene.getEngine(),t=this._mapSize/this.blurScale;(!this.useKernelBlur||this.blurScale!==1)&&(this._shadowMap2=new Gr(this._light.name+"_shadowMap2",t,this._scene,!1,!0,this._textureType,void 0,void 0,!1),this._shadowMap2.wrapU=_e.CLAMP_ADDRESSMODE,this._shadowMap2.wrapV=_e.CLAMP_ADDRESSMODE,this._shadowMap2.updateSamplingMode(_e.BILINEAR_SAMPLINGMODE)),this.useKernelBlur?(this._kernelBlurXPostprocess=new Fa(this._light.name+"KernelBlurX",new Fe(1,0),this.blurKernel,1,null,_e.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 Fa(this._light.name+"KernelBlurY",new Fe(0,1),this.blurKernel,1,null,_e.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,_e.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(S)):(r.getMeshUniformBuffer().bindToEffect(v,"Mesh"),r.transferToEffect(E?S: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(_e.NEAREST_SAMPLINGMODE):this._shadowMap.updateSamplingMode(_e.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,p=!1,_=!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 S=(o=r.alphaCutOff)!=null?o:n.DEFAULT_ALPHA_CUTOFF;a.push("#define ALPHATEXTURE"),g&&a.push(`#define ALPHATESTVALUE ${S}${S%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"),p=!0)}let v=new Wn;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 S=d.skeleton;a.push("#define NUM_BONE_INFLUENCERS "+d.numBoneInfluencers),d.numBoneInfluencers>0&&v.addCPUSkinningFallback(0,d),S.isUsingTextureForMatrices?a.push("#define BONETEXTURE"):a.push("#define BonesPerMesh "+(S.bones.length+1))}else a.push("#define NUM_BONE_INFLUENCERS 0");let x=d.morphTargetManager?ll(d.morphTargetManager,a,h,d,!0,u,!1,m,p,_):0;if(al(r,this._scene,a),t&&(a.push("#define INSTANCES"),_o(h),e.getRenderingMesh().hasThinInstances&&a.push("#define THIN_INSTANCES")),this.customShaderOptions&&this.customShaderOptions.defines)for(let S of this.customShaderOptions.defines)a.indexOf(S)===-1&&a.push(S);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 S="shadowMap",R=["world","mBones","viewProjection","diffuseMatrix","lightDataSM","depthValuesSM","biasAndScaleSM","morphTargetInfluences","morphTargetCount","boneTextureInfo","softTransparentShadowSM","morphTargetTextureInfo","morphTargetTextureIndices","bakedVertexAnimationSettings","bakedVertexAnimationTextureSizeInverted","bakedVertexAnimationTime","bakedVertexAnimationTexture"],I=["diffuseSampler","boneSampler","morphTargets","bakedVertexAnimationTexture"],C=["Scene","Mesh"];if(wn(R),this.customShaderOptions){if(S=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 y=this._scene.getEngine();c=y.createEffect(S,{attributes:h,uniformsNames:R,uniformBuffersNames:C,samplers:I,defines:E,fallbacks:v,onCompiled:null,onError:null,indexParameters:{maxSimultaneousMorphTargets:x},shaderLanguage:this._shaderLanguage},y),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?XC(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),j.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 Ze("ShadowGeneratorSceneComponent")}});var FX={};tt(FX,{depthPixelShader:()=>Zce});var UL,wX,Zce,BL=M(()=>{G();Sc();vR();Tc();UL="depthPixelShader",wX=`#ifdef ALPHATEST +`;A.IncludesShadersStore[kL]||(A.IncludesShadersStore[kL]=HX);hfe={name:kL,shader:HX}});var Pi,RR=M(()=>{Ge();zt();ki();yf();Vr();_f();jl();DL();di();hn();Lf();SA();kh();ll();Vn();cg();Pi=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 ie,this.onAfterShadowMapRenderObservable=new ie,this.onBeforeShadowMapRenderMeshObservable=new ie,this.onAfterShadowMapRenderMeshObservable=new ie,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=j.Zero(),this._projectionMatrix=j.Zero(),this._transformMatrix=j.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=j.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 Gr(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 Gr(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),p=d.needAlphaBlendingForMesh(c);o=this.isReady(l,m,p)&&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(),Ma.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),Ma.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=Aa.MIN_RENDERINGGROUPS;r(J4(),$4)),Promise.resolve().then(()=>(lX(),oX)),Promise.resolve().then(()=>(hX(),fX)),Promise.resolve().then(()=>(mX(),uX))])):await Promise.all([Promise.resolve().then(()=>(xX(),AX)),Promise.resolve().then(()=>(VX(),UX)),Promise.resolve().then(()=>(WX(),kX)),Promise.resolve().then(()=>(XX(),zX))]),this._shadersLoaded=!0}_initializeBlurRTTAndPostProcesses(){let e=this._scene.getEngine(),t=this._mapSize/this.blurScale;(!this.useKernelBlur||this.blurScale!==1)&&(this._shadowMap2=new Gr(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 Fa(this._light.name+"KernelBlurX",new Fe(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 Fa(this._light.name+"KernelBlurY",new Fe(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(S)):(r.getMeshUniformBuffer().bindToEffect(v,"Mesh"),r.transferToEffect(E?S:T))}),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,p=!1,_=!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 S=(o=r.alphaCutOff)!=null?o:n.DEFAULT_ALPHA_CUTOFF;a.push("#define ALPHATEXTURE"),g&&a.push(`#define ALPHATESTVALUE ${S}${S%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"),p=!0)}let v=new Hn;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 S=d.skeleton;a.push("#define NUM_BONE_INFLUENCERS "+d.numBoneInfluencers),d.numBoneInfluencers>0&&v.addCPUSkinningFallback(0,d),S.isUsingTextureForMatrices?a.push("#define BONETEXTURE"):a.push("#define BonesPerMesh "+(S.bones.length+1))}else a.push("#define NUM_BONE_INFLUENCERS 0");let x=d.morphTargetManager?cl(d.morphTargetManager,a,h,d,!0,u,!1,m,p,_):0;if(ol(r,this._scene,a),t&&(a.push("#define INSTANCES"),go(h),e.getRenderingMesh().hasThinInstances&&a.push("#define THIN_INSTANCES")),this.customShaderOptions&&this.customShaderOptions.defines)for(let S of this.customShaderOptions.defines)a.indexOf(S)===-1&&a.push(S);let T=d.bakedVertexAnimationManager;T&&T.isEnabled&&(a.push("#define BAKED_VERTEX_ANIMATION_TEXTURE"),t&&h.push("bakedVertexAnimationSettingsInstanced"));let E=a.join(` +`);if(f!==E){f=E;let S="shadowMap",R=["world","mBones","viewProjection","diffuseMatrix","lightDataSM","depthValuesSM","biasAndScaleSM","morphTargetInfluences","morphTargetCount","boneTextureInfo","softTransparentShadowSM","morphTargetTextureInfo","morphTargetTextureIndices","bakedVertexAnimationSettings","bakedVertexAnimationTextureSizeInverted","bakedVertexAnimationTime","bakedVertexAnimationTexture"],I=["diffuseSampler","boneSampler","morphTargets","bakedVertexAnimationTexture"],C=["Scene","Mesh"];if(Fn(R),this.customShaderOptions){if(S=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 y=this._scene.getEngine();c=y.createEffect(S,{attributes:h,uniformsNames:R,uniformBuffersNames:C,samplers:I,defines:E,fallbacks:v,onCompiled:null,onError:null,indexParameters:{maxSimultaneousMorphTargets:x},shaderLanguage:this._shaderLanguage},y),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?ZC(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),j.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 Ze("ShadowGeneratorSceneComponent")}});var KX={};tt(KX,{depthPixelShader:()=>dfe});var WL,YX,dfe,HL=M(()=>{G();Sc();xR();Tc();WL="depthPixelShader",YX=`#ifdef ALPHATEST varying vec2 vUV;uniform sampler2D diffuseSampler; #endif #include @@ -10502,10 +10502,10 @@ gl_FragColor=vec4(vDepthMetric,0.0,0.0,1.0); #endif #endif #endif -}`;T.ShadersStore[UL]||(T.ShadersStore[UL]=wX);Zce={name:UL,shader:wX}});var UX,Qce,BX=M(()=>{G();UX="pointCloudVertexDeclaration",Qce=`#ifdef POINTSIZE +}`;A.ShadersStore[WL]||(A.ShadersStore[WL]=YX);dfe={name:WL,shader:YX}});var jX,ufe,qX=M(()=>{G();jX="pointCloudVertexDeclaration",ufe=`#ifdef POINTSIZE uniform float pointSize; #endif -`;T.IncludesShadersStore[UX]||(T.IncludesShadersStore[UX]=Qce)});var GX={};tt(GX,{depthVertexShader:()=>$ce});var VL,VX,$ce,GL=M(()=>{G();uc();mc();kf();Wf();pc();wf();BX();Hf();zf();_c();gc();vc();Ec();nL();VL="depthVertexShader",VX=`attribute vec3 position; +`;A.IncludesShadersStore[jX]||(A.IncludesShadersStore[jX]=ufe)});var QX={};tt(QX,{depthVertexShader:()=>mfe});var zL,ZX,mfe,XL=M(()=>{G();uc();mc();kf();Wf();pc();wf();qX();Hf();zf();_c();gc();vc();Ec();cL();zL="depthVertexShader",ZX=`attribute vec3 position; #include #include #include @@ -10563,7 +10563,7 @@ vUV=vec2(diffuseMatrix*vec4(uv2Updated,1.0,0.0)); #endif #include } -`;T.ShadersStore[VL]||(T.ShadersStore[VL]=VX);$ce={name:VL,shader:VX}});var WX={};tt(WX,{depthVertexShaderWGSL:()=>Jce});var kL,kX,Jce,HX=M(()=>{G();nc();sc();Uf();Bf();ac();Nf();Vf();Gf();oc();lc();cc();fc();kL="depthVertexShader",kX=`attribute position: vec3f; +`;A.ShadersStore[zL]||(A.ShadersStore[zL]=ZX);mfe={name:zL,shader:ZX}});var JX={};tt(JX,{depthVertexShaderWGSL:()=>pfe});var YL,$X,pfe,e5=M(()=>{G();nc();sc();Bf();Uf();ac();Nf();Vf();Gf();oc();lc();cc();fc();YL="depthVertexShader",$X=`attribute position: vec3f; #include #include #include @@ -10619,7 +10619,7 @@ vertexOutputs.vUV= (uniforms.diffuseMatrix* vec4f(uv2Updated,1.0,0.0)).xy; #endif #endif } -`;T.ShadersStoreWGSL[kL]||(T.ShadersStoreWGSL[kL]=kX);Jce={name:kL,shader:kX}});var XX={};tt(XX,{depthPixelShaderWGSL:()=>efe});var WL,zX,efe,YX=M(()=>{G();hc();gR();dc();WL="depthPixelShader",zX=`#ifdef ALPHATEST +`;A.ShadersStoreWGSL[YL]||(A.ShadersStoreWGSL[YL]=$X);pfe={name:YL,shader:$X}});var i5={};tt(i5,{depthPixelShaderWGSL:()=>_fe});var KL,t5,_fe,r5=M(()=>{G();hc();AR();dc();KL="depthPixelShader",t5=`#ifdef ALPHATEST varying vUV: vec2f;var diffuseSamplerSampler: sampler;var diffuseSampler: texture_2d; #endif #include @@ -10658,8 +10658,8 @@ fragmentOutputs.color= vec4f(input.vDepthMetric,0.0,0.0,1.0); #endif #endif #endif -}`;T.ShadersStoreWGSL[WL]||(T.ShadersStoreWGSL[WL]=zX);efe={name:WL,shader:zX}});var $m,KX=M(()=>{zt();ki();Vr();_f();sl();BL();GL();hn();ol();Bn();Lf();$m=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=_e.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!==_e.NEAREST_SAMPLINGMODE&&(t===1&&!c._caps.textureFloatLinearFiltering&&(s=_e.NEAREST_SAMPLINGMODE),t===2&&!c._caps.textureHalfFloatLinearFiltering&&(s=_e.NEAREST_SAMPLINGMODE));let f=this.isPacked||!c._features.supportExtendedTextureFormats?5:6;this._depthMap=l!=null?l:new Gr(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=_e.CLAMP_ADDRESSMODE,this._depthMap.wrapV=_e.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 p=0;p{var I;let u=d.getRenderingMesh(),m=d.getEffectiveMesh(),p=this._scene,_=p.getEngine(),g=d.getMaterial();if(m._internalAbstractMeshDataInfo._isActiveIntermediate=!1,!g||m.infiniteDistance||g.disableDepthWrite||d.verticesCount===0||d._renderId===p.getRenderId())return;let v=m._getWorldMatrixDeterminant()<0,x=g._getEffectiveOrientation(u);v&&(x=x===0?1:0);let A=x===0;_.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 S=_.getCaps().instancedArrays&&(E.visibleInstances[d._id]!==null&&E.visibleInstances[d._id]!==void 0||u.hasThinInstances),R=this._camera||p.activeCamera;if(this.isReady(d,S)&&R){if(d._renderId=p.getRenderId(),m.getClassName()==="GaussianSplattingMesh"){let B=this._ensureGaussianSplattingDepthMaterial(m,_.currentRenderPassId);if(B&&!B.isReadyForSubMesh(m,d,S))return;this.alphaBlendedDepth&&g.needAlphaBlendingForMesh(m)?_.setAlphaMode(2):_.setAlphaMode(0),m.render(d,!1);return}let y=(I=m._internalAbstractMeshDataInfo._materialForRenderPass)==null?void 0:I[_.currentRenderPassId],D=d._getDrawWrapper();!D&&y&&(D=y._getDrawWrapper());let O=R.mode===mt.ORTHOGRAPHIC_CAMERA;if(!D)return;let V=D.effect;_.enableEffect(D),S||u._bind(d,V,g.fillMode),y?y.bindForSubMesh(m.getWorldMatrix(),m,d):(V.setMatrix("viewProjection",p.getTransformMatrix()),V.setMatrix("world",m.getWorldMatrix()),this._storeCameraSpaceZ&&V.setMatrix("view",p.getViewMatrix()));let N,w;if(O?(N=!_.useReverseDepthBuffer&&_.isNDCHalfZRange?0:1,w=_.useReverseDepthBuffer&&_.isNDCHalfZRange?0:1):(N=_.useReverseDepthBuffer&&_.isNDCHalfZRange?R.minZ:_.isNDCHalfZRange?0:R.minZ,w=_.useReverseDepthBuffer&&_.isNDCHalfZRange?0:R.maxZ),V.setFloat2("depthValues",N,N+w),!y){if(g.needAlphaTestingForMesh(m)){let W=g.getAlphaTestTexture();W&&(V.setTexture("diffuseSampler",W),V.setMatrix("diffuseMatrix",W.getTextureMatrix()))}Ms(u,V),Fn(V,g,p),Un(u,V),u.morphTargetManager&&u.morphTargetManager.isUsingTextureForTargets&&u.morphTargetManager._bind(V);let B=d.getMesh().bakedVertexAnimationManager;B&&B.isEnabled&&B.bind(V,S),g.pointsCloud&&V.setFloat("pointSize",g.pointSize)}this.alphaBlendedDepth&&g.needAlphaBlendingForMesh(m)?_.setAlphaMode(2):_.setAlphaMode(0),u._processRendering(m,d,V,g.fillMode,E,S,(B,W)=>V.setMatrix("world",W))}};this._depthMap.customRenderFunction=(d,u,m,p)=>{let _=this._scene.getEngine(),g=_.getAlphaMode(),v;if(p.length)for(v=0;v(HX(),WX)),Promise.resolve().then(()=>(YX(),XX))])):await Promise.all([Promise.resolve().then(()=>(GL(),GX)),Promise.resolve().then(()=>(BL(),FX))]),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 Wn;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 C=r.skeleton;C.isUsingTextureForMatrices?c.push("#define BONETEXTURE"):c.push("#define BonesPerMesh "+(C.bones.length+1))}else c.push("#define NUM_BONE_INFLUENCERS 0");let p=r.morphTargetManager?ll(r.morphTargetManager,c,f,r,!0,!1,!1,h,d,u):0;l.pointsCloud&&c.push("#define POINTSIZE"),t&&(c.push("#define INSTANCES"),_o(f),e.getRenderingMesh().hasThinInstances&&c.push("#define THIN_INSTANCES"));let _=r.bakedVertexAnimationManager;_&&_.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"),al(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,S=c.join(` -`);if(E!==S){let C=["world","mBones","boneTextureInfo","pointSize","viewProjection","view","diffuseMatrix","depthValues","morphTargetInfluences","morphTargetCount","morphTargetTextureInfo","morphTargetTextureIndices","bakedVertexAnimationSettings","bakedVertexAnimationTextureSizeInverted","bakedVertexAnimationTime","bakedVertexAnimationTexture"],y=["diffuseSampler","morphTargets","boneSampler","bakedVertexAnimationTexture"];wn(C),A.setEffect(i.createEffect("depth",{attributes:f,uniformsNames:C,uniformBuffersNames:[],samplers:y,defines:S,fallbacks:m,onCompiled:null,onError:null,indexParameters:{maxSimultaneousMorphTargets:p},shaderLanguage:this._shaderLanguage},i),S)}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]}}};$m.ForceGLSL=!1;$m._SceneComponentInitialization=n=>{throw Ze("DepthRendererSceneComponent")}});var qX={};tt(qX,{minmaxReduxPixelShaderWGSL:()=>tfe});var HL,jX,tfe,zL=M(()=>{G();HL="minmaxReduxPixelShader",jX=`varying vUV: vec2f;var textureSampler: texture_2d; +}`;A.ShadersStoreWGSL[KL]||(A.ShadersStoreWGSL[KL]=t5);_fe={name:KL,shader:t5}});var $m,n5=M(()=>{zt();ki();Vr();_f();al();HL();XL();hn();ll();Vn();Lf();$m=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 Gr(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 p=0;p{var I;let u=d.getRenderingMesh(),m=d.getEffectiveMesh(),p=this._scene,_=p.getEngine(),g=d.getMaterial();if(m._internalAbstractMeshDataInfo._isActiveIntermediate=!1,!g||m.infiniteDistance||g.disableDepthWrite||d.verticesCount===0||d._renderId===p.getRenderId())return;let v=m._getWorldMatrixDeterminant()<0,x=g._getEffectiveOrientation(u);v&&(x=x===0?1:0);let T=x===0;_.setState(g.backFaceCulling,0,!1,T,this.reverseCulling?!g.cullBackFaces:g.cullBackFaces);let E=u._getInstancesRenderList(d._id,!!d.getReplacementMesh());if(E.mustReturn)return;let S=_.getCaps().instancedArrays&&(E.visibleInstances[d._id]!==null&&E.visibleInstances[d._id]!==void 0||u.hasThinInstances),R=this._camera||p.activeCamera;if(this.isReady(d,S)&&R){if(d._renderId=p.getRenderId(),m.getClassName()==="GaussianSplattingMesh"){let U=this._ensureGaussianSplattingDepthMaterial(m,_.currentRenderPassId);if(U&&!U.isReadyForSubMesh(m,d,S))return;this.alphaBlendedDepth&&g.needAlphaBlendingForMesh(m)?_.setAlphaMode(2):_.setAlphaMode(0),m.render(d,!1);return}let y=(I=m._internalAbstractMeshDataInfo._materialForRenderPass)==null?void 0:I[_.currentRenderPassId],D=d._getDrawWrapper();!D&&y&&(D=y._getDrawWrapper());let O=R.mode===mt.ORTHOGRAPHIC_CAMERA;if(!D)return;let V=D.effect;_.enableEffect(D),S||u._bind(d,V,g.fillMode),y?y.bindForSubMesh(m.getWorldMatrix(),m,d):(V.setMatrix("viewProjection",p.getTransformMatrix()),V.setMatrix("world",m.getWorldMatrix()),this._storeCameraSpaceZ&&V.setMatrix("view",p.getViewMatrix()));let N,w;if(O?(N=!_.useReverseDepthBuffer&&_.isNDCHalfZRange?0:1,w=_.useReverseDepthBuffer&&_.isNDCHalfZRange?0:1):(N=_.useReverseDepthBuffer&&_.isNDCHalfZRange?R.minZ:_.isNDCHalfZRange?0:R.minZ,w=_.useReverseDepthBuffer&&_.isNDCHalfZRange?0:R.maxZ),V.setFloat2("depthValues",N,N+w),!y){if(g.needAlphaTestingForMesh(m)){let W=g.getAlphaTestTexture();W&&(V.setTexture("diffuseSampler",W),V.setMatrix("diffuseMatrix",W.getTextureMatrix()))}Ps(u,V),Bn(V,g,p),Un(u,V),u.morphTargetManager&&u.morphTargetManager.isUsingTextureForTargets&&u.morphTargetManager._bind(V);let U=d.getMesh().bakedVertexAnimationManager;U&&U.isEnabled&&U.bind(V,S),g.pointsCloud&&V.setFloat("pointSize",g.pointSize)}this.alphaBlendedDepth&&g.needAlphaBlendingForMesh(m)?_.setAlphaMode(2):_.setAlphaMode(0),u._processRendering(m,d,V,g.fillMode,E,S,(U,W)=>V.setMatrix("world",W))}};this._depthMap.customRenderFunction=(d,u,m,p)=>{let _=this._scene.getEngine(),g=_.getAlphaMode(),v;if(p.length)for(v=0;v(e5(),JX)),Promise.resolve().then(()=>(r5(),i5))])):await Promise.all([Promise.resolve().then(()=>(XL(),QX)),Promise.resolve().then(()=>(HL(),KX))]),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 Hn;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 C=r.skeleton;C.isUsingTextureForMatrices?c.push("#define BONETEXTURE"):c.push("#define BonesPerMesh "+(C.bones.length+1))}else c.push("#define NUM_BONE_INFLUENCERS 0");let p=r.morphTargetManager?cl(r.morphTargetManager,c,f,r,!0,!1,!1,h,d,u):0;l.pointsCloud&&c.push("#define POINTSIZE"),t&&(c.push("#define INSTANCES"),go(f),e.getRenderingMesh().hasThinInstances&&c.push("#define THIN_INSTANCES"));let _=r.bakedVertexAnimationManager;_&&_.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"),ol(l,s,c);let g=i.currentRenderPassId,x=this._depthMap.renderPassIds.includes(g)?g:this._depthMap.renderPassId,T=e._getDrawWrapper(x,!0),E=T.defines,S=c.join(` +`);if(E!==S){let C=["world","mBones","boneTextureInfo","pointSize","viewProjection","view","diffuseMatrix","depthValues","morphTargetInfluences","morphTargetCount","morphTargetTextureInfo","morphTargetTextureIndices","bakedVertexAnimationSettings","bakedVertexAnimationTextureSizeInverted","bakedVertexAnimationTime","bakedVertexAnimationTexture"],y=["diffuseSampler","morphTargets","boneSampler","bakedVertexAnimationTexture"];Fn(C),T.setEffect(i.createEffect("depth",{attributes:f,uniformsNames:C,uniformBuffersNames:[],samplers:y,defines:S,fallbacks:m,onCompiled:null,onError:null,indexParameters:{maxSimultaneousMorphTargets:p},shaderLanguage:this._shaderLanguage},i),S)}return T.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]}}};$m.ForceGLSL=!1;$m._SceneComponentInitialization=n=>{throw Ze("DepthRendererSceneComponent")}});var a5={};tt(a5,{minmaxReduxPixelShaderWGSL:()=>gfe});var jL,s5,gfe,qL=M(()=>{G();jL="minmaxReduxPixelShader",s5=`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; @@ -10688,7 +10688,7 @@ fn main(input: FragmentInputs)->FragmentOutputs {let coord=vec2i(fragmentInputs. fn main(input: FragmentInputs)->FragmentOutputs {fragmentOutputs.color=vec4f(0.);if (true) { discard;}} #endif -`;T.ShadersStoreWGSL[HL]||(T.ShadersStoreWGSL[HL]=jX);tfe={name:HL,shader:jX}});var QX={};tt(QX,{minmaxReduxPixelShader:()=>ife});var XL,ZX,ife,YL=M(()=>{G();XL="minmaxReduxPixelShader",ZX=`varying vec2 vUV;uniform sampler2D textureSampler; +`;A.ShadersStoreWGSL[jL]||(A.ShadersStoreWGSL[jL]=s5);gfe={name:jL,shader:s5}});var l5={};tt(l5,{minmaxReduxPixelShader:()=>vfe});var ZL,o5,vfe,QL=M(()=>{G();ZL="minmaxReduxPixelShader",o5=`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; @@ -10717,12 +10717,12 @@ void main(void) {glFragColor=vec4(0.);if (true) { discard;}} #endif -`;T.ShadersStore[XL]||(T.ShadersStore[XL]=ZX);ife={name:XL,shader:ZX}});var $X,Xf,rfe,nfe,To,SR,JX=M(()=>{di();Wh();Oi();(function(n){n[n.NormalizedViewDepth=0]="NormalizedViewDepth",n[n.ViewDepth=1]="ViewDepth",n[n.ScreenDepth=2]="ScreenDepth"})($X||($X={}));Xf=class n extends Xr{_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.resolve().then(()=>(zL(),qX)))):t.push(Promise.resolve().then(()=>(YL(),QX)))}constructor(e,t=null,i="",r){super({...r,name:e,engine:t||Oe.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)}};Xf.FragmentUrl="minmaxRedux";Xf.Uniforms=["texSize"];rfe=new Float32Array(4),nfe=new Uint8Array(4),To={min:0,max:0},SR=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 ie,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?rfe:nfe;this._scene.getEngine()._readTexturePixels(e,1,1,-1,0,i,!1),To.min=i[0],To.max=i[1],t||(To.min=To.min/255,To.max=To.max/255),To.min>=To.max&&(To.min=0,To.max=1),this.onAfterReductionPerformed.notifyObservers(To)}dispose(e=!0){e&&(this.onAfterReductionPerformed.clear(),this._textureWidth=0,this._textureHeight=0);for(let t=0;t{di();Wh();Ni();(function(n){n[n.NormalizedViewDepth=0]="NormalizedViewDepth",n[n.ViewDepth=1]="ViewDepth",n[n.ScreenDepth=2]="ScreenDepth"})(c5||(c5={}));Xf=class n extends Xr{_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.resolve().then(()=>(qL(),a5)))):t.push(Promise.resolve().then(()=>(QL(),l5)))}constructor(e,t=null,i="",r){super({...r,name:e,engine:t||Oe.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)}};Xf.FragmentUrl="minmaxRedux";Xf.Uniforms=["texSize"];Efe=new Float32Array(4),Sfe=new Uint8Array(4),Ao={min:0,max:0},bR=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 ie,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?Efe:Sfe;this._scene.getEngine()._readTexturePixels(e,1,1,-1,0,i,!1),Ao.min=i[0],Ao.max=i[1],t||(Ao.min=Ao.min/255,Ao.max=Ao.max/255),Ao.min>=Ao.max&&(Ao.min=0,Ao.max=1),this.onAfterReductionPerformed.notifyObservers(Ao)}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 Xf("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 TR,e5=M(()=>{jl();uA();JX();YL();zL();TR=class{get onAfterReductionPerformed(){return this._thinMinMaxReducer.onAfterReductionPerformed}constructor(e){this._onAfterUnbindObserver=null,this._forceFullscreenViewport=!0,this._activated=!1,this._camera=e,this._postProcessManager=new Kl(e.getScene()),this._thinMinMaxReducer=new SR(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{KX();e5();AR=class extends TR{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 $m(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 i5,sfe,br,Jm,xR,Ao,r5=M(()=>{Ge();_f();hn();ER();_m();t5();Pt();Oi();lg();i5=b.Up(),sfe=b.Zero(),br=new b,Jm=new b,xR=new j,Ao=class n extends yi{_validateFilter(e){return e===yi.FILTER_NONE||e===yi.FILTER_PCF||e===yi.FILTER_PCSS?e:(ee.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))),j.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(sfe,this._transformMatrices[r],br),br.scaleInPlace(this._mapSize/2),Jm.copyFromFloats(Math.round(br.x),Math.round(br.y),Math.round(br.z)),Jm.subtractInPlace(br).scaleInPlace(2/this._mapSize),j.TranslationToRef(Jm.x,Jm.y,0,xR),this._projectionMatrices[r].multiplyToRef(xR,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=j.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),Ma.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?dB(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}};Ao._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)];Ao.CLASSNAME="CascadedShadowGenerator";Ao.DEFAULT_CASCADES_COUNT=4;Ao.MIN_CASCADES_COUNT=2;Ao.MAX_CASCADES_COUNT=4;Ao._SceneComponentInitialization=n=>{throw Ze("ShadowGeneratorSceneComponent")}});function RR(n,e){afe[n]=e}var afe,KL=M(()=>{afe={}});var jL,n5=M(()=>{ER();r5();lm();KL();RR(et.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(et.NAME_SHADOWGENERATOR);e||(e=new jL(n),n._addComponent(e))}});async function s5(n,e){let t=e.method||"GET";return await new Promise((i,r)=>{let s=new Mr;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 a5=M(()=>{Bh()});function ofe(n){return!!n.createPlugin}function lfe(n){return!!n.name}function bR(){return dl[".babylon"]}function cfe(n){for(let e in dl){let t=dl[e];if(t.mimeType===n)return t}}function ZL(n,e){let t=dl[n];return t||(ee.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?bR():void 0)}function ffe(n){return!!dl[n]}function hfe(n){for(let e in dl){let t=dl[e].plugin;if(t.canDirectLoad&&t.canDirectLoad(n))return dl[e]}return bR()}function dfe(n){let e=n.indexOf("?");e!==-1&&(n=n.substring(0,e));let t=n.lastIndexOf(".");return n.substring(t,n.length).toLowerCase()}function ufe(n){return n.substring(0,5)==="data:"?n.substring(5):null}function QL(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 $L(n,e,t,i,r,s,a,o,l){var u;let c=ufe(n.url);if(n.rawData&&!a)throw"When using ArrayBufferView to load data the file extension must be provided.";let f=!c&&!a?dfe(n.url):"",h=a?ZL(a,!0):c?hfe(n.url):ZL(f,!1);if(!h&&f){if(n.url&&!n.url.startsWith("blob:")){let m=await s5(n.url,{method:"HEAD",responseHeaders:["Content-Type"]}),p=m.headerValues?m.headerValues["Content-Type"]:"";p&&(h=cfe(p))}h||(h=bR())}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(ofe(h.plugin)){let _=h.plugin.createPlugin(l!=null?l:{});return _ instanceof Promise?(_.then(m).catch(g=>{r("Error instantiating plugin.",g)}),null):(m(_),_)}else return m(h.plugin),h.plugin})(m=>{var S;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(l5.notifyObservers(m),c&&(m.canDirectLoad&&m.canDirectLoad(n.url)||!ff(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 p=h.isBinary,_=(R,I)=>{if(e.isDisposed){r("Scene has been disposed");return}t(m,R,I)},g=null,v=!1;(S=m.onDisposeObservable)==null||S.add(()=>{v=!0,g&&(g.abort(),g=null),s()});let x=()=>{if(v)return;let R=(I,C)=>{r(I==null?void 0:I.statusText,C)};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,_,i,p,R,o):e._loadFile(n.file||n.url,_,i,!0,p,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&&Me.OfflineProviderFactory?e.offlineProvider=Me.OfflineProviderFactory(n.url,x,A.disableManifestCheck):x()})}function JL(n,e){let t,i,r=null,s=null;if(!e)t=n,i=pe.GetFilename(n),n=pe.GetFolderPath(n);else if(lfe(e))t=`file:${e.name}`,i=e.name,r=e;else if(ArrayBuffer.isView(e))t="",i=lf(),s=e;else if(e.startsWith("data:"))t=e,i="";else if(n){let a=e;if(a.substring(0,1)==="/")return pe.Error("Wrong sceneFilename parameter"),null;t=n+a,i=a}else t=e,i=pe.GetFilename(e),n=pe.GetFolderPath(e);return{url:t,rootUrl:n,name:i,file:r,rawData:s}}function Yf(n){if(typeof n.extensions=="string"){let e=n.extensions;dl[e.toLowerCase()]={plugin:n,isBinary:!1}}else{let e=n.extensions,t=Object.keys(e);for(let i of t)dl[i.toLowerCase()]={plugin:n,isBinary:e[i].isBinary,mimeType:e[i].mimeType}}}async function Yg(n,e,t){let{meshNames:i,rootUrl:r="",onProgress:s,pluginExtension:a,name:o,pluginOptions:l}=t!=null?t:{};return await f5(i,r,n,e,s,a,o,l)}async function c5(n,e,t="",i=Oe.LastCreatedScene,r=null,s=null,a=null,o=null,l="",c={}){if(!i)return ee.Error("No scene available to import mesh to"),null;let f=JL(e,t);if(!f)return null;let h={};i.addPendingData(h);let d=()=>{i.removePendingData(h)},u=(_,g)=>{let v=QL(f,_,g);a?a(i,v,new Rs(v,Ta.SceneLoaderError,g)):ee.Error(v),d()},m=s?_=>{try{s(_)}catch(g){u("Error in onProgress callback: "+g,g)}}:void 0,p=(_,g,v,x,A,E,S,R)=>{if(i.importedMeshesFiles.push(f.url),r)try{r(_,g,v,x,A,E,S,R)}catch(I){u("Error in onSuccess callback: "+I,I)}i.removePendingData(h)};return await $L(f,i,(_,g,v)=>{if(_.rewriteRootURL&&(f.rootUrl=_.rewriteRootURL(f.rootUrl,v)),_.importMesh){let x=_,A=[],E=[],S=[];if(!x.importMesh(n,i,g,f.rootUrl,A,E,S,u))return;i.loadingPluginName=_.name,p(A,E,S,[],[],[],[],[])}else _.importMeshAsync(n,i,g,f.rootUrl,m,f.name).then(A=>{i.loadingPluginName=_.name,p(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 f5(n,e,t,i,r,s,a,o){return await new Promise((l,c)=>{try{c5(n,e,t,i,(f,h,d,u,m,p,_,g)=>{l({meshes:f,particleSystems:h,skeletons:d,animationGroups:u,transformNodes:m,geometries:p,lights:_,spriteManagers:g})},r,(f,h,d)=>{c(d||new Error(h))},s,a,o).catch(c)}catch(f){c(f)}})}async function h5(n,e="",t=Oe.LastCreatedEngine,i=null,r=null,s=null,a=null,o="",l={}){if(!t){pe.Error("No engine available");return}await eD(n,e,new Jt(t),i,r,s,a,o,l)}async function mfe(n,e,t,i,r,s,a){return await new Promise((o,l)=>{h5(n,e,t,c=>{o(c)},i,(c,f,h)=>{l(h||new Error(f))},r,s,a)})}async function eD(n,e="",t=Oe.LastCreatedScene,i=null,r=null,s=null,a=null,o="",l={}){if(!t)return ee.Error("No scene available to append to"),null;let c=JL(n,e);if(!c)return null;let f={};t.addPendingData(f);let h=()=>{t.removePendingData(f)};Yr.ShowLoadingScreen&&!qL&&(qL=!0,t.getEngine().displayLoadingUI(),t.executeWhenReady(()=>{t.getEngine().hideLoadingUI(),qL=!1}));let d=(p,_)=>{let g=QL(c,p,_);s?s(t,g,new Rs(g,Ta.SceneLoaderError,_)):ee.Error(g),h()},u=r?p=>{try{r(p)}catch(_){d("Error in onProgress callback",_)}}:void 0,m=()=>{if(i)try{i(t)}catch(p){d("Error in onSuccess callback",p)}t.removePendingData(f)};return await $L(c,t,(p,_)=>{if(p.load){if(!p.load(t,_,c.rootUrl,d))return;t.loadingPluginName=p.name,m()}else p.loadAsync(t,_,c.rootUrl,u,c.name).then(()=>{t.loadingPluginName=p.name,m()}).catch(v=>{d(v.message,v)})},u,d,h,a,o,l)}async function pfe(n,e,t,i,r,s,a){return await new Promise((o,l)=>{try{eD(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 tD(n,e="",t=Oe.LastCreatedScene,i=null,r=null,s=null,a=null,o="",l={}){if(!t)return ee.Error("No scene available to load asset container to"),null;let c=JL(n,e);if(!c)return null;let f={};t.addPendingData(f);let h=()=>{t.removePendingData(f)},d=(p,_)=>{let g=QL(c,p,_);s?s(t,g,new Rs(g,Ta.SceneLoaderError,_)):ee.Error(g),h()},u=r?p=>{try{r(p)}catch(_){d("Error in onProgress callback",_)}}:void 0,m=p=>{if(i)try{i(p)}catch(_){d("Error in onSuccess callback",_)}t.removePendingData(f)};return await $L(c,t,(p,_)=>{if(p.loadAssetContainer){let v=p.loadAssetContainer(t,_,c.rootUrl,d);if(!v)return;v.populateRootNodes(),t.loadingPluginName=p.name,m(v)}else p.loadAssetContainerAsync?p.loadAssetContainerAsync(t,_,c.rootUrl,u,c.name).then(v=>{v.populateRootNodes(),t.loadingPluginName=p.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 _fe(n,e,t,i,r,s,a){return await new Promise((o,l)=>{try{tD(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 d5(n,e="",t=Oe.LastCreatedScene,i=!0,r=0,s=null,a=null,o=null,l=null,c=null,f="",h={}){if(!t){ee.Error("No scene available to load animations to");return}if(i){for(let _ of t.animatables)_.reset();t.stopAllAnimations();let m=t.animationGroups.slice();for(let _ of m)_.dispose();let p=t.getNodes();for(let _ of p)_.animations&&(_.animations=[])}else switch(r){case 0:let m=t.animationGroups.slice();for(let p of m)p.dispose();break;case 1:for(let p of t.animationGroups)p.stop();break;case 2:for(let p of t.animationGroups)p.reset(),p.restart();break;case 3:break;default:ee.Error("Unknown animation group loading mode value '"+r+"'");return}let d=t.animatables.length;await tD(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 gfe(n,e,t,i,r,s,a,o,l,c){return await new Promise((f,h)=>{try{d5(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 o5,l5,dl,qL,od,ep=M(()=>{Mi();di();bs();Oi();Pt();YA();zl();K_();Y_();Br();a5();(function(n){n[n.Clean=0]="Clean",n[n.Stop=1]="Stop",n[n.Sync=2]="Sync",n[n.NoSync=3]="NoSync"})(o5||(o5={}));l5=new ie,dl={},qL=!1;od=class{static get ForceFullSceneLoadingForIncremental(){return Yr.ForceFullSceneLoadingForIncremental}static set ForceFullSceneLoadingForIncremental(e){Yr.ForceFullSceneLoadingForIncremental=e}static get ShowLoadingScreen(){return Yr.ShowLoadingScreen}static set ShowLoadingScreen(e){Yr.ShowLoadingScreen=e}static get loggingLevel(){return Yr.loggingLevel}static set loggingLevel(e){Yr.loggingLevel=e}static get CleanBoneMatrixWeights(){return Yr.CleanBoneMatrixWeights}static set CleanBoneMatrixWeights(e){Yr.CleanBoneMatrixWeights=e}static GetDefaultPlugin(){return bR()}static GetPluginForExtension(e){var t;return(t=ZL(e,!0))==null?void 0:t.plugin}static IsPluginForExtensionAvailable(e){return ffe(e)}static RegisterPlugin(e){Yf(e)}static ImportMesh(e,t,i,r,s,a,o,l,c,f){c5(e,t,i,r,s,a,o,l,c,f).catch(h=>o==null?void 0:o(Oe.LastCreatedScene,h==null?void 0:h.message,h))}static async ImportMeshAsync(e,t,i,r,s,a,o){return await f5(e,t,i,r,s,a,o)}static Load(e,t,i,r,s,a,o,l){h5(e,t,i,r,s,a,o,l).catch(c=>a==null?void 0:a(Oe.LastCreatedScene,c==null?void 0:c.message,c))}static async LoadAsync(e,t,i,r,s,a){return await mfe(e,t,i,r,s,a)}static Append(e,t,i,r,s,a,o,l){eD(e,t,i,r,s,a,o,l).catch(c=>a==null?void 0:a(i!=null?i:Oe.LastCreatedScene,c==null?void 0:c.message,c))}static async AppendAsync(e,t,i,r,s,a){return await pfe(e,t,i,r,s,a)}static LoadAssetContainer(e,t,i,r,s,a,o,l){tD(e,t,i,r,s,a,o,l).catch(c=>a==null?void 0:a(i!=null?i:Oe.LastCreatedScene,c==null?void 0:c.message,c))}static async LoadAssetContainerAsync(e,t,i,r,s,a){return await _fe(e,t,i,r,s,a)}static ImportAnimations(e,t,i,r,s,a,o,l,c,f,h){d5(e,t,i,r,s,a,o,l,c,f,h).catch(d=>c==null?void 0:c(i!=null?i:Oe.LastCreatedScene,d==null?void 0:d.message,d))}static async ImportAnimationsAsync(e,t,i,r,s,a,o,l,c,f,h){return await gfe(e,t,i,r,s,a,l,f,h)}};od.NO_LOGGING=0;od.MINIMAL_LOGGING=1;od.SUMMARY_LOGGING=2;od.DETAILED_LOGGING=3;od.OnPluginActivatedObservable=l5});var IR,iD,rD,ul,Kg=M(()=>{Ci();Zh();vm();Pt();Oi();TP();yf();sl();Mi();df();IR=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}},iD=class extends IR{},rD=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}},ul=class extends IR{constructor(e){super(),this._wasAddedToScene=!1,e=e||Oe.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 rc){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&&(ee.Error("SceneSerializer._topologicalSort: There were unvisited nodes:"),t.forEach(o=>{ee.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 Er&&this.meshes.indexOf(e)!==-1||e instanceof ei&&this.transformNodes.indexOf(e)!==-1||e instanceof Xt&&this.lights.indexOf(e)!==-1||e instanceof mt&&this.cameras.indexOf(e)!==-1}_isValidHierarchy(){for(let e of this.meshes)if(e.parent&&!this._isNodeInContainer(e.parent))return ee.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 ee.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 ee.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 ee.Warn(`Node ${e.name} has a parent that is not in the container.`),!1;return!0}instantiateModelsToScene(e,t=!1,i){this._isValidHierarchy()||pe.Warn("SceneSerializer.InstantiateModelsToScene: The Asset Container hierarchy is not valid.");let r={},s={},a=new rD,o=[],l=[],c={doNotInstantiate:!0,...i},f=(p,_)=>{if(r[p.uniqueId]=_.uniqueId,s[_.uniqueId]=_,e&&(_.name=e(p.name)),_ instanceof q){let g=_;if(g.morphTargetManager){let v=p.morphTargetManager;g.morphTargetManager=v.clone();for(let x=0;x{if(f(p,_),p.parent){let g=r[p.parent.uniqueId],v=s[g];v?_.parent=v:_.parent=p.parent}if(_.position&&p.position&&_.position.copyFrom(p.position),_.rotationQuaternion&&p.rotationQuaternion&&_.rotationQuaternion.copyFrom(p.rotationQuaternion),_.rotation&&p.rotation&&_.rotation.copyFrom(p.rotation),_.scaling&&p.scaling&&_.scaling.copyFrom(p.scaling),_.material){let g=_;if(g.material)if(t){let v=p.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)}_.parent===null&&a.rootNodes.push(_)};for(let p of u)if(p.getClassName()==="InstancedMesh"){let _=p,g=_.sourceMesh,v=r[g.uniqueId],A=(typeof v=="number"?s[v]:g).createInstance(_.name);m(_,A)}else{let _=!0;p.getClassName()==="TransformNode"||p.getClassName()==="Node"||p.skeleton||!p.getTotalVertices||p.getTotalVertices()===0?_=!1:c.doNotInstantiate&&(typeof c.doNotInstantiate=="function"?_=!c.doNotInstantiate(p):_=!c.doNotInstantiate);let g=_?p.createInstance(`instance of ${p.name}`):p.clone(`Clone of ${p.name}`,null,!0);if(!g)throw new Error(`Could not clone or instantiate node on Asset Container ${p.name}`);m(p,g)}for(let p of this.skeletons){if(c.predicate&&!c.predicate(p))continue;let _=p.clone(e?e(p.name):"Clone of "+p.name);for(let g of this.meshes)if(g.skeleton===p&&!g.isAnInstance){let v=s[r[g.uniqueId]];if(!v||v.isAnInstance||(v.skeleton=_,o.indexOf(_)!==-1))continue;o.push(_);for(let x of _.bones)x._linkedTransformNode&&(x._linkedTransformNode=s[r[x._linkedTransformNode.uniqueId]])}a.skeletons.push(_)}for(let p of this.animationGroups){if(c.predicate&&!c.predicate(p))continue;let _=p.clone(e?e(p.name):"Clone of "+p.name,g=>s[r[g.uniqueId]]||g);a.animationGroups.push(_)}return a}addAllToScene(){if(!this._wasAddedToScene){this._isValidHierarchy()||pe.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()||pe.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 p of e)p.dispose();this.cameras.length=0;let t=this.lights.slice(0);for(let p of t)p.dispose();this.lights.length=0;let i=this.meshes.slice(0);for(let p of i)p.dispose();this.meshes.length=0;let r=this.skeletons.slice(0);for(let p of r)p.dispose();this.skeletons.length=0;let s=this.animationGroups.slice(0);for(let p of s)p.dispose();this.animationGroups.length=0;let a=this.multiMaterials.slice(0);for(let p of a)p.dispose();this.multiMaterials.length=0;let o=this.materials.slice(0);for(let p of o)p.dispose();this.materials.length=0;let l=this.geometries.slice(0);for(let p of l)p.dispose();this.geometries.length=0;let c=this.transformNodes.slice(0);for(let p of c)p.dispose();this.transformNodes.length=0;let f=this.actionManagers.slice(0);for(let p of f)p.dispose();this.actionManagers.length=0;let h=this.textures.slice(0);for(let p of h)p.dispose();this.textures.length=0;let d=this.reflectionProbes.slice(0);for(let p of d)p.dispose();this.reflectionProbes.length=0;let u=this.morphTargetManagers.slice(0);for(let p of u)p.dispose();this.morphTargetManagers.length=0;let m=this.spriteManagers.slice(0);for(let p of m)p.dispose();this.spriteManagers.length=0,this.environmentTexture&&(this.environmentTexture.dispose(),this.environmentTexture=null);for(let p of this.scene._serializableComponents)p.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 iD);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=Oe.LastCreatedScene,t,i=null){if(!e)return ee.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 rc?this.meshes.push(r):r instanceof ei?this.transformNodes.push(r):r instanceof Xt?this.lights.push(r):r instanceof mt&&this.cameras.push(r),r instanceof Er){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 ld,u5=M(()=>{j_();ld=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 cU(this.readUint8Array(e))}skipBytes(e){this._dataByteOffset+=e,this.byteOffset+=e}}});function nD(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 vfe(){let n=[];onmessage=e=>{let t=e.data;switch(t.id){case"init":{importScripts(t.url);break}case"validate":{nD(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 tp,m5=M(()=>{Mi();tp=class n{static ValidateAsync(e,t,i,r){return typeof Worker=="function"?new Promise((s,a)=>{let o=`${nD}(${vfe})()`,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:pe.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=pe.LoadBabylonScriptAsync(this.Configuration.url)),this._LoadScriptPromise.then(()=>nD(e,t,i,r)))}};tp.Configuration={url:`${pe._DefaultCdnUrl}/gltf_validator.js`};tp._LastResults=null});var xc,jg,p5=M(()=>{xc="Z2xURg",jg={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,"+xc)||n.startsWith("data:;base64,"+xc)||n.startsWith("data:application/octet-stream;base64,"+xc)||n.startsWith("data:model/gltf-binary;base64,"+xc)}}});function _5(n,e,t){try{return Promise.resolve(new Uint8Array(n,e,t))}catch(i){return Promise.reject(i)}}function Efe(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 ip,cd,rs,MR,Sfe,sD,Kf,aD=M(()=>{di();Mi();ep();Kg();Pt();u5();m5();p5();zl();K_();(function(n){n[n.AUTO=0]="AUTO",n[n.FORCE_RIGHT_HANDED=1]="FORCE_RIGHT_HANDED"})(ip||(ip={}));(function(n){n[n.NONE=0]="NONE",n[n.FIRST=1]="FIRST",n[n.ALL=2]="ALL"})(cd||(cd={}));(function(n){n[n.LOADING=0]="LOADING",n[n.READY=1]="READY",n[n.COMPLETE=2]="COMPLETE"})(rs||(rs={}));MR=class{constructor(){this.alwaysComputeBoundingBox=!1,this.alwaysComputeSkeletonRootNode=!1,this.animationStartMode=cd.FIRST,this.compileMaterials=!1,this.compileShadowGenerators=!1,this.coordinateSystemMode=ip.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}},Sfe=new MR,sD=class extends MR{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,S,R,I,C,y,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=(p=e.loadSkins)!=null?p:this.loadSkins,this.loggingEnabled=(_=e.loggingEnabled)!=null?_: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=(S=e.useGltfTextureNames)!=null?S:this.useGltfTextureNames,this.useOpenPBR=(R=e.useOpenPBR)!=null?R:this.useOpenPBR,this.useRangeRequests=(I=e.useRangeRequests)!=null?I:this.useRangeRequests,this.useSRGBBuffers=(C=e.useSRGBBuffers)!=null?C:this.useSRGBBuffers,this.validate=(y=e.validate)!=null?y:this.validate,this.dontUseTransmissionHelper=(D=e.dontUseTransmissionHelper)!=null?D:this.dontUseTransmissionHelper)}},Kf=class n extends sD{constructor(e){super(),this.onParsedObservable=new ie,this.onMeshLoadedObservable=new ie,this.onSkinLoadedObservable=new ie,this.onTextureLoadedObservable=new ie,this.onMaterialLoadedObservable=new ie,this.onCameraLoadedObservable=new ie,this.onCompleteObservable=new ie,this.onErrorObservable=new ie,this.onDisposeObservable=new ie,this.onExtensionLoadedObservable=new ie,this.onValidatedObservable=new ie,this._loader=null,this._state=null,this._requests=new Array,this.name=jg.name,this.extensions=jg.extensions,this.onLoaderStateChangedObservable=new ie,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({...Sfe},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||pe.GetFilename(t);if(a){if(this.useRangeRequests){this.validate&&ee.Warn("glTF validation is not supported when range requests are enabled");let f={abort:()=>{},onCompleteObservable:new ie},h={readAsync:(d,u)=>new Promise((m,p)=>{this._loadFile(e,t,_=>{m(new Uint8Array(_))},!0,_=>{p(_)},_=>{_.setRequestHeader("Range",`bytes=${d}-${d+u-1}`)})}),byteLength:0};return this._unpackBinaryAsync(new ld(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 ld({readAsync:(h,d)=>_5(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 ld({readAsync:(o,l)=>Efe(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 ul(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 jg.canDirectLoad(e)}directLoad(e,t){if(t.startsWith("base64,"+xc)||t.startsWith(";base64,"+xc)||t.startsWith("application/octet-stream;base64,"+xc)||t.startsWith("model/gltf-binary;base64,"+xc)){let i=hf(t);return this._validate(e,new Uint8Array(i,0,i.byteLength)),this._unpackBinaryAsync(new ld({readAsync:(r,s)=>_5(i,r,s),byteLength:i.byteLength}))}return this._validate(e,t),Promise.resolve({json:this._parseJson(t)})}createPlugin(e){return new n(e[jg.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(rs[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"),tp.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"),pe.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 Rs("Unexpected magic: "+i,Ta.GLTFLoaderUnexpectedMagicError);let r=e.readUint32();this.loggingEnabled&&this._log(`Binary version: ${r}`);let s=e.readUint32();!this.useRangeRequests&&s!==e.buffer.byteLength&&ee.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{CR=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 zn,v5=M(()=>{Gt();Vt();fl();IA();Ge();Mi();zn=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=pe.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===fo.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{Gt();di();Vt();fl();co();Mi();fd=class{constructor(e=!0){this.touchEnabled=e,this.buttons=[0,1,2],this.angularSensibility=2e3,this._previousPosition=null,this.onPointerMovedObservable=new ie,this._allowCameraRotation=!0,this._currentActiveButton=-1,this._activePointerId=-1}attachControl(e){e=pe.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!==st.POINTERMOVE&&this.buttons.indexOf(s.button)===-1)return;let o=s.target;if(r.type===st.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===st.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===st.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,st.POINTERDOWN|st.POINTERUP|st.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()],fd.prototype,"buttons",void 0);P([F()],fd.prototype,"angularSensibility",void 0);Gn.FreeCameraMouseInput=fd});var hd,S5=M(()=>{Gt();Vt();di();co();MA();Mi();hd=class{constructor(){this.wheelPrecisionX=3,this.wheelPrecisionY=3,this.wheelPrecisionZ=3,this.onChangedObservable=new ie,this._wheelDeltaX=0,this._wheelDeltaY=0,this._wheelDeltaZ=0,this._ffMultiplier=12,this._normalize=120}attachControl(e){e=pe.BackCompatCameraNoPreventDefault(arguments),this._wheel=t=>{if(t.type!==st.POINTERWHEEL)return;let i=t.event,r=i.deltaMode===ho.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,st.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()],hd.prototype,"wheelPrecisionX",void 0);P([F()],hd.prototype,"wheelPrecisionY",void 0);P([F()],hd.prototype,"wheelPrecisionZ",void 0)});var Ni,Ds,T5=M(()=>{Gt();Vt();fl();S5();Ge();(function(n){n[n.MoveRelative=0]="MoveRelative",n[n.RotateRelative=1]="RotateRelative",n[n.MoveScene=2]="MoveScene"})(Ni||(Ni={}));Ds=class extends hd{constructor(){super(...arguments),this._moveRelative=b.Zero(),this._rotateRelative=b.Zero(),this._moveScene=b.Zero(),this._wheelXAction=Ni.MoveRelative,this._wheelXActionCoordinate=0,this._wheelYAction=Ni.MoveRelative,this._wheelYActionCoordinate=2,this._wheelZAction=null,this._wheelZActionCoordinate=null}getClassName(){return"FreeCameraMouseWheelInput"}set wheelXMoveRelative(e){e===null&&this._wheelXAction!==Ni.MoveRelative||(this._wheelXAction=Ni.MoveRelative,this._wheelXActionCoordinate=e)}get wheelXMoveRelative(){return this._wheelXAction!==Ni.MoveRelative?null:this._wheelXActionCoordinate}set wheelYMoveRelative(e){e===null&&this._wheelYAction!==Ni.MoveRelative||(this._wheelYAction=Ni.MoveRelative,this._wheelYActionCoordinate=e)}get wheelYMoveRelative(){return this._wheelYAction!==Ni.MoveRelative?null:this._wheelYActionCoordinate}set wheelZMoveRelative(e){e===null&&this._wheelZAction!==Ni.MoveRelative||(this._wheelZAction=Ni.MoveRelative,this._wheelZActionCoordinate=e)}get wheelZMoveRelative(){return this._wheelZAction!==Ni.MoveRelative?null:this._wheelZActionCoordinate}set wheelXRotateRelative(e){e===null&&this._wheelXAction!==Ni.RotateRelative||(this._wheelXAction=Ni.RotateRelative,this._wheelXActionCoordinate=e)}get wheelXRotateRelative(){return this._wheelXAction!==Ni.RotateRelative?null:this._wheelXActionCoordinate}set wheelYRotateRelative(e){e===null&&this._wheelYAction!==Ni.RotateRelative||(this._wheelYAction=Ni.RotateRelative,this._wheelYActionCoordinate=e)}get wheelYRotateRelative(){return this._wheelYAction!==Ni.RotateRelative?null:this._wheelYActionCoordinate}set wheelZRotateRelative(e){e===null&&this._wheelZAction!==Ni.RotateRelative||(this._wheelZAction=Ni.RotateRelative,this._wheelZActionCoordinate=e)}get wheelZRotateRelative(){return this._wheelZAction!==Ni.RotateRelative?null:this._wheelZActionCoordinate}set wheelXMoveScene(e){e===null&&this._wheelXAction!==Ni.MoveScene||(this._wheelXAction=Ni.MoveScene,this._wheelXActionCoordinate=e)}get wheelXMoveScene(){return this._wheelXAction!==Ni.MoveScene?null:this._wheelXActionCoordinate}set wheelYMoveScene(e){e===null&&this._wheelYAction!==Ni.MoveScene||(this._wheelYAction=Ni.MoveScene,this._wheelYActionCoordinate=e)}get wheelYMoveScene(){return this._wheelYAction!==Ni.MoveScene?null:this._wheelYActionCoordinate}set wheelZMoveScene(e){e===null&&this._wheelZAction!==Ni.MoveScene||(this._wheelZAction=Ni.MoveScene,this._wheelZActionCoordinate=e)}get wheelZMoveScene(){return this._wheelZAction!==Ni.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=j.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 Ni.MoveRelative:r=this._moveRelative;break;case Ni.RotateRelative:r=this._rotateRelative;break;case Ni.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()],Ds.prototype,"wheelXMoveRelative",null);P([F()],Ds.prototype,"wheelYMoveRelative",null);P([F()],Ds.prototype,"wheelZMoveRelative",null);P([F()],Ds.prototype,"wheelXRotateRelative",null);P([F()],Ds.prototype,"wheelYRotateRelative",null);P([F()],Ds.prototype,"wheelZRotateRelative",null);P([F()],Ds.prototype,"wheelXMoveScene",null);P([F()],Ds.prototype,"wheelYMoveScene",null);P([F()],Ds.prototype,"wheelZMoveScene",null);Gn.FreeCameraMouseWheelInput=Ds});var dd,A5=M(()=>{Gt();Vt();fl();co();Ge();Mi();dd=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=pe.IsSafari()}attachControl(e){e=pe.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===st.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===st.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===st.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,st.POINTERDOWN|st.POINTERUP|st.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),j.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()],dd.prototype,"touchAngularSensibility",void 0);P([F()],dd.prototype,"touchMoveSensibility",void 0);Gn.FreeCameraTouchInput=dd});var yR,x5=M(()=>{fl();v5();E5();T5();A5();yR=class extends Gm{constructor(e){super(e),this._mouseInput=null,this._mouseWheelInput=null}addKeyboard(){return this.add(new zn),this}addMouse(e=!0){return this._mouseInput||(this._mouseInput=new fd(e),this.add(this._mouseInput)),this}removeMouse(){return this._mouseInput&&this.remove(this._mouseInput),this}addMouseWheel(){return this._mouseWheelInput||(this._mouseWheelInput=new Ds,this.add(this._mouseWheelInput)),this}removeMouseWheel(){return this._mouseWheelInput&&this.remove(this._mouseWheelInput),this}addTouch(){return this.add(new dd),this}clear(){super.clear(),this._mouseInput=null}}});var Rc,R5=M(()=>{Gt();Vt();Ge();sP();x5();Mi();zi();Br();Rc=class extends Cs{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()>Me.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 yR(this),this.inputs.addKeyboard().addMouse()}attachControl(e,t){t=pe.BackCompatCameraNoPreventDefault(arguments),this.inputs.attachElement(t)}detachControl(){this.inputs.detachElement(),this.cameraDirection=new b(0,0,0),this.cameraRotation=new Fe(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([zr()],Rc.prototype,"ellipsoid",void 0);P([zr()],Rc.prototype,"ellipsoidOffset",void 0);P([F()],Rc.prototype,"checkCollisions",void 0);P([F()],Rc.prototype,"applyGravity",void 0);Ft("BABYLON.FreeCamera",Rc)});var Ua,PR=M(()=>{Ge();Zo();$s();Ua=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:j.Identity(),this._restMatrix=s!=null?s:this._localMatrix.clone(),this._bindMatrix=a!=null?a:this._localMatrix.clone(),this._index=o,this._absoluteMatrix=new j,this._absoluteBindMatrix=new j,this._absoluteInverseBindMatrix=new j,this._finalMatrix=new j,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,j.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{Vr();qg=class n extends _e{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=_e.CLAMP_ADDRESSMODE,this.wrapV=_e.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=_e.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=_e.TRILINEAR_SAMPLINGMODE,l=1){return new n(e,t,i,6,r,s,a,o,l,1)}}});var LR,I5=M(()=>{PR();di();Ge();b5();If();Qy();Oi();Pt();Q_();LR=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=j.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 ie,this.metadata=null,this.bones=[],this._scene=i||Oe.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=qg.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=qg.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?j.FromArray(s.rest):null,c=new Ua(s.name,i,o,j.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(ht.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{Gt();di();Oi();ki();Vt();Ar();zi();jf=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 ie,this._onDataLayoutChanged=new ie,this.morphTargetManager=null,this._animationPropertiesOverride=null,this.id=e,this.morphTargetManager=r,this._scene=i||Oe.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=it.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())),it.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{Vr();DR=class n extends _e{get depth(){return this._depth}constructor(e,t,i,r,s,a,o=!0,l=!1,c=_e.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 ud,C5=M(()=>{oo();Pt();Oi();oD();M5();ud=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 Bi(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=Oe.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){ee.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(jf.Parse(r,t,i));return e.metadata&&(i.metadata=e.metadata),i}};ud.EnableTextureStorage=!0;ud.MaxActiveMorphTargetsInVertexAttributeMode=8;ud.ConstantTargetCountForTextureMode=0});function OR(n,e,t){Zg(n)&&ee.Warn(`Extension with the name '${n}' already exists`),lD.set(n,{isGLTFExtension:e,factory:t})}function Zg(n){return lD.delete(n)}var lD,y5,cD=M(()=>{Pt();lD=new Map,y5=lD});var k,fD=M(()=>{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 Fje,P5=M(()=>{Fje=[{regex:new RegExp("^/nodes/\\d+/extensions/")}]});function qf(n,e,t,i){let r=at(n,e);return i?r[t][i]:r[t]}function at(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 sn(n,e){return{offset:{componentsCount:2,type:"Vector2",get:(t,i,r)=>{let s=qf(t,r,n,e);return new Fe(s==null?void 0:s.uOffset,s==null?void 0:s.vOffset)},getTarget:at,set:(t,i,r,s)=>{let a=qf(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=qf(t,r,n,e))==null?void 0:s.wAng},getTarget:at,set:(t,i,r,s)=>qf(i,s,n,e).wAng=t,getPropertyName:[()=>`${n}${e?"."+e:""}.wAng`]},scale:{componentsCount:2,type:"Vector2",get:(t,i,r)=>{let s=qf(t,r,n,e);return new Fe(s==null?void 0:s.uScale,s==null?void 0:s.vScale)},getTarget:at,set:(t,i,r,s)=>{let a=qf(i,s,n,e);a.uScale=t.x,a.vScale=t.y},getPropertyName:[()=>`${n}${e?"."+e:""}.uScale`,()=>`${n}${e?"."+e:""}.vScale`]}}}function Qg(n){let e=n.split("/").map(i=>i.replace(/{}/g,"__array__")),t=L5;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=L5;for(let r of t)r&&(i=i[r]);i&&i.type&&i.get&&(i.interpolation=e)}var Tfe,Afe,xfe,Rfe,bfe,Ife,L5,hD=M(()=>{Ge();fD();zt();aP();P5();Tfe={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 j.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=j.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 kr,!0)[0])==null?void 0:t.intensity},getTarget:n=>{var e;return(e=n._babylonTransformNode)==null?void 0:e.getChildren(t=>t instanceof kr,!0)[0]},set:(n,e)=>{if(e._babylonTransformNode){let t=e._babylonTransformNode.getChildren(i=>i instanceof kr,!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 kr,!0)[0])==null?void 0:t.diffuse},getTarget:n=>{var e;return(e=n._babylonTransformNode)==null?void 0:e.getChildren(t=>t instanceof kr,!0)[0]},set:(n,e)=>{if(e._babylonTransformNode){let t=e._babylonTransformNode.getChildren(i=>i instanceof kr,!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)}}}}}},Afe={length:{type:"number",get:n=>n.length,getTarget:n=>n.map(e=>e._babylonAnimationGroup),getPropertyName:[()=>"length"]},__array__:{}},xfe={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__:{}},Rfe={__array__:{__target__:!0,orthographic:{xmag:{componentsCount:2,type:"Vector2",get:n=>{var e,t,i,r;return new Fe((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 Fe((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"]}}}},bfe={__array__:{__target__:!0,emissiveFactor:{type:"Color3",get:(n,e,t)=>at(n,e,t).emissiveColor,set:(n,e,t,i)=>at(e,t,i).emissiveColor.copyFrom(n),getTarget:(n,e,t)=>at(n,e,t),getPropertyName:[()=>"emissiveColor"]},emissiveTexture:{extensions:{KHR_texture_transform:sn("emissiveTexture")}},normalTexture:{scale:{type:"number",get:(n,e,t)=>{var i;return(i=qf(n,t,"bumpTexture"))==null?void 0:i.level},set:(n,e,t,i)=>{let r=qf(e,i,"bumpTexture");r&&(r.level=n)},getTarget:(n,e,t)=>at(n,e,t),getPropertyName:[()=>"level"]},extensions:{KHR_texture_transform:sn("bumpTexture")}},occlusionTexture:{strength:{type:"number",get:(n,e,t)=>at(n,e,t).ambientTextureStrength,set:(n,e,t,i)=>{let r=at(e,t,i);r&&(r.ambientTextureStrength=n)},getTarget:(n,e,t)=>at(n,e,t),getPropertyName:[()=>"ambientTextureStrength"]},extensions:{KHR_texture_transform:sn("ambientTexture")}},pbrMetallicRoughness:{baseColorFactor:{type:"Color4",get:(n,e,t)=>{let i=at(n,e,t);return lt.FromColor3(i.albedoColor,i.alpha)},set:(n,e,t,i)=>{let r=at(e,t,i);r.albedoColor.set(n.r,n.g,n.b),r.alpha=n.a},getTarget:(n,e,t)=>at(n,e,t),getPropertyName:[()=>"albedoColor",()=>"alpha"]},baseColorTexture:{extensions:{KHR_texture_transform:sn("albedoTexture")}},metallicFactor:{type:"number",get:(n,e,t)=>at(n,e,t).metallic,set:(n,e,t,i)=>{let r=at(e,t,i);r&&(r.metallic=n)},getTarget:(n,e,t)=>at(n,e,t),getPropertyName:[()=>"metallic"]},roughnessFactor:{type:"number",get:(n,e,t)=>at(n,e,t).roughness,set:(n,e,t,i)=>{let r=at(e,t,i);r&&(r.roughness=n)},getTarget:(n,e,t)=>at(n,e,t),getPropertyName:[()=>"roughness"]},metallicRoughnessTexture:{extensions:{KHR_texture_transform:sn("metallicTexture")}}},extensions:{KHR_materials_anisotropy:{anisotropyStrength:{type:"number",get:(n,e,t)=>at(n,e,t).anisotropy.intensity,set:(n,e,t,i)=>{at(e,t,i).anisotropy.intensity=n},getTarget:(n,e,t)=>at(n,e,t),getPropertyName:[()=>"anisotropy.intensity"]},anisotropyRotation:{type:"number",get:(n,e,t)=>at(n,e,t).anisotropy.angle,set:(n,e,t,i)=>{at(e,t,i).anisotropy.angle=n},getTarget:(n,e,t)=>at(n,e,t),getPropertyName:[()=>"anisotropy.angle"]},anisotropyTexture:{extensions:{KHR_texture_transform:sn("anisotropy","texture")}}},KHR_materials_clearcoat:{clearcoatFactor:{type:"number",get:(n,e,t)=>at(n,e,t).clearCoat.intensity,set:(n,e,t,i)=>{at(e,t,i).clearCoat.intensity=n},getTarget:(n,e,t)=>at(n,e,t),getPropertyName:[()=>"clearCoat.intensity"]},clearcoatRoughnessFactor:{type:"number",get:(n,e,t)=>at(n,e,t).clearCoat.roughness,set:(n,e,t,i)=>{at(e,t,i).clearCoat.roughness=n},getTarget:(n,e,t)=>at(n,e,t),getPropertyName:[()=>"clearCoat.roughness"]},clearcoatTexture:{extensions:{KHR_texture_transform:sn("clearCoat","texture")}},clearcoatNormalTexture:{scale:{type:"number",get:(n,e,t)=>{var i;return(i=at(n,e,t).clearCoat.bumpTexture)==null?void 0:i.level},getTarget:at,set:(n,e,t,i)=>at(e,t,i).clearCoat.bumpTexture.level=n},extensions:{KHR_texture_transform:sn("clearCoat","bumpTexture")}},clearcoatRoughnessTexture:{extensions:{KHR_texture_transform:sn("clearCoat","textureRoughness")}}},KHR_materials_dispersion:{dispersion:{type:"number",get:(n,e,t)=>at(n,e,t).subSurface.dispersion,getTarget:at,set:(n,e,t,i)=>at(e,t,i).subSurface.dispersion=n}},KHR_materials_emissive_strength:{emissiveStrength:{type:"number",get:(n,e,t)=>at(n,e,t).emissiveIntensity,getTarget:at,set:(n,e,t,i)=>at(e,t,i).emissiveIntensity=n}},KHR_materials_ior:{ior:{type:"number",get:(n,e,t)=>at(n,e,t).indexOfRefraction,getTarget:at,set:(n,e,t,i)=>at(e,t,i).indexOfRefraction=n}},KHR_materials_iridescence:{iridescenceFactor:{type:"number",get:(n,e,t)=>at(n,e,t).iridescence.intensity,getTarget:at,set:(n,e,t,i)=>at(e,t,i).iridescence.intensity=n},iridescenceIor:{type:"number",get:(n,e,t)=>at(n,e,t).iridescence.indexOfRefraction,getTarget:at,set:(n,e,t,i)=>at(e,t,i).iridescence.indexOfRefraction=n},iridescenceTexture:{extensions:{KHR_texture_transform:sn("iridescence","texture")}},iridescenceThicknessMaximum:{type:"number",get:(n,e,t)=>at(n,e,t).iridescence.maximumThickness,getTarget:at,set:(n,e,t,i)=>at(e,t,i).iridescence.maximumThickness=n},iridescenceThicknessMinimum:{type:"number",get:(n,e,t)=>at(n,e,t).iridescence.minimumThickness,getTarget:at,set:(n,e,t,i)=>at(e,t,i).iridescence.minimumThickness=n},iridescenceThicknessTexture:{extensions:{KHR_texture_transform:sn("iridescence","thicknessTexture")}}},KHR_materials_sheen:{sheenColorFactor:{type:"Color3",get:(n,e,t)=>at(n,e,t).sheen.color,getTarget:at,set:(n,e,t,i)=>at(e,t,i).sheen.color.copyFrom(n)},sheenColorTexture:{extensions:{KHR_texture_transform:sn("sheen","texture")}},sheenRoughnessFactor:{type:"number",get:(n,e,t)=>at(n,e,t).sheen.intensity,getTarget:at,set:(n,e,t,i)=>at(e,t,i).sheen.intensity=n},sheenRoughnessTexture:{extensions:{KHR_texture_transform:sn("sheen","thicknessTexture")}}},KHR_materials_specular:{specularFactor:{type:"number",get:(n,e,t)=>at(n,e,t).metallicF0Factor,getTarget:at,set:(n,e,t,i)=>at(e,t,i).metallicF0Factor=n,getPropertyName:[()=>"metallicF0Factor"]},specularColorFactor:{type:"Color3",get:(n,e,t)=>at(n,e,t).metallicReflectanceColor,getTarget:at,set:(n,e,t,i)=>at(e,t,i).metallicReflectanceColor.copyFrom(n),getPropertyName:[()=>"metallicReflectanceColor"]},specularTexture:{extensions:{KHR_texture_transform:sn("metallicReflectanceTexture")}},specularColorTexture:{extensions:{KHR_texture_transform:sn("reflectanceTexture")}}},KHR_materials_transmission:{transmissionFactor:{type:"number",get:(n,e,t)=>at(n,e,t).subSurface.refractionIntensity,getTarget:at,set:(n,e,t,i)=>at(e,t,i).subSurface.refractionIntensity=n,getPropertyName:[()=>"subSurface.refractionIntensity"]},transmissionTexture:{extensions:{KHR_texture_transform:sn("subSurface","refractionIntensityTexture")}}},KHR_materials_diffuse_transmission:{diffuseTransmissionFactor:{type:"number",get:(n,e,t)=>at(n,e,t).subSurface.translucencyIntensity,getTarget:at,set:(n,e,t,i)=>at(e,t,i).subSurface.translucencyIntensity=n},diffuseTransmissionTexture:{extensions:{KHR_texture_transform:sn("subSurface","translucencyIntensityTexture")}},diffuseTransmissionColorFactor:{type:"Color3",get:(n,e,t)=>at(n,e,t).subSurface.translucencyColor,getTarget:at,set:(n,e,t,i)=>{var r;return n&&((r=at(e,t,i).subSurface.translucencyColor)==null?void 0:r.copyFrom(n))}},diffuseTransmissionColorTexture:{extensions:{KHR_texture_transform:sn("subSurface","translucencyColorTexture")}}},KHR_materials_volume:{attenuationColor:{type:"Color3",get:(n,e,t)=>at(n,e,t).subSurface.tintColor,getTarget:at,set:(n,e,t,i)=>at(e,t,i).subSurface.tintColor.copyFrom(n)},attenuationDistance:{type:"number",get:(n,e,t)=>at(n,e,t).subSurface.tintColorAtDistance,getTarget:at,set:(n,e,t,i)=>at(e,t,i).subSurface.tintColorAtDistance=n},thicknessFactor:{type:"number",get:(n,e,t)=>at(n,e,t).subSurface.maximumThickness,getTarget:at,set:(n,e,t,i)=>at(e,t,i).subSurface.maximumThickness=n},thicknessTexture:{extensions:{KHR_texture_transform:sn("subSurface","thicknessTexture")}}}}}},Ife={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)),j.FromQuaternionToRef(n,e._babylonTexture.getReflectionTextureMatrix()))},getTarget:n=>n._babylonTexture}}}}};L5={cameras:Rfe,nodes:Tfe,materials:bfe,extensions:Ife,animations:Afe,meshes:xfe}});function dD(...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]=dD(a,o):t[s]=o}return t},{})}var D5=M(()=>{});var Jg,O5=M(()=>{Jg=class{constructor(e){this._factory=e}get value(){return this._factory&&(this._value=this._factory(),this._factory=void 0),this._value}}});var NR,N5=M(()=>{Ge();If();NR=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===ht.ANIMATIONTYPE_MATRIX&&(this._animationState.workValue=j.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,p=e*(o.framePerSecond*s)/1e3+this._absoluteFrameOffset,_=0,g=!1,v=r&&this._animationState.loopMode===ht.ANIMATIONLOOPMODE_YOYO;if(v){let x=(p-t)/d,A=Math.sin(x*Math.PI);p=Math.abs(A)*d+t;let S=A>=0?1:-1;this._yoyoDirection!==S&&(g=!0),this._yoyoDirection=S}if(this._previousElapsedTime=e,this._previousAbsoluteFrame=p,!r&&i>=t&&(p>=d&&s>0||p<=0&&s<0))c=!1,_=o.evaluate(i);else if(!r&&t>=i&&(p<=d&&s<0||p>=0&&s>0))c=!1,_=o.evaluate(t);else if(this._animationState.loopMode!==ht.ANIMATIONLOOPMODE_CYCLE){let x=i.toString()+t.toString();if(!this._offsetsCache[x]){this._animationState.repeatCount=0,this._animationState.loopMode=ht.ANIMATIONLOOPMODE_CYCLE;let A=o._interpolate(t,this._animationState),E=o._interpolate(i,this._animationState);switch(this._animationState.loopMode=this._getCorrectLoopMode(),o.dataType){case ht.ANIMATIONTYPE_FLOAT:this._offsetsCache[x]=E-A;break;case ht.ANIMATIONTYPE_QUATERNION:this._offsetsCache[x]=E.subtract(A);break;case ht.ANIMATIONTYPE_VECTOR3:this._offsetsCache[x]=E.subtract(A);break;case ht.ANIMATIONTYPE_VECTOR2:this._offsetsCache[x]=E.subtract(A);break;case ht.ANIMATIONTYPE_SIZE:this._offsetsCache[x]=E.subtract(A);break;case ht.ANIMATIONTYPE_COLOR3:this._offsetsCache[x]=E.subtract(A);break;default:break}this._highLimitsCache[x]=E}_=this._highLimitsCache[x],m=this._offsetsCache[x]}if(m===void 0)switch(o.dataType){case ht.ANIMATIONTYPE_FLOAT:m=0;break;case ht.ANIMATIONTYPE_QUATERNION:m=$y;break;case ht.ANIMATIONTYPE_VECTOR3:m=Jy;break;case ht.ANIMATIONTYPE_VECTOR2:m=eP;break;case ht.ANIMATIONTYPE_SIZE:m=tP;break;case ht.ANIMATIONTYPE_COLOR3:m=iP;break;case ht.ANIMATIONTYPE_COLOR4:m=rP;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 p>0&&t>i||p<0&&t0&&this.currentFrame>f||s<0&&this.currentFrame0?0:o.getKeys().length-1}this._currentFrame=f,this._animationState.repeatCount=d===0?0:p/d>>0,this._animationState.highLimitValue=_,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 p=h[m];p.isDone||(p.onlyOnce&&(h.splice(m,1),m--),p.isDone=!0,p.action(f))}}return c||(this._stopped=!0),c}}});function Mfe(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=_r.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 ev(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 p=0;ps&&(o=-o),new ev(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{di();N5();If();Ul();Ge();ev=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{PR();uD();bs();uD();w5(Jt,Ua)});var U5={};tt(U5,{AnimationGroup:()=>mD,TargetedAnimation:()=>wR});var wR,mD,B5=M(()=>{If();di();Oi();df();F5();OA();wR=class{getClassName(){return"TargetedAnimation"}constructor(e){this.parent=e,this.uniqueId=Jl.UniqueId}serialize(){let e={};return e.animation=this.animation.serialize(),e.targetId=this.target.id,e.targetUniqueId=this.target.uniqueId,e}},mD=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 ie,this.onAnimationLoopObservable=new ie,this.onAnimationGroupLoopObservable=new ie,this.onAnimationGroupEndObservable=new ie,this.onAnimationGroupPauseObservable=new ie,this.onAnimationGroupPlayObservable=new ie,this.metadata=null,this._mask=null,this._animationLoopFlags=[],this._scene=t||Oe.LastCreatedScene,this._weight=i,this._playOrder=r,this.uniqueId=this._scene.getUniqueId(),this._scene.addAnimationGroup(this)}addTargetedAnimation(e,t){let i=new wR(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;tp[0].frame&&(c=p[0].frame),f=t&&p<=i||s&&_.frame>=t&&_.frame<=i){let g={frame:_.frame,value:_.value.clone?_.value.clone():_.value,inTangent:_.inTangent,outTangent:_.outTangent,interpolation:_.interpolation,lockedTangent:_.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),otv,TransformNodeAnimationPropertyInfo:()=>rp,WeightAnimationPropertyInfo:()=>FR,getQuaternion:()=>V5,getVector3:()=>pD,getWeights:()=>G5});function pD(n,e,t,i){return b.FromArray(e,t).scaleInPlace(i)}function V5(n,e,t,i){return ze.FromArray(e,t).scaleInPlace(i)}function G5(n,e,t,i){let r=new Array(n._numMorphTargets);for(let s=0;s{If();Ge();hD();tv=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 ht(e,this.name,t,this.type);return r.setKeys(i,!0),r}},rp=class extends tv{buildAnimations(e,t,i,r){let s=[];return s.push({babylonAnimatable:e._babylonTransformNode,babylonAnimation:this._buildAnimation(t,i,r)}),s}},FR=class extends tv{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 rp(ht.ANIMATIONTYPE_VECTOR3,"position",pD,()=>3)]);$g("/nodes/{}/rotation",[new rp(ht.ANIMATIONTYPE_QUATERNION,"rotationQuaternion",V5,()=>4)]);$g("/nodes/{}/scale",[new rp(ht.ANIMATIONTYPE_VECTOR3,"scaling",pD,()=>3)]);$g("/nodes/{}/weights",[new FR(ht.ANIMATIONTYPE_FLOAT,"influence",G5,n=>n._numMorphTargets)])});var Pfe,Lfe,Dfe,Ofe,_D,UR,gD,H5,BR=M(()=>{Vr();ry();Pfe="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==",Lfe="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==",Dfe="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",Ofe=0,_D=(n,e,t,i)=>{if(!n[t]){let r=n.useDelayedTextureLoading;n.useDelayedTextureLoading=!1;let s=n._blockEntityCollection;n._blockEntityCollection=!1;let a=_e.CreateFromBase64String(e,i+Ofe++,n,!0,!1,_e.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=_e.CLAMP_ADDRESSMODE,a.wrapV=_e.CLAMP_ADDRESSMODE,n[t]=a,n.useDelayedTextureLoading=r,fm.ExpandRGBDTexture(a);let c=n.getEngine().onContextRestoredObservable.add(()=>{a.isRGBD=!0;let f=n.onBeforeRenderObservable.add(()=>{a.isReady()&&(n.onBeforeRenderObservable.remove(f),fm.ExpandRGBDTexture(a))})});n.onDisposeObservable.add(()=>{n.getEngine().onContextRestoredObservable.remove(c)})}return n[t]},UR=n=>_D(n,Pfe,"environmentBRDFTexture","EnvironmentBRDFTexture"),gD=n=>_D(n,Lfe,"environmentFuzzBRDFTexture","EnvironmentFuzzBRDFTexture"),H5=n=>_D(n,Dfe,"openPBREnvironmentBRDFTexture","OpenPBREnvironmentBRDFTexture")});function z5(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 X5=M(()=>{});var vD=M(()=>{Ts();Pt();Zn();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 y=this._gl,D=this._currentFramebuffer,O=y.createFramebuffer();this._bindUnboundFramebuffer(O);let V=(z=n.width)!=null?z:n,N=(Y=n.height)!=null?Y:n,w=[],B=[],W=this.webGLVersion>1&&(o===13||o===17||o===18);C.label=(me=e==null?void 0:e.label)!=null?me:"MultiRenderTargetWrapper",C._framebuffer=O,C._generateDepthBuffer=a||r,C._generateStencilBuffer=a?W:s,C._depthStencilBuffer=this._setupFramebufferDepthAttachments(C._generateStencilBuffer,C._generateDepthBuffer,V,N,1,o),C._attachments=B;for(let ae=0;ae1||this.isWebGPU);let Tt=this.webGLVersion>1,Xe=y[Tt?"COLOR_ATTACHMENT"+ae:"COLOR_ATTACHMENT"+ae+"_WEBGL"];if(B.push(Xe),de===-1||I)continue;let je=new Di(this,6);w[ae]=je,y.activeTexture(y["TEXTURE"+ae]),y.bindTexture(de,je._hardwareTexture.underlyingResource),y.texParameteri(de,y.TEXTURE_MAG_FILTER,Ke.mag),y.texParameteri(de,y.TEXTURE_MIN_FILTER,Ke.min),y.texParameteri(de,y.TEXTURE_WRAP_S,y.CLAMP_TO_EDGE),y.texParameteri(de,y.TEXTURE_WRAP_T,y.CLAMP_TO_EDGE);let $t=this._getRGBABufferInternalSizedFormat(ne,De,ue),Dt=this._getInternalFormat(De),xi=this._getWebGLTextureType(ne);if(Tt&&(de===35866||de===32879))de===35866?je.is2DArray=!0:je.is3D=!0,je.baseDepth=je.depth=be,y.texImage3D(de,0,$t,V,N,be,0,Dt,xi,null);else if(de===34067){for(let oe=0;oe<6;oe++)y.texImage2D(y.TEXTURE_CUBE_MAP_POSITIVE_X+oe,0,$t,V,N,0,Dt,xi,null);je.isCube=!0}else y.texImage2D(y.TEXTURE_2D,0,$t,V,N,0,Dt,xi,null);i&&y.generateMipmap(de),this._bindTextureDirectly(de,null),je.baseWidth=V,je.baseHeight=N,je.width=V,je.height=N,je.isReady=!0,je.samples=1,je.generateMipMaps=i,je.samplingMode=ve,je.type=ne,je._useSRGBBuffer=ue,je.format=De,je.label=(Ue=R[ae])!=null?Ue:C.label+"-Texture"+ae,this._internalTexturesCache.push(je)}if(a&&this._caps.depthTextureExtension&&!I){let ae=new Di(this,14),ve=5,ne=y.DEPTH_COMPONENT16,ue=y.DEPTH_COMPONENT,De=y.UNSIGNED_SHORT,de=y.DEPTH_ATTACHMENT;this.webGLVersion<2?ne=y.DEPTH_COMPONENT:o===14?(ve=1,De=y.FLOAT,ne=y.DEPTH_COMPONENT32F):o===18?(ve=0,De=y.FLOAT_32_UNSIGNED_INT_24_8_REV,ne=y.DEPTH32F_STENCIL8,ue=y.DEPTH_STENCIL,de=y.DEPTH_STENCIL_ATTACHMENT):o===16?(ve=0,De=y.UNSIGNED_INT,ne=y.DEPTH_COMPONENT24,de=y.DEPTH_ATTACHMENT):(o===13||o===17)&&(ve=12,De=y.UNSIGNED_INT_24_8,ne=y.DEPTH24_STENCIL8,ue=y.DEPTH_STENCIL,de=y.DEPTH_STENCIL_ATTACHMENT),this._bindTextureDirectly(y.TEXTURE_2D,ae,!0),y.texParameteri(y.TEXTURE_2D,y.TEXTURE_MAG_FILTER,y.NEAREST),y.texParameteri(y.TEXTURE_2D,y.TEXTURE_MIN_FILTER,y.NEAREST),y.texParameteri(y.TEXTURE_2D,y.TEXTURE_WRAP_S,y.CLAMP_TO_EDGE),y.texParameteri(y.TEXTURE_2D,y.TEXTURE_WRAP_T,y.CLAMP_TO_EDGE),y.texImage2D(y.TEXTURE_2D,0,ne,V,N,0,ue,De,null),y.framebufferTexture2D(y.FRAMEBUFFER,de,y.TEXTURE_2D,ae._hardwareTexture.underlyingResource,0),this._bindTextureDirectly(y.TEXTURE_2D,null),C._depthStencilTexture=ae,C._depthStencilTextureWithStencil=W,ae.baseWidth=V,ae.baseHeight=N,ae.width=V,ae.height=N,ae.isReady=!0,ae.samples=1,ae.generateMipMaps=i,ae.samplingMode=1,ae.format=o,ae.type=ve,ae.label=C.label+"-DepthStencil",w[l]=ae,this._internalTexturesCache.push(ae)}if(C.setTextures(w),t&&y.drawBuffers(B),this._bindUnboundFramebuffer(D),C.setLayerAndFaceIndices(E,A),this.resetTextureCache(),!I)this.updateMultipleRenderTargetTextureSampleCount(C,c,t);else if(c>1){let ae=y.createFramebuffer();if(!ae)throw new Error("Unable to create multi sampled framebuffer");C._samples=c,C._MSAAFramebuffer=ae,l>0&&t&&(this._bindUnboundFramebuffer(ae),y.drawBuffers(B),this._bindUnboundFramebuffer(D))}return C};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 VR,Y5=M(()=>{Vr();_f();vD();VR=class extends Gr{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 K5,Nfe,j5=M(()=>{G();K5="mrtFragmentDeclaration",Nfe=`#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 Xf("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 IR,h5=M(()=>{jl();vA();f5();QL();qL();IR=class{get onAfterReductionPerformed(){return this._thinMinMaxReducer.onAfterReductionPerformed}constructor(e){this._onAfterUnbindObserver=null,this._forceFullscreenViewport=!0,this._activated=!1,this._camera=e,this._postProcessManager=new Kl(e.getScene()),this._thinMinMaxReducer=new bR(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{n5();h5();MR=class extends IR{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 $m(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 u5,Tfe,Ir,Jm,CR,xo,m5=M(()=>{Ge();_f();hn();RR();_m();d5();Pt();Ni();cg();u5=b.Up(),Tfe=b.Zero(),Ir=new b,Jm=new b,CR=new j,xo=class n extends Pi{_validateFilter(e){return e===Pi.FILTER_NONE||e===Pi.FILTER_PCF||e===Pi.FILTER_PCSS?e:(ee.Error('Unsupported filter "'+e+'"!'),Pi.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===Pi.FILTER_PCSS?(s=Math.min(s,l),this.filter!==Pi.FILTER_PCSS&&(a=Math.min(a,c))):(a=Math.min(a,c),s=Math.max(s,l),a=Math.max(s+1,a))),j.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(Tfe,this._transformMatrices[r],Ir),Ir.scaleInPlace(this._mapSize/2),Jm.copyFromFloats(Math.round(Ir.x),Math.round(Ir.y),Math.round(Ir.z)),Jm.subtractInPlace(Ir).scaleInPlace(2/this._mapSize),j.TranslationToRef(Jm.x,Jm.y,0,CR),this._projectionMatrices[r].multiplyToRef(CR,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=j.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===Pi.FILTER_PCF&&e.setColorWrite(!1),Ma.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!==Pi.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?xU(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===Pi.FILTER_PCF)t.setDepthStencilTexture("shadowTexture"+e,a),i._uniformBuffer.updateFloat4("shadowsInfo",this.getDarkness(),o,1/o,this.frustumEdgeFalloff,e);else if(this._filter===Pi.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}};xo._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)];xo.CLASSNAME="CascadedShadowGenerator";xo.DEFAULT_CASCADES_COUNT=4;xo.MIN_CASCADES_COUNT=2;xo.MAX_CASCADES_COUNT=4;xo._SceneComponentInitialization=n=>{throw Ze("ShadowGeneratorSceneComponent")}});function yR(n,e){Afe[n]=e}var Afe,$L=M(()=>{Afe={}});var JL,p5=M(()=>{RR();m5();lm();$L();yR(et.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(et.NAME_SHADOWGENERATOR);e||(e=new JL(n),n._addComponent(e))}});async function _5(n,e){let t=e.method||"GET";return await new Promise((i,r)=>{let s=new yr;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 g5=M(()=>{Uh()});function xfe(n){return!!n.createPlugin}function Rfe(n){return!!n.name}function PR(){return ul[".babylon"]}function bfe(n){for(let e in ul){let t=ul[e];if(t.mimeType===n)return t}}function tD(n,e){let t=ul[n];return t||(ee.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?PR():void 0)}function Ife(n){return!!ul[n]}function Mfe(n){for(let e in ul){let t=ul[e].plugin;if(t.canDirectLoad&&t.canDirectLoad(n))return ul[e]}return PR()}function Cfe(n){let e=n.indexOf("?");e!==-1&&(n=n.substring(0,e));let t=n.lastIndexOf(".");return n.substring(t,n.length).toLowerCase()}function yfe(n){return n.substring(0,5)==="data:"?n.substring(5):null}function iD(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 rD(n,e,t,i,r,s,a,o,l){var u;let c=yfe(n.url);if(n.rawData&&!a)throw"When using ArrayBufferView to load data the file extension must be provided.";let f=!c&&!a?Cfe(n.url):"",h=a?tD(a,!0):c?Mfe(n.url):tD(f,!1);if(!h&&f){if(n.url&&!n.url.startsWith("blob:")){let m=await _5(n.url,{method:"HEAD",responseHeaders:["Content-Type"]}),p=m.headerValues?m.headerValues["Content-Type"]:"";p&&(h=bfe(p))}h||(h=PR())}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(xfe(h.plugin)){let _=h.plugin.createPlugin(l!=null?l:{});return _ instanceof Promise?(_.then(m).catch(g=>{r("Error instantiating plugin.",g)}),null):(m(_),_)}else return m(h.plugin),h.plugin})(m=>{var S;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(E5.notifyObservers(m),c&&(m.canDirectLoad&&m.canDirectLoad(n.url)||!ff(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 p=h.isBinary,_=(R,I)=>{if(e.isDisposed){r("Scene has been disposed");return}t(m,R,I)},g=null,v=!1;(S=m.onDisposeObservable)==null||S.add(()=>{v=!0,g&&(g.abort(),g=null),s()});let x=()=>{if(v)return;let R=(I,C)=>{r(I==null?void 0:I.statusText,C)};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,_,i,p,R,o):e._loadFile(n.file||n.url,_,i,!0,p,R)},T=e.getEngine(),E=T.enableOfflineSupport;if(E){let R=!1;for(let I of e.disableOfflineSupportExceptionRules)if(I.test(n.url)){R=!0;break}E=!R}E&&Me.OfflineProviderFactory?e.offlineProvider=Me.OfflineProviderFactory(n.url,x,T.disableManifestCheck):x()})}function nD(n,e){let t,i,r=null,s=null;if(!e)t=n,i=_e.GetFilename(n),n=_e.GetFolderPath(n);else if(Rfe(e))t=`file:${e.name}`,i=e.name,r=e;else if(ArrayBuffer.isView(e))t="",i=lf(),s=e;else if(e.startsWith("data:"))t=e,i="";else if(n){let a=e;if(a.substring(0,1)==="/")return _e.Error("Wrong sceneFilename parameter"),null;t=n+a,i=a}else t=e,i=_e.GetFilename(e),n=_e.GetFolderPath(e);return{url:t,rootUrl:n,name:i,file:r,rawData:s}}function Yf(n){if(typeof n.extensions=="string"){let e=n.extensions;ul[e.toLowerCase()]={plugin:n,isBinary:!1}}else{let e=n.extensions,t=Object.keys(e);for(let i of t)ul[i.toLowerCase()]={plugin:n,isBinary:e[i].isBinary,mimeType:e[i].mimeType}}}async function Kg(n,e,t){let{meshNames:i,rootUrl:r="",onProgress:s,pluginExtension:a,name:o,pluginOptions:l}=t!=null?t:{};return await T5(i,r,n,e,s,a,o,l)}async function S5(n,e,t="",i=Oe.LastCreatedScene,r=null,s=null,a=null,o=null,l="",c={}){if(!i)return ee.Error("No scene available to import mesh to"),null;let f=nD(e,t);if(!f)return null;let h={};i.addPendingData(h);let d=()=>{i.removePendingData(h)},u=(_,g)=>{let v=iD(f,_,g);a?a(i,v,new Ms(v,Ta.SceneLoaderError,g)):ee.Error(v),d()},m=s?_=>{try{s(_)}catch(g){u("Error in onProgress callback: "+g,g)}}:void 0,p=(_,g,v,x,T,E,S,R)=>{if(i.importedMeshesFiles.push(f.url),r)try{r(_,g,v,x,T,E,S,R)}catch(I){u("Error in onSuccess callback: "+I,I)}i.removePendingData(h)};return await rD(f,i,(_,g,v)=>{if(_.rewriteRootURL&&(f.rootUrl=_.rewriteRootURL(f.rootUrl,v)),_.importMesh){let x=_,T=[],E=[],S=[];if(!x.importMesh(n,i,g,f.rootUrl,T,E,S,u))return;i.loadingPluginName=_.name,p(T,E,S,[],[],[],[],[])}else _.importMeshAsync(n,i,g,f.rootUrl,m,f.name).then(T=>{i.loadingPluginName=_.name,p(T.meshes,T.particleSystems,T.skeletons,T.animationGroups,T.transformNodes,T.geometries,T.lights,T.spriteManagers)}).catch(T=>{u(T.message,T)})},m,u,d,o,l,c)}async function T5(n,e,t,i,r,s,a,o){return await new Promise((l,c)=>{try{S5(n,e,t,i,(f,h,d,u,m,p,_,g)=>{l({meshes:f,particleSystems:h,skeletons:d,animationGroups:u,transformNodes:m,geometries:p,lights:_,spriteManagers:g})},r,(f,h,d)=>{c(d||new Error(h))},s,a,o).catch(c)}catch(f){c(f)}})}async function A5(n,e="",t=Oe.LastCreatedEngine,i=null,r=null,s=null,a=null,o="",l={}){if(!t){_e.Error("No engine available");return}await sD(n,e,new Jt(t),i,r,s,a,o,l)}async function Pfe(n,e,t,i,r,s,a){return await new Promise((o,l)=>{A5(n,e,t,c=>{o(c)},i,(c,f,h)=>{l(h||new Error(f))},r,s,a)})}async function sD(n,e="",t=Oe.LastCreatedScene,i=null,r=null,s=null,a=null,o="",l={}){if(!t)return ee.Error("No scene available to append to"),null;let c=nD(n,e);if(!c)return null;let f={};t.addPendingData(f);let h=()=>{t.removePendingData(f)};Yr.ShowLoadingScreen&&!eD&&(eD=!0,t.getEngine().displayLoadingUI(),t.executeWhenReady(()=>{t.getEngine().hideLoadingUI(),eD=!1}));let d=(p,_)=>{let g=iD(c,p,_);s?s(t,g,new Ms(g,Ta.SceneLoaderError,_)):ee.Error(g),h()},u=r?p=>{try{r(p)}catch(_){d("Error in onProgress callback",_)}}:void 0,m=()=>{if(i)try{i(t)}catch(p){d("Error in onSuccess callback",p)}t.removePendingData(f)};return await rD(c,t,(p,_)=>{if(p.load){if(!p.load(t,_,c.rootUrl,d))return;t.loadingPluginName=p.name,m()}else p.loadAsync(t,_,c.rootUrl,u,c.name).then(()=>{t.loadingPluginName=p.name,m()}).catch(v=>{d(v.message,v)})},u,d,h,a,o,l)}async function Lfe(n,e,t,i,r,s,a){return await new Promise((o,l)=>{try{sD(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 aD(n,e="",t=Oe.LastCreatedScene,i=null,r=null,s=null,a=null,o="",l={}){if(!t)return ee.Error("No scene available to load asset container to"),null;let c=nD(n,e);if(!c)return null;let f={};t.addPendingData(f);let h=()=>{t.removePendingData(f)},d=(p,_)=>{let g=iD(c,p,_);s?s(t,g,new Ms(g,Ta.SceneLoaderError,_)):ee.Error(g),h()},u=r?p=>{try{r(p)}catch(_){d("Error in onProgress callback",_)}}:void 0,m=p=>{if(i)try{i(p)}catch(_){d("Error in onSuccess callback",_)}t.removePendingData(f)};return await rD(c,t,(p,_)=>{if(p.loadAssetContainer){let v=p.loadAssetContainer(t,_,c.rootUrl,d);if(!v)return;v.populateRootNodes(),t.loadingPluginName=p.name,m(v)}else p.loadAssetContainerAsync?p.loadAssetContainerAsync(t,_,c.rootUrl,u,c.name).then(v=>{v.populateRootNodes(),t.loadingPluginName=p.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 Dfe(n,e,t,i,r,s,a){return await new Promise((o,l)=>{try{aD(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 x5(n,e="",t=Oe.LastCreatedScene,i=!0,r=0,s=null,a=null,o=null,l=null,c=null,f="",h={}){if(!t){ee.Error("No scene available to load animations to");return}if(i){for(let _ of t.animatables)_.reset();t.stopAllAnimations();let m=t.animationGroups.slice();for(let _ of m)_.dispose();let p=t.getNodes();for(let _ of p)_.animations&&(_.animations=[])}else switch(r){case 0:let m=t.animationGroups.slice();for(let p of m)p.dispose();break;case 1:for(let p of t.animationGroups)p.stop();break;case 2:for(let p of t.animationGroups)p.reset(),p.restart();break;case 3:break;default:ee.Error("Unknown animation group loading mode value '"+r+"'");return}let d=t.animatables.length;await aD(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 Ofe(n,e,t,i,r,s,a,o,l,c){return await new Promise((f,h)=>{try{x5(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 v5,E5,ul,eD,od,ep=M(()=>{Ci();di();Cs();Ni();Pt();QA();zl();j_();K_();Ur();g5();(function(n){n[n.Clean=0]="Clean",n[n.Stop=1]="Stop",n[n.Sync=2]="Sync",n[n.NoSync=3]="NoSync"})(v5||(v5={}));E5=new ie,ul={},eD=!1;od=class{static get ForceFullSceneLoadingForIncremental(){return Yr.ForceFullSceneLoadingForIncremental}static set ForceFullSceneLoadingForIncremental(e){Yr.ForceFullSceneLoadingForIncremental=e}static get ShowLoadingScreen(){return Yr.ShowLoadingScreen}static set ShowLoadingScreen(e){Yr.ShowLoadingScreen=e}static get loggingLevel(){return Yr.loggingLevel}static set loggingLevel(e){Yr.loggingLevel=e}static get CleanBoneMatrixWeights(){return Yr.CleanBoneMatrixWeights}static set CleanBoneMatrixWeights(e){Yr.CleanBoneMatrixWeights=e}static GetDefaultPlugin(){return PR()}static GetPluginForExtension(e){var t;return(t=tD(e,!0))==null?void 0:t.plugin}static IsPluginForExtensionAvailable(e){return Ife(e)}static RegisterPlugin(e){Yf(e)}static ImportMesh(e,t,i,r,s,a,o,l,c,f){S5(e,t,i,r,s,a,o,l,c,f).catch(h=>o==null?void 0:o(Oe.LastCreatedScene,h==null?void 0:h.message,h))}static async ImportMeshAsync(e,t,i,r,s,a,o){return await T5(e,t,i,r,s,a,o)}static Load(e,t,i,r,s,a,o,l){A5(e,t,i,r,s,a,o,l).catch(c=>a==null?void 0:a(Oe.LastCreatedScene,c==null?void 0:c.message,c))}static async LoadAsync(e,t,i,r,s,a){return await Pfe(e,t,i,r,s,a)}static Append(e,t,i,r,s,a,o,l){sD(e,t,i,r,s,a,o,l).catch(c=>a==null?void 0:a(i!=null?i:Oe.LastCreatedScene,c==null?void 0:c.message,c))}static async AppendAsync(e,t,i,r,s,a){return await Lfe(e,t,i,r,s,a)}static LoadAssetContainer(e,t,i,r,s,a,o,l){aD(e,t,i,r,s,a,o,l).catch(c=>a==null?void 0:a(i!=null?i:Oe.LastCreatedScene,c==null?void 0:c.message,c))}static async LoadAssetContainerAsync(e,t,i,r,s,a){return await Dfe(e,t,i,r,s,a)}static ImportAnimations(e,t,i,r,s,a,o,l,c,f,h){x5(e,t,i,r,s,a,o,l,c,f,h).catch(d=>c==null?void 0:c(i!=null?i:Oe.LastCreatedScene,d==null?void 0:d.message,d))}static async ImportAnimationsAsync(e,t,i,r,s,a,o,l,c,f,h){return await Ofe(e,t,i,r,s,a,l,f,h)}};od.NO_LOGGING=0;od.MINIMAL_LOGGING=1;od.SUMMARY_LOGGING=2;od.DETAILED_LOGGING=3;od.OnPluginActivatedObservable=E5});var LR,oD,lD,ml,jg=M(()=>{yi();Zh();vm();Pt();Ni();IP();yf();al();Ci();df();LR=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}},oD=class extends LR{},lD=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}},ml=class extends LR{constructor(e){super(),this._wasAddedToScene=!1,e=e||Oe.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 rc){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&&(ee.Error("SceneSerializer._topologicalSort: There were unvisited nodes:"),t.forEach(o=>{ee.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 Er&&this.meshes.indexOf(e)!==-1||e instanceof ei&&this.transformNodes.indexOf(e)!==-1||e instanceof Xt&&this.lights.indexOf(e)!==-1||e instanceof mt&&this.cameras.indexOf(e)!==-1}_isValidHierarchy(){for(let e of this.meshes)if(e.parent&&!this._isNodeInContainer(e.parent))return ee.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 ee.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 ee.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 ee.Warn(`Node ${e.name} has a parent that is not in the container.`),!1;return!0}instantiateModelsToScene(e,t=!1,i){this._isValidHierarchy()||_e.Warn("SceneSerializer.InstantiateModelsToScene: The Asset Container hierarchy is not valid.");let r={},s={},a=new lD,o=[],l=[],c={doNotInstantiate:!0,...i},f=(p,_)=>{if(r[p.uniqueId]=_.uniqueId,s[_.uniqueId]=_,e&&(_.name=e(p.name)),_ instanceof q){let g=_;if(g.morphTargetManager){let v=p.morphTargetManager;g.morphTargetManager=v.clone();for(let x=0;x{if(f(p,_),p.parent){let g=r[p.parent.uniqueId],v=s[g];v?_.parent=v:_.parent=p.parent}if(_.position&&p.position&&_.position.copyFrom(p.position),_.rotationQuaternion&&p.rotationQuaternion&&_.rotationQuaternion.copyFrom(p.rotationQuaternion),_.rotation&&p.rotation&&_.rotation.copyFrom(p.rotation),_.scaling&&p.scaling&&_.scaling.copyFrom(p.scaling),_.material){let g=_;if(g.material)if(t){let v=p.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 T=v;for(let E of T.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);T.subMaterials=T.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)}_.parent===null&&a.rootNodes.push(_)};for(let p of u)if(p.getClassName()==="InstancedMesh"){let _=p,g=_.sourceMesh,v=r[g.uniqueId],T=(typeof v=="number"?s[v]:g).createInstance(_.name);m(_,T)}else{let _=!0;p.getClassName()==="TransformNode"||p.getClassName()==="Node"||p.skeleton||!p.getTotalVertices||p.getTotalVertices()===0?_=!1:c.doNotInstantiate&&(typeof c.doNotInstantiate=="function"?_=!c.doNotInstantiate(p):_=!c.doNotInstantiate);let g=_?p.createInstance(`instance of ${p.name}`):p.clone(`Clone of ${p.name}`,null,!0);if(!g)throw new Error(`Could not clone or instantiate node on Asset Container ${p.name}`);m(p,g)}for(let p of this.skeletons){if(c.predicate&&!c.predicate(p))continue;let _=p.clone(e?e(p.name):"Clone of "+p.name);for(let g of this.meshes)if(g.skeleton===p&&!g.isAnInstance){let v=s[r[g.uniqueId]];if(!v||v.isAnInstance||(v.skeleton=_,o.indexOf(_)!==-1))continue;o.push(_);for(let x of _.bones)x._linkedTransformNode&&(x._linkedTransformNode=s[r[x._linkedTransformNode.uniqueId]])}a.skeletons.push(_)}for(let p of this.animationGroups){if(c.predicate&&!c.predicate(p))continue;let _=p.clone(e?e(p.name):"Clone of "+p.name,g=>s[r[g.uniqueId]]||g);a.animationGroups.push(_)}return a}addAllToScene(){if(!this._wasAddedToScene){this._isValidHierarchy()||_e.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()||_e.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 p of e)p.dispose();this.cameras.length=0;let t=this.lights.slice(0);for(let p of t)p.dispose();this.lights.length=0;let i=this.meshes.slice(0);for(let p of i)p.dispose();this.meshes.length=0;let r=this.skeletons.slice(0);for(let p of r)p.dispose();this.skeletons.length=0;let s=this.animationGroups.slice(0);for(let p of s)p.dispose();this.animationGroups.length=0;let a=this.multiMaterials.slice(0);for(let p of a)p.dispose();this.multiMaterials.length=0;let o=this.materials.slice(0);for(let p of o)p.dispose();this.materials.length=0;let l=this.geometries.slice(0);for(let p of l)p.dispose();this.geometries.length=0;let c=this.transformNodes.slice(0);for(let p of c)p.dispose();this.transformNodes.length=0;let f=this.actionManagers.slice(0);for(let p of f)p.dispose();this.actionManagers.length=0;let h=this.textures.slice(0);for(let p of h)p.dispose();this.textures.length=0;let d=this.reflectionProbes.slice(0);for(let p of d)p.dispose();this.reflectionProbes.length=0;let u=this.morphTargetManagers.slice(0);for(let p of u)p.dispose();this.morphTargetManagers.length=0;let m=this.spriteManagers.slice(0);for(let p of m)p.dispose();this.spriteManagers.length=0,this.environmentTexture&&(this.environmentTexture.dispose(),this.environmentTexture=null);for(let p of this.scene._serializableComponents)p.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 oD);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=Oe.LastCreatedScene,t,i=null){if(!e)return ee.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 rc?this.meshes.push(r):r instanceof ei?this.transformNodes.push(r):r instanceof Xt?this.lights.push(r):r instanceof mt&&this.cameras.push(r),r instanceof Er){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 ld,R5=M(()=>{q_();ld=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 SB(this.readUint8Array(e))}skipBytes(e){this._dataByteOffset+=e,this.byteOffset+=e}}});function cD(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 Nfe(){let n=[];onmessage=e=>{let t=e.data;switch(t.id){case"init":{importScripts(t.url);break}case"validate":{cD(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 tp,b5=M(()=>{Ci();tp=class n{static ValidateAsync(e,t,i,r){return typeof Worker=="function"?new Promise((s,a)=>{let o=`${cD}(${Nfe})()`,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:_e.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=_e.LoadBabylonScriptAsync(this.Configuration.url)),this._LoadScriptPromise.then(()=>cD(e,t,i,r)))}};tp.Configuration={url:`${_e._DefaultCdnUrl}/gltf_validator.js`};tp._LastResults=null});var xc,qg,I5=M(()=>{xc="Z2xURg",qg={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,"+xc)||n.startsWith("data:;base64,"+xc)||n.startsWith("data:application/octet-stream;base64,"+xc)||n.startsWith("data:model/gltf-binary;base64,"+xc)}}});function M5(n,e,t){try{return Promise.resolve(new Uint8Array(n,e,t))}catch(i){return Promise.reject(i)}}function wfe(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 ip,cd,ns,DR,Ffe,fD,Kf,hD=M(()=>{di();Ci();ep();jg();Pt();R5();b5();I5();zl();j_();(function(n){n[n.AUTO=0]="AUTO",n[n.FORCE_RIGHT_HANDED=1]="FORCE_RIGHT_HANDED"})(ip||(ip={}));(function(n){n[n.NONE=0]="NONE",n[n.FIRST=1]="FIRST",n[n.ALL=2]="ALL"})(cd||(cd={}));(function(n){n[n.LOADING=0]="LOADING",n[n.READY=1]="READY",n[n.COMPLETE=2]="COMPLETE"})(ns||(ns={}));DR=class{constructor(){this.alwaysComputeBoundingBox=!1,this.alwaysComputeSkeletonRootNode=!1,this.animationStartMode=cd.FIRST,this.compileMaterials=!1,this.compileShadowGenerators=!1,this.coordinateSystemMode=ip.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}},Ffe=new DR,fD=class extends DR{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,T,E,S,R,I,C,y,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=(p=e.loadSkins)!=null?p:this.loadSkins,this.loggingEnabled=(_=e.loggingEnabled)!=null?_: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=(T=e.transparencyAsCoverage)!=null?T:this.transparencyAsCoverage,this.useClipPlane=(E=e.useClipPlane)!=null?E:this.useClipPlane,this.useGltfTextureNames=(S=e.useGltfTextureNames)!=null?S:this.useGltfTextureNames,this.useOpenPBR=(R=e.useOpenPBR)!=null?R:this.useOpenPBR,this.useRangeRequests=(I=e.useRangeRequests)!=null?I:this.useRangeRequests,this.useSRGBBuffers=(C=e.useSRGBBuffers)!=null?C:this.useSRGBBuffers,this.validate=(y=e.validate)!=null?y:this.validate,this.dontUseTransmissionHelper=(D=e.dontUseTransmissionHelper)!=null?D:this.dontUseTransmissionHelper)}},Kf=class n extends fD{constructor(e){super(),this.onParsedObservable=new ie,this.onMeshLoadedObservable=new ie,this.onSkinLoadedObservable=new ie,this.onTextureLoadedObservable=new ie,this.onMaterialLoadedObservable=new ie,this.onCameraLoadedObservable=new ie,this.onCompleteObservable=new ie,this.onErrorObservable=new ie,this.onDisposeObservable=new ie,this.onExtensionLoadedObservable=new ie,this.onValidatedObservable=new ie,this._loader=null,this._state=null,this._requests=new Array,this.name=qg.name,this.extensions=qg.extensions,this.onLoaderStateChangedObservable=new ie,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({...Ffe},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||_e.GetFilename(t);if(a){if(this.useRangeRequests){this.validate&&ee.Warn("glTF validation is not supported when range requests are enabled");let f={abort:()=>{},onCompleteObservable:new ie},h={readAsync:(d,u)=>new Promise((m,p)=>{this._loadFile(e,t,_=>{m(new Uint8Array(_))},!0,_=>{p(_)},_=>{_.setRequestHeader("Range",`bytes=${d}-${d+u-1}`)})}),byteLength:0};return this._unpackBinaryAsync(new ld(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 ld({readAsync:(h,d)=>M5(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 ld({readAsync:(o,l)=>wfe(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 ml(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 qg.canDirectLoad(e)}directLoad(e,t){if(t.startsWith("base64,"+xc)||t.startsWith(";base64,"+xc)||t.startsWith("application/octet-stream;base64,"+xc)||t.startsWith("model/gltf-binary;base64,"+xc)){let i=hf(t);return this._validate(e,new Uint8Array(i,0,i.byteLength)),this._unpackBinaryAsync(new ld({readAsync:(r,s)=>M5(i,r,s),byteLength:i.byteLength}))}return this._validate(e,t),Promise.resolve({json:this._parseJson(t)})}createPlugin(e){return new n(e[qg.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(ns[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"),tp.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"),_e.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,Ta.GLTFLoaderUnexpectedMagicError);let r=e.readUint32();this.loggingEnabled&&this._log(`Binary version: ${r}`);let s=e.readUint32();!this.useRangeRequests&&s!==e.buffer.byteLength&&ee.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{OR=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 Xn,y5=M(()=>{Gt();Vt();hl();LA();Ge();Ci();Xn=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=_e.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===ho.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{Gt();di();Vt();hl();fo();Ci();fd=class{constructor(e=!0){this.touchEnabled=e,this.buttons=[0,1,2],this.angularSensibility=2e3,this._previousPosition=null,this.onPointerMovedObservable=new ie,this._allowCameraRotation=!0,this._currentActiveButton=-1,this._activePointerId=-1}attachControl(e){e=_e.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!==st.POINTERMOVE&&this.buttons.indexOf(s.button)===-1)return;let o=s.target;if(r.type===st.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===st.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===st.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,st.POINTERDOWN|st.POINTERUP|st.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()],fd.prototype,"buttons",void 0);P([F()],fd.prototype,"angularSensibility",void 0);kn.FreeCameraMouseInput=fd});var hd,L5=M(()=>{Gt();Vt();di();fo();DA();Ci();hd=class{constructor(){this.wheelPrecisionX=3,this.wheelPrecisionY=3,this.wheelPrecisionZ=3,this.onChangedObservable=new ie,this._wheelDeltaX=0,this._wheelDeltaY=0,this._wheelDeltaZ=0,this._ffMultiplier=12,this._normalize=120}attachControl(e){e=_e.BackCompatCameraNoPreventDefault(arguments),this._wheel=t=>{if(t.type!==st.POINTERWHEEL)return;let i=t.event,r=i.deltaMode===uo.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,st.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()],hd.prototype,"wheelPrecisionX",void 0);P([F()],hd.prototype,"wheelPrecisionY",void 0);P([F()],hd.prototype,"wheelPrecisionZ",void 0)});var wi,ws,D5=M(()=>{Gt();Vt();hl();L5();Ge();(function(n){n[n.MoveRelative=0]="MoveRelative",n[n.RotateRelative=1]="RotateRelative",n[n.MoveScene=2]="MoveScene"})(wi||(wi={}));ws=class extends hd{constructor(){super(...arguments),this._moveRelative=b.Zero(),this._rotateRelative=b.Zero(),this._moveScene=b.Zero(),this._wheelXAction=wi.MoveRelative,this._wheelXActionCoordinate=0,this._wheelYAction=wi.MoveRelative,this._wheelYActionCoordinate=2,this._wheelZAction=null,this._wheelZActionCoordinate=null}getClassName(){return"FreeCameraMouseWheelInput"}set wheelXMoveRelative(e){e===null&&this._wheelXAction!==wi.MoveRelative||(this._wheelXAction=wi.MoveRelative,this._wheelXActionCoordinate=e)}get wheelXMoveRelative(){return this._wheelXAction!==wi.MoveRelative?null:this._wheelXActionCoordinate}set wheelYMoveRelative(e){e===null&&this._wheelYAction!==wi.MoveRelative||(this._wheelYAction=wi.MoveRelative,this._wheelYActionCoordinate=e)}get wheelYMoveRelative(){return this._wheelYAction!==wi.MoveRelative?null:this._wheelYActionCoordinate}set wheelZMoveRelative(e){e===null&&this._wheelZAction!==wi.MoveRelative||(this._wheelZAction=wi.MoveRelative,this._wheelZActionCoordinate=e)}get wheelZMoveRelative(){return this._wheelZAction!==wi.MoveRelative?null:this._wheelZActionCoordinate}set wheelXRotateRelative(e){e===null&&this._wheelXAction!==wi.RotateRelative||(this._wheelXAction=wi.RotateRelative,this._wheelXActionCoordinate=e)}get wheelXRotateRelative(){return this._wheelXAction!==wi.RotateRelative?null:this._wheelXActionCoordinate}set wheelYRotateRelative(e){e===null&&this._wheelYAction!==wi.RotateRelative||(this._wheelYAction=wi.RotateRelative,this._wheelYActionCoordinate=e)}get wheelYRotateRelative(){return this._wheelYAction!==wi.RotateRelative?null:this._wheelYActionCoordinate}set wheelZRotateRelative(e){e===null&&this._wheelZAction!==wi.RotateRelative||(this._wheelZAction=wi.RotateRelative,this._wheelZActionCoordinate=e)}get wheelZRotateRelative(){return this._wheelZAction!==wi.RotateRelative?null:this._wheelZActionCoordinate}set wheelXMoveScene(e){e===null&&this._wheelXAction!==wi.MoveScene||(this._wheelXAction=wi.MoveScene,this._wheelXActionCoordinate=e)}get wheelXMoveScene(){return this._wheelXAction!==wi.MoveScene?null:this._wheelXActionCoordinate}set wheelYMoveScene(e){e===null&&this._wheelYAction!==wi.MoveScene||(this._wheelYAction=wi.MoveScene,this._wheelYActionCoordinate=e)}get wheelYMoveScene(){return this._wheelYAction!==wi.MoveScene?null:this._wheelYActionCoordinate}set wheelZMoveScene(e){e===null&&this._wheelZAction!==wi.MoveScene||(this._wheelZAction=wi.MoveScene,this._wheelZActionCoordinate=e)}get wheelZMoveScene(){return this._wheelZAction!==wi.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=j.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 wi.MoveRelative:r=this._moveRelative;break;case wi.RotateRelative:r=this._rotateRelative;break;case wi.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()],ws.prototype,"wheelXMoveRelative",null);P([F()],ws.prototype,"wheelYMoveRelative",null);P([F()],ws.prototype,"wheelZMoveRelative",null);P([F()],ws.prototype,"wheelXRotateRelative",null);P([F()],ws.prototype,"wheelYRotateRelative",null);P([F()],ws.prototype,"wheelZRotateRelative",null);P([F()],ws.prototype,"wheelXMoveScene",null);P([F()],ws.prototype,"wheelYMoveScene",null);P([F()],ws.prototype,"wheelZMoveScene",null);kn.FreeCameraMouseWheelInput=ws});var dd,O5=M(()=>{Gt();Vt();hl();fo();Ge();Ci();dd=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=_e.IsSafari()}attachControl(e){e=_e.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===st.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===st.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===st.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,st.POINTERDOWN|st.POINTERUP|st.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),j.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()],dd.prototype,"touchAngularSensibility",void 0);P([F()],dd.prototype,"touchMoveSensibility",void 0);kn.FreeCameraTouchInput=dd});var NR,N5=M(()=>{hl();y5();P5();D5();O5();NR=class extends Gm{constructor(e){super(e),this._mouseInput=null,this._mouseWheelInput=null}addKeyboard(){return this.add(new Xn),this}addMouse(e=!0){return this._mouseInput||(this._mouseInput=new fd(e),this.add(this._mouseInput)),this}removeMouse(){return this._mouseInput&&this.remove(this._mouseInput),this}addMouseWheel(){return this._mouseWheelInput||(this._mouseWheelInput=new ws,this.add(this._mouseWheelInput)),this}removeMouseWheel(){return this._mouseWheelInput&&this.remove(this._mouseWheelInput),this}addTouch(){return this.add(new dd),this}clear(){super.clear(),this._mouseInput=null}}});var Rc,w5=M(()=>{Gt();Vt();Ge();fP();N5();Ci();zi();Ur();Rc=class extends Ls{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()>Me.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 NR(this),this.inputs.addKeyboard().addMouse()}attachControl(e,t){t=_e.BackCompatCameraNoPreventDefault(arguments),this.inputs.attachElement(t)}detachControl(){this.inputs.detachElement(),this.cameraDirection=new b(0,0,0),this.cameraRotation=new Fe(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([zr()],Rc.prototype,"ellipsoid",void 0);P([zr()],Rc.prototype,"ellipsoidOffset",void 0);P([F()],Rc.prototype,"checkCollisions",void 0);P([F()],Rc.prototype,"applyGravity",void 0);Ft("BABYLON.FreeCamera",Rc)});var Ba,wR=M(()=>{Ge();Qo();Js();Ba=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:j.Identity(),this._restMatrix=s!=null?s:this._localMatrix.clone(),this._bindMatrix=a!=null?a:this._localMatrix.clone(),this._index=o,this._absoluteMatrix=new j,this._absoluteBindMatrix=new j,this._absoluteInverseBindMatrix=new j,this._finalMatrix=new j,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,j.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{Vr();Zg=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 FR,B5=M(()=>{wR();di();Ge();F5();If();iP();Ni();Pt();$_();FR=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=j.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 ie,this.metadata=null,this.bones=[],this._scene=i||Oe.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=Zg.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=Zg.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?j.FromArray(s.rest):null,c=new Ba(s.name,i,o,j.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(ht.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{Gt();di();Ni();ki();Vt();xr();zi();jf=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 ie,this._onDataLayoutChanged=new ie,this.morphTargetManager=null,this._animationPropertiesOverride=null,this.id=e,this.morphTargetManager=r,this._scene=i||Oe.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=it.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())),it.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{Vr();BR=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 ud,V5=M(()=>{lo();Pt();Ni();dD();U5();ud=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 Ui(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=Oe.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){ee.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(jf.Parse(r,t,i));return e.metadata&&(i.metadata=e.metadata),i}};ud.EnableTextureStorage=!0;ud.MaxActiveMorphTargetsInVertexAttributeMode=8;ud.ConstantTargetCountForTextureMode=0});function UR(n,e,t){Qg(n)&&ee.Warn(`Extension with the name '${n}' already exists`),uD.set(n,{isGLTFExtension:e,factory:t})}function Qg(n){return uD.delete(n)}var uD,G5,mD=M(()=>{Pt();uD=new Map,G5=uD});var k,pD=M(()=>{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 fqe,k5=M(()=>{fqe=[{regex:new RegExp("^/nodes/\\d+/extensions/")}]});function qf(n,e,t,i){let r=at(n,e);return i?r[t][i]:r[t]}function at(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 sn(n,e){return{offset:{componentsCount:2,type:"Vector2",get:(t,i,r)=>{let s=qf(t,r,n,e);return new Fe(s==null?void 0:s.uOffset,s==null?void 0:s.vOffset)},getTarget:at,set:(t,i,r,s)=>{let a=qf(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=qf(t,r,n,e))==null?void 0:s.wAng},getTarget:at,set:(t,i,r,s)=>qf(i,s,n,e).wAng=t,getPropertyName:[()=>`${n}${e?"."+e:""}.wAng`]},scale:{componentsCount:2,type:"Vector2",get:(t,i,r)=>{let s=qf(t,r,n,e);return new Fe(s==null?void 0:s.uScale,s==null?void 0:s.vScale)},getTarget:at,set:(t,i,r,s)=>{let a=qf(i,s,n,e);a.uScale=t.x,a.vScale=t.y},getPropertyName:[()=>`${n}${e?"."+e:""}.uScale`,()=>`${n}${e?"."+e:""}.vScale`]}}}function $g(n){let e=n.split("/").map(i=>i.replace(/{}/g,"__array__")),t=W5;for(let i of e)i&&(t=t[i]);if(t&&t.type&&t.get)return t}function Jg(n,e){let t=n.split("/").map(r=>r.replace(/{}/g,"__array__")),i=W5;for(let r of t)r&&(i=i[r]);i&&i.type&&i.get&&(i.interpolation=e)}var Bfe,Ufe,Vfe,Gfe,kfe,Wfe,W5,_D=M(()=>{Ge();pD();zt();hP();k5();Bfe={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 j.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=j.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 kr,!0)[0])==null?void 0:t.intensity},getTarget:n=>{var e;return(e=n._babylonTransformNode)==null?void 0:e.getChildren(t=>t instanceof kr,!0)[0]},set:(n,e)=>{if(e._babylonTransformNode){let t=e._babylonTransformNode.getChildren(i=>i instanceof kr,!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 kr,!0)[0])==null?void 0:t.diffuse},getTarget:n=>{var e;return(e=n._babylonTransformNode)==null?void 0:e.getChildren(t=>t instanceof kr,!0)[0]},set:(n,e)=>{if(e._babylonTransformNode){let t=e._babylonTransformNode.getChildren(i=>i instanceof kr,!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)}}}}}},Ufe={length:{type:"number",get:n=>n.length,getTarget:n=>n.map(e=>e._babylonAnimationGroup),getPropertyName:[()=>"length"]},__array__:{}},Vfe={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__:{}},Gfe={__array__:{__target__:!0,orthographic:{xmag:{componentsCount:2,type:"Vector2",get:n=>{var e,t,i,r;return new Fe((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 Fe((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"]}}}},kfe={__array__:{__target__:!0,emissiveFactor:{type:"Color3",get:(n,e,t)=>at(n,e,t).emissiveColor,set:(n,e,t,i)=>at(e,t,i).emissiveColor.copyFrom(n),getTarget:(n,e,t)=>at(n,e,t),getPropertyName:[()=>"emissiveColor"]},emissiveTexture:{extensions:{KHR_texture_transform:sn("emissiveTexture")}},normalTexture:{scale:{type:"number",get:(n,e,t)=>{var i;return(i=qf(n,t,"bumpTexture"))==null?void 0:i.level},set:(n,e,t,i)=>{let r=qf(e,i,"bumpTexture");r&&(r.level=n)},getTarget:(n,e,t)=>at(n,e,t),getPropertyName:[()=>"level"]},extensions:{KHR_texture_transform:sn("bumpTexture")}},occlusionTexture:{strength:{type:"number",get:(n,e,t)=>at(n,e,t).ambientTextureStrength,set:(n,e,t,i)=>{let r=at(e,t,i);r&&(r.ambientTextureStrength=n)},getTarget:(n,e,t)=>at(n,e,t),getPropertyName:[()=>"ambientTextureStrength"]},extensions:{KHR_texture_transform:sn("ambientTexture")}},pbrMetallicRoughness:{baseColorFactor:{type:"Color4",get:(n,e,t)=>{let i=at(n,e,t);return lt.FromColor3(i.albedoColor,i.alpha)},set:(n,e,t,i)=>{let r=at(e,t,i);r.albedoColor.set(n.r,n.g,n.b),r.alpha=n.a},getTarget:(n,e,t)=>at(n,e,t),getPropertyName:[()=>"albedoColor",()=>"alpha"]},baseColorTexture:{extensions:{KHR_texture_transform:sn("albedoTexture")}},metallicFactor:{type:"number",get:(n,e,t)=>at(n,e,t).metallic,set:(n,e,t,i)=>{let r=at(e,t,i);r&&(r.metallic=n)},getTarget:(n,e,t)=>at(n,e,t),getPropertyName:[()=>"metallic"]},roughnessFactor:{type:"number",get:(n,e,t)=>at(n,e,t).roughness,set:(n,e,t,i)=>{let r=at(e,t,i);r&&(r.roughness=n)},getTarget:(n,e,t)=>at(n,e,t),getPropertyName:[()=>"roughness"]},metallicRoughnessTexture:{extensions:{KHR_texture_transform:sn("metallicTexture")}}},extensions:{KHR_materials_anisotropy:{anisotropyStrength:{type:"number",get:(n,e,t)=>at(n,e,t).anisotropy.intensity,set:(n,e,t,i)=>{at(e,t,i).anisotropy.intensity=n},getTarget:(n,e,t)=>at(n,e,t),getPropertyName:[()=>"anisotropy.intensity"]},anisotropyRotation:{type:"number",get:(n,e,t)=>at(n,e,t).anisotropy.angle,set:(n,e,t,i)=>{at(e,t,i).anisotropy.angle=n},getTarget:(n,e,t)=>at(n,e,t),getPropertyName:[()=>"anisotropy.angle"]},anisotropyTexture:{extensions:{KHR_texture_transform:sn("anisotropy","texture")}}},KHR_materials_clearcoat:{clearcoatFactor:{type:"number",get:(n,e,t)=>at(n,e,t).clearCoat.intensity,set:(n,e,t,i)=>{at(e,t,i).clearCoat.intensity=n},getTarget:(n,e,t)=>at(n,e,t),getPropertyName:[()=>"clearCoat.intensity"]},clearcoatRoughnessFactor:{type:"number",get:(n,e,t)=>at(n,e,t).clearCoat.roughness,set:(n,e,t,i)=>{at(e,t,i).clearCoat.roughness=n},getTarget:(n,e,t)=>at(n,e,t),getPropertyName:[()=>"clearCoat.roughness"]},clearcoatTexture:{extensions:{KHR_texture_transform:sn("clearCoat","texture")}},clearcoatNormalTexture:{scale:{type:"number",get:(n,e,t)=>{var i;return(i=at(n,e,t).clearCoat.bumpTexture)==null?void 0:i.level},getTarget:at,set:(n,e,t,i)=>at(e,t,i).clearCoat.bumpTexture.level=n},extensions:{KHR_texture_transform:sn("clearCoat","bumpTexture")}},clearcoatRoughnessTexture:{extensions:{KHR_texture_transform:sn("clearCoat","textureRoughness")}}},KHR_materials_dispersion:{dispersion:{type:"number",get:(n,e,t)=>at(n,e,t).subSurface.dispersion,getTarget:at,set:(n,e,t,i)=>at(e,t,i).subSurface.dispersion=n}},KHR_materials_emissive_strength:{emissiveStrength:{type:"number",get:(n,e,t)=>at(n,e,t).emissiveIntensity,getTarget:at,set:(n,e,t,i)=>at(e,t,i).emissiveIntensity=n}},KHR_materials_ior:{ior:{type:"number",get:(n,e,t)=>at(n,e,t).indexOfRefraction,getTarget:at,set:(n,e,t,i)=>at(e,t,i).indexOfRefraction=n}},KHR_materials_iridescence:{iridescenceFactor:{type:"number",get:(n,e,t)=>at(n,e,t).iridescence.intensity,getTarget:at,set:(n,e,t,i)=>at(e,t,i).iridescence.intensity=n},iridescenceIor:{type:"number",get:(n,e,t)=>at(n,e,t).iridescence.indexOfRefraction,getTarget:at,set:(n,e,t,i)=>at(e,t,i).iridescence.indexOfRefraction=n},iridescenceTexture:{extensions:{KHR_texture_transform:sn("iridescence","texture")}},iridescenceThicknessMaximum:{type:"number",get:(n,e,t)=>at(n,e,t).iridescence.maximumThickness,getTarget:at,set:(n,e,t,i)=>at(e,t,i).iridescence.maximumThickness=n},iridescenceThicknessMinimum:{type:"number",get:(n,e,t)=>at(n,e,t).iridescence.minimumThickness,getTarget:at,set:(n,e,t,i)=>at(e,t,i).iridescence.minimumThickness=n},iridescenceThicknessTexture:{extensions:{KHR_texture_transform:sn("iridescence","thicknessTexture")}}},KHR_materials_sheen:{sheenColorFactor:{type:"Color3",get:(n,e,t)=>at(n,e,t).sheen.color,getTarget:at,set:(n,e,t,i)=>at(e,t,i).sheen.color.copyFrom(n)},sheenColorTexture:{extensions:{KHR_texture_transform:sn("sheen","texture")}},sheenRoughnessFactor:{type:"number",get:(n,e,t)=>at(n,e,t).sheen.intensity,getTarget:at,set:(n,e,t,i)=>at(e,t,i).sheen.intensity=n},sheenRoughnessTexture:{extensions:{KHR_texture_transform:sn("sheen","thicknessTexture")}}},KHR_materials_specular:{specularFactor:{type:"number",get:(n,e,t)=>at(n,e,t).metallicF0Factor,getTarget:at,set:(n,e,t,i)=>at(e,t,i).metallicF0Factor=n,getPropertyName:[()=>"metallicF0Factor"]},specularColorFactor:{type:"Color3",get:(n,e,t)=>at(n,e,t).metallicReflectanceColor,getTarget:at,set:(n,e,t,i)=>at(e,t,i).metallicReflectanceColor.copyFrom(n),getPropertyName:[()=>"metallicReflectanceColor"]},specularTexture:{extensions:{KHR_texture_transform:sn("metallicReflectanceTexture")}},specularColorTexture:{extensions:{KHR_texture_transform:sn("reflectanceTexture")}}},KHR_materials_transmission:{transmissionFactor:{type:"number",get:(n,e,t)=>at(n,e,t).subSurface.refractionIntensity,getTarget:at,set:(n,e,t,i)=>at(e,t,i).subSurface.refractionIntensity=n,getPropertyName:[()=>"subSurface.refractionIntensity"]},transmissionTexture:{extensions:{KHR_texture_transform:sn("subSurface","refractionIntensityTexture")}}},KHR_materials_diffuse_transmission:{diffuseTransmissionFactor:{type:"number",get:(n,e,t)=>at(n,e,t).subSurface.translucencyIntensity,getTarget:at,set:(n,e,t,i)=>at(e,t,i).subSurface.translucencyIntensity=n},diffuseTransmissionTexture:{extensions:{KHR_texture_transform:sn("subSurface","translucencyIntensityTexture")}},diffuseTransmissionColorFactor:{type:"Color3",get:(n,e,t)=>at(n,e,t).subSurface.translucencyColor,getTarget:at,set:(n,e,t,i)=>{var r;return n&&((r=at(e,t,i).subSurface.translucencyColor)==null?void 0:r.copyFrom(n))}},diffuseTransmissionColorTexture:{extensions:{KHR_texture_transform:sn("subSurface","translucencyColorTexture")}}},KHR_materials_volume:{attenuationColor:{type:"Color3",get:(n,e,t)=>at(n,e,t).subSurface.tintColor,getTarget:at,set:(n,e,t,i)=>at(e,t,i).subSurface.tintColor.copyFrom(n)},attenuationDistance:{type:"number",get:(n,e,t)=>at(n,e,t).subSurface.tintColorAtDistance,getTarget:at,set:(n,e,t,i)=>at(e,t,i).subSurface.tintColorAtDistance=n},thicknessFactor:{type:"number",get:(n,e,t)=>at(n,e,t).subSurface.maximumThickness,getTarget:at,set:(n,e,t,i)=>at(e,t,i).subSurface.maximumThickness=n},thicknessTexture:{extensions:{KHR_texture_transform:sn("subSurface","thicknessTexture")}}}}}},Wfe={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)),j.FromQuaternionToRef(n,e._babylonTexture.getReflectionTextureMatrix()))},getTarget:n=>n._babylonTexture}}}}};W5={cameras:Gfe,nodes:Bfe,materials:kfe,extensions:Wfe,animations:Ufe,meshes:Vfe}});function gD(...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]=gD(a,o):t[s]=o}return t},{})}var H5=M(()=>{});var ev,z5=M(()=>{ev=class{constructor(e){this._factory=e}get value(){return this._factory&&(this._value=this._factory(),this._factory=void 0),this._value}}});var VR,X5=M(()=>{Ge();If();VR=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===ht.ANIMATIONTYPE_MATRIX&&(this._animationState.workValue=j.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,p=e*(o.framePerSecond*s)/1e3+this._absoluteFrameOffset,_=0,g=!1,v=r&&this._animationState.loopMode===ht.ANIMATIONLOOPMODE_YOYO;if(v){let x=(p-t)/d,T=Math.sin(x*Math.PI);p=Math.abs(T)*d+t;let S=T>=0?1:-1;this._yoyoDirection!==S&&(g=!0),this._yoyoDirection=S}if(this._previousElapsedTime=e,this._previousAbsoluteFrame=p,!r&&i>=t&&(p>=d&&s>0||p<=0&&s<0))c=!1,_=o.evaluate(i);else if(!r&&t>=i&&(p<=d&&s<0||p>=0&&s>0))c=!1,_=o.evaluate(t);else if(this._animationState.loopMode!==ht.ANIMATIONLOOPMODE_CYCLE){let x=i.toString()+t.toString();if(!this._offsetsCache[x]){this._animationState.repeatCount=0,this._animationState.loopMode=ht.ANIMATIONLOOPMODE_CYCLE;let T=o._interpolate(t,this._animationState),E=o._interpolate(i,this._animationState);switch(this._animationState.loopMode=this._getCorrectLoopMode(),o.dataType){case ht.ANIMATIONTYPE_FLOAT:this._offsetsCache[x]=E-T;break;case ht.ANIMATIONTYPE_QUATERNION:this._offsetsCache[x]=E.subtract(T);break;case ht.ANIMATIONTYPE_VECTOR3:this._offsetsCache[x]=E.subtract(T);break;case ht.ANIMATIONTYPE_VECTOR2:this._offsetsCache[x]=E.subtract(T);break;case ht.ANIMATIONTYPE_SIZE:this._offsetsCache[x]=E.subtract(T);break;case ht.ANIMATIONTYPE_COLOR3:this._offsetsCache[x]=E.subtract(T);break;default:break}this._highLimitsCache[x]=E}_=this._highLimitsCache[x],m=this._offsetsCache[x]}if(m===void 0)switch(o.dataType){case ht.ANIMATIONTYPE_FLOAT:m=0;break;case ht.ANIMATIONTYPE_QUATERNION:m=rP;break;case ht.ANIMATIONTYPE_VECTOR3:m=nP;break;case ht.ANIMATIONTYPE_VECTOR2:m=sP;break;case ht.ANIMATIONTYPE_SIZE:m=aP;break;case ht.ANIMATIONTYPE_COLOR3:m=oP;break;case ht.ANIMATIONTYPE_COLOR4:m=lP;break}if(this._host&&this._host.syncRoot){let x=this._host.syncRoot,T=(x.masterFrame-x.fromFrame)/(x.toFrame-x.fromFrame);f=t+d*T}else p>0&&t>i||p<0&&t0&&this.currentFrame>f||s<0&&this.currentFrame0?0:o.getKeys().length-1}this._currentFrame=f,this._animationState.repeatCount=d===0?0:p/d>>0,this._animationState.highLimitValue=_,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 p=h[m];p.isDone||(p.onlyOnce&&(h.splice(m,1),m--),p.isDone=!0,p.action(f))}}return c||(this._stopped=!0),c}}});function Hfe(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?(T=v.value.clone(),m?(x=T.getTranslation(),T.setTranslation(x.scaleInPlace(p))):_&&a?(x=T.getTranslation(),T.setTranslation(x.multiplyInPlace(a))):T=v.value):T=v.value,g.push({frame:v.frame+r,value:T}));return this.animations[0].createRange(i,l+r,c+r),!0}),n&&(n.prototype._animate=function(t){if(!this.animationsEnabled)return;let i=_r.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 tv(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 p=0;ps&&(o=-o),new tv(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{di();X5();If();Bl();Ge();tv=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{wR();vD();Cs();vD();Y5(Jt,Ba)});var j5={};tt(j5,{AnimationGroup:()=>ED,TargetedAnimation:()=>GR});var GR,ED,q5=M(()=>{If();di();Ni();df();K5();UA();GR=class{getClassName(){return"TargetedAnimation"}constructor(e){this.parent=e,this.uniqueId=Jl.UniqueId}serialize(){let e={};return e.animation=this.animation.serialize(),e.targetId=this.target.id,e.targetUniqueId=this.target.uniqueId,e}},ED=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 ie,this.onAnimationLoopObservable=new ie,this.onAnimationGroupLoopObservable=new ie,this.onAnimationGroupEndObservable=new ie,this.onAnimationGroupPauseObservable=new ie,this.onAnimationGroupPlayObservable=new ie,this.metadata=null,this._mask=null,this._animationLoopFlags=[],this._scene=t||Oe.LastCreatedScene,this._weight=i,this._playOrder=r,this.uniqueId=this._scene.getUniqueId(),this._scene.addAnimationGroup(this)}addTargetedAnimation(e,t){let i=new GR(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;tp[0].frame&&(c=p[0].frame),f=t&&p<=i||s&&_.frame>=t&&_.frame<=i){let g={frame:_.frame,value:_.value.clone?_.value.clone():_.value,inTangent:_.inTangent,outTangent:_.outTangent,interpolation:_.interpolation,lockedTangent:_.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),oiv,TransformNodeAnimationPropertyInfo:()=>rp,WeightAnimationPropertyInfo:()=>kR,getQuaternion:()=>Z5,getVector3:()=>SD,getWeights:()=>Q5});function SD(n,e,t,i){return b.FromArray(e,t).scaleInPlace(i)}function Z5(n,e,t,i){return ze.FromArray(e,t).scaleInPlace(i)}function Q5(n,e,t,i){let r=new Array(n._numMorphTargets);for(let s=0;s{If();Ge();_D();iv=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 ht(e,this.name,t,this.type);return r.setKeys(i,!0),r}},rp=class extends iv{buildAnimations(e,t,i,r){let s=[];return s.push({babylonAnimatable:e._babylonTransformNode,babylonAnimation:this._buildAnimation(t,i,r)}),s}},kR=class extends iv{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}};Jg("/nodes/{}/translation",[new rp(ht.ANIMATIONTYPE_VECTOR3,"position",SD,()=>3)]);Jg("/nodes/{}/rotation",[new rp(ht.ANIMATIONTYPE_QUATERNION,"rotationQuaternion",Z5,()=>4)]);Jg("/nodes/{}/scale",[new rp(ht.ANIMATIONTYPE_VECTOR3,"scaling",SD,()=>3)]);Jg("/nodes/{}/weights",[new kR(ht.ANIMATIONTYPE_FLOAT,"influence",Q5,n=>n._numMorphTargets)])});var Yfe,Kfe,jfe,qfe,TD,WR,AD,eY,HR=M(()=>{Vr();ly();Yfe="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==",Kfe="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==",jfe="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",qfe=0,TD=(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+qfe++,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,fm.ExpandRGBDTexture(a);let c=n.getEngine().onContextRestoredObservable.add(()=>{a.isRGBD=!0;let f=n.onBeforeRenderObservable.add(()=>{a.isReady()&&(n.onBeforeRenderObservable.remove(f),fm.ExpandRGBDTexture(a))})});n.onDisposeObservable.add(()=>{n.getEngine().onContextRestoredObservable.remove(c)})}return n[t]},WR=n=>TD(n,Yfe,"environmentBRDFTexture","EnvironmentBRDFTexture"),AD=n=>TD(n,Kfe,"environmentFuzzBRDFTexture","EnvironmentFuzzBRDFTexture"),eY=n=>TD(n,jfe,"openPBREnvironmentBRDFTexture","OpenPBREnvironmentBRDFTexture")});function tY(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 iY=M(()=>{});var xD=M(()=>{Rs();Pt();Qn();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 y=this._gl,D=this._currentFramebuffer,O=y.createFramebuffer();this._bindUnboundFramebuffer(O);let V=(z=n.width)!=null?z:n,N=(Y=n.height)!=null?Y:n,w=[],U=[],W=this.webGLVersion>1&&(o===13||o===17||o===18);C.label=(me=e==null?void 0:e.label)!=null?me:"MultiRenderTargetWrapper",C._framebuffer=O,C._generateDepthBuffer=a||r,C._generateStencilBuffer=a?W:s,C._depthStencilBuffer=this._setupFramebufferDepthAttachments(C._generateStencilBuffer,C._generateDepthBuffer,V,N,1,o),C._attachments=U;for(let ae=0;ae1||this.isWebGPU);let Tt=this.webGLVersion>1,Xe=y[Tt?"COLOR_ATTACHMENT"+ae:"COLOR_ATTACHMENT"+ae+"_WEBGL"];if(U.push(Xe),de===-1||I)continue;let qe=new Oi(this,6);w[ae]=qe,y.activeTexture(y["TEXTURE"+ae]),y.bindTexture(de,qe._hardwareTexture.underlyingResource),y.texParameteri(de,y.TEXTURE_MAG_FILTER,je.mag),y.texParameteri(de,y.TEXTURE_MIN_FILTER,je.min),y.texParameteri(de,y.TEXTURE_WRAP_S,y.CLAMP_TO_EDGE),y.texParameteri(de,y.TEXTURE_WRAP_T,y.CLAMP_TO_EDGE);let $t=this._getRGBABufferInternalSizedFormat(ne,De,ue),Dt=this._getInternalFormat(De),xi=this._getWebGLTextureType(ne);if(Tt&&(de===35866||de===32879))de===35866?qe.is2DArray=!0:qe.is3D=!0,qe.baseDepth=qe.depth=be,y.texImage3D(de,0,$t,V,N,be,0,Dt,xi,null);else if(de===34067){for(let oe=0;oe<6;oe++)y.texImage2D(y.TEXTURE_CUBE_MAP_POSITIVE_X+oe,0,$t,V,N,0,Dt,xi,null);qe.isCube=!0}else y.texImage2D(y.TEXTURE_2D,0,$t,V,N,0,Dt,xi,null);i&&y.generateMipmap(de),this._bindTextureDirectly(de,null),qe.baseWidth=V,qe.baseHeight=N,qe.width=V,qe.height=N,qe.isReady=!0,qe.samples=1,qe.generateMipMaps=i,qe.samplingMode=ve,qe.type=ne,qe._useSRGBBuffer=ue,qe.format=De,qe.label=(Be=R[ae])!=null?Be:C.label+"-Texture"+ae,this._internalTexturesCache.push(qe)}if(a&&this._caps.depthTextureExtension&&!I){let ae=new Oi(this,14),ve=5,ne=y.DEPTH_COMPONENT16,ue=y.DEPTH_COMPONENT,De=y.UNSIGNED_SHORT,de=y.DEPTH_ATTACHMENT;this.webGLVersion<2?ne=y.DEPTH_COMPONENT:o===14?(ve=1,De=y.FLOAT,ne=y.DEPTH_COMPONENT32F):o===18?(ve=0,De=y.FLOAT_32_UNSIGNED_INT_24_8_REV,ne=y.DEPTH32F_STENCIL8,ue=y.DEPTH_STENCIL,de=y.DEPTH_STENCIL_ATTACHMENT):o===16?(ve=0,De=y.UNSIGNED_INT,ne=y.DEPTH_COMPONENT24,de=y.DEPTH_ATTACHMENT):(o===13||o===17)&&(ve=12,De=y.UNSIGNED_INT_24_8,ne=y.DEPTH24_STENCIL8,ue=y.DEPTH_STENCIL,de=y.DEPTH_STENCIL_ATTACHMENT),this._bindTextureDirectly(y.TEXTURE_2D,ae,!0),y.texParameteri(y.TEXTURE_2D,y.TEXTURE_MAG_FILTER,y.NEAREST),y.texParameteri(y.TEXTURE_2D,y.TEXTURE_MIN_FILTER,y.NEAREST),y.texParameteri(y.TEXTURE_2D,y.TEXTURE_WRAP_S,y.CLAMP_TO_EDGE),y.texParameteri(y.TEXTURE_2D,y.TEXTURE_WRAP_T,y.CLAMP_TO_EDGE),y.texImage2D(y.TEXTURE_2D,0,ne,V,N,0,ue,De,null),y.framebufferTexture2D(y.FRAMEBUFFER,de,y.TEXTURE_2D,ae._hardwareTexture.underlyingResource,0),this._bindTextureDirectly(y.TEXTURE_2D,null),C._depthStencilTexture=ae,C._depthStencilTextureWithStencil=W,ae.baseWidth=V,ae.baseHeight=N,ae.width=V,ae.height=N,ae.isReady=!0,ae.samples=1,ae.generateMipMaps=i,ae.samplingMode=1,ae.format=o,ae.type=ve,ae.label=C.label+"-DepthStencil",w[l]=ae,this._internalTexturesCache.push(ae)}if(C.setTextures(w),t&&y.drawBuffers(U),this._bindUnboundFramebuffer(D),C.setLayerAndFaceIndices(E,T),this.resetTextureCache(),!I)this.updateMultipleRenderTargetTextureSampleCount(C,c,t);else if(c>1){let ae=y.createFramebuffer();if(!ae)throw new Error("Unable to create multi sampled framebuffer");C._samples=c,C._MSAAFramebuffer=ae,l>0&&t&&(this._bindUnboundFramebuffer(ae),y.drawBuffers(U),this._bindUnboundFramebuffer(D))}return C};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 zR,rY=M(()=>{Vr();_f();xD();zR=class extends Gr{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 nY,Zfe,sY=M(()=>{G();nY="mrtFragmentDeclaration",Zfe=`#if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE) layout(location=0) out vec4 glFragData[{X}]; #endif -`;T.IncludesShadersStore[K5]||(T.IncludesShadersStore[K5]=Nfe)});var q5,wfe,GR=M(()=>{G();q5="pbrFragmentReflectionDeclaration",wfe=`#ifdef REFLECTION +`;A.IncludesShadersStore[nY]||(A.IncludesShadersStore[nY]=Zfe)});var aY,Qfe,XR=M(()=>{G();aY="pbrFragmentReflectionDeclaration",Qfe=`#ifdef REFLECTION #ifdef REFLECTIONMAP_3D #define sampleReflection(s,c) textureCube(s,c) uniform samplerCube reflectionSampler; @@ -10754,12 +10754,12 @@ varying vec3 vDirectionW; #endif #endif #endif -`;T.IncludesShadersStore[q5]||(T.IncludesShadersStore[q5]=wfe)});var Z5,Ffe,ED=M(()=>{G();Z5="sceneFragmentDeclaration",Ffe=`uniform mat4 viewProjection; +`;A.IncludesShadersStore[aY]||(A.IncludesShadersStore[aY]=Qfe)});var oY,$fe,RD=M(()=>{G();oY="sceneFragmentDeclaration",$fe=`uniform mat4 viewProjection; #ifdef MULTIVIEW uniform mat4 viewProjectionR; #endif uniform mat4 view;uniform mat4 projection;uniform vec4 vEyePosition;uniform mat4 inverseProjection; -`;T.IncludesShadersStore[Z5]||(T.IncludesShadersStore[Z5]=Ffe)});var Q5,Ufe,np=M(()=>{G();Q5="pbrBRDFFunctions",Ufe=`#define FRESNEL_MAXIMUM_ON_ROUGH 0.25 +`;A.IncludesShadersStore[oY]||(A.IncludesShadersStore[oY]=$fe)});var lY,Jfe,np=M(()=>{G();lY="pbrBRDFFunctions",Jfe=`#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 @@ -10932,7 +10932,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 -`;T.IncludesShadersStore[Q5]||(T.IncludesShadersStore[Q5]=Ufe)});var $5,Bfe,SD=M(()=>{G();$5="openpbrDielectricReflectance",Bfe=`struct ReflectanceParams +`;A.IncludesShadersStore[lY]||(A.IncludesShadersStore[lY]=Jfe)});var cY,ehe,bD=M(()=>{G();cY="openpbrDielectricReflectance",ehe=`struct ReflectanceParams {float F0;float F90;vec3 coloredF0;vec3 coloredF90;}; #define pbr_inline ReflectanceParams dielectricReflectance( @@ -10950,7 +10950,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;} -`;T.IncludesShadersStore[$5]||(T.IncludesShadersStore[$5]=Bfe)});var J5,Vfe,kR=M(()=>{G();J5="pbrIBLFunctions",Vfe=`#if defined(REFLECTION) || defined(SS_REFRACTION) +`;A.IncludesShadersStore[cY]||(A.IncludesShadersStore[cY]=ehe)});var fY,the,YR=M(()=>{G();fY="pbrIBLFunctions",the=`#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 @@ -10964,7 +10964,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 -`;T.IncludesShadersStore[J5]||(T.IncludesShadersStore[J5]=Vfe)});var eY,Gfe,TD=M(()=>{G();eY="openpbrGeometryInfo",Gfe=`struct geometryInfoOutParams +`;A.IncludesShadersStore[fY]||(A.IncludesShadersStore[fY]=the)});var hY,ihe,ID=M(()=>{G();hY="openpbrGeometryInfo",ihe=`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 @@ -10993,7 +10993,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;}`;T.IncludesShadersStore[eY]||(T.IncludesShadersStore[eY]=Gfe)});var tY,kfe,AD=M(()=>{G();tY="openpbrIblFunctions",kfe=`#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;}`;A.IncludesShadersStore[hY]||(A.IncludesShadersStore[hY]=ihe)});var dY,rhe,MD=M(()=>{G();dY="openpbrIblFunctions",rhe=`#ifdef REFLECTION vec3 sampleIrradiance( in vec3 surfaceNormal #if defined(NORMAL) && defined(USESPHERICALINVERTEX) @@ -11215,7 +11215,7 @@ return getReflectanceFromBRDFLookup(reflectance.coloredF0,reflectance.coloredF90 #endif } #endif -`;T.IncludesShadersStore[tY]||(T.IncludesShadersStore[tY]=kfe)});var iY,Wfe,xD=M(()=>{G();iY="openpbrSubsurfaceLayerData",Wfe=`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); +`;A.IncludesShadersStore[dY]||(A.IncludesShadersStore[dY]=rhe)});var uY,nhe,CD=M(()=>{G();uY="openpbrSubsurfaceLayerData",nhe=`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 @@ -11239,7 +11239,7 @@ subsurface_color*=vSubsurfaceColorInfos.y; #ifdef SUBSURFACE_RADIUS_SCALE subsurface_radius_scale*=subsurfaceRadiusScaleFromTexture.rgb; #endif -`;T.IncludesShadersStore[iY]||(T.IncludesShadersStore[iY]=Wfe)});var rY,Hfe,RD=M(()=>{G();rY="openpbrTransmissionLayerData",Hfe=`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; +`;A.IncludesShadersStore[uY]||(A.IncludesShadersStore[uY]=nhe)});var mY,she,yD=M(()=>{G();mY="openpbrTransmissionLayerData",she=`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 @@ -11275,7 +11275,7 @@ transmission_scatter*=transmissionScatterFromTexture.rgb; #ifdef TRANSMISSION_DISPERSION_SCALE transmission_dispersion_scale*=transmissionDispersionScaleFromTexture.r; #endif -`;T.IncludesShadersStore[rY]||(T.IncludesShadersStore[rY]=Hfe)});var sY={};tt(sY,{geometryPixelShader:()=>zfe});var bD,nY,zfe,ID=M(()=>{G();Sc();j5();lR();cR();Pa();GR();ED();nd();np();SD();kR();zg();TD();AD();ad();Tc();fR();xD();RD();bD="geometryPixelShader",nY=`#extension GL_EXT_draw_buffers : require +`;A.IncludesShadersStore[mY]||(A.IncludesShadersStore[mY]=she)});var _Y={};tt(_Y,{geometryPixelShader:()=>ahe});var PD,pY,ahe,LD=M(()=>{G();Sc();sY();uR();mR();Pa();XR();RD();nd();np();bD();YR();Xg();ID();MD();ad();Tc();pR();CD();yD();PD="geometryPixelShader",pY=`#extension GL_EXT_draw_buffers : require #if defined(BUMP) || !defined(NORMAL) #extension GL_OES_standard_derivatives : enable #endif @@ -11513,8 +11513,8 @@ irradiance_alpha=min(subsurface_weight+transmission_weight,1.0); gl_FragData[IRRADIANCE_INDEX]=vec4(irradiance,irradiance_alpha); #endif } -`;T.ShadersStore[bD]||(T.ShadersStore[bD]=nY);zfe={name:bD,shader:nY}});var aY,Xfe,oY=M(()=>{G();aY="geometryVertexDeclaration",Xfe="uniform mat4 viewProjection;uniform mat4 view;";T.IncludesShadersStore[aY]||(T.IncludesShadersStore[aY]=Xfe)});var lY,Yfe,cY=M(()=>{G();nd();lY="geometryUboDeclaration",Yfe=`#include -`;T.IncludesShadersStore[lY]||(T.IncludesShadersStore[lY]=Yfe)});var fY,Kfe,sp=M(()=>{G();fY="harmonicsFunctions",Kfe=`#ifdef USESPHERICALFROMREFLECTIONMAP +`;A.ShadersStore[PD]||(A.ShadersStore[PD]=pY);ahe={name:PD,shader:pY}});var gY,ohe,vY=M(()=>{G();gY="geometryVertexDeclaration",ohe="uniform mat4 viewProjection;uniform mat4 view;";A.IncludesShadersStore[gY]||(A.IncludesShadersStore[gY]=ohe)});var EY,lhe,SY=M(()=>{G();nd();EY="geometryUboDeclaration",lhe=`#include +`;A.IncludesShadersStore[EY]||(A.IncludesShadersStore[EY]=lhe)});var TY,che,sp=M(()=>{G();TY="harmonicsFunctions",che=`#ifdef USESPHERICALFROMREFLECTIONMAP #ifdef SPHERICAL_HARMONICS vec3 computeEnvironmentIrradiance(vec3 normal) {return vSphericalL00 + vSphericalL1_1*(normal.y) @@ -11529,7 +11529,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 -`;T.IncludesShadersStore[fY]||(T.IncludesShadersStore[fY]=Kfe)});var dY={};tt(dY,{geometryVertexShader:()=>jfe});var MD,hY,jfe,CD=M(()=>{G();uc();mc();kf();Wf();wf();oY();cY();pc();sp();Hf();zf();_c();gc();vc();Ec();Qx();MD="geometryVertexShader",hY=`precision highp float; +`;A.IncludesShadersStore[TY]||(A.IncludesShadersStore[TY]=che)});var xY={};tt(xY,{geometryVertexShader:()=>fhe});var DD,AY,fhe,OD=M(()=>{G();uc();mc();kf();Wf();wf();vY();SY();pc();sp();Hf();zf();_c();gc();vc();Ec();iR();DD="geometryVertexShader",AY=`precision highp float; #include #include #include @@ -11741,7 +11741,7 @@ vEnvironmentIrradiance=computeEnvironmentIrradiance(reflectionVector)*vReflectio #endif #endif } -`;T.ShadersStore[MD]||(T.ShadersStore[MD]=hY);jfe={name:MD,shader:hY}});var uY,qfe,ap=M(()=>{G();uY="harmonicsFunctions",qfe=`#ifdef USESPHERICALFROMREFLECTIONMAP +`;A.ShadersStore[DD]||(A.ShadersStore[DD]=AY);fhe={name:DD,shader:AY}});var RY,hhe,ap=M(()=>{G();RY="harmonicsFunctions",hhe=`#ifdef USESPHERICALFROMREFLECTIONMAP #ifdef SPHERICAL_HARMONICS fn computeEnvironmentIrradiance(normal: vec3f)->vec3f {return uniforms.vSphericalL00 + uniforms.vSphericalL1_1*(normal.y) @@ -11756,7 +11756,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 -`;T.IncludesShadersStoreWGSL[uY]||(T.IncludesShadersStoreWGSL[uY]=qfe)});var pY={};tt(pY,{geometryVertexShaderWGSL:()=>Zfe});var yD,mY,Zfe,_Y=M(()=>{G();nc();sc();Uf();Bf();Nf();td();ac();ap();Vf();Gf();oc();lc();cc();fc();Mx();yD="geometryVertexShader",mY=`#include +`;A.IncludesShadersStoreWGSL[RY]||(A.IncludesShadersStoreWGSL[RY]=hhe)});var IY={};tt(IY,{geometryVertexShaderWGSL:()=>dhe});var ND,bY,dhe,MY=M(()=>{G();nc();sc();Bf();Uf();Nf();td();ac();ap();Vf();Gf();oc();lc();cc();fc();Dx();ND="geometryVertexShader",bY=`#include #include #include #include[0..maxSimultaneousMorphTargets] @@ -11967,7 +11967,7 @@ vertexOutputs.vEnvironmentIrradiance=computeEnvironmentIrradiance(reflectionVect #endif #endif } -`;T.ShadersStoreWGSL[yD]||(T.ShadersStoreWGSL[yD]=mY);Zfe={name:yD,shader:mY}});var gY,Qfe,WR=M(()=>{G();gY="pbrFragmentReflectionDeclaration",Qfe=`#ifdef REFLECTION +`;A.ShadersStoreWGSL[ND]||(A.ShadersStoreWGSL[ND]=bY);dhe={name:ND,shader:bY}});var CY,uhe,KR=M(()=>{G();CY="pbrFragmentReflectionDeclaration",uhe=`#ifdef REFLECTION #ifdef REFLECTIONMAP_3D var reflectionSamplerSampler: sampler;var reflectionSampler: texture_cube; #ifdef LODBASEDMICROSFURACE @@ -11995,7 +11995,7 @@ varying vDirectionW: vec3f; #endif #endif #endif -`;T.IncludesShadersStoreWGSL[gY]||(T.IncludesShadersStoreWGSL[gY]=Qfe)});var vY,$fe,op=M(()=>{G();vY="pbrBRDFFunctions",$fe=`#define FRESNEL_MAXIMUM_ON_ROUGH 0.25 +`;A.IncludesShadersStoreWGSL[CY]||(A.IncludesShadersStoreWGSL[CY]=uhe)});var yY,mhe,op=M(()=>{G();yY="pbrBRDFFunctions",mhe=`#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 @@ -12167,7 +12167,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 -`;T.IncludesShadersStoreWGSL[vY]||(T.IncludesShadersStoreWGSL[vY]=$fe)});var EY,Jfe,PD=M(()=>{G();EY="openpbrDielectricReflectance",Jfe=`struct ReflectanceParams +`;A.IncludesShadersStoreWGSL[yY]||(A.IncludesShadersStoreWGSL[yY]=mhe)});var PY,phe,wD=M(()=>{G();PY="openpbrDielectricReflectance",phe=`struct ReflectanceParams {F0: f32, F90: f32, coloredF0: vec3f, @@ -12189,7 +12189,7 @@ let dielectricColorF90: vec3f=specularColor.rgb*vec3f(f90Scale)*specularWeight; let dielectricColorF90: vec3f=vec3f(f90Scale)*specularWeight; #endif outParams.coloredF90=dielectricColorF90;return outParams;} -`;T.IncludesShadersStoreWGSL[EY]||(T.IncludesShadersStoreWGSL[EY]=Jfe)});var SY,ehe,HR=M(()=>{G();SY="pbrIBLFunctions",ehe=`#if defined(REFLECTION) || defined(SS_REFRACTION) +`;A.IncludesShadersStoreWGSL[PY]||(A.IncludesShadersStoreWGSL[PY]=phe)});var LY,_he,jR=M(()=>{G();LY="pbrIBLFunctions",_he=`#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 @@ -12203,7 +12203,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 -`;T.IncludesShadersStoreWGSL[SY]||(T.IncludesShadersStoreWGSL[SY]=ehe)});var TY,the,LD=M(()=>{G();TY="openpbrGeometryInfo",the=`struct geometryInfoOutParams +`;A.IncludesShadersStoreWGSL[LY]||(A.IncludesShadersStoreWGSL[LY]=_he)});var DY,ghe,FD=M(()=>{G();DY="openpbrGeometryInfo",ghe=`struct geometryInfoOutParams {NdotV: f32, NdotVUnclamped: f32, environmentBrdf: vec3f, @@ -12240,7 +12240,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;} -`;T.IncludesShadersStoreWGSL[TY]||(T.IncludesShadersStoreWGSL[TY]=the)});var AY,ihe,DD=M(()=>{G();AY="openpbrIblFunctions",ihe=`#ifdef REFLECTION +`;A.IncludesShadersStoreWGSL[DY]||(A.IncludesShadersStoreWGSL[DY]=ghe)});var OY,vhe,BD=M(()=>{G();OY="openpbrIblFunctions",vhe=`#ifdef REFLECTION fn sampleIrradiance( surfaceNormal: vec3f #if defined(NORMAL) && defined(USESPHERICALINVERTEX) @@ -12458,7 +12458,7 @@ return getReflectanceFromBRDFLookup(reflectance.coloredF0,reflectance.coloredF90 #endif } #endif -`;T.IncludesShadersStoreWGSL[AY]||(T.IncludesShadersStoreWGSL[AY]=ihe)});var xY,rhe,OD=M(()=>{G();xY="openpbrSubsurfaceLayerData",rhe=`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); +`;A.IncludesShadersStoreWGSL[OY]||(A.IncludesShadersStoreWGSL[OY]=vhe)});var NY,Ehe,UD=M(()=>{G();NY="openpbrSubsurfaceLayerData",Ehe=`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 @@ -12482,7 +12482,7 @@ subsurface_color*=uniforms.vSubsurfaceColorInfos.y; #ifdef SUBSURFACE_RADIUS_SCALE subsurface_radius_scale*=subsurfaceRadiusScaleFromTexture.rgb; #endif -`;T.IncludesShadersStoreWGSL[xY]||(T.IncludesShadersStoreWGSL[xY]=rhe)});var RY,nhe,ND=M(()=>{G();RY="openpbrTransmissionLayerData",nhe=`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; +`;A.IncludesShadersStoreWGSL[NY]||(A.IncludesShadersStoreWGSL[NY]=Ehe)});var wY,She,VD=M(()=>{G();wY="openpbrTransmissionLayerData",She=`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 @@ -12518,7 +12518,7 @@ transmission_scatter*=transmissionScatterFromTexture.rgb; #ifdef TRANSMISSION_DISPERSION_SCALE transmission_dispersion_scale*=transmissionDispersionScaleFromTexture.r; #endif -`;T.IncludesShadersStoreWGSL[RY]||(T.IncludesShadersStoreWGSL[RY]=nhe)});var IY={};tt(IY,{geometryPixelShaderWGSL:()=>she});var wD,bY,she,MY=M(()=>{G();hc();Fx();Ux();ya();WR();td();op();PD();HR();Wg();LD();DD();rd();dc();Bx();OD();ND();wD="geometryPixelShader",bY=`#ifdef BUMP +`;A.IncludesShadersStoreWGSL[wY]||(A.IncludesShadersStoreWGSL[wY]=She)});var BY={};tt(BY,{geometryPixelShaderWGSL:()=>The});var GD,FY,The,UY=M(()=>{G();hc();kx();Wx();ya();KR();td();op();wD();jR();Hg();FD();BD();rd();dc();Hx();UD();VD();GD="geometryPixelShader",FY=`#ifdef BUMP varying vWorldView0: vec4f;varying vWorldView1: vec4f;varying vWorldView2: vec4f;varying vWorldView3: vec4f;varying vNormalW: vec3f; #else varying vNormalV: vec3f; @@ -12779,22 +12779,22 @@ fragmentOutputs.fragData6=fragData[6]; fragmentOutputs.fragData7=fragData[7]; #endif } -`;T.ShadersStoreWGSL[wD]||(T.ShadersStoreWGSL[wD]=bY);she={name:wD,shader:bY}});var CY,FD,ns,yY=M(()=>{Ge();ki();Vr();Y5();zt();hn();Vn();ID();CD();Da();ol();Bn();vD();CY=["diffuseSampler","bumpSampler","reflectivitySampler","albedoSampler","morphTargets","boneSampler","transmissionWeightSampler","subsurfaceWeightSampler","iblShadowSampler"],FD=["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"];Rf(FD,CY,!0);wn(FD);ns=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(()=>(_Y(),pY)),Promise.resolve().then(()=>(MY(),IY))])):await Promise.all([Promise.resolve().then(()=>(CD(),dY)),Promise.resolve().then(()=>(ID(),sY))]),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 _=!1;if(i.needAlphaTestingForMesh(a)&&i.getAlphaTestTexture()&&(r.push("#define ALPHATEST"),r.push(`#define ALPHATEST_UV${i.getAlphaTestTexture().coordinatesIndex+1}`),_=!0),(i.bumpTexture||i.normalTexture||i.geometryNormalTexture)&&ce.BumpTextureEnabled){let g=i.bumpTexture||i.normalTexture||i.geometryNormalTexture;r.push("#define BUMP"),r.push(`#define BUMP_UV${g.coordinatesIndex+1}`),_=!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"),_=!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"),_=!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}`),_=!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"),_=!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"),_=!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"),_=!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"),_=!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}`),_=!0):v.baseMetalnessTexture?(r.push("#define METALLIC_TEXTURE"),r.push(`#define METALLIC_UV${v.baseMetalnessTexture.coordinatesIndex+1}`),_=!0):v.specularRoughnessTexture&&(r.push("#define ROUGHNESS_TEXTURE"),r.push(`#define ROUGHNESS_UV${v.specularRoughnessTexture.coordinatesIndex+1}`),_=!0),v.baseColorTexture&&(r.push("#define ALBEDOTEXTURE"),r.push(`#define ALBEDO_UV${v.baseColorTexture.coordinatesIndex+1}`),v.baseColorTexture.gammaSpace&&r.push("#define GAMMAALBEDO"),_=!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}`),_=!0),g.transmissionWeight>0&&g.transmissionWeightTexture&&(r.push("#define TRANSMISSION_WEIGHT"),r.push(`#define TRANSMISSIONWEIGHT_UV${g.transmissionWeightTexture.coordinatesIndex+1}`),_=!0)}_&&(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 _=this._scene;if(_.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),xf(_,_.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=_.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?ll(a.morphTargetManager,r,s,a,!0,!0,!1,l,c,f):0;t&&(r.push("#define INSTANCES"),_o(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),al(i,this._scene,r);let d=this._scene.getEngine(),u=e._getDrawWrapper(void 0,!0),m=u.defines,p=r.join(` -`);return m!==p&&u.setEffect(d.createEffect("geometry",{attributes:s,uniformsNames:FD,samplers:CY,defines:p,onCompiled:null,fallbacks:null,onError:null,uniformBuffersNames:["Scene"],indexParameters:{buffersCount:this._multiRenderTarget.textures.length-1,maxSimultaneousMorphTargets:h},shaderLanguage:this.shaderLanguage},d),p),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 VR("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=_e.CLAMP_ADDRESSMODE,this._multiRenderTarget.wrapV=_e.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(p),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 _=v=>{let x=v.getRenderingMesh(),A=v.getEffectiveMesh(),E=this._scene,S=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:j.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 C=S.getCaps().instancedArrays&&(I.visibleInstances[v._id]!==null||x.hasThinInstances),y=A.getWorldMatrix();if(this.isReady(v,C)){let D=v._getDrawWrapper();if(!D)return;let O=D.effect;S.enableEffect(D),C||x._bind(v,O,R.fillMode),this._useUbo?(Af(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===Ee.ClockWiseSideOrientation?Ee.CounterClockWiseSideOrientation:Ee.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&&ce.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,B=E.postProcessRenderPipelineManager.supportedPipelines.find(W=>W.getClassName()==="IBLShadowsRenderPipeline");if(B){let te=B._getAccumulatedTexture();te&&(O.setTexture("iblShadowSampler",te),O.setFloat2("shadowTextureSize",te.getSize().width,te.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 W=w.sphericalPolynomial;if(W.preScaledHarmonics){let te=W.preScaledHarmonics;O.setVector3("vSphericalL00",te.l00),O.setVector3("vSphericalL1_1",te.l1_1),O.setVector3("vSphericalL10",te.l10),O.setVector3("vSphericalL11",te.l11),O.setVector3("vSphericalL2_2",te.l2_2),O.setVector3("vSphericalL2_1",te.l2_1),O.setVector3("vSphericalL20",te.l20),O.setVector3("vSphericalL21",te.l21),O.setVector3("vSphericalL22",te.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(Fn(O,R,this._scene),x.useBones&&x.computeBonesUsingShaders&&x.skeleton){let w=x.skeleton;if(w.isUsingTextureForMatrices&&O.getUniformIndex("boneTextureInfo")>-1){let B=w.getTransformMatrixTexture(x);O.setTexture("boneSampler",B),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])}Un(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)),C&&x.hasThinInstances&&O.setMatrix("world",y),x._processRendering(A,v,O,R.fillMode,I,C,(w,B)=>{w||O.setMatrix("world",B)})}(this._enableVelocity||this._enableVelocityLinear)&&(this._previousTransformationMatrices[A.uniqueId].world=y.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 S;if(this._linkedWithPrePass){if(!this._prePassRenderer.enabled)return;this._scene.getEngine().bindAttachments(this._attachmentsFromPrePass)}if(E.length){for(e.setColorWrite(!1),S=0;S{throw Ze("GeometryBufferRendererSceneComponent")}});var PY,ahe,UD=M(()=>{G();td();kg();PY="openpbrUboDeclaration",ahe=`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; +`;A.ShadersStoreWGSL[GD]||(A.ShadersStoreWGSL[GD]=FY);The={name:GD,shader:FY}});var VY,kD,ss,GY=M(()=>{Ge();ki();Vr();rY();zt();hn();Gn();LD();OD();Da();ll();Vn();xD();VY=["diffuseSampler","bumpSampler","reflectivitySampler","albedoSampler","morphTargets","boneSampler","transmissionWeightSampler","subsurfaceWeightSampler","iblShadowSampler"],kD=["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"];Rf(kD,VY,!0);Fn(kD);ss=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(()=>(MY(),IY)),Promise.resolve().then(()=>(UY(),BY))])):await Promise.all([Promise.resolve().then(()=>(OD(),xY)),Promise.resolve().then(()=>(LD(),_Y))]),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 _=!1;if(i.needAlphaTestingForMesh(a)&&i.getAlphaTestTexture()&&(r.push("#define ALPHATEST"),r.push(`#define ALPHATEST_UV${i.getAlphaTestTexture().coordinatesIndex+1}`),_=!0),(i.bumpTexture||i.normalTexture||i.geometryNormalTexture)&&ce.BumpTextureEnabled){let g=i.bumpTexture||i.normalTexture||i.geometryNormalTexture;r.push("#define BUMP"),r.push(`#define BUMP_UV${g.coordinatesIndex+1}`),_=!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"),_=!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"),_=!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}`),_=!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"),_=!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"),_=!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"),_=!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"),_=!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}`),_=!0):v.baseMetalnessTexture?(r.push("#define METALLIC_TEXTURE"),r.push(`#define METALLIC_UV${v.baseMetalnessTexture.coordinatesIndex+1}`),_=!0):v.specularRoughnessTexture&&(r.push("#define ROUGHNESS_TEXTURE"),r.push(`#define ROUGHNESS_UV${v.specularRoughnessTexture.coordinatesIndex+1}`),_=!0),v.baseColorTexture&&(r.push("#define ALBEDOTEXTURE"),r.push(`#define ALBEDO_UV${v.baseColorTexture.coordinatesIndex+1}`),v.baseColorTexture.gammaSpace&&r.push("#define GAMMAALBEDO"),_=!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}`),_=!0),g.transmissionWeight>0&&g.transmissionWeightTexture&&(r.push("#define TRANSMISSION_WEIGHT"),r.push(`#define TRANSMISSIONWEIGHT_UV${g.transmissionWeightTexture.coordinatesIndex+1}`),_=!0)}_&&(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 _=this._scene;if(_.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),xf(_,_.environmentTexture,g,v,x,!0);for(let E in g)g[E]&&r.push("#define "+E);g.USEIRRADIANCEMAP||r.push("#define SPHERICAL_HARMONICS");let T=_.postProcessRenderPipelineManager.supportedPipelines.find(E=>E.getClassName()==="IBLShadowsRenderPipeline");if(T){let E=T;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?cl(a.morphTargetManager,r,s,a,!0,!0,!1,l,c,f):0;t&&(r.push("#define INSTANCES"),go(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),ol(i,this._scene,r);let d=this._scene.getEngine(),u=e._getDrawWrapper(void 0,!0),m=u.defines,p=r.join(` +`);return m!==p&&u.setEffect(d.createEffect("geometry",{attributes:s,uniformsNames:kD,samplers:VY,defines:p,onCompiled:null,fallbacks:null,onError:null,uniformBuffersNames:["Scene"],indexParameters:{buffersCount:this._multiRenderTarget.textures.length-1,maxSimultaneousMorphTargets:h},shaderLanguage:this.shaderLanguage},d),p),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 zR("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(p),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 _=v=>{let x=v.getRenderingMesh(),T=v.getEffectiveMesh(),E=this._scene,S=E.getEngine(),R=v.getMaterial();if(!R)return;if(T._internalAbstractMeshDataInfo._isActiveIntermediate=!1,(this._enableVelocity||this._enableVelocityLinear)&&!this._previousTransformationMatrices[T.uniqueId]&&(this._previousTransformationMatrices[T.uniqueId]={world:j.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 C=S.getCaps().instancedArrays&&(I.visibleInstances[v._id]!==null||x.hasThinInstances),y=T.getWorldMatrix();if(this.isReady(v,C)){let D=v._getDrawWrapper();if(!D)return;let O=D.effect;S.enableEffect(D),C||x._bind(v,O,R.fillMode),this._useUbo?(Af(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=T._getWorldMatrixDeterminant();V=R._getEffectiveOrientation(x),w<0&&(V=V===Ee.ClockWiseSideOrientation?Ee.CounterClockWiseSideOrientation:Ee.ClockWiseSideOrientation)}else V=x._effectiveSideOrientation;if(R._preBind(D,V),R.needAlphaTestingForMesh(T)){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&&ce.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(W=>W.getClassName()==="IBLShadowsRenderPipeline");if(U){let te=U._getAccumulatedTexture();te&&(O.setTexture("iblShadowSampler",te),O.setFloat2("shadowTextureSize",te.getSize().width,te.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 W=w.sphericalPolynomial;if(W.preScaledHarmonics){let te=W.preScaledHarmonics;O.setVector3("vSphericalL00",te.l00),O.setVector3("vSphericalL1_1",te.l1_1),O.setVector3("vSphericalL10",te.l10),O.setVector3("vSphericalL11",te.l11),O.setVector3("vSphericalL2_2",te.l2_2),O.setVector3("vSphericalL2_1",te.l2_1),O.setVector3("vSphericalL20",te.l20),O.setVector3("vSphericalL21",te.l21),O.setVector3("vSphericalL22",te.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(Bn(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])}Un(x,O),x.morphTargetManager&&x.morphTargetManager.isUsingTextureForTargets&&x.morphTargetManager._bind(O),(this._enableVelocity||this._enableVelocityLinear)&&(O.setMatrix("previousWorld",this._previousTransformationMatrices[T.uniqueId].world),O.setMatrix("previousViewProjection",this._previousTransformationMatrices[T.uniqueId].viewProjection)),C&&x.hasThinInstances&&O.setMatrix("world",y),x._processRendering(T,v,O,R.fillMode,I,C,(w,U)=>{w||O.setMatrix("world",U)})}(this._enableVelocity||this._enableVelocityLinear)&&(this._previousTransformationMatrices[T.uniqueId].world=y.clone(),this._previousTransformationMatrices[T.uniqueId].viewProjection=this._scene.getTransformMatrix().clone(),x.skeleton&&this._copyBonesTransformationMatrices(x.skeleton.getTransformMatrices(x),this._previousBonesTransformationMatrices[T.uniqueId]))};this._multiRenderTarget.customIsReadyFunction=(v,x,T)=>{if((T||x===0)&&v.subMeshes)for(let E=0;E{let S;if(this._linkedWithPrePass){if(!this._prePassRenderer.enabled)return;this._scene.getEngine().bindAttachments(this._attachmentsFromPrePass)}if(E.length){for(e.setColorWrite(!1),S=0;S{throw Ze("GeometryBufferRendererSceneComponent")}});var kY,Ahe,WD=M(()=>{G();td();Wg();kY="openpbrUboDeclaration",Ahe=`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 -`;T.IncludesShadersStoreWGSL[PY]||(T.IncludesShadersStoreWGSL[PY]=ahe)});var LY,ohe,DY=M(()=>{G();LY="openpbrNormalMapVertexDeclaration",ohe=`#if defined(GEOMETRY_NORMAL) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) || defined(FUZZ) +`;A.IncludesShadersStoreWGSL[kY]||(A.IncludesShadersStoreWGSL[kY]=Ahe)});var WY,xhe,HY=M(()=>{G();WY="openpbrNormalMapVertexDeclaration",xhe=`#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 -`;T.IncludesShadersStoreWGSL[LY]||(T.IncludesShadersStoreWGSL[LY]=ohe)});var OY,lhe,NY=M(()=>{G();OY="openpbrNormalMapVertex",lhe=`#if defined(GEOMETRY_NORMAL) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) || defined(FUZZ) +`;A.IncludesShadersStoreWGSL[WY]||(A.IncludesShadersStoreWGSL[WY]=xhe)});var zY,Rhe,XY=M(()=>{G();zY="openpbrNormalMapVertex",Rhe=`#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 -`;T.IncludesShadersStoreWGSL[OY]||(T.IncludesShadersStoreWGSL[OY]=lhe)});var FY={};tt(FY,{openpbrVertexShaderWGSL:()=>che});var BD,wY,che,UY=M(()=>{G();UD();vx();Zm();ya();op();nc();sc();Nf();Ex();Sx();ap();DY();ac();Ig();Tx();Uf();Bf();id();Ax();xx();Vf();Gf();oc();lc();cc();Rx();bx();Ix();NY();fc();Mg();Cx();Cg();yx();BD="openpbrVertexShader",wY=`#define OPENPBR_VERTEX_SHADER +`;A.IncludesShadersStoreWGSL[zY]||(A.IncludesShadersStoreWGSL[zY]=Rhe)});var KY={};tt(KY,{openpbrVertexShaderWGSL:()=>bhe});var HD,YY,bhe,jY=M(()=>{G();WD();xx();Zm();ya();op();nc();sc();Nf();Rx();bx();ap();HY();ac();Mg();Ix();Bf();Uf();id();Mx();Cx();Vf();Gf();oc();lc();cc();yx();Px();Lx();XY();fc();Cg();Ox();yg();Nx();HD="openpbrVertexShader",YY=`#define OPENPBR_VERTEX_SHADER #include #define CUSTOM_VERTEX_BEGIN #ifndef USE_VERTEX_PULLING @@ -13034,7 +13034,7 @@ vertexOutputs.vMainUV2=uv2Updated; #include #include #define CUSTOM_VERTEX_MAIN_END -}`;T.ShadersStoreWGSL[BD]||(T.ShadersStoreWGSL[BD]=wY);che={name:BD,shader:wY}});var BY,fhe,VD=M(()=>{G();Zm();BY="pbrFragmentExtraDeclaration",fhe=`varying vPositionW: vec3f; +}`;A.ShadersStoreWGSL[HD]||(A.ShadersStoreWGSL[HD]=YY);bhe={name:HD,shader:YY}});var qY,Ihe,zD=M(()=>{G();Zm();qY="pbrFragmentExtraDeclaration",Ihe=`varying vPositionW: vec3f; #if DEBUGMODE>0 varying vClipSpacePosition: vec4f; #endif @@ -13051,7 +13051,7 @@ varying vColor: vec4f; #if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0 varying vViewDepth: f32; #endif -`;T.IncludesShadersStoreWGSL[BY]||(T.IncludesShadersStoreWGSL[BY]=fhe)});var VY,hhe,GY=M(()=>{G();rd();WR();VY="openpbrFragmentSamplersDeclaration",hhe=`#include(_DEFINENAME_,BASE_COLOR,_VARYINGNAME_,BaseColor,_SAMPLERNAME_,baseColor) +`;A.IncludesShadersStoreWGSL[qY]||(A.IncludesShadersStoreWGSL[qY]=Ihe)});var ZY,Mhe,QY=M(()=>{G();rd();KR();ZY="openpbrFragmentSamplersDeclaration",Mhe=`#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) @@ -13103,15 +13103,15 @@ var blueNoiseSamplerSampler: sampler;var blueNoiseSampler: texture_2d; #ifdef IBL_CDF_FILTERING var icdfSamplerSampler: sampler;var icdfSampler: texture_2d; #endif -`;T.IncludesShadersStoreWGSL[VY]||(T.IncludesShadersStoreWGSL[VY]=hhe)});var kY,dhe,GD=M(()=>{G();kY="subSurfaceScatteringFunctions",dhe=`fn testLightingForSSS(diffusionProfile: f32)->bool -{return diffusionProfile<1.;}`;T.IncludesShadersStoreWGSL[kY]||(T.IncludesShadersStoreWGSL[kY]=dhe)});var WY,uhe,kD=M(()=>{G();WY="importanceSampling",uhe=`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);} +`;A.IncludesShadersStoreWGSL[ZY]||(A.IncludesShadersStoreWGSL[ZY]=Mhe)});var $Y,Che,XD=M(()=>{G();$Y="subSurfaceScatteringFunctions",Che=`fn testLightingForSSS(diffusionProfile: f32)->bool +{return diffusionProfile<1.;}`;A.IncludesShadersStoreWGSL[$Y]||(A.IncludesShadersStoreWGSL[$Y]=Che)});var JY,yhe,YD=M(()=>{G();JY="importanceSampling",yhe=`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);}`;T.IncludesShadersStoreWGSL[WY]||(T.IncludesShadersStoreWGSL[WY]=uhe)});var HY,mhe,WD=M(()=>{G();HY="pbrHelperFunctions",mhe=`#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);}`;A.IncludesShadersStoreWGSL[JY]||(A.IncludesShadersStoreWGSL[JY]=yhe)});var e8,Phe,KD=M(()=>{G();e8="pbrHelperFunctions",Phe=`#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;} @@ -13145,7 +13145,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 -`;T.IncludesShadersStoreWGSL[HY]||(T.IncludesShadersStoreWGSL[HY]=mhe)});var zY,phe,HD=M(()=>{G();QP();zY="pbrDirectLightingSetupFunctions",phe=`struct preLightingInfo +`;A.IncludesShadersStoreWGSL[e8]||(A.IncludesShadersStoreWGSL[e8]=Phe)});var t8,Lhe,jD=M(()=>{G();iL();t8="pbrDirectLightingSetupFunctions",Lhe=`struct preLightingInfo {lightOffset: vec3f, lightDistanceSquared: f32, lightDistance: f32, @@ -13190,7 +13190,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 -`;T.IncludesShadersStoreWGSL[zY]||(T.IncludesShadersStoreWGSL[zY]=phe)});var XY,_he,zD=M(()=>{G();XY="pbrDirectLightingFalloffFunctions",_he=`fn computeDistanceLightFalloff_Standard(lightOffset: vec3f,range: f32)->f32 +`;A.IncludesShadersStoreWGSL[t8]||(A.IncludesShadersStoreWGSL[t8]=Lhe)});var i8,Dhe,qD=M(()=>{G();i8="pbrDirectLightingFalloffFunctions",Dhe=`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);} @@ -13226,7 +13226,7 @@ return computeDirectionalLightFalloff_GLTF(lightDirection,directionToLightCenter #else return computeDirectionalLightFalloff_Standard(lightDirection,directionToLightCenterW,cosHalfAngle,exponent); #endif -}`;T.IncludesShadersStoreWGSL[XY]||(T.IncludesShadersStoreWGSL[XY]=_he)});var YY,ghe,XD=M(()=>{G();YY="hdrFilteringFunctions",ghe=`#ifdef NUM_SAMPLES +}`;A.IncludesShadersStoreWGSL[i8]||(A.IncludesShadersStoreWGSL[i8]=Dhe)});var r8,Ohe,ZD=M(()=>{G();r8="hdrFilteringFunctions",Ohe=`#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; } @@ -13343,11 +13343,11 @@ result=result/weight;return result;} #endif #endif #endif -`;T.IncludesShadersStoreWGSL[YY]||(T.IncludesShadersStoreWGSL[YY]=ghe)});var KY,vhe,YD=M(()=>{G();KY="pbrBlockReflectance0",vhe=`var reflectanceF0: f32=reflectivityOut.reflectanceF0;var specularEnvironmentR0: vec3f=reflectivityOut.colorReflectanceF0;var specularEnvironmentR90: vec3f= reflectivityOut.reflectanceF90; +`;A.IncludesShadersStoreWGSL[r8]||(A.IncludesShadersStoreWGSL[r8]=Ohe)});var n8,Nhe,QD=M(()=>{G();n8="pbrBlockReflectance0",Nhe=`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 -`;T.IncludesShadersStoreWGSL[KY]||(T.IncludesShadersStoreWGSL[KY]=vhe)});var jY,Ehe,KD=M(()=>{G();$P();YD();jY="pbrDirectLightingFunctions",Ehe=`#define CLEARCOATREFLECTANCE90 1.0 +`;A.IncludesShadersStoreWGSL[n8]||(A.IncludesShadersStoreWGSL[n8]=Nhe)});var s8,whe,$D=M(()=>{G();rL();QD();s8="pbrDirectLightingFunctions",whe=`#define CLEARCOATREFLECTANCE90 1.0 struct lightingInfo {diffuse: vec3f, #ifdef SS_TRANSLUCENCY @@ -13569,7 +13569,7 @@ result.sheen+=info.sheen; batchOffset+=CLUSTLIGHT_BATCH;} return result;} #endif -`;T.IncludesShadersStoreWGSL[jY]||(T.IncludesShadersStoreWGSL[jY]=Ehe)});var qY,She,ZY=M(()=>{G();qY="openpbrNormalMapFragmentMainFunctions",She=`#if defined(GEOMETRY_NORMAL) || defined(GEOMETRY_COAT_NORMAL) || defined(ANISOTROPIC) || defined(FUZZ) || defined(DETAIL) +`;A.IncludesShadersStoreWGSL[s8]||(A.IncludesShadersStoreWGSL[s8]=whe)});var a8,Fhe,o8=M(()=>{G();a8="openpbrNormalMapFragmentMainFunctions",Fhe=`#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 @@ -13609,7 +13609,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 -`;T.IncludesShadersStoreWGSL[qY]||(T.IncludesShadersStoreWGSL[qY]=She)});var QY,The,$Y=M(()=>{G();rd();QY="openpbrNormalMapFragmentFunctions",The=`#if defined(GEOMETRY_NORMAL) +`;A.IncludesShadersStoreWGSL[a8]||(A.IncludesShadersStoreWGSL[a8]=Fhe)});var l8,Bhe,c8=M(()=>{G();rd();l8="openpbrNormalMapFragmentFunctions",Bhe=`#if defined(GEOMETRY_NORMAL) #include(_DEFINENAME_,GEOMETRY_NORMAL,_VARYINGNAME_,GeometryNormal,_SAMPLERNAME_,geometryNormal) #endif #if defined(GEOMETRY_COAT_NORMAL) @@ -13642,7 +13642,7 @@ return -texCoordOffset; #endif } #endif -`;T.IncludesShadersStoreWGSL[QY]||(T.IncludesShadersStoreWGSL[QY]=The)});var JY,Ahe,e8=M(()=>{G();JY="openpbrConductorReflectance",Ahe=`#define pbr_inline +`;A.IncludesShadersStoreWGSL[l8]||(A.IncludesShadersStoreWGSL[l8]=Bhe)});var f8,Uhe,h8=M(()=>{G();f8="openpbrConductorReflectance",Uhe=`#define pbr_inline fn conductorReflectance(baseColor: vec3f,specularColor: vec3f,specularWeight: f32)->ReflectanceParams {var outParams: ReflectanceParams; #if (CONDUCTOR_SPECULAR_MODEL==CONDUCTOR_SPECULAR_MODEL_OPENPBR) @@ -13650,9 +13650,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;}`;T.IncludesShadersStoreWGSL[JY]||(T.IncludesShadersStoreWGSL[JY]=Ahe)});var t8,xhe,i8=M(()=>{G();t8="openpbrAmbientOcclusionFunctions",xhe=`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;}`;A.IncludesShadersStoreWGSL[f8]||(A.IncludesShadersStoreWGSL[f8]=Uhe)});var d8,Vhe,u8=M(()=>{G();d8="openpbrAmbientOcclusionFunctions",Vhe=`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));} -`;T.IncludesShadersStoreWGSL[t8]||(T.IncludesShadersStoreWGSL[t8]=xhe)});var r8,Rhe,n8=M(()=>{G();r8="openpbrVolumeFunctions",Rhe=`struct OpenPBRHomogeneousVolume {extinction_coeff: vec3f, +`;A.IncludesShadersStoreWGSL[d8]||(A.IncludesShadersStoreWGSL[d8]=Vhe)});var m8,Ghe,p8=M(()=>{G();m8="openpbrVolumeFunctions",Ghe=`struct OpenPBRHomogeneousVolume {extinction_coeff: vec3f, ss_albedo: vec3f, multi_scatter_color: vec3f, absorption_coeff: vec3f, @@ -13709,7 +13709,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));} -`;T.IncludesShadersStoreWGSL[r8]||(T.IncludesShadersStoreWGSL[r8]=Rhe)});var s8,bhe,jD=M(()=>{G();s8="pbrBlockNormalGeometric",bhe=`var viewDirectionW: vec3f=normalize(scene.vEyePosition.xyz-input.vPositionW); +`;A.IncludesShadersStoreWGSL[m8]||(A.IncludesShadersStoreWGSL[m8]=Ghe)});var _8,khe,JD=M(()=>{G();_8="pbrBlockNormalGeometric",khe=`var viewDirectionW: vec3f=normalize(scene.vEyePosition.xyz-input.vPositionW); #ifdef NORMAL var normalW: vec3f=normalize(input.vNormalW); #else @@ -13719,7 +13719,7 @@ var geometricNormalW: vec3f=normalW; #if defined(TWOSIDEDLIGHTING) && defined(NORMAL) geometricNormalW=select(-geometricNormalW,geometricNormalW,fragmentInputs.frontFacing); #endif -`;T.IncludesShadersStoreWGSL[s8]||(T.IncludesShadersStoreWGSL[s8]=bhe)});var a8,Ihe,o8=M(()=>{G();a8="openpbrNormalMapFragment",Ihe=`var uvOffset: vec2f= vec2f(0.0,0.0); +`;A.IncludesShadersStoreWGSL[_8]||(A.IncludesShadersStoreWGSL[_8]=khe)});var g8,Whe,v8=M(()=>{G();g8="openpbrNormalMapFragment",Whe=`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; @@ -13774,7 +13774,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 -`;T.IncludesShadersStoreWGSL[a8]||(T.IncludesShadersStoreWGSL[a8]=Ihe)});var l8,Mhe,c8=M(()=>{G();l8="openpbrBlockNormalFinal",Mhe=`#if defined(FORCENORMALFORWARD) && defined(NORMAL) +`;A.IncludesShadersStoreWGSL[g8]||(A.IncludesShadersStoreWGSL[g8]=Whe)});var E8,Hhe,S8=M(()=>{G();E8="openpbrBlockNormalFinal",Hhe=`#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); @@ -13788,7 +13788,7 @@ normalW=select(normalW,-normalW,fragmentInputs.frontFacing);coatNormalW=select(c normalW=select(-normalW,normalW,fragmentInputs.frontFacing);coatNormalW=select(-coatNormalW,coatNormalW,fragmentInputs.frontFacing); #endif #endif -`;T.IncludesShadersStoreWGSL[l8]||(T.IncludesShadersStoreWGSL[l8]=Mhe)});var f8,Che,h8=M(()=>{G();f8="openpbrBaseLayerData",Che=`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; +`;A.IncludesShadersStoreWGSL[E8]||(A.IncludesShadersStoreWGSL[E8]=Hhe)});var T8,zhe,A8=M(()=>{G();T8="openpbrBaseLayerData",zhe=`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 @@ -13914,7 +13914,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 -`;T.IncludesShadersStoreWGSL[f8]||(T.IncludesShadersStoreWGSL[f8]=Che)});var d8,yhe,u8=M(()=>{G();d8="openpbrCoatLayerData",yhe=`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); +`;A.IncludesShadersStoreWGSL[T8]||(A.IncludesShadersStoreWGSL[T8]=zhe)});var x8,Xhe,R8=M(()=>{G();x8="openpbrCoatLayerData",Xhe=`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 @@ -13966,7 +13966,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 -`;T.IncludesShadersStoreWGSL[d8]||(T.IncludesShadersStoreWGSL[d8]=yhe)});var m8,Phe,p8=M(()=>{G();m8="openpbrThinFilmLayerData",Phe=`#ifdef THIN_FILM +`;A.IncludesShadersStoreWGSL[x8]||(A.IncludesShadersStoreWGSL[x8]=Xhe)});var b8,Yhe,I8=M(()=>{G();b8="openpbrThinFilmLayerData",Yhe=`#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 @@ -13983,7 +13983,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 -`;T.IncludesShadersStoreWGSL[m8]||(T.IncludesShadersStoreWGSL[m8]=Phe)});var _8,Lhe,g8=M(()=>{G();_8="openpbrFuzzLayerData",Lhe=`var fuzz_weight: f32=0.0f;var fuzz_color: vec3f=vec3f(1.0f);var fuzz_roughness: f32=0.0f; +`;A.IncludesShadersStoreWGSL[b8]||(A.IncludesShadersStoreWGSL[b8]=Yhe)});var M8,Khe,C8=M(()=>{G();M8="openpbrFuzzLayerData",Khe=`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); @@ -14012,11 +14012,11 @@ fuzz_roughness*=fuzzRoughnessFromTexture.a; fuzz_roughness*=fuzzRoughnessFromTexture.r; #endif #endif -`;T.IncludesShadersStoreWGSL[_8]||(T.IncludesShadersStoreWGSL[_8]=Lhe)});var v8,Dhe,E8=M(()=>{G();v8="openpbrAmbientOcclusionData",Dhe=`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; +`;A.IncludesShadersStoreWGSL[M8]||(A.IncludesShadersStoreWGSL[M8]=Khe)});var y8,jhe,P8=M(()=>{G();y8="openpbrAmbientOcclusionData",jhe=`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 -`;T.IncludesShadersStoreWGSL[v8]||(T.IncludesShadersStoreWGSL[v8]=Dhe)});var S8,Ohe,T8=M(()=>{G();S8="openpbrBackgroundTransmission",Ohe=`var slab_translucent_background: vec4f=vec4f(0.,0.,0.,1.); +`;A.IncludesShadersStoreWGSL[y8]||(A.IncludesShadersStoreWGSL[y8]=jhe)});var L8,qhe,D8=M(()=>{G();L8="openpbrBackgroundTransmission",qhe=`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 @@ -14044,7 +14044,7 @@ let noiseOffset: vec2f=noise.xy*lodTexelSize;slab_translucent_background=texture #endif } #endif -`;T.IncludesShadersStoreWGSL[S8]||(T.IncludesShadersStoreWGSL[S8]=Ohe)});var A8,Nhe,x8=M(()=>{G();A8="openpbrEnvironmentLighting",Nhe=`#if defined(REFLECTION) || defined(REFRACTED_BACKGROUND) +`;A.IncludesShadersStoreWGSL[L8]||(A.IncludesShadersStoreWGSL[L8]=qhe)});var O8,Zhe,N8=M(()=>{G();O8="openpbrEnvironmentLighting",Zhe=`#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 @@ -14338,7 +14338,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 -`;T.IncludesShadersStoreWGSL[A8]||(T.IncludesShadersStoreWGSL[A8]=Nhe)});var R8,whe,b8=M(()=>{G();R8="openpbrDirectLightingInit",whe=`#ifdef LIGHT{X} +`;A.IncludesShadersStoreWGSL[O8]||(A.IncludesShadersStoreWGSL[O8]=Zhe)});var w8,Qhe,F8=M(()=>{G();w8="openpbrDirectLightingInit",Qhe=`#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 @@ -14409,7 +14409,7 @@ preInfo{X}.roughness=adjustRoughnessFromLightProperties(specular_roughness,light preInfo{X}.diffuseRoughness=base_diffuse_roughness;preInfo{X}.surfaceAlbedo=base_color.rgb; #endif #endif -`;T.IncludesShadersStoreWGSL[R8]||(T.IncludesShadersStoreWGSL[R8]=whe)});var I8,Fhe,M8=M(()=>{G();I8="openpbrDirectLighting",Fhe=`#ifdef LIGHT{X} +`;A.IncludesShadersStoreWGSL[w8]||(A.IncludesShadersStoreWGSL[w8]=Qhe)});var B8,$he,U8=M(()=>{G();B8="openpbrDirectLighting",$he=`#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); @@ -14564,7 +14564,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 -`;T.IncludesShadersStoreWGSL[I8]||(T.IncludesShadersStoreWGSL[I8]=Fhe)});var C8,Uhe,qD=M(()=>{G();C8="pbrBlockImageProcessing",Uhe=`#if defined(IMAGEPROCESSINGPOSTPROCESS) || defined(SS_SCATTERING) +`;A.IncludesShadersStoreWGSL[B8]||(A.IncludesShadersStoreWGSL[B8]=$he)});var V8,Jhe,eO=M(()=>{G();V8="pbrBlockImageProcessing",Jhe=`#if defined(IMAGEPROCESSINGPOSTPROCESS) || defined(SS_SCATTERING) #if !defined(SKIPFINALCOLORCLAMP) finalColor=vec4f(clamp(finalColor.rgb,vec3f(0.),vec3f(30.0)),finalColor.a); #endif @@ -14575,7 +14575,7 @@ finalColor=vec4f(finalColor.rgb,finalColor.a*mesh.visibility); #ifdef PREMULTIPLYALPHA finalColor=vec4f(finalColor.rgb*finalColor.a,finalColor.a);; #endif -`;T.IncludesShadersStoreWGSL[C8]||(T.IncludesShadersStoreWGSL[C8]=Uhe)});var y8,Bhe,P8=M(()=>{G();y8="openpbrBlockPrePass",Bhe=`#if SCENE_MRT_COUNT>0 +`;A.IncludesShadersStoreWGSL[V8]||(A.IncludesShadersStoreWGSL[V8]=Jhe)});var G8,ede,k8=M(()=>{G();G8="openpbrBlockPrePass",ede=`#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); @@ -14665,7 +14665,7 @@ fragmentOutputs.fragData6=fragData[6]; fragmentOutputs.fragData7=fragData[7]; #endif #endif -`;T.IncludesShadersStoreWGSL[y8]||(T.IncludesShadersStoreWGSL[y8]=Bhe)});var L8,Vhe,ZD=M(()=>{G();L8="pbrDebug",Vhe=`#if DEBUGMODE>0 +`;A.IncludesShadersStoreWGSL[G8]||(A.IncludesShadersStoreWGSL[G8]=ede)});var W8,tde,tO=M(()=>{G();W8="pbrDebug",tde=`#if DEBUGMODE>0 if (input.vClipSpacePosition.x/input.vClipSpacePosition.w>=uniforms.vDebugMode.x) {var color: vec3f; #if DEBUGMODE==1 color=fragmentInputs.vPositionW.rgb; @@ -14849,7 +14849,7 @@ return fragmentOutputs; #endif } #endif -`;T.IncludesShadersStoreWGSL[L8]||(T.IncludesShadersStoreWGSL[L8]=Vhe)});var O8={};tt(O8,{openpbrPixelShaderWGSL:()=>Ghe});var QD,D8,Ghe,N8=M(()=>{G();Px();Lx();UD();VD();Dx();GY();Nx();hc();id();yg();ya();GD();kD();WD();wx();Ox();ap();HD();zD();op();XD();KD();HR();ZY();$Y();Wg();PD();e8();i8();LD();DD();n8();dc();jD();o8();c8();h8();ND();OD();u8();p8();g8();E8();Vx();T8();x8();b8();M8();Gx();Pg();qD();P8();kx();ZD();QD="openpbrPixelShader",D8=`#define OPENPBR_FRAGMENT_SHADER +`;A.IncludesShadersStoreWGSL[W8]||(A.IncludesShadersStoreWGSL[W8]=tde)});var z8={};tt(z8,{openpbrPixelShaderWGSL:()=>ide});var iO,H8,ide,X8=M(()=>{G();wx();Fx();WD();zD();Bx();QY();Vx();hc();id();Pg();ya();XD();YD();KD();Gx();Ux();ap();jD();qD();op();ZD();$D();jR();o8();c8();Hg();wD();h8();u8();FD();BD();p8();dc();JD();v8();S8();A8();VD();UD();R8();I8();C8();P8();zx();D8();N8();F8();U8();Xx();Lg();eO();k8();Yx();tO();iO="openpbrPixelShader",H8=`#define OPENPBR_FRAGMENT_SHADER #define CUSTOM_FRAGMENT_BEGIN #include[SCENE_MRT_COUNT] #include @@ -15073,7 +15073,7 @@ if (fragDepth==nearestDepth) {fragmentOutputs.frontColor=vec4f(fragmentOutputs.f #include #define CUSTOM_FRAGMENT_MAIN_END } -`;T.ShadersStoreWGSL[QD]||(T.ShadersStoreWGSL[QD]=D8);Ghe={name:QD,shader:D8}});var w8,khe,F8=M(()=>{G();OL();Wx();w8="openpbrVertexDeclaration",khe=`#include +`;A.ShadersStoreWGSL[iO]||(A.ShadersStoreWGSL[iO]=H8);ide={name:iO,shader:H8}});var Y8,rde,K8=M(()=>{G();UL();Kx();Y8="openpbrVertexDeclaration",rde=`#include #ifdef BASE_COLOR uniform vec2 vBaseColorInfos;uniform mat4 baseColorMatrix; #endif @@ -15200,22 +15200,22 @@ uniform vec4 vDetailInfos;uniform mat4 detailMatrix; #endif #include #define ADDITIONAL_VERTEX_DECLARATION -`;T.IncludesShadersStore[w8]||(T.IncludesShadersStore[w8]=khe)});var U8,Whe,$D=M(()=>{G();nd();Hg();U8="openpbrUboDeclaration",Whe=`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; +`;A.IncludesShadersStore[Y8]||(A.IncludesShadersStore[Y8]=rde)});var j8,nde,rO=M(()=>{G();nd();zg();j8="openpbrUboDeclaration",nde=`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 -`;T.IncludesShadersStore[U8]||(T.IncludesShadersStore[U8]=Whe)});var B8,Hhe,V8=M(()=>{G();B8="openpbrNormalMapVertexDeclaration",Hhe=`#if defined(GEOMETRY_NORMAL) || defined(PARALLAX) || defined(GEOMETRY_COAT_NORMAL) || defined(ANISOTROPIC) || defined(FUZZ) +`;A.IncludesShadersStore[j8]||(A.IncludesShadersStore[j8]=nde)});var q8,sde,Z8=M(()=>{G();q8="openpbrNormalMapVertexDeclaration",sde=`#if defined(GEOMETRY_NORMAL) || defined(PARALLAX) || defined(GEOMETRY_COAT_NORMAL) || defined(ANISOTROPIC) || defined(FUZZ) #if defined(TANGENT) && defined(NORMAL) varying mat3 vTBN; #endif #endif -`;T.IncludesShadersStore[B8]||(T.IncludesShadersStore[B8]=Hhe)});var G8,zhe,k8=M(()=>{G();G8="openpbrNormalMapVertex",zhe=`#if defined(GEOMETRY_NORMAL) || defined(PARALLAX) || defined(GEOMETRY_COAT_NORMAL) || defined(ANISOTROPIC) || defined(FUZZ) +`;A.IncludesShadersStore[q8]||(A.IncludesShadersStore[q8]=sde)});var Q8,ade,$8=M(()=>{G();Q8="openpbrNormalMapVertex",ade=`#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 -`;T.IncludesShadersStore[G8]||(T.IncludesShadersStore[G8]=zhe)});var H8={};tt(H8,{openpbrVertexShader:()=>Xhe});var JD,W8,Xhe,z8=M(()=>{G();F8();$D();Hx();Qm();Pa();np();uc();mc();wf();zx();Xx();sp();V8();pc();Lg();Yx();Kx();kf();Wf();sd();Hf();zf();_c();gc();vc();jx();qx();Zx();k8();Ec();Dg();$x();Og();Jx();JD="openpbrVertexShader",W8=`#define OPENPBR_VERTEX_SHADER +`;A.IncludesShadersStore[Q8]||(A.IncludesShadersStore[Q8]=ade)});var e6={};tt(e6,{openpbrVertexShader:()=>ode});var nO,J8,ode,t6=M(()=>{G();K8();rO();jx();Qm();Pa();np();uc();mc();wf();qx();Zx();sp();Z8();pc();Dg();Qx();$x();kf();Wf();sd();Hf();zf();_c();gc();vc();Jx();eR();tR();$8();Ec();Og();rR();Ng();nR();nO="openpbrVertexShader",J8=`#define OPENPBR_VERTEX_SHADER #define CUSTOM_VERTEX_EXTENSION precision highp float; #include<__decl__openpbrVertex> @@ -15436,7 +15436,7 @@ gl_PointSize=pointSize; #include #define CUSTOM_VERTEX_MAIN_END } -`;T.ShadersStore[JD]||(T.ShadersStore[JD]=W8);Xhe={name:JD,shader:W8}});var X8,Yhe,Y8=M(()=>{G();ED();eR();X8="openpbrFragmentDeclaration",Yhe=`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; +`;A.ShadersStore[nO]||(A.ShadersStore[nO]=J8);ode={name:nO,shader:J8}});var i6,lde,r6=M(()=>{G();RD();sR();i6="openpbrFragmentDeclaration",lde=`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 @@ -15585,7 +15585,7 @@ uniform vec3 vSphericalX;uniform vec3 vSphericalY;uniform vec3 vSphericalZ;unifo uniform mat4 backgroundRefractionMatrix;uniform vec3 vBackgroundRefractionInfos; #endif #define ADDITIONAL_FRAGMENT_DECLARATION -`;T.IncludesShadersStore[X8]||(T.IncludesShadersStore[X8]=Yhe)});var K8,Khe,eO=M(()=>{G();Qm();K8="pbrFragmentExtraDeclaration",Khe=`varying vec3 vPositionW; +`;A.IncludesShadersStore[i6]||(A.IncludesShadersStore[i6]=lde)});var n6,cde,sO=M(()=>{G();Qm();n6="pbrFragmentExtraDeclaration",cde=`varying vec3 vPositionW; #if DEBUGMODE>0 varying vec4 vClipSpacePosition; #endif @@ -15602,7 +15602,7 @@ varying vec4 vColor; #if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0 varying float vViewDepth; #endif -`;T.IncludesShadersStore[K8]||(T.IncludesShadersStore[K8]=Khe)});var j8,jhe,q8=M(()=>{G();ad();GR();j8="openpbrFragmentSamplersDeclaration",jhe=`#include(_DEFINENAME_,BASE_COLOR,_VARYINGNAME_,BaseColor,_SAMPLERNAME_,baseColor) +`;A.IncludesShadersStore[n6]||(A.IncludesShadersStore[n6]=cde)});var s6,fde,a6=M(()=>{G();ad();XR();s6="openpbrFragmentSamplersDeclaration",fde=`#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) @@ -15654,15 +15654,15 @@ uniform sampler2D blueNoiseSampler; #ifdef IBL_CDF_FILTERING uniform sampler2D icdfSampler; #endif -`;T.IncludesShadersStore[j8]||(T.IncludesShadersStore[j8]=jhe)});var Z8,qhe,tO=M(()=>{G();Z8="subSurfaceScatteringFunctions",qhe=`bool testLightingForSSS(float diffusionProfile) -{return diffusionProfile<1.;}`;T.IncludesShadersStore[Z8]||(T.IncludesShadersStore[Z8]=qhe)});var Q8,Zhe,iO=M(()=>{G();Q8="importanceSampling",Zhe=`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);} +`;A.IncludesShadersStore[s6]||(A.IncludesShadersStore[s6]=fde)});var o6,hde,aO=M(()=>{G();o6="subSurfaceScatteringFunctions",hde=`bool testLightingForSSS(float diffusionProfile) +{return diffusionProfile<1.;}`;A.IncludesShadersStore[o6]||(A.IncludesShadersStore[o6]=hde)});var l6,dde,oO=M(()=>{G();l6="importanceSampling",dde=`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);}`;T.IncludesShadersStore[Q8]||(T.IncludesShadersStore[Q8]=Zhe)});var $8,Qhe,rO=M(()=>{G();$8="pbrHelperFunctions",Qhe=`#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);}`;A.IncludesShadersStore[l6]||(A.IncludesShadersStore[l6]=dde)});var c6,ude,lO=M(()=>{G();c6="pbrHelperFunctions",ude=`#define MINIMUMVARIANCE 0.0005 float convertRoughnessToAverageSlope(float roughness) {return square(roughness)+MINIMUMVARIANCE;} float fresnelGrazingReflectance(float reflectance0) {float reflectance90=saturate(reflectance0*25.0);return reflectance90;} @@ -15697,7 +15697,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 -`;T.IncludesShadersStore[$8]||(T.IncludesShadersStore[$8]=Qhe)});var J8,$he,nO=M(()=>{G();aL();J8="pbrDirectLightingSetupFunctions",$he=`struct preLightingInfo +`;A.IncludesShadersStore[c6]||(A.IncludesShadersStore[c6]=ude)});var f6,mde,cO=M(()=>{G();hL();f6="pbrDirectLightingSetupFunctions",mde=`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; @@ -15730,7 +15730,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 -`;T.IncludesShadersStore[J8]||(T.IncludesShadersStore[J8]=$he)});var e6,Jhe,sO=M(()=>{G();e6="pbrDirectLightingFalloffFunctions",Jhe=`float computeDistanceLightFalloff_Standard(vec3 lightOffset,float range) +`;A.IncludesShadersStore[f6]||(A.IncludesShadersStore[f6]=mde)});var h6,pde,fO=M(()=>{G();h6="pbrDirectLightingFalloffFunctions",pde=`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);} @@ -15766,7 +15766,7 @@ return computeDirectionalLightFalloff_GLTF(lightDirection,directionToLightCenter #else return computeDirectionalLightFalloff_Standard(lightDirection,directionToLightCenterW,cosHalfAngle,exponent); #endif -}`;T.IncludesShadersStore[e6]||(T.IncludesShadersStore[e6]=Jhe)});var t6,ede,aO=M(()=>{G();t6="hdrFilteringFunctions",ede=`#if NUM_SAMPLES +}`;A.IncludesShadersStore[h6]||(A.IncludesShadersStore[h6]=pde)});var d6,_de,hO=M(()=>{G();d6="hdrFilteringFunctions",_de=`#if NUM_SAMPLES #if NUM_SAMPLES>0 #if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE) float radicalInverse_VdC(uint bits) @@ -15911,7 +15911,7 @@ result=result/weight;return result;} #endif #endif #endif -`;T.IncludesShadersStore[t6]||(T.IncludesShadersStore[t6]=ede)});var i6,tde,oO=M(()=>{G();i6="pbrDirectLightingFunctions",tde=`#define CLEARCOATREFLECTANCE90 1.0 +`;A.IncludesShadersStore[d6]||(A.IncludesShadersStore[d6]=_de)});var u6,gde,dO=M(()=>{G();u6="pbrDirectLightingFunctions",gde=`#define CLEARCOATREFLECTANCE90 1.0 struct lightingInfo {vec3 diffuse; #ifdef SS_TRANSLUCENCY @@ -16017,7 +16017,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 -`;T.IncludesShadersStore[i6]||(T.IncludesShadersStore[i6]=tde)});var r6,ide,n6=M(()=>{G();r6="openpbrNormalMapFragmentMainFunctions",ide=`#if defined(GEOMETRY_NORMAL) || defined(GEOMETRY_COAT_NORMAL) || defined(ANISOTROPIC) || defined(FUZZ) || defined(DETAIL) +`;A.IncludesShadersStore[u6]||(A.IncludesShadersStore[u6]=gde)});var m6,vde,p6=M(()=>{G();m6="openpbrNormalMapFragmentMainFunctions",vde=`#if defined(GEOMETRY_NORMAL) || defined(GEOMETRY_COAT_NORMAL) || defined(ANISOTROPIC) || defined(FUZZ) || defined(DETAIL) #if defined(TANGENT) && defined(NORMAL) varying mat3 vTBN; #endif @@ -16078,7 +16078,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 -`;T.IncludesShadersStore[r6]||(T.IncludesShadersStore[r6]=ide)});var s6,rde,a6=M(()=>{G();ad();s6="openpbrNormalMapFragmentFunctions",rde=`#if defined(GEOMETRY_NORMAL) +`;A.IncludesShadersStore[m6]||(A.IncludesShadersStore[m6]=vde)});var _6,Ede,g6=M(()=>{G();ad();_6="openpbrNormalMapFragmentFunctions",Ede=`#if defined(GEOMETRY_NORMAL) #include(_DEFINENAME_,GEOMETRY_NORMAL,_VARYINGNAME_,GeometryNormal,_SAMPLERNAME_,geometryNormal) #endif #if defined(GEOMETRY_COAT_NORMAL) @@ -16111,7 +16111,7 @@ return -texCoordOffset; #endif } #endif -`;T.IncludesShadersStore[s6]||(T.IncludesShadersStore[s6]=rde)});var o6,nde,l6=M(()=>{G();o6="openpbrConductorReflectance",nde=`#define pbr_inline +`;A.IncludesShadersStore[_6]||(A.IncludesShadersStore[_6]=Ede)});var v6,Sde,E6=M(()=>{G();v6="openpbrConductorReflectance",Sde=`#define pbr_inline ReflectanceParams conductorReflectance(in vec3 baseColor,in vec3 specularColor,in float specularWeight) {ReflectanceParams outParams; #if (CONDUCTOR_SPECULAR_MODEL==CONDUCTOR_SPECULAR_MODEL_OPENPBR) @@ -16119,9 +16119,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;}`;T.IncludesShadersStore[o6]||(T.IncludesShadersStore[o6]=nde)});var c6,sde,f6=M(()=>{G();c6="openpbrAmbientOcclusionFunctions",sde=`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;}`;A.IncludesShadersStore[v6]||(A.IncludesShadersStore[v6]=Sde)});var S6,Tde,T6=M(()=>{G();S6="openpbrAmbientOcclusionFunctions",Tde=`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));} -`;T.IncludesShadersStore[c6]||(T.IncludesShadersStore[c6]=sde)});var h6,ade,d6=M(()=>{G();h6="openpbrVolumeFunctions",ade=`struct OpenPBRHomogeneousVolume {vec3 extinction_coeff; +`;A.IncludesShadersStore[S6]||(A.IncludesShadersStore[S6]=Tde)});var A6,Ade,x6=M(()=>{G();A6="openpbrVolumeFunctions",Ade=`struct OpenPBRHomogeneousVolume {vec3 extinction_coeff; vec3 ss_albedo; vec3 multi_scatter_color; vec3 absorption_coeff; @@ -16177,7 +16177,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);}`;T.IncludesShadersStore[h6]||(T.IncludesShadersStore[h6]=ade)});var u6,ode,lO=M(()=>{G();u6="pbrBlockNormalGeometric",ode=`vec3 viewDirectionW=normalize(vEyePosition.xyz-vPositionW); +weight_sum.b<1e-5f ? unconvolved_irradiance.b : irradiance_sum.b/weight_sum.b);}`;A.IncludesShadersStore[A6]||(A.IncludesShadersStore[A6]=Ade)});var R6,xde,uO=M(()=>{G();R6="pbrBlockNormalGeometric",xde=`vec3 viewDirectionW=normalize(vEyePosition.xyz-vPositionW); #ifdef NORMAL vec3 normalW=normalize(vNormalW); #else @@ -16187,7 +16187,7 @@ vec3 geometricNormalW=normalW; #if defined(TWOSIDEDLIGHTING) && defined(NORMAL) geometricNormalW=gl_FrontFacing ? geometricNormalW : -geometricNormalW; #endif -`;T.IncludesShadersStore[u6]||(T.IncludesShadersStore[u6]=ode)});var m6,lde,p6=M(()=>{G();m6="openpbrNormalMapFragment",lde=`vec2 uvOffset=vec2(0.0,0.0); +`;A.IncludesShadersStore[R6]||(A.IncludesShadersStore[R6]=xde)});var b6,Rde,I6=M(()=>{G();b6="openpbrNormalMapFragment",Rde=`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; @@ -16242,7 +16242,7 @@ normalW=perturbNormalBase(TBN,blendedNormal,vGeometryNormalInfos.y); #elif defined(DETAIL) detailNormal.xy*=vDetailInfos.z;normalW=perturbNormalBase(TBN,detailNormal,vDetailInfos.z); #endif -`;T.IncludesShadersStore[m6]||(T.IncludesShadersStore[m6]=lde)});var _6,cde,g6=M(()=>{G();_6="openpbrBlockNormalFinal",cde=`#if defined(FORCENORMALFORWARD) && defined(NORMAL) +`;A.IncludesShadersStore[b6]||(A.IncludesShadersStore[b6]=Rde)});var M6,bde,C6=M(()=>{G();M6="openpbrBlockNormalFinal",bde=`#if defined(FORCENORMALFORWARD) && defined(NORMAL) vec3 faceNormal=normalize(cross(dFdx(vPositionW),dFdy(vPositionW)))*vEyePosition.w; #if defined(TWOSIDEDLIGHTING) faceNormal=gl_FrontFacing ? faceNormal : -faceNormal; @@ -16256,7 +16256,7 @@ normalW=gl_FrontFacing ? -normalW : normalW;coatNormalW=gl_FrontFacing ? -coatNo normalW=gl_FrontFacing ? normalW : -normalW;coatNormalW=gl_FrontFacing ? coatNormalW : -coatNormalW; #endif #endif -`;T.IncludesShadersStore[_6]||(T.IncludesShadersStore[_6]=cde)});var v6,fde,E6=M(()=>{G();v6="openpbrBaseLayerData",fde=`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; +`;A.IncludesShadersStore[M6]||(A.IncludesShadersStore[M6]=bde)});var y6,Ide,P6=M(()=>{G();y6="openpbrBaseLayerData",Ide=`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 @@ -16382,7 +16382,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 -`;T.IncludesShadersStore[v6]||(T.IncludesShadersStore[v6]=fde)});var S6,hde,T6=M(()=>{G();S6="openpbrCoatLayerData",hde=`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); +`;A.IncludesShadersStore[y6]||(A.IncludesShadersStore[y6]=Ide)});var L6,Mde,D6=M(()=>{G();L6="openpbrCoatLayerData",Mde=`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 @@ -16434,7 +16434,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 -`;T.IncludesShadersStore[S6]||(T.IncludesShadersStore[S6]=hde)});var A6,dde,x6=M(()=>{G();A6="openpbrThinFilmLayerData",dde=`#ifdef THIN_FILM +`;A.IncludesShadersStore[L6]||(A.IncludesShadersStore[L6]=Mde)});var O6,Cde,N6=M(()=>{G();O6="openpbrThinFilmLayerData",Cde=`#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 @@ -16451,7 +16451,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 -`;T.IncludesShadersStore[A6]||(T.IncludesShadersStore[A6]=dde)});var R6,ude,b6=M(()=>{G();R6="openpbrFuzzLayerData",ude=`float fuzz_weight=0.0;vec3 fuzz_color=vec3(1.0);float fuzz_roughness=0.0; +`;A.IncludesShadersStore[O6]||(A.IncludesShadersStore[O6]=Cde)});var w6,yde,F6=M(()=>{G();w6="openpbrFuzzLayerData",yde=`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); @@ -16480,11 +16480,11 @@ fuzz_roughness*=fuzzRoughnessFromTexture.a; fuzz_roughness*=fuzzRoughnessFromTexture.r; #endif #endif -`;T.IncludesShadersStore[R6]||(T.IncludesShadersStore[R6]=ude)});var I6,mde,M6=M(()=>{G();I6="openpbrAmbientOcclusionData",mde=`vec3 ambient_occlusion=vec3(1.0);float specular_ambient_occlusion=1.0;float coat_specular_ambient_occlusion=1.0; +`;A.IncludesShadersStore[w6]||(A.IncludesShadersStore[w6]=yde)});var B6,Pde,U6=M(()=>{G();B6="openpbrAmbientOcclusionData",Pde=`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 -`;T.IncludesShadersStore[I6]||(T.IncludesShadersStore[I6]=mde)});var C6,pde,y6=M(()=>{G();C6="openpbrBackgroundTransmission",pde=`vec4 slab_translucent_background=vec4(0.,0.,0.,1.); +`;A.IncludesShadersStore[B6]||(A.IncludesShadersStore[B6]=Pde)});var V6,Lde,G6=M(()=>{G();V6="openpbrBackgroundTransmission",Lde=`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 @@ -16512,7 +16512,7 @@ vec2 noiseOffset=noise.xy*lodTexelSize;slab_translucent_background=texture2DLodE #endif } #endif -`;T.IncludesShadersStore[C6]||(T.IncludesShadersStore[C6]=pde)});var P6,_de,L6=M(()=>{G();P6="openpbrEnvironmentLighting",_de=`#if defined(REFLECTION) || defined(REFRACTED_BACKGROUND) +`;A.IncludesShadersStore[V6]||(A.IncludesShadersStore[V6]=Lde)});var k6,Dde,W6=M(()=>{G();k6="openpbrEnvironmentLighting",Dde=`#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 @@ -16794,7 +16794,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 -`;T.IncludesShadersStore[P6]||(T.IncludesShadersStore[P6]=_de)});var D6,gde,O6=M(()=>{G();D6="openpbrDirectLightingInit",gde=`#ifdef LIGHT{X} +`;A.IncludesShadersStore[k6]||(A.IncludesShadersStore[k6]=Dde)});var H6,Ode,z6=M(()=>{G();H6="openpbrDirectLightingInit",Ode=`#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 @@ -16865,7 +16865,7 @@ preInfo{X}.roughness=adjustRoughnessFromLightProperties(specular_roughness,light preInfo{X}.diffuseRoughness=base_diffuse_roughness;preInfo{X}.surfaceAlbedo=base_color.rgb; #endif #endif -`;T.IncludesShadersStore[D6]||(T.IncludesShadersStore[D6]=gde)});var N6,vde,w6=M(()=>{G();N6="openpbrDirectLighting",vde=`#ifdef LIGHT{X} +`;A.IncludesShadersStore[H6]||(A.IncludesShadersStore[H6]=Ode)});var X6,Nde,Y6=M(()=>{G();X6="openpbrDirectLighting",Nde=`#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); @@ -17020,7 +17020,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 -`;T.IncludesShadersStore[N6]||(T.IncludesShadersStore[N6]=vde)});var F6,Ede,cO=M(()=>{G();F6="pbrBlockImageProcessing",Ede=`#if defined(IMAGEPROCESSINGPOSTPROCESS) || defined(SS_SCATTERING) +`;A.IncludesShadersStore[X6]||(A.IncludesShadersStore[X6]=Nde)});var K6,wde,mO=M(()=>{G();K6="pbrBlockImageProcessing",wde=`#if defined(IMAGEPROCESSINGPOSTPROCESS) || defined(SS_SCATTERING) #if !defined(SKIPFINALCOLORCLAMP) finalColor.rgb=clamp(finalColor.rgb,0.,30.0); #endif @@ -17031,7 +17031,7 @@ finalColor.a*=visibility; #ifdef PREMULTIPLYALPHA finalColor.rgb*=finalColor.a; #endif -`;T.IncludesShadersStore[F6]||(T.IncludesShadersStore[F6]=Ede)});var U6,Sde,B6=M(()=>{G();U6="openpbrBlockPrePass",Sde=`#if SCENE_MRT_COUNT>0 +`;A.IncludesShadersStore[K6]||(A.IncludesShadersStore[K6]=wde)});var j6,Fde,q6=M(()=>{G();j6="openpbrBlockPrePass",Fde=`#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); @@ -17097,7 +17097,7 @@ gl_FragData[PREPASS_REFLECTIVITY_INDEX]=vec4( 0.0,0.0,0.0,1.0 )*writeGeometryInf #endif #endif #endif -`;T.IncludesShadersStore[U6]||(T.IncludesShadersStore[U6]=Sde)});var V6,Tde,fO=M(()=>{G();V6="pbrDebug",Tde=`#if DEBUGMODE>0 +`;A.IncludesShadersStore[j6]||(A.IncludesShadersStore[j6]=Fde)});var Z6,Bde,pO=M(()=>{G();Z6="pbrDebug",Bde=`#if DEBUGMODE>0 if (vClipSpacePosition.x/vClipSpacePosition.w>=vDebugMode.x) { #if DEBUGMODE==1 gl_FragColor.rgb=vPositionW.rgb; @@ -17281,7 +17281,7 @@ return; #endif } #endif -`;T.IncludesShadersStore[V6]||(T.IncludesShadersStore[V6]=Tde)});var k6={};tt(k6,{openpbrPixelShader:()=>Ade});var hO,G6,Ade,W6=M(()=>{G();tR();iR();Y8();$D();eO();rR();nR();q8();aR();Sc();sd();Ng();Pa();tO();iO();rO();oR();sR();sp();nO();sO();np();aO();oO();kR();n6();a6();zg();SD();l6();f6();TD();AD();d6();Tc();lO();p6();g6();E6();RD();xD();T6();x6();b6();M6();hR();y6();L6();O6();w6();dR();wg();cO();B6();uR();fO();hO="openpbrPixelShader",G6=`#define OPENPBR_FRAGMENT_SHADER +`;A.IncludesShadersStore[Z6]||(A.IncludesShadersStore[Z6]=Bde)});var $6={};tt($6,{openpbrPixelShader:()=>Ude});var _O,Q6,Ude,J6=M(()=>{G();aR();oR();r6();rO();sO();lR();cR();a6();hR();Sc();sd();wg();Pa();aO();oO();lO();dR();fR();sp();cO();fO();np();hO();dO();YR();p6();g6();Xg();bD();E6();T6();ID();MD();x6();Tc();uO();I6();C6();P6();yD();CD();D6();N6();F6();U6();_R();G6();W6();z6();Y6();gR();Fg();mO();q6();vR();pO();_O="openpbrPixelShader",Q6=`#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 @@ -17516,11 +17516,11 @@ if (fragDepth==nearestDepth) {frontColor.rgb+=finalColor.rgb*finalColor.a*alphaM #include #define CUSTOM_FRAGMENT_MAIN_END } -`;T.ShadersStore[hO]||(T.ShadersStore[hO]=G6);Ade={name:hO,shader:G6}});var H6={};tt(H6,{OpenPBRMaterial:()=>Ne,OpenPBRMaterialDefines:()=>iv});var lp,zR,ai,Ti,dO,uO,iv,mO,Ne,z6=M(()=>{Gt();Vt();BR();zt();ng();Vr();zi();Vn();Ar();Na();ux();Lf();ol();bg();Bn();ki();mx();dx();Da();Pt();px();_x();X5();Ge();gx();Rg();oo();Mi();yY();lp={effect:null,subMesh:null},zR=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?ee.Error(`Float property ${r.name} has an offset that is too large.`):ee.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}};zR._tmpArray=[0,0,0,0];ai=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}},dO=class extends jm(Km(Rr)){},uO=class extends z5(dO){},iv=class extends Xm(uO){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}},mO=class extends qm(hl){},Ne=class n extends mO{get geometryTangentAngle(){return Math.atan2(this.geometryTangent.y,this.geometryTangent.x)}set geometryTangentAngle(e){this.geometryTangent=new Fe(Math.cos(e),Math.sin(e))}get geometryCoatTangentAngle(){return Math.atan2(this.geometryCoatTangent.y,this.geometryCoatTangent.x)}set geometryCoatTangentAngle(e){this.geometryCoatTangent=new Fe(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(ge.BlackReadOnly)||this.subsurfaceWeight>0}get usePhysicalLightFalloff(){return this._lightFalloff===Ee.LIGHTFALLOFF_PHYSICAL}set usePhysicalLightFalloff(e){e!==this.usePhysicalLightFalloff&&(this._markAllSubMeshesAsTexturesDirty(),e?this._lightFalloff=Ee.LIGHTFALLOFF_PHYSICAL:this._lightFalloff=Ee.LIGHTFALLOFF_STANDARD)}get useGLTFLightFalloff(){return this._lightFalloff===Ee.LIGHTFALLOFF_GLTF}set useGLTFLightFalloff(e){e!==this.useGLTFLightFalloff&&(this._markAllSubMeshesAsTexturesDirty(),e?this._lightFalloff=Ee.LIGHTFALLOFF_GLTF:this._lightFalloff=Ee.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 ai("base_weight",1,"vBaseWeight",1),this._baseWeightTexture=new Ti("base_weight","baseWeight","BASE_WEIGHT"),this._baseColor=new ai("base_color",ge.White(),"vBaseColor",4),this._baseColorTexture=new Ti("base_color","baseColor","BASE_COLOR"),this._baseDiffuseRoughness=new ai("base_diffuse_roughness",0,"vBaseDiffuseRoughness",1),this._baseDiffuseRoughnessTexture=new Ti("base_diffuse_roughness","baseDiffuseRoughness","BASE_DIFFUSE_ROUGHNESS"),this._baseMetalness=new ai("base_metalness",0,"vReflectanceInfo",4,0),this._baseMetalnessTexture=new Ti("base_metalness","baseMetalness","BASE_METALNESS"),this._specularWeight=new ai("specular_weight",1,"vReflectanceInfo",4,3),this._specularWeightTexture=new Ti("specular_weight","specularWeight","SPECULAR_WEIGHT"),this._specularColor=new ai("specular_color",ge.White(),"vSpecularColor",4),this._specularColorTexture=new Ti("specular_color","specularColor","SPECULAR_COLOR"),this._specularRoughness=new ai("specular_roughness",.3,"vReflectanceInfo",4,1),this._specularRoughnessTexture=new Ti("specular_roughness","specularRoughness","SPECULAR_ROUGHNESS"),this._specularRoughnessAnisotropy=new ai("specular_roughness_anisotropy",0,"vSpecularAnisotropy",3,2),this._specularRoughnessAnisotropyTexture=new Ti("specular_roughness_anisotropy","specularRoughnessAnisotropy","SPECULAR_ROUGHNESS_ANISOTROPY"),this._specularIor=new ai("specular_ior",1.5,"vReflectanceInfo",4,2),this._transmissionWeight=new ai("transmission_weight",0,"vTransmissionWeight",1),this._transmissionWeightTexture=new Ti("transmission_weight","transmissionWeight","TRANSMISSION_WEIGHT"),this._transmissionColor=new ai("transmission_color",ge.White(),"vTransmissionColor",3,0),this._transmissionColorTexture=new Ti("transmission_color","transmissionColor","TRANSMISSION_COLOR"),this._transmissionDepth=new ai("transmission_depth",0,"vTransmissionDepth",1,0),this._transmissionDepthTexture=new Ti("transmission_depth","transmissionDepth","TRANSMISSION_DEPTH"),this._transmissionScatter=new ai("transmission_scatter",ge.Black(),"vTransmissionScatter",3,0),this._transmissionScatterTexture=new Ti("transmission_scatter","transmissionScatter","TRANSMISSION_SCATTER"),this._transmissionScatterAnisotropy=new ai("transmission_scatter_anisotropy",0,"vTransmissionScatterAnisotropy",1,0),this._transmissionDispersionScale=new ai("transmission_dispersion_scale",0,"vTransmissionDispersionScale",1,0),this._transmissionDispersionScaleTexture=new Ti("transmission_dispersion_scale","transmissionDispersionScale","TRANSMISSION_DISPERSION_SCALE"),this._transmissionDispersionAbbeNumber=new ai("transmission_dispersion_abbe_number",20,"vTransmissionDispersionAbbeNumber",1,0),this._subsurfaceWeight=new ai("subsurface_weight",0,"vSubsurfaceWeight",1,0,"SUBSURFACE_SLAB"),this._subsurfaceWeightTexture=new Ti("subsurface_weight","subsurfaceWeight","SUBSURFACE_WEIGHT"),this._subsurfaceColor=new ai("subsurface_color",new ge(.8,.8,.8),"vSubsurfaceColor",3,0,"SUBSURFACE_SLAB"),this._subsurfaceColorTexture=new Ti("subsurface_color","subsurfaceColor","SUBSURFACE_COLOR"),this._subsurfaceRadius=new ai("subsurface_radius",.1,"vSubsurfaceRadius",1,0,"SUBSURFACE_SLAB"),this._subsurfaceRadiusScale=new ai("subsurface_radius_scale",new ge(1,.5,.25),"vSubsurfaceRadiusScale",3,0,"SUBSURFACE_SLAB"),this._subsurfaceRadiusScaleTexture=new Ti("subsurface_radius_scale","subsurfaceRadiusScale","SUBSURFACE_RADIUS_SCALE"),this._subsurfaceScatterAnisotropy=new ai("subsurface_scatter_anisotropy",0,"vSubsurfaceScatterAnisotropy",1,0,"SUBSURFACE_SLAB"),this._coatWeight=new ai("coat_weight",0,"vCoatWeight",1,0),this._coatWeightTexture=new Ti("coat_weight","coatWeight","COAT_WEIGHT"),this._coatColor=new ai("coat_color",ge.White(),"vCoatColor",3,0),this._coatColorTexture=new Ti("coat_color","coatColor","COAT_COLOR"),this._coatRoughness=new ai("coat_roughness",0,"vCoatRoughness",1,0),this._coatRoughnessTexture=new Ti("coat_roughness","coatRoughness","COAT_ROUGHNESS"),this._coatRoughnessAnisotropy=new ai("coat_roughness_anisotropy",0,"vCoatRoughnessAnisotropy",1),this._coatRoughnessAnisotropyTexture=new Ti("coat_roughness_anisotropy","coatRoughnessAnisotropy","COAT_ROUGHNESS_ANISOTROPY"),this._coatIor=new ai("coat_ior",1.5,"vCoatIor",1,0),this._coatDarkening=new ai("coat_darkening",1,"vCoatDarkening",1,0),this._coatDarkeningTexture=new Ti("coat_darkening","coatDarkening","COAT_DARKENING"),this.useCoatRoughnessFromWeightTexture=!1,this._fuzzWeight=new ai("fuzz_weight",0,"vFuzzWeight",1,0),this._fuzzWeightTexture=new Ti("fuzz_weight","fuzzWeight","FUZZ_WEIGHT"),this._fuzzColor=new ai("fuzz_color",ge.White(),"vFuzzColor",3,0),this._fuzzColorTexture=new Ti("fuzz_color","fuzzColor","FUZZ_COLOR"),this._fuzzRoughness=new ai("fuzz_roughness",.5,"vFuzzRoughness",1,0),this._fuzzRoughnessTexture=new Ti("fuzz_roughness","fuzzRoughness","FUZZ_ROUGHNESS"),this._geometryThinWalled=new ai("geometry_thin_walled",0,"vGeometryThinWalled",1,0),this._geometryNormalTexture=new Ti("geometry_normal","geometryNormal","GEOMETRY_NORMAL"),this._geometryTangent=new ai("geometry_tangent",new Fe(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 ai("geometry_coat_tangent",new Fe(1,0),"vGeometryCoatTangent",2,0),this._geometryCoatTangentTexture=new Ti("geometry_coat_tangent","geometryCoatTangent","GEOMETRY_COAT_TANGENT"),this._geometryOpacity=new ai("geometry_opacity",1,"vBaseColor",4,3),this._geometryOpacityTexture=new Ti("geometry_opacity","geometryOpacity","GEOMETRY_OPACITY"),this._geometryThickness=new ai("geometry_thickness",0,"vGeometryThickness",1,0),this._geometryThicknessTexture=new Ti("geometry_thickness","geometryThickness","GEOMETRY_THICKNESS"),this._emissionLuminance=new ai("emission_luminance",1,"vLightingIntensity",4,1),this._emissionColor=new ai("emission_color",ge.Black(),"vEmissionColor",3),this._emissionColorTexture=new Ti("emission_color","emissionColor","EMISSION_COLOR"),this._thinFilmWeight=new ai("thin_film_weight",0,"vThinFilmWeight",1,0),this._thinFilmWeightTexture=new Ti("thin_film_weight","thinFilmWeight","THIN_FILM_WEIGHT"),this._thinFilmThickness=new ai("thin_film_thickness",.5,"vThinFilmThickness",2,0),this._thinFilmThicknessMin=new ai("thin_film_thickness_min",0,"vThinFilmThickness",2,1),this._thinFilmThicknessTexture=new Ti("thin_film_thickness","thinFilmThickness","THIN_FILM_THICKNESS"),this._thinFilmIor=new ai("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 Ii(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=Ee.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 Bi(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=Ee.MATERIAL_OPAQUE,this.getScene()&&!((s=this.getScene())!=null&&s.getEngine().isWebGPU)&&this.getScene().getEngine().webGLVersion<2&&ee.Error("OpenPBRMaterial: WebGL 2.0 or above is required for this material."),n._noiseTextures[this.getScene().uniqueId]||(n._noiseTextures[this.getScene().uniqueId]=new _e(pe.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(),ce.ReflectionTextureEnabled&&this._radianceTexture&&this._radianceTexture.isRenderTarget&&this._renderTargets.push(this._radianceTexture),ce.RefractionTextureEnabled&&this._backgroundRefractionTexture&&this._backgroundRefractionTexture.isRenderTarget&&this._renderTargets.push(this._backgroundRefractionTexture),this._eventInfo.renderTargets=this._renderTargets,this._callbackPluginEventFillRenderTargetTextures(this._eventInfo),this._renderTargets),this._environmentBRDFTexture=H5(this.getScene()),this._environmentFuzzBRDFTexture=gD(this.getScene()),this.prePassConfiguration=new Ls,this._propertyList={};for(let a of Object.getOwnPropertyNames(this)){let o=this[a];o instanceof ai&&(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?ee.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 zR(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 ce.ReflectionTextureEnabled&&this._radianceTexture&&this._radianceTexture.isRenderTarget||ce.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!==Ee.MATERIAL_OPAQUE&&!this.geometryOpacityTexture}_hasAlphaChannel(){return this.baseColorTexture!=null&&this.baseColorTexture.hasAlpha&&this._useAlphaFromBaseColorTexture||this.geometryOpacityTexture!=null}clone(e,t=!0,i=""){let r=it.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=it.Parse(()=>new n(e.name,t),e,t,i);return e.stencil&&r.stencil.parse(e.stencil,t,i),Ee._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 iv({...this._eventInfo.defineNames||{},...this._samplerDefines||{}}),o=this._prepareEffect(e,e,a,void 0,void 0,r.useInstances,r.clipPlane);this._onEffectCreatedObservable&&(lp.effect=o,lp.subMesh=null,this._onEffectCreatedObservable.notifyObservers(lp)),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 iv({...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 p=this._samplersList[m];if(p.value&&!p.value.isReadyOrNotBlocking())return!1}let u=this._getRadianceTexture();if(u&&ce.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&&ce.ReflectionTextureEnabled&&!this._environmentBRDFTexture.isReady()||this._environmentFuzzBRDFTexture&&ce.ReflectionTextureEnabled&&!this._environmentFuzzBRDFTexture.isReady()||this._backgroundRefractionTexture&&ce.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),Hn.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);Ms(t,this._activeEffect,this.prePassConfiguration),this._vertexPullingMetadata&&Of(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 p=this._samplersList[m];p.value&&(f.updateFloat2(p.samplerInfoName,p.value.coordinatesIndex,p.value.level),si(p.value,f,p.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)),Sm(r,s,f,ge.White(),d,this.realTimeFiltering,!0,!0,!0,!0,!0)}this.pointsCloud&&f.updateFloat("pointSize",this.pointSize);let u=this._uniformsArray;for(let m=0,p=u.length;m0&&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 Wn,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=bm(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),xm(d,e,i,f),Rm(d,i),$h(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 p=["environmentBrdfSampler","boneSampler","morphTargets","oitDepthSampler","oitFrontColorSampler","areaLightsLTC1Sampler","areaLightsLTC2Sampler"];i.FUZZENVIRONMENTBRDF&&p.push("environmentFuzzBrdfSampler"),i.REFRACTED_BACKGROUND&&p.push("backgroundRefractionSampler"),(i.ANISOTROPIC||i.FUZZ||i.REFRACTED_BACKGROUND||i.USE_IRRADIANCE_TEXTURE_FOR_SCATTERING)&&p.push("blueNoiseSampler"),i.USE_IRRADIANCE_TEXTURE_FOR_SCATTERING&&(p.push("sceneIrradianceSampler"),p.push("sceneDepthSampler"));for(let E in this._samplersList){let S=this._samplersList[E];p.push(S.samplerName),m.push(S.samplerInfoName),m.push(S.samplerMatrixName)}Rf(m,p,!0);let _=["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=p,this._eventInfo.uniformBuffersNames=_,this._eventInfo.customCode=void 0,this._eventInfo.mesh=e,this._eventInfo.indexParameters=g,this._callbackPluginEventGeneric(128,this._eventInfo),Hn.AddUniformsAndSamplers(m,p),Ls.AddUniforms(m),Ls.AddSamplers(p),wn(m),this._useVertexPulling){let E=t==null?void 0:t.geometry;E&&(this._vertexPullingMetadata=Df(E),this._vertexPullingMetadata&&this._vertexPullingMetadata.forEach((S,R)=>{m.push(`vp_${R}_info`)}))}else this._vertexPullingMetadata=null;kt&&(kt.PrepareUniforms(m,i),kt.PrepareSamplers(p,i)),Nm({uniformsNames:m,uniformBuffersNames:_,samplers:p,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:_,samplers:p,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(()=>(UY(),FY)),Promise.resolve().then(()=>(N8(),O8))]):await Promise.all([Promise.resolve().then(()=>(z8(),H8)),Promise.resolve().then(()=>(W6(),k6))]),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();Cm(o,e,i,!0,this._maxSimultaneousLights,this._disableLighting),i._needNormals=!0,Lm(o,i);let c=this.needAlphaBlendingForMesh(e)&&this.getScene().useOrderIndependentTransparency;if(Om(o,i,this.canRenderToMRT&&!c),Dm(o,i,c),Hn.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 p=this._samplersList[m];p.value?(ni(p.value,i,p.textureDefine),i[p.textureDefine+"_GAMMA"]=p.value.gammaSpace):i[p.textureDefine]=!1}let d=this._getRadianceTexture(),u=this._forceIrradianceInFragment||this.realTimeFiltering||this._twoSidedLighting||l.getCaps().maxVaryingVectors<=8||this._baseDiffuseRoughnessTexture!=null;if(xf(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&&ce.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&&ce.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&&ce.RefractionTextureEnabled,i.REFRACTION_HIGH_QUALITY_BLUR=this._refractionHighQualityBlur,i.REFRACTED_LIGHTS=!0;let m=this._getRadianceTexture();m?(i.REFRACTED_ENVIRONMENT=ce.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===Ee.LIGHTFALLOFF_STANDARD?(i.USEPHYSICALLIGHTFALLOFF=!1,i.USEGLTFLIGHTFALLOFF=!1):this._lightFalloff===Ee.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]&&ce.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(ns.IRRADIANCE_TEXTURE_TYPE);this.sssIrradianceTexture=o.geometryBufferRenderer.getGBuffer().textures[u],d=!0}if(!this.sssDepthTexture&&o.geometryBufferRenderer){let u=o.geometryBufferRenderer.getTextureIndex(ns.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&&ce.ReflectionTextureEnabled,i.GEOMETRY_THIN_WALLED=this.geometryThinWalled!=0,i.FUZZ?(e.isVerticesDataPresent(L.TangentKind)||(i._needUVs=!0,i.MAINUV1=!0),this._environmentFuzzBRDFTexture=gD(this.getScene()),i.FUZZ_IBL_SAMPLES=this.fuzzSampleNumber):(this._environmentFuzzBRDFTexture=null,i.FUZZENVIRONMENTBRDF=!1,i.FUZZ_IBL_SAMPLES=0),i._areMiscDirty&&(Im(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),ym(o,l,this,i,!!r,s,a),this._eventInfo.defines=i,this._eventInfo.mesh=e,this._callbackPluginEventPrepareDefinesBeforeAttributes(this._eventInfo),Pm(e,i,!0,!0,!0,this._transparencyMode!==Ee.MATERIAL_OPAQUE),this._callbackPluginEventPrepareDefines(this._eventInfo)}};Ne.SSS_QUALITY_LOW=0;Ne.SSS_QUALITY_MEDIUM=1;Ne.SSS_QUALITY_HIGH=2;Ne._noiseTextures={};Ne.ForceGLSL=!1;P([ut("_markAllSubMeshesAsTexturesDirty","baseWeight")],Ne.prototype,"_baseWeight",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","baseWeightTexture")],Ne.prototype,"_baseWeightTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","baseColor")],Ne.prototype,"_baseColor",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","baseColorTexture")],Ne.prototype,"_baseColorTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","baseDiffuseRoughness")],Ne.prototype,"_baseDiffuseRoughness",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","baseDiffuseRoughnessTexture")],Ne.prototype,"_baseDiffuseRoughnessTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","baseMetalness")],Ne.prototype,"_baseMetalness",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","baseMetalnessTexture")],Ne.prototype,"_baseMetalnessTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","specularWeight")],Ne.prototype,"_specularWeight",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","specularWeightTexture")],Ne.prototype,"_specularWeightTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","specularColor")],Ne.prototype,"_specularColor",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","specularColorTexture")],Ne.prototype,"_specularColorTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","specularRoughness")],Ne.prototype,"_specularRoughness",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","specularRoughnessTexture")],Ne.prototype,"_specularRoughnessTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","specularRoughnessAnisotropy")],Ne.prototype,"_specularRoughnessAnisotropy",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","specularRoughnessAnisotropyTexture")],Ne.prototype,"_specularRoughnessAnisotropyTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","specularIor")],Ne.prototype,"_specularIor",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","transmissionWeight")],Ne.prototype,"_transmissionWeight",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","transmissionWeightTexture")],Ne.prototype,"_transmissionWeightTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","transmissionColor")],Ne.prototype,"_transmissionColor",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","transmissionColorTexture")],Ne.prototype,"_transmissionColorTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","transmissionDepth")],Ne.prototype,"_transmissionDepth",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","transmissionDepthTexture")],Ne.prototype,"_transmissionDepthTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","transmissionScatter")],Ne.prototype,"_transmissionScatter",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","transmissionScatterTexture")],Ne.prototype,"_transmissionScatterTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","transmissionScatterAnisotropy")],Ne.prototype,"_transmissionScatterAnisotropy",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","transmissionDispersionScale")],Ne.prototype,"_transmissionDispersionScale",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","transmissionDispersionScaleTexture")],Ne.prototype,"_transmissionDispersionScaleTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","transmissionDispersionAbbeNumber")],Ne.prototype,"_transmissionDispersionAbbeNumber",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","subsurfaceWeight")],Ne.prototype,"_subsurfaceWeight",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","subsurfaceWeightTexture")],Ne.prototype,"_subsurfaceWeightTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","subsurfaceColor")],Ne.prototype,"_subsurfaceColor",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","subsurfaceColorTexture")],Ne.prototype,"_subsurfaceColorTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","subsurfaceRadius")],Ne.prototype,"_subsurfaceRadius",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","subsurfaceRadiusScale")],Ne.prototype,"_subsurfaceRadiusScale",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","subsurfaceRadiusScaleTexture")],Ne.prototype,"_subsurfaceRadiusScaleTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","subsurfaceScatterAnisotropy")],Ne.prototype,"_subsurfaceScatterAnisotropy",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","coatWeight")],Ne.prototype,"_coatWeight",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","coatWeightTexture")],Ne.prototype,"_coatWeightTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","coatColor")],Ne.prototype,"_coatColor",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","coatColorTexture")],Ne.prototype,"_coatColorTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","coatRoughness")],Ne.prototype,"_coatRoughness",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","coatRoughnessTexture")],Ne.prototype,"_coatRoughnessTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","coatRoughnessAnisotropy")],Ne.prototype,"_coatRoughnessAnisotropy",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","coatRoughnessAnisotropyTexture")],Ne.prototype,"_coatRoughnessAnisotropyTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","coatIor")],Ne.prototype,"_coatIor",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","coatDarkening")],Ne.prototype,"_coatDarkening",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","coatDarkeningTexture")],Ne.prototype,"_coatDarkeningTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","fuzzWeight")],Ne.prototype,"_fuzzWeight",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","fuzzWeightTexture")],Ne.prototype,"_fuzzWeightTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","fuzzColor")],Ne.prototype,"_fuzzColor",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","fuzzColorTexture")],Ne.prototype,"_fuzzColorTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","fuzzRoughness")],Ne.prototype,"_fuzzRoughness",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","fuzzRoughnessTexture")],Ne.prototype,"_fuzzRoughnessTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","geometryThinWalled")],Ne.prototype,"_geometryThinWalled",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","geometryNormalTexture")],Ne.prototype,"_geometryNormalTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","geometryTangent")],Ne.prototype,"_geometryTangent",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","geometryTangentTexture")],Ne.prototype,"_geometryTangentTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","geometryCoatNormalTexture")],Ne.prototype,"_geometryCoatNormalTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","geometryCoatTangent")],Ne.prototype,"_geometryCoatTangent",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","geometryCoatTangentTexture")],Ne.prototype,"_geometryCoatTangentTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","geometryOpacity")],Ne.prototype,"_geometryOpacity",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","geometryOpacityTexture")],Ne.prototype,"_geometryOpacityTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","geometryThickness")],Ne.prototype,"_geometryThickness",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","geometryThicknessTexture")],Ne.prototype,"_geometryThicknessTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","emissionLuminance")],Ne.prototype,"_emissionLuminance",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","emissionColor")],Ne.prototype,"_emissionColor",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","emissionColorTexture")],Ne.prototype,"_emissionColorTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","thinFilmWeight")],Ne.prototype,"_thinFilmWeight",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","thinFilmWeightTexture")],Ne.prototype,"_thinFilmWeightTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","thinFilmThickness")],Ne.prototype,"_thinFilmThickness",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","thinFilmThicknessMin")],Ne.prototype,"_thinFilmThicknessMin",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","thinFilmThicknessTexture")],Ne.prototype,"_thinFilmThicknessTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","thinFilmIor")],Ne.prototype,"_thinFilmIor",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","ambientOcclusionTexture")],Ne.prototype,"_ambientOcclusionTexture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"directIntensity",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"environmentIntensity",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"useSpecularWeightFromTextureAlpha",void 0);P([F(),le("_markAllSubMeshesAsTexturesAndMiscDirty")],Ne.prototype,"forceAlphaTest",void 0);P([F(),le("_markAllSubMeshesAsTexturesAndMiscDirty")],Ne.prototype,"alphaCutOff",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"useAmbientOcclusionFromMetallicTextureRed",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"useAmbientInGrayScale",void 0);P([F()],Ne.prototype,"usePhysicalLightFalloff",null);P([F()],Ne.prototype,"useGLTFLightFalloff",null);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"useObjectSpaceNormalMap",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"useParallax",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"useParallaxOcclusion",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"parallaxScaleBias",void 0);P([F(),le("_markAllSubMeshesAsLightsDirty")],Ne.prototype,"disableLighting",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"forceIrradianceInFragment",void 0);P([F(),le("_markAllSubMeshesAsLightsDirty")],Ne.prototype,"maxSimultaneousLights",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"invertNormalMapX",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"invertNormalMapY",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"twoSidedLighting",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"useAlphaFresnel",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"useLinearAlphaFresnel",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"environmentBRDFTexture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"forceNormalForward",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"enableSpecularAntiAliasing",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"useHorizonOcclusion",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"useRadianceOcclusion",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],Ne.prototype,"unlit",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],Ne.prototype,"applyDecalMapAfterDetailMap",void 0);P([le("_markAllSubMeshesAsMiscDirty")],Ne.prototype,"debugMode",void 0);P([F()],Ne.prototype,"transparencyMode",null);Ft("BABYLON.OpenPBRMaterial",Ne)});var X6={};tt(X6,{OpenPBRMaterialLoadingAdapter:()=>pO});var pO,Y6=M(()=>{zt();pO=class{constructor(e){this._diffuseTransmissionTint=ge.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(ge.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(ge.White())||this._diffuseTransmissionTintTexture)&&(this._material.geometryThinWalled?(this.subsurfaceColor=this._diffuseTransmissionTint,this.subsurfaceColorTexture=this._diffuseTransmissionTintTexture):this._material.coatWeight==0&&(!this.baseColor.equals(ge.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(ge.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 _O,Cr,K6=M(()=>{Gt();Vt();Na();Ff();_O=class extends Rr{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}},Cr=class n extends Wr{_markAllSubMeshesAsMiscDirty(){this._internalMarkAllSubMeshesAsMiscDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"PBRBRDF",90,new _O,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"}};Cr.DEFAULT_USE_ENERGY_CONSERVATION=!0;Cr.DEFAULT_USE_SMITH_VISIBILITY_HEIGHT_CORRELATED=!0;Cr.DEFAULT_USE_SPHERICAL_HARMONICS=!0;Cr.DEFAULT_USE_SPECULAR_GLOSSINESS_INPUT_ENERGY_CONSERVATION=!0;Cr.DEFAULT_MIX_IBL_RADIANCE_WITH_IRRADIANCE=!0;Cr.DEFAULT_USE_LEGACY_SPECULAR_ENERGY_CONSERVATION=!0;Cr.DEFAULT_DIFFUSE_MODEL=0;Cr.DEFAULT_DIELECTRIC_SPECULAR_MODEL=0;Cr.DEFAULT_CONDUCTOR_SPECULAR_MODEL=0;P([F(),le("_markAllSubMeshesAsMiscDirty")],Cr.prototype,"useEnergyConservation",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],Cr.prototype,"useSmithVisibilityHeightCorrelated",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],Cr.prototype,"useSphericalHarmonics",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],Cr.prototype,"useSpecularGlossinessInputEnergyConservation",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],Cr.prototype,"mixIblRadianceWithIrradiance",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],Cr.prototype,"useLegacySpecularEnergyConservation",void 0);P([F("baseDiffuseModel"),le("_markAllSubMeshesAsMiscDirty")],Cr.prototype,"baseDiffuseModel",void 0);P([F("dielectricSpecularModel"),le("_markAllSubMeshesAsMiscDirty")],Cr.prototype,"dielectricSpecularModel",void 0);P([F("conductorSpecularModel"),le("_markAllSubMeshesAsMiscDirty")],Cr.prototype,"conductorSpecularModel",void 0)});var gO,an,j6=M(()=>{Gt();Vt();zt();Da();Ff();Na();Bn();gO=class extends Rr{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}},an=class n extends Wr{_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"PBRClearCoat",100,new gO,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=ge.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&&ce.ClearCoatTextureEnabled&&!this._texture.isReadyOrNotBlocking()||this._textureRoughness&&ce.ClearCoatTextureEnabled&&!this._textureRoughness.isReadyOrNotBlocking()||i.getCaps().standardDerivatives&&this._bumpTexture&&ce.ClearCoatBumpTextureEnabled&&!r&&!this._bumpTexture.isReady()||this._isTintEnabled&&this._tintTexture&&ce.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&&ce.ClearCoatTextureEnabled?ni(this._texture,e,"CLEARCOAT_TEXTURE"):e.CLEARCOAT_TEXTURE=!1,this._textureRoughness&&ce.ClearCoatTextureEnabled?ni(this._textureRoughness,e,"CLEARCOAT_TEXTURE_ROUGHNESS"):e.CLEARCOAT_TEXTURE_ROUGHNESS=!1,this._bumpTexture&&ce.ClearCoatBumpTextureEnabled?ni(this._bumpTexture,e,"CLEARCOAT_BUMP"):e.CLEARCOAT_BUMP=!1,e.CLEARCOAT_DEFAULTIOR=this._indexOfRefraction===n._DefaultIndexOfRefraction,this._isTintEnabled?(e.CLEARCOAT_TINT=!0,this._tintTexture&&ce.ClearCoatTintTextureEnabled?(ni(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)&&ce.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,(p=(m=this._textureRoughness)==null?void 0:m.coordinatesIndex)!=null?p:0,(g=(_=this._textureRoughness)==null?void 0:_.level)!=null?g:0),this._texture&&si(this._texture,e,"clearCoat"),this._textureRoughness&&!s.CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE&&si(this._textureRoughness,e,"clearCoatRoughness")),this._bumpTexture&&i.getCaps().standardDerivatives&&ce.ClearCoatTextureEnabled&&!o&&(e.updateFloat2("vClearCoatBumpInfos",this._bumpTexture.coordinatesIndex,this._bumpTexture.level),si(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&&ce.ClearCoatTintTextureEnabled&&(e.updateFloat2("vClearCoatTintInfos",this._tintTexture.coordinatesIndex,this._tintTexture.level),si(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&&ce.ClearCoatTextureEnabled&&e.setTexture("clearCoatSampler",this._texture),this._textureRoughness&&!s.CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE&&ce.ClearCoatTextureEnabled&&e.setTexture("clearCoatRoughnessSampler",this._textureRoughness),this._bumpTexture&&i.getCaps().standardDerivatives&&ce.ClearCoatBumpTextureEnabled&&!o&&e.setTexture("clearCoatBumpSampler",this._bumpTexture),this._isTintEnabled&&this._tintTexture&&ce.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"}]}}};an._DefaultIndexOfRefraction=1.5;P([F(),le("_markAllSubMeshesAsTexturesDirty")],an.prototype,"isEnabled",void 0);P([F()],an.prototype,"intensity",void 0);P([F()],an.prototype,"roughness",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],an.prototype,"indexOfRefraction",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],an.prototype,"texture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],an.prototype,"useRoughnessFromMainTexture",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],an.prototype,"textureRoughness",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],an.prototype,"remapF0OnInterfaceChange",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],an.prototype,"bumpTexture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],an.prototype,"isTintEnabled",void 0);P([vr()],an.prototype,"tintColor",void 0);P([F()],an.prototype,"tintColorAtDistance",void 0);P([F()],an.prototype,"tintThickness",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],an.prototype,"tintTexture",void 0)});var vO,Os,q6=M(()=>{Gt();Vt();Da();Ff();Na();Bn();vO=class extends Rr{constructor(){super(...arguments),this.IRIDESCENCE=!1,this.IRIDESCENCE_TEXTURE=!1,this.IRIDESCENCE_TEXTUREDIRECTUV=0,this.IRIDESCENCE_THICKNESS_TEXTURE=!1,this.IRIDESCENCE_THICKNESS_TEXTUREDIRECTUV=0}},Os=class n extends Wr{_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"PBRIridescence",110,new vO,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&&ce.IridescenceTextureEnabled&&!this._texture.isReadyOrNotBlocking()||this._thicknessTexture&&ce.IridescenceTextureEnabled&&!this._thicknessTexture.isReadyOrNotBlocking())):!0}prepareDefinesBeforeAttributes(e,t){this._isEnabled?(e.IRIDESCENCE=!0,e._areTexturesDirty&&t.texturesEnabled&&(this._texture&&ce.IridescenceTextureEnabled?ni(this._texture,e,"IRIDESCENCE_TEXTURE"):e.IRIDESCENCE_TEXTURE=!1,this._thicknessTexture&&ce.IridescenceTextureEnabled?ni(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)&&ce.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&&si(this._texture,e,"iridescence"),this._thicknessTexture&&si(this._thicknessTexture,e,"iridescenceThickness")),e.updateFloat4("vIridescenceParams",this.intensity,this.indexOfRefraction,this.minimumThickness,this.maximumThickness)),t.texturesEnabled&&(this._texture&&ce.IridescenceTextureEnabled&&e.setTexture("iridescenceSampler",this._texture),this._thicknessTexture&&ce.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"}]}}};Os._DefaultMinimumThickness=100;Os._DefaultMaximumThickness=400;Os._DefaultIndexOfRefraction=1.3;P([F(),le("_markAllSubMeshesAsTexturesDirty")],Os.prototype,"isEnabled",void 0);P([F()],Os.prototype,"intensity",void 0);P([F()],Os.prototype,"minimumThickness",void 0);P([F()],Os.prototype,"maximumThickness",void 0);P([F()],Os.prototype,"indexOfRefraction",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],Os.prototype,"texture",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],Os.prototype,"thicknessTexture",void 0)});var EO,bc,Z6=M(()=>{Gt();Vt();ki();Ge();Da();Ff();Na();Bn();EO=class extends Rr{constructor(){super(...arguments),this.ANISOTROPIC=!1,this.ANISOTROPIC_TEXTURE=!1,this.ANISOTROPIC_TEXTUREDIRECTUV=0,this.ANISOTROPIC_LEGACY=!1,this.MAINUV1=!1}},bc=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 EO,t),this._isEnabled=!1,this.isEnabled=!1,this.intensity=1,this.direction=new Fe(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&&ce.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&&ce.AnisotropicTextureEnabled?ni(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&&ce.AnisotropicTextureEnabled&&(e.updateFloat2("vAnisotropyInfos",this._texture.coordinatesIndex,this._texture.level),si(this._texture,e,"anisotropy")),e.updateFloat3("vAnisotropy",this.direction.x,this.direction.y,this.intensity)),t.texturesEnabled&&this._texture&&ce.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(),le("_markAllSubMeshesAsTexturesDirty")],bc.prototype,"isEnabled",void 0);P([F()],bc.prototype,"intensity",void 0);P([im()],bc.prototype,"direction",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],bc.prototype,"texture",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],bc.prototype,"legacy",void 0)});var SO,ta,Q6=M(()=>{Gt();Vt();zt();Da();Ff();Na();Bn();SO=class extends Rr{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}},ta=class extends Wr{_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"Sheen",120,new SO,t),this._isEnabled=!1,this.isEnabled=!1,this._linkSheenWithAlbedo=!1,this.linkSheenWithAlbedo=!1,this.intensity=1,this.color=ge.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&&ce.SheenTextureEnabled&&!this._texture.isReadyOrNotBlocking()||this._textureRoughness&&ce.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&&ce.SheenTextureEnabled?(ni(this._texture,e,"SHEEN_TEXTURE"),e.SHEEN_GAMMATEXTURE=this._texture.gammaSpace):e.SHEEN_TEXTURE=!1,this._textureRoughness&&ce.SheenTextureEnabled?ni(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)&&ce.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&&si(this._texture,e,"sheen"),this._textureRoughness&&!s.SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE&&si(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&&ce.SheenTextureEnabled&&e.setTexture("sheenSampler",this._texture),this._textureRoughness&&!s.SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE&&ce.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(),le("_markAllSubMeshesAsTexturesDirty")],ta.prototype,"isEnabled",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],ta.prototype,"linkSheenWithAlbedo",void 0);P([F()],ta.prototype,"intensity",void 0);P([vr()],ta.prototype,"color",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],ta.prototype,"texture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],ta.prototype,"useRoughnessFromMainTexture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],ta.prototype,"roughness",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],ta.prototype,"textureRoughness",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],ta.prototype,"albedoScaling",void 0)});var TO,Ai,$6=M(()=>{Gt();Vt();zt();Da();Ge();Ff();Na();Bn();TO=class extends Rr{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 TO,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=ge.White(),this.tintColorAtDistance=1,this.dispersion=0,this.diffusionDistance=ge.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&&ce.ThicknessTextureEnabled&&!this._thicknessTexture.isReadyOrNotBlocking()||this._refractionIntensityTexture&&ce.RefractionIntensityTextureEnabled&&!this._refractionIntensityTexture.isReadyOrNotBlocking()||this._translucencyColorTexture&&ce.TranslucencyColorTextureEnabled&&!this._translucencyColorTexture.isReadyOrNotBlocking()||this._translucencyIntensityTexture&&ce.TranslucencyIntensityTextureEnabled&&!this._translucencyIntensityTexture.isReadyOrNotBlocking())return!1;let i=this._getRefractionTexture(t);if(i&&ce.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&&ce.ThicknessTextureEnabled&&ni(this._thicknessTexture,e,"SS_THICKNESSANDMASK_TEXTURE"),this._refractionIntensityTexture&&ce.RefractionIntensityTextureEnabled&&ni(this._refractionIntensityTexture,e,"SS_REFRACTIONINTENSITY_TEXTURE"),this._translucencyIntensityTexture&&ce.TranslucencyIntensityTextureEnabled&&ni(this._translucencyIntensityTexture,e,"SS_TRANSLUCENCYINTENSITY_TEXTURE"),this._translucencyColorTexture&&ce.TranslucencyColorTextureEnabled&&(ni(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&&ce.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&&ce.ThicknessTextureEnabled&&(e.updateFloat2("vThicknessInfos",this._thicknessTexture.coordinatesIndex,this._thicknessTexture.level),si(this._thicknessTexture,e,"thickness")),this._refractionIntensityTexture&&ce.RefractionIntensityTextureEnabled&&s.SS_REFRACTIONINTENSITY_TEXTURE&&(e.updateFloat2("vRefractionIntensityInfos",this._refractionIntensityTexture.coordinatesIndex,this._refractionIntensityTexture.level),si(this._refractionIntensityTexture,e,"refractionIntensity")),this._translucencyColorTexture&&ce.TranslucencyColorTextureEnabled&&s.SS_TRANSLUCENCYCOLOR_TEXTURE&&(e.updateFloat2("vTranslucencyColorInfos",this._translucencyColorTexture.coordinatesIndex,this._translucencyColorTexture.level),si(this._translucencyColorTexture,e,"translucencyColor")),this._translucencyIntensityTexture&&ce.TranslucencyIntensityTextureEnabled&&s.SS_TRANSLUCENCYINTENSITY_TEXTURE&&(e.updateFloat2("vTranslucencyIntensityInfos",this._translucencyIntensityTexture.coordinatesIndex,this._translucencyIntensityTexture.level),si(this._translucencyIntensityTexture,e,"translucencyIntensity")),c&&ce.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&&ce.ThicknessTextureEnabled&&e.setTexture("thicknessSampler",this._thicknessTexture),this._refractionIntensityTexture&&ce.RefractionIntensityTextureEnabled&&s.SS_REFRACTIONINTENSITY_TEXTURE&&e.setTexture("refractionIntensitySampler",this._refractionIntensityTexture),this._translucencyIntensityTexture&&ce.TranslucencyIntensityTextureEnabled&&s.SS_TRANSLUCENCYINTENSITY_TEXTURE&&e.setTexture("translucencyIntensitySampler",this._translucencyIntensityTexture),this._translucencyColorTexture&&ce.TranslucencyColorTextureEnabled&&s.SS_TRANSLUCENCYCOLOR_TEXTURE&&e.setTexture("translucencyColorSampler",this._translucencyColorTexture),c&&ce.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){ce.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!!(ce.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(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"isRefractionEnabled",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"isTranslucencyEnabled",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"isDispersionEnabled",void 0);P([F(),le("_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(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"useAlbedoToTintRefraction",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"useAlbedoToTintTranslucency",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"thicknessTexture",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"refractionTexture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"indexOfRefraction",void 0);P([F()],Ai.prototype,"_volumeIndexOfRefraction",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"volumeIndexOfRefraction",null);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"invertRefractionY",void 0);P([F(),le("_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([vr()],Ai.prototype,"tintColor",void 0);P([F()],Ai.prototype,"tintColorAtDistance",void 0);P([F()],Ai.prototype,"dispersion",void 0);P([vr()],Ai.prototype,"diffusionDistance",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"useMaskFromThicknessTexture",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"refractionIntensityTexture",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"translucencyIntensityTexture",void 0);P([vr()],Ai.prototype,"translucencyColor",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"translucencyColorTexture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"useGltfStyleTextures",void 0);P([F()],Ai.prototype,"applyAlbedoAfterSubSurface",void 0);P([F()],Ai.prototype,"legacyTranslucency",void 0)});var J6,xde,AO=M(()=>{G();td();kg();J6="pbrUboDeclaration",xde=`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; +`;A.ShadersStore[_O]||(A.ShadersStore[_O]=Q6);Ude={name:_O,shader:Q6}});var e7={};tt(e7,{OpenPBRMaterial:()=>Ne,OpenPBRMaterialDefines:()=>rv});var lp,qR,ai,Ti,gO,vO,rv,EO,Ne,t7=M(()=>{Gt();Vt();HR();zt();sg();Vr();zi();Gn();xr();Na();vx();Lf();ll();Ig();Vn();ki();Ex();gx();Da();Pt();Sx();Tx();iY();Ge();Ax();bg();lo();Ci();GY();lp={effect:null,subMesh:null},qR=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?ee.Error(`Float property ${r.name} has an offset that is too large.`):ee.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}};qR._tmpArray=[0,0,0,0];ai=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}},gO=class extends jm(Km(br)){},vO=class extends tY(gO){},rv=class extends Xm(vO){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}},EO=class extends qm(dl){},Ne=class n extends EO{get geometryTangentAngle(){return Math.atan2(this.geometryTangent.y,this.geometryTangent.x)}set geometryTangentAngle(e){this.geometryTangent=new Fe(Math.cos(e),Math.sin(e))}get geometryCoatTangentAngle(){return Math.atan2(this.geometryCoatTangent.y,this.geometryCoatTangent.x)}set geometryCoatTangentAngle(e){this.geometryCoatTangent=new Fe(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(pe.BlackReadOnly)||this.subsurfaceWeight>0}get usePhysicalLightFalloff(){return this._lightFalloff===Ee.LIGHTFALLOFF_PHYSICAL}set usePhysicalLightFalloff(e){e!==this.usePhysicalLightFalloff&&(this._markAllSubMeshesAsTexturesDirty(),e?this._lightFalloff=Ee.LIGHTFALLOFF_PHYSICAL:this._lightFalloff=Ee.LIGHTFALLOFF_STANDARD)}get useGLTFLightFalloff(){return this._lightFalloff===Ee.LIGHTFALLOFF_GLTF}set useGLTFLightFalloff(e){e!==this.useGLTFLightFalloff&&(this._markAllSubMeshesAsTexturesDirty(),e?this._lightFalloff=Ee.LIGHTFALLOFF_GLTF:this._lightFalloff=Ee.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 ai("base_weight",1,"vBaseWeight",1),this._baseWeightTexture=new Ti("base_weight","baseWeight","BASE_WEIGHT"),this._baseColor=new ai("base_color",pe.White(),"vBaseColor",4),this._baseColorTexture=new Ti("base_color","baseColor","BASE_COLOR"),this._baseDiffuseRoughness=new ai("base_diffuse_roughness",0,"vBaseDiffuseRoughness",1),this._baseDiffuseRoughnessTexture=new Ti("base_diffuse_roughness","baseDiffuseRoughness","BASE_DIFFUSE_ROUGHNESS"),this._baseMetalness=new ai("base_metalness",0,"vReflectanceInfo",4,0),this._baseMetalnessTexture=new Ti("base_metalness","baseMetalness","BASE_METALNESS"),this._specularWeight=new ai("specular_weight",1,"vReflectanceInfo",4,3),this._specularWeightTexture=new Ti("specular_weight","specularWeight","SPECULAR_WEIGHT"),this._specularColor=new ai("specular_color",pe.White(),"vSpecularColor",4),this._specularColorTexture=new Ti("specular_color","specularColor","SPECULAR_COLOR"),this._specularRoughness=new ai("specular_roughness",.3,"vReflectanceInfo",4,1),this._specularRoughnessTexture=new Ti("specular_roughness","specularRoughness","SPECULAR_ROUGHNESS"),this._specularRoughnessAnisotropy=new ai("specular_roughness_anisotropy",0,"vSpecularAnisotropy",3,2),this._specularRoughnessAnisotropyTexture=new Ti("specular_roughness_anisotropy","specularRoughnessAnisotropy","SPECULAR_ROUGHNESS_ANISOTROPY"),this._specularIor=new ai("specular_ior",1.5,"vReflectanceInfo",4,2),this._transmissionWeight=new ai("transmission_weight",0,"vTransmissionWeight",1),this._transmissionWeightTexture=new Ti("transmission_weight","transmissionWeight","TRANSMISSION_WEIGHT"),this._transmissionColor=new ai("transmission_color",pe.White(),"vTransmissionColor",3,0),this._transmissionColorTexture=new Ti("transmission_color","transmissionColor","TRANSMISSION_COLOR"),this._transmissionDepth=new ai("transmission_depth",0,"vTransmissionDepth",1,0),this._transmissionDepthTexture=new Ti("transmission_depth","transmissionDepth","TRANSMISSION_DEPTH"),this._transmissionScatter=new ai("transmission_scatter",pe.Black(),"vTransmissionScatter",3,0),this._transmissionScatterTexture=new Ti("transmission_scatter","transmissionScatter","TRANSMISSION_SCATTER"),this._transmissionScatterAnisotropy=new ai("transmission_scatter_anisotropy",0,"vTransmissionScatterAnisotropy",1,0),this._transmissionDispersionScale=new ai("transmission_dispersion_scale",0,"vTransmissionDispersionScale",1,0),this._transmissionDispersionScaleTexture=new Ti("transmission_dispersion_scale","transmissionDispersionScale","TRANSMISSION_DISPERSION_SCALE"),this._transmissionDispersionAbbeNumber=new ai("transmission_dispersion_abbe_number",20,"vTransmissionDispersionAbbeNumber",1,0),this._subsurfaceWeight=new ai("subsurface_weight",0,"vSubsurfaceWeight",1,0,"SUBSURFACE_SLAB"),this._subsurfaceWeightTexture=new Ti("subsurface_weight","subsurfaceWeight","SUBSURFACE_WEIGHT"),this._subsurfaceColor=new ai("subsurface_color",new pe(.8,.8,.8),"vSubsurfaceColor",3,0,"SUBSURFACE_SLAB"),this._subsurfaceColorTexture=new Ti("subsurface_color","subsurfaceColor","SUBSURFACE_COLOR"),this._subsurfaceRadius=new ai("subsurface_radius",.1,"vSubsurfaceRadius",1,0,"SUBSURFACE_SLAB"),this._subsurfaceRadiusScale=new ai("subsurface_radius_scale",new pe(1,.5,.25),"vSubsurfaceRadiusScale",3,0,"SUBSURFACE_SLAB"),this._subsurfaceRadiusScaleTexture=new Ti("subsurface_radius_scale","subsurfaceRadiusScale","SUBSURFACE_RADIUS_SCALE"),this._subsurfaceScatterAnisotropy=new ai("subsurface_scatter_anisotropy",0,"vSubsurfaceScatterAnisotropy",1,0,"SUBSURFACE_SLAB"),this._coatWeight=new ai("coat_weight",0,"vCoatWeight",1,0),this._coatWeightTexture=new Ti("coat_weight","coatWeight","COAT_WEIGHT"),this._coatColor=new ai("coat_color",pe.White(),"vCoatColor",3,0),this._coatColorTexture=new Ti("coat_color","coatColor","COAT_COLOR"),this._coatRoughness=new ai("coat_roughness",0,"vCoatRoughness",1,0),this._coatRoughnessTexture=new Ti("coat_roughness","coatRoughness","COAT_ROUGHNESS"),this._coatRoughnessAnisotropy=new ai("coat_roughness_anisotropy",0,"vCoatRoughnessAnisotropy",1),this._coatRoughnessAnisotropyTexture=new Ti("coat_roughness_anisotropy","coatRoughnessAnisotropy","COAT_ROUGHNESS_ANISOTROPY"),this._coatIor=new ai("coat_ior",1.5,"vCoatIor",1,0),this._coatDarkening=new ai("coat_darkening",1,"vCoatDarkening",1,0),this._coatDarkeningTexture=new Ti("coat_darkening","coatDarkening","COAT_DARKENING"),this.useCoatRoughnessFromWeightTexture=!1,this._fuzzWeight=new ai("fuzz_weight",0,"vFuzzWeight",1,0),this._fuzzWeightTexture=new Ti("fuzz_weight","fuzzWeight","FUZZ_WEIGHT"),this._fuzzColor=new ai("fuzz_color",pe.White(),"vFuzzColor",3,0),this._fuzzColorTexture=new Ti("fuzz_color","fuzzColor","FUZZ_COLOR"),this._fuzzRoughness=new ai("fuzz_roughness",.5,"vFuzzRoughness",1,0),this._fuzzRoughnessTexture=new Ti("fuzz_roughness","fuzzRoughness","FUZZ_ROUGHNESS"),this._geometryThinWalled=new ai("geometry_thin_walled",0,"vGeometryThinWalled",1,0),this._geometryNormalTexture=new Ti("geometry_normal","geometryNormal","GEOMETRY_NORMAL"),this._geometryTangent=new ai("geometry_tangent",new Fe(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 ai("geometry_coat_tangent",new Fe(1,0),"vGeometryCoatTangent",2,0),this._geometryCoatTangentTexture=new Ti("geometry_coat_tangent","geometryCoatTangent","GEOMETRY_COAT_TANGENT"),this._geometryOpacity=new ai("geometry_opacity",1,"vBaseColor",4,3),this._geometryOpacityTexture=new Ti("geometry_opacity","geometryOpacity","GEOMETRY_OPACITY"),this._geometryThickness=new ai("geometry_thickness",0,"vGeometryThickness",1,0),this._geometryThicknessTexture=new Ti("geometry_thickness","geometryThickness","GEOMETRY_THICKNESS"),this._emissionLuminance=new ai("emission_luminance",1,"vLightingIntensity",4,1),this._emissionColor=new ai("emission_color",pe.Black(),"vEmissionColor",3),this._emissionColorTexture=new Ti("emission_color","emissionColor","EMISSION_COLOR"),this._thinFilmWeight=new ai("thin_film_weight",0,"vThinFilmWeight",1,0),this._thinFilmWeightTexture=new Ti("thin_film_weight","thinFilmWeight","THIN_FILM_WEIGHT"),this._thinFilmThickness=new ai("thin_film_thickness",.5,"vThinFilmThickness",2,0),this._thinFilmThicknessMin=new ai("thin_film_thickness_min",0,"vThinFilmThickness",2,1),this._thinFilmThicknessTexture=new Ti("thin_film_thickness","thinFilmThickness","THIN_FILM_THICKNESS"),this._thinFilmIor=new ai("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=Ee.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 Ui(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=Ee.MATERIAL_OPAQUE,this.getScene()&&!((s=this.getScene())!=null&&s.getEngine().isWebGPU)&&this.getScene().getEngine().webGLVersion<2&&ee.Error("OpenPBRMaterial: WebGL 2.0 or above is required for this material."),n._noiseTextures[this.getScene().uniqueId]||(n._noiseTextures[this.getScene().uniqueId]=new ge(_e.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(),ce.ReflectionTextureEnabled&&this._radianceTexture&&this._radianceTexture.isRenderTarget&&this._renderTargets.push(this._radianceTexture),ce.RefractionTextureEnabled&&this._backgroundRefractionTexture&&this._backgroundRefractionTexture.isRenderTarget&&this._renderTargets.push(this._backgroundRefractionTexture),this._eventInfo.renderTargets=this._renderTargets,this._callbackPluginEventFillRenderTargetTextures(this._eventInfo),this._renderTargets),this._environmentBRDFTexture=eY(this.getScene()),this._environmentFuzzBRDFTexture=AD(this.getScene()),this.prePassConfiguration=new Ns,this._propertyList={};for(let a of Object.getOwnPropertyNames(this)){let o=this[a];o instanceof ai&&(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?ee.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 qR(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 ce.ReflectionTextureEnabled&&this._radianceTexture&&this._radianceTexture.isRenderTarget||ce.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!==Ee.MATERIAL_OPAQUE&&!this.geometryOpacityTexture}_hasAlphaChannel(){return this.baseColorTexture!=null&&this.baseColorTexture.hasAlpha&&this._useAlphaFromBaseColorTexture||this.geometryOpacityTexture!=null}clone(e,t=!0,i=""){let r=it.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=it.Parse(()=>new n(e.name,t),e,t,i);return e.stencil&&r.stencil.parse(e.stencil,t,i),Ee._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 rv({...this._eventInfo.defineNames||{},...this._samplerDefines||{}}),o=this._prepareEffect(e,e,a,void 0,void 0,r.useInstances,r.clipPlane);this._onEffectCreatedObservable&&(lp.effect=o,lp.subMesh=null,this._onEffectCreatedObservable.notifyObservers(lp)),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 rv({...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 p=this._samplersList[m];if(p.value&&!p.value.isReadyOrNotBlocking())return!1}let u=this._getRadianceTexture();if(u&&ce.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&&ce.ReflectionTextureEnabled&&!this._environmentBRDFTexture.isReady()||this._environmentFuzzBRDFTexture&&ce.ReflectionTextureEnabled&&!this._environmentFuzzBRDFTexture.isReady()||this._backgroundRefractionTexture&&ce.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),zn.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);Ps(t,this._activeEffect,this.prePassConfiguration),this._vertexPullingMetadata&&Of(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 p=this._samplersList[m];p.value&&(f.updateFloat2(p.samplerInfoName,p.value.coordinatesIndex,p.value.level),si(p.value,f,p.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)),Sm(r,s,f,pe.White(),d,this.realTimeFiltering,!0,!0,!0,!0,!0)}this.pointsCloud&&f.updateFloat("pointSize",this.pointSize);let u=this._uniformsArray;for(let m=0,p=u.length;m0&&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 Hn,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=bm(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),xm(d,e,i,f),Rm(d,i),$h(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 p=["environmentBrdfSampler","boneSampler","morphTargets","oitDepthSampler","oitFrontColorSampler","areaLightsLTC1Sampler","areaLightsLTC2Sampler"];i.FUZZENVIRONMENTBRDF&&p.push("environmentFuzzBrdfSampler"),i.REFRACTED_BACKGROUND&&p.push("backgroundRefractionSampler"),(i.ANISOTROPIC||i.FUZZ||i.REFRACTED_BACKGROUND||i.USE_IRRADIANCE_TEXTURE_FOR_SCATTERING)&&p.push("blueNoiseSampler"),i.USE_IRRADIANCE_TEXTURE_FOR_SCATTERING&&(p.push("sceneIrradianceSampler"),p.push("sceneDepthSampler"));for(let E in this._samplersList){let S=this._samplersList[E];p.push(S.samplerName),m.push(S.samplerInfoName),m.push(S.samplerMatrixName)}Rf(m,p,!0);let _=["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=p,this._eventInfo.uniformBuffersNames=_,this._eventInfo.customCode=void 0,this._eventInfo.mesh=e,this._eventInfo.indexParameters=g,this._callbackPluginEventGeneric(128,this._eventInfo),zn.AddUniformsAndSamplers(m,p),Ns.AddUniforms(m),Ns.AddSamplers(p),Fn(m),this._useVertexPulling){let E=t==null?void 0:t.geometry;E&&(this._vertexPullingMetadata=Df(E),this._vertexPullingMetadata&&this._vertexPullingMetadata.forEach((S,R)=>{m.push(`vp_${R}_info`)}))}else this._vertexPullingMetadata=null;kt&&(kt.PrepareUniforms(m,i),kt.PrepareSamplers(p,i)),Nm({uniformsNames:m,uniformBuffersNames:_,samplers:p,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(),T=c.createEffect(u,{attributes:d,uniformsNames:m,uniformBuffersNames:_,samplers:p,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(()=>(jY(),KY)),Promise.resolve().then(()=>(X8(),z8))]):await Promise.all([Promise.resolve().then(()=>(t6(),e6)),Promise.resolve().then(()=>(J6(),$6))]),this._shadersLoaded=!0}},c);return this._eventInfo.customCode=void 0,T}_prepareDefines(e,t,i,r=null,s=null){var h;let a=t.hasThinInstances,o=this.getScene(),l=o.getEngine();Cm(o,e,i,!0,this._maxSimultaneousLights,this._disableLighting),i._needNormals=!0,Lm(o,i);let c=this.needAlphaBlendingForMesh(e)&&this.getScene().useOrderIndependentTransparency;if(Om(o,i,this.canRenderToMRT&&!c),Dm(o,i,c),zn.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 p=this._samplersList[m];p.value?(ni(p.value,i,p.textureDefine),i[p.textureDefine+"_GAMMA"]=p.value.gammaSpace):i[p.textureDefine]=!1}let d=this._getRadianceTexture(),u=this._forceIrradianceInFragment||this.realTimeFiltering||this._twoSidedLighting||l.getCaps().maxVaryingVectors<=8||this._baseDiffuseRoughnessTexture!=null;if(xf(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&&ce.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&&ce.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&&ce.RefractionTextureEnabled,i.REFRACTION_HIGH_QUALITY_BLUR=this._refractionHighQualityBlur,i.REFRACTED_LIGHTS=!0;let m=this._getRadianceTexture();m?(i.REFRACTED_ENVIRONMENT=ce.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===Ee.LIGHTFALLOFF_STANDARD?(i.USEPHYSICALLIGHTFALLOFF=!1,i.USEGLTFLIGHTFALLOFF=!1):this._lightFalloff===Ee.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]&&ce.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(ss.IRRADIANCE_TEXTURE_TYPE);this.sssIrradianceTexture=o.geometryBufferRenderer.getGBuffer().textures[u],d=!0}if(!this.sssDepthTexture&&o.geometryBufferRenderer){let u=o.geometryBufferRenderer.getTextureIndex(ss.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&&ce.ReflectionTextureEnabled,i.GEOMETRY_THIN_WALLED=this.geometryThinWalled!=0,i.FUZZ?(e.isVerticesDataPresent(L.TangentKind)||(i._needUVs=!0,i.MAINUV1=!0),this._environmentFuzzBRDFTexture=AD(this.getScene()),i.FUZZ_IBL_SAMPLES=this.fuzzSampleNumber):(this._environmentFuzzBRDFTexture=null,i.FUZZENVIRONMENTBRDF=!1,i.FUZZ_IBL_SAMPLES=0),i._areMiscDirty&&(Im(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),ym(o,l,this,i,!!r,s,a),this._eventInfo.defines=i,this._eventInfo.mesh=e,this._callbackPluginEventPrepareDefinesBeforeAttributes(this._eventInfo),Pm(e,i,!0,!0,!0,this._transparencyMode!==Ee.MATERIAL_OPAQUE),this._callbackPluginEventPrepareDefines(this._eventInfo)}};Ne.SSS_QUALITY_LOW=0;Ne.SSS_QUALITY_MEDIUM=1;Ne.SSS_QUALITY_HIGH=2;Ne._noiseTextures={};Ne.ForceGLSL=!1;P([ut("_markAllSubMeshesAsTexturesDirty","baseWeight")],Ne.prototype,"_baseWeight",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","baseWeightTexture")],Ne.prototype,"_baseWeightTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","baseColor")],Ne.prototype,"_baseColor",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","baseColorTexture")],Ne.prototype,"_baseColorTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","baseDiffuseRoughness")],Ne.prototype,"_baseDiffuseRoughness",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","baseDiffuseRoughnessTexture")],Ne.prototype,"_baseDiffuseRoughnessTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","baseMetalness")],Ne.prototype,"_baseMetalness",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","baseMetalnessTexture")],Ne.prototype,"_baseMetalnessTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","specularWeight")],Ne.prototype,"_specularWeight",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","specularWeightTexture")],Ne.prototype,"_specularWeightTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","specularColor")],Ne.prototype,"_specularColor",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","specularColorTexture")],Ne.prototype,"_specularColorTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","specularRoughness")],Ne.prototype,"_specularRoughness",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","specularRoughnessTexture")],Ne.prototype,"_specularRoughnessTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","specularRoughnessAnisotropy")],Ne.prototype,"_specularRoughnessAnisotropy",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","specularRoughnessAnisotropyTexture")],Ne.prototype,"_specularRoughnessAnisotropyTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","specularIor")],Ne.prototype,"_specularIor",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","transmissionWeight")],Ne.prototype,"_transmissionWeight",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","transmissionWeightTexture")],Ne.prototype,"_transmissionWeightTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","transmissionColor")],Ne.prototype,"_transmissionColor",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","transmissionColorTexture")],Ne.prototype,"_transmissionColorTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","transmissionDepth")],Ne.prototype,"_transmissionDepth",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","transmissionDepthTexture")],Ne.prototype,"_transmissionDepthTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","transmissionScatter")],Ne.prototype,"_transmissionScatter",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","transmissionScatterTexture")],Ne.prototype,"_transmissionScatterTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","transmissionScatterAnisotropy")],Ne.prototype,"_transmissionScatterAnisotropy",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","transmissionDispersionScale")],Ne.prototype,"_transmissionDispersionScale",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","transmissionDispersionScaleTexture")],Ne.prototype,"_transmissionDispersionScaleTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","transmissionDispersionAbbeNumber")],Ne.prototype,"_transmissionDispersionAbbeNumber",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","subsurfaceWeight")],Ne.prototype,"_subsurfaceWeight",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","subsurfaceWeightTexture")],Ne.prototype,"_subsurfaceWeightTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","subsurfaceColor")],Ne.prototype,"_subsurfaceColor",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","subsurfaceColorTexture")],Ne.prototype,"_subsurfaceColorTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","subsurfaceRadius")],Ne.prototype,"_subsurfaceRadius",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","subsurfaceRadiusScale")],Ne.prototype,"_subsurfaceRadiusScale",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","subsurfaceRadiusScaleTexture")],Ne.prototype,"_subsurfaceRadiusScaleTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","subsurfaceScatterAnisotropy")],Ne.prototype,"_subsurfaceScatterAnisotropy",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","coatWeight")],Ne.prototype,"_coatWeight",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","coatWeightTexture")],Ne.prototype,"_coatWeightTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","coatColor")],Ne.prototype,"_coatColor",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","coatColorTexture")],Ne.prototype,"_coatColorTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","coatRoughness")],Ne.prototype,"_coatRoughness",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","coatRoughnessTexture")],Ne.prototype,"_coatRoughnessTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","coatRoughnessAnisotropy")],Ne.prototype,"_coatRoughnessAnisotropy",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","coatRoughnessAnisotropyTexture")],Ne.prototype,"_coatRoughnessAnisotropyTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","coatIor")],Ne.prototype,"_coatIor",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","coatDarkening")],Ne.prototype,"_coatDarkening",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","coatDarkeningTexture")],Ne.prototype,"_coatDarkeningTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","fuzzWeight")],Ne.prototype,"_fuzzWeight",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","fuzzWeightTexture")],Ne.prototype,"_fuzzWeightTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","fuzzColor")],Ne.prototype,"_fuzzColor",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","fuzzColorTexture")],Ne.prototype,"_fuzzColorTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","fuzzRoughness")],Ne.prototype,"_fuzzRoughness",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","fuzzRoughnessTexture")],Ne.prototype,"_fuzzRoughnessTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","geometryThinWalled")],Ne.prototype,"_geometryThinWalled",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","geometryNormalTexture")],Ne.prototype,"_geometryNormalTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","geometryTangent")],Ne.prototype,"_geometryTangent",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","geometryTangentTexture")],Ne.prototype,"_geometryTangentTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","geometryCoatNormalTexture")],Ne.prototype,"_geometryCoatNormalTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","geometryCoatTangent")],Ne.prototype,"_geometryCoatTangent",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","geometryCoatTangentTexture")],Ne.prototype,"_geometryCoatTangentTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","geometryOpacity")],Ne.prototype,"_geometryOpacity",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","geometryOpacityTexture")],Ne.prototype,"_geometryOpacityTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","geometryThickness")],Ne.prototype,"_geometryThickness",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","geometryThicknessTexture")],Ne.prototype,"_geometryThicknessTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","emissionLuminance")],Ne.prototype,"_emissionLuminance",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","emissionColor")],Ne.prototype,"_emissionColor",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","emissionColorTexture")],Ne.prototype,"_emissionColorTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","thinFilmWeight")],Ne.prototype,"_thinFilmWeight",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","thinFilmWeightTexture")],Ne.prototype,"_thinFilmWeightTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","thinFilmThickness")],Ne.prototype,"_thinFilmThickness",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","thinFilmThicknessMin")],Ne.prototype,"_thinFilmThicknessMin",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","thinFilmThicknessTexture")],Ne.prototype,"_thinFilmThicknessTexture",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","thinFilmIor")],Ne.prototype,"_thinFilmIor",void 0);P([ut("_markAllSubMeshesAsTexturesDirty","ambientOcclusionTexture")],Ne.prototype,"_ambientOcclusionTexture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"directIntensity",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"environmentIntensity",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"useSpecularWeightFromTextureAlpha",void 0);P([F(),le("_markAllSubMeshesAsTexturesAndMiscDirty")],Ne.prototype,"forceAlphaTest",void 0);P([F(),le("_markAllSubMeshesAsTexturesAndMiscDirty")],Ne.prototype,"alphaCutOff",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"useAmbientOcclusionFromMetallicTextureRed",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"useAmbientInGrayScale",void 0);P([F()],Ne.prototype,"usePhysicalLightFalloff",null);P([F()],Ne.prototype,"useGLTFLightFalloff",null);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"useObjectSpaceNormalMap",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"useParallax",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"useParallaxOcclusion",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"parallaxScaleBias",void 0);P([F(),le("_markAllSubMeshesAsLightsDirty")],Ne.prototype,"disableLighting",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"forceIrradianceInFragment",void 0);P([F(),le("_markAllSubMeshesAsLightsDirty")],Ne.prototype,"maxSimultaneousLights",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"invertNormalMapX",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"invertNormalMapY",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"twoSidedLighting",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"useAlphaFresnel",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"useLinearAlphaFresnel",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"environmentBRDFTexture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"forceNormalForward",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"enableSpecularAntiAliasing",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"useHorizonOcclusion",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ne.prototype,"useRadianceOcclusion",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],Ne.prototype,"unlit",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],Ne.prototype,"applyDecalMapAfterDetailMap",void 0);P([le("_markAllSubMeshesAsMiscDirty")],Ne.prototype,"debugMode",void 0);P([F()],Ne.prototype,"transparencyMode",null);Ft("BABYLON.OpenPBRMaterial",Ne)});var i7={};tt(i7,{OpenPBRMaterialLoadingAdapter:()=>SO});var SO,r7=M(()=>{zt();SO=class{constructor(e){this._diffuseTransmissionTint=pe.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(pe.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(pe.White())||this._diffuseTransmissionTintTexture)&&(this._material.geometryThinWalled?(this.subsurfaceColor=this._diffuseTransmissionTint,this.subsurfaceColorTexture=this._diffuseTransmissionTintTexture):this._material.coatWeight==0&&(!this.baseColor.equals(pe.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(pe.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 TO,Pr,n7=M(()=>{Gt();Vt();Na();Ff();TO=class extends br{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}},Pr=class n extends Wr{_markAllSubMeshesAsMiscDirty(){this._internalMarkAllSubMeshesAsMiscDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"PBRBRDF",90,new TO,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"}};Pr.DEFAULT_USE_ENERGY_CONSERVATION=!0;Pr.DEFAULT_USE_SMITH_VISIBILITY_HEIGHT_CORRELATED=!0;Pr.DEFAULT_USE_SPHERICAL_HARMONICS=!0;Pr.DEFAULT_USE_SPECULAR_GLOSSINESS_INPUT_ENERGY_CONSERVATION=!0;Pr.DEFAULT_MIX_IBL_RADIANCE_WITH_IRRADIANCE=!0;Pr.DEFAULT_USE_LEGACY_SPECULAR_ENERGY_CONSERVATION=!0;Pr.DEFAULT_DIFFUSE_MODEL=0;Pr.DEFAULT_DIELECTRIC_SPECULAR_MODEL=0;Pr.DEFAULT_CONDUCTOR_SPECULAR_MODEL=0;P([F(),le("_markAllSubMeshesAsMiscDirty")],Pr.prototype,"useEnergyConservation",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],Pr.prototype,"useSmithVisibilityHeightCorrelated",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],Pr.prototype,"useSphericalHarmonics",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],Pr.prototype,"useSpecularGlossinessInputEnergyConservation",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],Pr.prototype,"mixIblRadianceWithIrradiance",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],Pr.prototype,"useLegacySpecularEnergyConservation",void 0);P([F("baseDiffuseModel"),le("_markAllSubMeshesAsMiscDirty")],Pr.prototype,"baseDiffuseModel",void 0);P([F("dielectricSpecularModel"),le("_markAllSubMeshesAsMiscDirty")],Pr.prototype,"dielectricSpecularModel",void 0);P([F("conductorSpecularModel"),le("_markAllSubMeshesAsMiscDirty")],Pr.prototype,"conductorSpecularModel",void 0)});var AO,an,s7=M(()=>{Gt();Vt();zt();Da();Ff();Na();Vn();AO=class extends br{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}},an=class n extends Wr{_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"PBRClearCoat",100,new AO,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=pe.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&&ce.ClearCoatTextureEnabled&&!this._texture.isReadyOrNotBlocking()||this._textureRoughness&&ce.ClearCoatTextureEnabled&&!this._textureRoughness.isReadyOrNotBlocking()||i.getCaps().standardDerivatives&&this._bumpTexture&&ce.ClearCoatBumpTextureEnabled&&!r&&!this._bumpTexture.isReady()||this._isTintEnabled&&this._tintTexture&&ce.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&&ce.ClearCoatTextureEnabled?ni(this._texture,e,"CLEARCOAT_TEXTURE"):e.CLEARCOAT_TEXTURE=!1,this._textureRoughness&&ce.ClearCoatTextureEnabled?ni(this._textureRoughness,e,"CLEARCOAT_TEXTURE_ROUGHNESS"):e.CLEARCOAT_TEXTURE_ROUGHNESS=!1,this._bumpTexture&&ce.ClearCoatBumpTextureEnabled?ni(this._bumpTexture,e,"CLEARCOAT_BUMP"):e.CLEARCOAT_BUMP=!1,e.CLEARCOAT_DEFAULTIOR=this._indexOfRefraction===n._DefaultIndexOfRefraction,this._isTintEnabled?(e.CLEARCOAT_TINT=!0,this._tintTexture&&ce.ClearCoatTintTextureEnabled?(ni(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)&&ce.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,(p=(m=this._textureRoughness)==null?void 0:m.coordinatesIndex)!=null?p:0,(g=(_=this._textureRoughness)==null?void 0:_.level)!=null?g:0),this._texture&&si(this._texture,e,"clearCoat"),this._textureRoughness&&!s.CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE&&si(this._textureRoughness,e,"clearCoatRoughness")),this._bumpTexture&&i.getCaps().standardDerivatives&&ce.ClearCoatTextureEnabled&&!o&&(e.updateFloat2("vClearCoatBumpInfos",this._bumpTexture.coordinatesIndex,this._bumpTexture.level),si(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&&ce.ClearCoatTintTextureEnabled&&(e.updateFloat2("vClearCoatTintInfos",this._tintTexture.coordinatesIndex,this._tintTexture.level),si(this._tintTexture,e,"clearCoatTint")),e.updateFloat2("vClearCoatParams",this.intensity,this.roughness);let v=1-this._indexOfRefraction,x=1+this._indexOfRefraction,T=Math.pow(-v/x,2),E=1/this._indexOfRefraction;e.updateFloat4("vClearCoatRefractionParams",T,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&&ce.ClearCoatTextureEnabled&&e.setTexture("clearCoatSampler",this._texture),this._textureRoughness&&!s.CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE&&ce.ClearCoatTextureEnabled&&e.setTexture("clearCoatRoughnessSampler",this._textureRoughness),this._bumpTexture&&i.getCaps().standardDerivatives&&ce.ClearCoatBumpTextureEnabled&&!o&&e.setTexture("clearCoatBumpSampler",this._bumpTexture),this._isTintEnabled&&this._tintTexture&&ce.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"}]}}};an._DefaultIndexOfRefraction=1.5;P([F(),le("_markAllSubMeshesAsTexturesDirty")],an.prototype,"isEnabled",void 0);P([F()],an.prototype,"intensity",void 0);P([F()],an.prototype,"roughness",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],an.prototype,"indexOfRefraction",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],an.prototype,"texture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],an.prototype,"useRoughnessFromMainTexture",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],an.prototype,"textureRoughness",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],an.prototype,"remapF0OnInterfaceChange",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],an.prototype,"bumpTexture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],an.prototype,"isTintEnabled",void 0);P([vr()],an.prototype,"tintColor",void 0);P([F()],an.prototype,"tintColorAtDistance",void 0);P([F()],an.prototype,"tintThickness",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],an.prototype,"tintTexture",void 0)});var xO,Fs,a7=M(()=>{Gt();Vt();Da();Ff();Na();Vn();xO=class extends br{constructor(){super(...arguments),this.IRIDESCENCE=!1,this.IRIDESCENCE_TEXTURE=!1,this.IRIDESCENCE_TEXTUREDIRECTUV=0,this.IRIDESCENCE_THICKNESS_TEXTURE=!1,this.IRIDESCENCE_THICKNESS_TEXTUREDIRECTUV=0}},Fs=class n extends Wr{_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"PBRIridescence",110,new xO,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&&ce.IridescenceTextureEnabled&&!this._texture.isReadyOrNotBlocking()||this._thicknessTexture&&ce.IridescenceTextureEnabled&&!this._thicknessTexture.isReadyOrNotBlocking())):!0}prepareDefinesBeforeAttributes(e,t){this._isEnabled?(e.IRIDESCENCE=!0,e._areTexturesDirty&&t.texturesEnabled&&(this._texture&&ce.IridescenceTextureEnabled?ni(this._texture,e,"IRIDESCENCE_TEXTURE"):e.IRIDESCENCE_TEXTURE=!1,this._thicknessTexture&&ce.IridescenceTextureEnabled?ni(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)&&ce.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&&si(this._texture,e,"iridescence"),this._thicknessTexture&&si(this._thicknessTexture,e,"iridescenceThickness")),e.updateFloat4("vIridescenceParams",this.intensity,this.indexOfRefraction,this.minimumThickness,this.maximumThickness)),t.texturesEnabled&&(this._texture&&ce.IridescenceTextureEnabled&&e.setTexture("iridescenceSampler",this._texture),this._thicknessTexture&&ce.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"}]}}};Fs._DefaultMinimumThickness=100;Fs._DefaultMaximumThickness=400;Fs._DefaultIndexOfRefraction=1.3;P([F(),le("_markAllSubMeshesAsTexturesDirty")],Fs.prototype,"isEnabled",void 0);P([F()],Fs.prototype,"intensity",void 0);P([F()],Fs.prototype,"minimumThickness",void 0);P([F()],Fs.prototype,"maximumThickness",void 0);P([F()],Fs.prototype,"indexOfRefraction",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],Fs.prototype,"texture",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],Fs.prototype,"thicknessTexture",void 0)});var RO,bc,o7=M(()=>{Gt();Vt();ki();Ge();Da();Ff();Na();Vn();RO=class extends br{constructor(){super(...arguments),this.ANISOTROPIC=!1,this.ANISOTROPIC_TEXTURE=!1,this.ANISOTROPIC_TEXTUREDIRECTUV=0,this.ANISOTROPIC_LEGACY=!1,this.MAINUV1=!1}},bc=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 RO,t),this._isEnabled=!1,this.isEnabled=!1,this.intensity=1,this.direction=new Fe(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&&ce.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&&ce.AnisotropicTextureEnabled?ni(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&&ce.AnisotropicTextureEnabled&&(e.updateFloat2("vAnisotropyInfos",this._texture.coordinatesIndex,this._texture.level),si(this._texture,e,"anisotropy")),e.updateFloat3("vAnisotropy",this.direction.x,this.direction.y,this.intensity)),t.texturesEnabled&&this._texture&&ce.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(),le("_markAllSubMeshesAsTexturesDirty")],bc.prototype,"isEnabled",void 0);P([F()],bc.prototype,"intensity",void 0);P([im()],bc.prototype,"direction",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],bc.prototype,"texture",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],bc.prototype,"legacy",void 0)});var bO,ia,l7=M(()=>{Gt();Vt();zt();Da();Ff();Na();Vn();bO=class extends br{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}},ia=class extends Wr{_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"Sheen",120,new bO,t),this._isEnabled=!1,this.isEnabled=!1,this._linkSheenWithAlbedo=!1,this.linkSheenWithAlbedo=!1,this.intensity=1,this.color=pe.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&&ce.SheenTextureEnabled&&!this._texture.isReadyOrNotBlocking()||this._textureRoughness&&ce.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&&ce.SheenTextureEnabled?(ni(this._texture,e,"SHEEN_TEXTURE"),e.SHEEN_GAMMATEXTURE=this._texture.gammaSpace):e.SHEEN_TEXTURE=!1,this._textureRoughness&&ce.SheenTextureEnabled?ni(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)&&ce.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&&si(this._texture,e,"sheen"),this._textureRoughness&&!s.SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE&&si(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&&ce.SheenTextureEnabled&&e.setTexture("sheenSampler",this._texture),this._textureRoughness&&!s.SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE&&ce.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(),le("_markAllSubMeshesAsTexturesDirty")],ia.prototype,"isEnabled",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],ia.prototype,"linkSheenWithAlbedo",void 0);P([F()],ia.prototype,"intensity",void 0);P([vr()],ia.prototype,"color",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],ia.prototype,"texture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],ia.prototype,"useRoughnessFromMainTexture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],ia.prototype,"roughness",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],ia.prototype,"textureRoughness",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],ia.prototype,"albedoScaling",void 0)});var IO,Ai,c7=M(()=>{Gt();Vt();zt();Da();Ge();Ff();Na();Vn();IO=class extends br{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 IO,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=pe.White(),this.tintColorAtDistance=1,this.dispersion=0,this.diffusionDistance=pe.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&&ce.ThicknessTextureEnabled&&!this._thicknessTexture.isReadyOrNotBlocking()||this._refractionIntensityTexture&&ce.RefractionIntensityTextureEnabled&&!this._refractionIntensityTexture.isReadyOrNotBlocking()||this._translucencyColorTexture&&ce.TranslucencyColorTextureEnabled&&!this._translucencyColorTexture.isReadyOrNotBlocking()||this._translucencyIntensityTexture&&ce.TranslucencyIntensityTextureEnabled&&!this._translucencyIntensityTexture.isReadyOrNotBlocking())return!1;let i=this._getRefractionTexture(t);if(i&&ce.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&&ce.ThicknessTextureEnabled&&ni(this._thicknessTexture,e,"SS_THICKNESSANDMASK_TEXTURE"),this._refractionIntensityTexture&&ce.RefractionIntensityTextureEnabled&&ni(this._refractionIntensityTexture,e,"SS_REFRACTIONINTENSITY_TEXTURE"),this._translucencyIntensityTexture&&ce.TranslucencyIntensityTextureEnabled&&ni(this._translucencyIntensityTexture,e,"SS_TRANSLUCENCYINTENSITY_TEXTURE"),this._translucencyColorTexture&&ce.TranslucencyColorTextureEnabled&&(ni(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&&ce.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&&ce.ThicknessTextureEnabled&&(e.updateFloat2("vThicknessInfos",this._thicknessTexture.coordinatesIndex,this._thicknessTexture.level),si(this._thicknessTexture,e,"thickness")),this._refractionIntensityTexture&&ce.RefractionIntensityTextureEnabled&&s.SS_REFRACTIONINTENSITY_TEXTURE&&(e.updateFloat2("vRefractionIntensityInfos",this._refractionIntensityTexture.coordinatesIndex,this._refractionIntensityTexture.level),si(this._refractionIntensityTexture,e,"refractionIntensity")),this._translucencyColorTexture&&ce.TranslucencyColorTextureEnabled&&s.SS_TRANSLUCENCYCOLOR_TEXTURE&&(e.updateFloat2("vTranslucencyColorInfos",this._translucencyColorTexture.coordinatesIndex,this._translucencyColorTexture.level),si(this._translucencyColorTexture,e,"translucencyColor")),this._translucencyIntensityTexture&&ce.TranslucencyIntensityTextureEnabled&&s.SS_TRANSLUCENCYINTENSITY_TEXTURE&&(e.updateFloat2("vTranslucencyIntensityInfos",this._translucencyIntensityTexture.coordinatesIndex,this._translucencyIntensityTexture.level),si(this._translucencyIntensityTexture,e,"translucencyIntensity")),c&&ce.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&&ce.ThicknessTextureEnabled&&e.setTexture("thicknessSampler",this._thicknessTexture),this._refractionIntensityTexture&&ce.RefractionIntensityTextureEnabled&&s.SS_REFRACTIONINTENSITY_TEXTURE&&e.setTexture("refractionIntensitySampler",this._refractionIntensityTexture),this._translucencyIntensityTexture&&ce.TranslucencyIntensityTextureEnabled&&s.SS_TRANSLUCENCYINTENSITY_TEXTURE&&e.setTexture("translucencyIntensitySampler",this._translucencyIntensityTexture),this._translucencyColorTexture&&ce.TranslucencyColorTextureEnabled&&s.SS_TRANSLUCENCYCOLOR_TEXTURE&&e.setTexture("translucencyColorSampler",this._translucencyColorTexture),c&&ce.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){ce.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!!(ce.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(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"isRefractionEnabled",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"isTranslucencyEnabled",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"isDispersionEnabled",void 0);P([F(),le("_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(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"useAlbedoToTintRefraction",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"useAlbedoToTintTranslucency",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"thicknessTexture",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"refractionTexture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"indexOfRefraction",void 0);P([F()],Ai.prototype,"_volumeIndexOfRefraction",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"volumeIndexOfRefraction",null);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"invertRefractionY",void 0);P([F(),le("_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([vr()],Ai.prototype,"tintColor",void 0);P([F()],Ai.prototype,"tintColorAtDistance",void 0);P([F()],Ai.prototype,"dispersion",void 0);P([vr()],Ai.prototype,"diffusionDistance",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"useMaskFromThicknessTexture",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"refractionIntensityTexture",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"translucencyIntensityTexture",void 0);P([vr()],Ai.prototype,"translucencyColor",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"translucencyColorTexture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Ai.prototype,"useGltfStyleTextures",void 0);P([F()],Ai.prototype,"applyAlbedoAfterSubSurface",void 0);P([F()],Ai.prototype,"legacyTranslucency",void 0)});var f7,Vde,MO=M(()=>{G();td();Wg();f7="pbrUboDeclaration",Vde=`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 -`;T.IncludesShadersStoreWGSL[J6]||(T.IncludesShadersStoreWGSL[J6]=xde)});var t7={};tt(t7,{pbrVertexShaderWGSL:()=>Rde});var xO,e7,Rde,i7=M(()=>{G();AO();vx();Zm();ya();op();nc();sc();Nf();Ex();Sx();ap();qP();ac();Ig();Tx();Uf();Bf();id();Ax();xx();Vf();Gf();oc();lc();cc();Rx();bx();Ix();Mx();fc();Mg();Cx();Cg();yx();xO="pbrVertexShader",e7=`#define PBR_VERTEX_SHADER +`;A.IncludesShadersStoreWGSL[f7]||(A.IncludesShadersStoreWGSL[f7]=Vde)});var d7={};tt(d7,{pbrVertexShaderWGSL:()=>Gde});var CO,h7,Gde,u7=M(()=>{G();MO();xx();Zm();ya();op();nc();sc();Nf();Rx();bx();ap();eL();ac();Mg();Ix();Bf();Uf();id();Mx();Cx();Vf();Gf();oc();lc();cc();yx();Px();Lx();Dx();fc();Cg();Ox();yg();Nx();CO="pbrVertexShader",h7=`#define PBR_VERTEX_SHADER #include #define CUSTOM_VERTEX_BEGIN #ifndef USE_VERTEX_PULLING @@ -17774,7 +17774,7 @@ vertexOutputs.vMainUV2=uv2Updated; #include #include #define CUSTOM_VERTEX_MAIN_END -}`;T.ShadersStoreWGSL[xO]||(T.ShadersStoreWGSL[xO]=e7);Rde={name:xO,shader:e7}});var r7,bde,n7=M(()=>{G();r7="samplerFragmentAlternateDeclaration",bde=`#ifdef _DEFINENAME_ +}`;A.ShadersStoreWGSL[CO]||(A.ShadersStoreWGSL[CO]=h7);Gde={name:CO,shader:h7}});var m7,kde,p7=M(()=>{G();m7="samplerFragmentAlternateDeclaration",kde=`#ifdef _DEFINENAME_ #if _DEFINENAME_DIRECTUV==1 #define v_VARYINGNAME_UV vMainUV1 #elif _DEFINENAME_DIRECTUV==2 @@ -17791,7 +17791,7 @@ vertexOutputs.vMainUV2=uv2Updated; varying v_VARYINGNAME_UV: vec2f; #endif #endif -`;T.IncludesShadersStoreWGSL[r7]||(T.IncludesShadersStoreWGSL[r7]=bde)});var s7,Ide,a7=M(()=>{G();rd();n7();WR();s7="pbrFragmentSamplersDeclaration",Ide=`#include(_DEFINENAME_,ALBEDO,_VARYINGNAME_,Albedo,_SAMPLERNAME_,albedo) +`;A.IncludesShadersStoreWGSL[m7]||(A.IncludesShadersStoreWGSL[m7]=kde)});var _7,Wde,g7=M(()=>{G();rd();p7();KR();_7="pbrFragmentSamplersDeclaration",Wde=`#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) @@ -17854,7 +17854,7 @@ var refractionLowSamplerSampler: sampler;var refractionLowSampler: texture_2d; #endif -`;T.IncludesShadersStoreWGSL[s7]||(T.IncludesShadersStoreWGSL[s7]=Ide)});var o7,Mde,l7=M(()=>{G();JP();o7="pbrBlockAlbedoOpacity",Mde=`struct albedoOpacityOutParams +`;A.IncludesShadersStoreWGSL[_7]||(A.IncludesShadersStoreWGSL[_7]=Wde)});var v7,Hde,E7=M(()=>{G();nL();v7="pbrBlockAlbedoOpacity",Hde=`struct albedoOpacityOutParams {surfaceAlbedo: vec3f, alpha: f32}; #define pbr_inline @@ -17933,7 +17933,7 @@ alpha=1.0; #endif #endif outParams.surfaceAlbedo=surfaceAlbedo;outParams.alpha=alpha;return outParams;} -`;T.IncludesShadersStoreWGSL[o7]||(T.IncludesShadersStoreWGSL[o7]=Mde)});var c7,Cde,f7=M(()=>{G();c7="pbrBlockReflectivity",Cde=`struct reflectivityOutParams +`;A.IncludesShadersStoreWGSL[v7]||(A.IncludesShadersStoreWGSL[v7]=Hde)});var S7,zde,T7=M(()=>{G();S7="pbrBlockReflectivity",zde=`struct reflectivityOutParams {microSurface: f32, roughness: f32, diffuseRoughness: f32, @@ -18093,7 +18093,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;} -`;T.IncludesShadersStoreWGSL[c7]||(T.IncludesShadersStoreWGSL[c7]=Cde)});var h7,yde,d7=M(()=>{G();h7="pbrBlockAmbientOcclusion",yde=`struct ambientOcclusionOutParams +`;A.IncludesShadersStoreWGSL[S7]||(A.IncludesShadersStoreWGSL[S7]=zde)});var A7,Xde,x7=M(()=>{G();A7="pbrBlockAmbientOcclusion",Xde=`struct ambientOcclusionOutParams {ambientOcclusionColor: vec3f, #if DEBUGMODE>0 && defined(AMBIENT) ambientOcclusionColorMap: vec3f @@ -18119,7 +18119,7 @@ outParams.ambientOcclusionColorMap=ambientOcclusionColorMap; #endif #endif outParams.ambientOcclusionColor=ambientOcclusionColor;return outParams;} -`;T.IncludesShadersStoreWGSL[h7]||(T.IncludesShadersStoreWGSL[h7]=yde)});var u7,Pde,m7=M(()=>{G();u7="pbrBlockAlphaFresnel",Pde=`#ifdef ALPHAFRESNEL +`;A.IncludesShadersStoreWGSL[A7]||(A.IncludesShadersStoreWGSL[A7]=Xde)});var R7,Yde,b7=M(()=>{G();R7="pbrBlockAlphaFresnel",Yde=`#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);} @@ -18146,7 +18146,7 @@ outParams.alpha=1.0; return outParams;} #endif #endif -`;T.IncludesShadersStoreWGSL[u7]||(T.IncludesShadersStoreWGSL[u7]=Pde)});var p7,Lde,_7=M(()=>{G();p7="pbrBlockAnisotropic",Lde=`#ifdef ANISOTROPIC +`;A.IncludesShadersStoreWGSL[R7]||(A.IncludesShadersStoreWGSL[R7]=Yde)});var I7,Kde,M7=M(()=>{G();I7="pbrBlockAnisotropic",Kde=`#ifdef ANISOTROPIC struct anisotropicOutParams {anisotropy: f32, anisotropicTangent: vec3f, @@ -18183,7 +18183,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 -`;T.IncludesShadersStoreWGSL[p7]||(T.IncludesShadersStoreWGSL[p7]=Lde)});var g7,Dde,v7=M(()=>{G();g7="pbrBlockReflection",Dde=`#ifdef REFLECTION +`;A.IncludesShadersStoreWGSL[I7]||(A.IncludesShadersStoreWGSL[I7]=Kde)});var C7,jde,y7=M(()=>{G();C7="pbrBlockReflection",jde=`#ifdef REFLECTION struct reflectionOutParams {environmentRadiance: vec4f ,environmentIrradiance: vec3f @@ -18493,7 +18493,7 @@ outParams.environmentRadiance=environmentRadiance; #endif outParams.environmentIrradiance=environmentIrradiance;outParams.reflectionCoords=reflectionCoords;return outParams;} #endif -`;T.IncludesShadersStoreWGSL[g7]||(T.IncludesShadersStoreWGSL[g7]=Dde)});var E7,Ode,S7=M(()=>{G();E7="pbrBlockSheen",Ode=`#ifdef SHEEN +`;A.IncludesShadersStoreWGSL[C7]||(A.IncludesShadersStoreWGSL[C7]=jde)});var P7,qde,L7=M(()=>{G();P7="pbrBlockSheen",qde=`#ifdef SHEEN struct sheenOutParams {sheenIntensity: f32 ,sheenColor: vec3f @@ -18679,7 +18679,7 @@ outParams.sheenAlbedoScaling=1.0-sheenIntensity*max(max(sheenColor.r,sheenColor. #endif outParams.sheenIntensity=sheenIntensity;outParams.sheenColor=sheenColor;outParams.sheenRoughness=sheenRoughness;return outParams;} #endif -`;T.IncludesShadersStoreWGSL[E7]||(T.IncludesShadersStoreWGSL[E7]=Ode)});var T7,Nde,A7=M(()=>{G();T7="pbrBlockClearcoat",Nde=`struct clearcoatOutParams +`;A.IncludesShadersStoreWGSL[P7]||(A.IncludesShadersStoreWGSL[P7]=qde)});var D7,Zde,O7=M(()=>{G();D7="pbrBlockClearcoat",Zde=`struct clearcoatOutParams {specularEnvironmentR0: vec3f, conservationFactor: f32, clearCoatNormalW: vec3f, @@ -18932,7 +18932,7 @@ outParams.energyConservationFactorClearCoat=getEnergyConservationFactor(outParam #endif return outParams;} #endif -`;T.IncludesShadersStoreWGSL[T7]||(T.IncludesShadersStoreWGSL[T7]=Nde)});var x7,wde,R7=M(()=>{G();x7="pbrBlockIridescence",wde=`struct iridescenceOutParams +`;A.IncludesShadersStoreWGSL[D7]||(A.IncludesShadersStoreWGSL[D7]=Zde)});var N7,Qde,w7=M(()=>{G();N7="pbrBlockIridescence",Qde=`struct iridescenceOutParams {iridescenceIntensity: f32, iridescenceIOR: f32, iridescenceThickness: f32, @@ -18973,7 +18973,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 -`;T.IncludesShadersStoreWGSL[x7]||(T.IncludesShadersStoreWGSL[x7]=wde)});var b7,Fde,I7=M(()=>{G();b7="pbrBlockSubSurface",Fde=`struct subSurfaceOutParams +`;A.IncludesShadersStoreWGSL[N7]||(A.IncludesShadersStoreWGSL[N7]=Qde)});var F7,$de,B7=M(()=>{G();F7="pbrBlockSubSurface",$de=`struct subSurfaceOutParams {specularEnvironmentReflectance: vec3f, #ifdef SS_REFRACTION finalRefraction: vec3f, @@ -19395,7 +19395,7 @@ outParams.refractionIrradiance=refractionIrradiance; #endif return outParams;} #endif -`;T.IncludesShadersStoreWGSL[b7]||(T.IncludesShadersStoreWGSL[b7]=Fde)});var M7,Ude,C7=M(()=>{G();M7="pbrBlockNormalFinal",Ude=`#if defined(FORCENORMALFORWARD) && defined(NORMAL) +`;A.IncludesShadersStoreWGSL[F7]||(A.IncludesShadersStoreWGSL[F7]=$de)});var U7,Jde,V7=M(()=>{G();U7="pbrBlockNormalFinal",Jde=`#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); @@ -19409,7 +19409,7 @@ normalW=select(normalW,-normalW,fragmentInputs.frontFacing); normalW=select(-normalW,normalW,fragmentInputs.frontFacing); #endif #endif -`;T.IncludesShadersStoreWGSL[M7]||(T.IncludesShadersStoreWGSL[M7]=Ude)});var y7,Bde,P7=M(()=>{G();y7="pbrBlockLightmapInit",Bde=`#ifdef LIGHTMAP +`;A.IncludesShadersStoreWGSL[U7]||(A.IncludesShadersStoreWGSL[U7]=Jde)});var G7,eue,k7=M(()=>{G();G7="pbrBlockLightmapInit",eue=`#ifdef LIGHTMAP var lightmapColor: vec4f=textureSample(lightmapSampler,lightmapSamplerSampler,fragmentInputs.vLightmapUV+uvOffset); #ifdef RGBDLIGHTMAP lightmapColor=vec4f(fromRGBD(lightmapColor),lightmapColor.a); @@ -19419,7 +19419,7 @@ lightmapColor=vec4f(toLinearSpaceVec3(lightmapColor.rgb),lightmapColor.a); #endif lightmapColor=vec4f(lightmapColor.rgb*uniforms.vLightmapInfos.y,lightmapColor.a); #endif -`;T.IncludesShadersStoreWGSL[y7]||(T.IncludesShadersStoreWGSL[y7]=Bde)});var L7,Vde,D7=M(()=>{G();L7="pbrBlockGeometryInfo",Vde=`var NdotVUnclamped: f32=dot(normalW,viewDirectionW);var NdotV: f32=absEps(NdotVUnclamped);var alphaG: f32=convertRoughnessToAverageSlope(roughness);var AARoughnessFactors: vec2f=getAARoughnessFactors(normalW.xyz); +`;A.IncludesShadersStoreWGSL[G7]||(A.IncludesShadersStoreWGSL[G7]=eue)});var W7,tue,H7=M(()=>{G();W7="pbrBlockGeometryInfo",tue=`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 @@ -19443,7 +19443,7 @@ var eho: f32=environmentHorizonOcclusion(-viewDirectionW,normalW,geometricNormal #endif #endif #endif -`;T.IncludesShadersStoreWGSL[L7]||(T.IncludesShadersStoreWGSL[L7]=Vde)});var O7,Gde,N7=M(()=>{G();O7="pbrBlockReflectance",Gde=`#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX) +`;A.IncludesShadersStoreWGSL[W7]||(A.IncludesShadersStoreWGSL[W7]=tue)});var z7,iue,X7=M(()=>{G();z7="pbrBlockReflectance",iue=`#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); @@ -19469,7 +19469,7 @@ colorSpecularEnvironmentReflectance*=clearcoatOut.conservationFactor; colorSpecularEnvironmentReflectance*=clearcoatOut.absorption; #endif #endif -`;T.IncludesShadersStoreWGSL[O7]||(T.IncludesShadersStoreWGSL[O7]=Gde)});var w7,kde,F7=M(()=>{G();w7="pbrBlockDirectLighting",kde=`var diffuseBase: vec3f=vec3f(0.,0.,0.); +`;A.IncludesShadersStoreWGSL[z7]||(A.IncludesShadersStoreWGSL[z7]=iue)});var Y7,rue,K7=M(()=>{G();Y7="pbrBlockDirectLighting",rue=`var diffuseBase: vec3f=vec3f(0.,0.,0.); #ifdef SS_TRANSLUCENCY var diffuseTransmissionBase: vec3f=vec3f(0.,0.,0.); #endif @@ -19490,7 +19490,7 @@ var aggShadow: f32=0.;var numLights: f32=0.; #if defined(CLEARCOAT) && defined(CLEARCOAT_TINT) var absorption: vec3f=vec3f(0.); #endif -`;T.IncludesShadersStoreWGSL[w7]||(T.IncludesShadersStoreWGSL[w7]=kde)});var U7,Wde,B7=M(()=>{G();U7="pbrBlockFinalLitComponents",Wde=`aggShadow=aggShadow/numLights; +`;A.IncludesShadersStoreWGSL[Y7]||(A.IncludesShadersStoreWGSL[Y7]=rue)});var j7,nue,q7=M(()=>{G();j7="pbrBlockFinalLitComponents",nue=`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); @@ -19596,7 +19596,7 @@ luminanceOverAlpha+=getLuminance(finalClearCoatScaled); alpha=saturate(alpha+luminanceOverAlpha*luminanceOverAlpha); #endif #endif -`;T.IncludesShadersStoreWGSL[U7]||(T.IncludesShadersStoreWGSL[U7]=Wde)});var V7,Hde,G7=M(()=>{G();V7="pbrBlockFinalUnlitComponents",Hde=`var finalDiffuse: vec3f=diffuseBase;finalDiffuse*=surfaceAlbedo; +`;A.IncludesShadersStoreWGSL[j7]||(A.IncludesShadersStoreWGSL[j7]=nue)});var Z7,sue,Q7=M(()=>{G();Z7="pbrBlockFinalUnlitComponents",sue=`var finalDiffuse: vec3f=diffuseBase;finalDiffuse*=surfaceAlbedo; #if defined(SS_REFRACTION) && !defined(UNLIT) && !defined(LEGACY_SPECULAR_ENERGY_CONSERVATION) finalDiffuse*=subSurfaceOut.refractionOpacity; #endif @@ -19620,7 +19620,7 @@ var ambientOcclusionForDirectDiffuse: vec3f=mix( vec3f(1.),aoOut.ambientOcclusio var ambientOcclusionForDirectDiffuse: vec3f=aoOut.ambientOcclusionColor; #endif finalAmbient*=aoOut.ambientOcclusionColor;finalDiffuse*=ambientOcclusionForDirectDiffuse; -`;T.IncludesShadersStoreWGSL[V7]||(T.IncludesShadersStoreWGSL[V7]=Hde)});var k7,zde,W7=M(()=>{G();k7="pbrBlockFinalColorComposition",zde=`var finalColor: vec4f= vec4f( +`;A.IncludesShadersStoreWGSL[Z7]||(A.IncludesShadersStoreWGSL[Z7]=sue)});var $7,aue,J7=M(()=>{G();$7="pbrBlockFinalColorComposition",aue=`var finalColor: vec4f= vec4f( #ifndef UNLIT #ifdef REFLECTION finalIrradiance + @@ -19662,7 +19662,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)); -`;T.IncludesShadersStoreWGSL[k7]||(T.IncludesShadersStoreWGSL[k7]=zde)});var H7,Xde,z7=M(()=>{G();H7="pbrBlockPrePass",Xde=`#if SCENE_MRT_COUNT>0 +`;A.IncludesShadersStoreWGSL[$7]||(A.IncludesShadersStoreWGSL[$7]=aue)});var e9,oue,t9=M(()=>{G();e9="pbrBlockPrePass",oue=`#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); @@ -19768,7 +19768,7 @@ fragmentOutputs.fragData6=fragData[6]; fragmentOutputs.fragData7=fragData[7]; #endif #endif -`;T.IncludesShadersStoreWGSL[H7]||(T.IncludesShadersStoreWGSL[H7]=Xde)});var Y7={};tt(Y7,{pbrPixelShaderWGSL:()=>Yde});var RO,X7,Yde,K7=M(()=>{G();Px();Lx();AO();VD();Dx();a7();Nx();hc();id();yg();ya();GD();kD();WD();wx();Ox();ap();HD();zD();op();XD();KD();HR();Fx();Ux();Wg();l7();f7();d7();m7();_7();v7();S7();A7();R7();I7();dc();jD();Bx();C7();Vx();P7();D7();YD();N7();F7();eL();B7();G7();W7();Gx();Pg();qD();z7();kx();ZD();RO="pbrPixelShader",X7=`#define PBR_FRAGMENT_SHADER +`;A.IncludesShadersStoreWGSL[e9]||(A.IncludesShadersStoreWGSL[e9]=oue)});var r9={};tt(r9,{pbrPixelShaderWGSL:()=>lue});var yO,i9,lue,n9=M(()=>{G();wx();Fx();MO();zD();Bx();g7();Vx();hc();id();Pg();ya();XD();YD();KD();Gx();Ux();ap();jD();qD();op();ZD();$D();jR();kx();Wx();Hg();E7();T7();x7();b7();M7();y7();L7();O7();w7();B7();dc();JD();Hx();V7();zx();k7();H7();QD();X7();K7();sL();q7();Q7();J7();Xx();Lg();eO();t9();Yx();tO();yO="pbrPixelShader",i9=`#define PBR_FRAGMENT_SHADER #define CUSTOM_FRAGMENT_BEGIN #include[SCENE_MRT_COUNT] #include @@ -20332,7 +20332,7 @@ if (fragDepth==nearestDepth) {fragmentOutputs.frontColor=vec4f(fragmentOutputs.f #include #define CUSTOM_FRAGMENT_MAIN_END } -`;T.ShadersStoreWGSL[RO]||(T.ShadersStoreWGSL[RO]=X7);Yde={name:RO,shader:X7}});var j7,Kde,q7=M(()=>{G();Wx();j7="pbrVertexDeclaration",Kde=`uniform mat4 view;uniform mat4 viewProjection;uniform vec4 vEyePosition; +`;A.ShadersStoreWGSL[yO]||(A.ShadersStoreWGSL[yO]=i9);lue={name:yO,shader:i9}});var s9,cue,a9=M(()=>{G();Kx();s9="pbrVertexDeclaration",cue=`uniform mat4 view;uniform mat4 viewProjection;uniform vec4 vEyePosition; #ifdef MULTIVIEW mat4 viewProjectionR; #endif @@ -20457,12 +20457,12 @@ uniform vec4 vDetailInfos;uniform mat4 detailMatrix; #endif #include #define ADDITIONAL_VERTEX_DECLARATION -`;T.IncludesShadersStore[j7]||(T.IncludesShadersStore[j7]=Kde)});var Z7,jde,bO=M(()=>{G();nd();Hg();Z7="pbrUboDeclaration",jde=`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; +`;A.IncludesShadersStore[s9]||(A.IncludesShadersStore[s9]=cue)});var o9,fue,PO=M(()=>{G();nd();zg();o9="pbrUboDeclaration",fue=`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 -`;T.IncludesShadersStore[Z7]||(T.IncludesShadersStore[Z7]=jde)});var $7={};tt($7,{pbrVertexShader:()=>qde});var IO,Q7,qde,J7=M(()=>{G();q7();bO();Hx();Qm();Pa();np();uc();mc();wf();zx();Xx();sp();rL();pc();Lg();Yx();Kx();kf();Wf();sd();Hf();zf();_c();gc();vc();jx();qx();Zx();Qx();Ec();Dg();$x();Og();Jx();IO="pbrVertexShader",Q7=`#define PBR_VERTEX_SHADER +`;A.IncludesShadersStore[o9]||(A.IncludesShadersStore[o9]=fue)});var c9={};tt(c9,{pbrVertexShader:()=>hue});var LO,l9,hue,f9=M(()=>{G();a9();PO();jx();Qm();Pa();np();uc();mc();wf();qx();Zx();sp();lL();pc();Dg();Qx();$x();kf();Wf();sd();Hf();zf();_c();gc();vc();Jx();eR();tR();iR();Ec();Og();rR();Ng();nR();LO="pbrVertexShader",l9=`#define PBR_VERTEX_SHADER #define CUSTOM_VERTEX_EXTENSION precision highp float; #include<__decl__pbrVertex> @@ -20693,7 +20693,7 @@ gl_PointSize=pointSize; #include #define CUSTOM_VERTEX_MAIN_END } -`;T.ShadersStore[IO]||(T.ShadersStore[IO]=Q7);qde={name:IO,shader:Q7}});var e9,Zde,t9=M(()=>{G();eR();e9="pbrFragmentDeclaration",Zde=`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; +`;A.ShadersStore[LO]||(A.ShadersStore[LO]=l9);hue={name:LO,shader:l9}});var h9,due,d9=M(()=>{G();sR();h9="pbrFragmentDeclaration",due=`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 @@ -20841,7 +20841,7 @@ uniform vec3 vSphericalX;uniform vec3 vSphericalY;uniform vec3 vSphericalZ;unifo #endif #endif #define ADDITIONAL_FRAGMENT_DECLARATION -`;T.IncludesShadersStore[e9]||(T.IncludesShadersStore[e9]=Zde)});var i9,Qde,r9=M(()=>{G();i9="samplerFragmentAlternateDeclaration",Qde=`#ifdef _DEFINENAME_ +`;A.IncludesShadersStore[h9]||(A.IncludesShadersStore[h9]=due)});var u9,uue,m9=M(()=>{G();u9="samplerFragmentAlternateDeclaration",uue=`#ifdef _DEFINENAME_ #if _DEFINENAME_DIRECTUV==1 #define v_VARYINGNAME_UV vMainUV1 #elif _DEFINENAME_DIRECTUV==2 @@ -20858,7 +20858,7 @@ uniform vec3 vSphericalX;uniform vec3 vSphericalY;uniform vec3 vSphericalZ;unifo varying vec2 v_VARYINGNAME_UV; #endif #endif -`;T.IncludesShadersStore[i9]||(T.IncludesShadersStore[i9]=Qde)});var n9,$de,s9=M(()=>{G();ad();r9();GR();n9="pbrFragmentSamplersDeclaration",$de=`#include(_DEFINENAME_,ALBEDO,_VARYINGNAME_,Albedo,_SAMPLERNAME_,albedo) +`;A.IncludesShadersStore[u9]||(A.IncludesShadersStore[u9]=uue)});var p9,mue,_9=M(()=>{G();ad();m9();XR();p9="pbrFragmentSamplersDeclaration",mue=`#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) @@ -20925,7 +20925,7 @@ uniform sampler2D refractionSamplerLow;uniform sampler2D refractionSamplerHigh; #ifdef IBL_CDF_FILTERING uniform sampler2D icdfSampler; #endif -`;T.IncludesShadersStore[n9]||(T.IncludesShadersStore[n9]=$de)});var a9,Jde,o9=M(()=>{G();lL();a9="pbrBlockAlbedoOpacity",Jde=`struct albedoOpacityOutParams +`;A.IncludesShadersStore[p9]||(A.IncludesShadersStore[p9]=mue)});var g9,pue,v9=M(()=>{G();uL();g9="pbrBlockAlbedoOpacity",pue=`struct albedoOpacityOutParams {vec3 surfaceAlbedo;float alpha;}; #define pbr_inline albedoOpacityOutParams albedoOpacityBlock( @@ -21004,7 +21004,7 @@ alpha=1.0; #endif #endif outParams.surfaceAlbedo=surfaceAlbedo;outParams.alpha=alpha;return outParams;} -`;T.IncludesShadersStore[a9]||(T.IncludesShadersStore[a9]=Jde)});var l9,eue,c9=M(()=>{G();l9="pbrBlockReflectivity",eue=`struct reflectivityOutParams +`;A.IncludesShadersStore[g9]||(A.IncludesShadersStore[g9]=pue)});var E9,_ue,S9=M(()=>{G();E9="pbrBlockReflectivity",_ue=`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; @@ -21151,7 +21151,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;} -`;T.IncludesShadersStore[l9]||(T.IncludesShadersStore[l9]=eue)});var f9,tue,h9=M(()=>{G();f9="pbrBlockAmbientOcclusion",tue=`struct ambientOcclusionOutParams +`;A.IncludesShadersStore[E9]||(A.IncludesShadersStore[E9]=_ue)});var T9,gue,A9=M(()=>{G();T9="pbrBlockAmbientOcclusion",gue=`struct ambientOcclusionOutParams {vec3 ambientOcclusionColor; #if DEBUGMODE>0 && defined(AMBIENT) vec3 ambientOcclusionColorMap; @@ -21174,7 +21174,7 @@ outParams.ambientOcclusionColorMap=ambientOcclusionColorMap; #endif #endif outParams.ambientOcclusionColor=ambientOcclusionColor;return outParams;} -`;T.IncludesShadersStore[f9]||(T.IncludesShadersStore[f9]=tue)});var d9,iue,u9=M(()=>{G();d9="pbrBlockAlphaFresnel",iue=`#ifdef ALPHAFRESNEL +`;A.IncludesShadersStore[T9]||(A.IncludesShadersStore[T9]=gue)});var x9,vue,R9=M(()=>{G();x9="pbrBlockAlphaFresnel",vue=`#ifdef ALPHAFRESNEL #if defined(ALPHATEST) || defined(ALPHABLEND) struct alphaFresnelOutParams {float alpha;}; @@ -21202,7 +21202,7 @@ outParams.alpha=1.0; return outParams;} #endif #endif -`;T.IncludesShadersStore[d9]||(T.IncludesShadersStore[d9]=iue)});var m9,rue,p9=M(()=>{G();m9="pbrBlockAnisotropic",rue=`#ifdef ANISOTROPIC +`;A.IncludesShadersStore[x9]||(A.IncludesShadersStore[x9]=vue)});var b9,Eue,I9=M(()=>{G();b9="pbrBlockAnisotropic",Eue=`#ifdef ANISOTROPIC struct anisotropicOutParams {float anisotropy;vec3 anisotropicTangent;vec3 anisotropicBitangent;vec3 anisotropicNormal; #if DEBUGMODE>0 && defined(ANISOTROPIC_TEXTURE) @@ -21235,7 +21235,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 -`;T.IncludesShadersStore[m9]||(T.IncludesShadersStore[m9]=rue)});var _9,nue,g9=M(()=>{G();_9="pbrBlockReflection",nue=`#ifdef REFLECTION +`;A.IncludesShadersStore[b9]||(A.IncludesShadersStore[b9]=Eue)});var M9,Sue,C9=M(()=>{G();M9="pbrBlockReflection",Sue=`#ifdef REFLECTION struct reflectionOutParams {vec4 environmentRadiance;vec3 environmentIrradiance; #ifdef REFLECTIONMAP_3D @@ -21520,7 +21520,7 @@ outParams.environmentRadiance=environmentRadiance; #endif outParams.environmentIrradiance=environmentIrradiance;outParams.reflectionCoords=reflectionCoords;return outParams;} #endif -`;T.IncludesShadersStore[_9]||(T.IncludesShadersStore[_9]=nue)});var v9,sue,E9=M(()=>{G();v9="pbrBlockSheen",sue=`#ifdef SHEEN +`;A.IncludesShadersStore[M9]||(A.IncludesShadersStore[M9]=Sue)});var y9,Tue,P9=M(()=>{G();y9="pbrBlockSheen",Tue=`#ifdef SHEEN struct sheenOutParams {float sheenIntensity;vec3 sheenColor;float sheenRoughness; #ifdef SHEEN_LINKWITHALBEDO @@ -21697,7 +21697,7 @@ outParams.sheenAlbedoScaling=1.0-sheenIntensity*max(max(sheenColor.r,sheenColor. #endif outParams.sheenIntensity=sheenIntensity;outParams.sheenColor=sheenColor;outParams.sheenRoughness=sheenRoughness;return outParams;} #endif -`;T.IncludesShadersStore[v9]||(T.IncludesShadersStore[v9]=sue)});var S9,aue,T9=M(()=>{G();S9="pbrBlockClearcoat",aue=`struct clearcoatOutParams +`;A.IncludesShadersStore[y9]||(A.IncludesShadersStore[y9]=Tue)});var L9,Aue,D9=M(()=>{G();L9="pbrBlockClearcoat",Aue=`struct clearcoatOutParams {vec3 specularEnvironmentR0;float conservationFactor;vec3 clearCoatNormalW;vec2 clearCoatAARoughnessFactors;float clearCoatIntensity;float clearCoatRoughness; #ifdef REFLECTION vec3 finalClearCoatRadianceScaled; @@ -21934,7 +21934,7 @@ outParams.energyConservationFactorClearCoat=getEnergyConservationFactor(outParam #endif return outParams;} #endif -`;T.IncludesShadersStore[S9]||(T.IncludesShadersStore[S9]=aue)});var A9,oue,x9=M(()=>{G();A9="pbrBlockIridescence",oue=`struct iridescenceOutParams +`;A.IncludesShadersStore[L9]||(A.IncludesShadersStore[L9]=Aue)});var O9,xue,N9=M(()=>{G();O9="pbrBlockIridescence",xue=`struct iridescenceOutParams {float iridescenceIntensity;float iridescenceIOR;float iridescenceThickness;vec3 specularEnvironmentR0;}; #ifdef IRIDESCENCE #define pbr_inline @@ -21974,7 +21974,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 -`;T.IncludesShadersStore[A9]||(T.IncludesShadersStore[A9]=oue)});var R9,lue,b9=M(()=>{G();R9="pbrBlockSubSurface",lue=`struct subSurfaceOutParams +`;A.IncludesShadersStore[O9]||(A.IncludesShadersStore[O9]=xue)});var w9,Rue,F9=M(()=>{G();w9="pbrBlockSubSurface",Rue=`struct subSurfaceOutParams {vec3 specularEnvironmentReflectance; #ifdef SS_REFRACTION vec3 finalRefraction;vec3 surfaceAlbedo; @@ -22371,11 +22371,11 @@ outParams.refractionIrradiance=refractionIrradiance.rgb; #endif return outParams;} #endif -`;T.IncludesShadersStore[R9]||(T.IncludesShadersStore[R9]=lue)});var I9,cue,MO=M(()=>{G();I9="pbrBlockReflectance0",cue=`float reflectanceF0=reflectivityOut.reflectanceF0;vec3 specularEnvironmentR0=reflectivityOut.colorReflectanceF0;vec3 specularEnvironmentR90=reflectivityOut.colorReflectanceF90; +`;A.IncludesShadersStore[w9]||(A.IncludesShadersStore[w9]=Rue)});var B9,bue,DO=M(()=>{G();B9="pbrBlockReflectance0",bue=`float reflectanceF0=reflectivityOut.reflectanceF0;vec3 specularEnvironmentR0=reflectivityOut.colorReflectanceF0;vec3 specularEnvironmentR90=reflectivityOut.colorReflectanceF90; #ifdef ALPHAFRESNEL float reflectance90=fresnelGrazingReflectance(reflectanceF0);specularEnvironmentR90=specularEnvironmentR90*reflectance90; #endif -`;T.IncludesShadersStore[I9]||(T.IncludesShadersStore[I9]=cue)});var M9,fue,C9=M(()=>{G();oL();MO();M9="pbrClusteredLightingFunctions",fue=`#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0 +`;A.IncludesShadersStore[B9]||(A.IncludesShadersStore[B9]=bue)});var U9,Iue,V9=M(()=>{G();dL();DO();U9="pbrClusteredLightingFunctions",Iue=`#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0 #include #define inline lightingInfo computeClusteredLighting( @@ -22488,7 +22488,7 @@ result.sheen+=info.sheen; batchOffset+=CLUSTLIGHT_BATCH;} return result;} #endif -`;T.IncludesShadersStore[M9]||(T.IncludesShadersStore[M9]=fue)});var y9,hue,P9=M(()=>{G();y9="pbrBlockNormalFinal",hue=`#if defined(FORCENORMALFORWARD) && defined(NORMAL) +`;A.IncludesShadersStore[U9]||(A.IncludesShadersStore[U9]=Iue)});var G9,Mue,k9=M(()=>{G();G9="pbrBlockNormalFinal",Mue=`#if defined(FORCENORMALFORWARD) && defined(NORMAL) vec3 faceNormal=normalize(cross(dFdx(vPositionW),dFdy(vPositionW)))*vEyePosition.w; #if defined(TWOSIDEDLIGHTING) faceNormal=gl_FrontFacing ? faceNormal : -faceNormal; @@ -22502,7 +22502,7 @@ normalW=gl_FrontFacing ? -normalW : normalW; normalW=gl_FrontFacing ? normalW : -normalW; #endif #endif -`;T.IncludesShadersStore[y9]||(T.IncludesShadersStore[y9]=hue)});var L9,due,D9=M(()=>{G();L9="pbrBlockLightmapInit",due=`#ifdef LIGHTMAP +`;A.IncludesShadersStore[G9]||(A.IncludesShadersStore[G9]=Mue)});var W9,Cue,H9=M(()=>{G();W9="pbrBlockLightmapInit",Cue=`#ifdef LIGHTMAP vec4 lightmapColor=texture2D(lightmapSampler,vLightmapUV+uvOffset); #ifdef RGBDLIGHTMAP lightmapColor.rgb=fromRGBD(lightmapColor); @@ -22512,7 +22512,7 @@ lightmapColor.rgb=toLinearSpace(lightmapColor.rgb); #endif lightmapColor.rgb*=vLightmapInfos.y; #endif -`;T.IncludesShadersStore[L9]||(T.IncludesShadersStore[L9]=due)});var O9,uue,N9=M(()=>{G();O9="pbrBlockGeometryInfo",uue=`float NdotVUnclamped=dot(normalW,viewDirectionW);float NdotV=absEps(NdotVUnclamped);float alphaG=convertRoughnessToAverageSlope(roughness);vec2 AARoughnessFactors=getAARoughnessFactors(normalW.xyz); +`;A.IncludesShadersStore[W9]||(A.IncludesShadersStore[W9]=Cue)});var z9,yue,X9=M(()=>{G();z9="pbrBlockGeometryInfo",yue=`float NdotVUnclamped=dot(normalW,viewDirectionW);float NdotV=absEps(NdotVUnclamped);float alphaG=convertRoughnessToAverageSlope(roughness);vec2 AARoughnessFactors=getAARoughnessFactors(normalW.xyz); #ifdef SPECULARAA alphaG+=AARoughnessFactors.y; #endif @@ -22536,7 +22536,7 @@ float eho=environmentHorizonOcclusion(-viewDirectionW,normalW,geometricNormalW); #endif #endif #endif -`;T.IncludesShadersStore[O9]||(T.IncludesShadersStore[O9]=uue)});var w9,mue,F9=M(()=>{G();w9="pbrBlockReflectance",mue=`#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX) +`;A.IncludesShadersStore[z9]||(A.IncludesShadersStore[z9]=yue)});var Y9,Pue,K9=M(()=>{G();Y9="pbrBlockReflectance",Pue=`#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); @@ -22562,7 +22562,7 @@ colorSpecularEnvironmentReflectance*=clearcoatOut.conservationFactor; colorSpecularEnvironmentReflectance*=clearcoatOut.absorption; #endif #endif -`;T.IncludesShadersStore[w9]||(T.IncludesShadersStore[w9]=mue)});var U9,pue,B9=M(()=>{G();U9="pbrBlockDirectLighting",pue=`vec3 diffuseBase=vec3(0.,0.,0.); +`;A.IncludesShadersStore[Y9]||(A.IncludesShadersStore[Y9]=Pue)});var j9,Lue,q9=M(()=>{G();j9="pbrBlockDirectLighting",Lue=`vec3 diffuseBase=vec3(0.,0.,0.); #ifdef SS_TRANSLUCENCY vec3 diffuseTransmissionBase=vec3(0.,0.,0.); #endif @@ -22583,7 +22583,7 @@ float aggShadow=0.;float numLights=0.; #if defined(CLEARCOAT) && defined(CLEARCOAT_TINT) vec3 absorption=vec3(0.); #endif -`;T.IncludesShadersStore[U9]||(T.IncludesShadersStore[U9]=pue)});var V9,_ue,G9=M(()=>{G();V9="pbrBlockFinalLitComponents",_ue=`aggShadow=aggShadow/numLights; +`;A.IncludesShadersStore[j9]||(A.IncludesShadersStore[j9]=Lue)});var Z9,Due,Q9=M(()=>{G();Z9="pbrBlockFinalLitComponents",Due=`aggShadow=aggShadow/numLights; #if defined(ENVIRONMENTBRDF) #ifdef MS_BRDF_ENERGY_CONSERVATION vec3 baseSpecularEnergyConservationFactor=getEnergyConservationFactor(vec3(reflectanceF0),environmentBrdf);vec3 coloredEnergyConservationFactor=getEnergyConservationFactor(clearcoatOut.specularEnvironmentR0,environmentBrdf); @@ -22689,7 +22689,7 @@ luminanceOverAlpha+=getLuminance(finalClearCoatScaled); alpha=saturate(alpha+luminanceOverAlpha*luminanceOverAlpha); #endif #endif -`;T.IncludesShadersStore[V9]||(T.IncludesShadersStore[V9]=_ue)});var k9,gue,W9=M(()=>{G();k9="pbrBlockFinalUnlitComponents",gue=`vec3 finalDiffuse=diffuseBase;finalDiffuse*=surfaceAlbedo; +`;A.IncludesShadersStore[Z9]||(A.IncludesShadersStore[Z9]=Due)});var $9,Oue,J9=M(()=>{G();$9="pbrBlockFinalUnlitComponents",Oue=`vec3 finalDiffuse=diffuseBase;finalDiffuse*=surfaceAlbedo; #if defined(SS_REFRACTION) && !defined(UNLIT) && !defined(LEGACY_SPECULAR_ENERGY_CONSERVATION) finalDiffuse*=subSurfaceOut.refractionOpacity; #endif @@ -22713,7 +22713,7 @@ vec3 ambientOcclusionForDirectDiffuse=mix(vec3(1.),aoOut.ambientOcclusionColor,v vec3 ambientOcclusionForDirectDiffuse=aoOut.ambientOcclusionColor; #endif finalAmbient*=aoOut.ambientOcclusionColor;finalDiffuse*=ambientOcclusionForDirectDiffuse; -`;T.IncludesShadersStore[k9]||(T.IncludesShadersStore[k9]=gue)});var H9,vue,z9=M(()=>{G();H9="pbrBlockFinalColorComposition",vue=`vec4 finalColor=vec4( +`;A.IncludesShadersStore[$9]||(A.IncludesShadersStore[$9]=Oue)});var eK,Nue,tK=M(()=>{G();eK="pbrBlockFinalColorComposition",Nue=`vec4 finalColor=vec4( #ifndef UNLIT #ifdef REFLECTION finalIrradiance + @@ -22755,7 +22755,7 @@ finalColor.rgb+=lightmapColor.rgb; finalColor.rgb+=finalEmissive; #define CUSTOM_FRAGMENT_BEFORE_FOG finalColor=max(finalColor,0.0); -`;T.IncludesShadersStore[H9]||(T.IncludesShadersStore[H9]=vue)});var X9,Eue,Y9=M(()=>{G();X9="pbrBlockPrePass",Eue=`#if SCENE_MRT_COUNT>0 +`;A.IncludesShadersStore[eK]||(A.IncludesShadersStore[eK]=Nue)});var iK,wue,rK=M(()=>{G();iK="pbrBlockPrePass",wue=`#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); @@ -22837,7 +22837,7 @@ gl_FragData[PREPASS_REFLECTIVITY_INDEX]=vec4( 0.0,0.0,0.0,1.0 )*writeGeometryInf #endif #endif #endif -`;T.IncludesShadersStore[X9]||(T.IncludesShadersStore[X9]=Eue)});var j9={};tt(j9,{pbrPixelShader:()=>Sue});var CO,K9,Sue,q9=M(()=>{G();tR();iR();t9();bO();eO();rR();nR();s9();aR();Sc();sd();Ng();Pa();tO();iO();rO();oR();sR();sp();nO();sO();np();aO();oO();kR();lR();cR();zg();o9();c9();h9();u9();p9();g9();E9();T9();x9();b9();C9();Tc();lO();fR();P9();hR();D9();N9();MO();F9();B9();cL();G9();W9();z9();dR();wg();cO();Y9();uR();fO();CO="pbrPixelShader",K9=`#define PBR_FRAGMENT_SHADER +`;A.IncludesShadersStore[iK]||(A.IncludesShadersStore[iK]=wue)});var sK={};tt(sK,{pbrPixelShader:()=>Fue});var OO,nK,Fue,aK=M(()=>{G();aR();oR();d9();PO();sO();lR();cR();_9();hR();Sc();sd();wg();Pa();aO();oO();lO();dR();fR();sp();cO();fO();np();hO();dO();YR();uR();mR();Xg();v9();S9();A9();R9();I9();C9();P9();D9();N9();F9();V9();Tc();uO();pR();k9();_R();H9();X9();DO();K9();q9();mL();Q9();J9();tK();gR();Fg();mO();rK();vR();pO();OO="pbrPixelShader",nK=`#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 @@ -23400,23 +23400,23 @@ if (fragDepth==nearestDepth) {frontColor.rgb+=finalColor.rgb*finalColor.a*alphaM #include #define CUSTOM_FRAGMENT_MAIN_END } -`;T.ShadersStore[CO]||(T.ShadersStore[CO]=K9);Sue={name:CO,shader:K9}});var cp,yO,XR,PO,Sr,Z9=M(()=>{Gt();Vt();Pt();oo();BR();bs();Ge();ki();K6();dx();zt();ux();ng();Vn();Na();Rg();Da();ny();Lf();j6();q6();Z6();Q6();$6();KP();ol();bg();Bn();mx();px();_x();gx();cp={effect:null,subMesh:null},yO=class extends jm(Km(Rr)){},XR=class extends Xm(yO){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}},PO=class extends qm(hl){},Sr=class n extends PO{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 Ii(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=ge.White(),this._useOnlyMetallicFromMetallicReflectanceTexture=!1,this._metallicReflectanceTexture=null,this._reflectanceTexture=null,this._microSurfaceTexture=null,this._bumpTexture=null,this._lightmapTexture=null,this._ambientColor=new ge(0,0,0),this._albedoColor=new ge(1,1,1),this._baseWeight=1,this._baseDiffuseRoughness=null,this._reflectivityColor=new ge(1,1,1),this._reflectionColor=new ge(1,1,1),this._emissiveColor=new ge(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 Bi(16),this._globalAmbientColor=new ge(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 Cr(this),this.clearCoat=new an(this),this.iridescence=new Os(this),this.anisotropy=new bc(this),this.sheen=new ta(this),this.subSurface=new Ai(this),this.detailMap=new wa(this),this._attachImageProcessingConfiguration(null),this.getRenderTargetTextures=()=>(this._renderTargets.reset(),ce.ReflectionTextureEnabled&&this._reflectionTexture&&this._reflectionTexture.isRenderTarget&&this._renderTargets.push(this._reflectionTexture),this._eventInfo.renderTargets=this._renderTargets,this._callbackPluginEventFillRenderTargetTextures(this._eventInfo),this._renderTargets),this._environmentBRDFTexture=UR(this.getScene()),this.prePassConfiguration=new Ls}get hasRenderTargetTextures(){return ce.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 XR(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&&ce.DiffuseTextureEnabled&&!this._albedoTexture.isReadyOrNotBlocking()||this._baseWeightTexture&&ce.BaseWeightTextureEnabled&&!this._baseWeightTexture.isReadyOrNotBlocking()||this._baseDiffuseRoughnessTexture&&ce.BaseDiffuseRoughnessTextureEnabled&&!this._baseDiffuseRoughnessTexture.isReadyOrNotBlocking()||this._ambientTexture&&ce.AmbientTextureEnabled&&!this._ambientTexture.isReadyOrNotBlocking()||this._opacityTexture&&ce.OpacityTextureEnabled&&!this._opacityTexture.isReadyOrNotBlocking())return!1;let u=this._getReflectionTexture();if(u&&ce.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&&ce.LightmapTextureEnabled&&!this._lightmapTexture.isReadyOrNotBlocking()||this._emissiveTexture&&ce.EmissiveTextureEnabled&&!this._emissiveTexture.isReadyOrNotBlocking())return!1;if(ce.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&&ce.BumpTextureEnabled&&!this._disableBumpMap&&!this._bumpTexture.isReady()||this._environmentBRDFTexture&&ce.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;kt&&(kt.PrepareUniforms(m,i),kt.PrepareSamplers(p,i)),Nm({uniformsNames:m,uniformBuffersNames:_,samplers:p,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:_,samplers:p,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(()=>(i7(),t7)),Promise.resolve().then(()=>(K7(),Y7))]):await Promise.all([Promise.resolve().then(()=>(J7(),$7)),Promise.resolve().then(()=>(q9(),j9))]),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();Cm(o,e,i,!0,this._maxSimultaneousLights,this._disableLighting),i._needNormals=!0,Lm(o,i);let c=this.needAlphaBlendingForMesh(e)&&this.getScene().useOrderIndependentTransparency;if(Om(o,i,this.canRenderToMRT&&!c),Dm(o,i,c),Hn.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&&ce.DiffuseTextureEnabled?(ni(this._albedoTexture,i,"ALBEDO"),i.GAMMAALBEDO=this._albedoTexture.gammaSpace):i.ALBEDO=!1,this._baseWeightTexture&&ce.BaseWeightTextureEnabled?ni(this._baseWeightTexture,i,"BASE_WEIGHT"):i.BASE_WEIGHT=!1,this._baseDiffuseRoughnessTexture&&ce.BaseDiffuseRoughnessTextureEnabled?ni(this._baseDiffuseRoughnessTexture,i,"BASE_DIFFUSE_ROUGHNESS"):i.BASE_DIFFUSE_ROUGHNESS=!1,this._ambientTexture&&ce.AmbientTextureEnabled?(ni(this._ambientTexture,i,"AMBIENT"),i.AMBIENTINGRAYSCALE=this._useAmbientInGrayScale):i.AMBIENT=!1,this._opacityTexture&&ce.OpacityTextureEnabled?(ni(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;xf(o,f,i,this.realTimeFiltering,this.realTimeFilteringQuality,!h),this._lightmapTexture&&ce.LightmapTextureEnabled?(ni(this._lightmapTexture,i,"LIGHTMAP"),i.USELIGHTMAPASSHADOWMAP=this._useLightmapAsShadowmap,i.GAMMALIGHTMAP=this._lightmapTexture.gammaSpace,i.RGBDLIGHTMAP=this._lightmapTexture.isRGBD):i.LIGHTMAP=!1,this._emissiveTexture&&ce.EmissiveTextureEnabled?(ni(this._emissiveTexture,i,"EMISSIVE"),i.GAMMAEMISSIVE=this._emissiveTexture.gammaSpace):i.EMISSIVE=!1,ce.SpecularTextureEnabled?(this._metallicTexture?(ni(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?(ni(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?(ni(this._metallicReflectanceTexture,i,"METALLIC_REFLECTANCE"),i.METALLIC_REFLECTANCE_GAMMA=this._metallicReflectanceTexture.gammaSpace):i.METALLIC_REFLECTANCE=!1,this._reflectanceTexture&&(!this._metallicReflectanceTexture||this._metallicReflectanceTexture&&this._useOnlyMetallicFromMetallicReflectanceTexture)?(ni(this._reflectanceTexture,i,"REFLECTANCE"),i.REFLECTANCE_GAMMA=this._reflectanceTexture.gammaSpace):i.REFLECTANCE=!1):(i.METALLIC_REFLECTANCE=!1,i.REFLECTANCE=!1),this._microSurfaceTexture?ni(this._microSurfaceTexture,i,"MICROSURFACEMAP"):i.MICROSURFACEMAP=!1):(i.REFLECTIVITY=!1,i.MICROSURFACEMAP=!1),l.getCaps().standardDerivatives&&this._bumpTexture&&ce.BumpTextureEnabled&&!this._disableBumpMap?(ni(this._bumpTexture,i,"BUMP"),this._useParallax&&this._albedoTexture&&ce.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&&ce.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&&(Im(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),ym(o,l,this,i,!!r,s,a),this._eventInfo.defines=i,this._eventInfo.mesh=e,this._callbackPluginEventPrepareDefinesBeforeAttributes(this._eventInfo),Pm(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 XR(this._eventInfo.defineNames),o=this._prepareEffect(e,e,a,void 0,void 0,r.useInstances,r.clipPlane);this._onEffectCreatedObservable&&(cp.effect=o,cp.subMesh=null,this._onEffectCreatedObservable.notifyObservers(cp)),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),wm(e,!0,!0,!0,!0,!0),super.buildUniformLayout()}bindForSubMesh(e,t,i){var d,u,m,p;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),Hn.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);Ms(t,this._activeEffect,this.prePassConfiguration),this._vertexPullingMetadata&&Of(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&&ce.DiffuseTextureEnabled&&(h.updateFloat2("vAlbedoInfos",this._albedoTexture.coordinatesIndex,this._albedoTexture.level),si(this._albedoTexture,h,"albedo")),this._baseWeightTexture&&ce.BaseWeightTextureEnabled&&(h.updateFloat2("vBaseWeightInfos",this._baseWeightTexture.coordinatesIndex,this._baseWeightTexture.level),si(this._baseWeightTexture,h,"baseWeight")),this._baseDiffuseRoughnessTexture&&ce.BaseDiffuseRoughnessTextureEnabled&&(h.updateFloat2("vBaseDiffuseRoughnessInfos",this._baseDiffuseRoughnessTexture.coordinatesIndex,this._baseDiffuseRoughnessTexture.level),si(this._baseDiffuseRoughnessTexture,h,"baseDiffuseRoughness")),this._ambientTexture&&ce.AmbientTextureEnabled&&(h.updateFloat4("vAmbientInfos",this._ambientTexture.coordinatesIndex,this._ambientTexture.level,this._ambientTextureStrength,this._ambientTextureImpactOnAnalyticalLights),si(this._ambientTexture,h,"ambient")),this._opacityTexture&&ce.OpacityTextureEnabled&&(h.updateFloat2("vOpacityInfos",this._opacityTexture.coordinatesIndex,this._opacityTexture.level),si(this._opacityTexture,h,"opacity")),this._emissiveTexture&&ce.EmissiveTextureEnabled&&(h.updateFloat2("vEmissiveInfos",this._emissiveTexture.coordinatesIndex,this._emissiveTexture.level),si(this._emissiveTexture,h,"emissive")),this._lightmapTexture&&ce.LightmapTextureEnabled&&(h.updateFloat2("vLightmapInfos",this._lightmapTexture.coordinatesIndex,this._lightmapTexture.level),si(this._lightmapTexture,h,"lightmap")),ce.SpecularTextureEnabled&&(this._metallicTexture?(h.updateFloat3("vReflectivityInfos",this._metallicTexture.coordinatesIndex,this._metallicTexture.level,this._ambientTextureStrength),si(this._metallicTexture,h,"reflectivity")):this._reflectivityTexture&&(h.updateFloat3("vReflectivityInfos",this._reflectivityTexture.coordinatesIndex,this._reflectivityTexture.level,1),si(this._reflectivityTexture,h,"reflectivity")),this._metallicReflectanceTexture&&(h.updateFloat2("vMetallicReflectanceInfos",this._metallicReflectanceTexture.coordinatesIndex,this._metallicReflectanceTexture.level),si(this._metallicReflectanceTexture,h,"metallicReflectance")),this._reflectanceTexture&&s.REFLECTANCE&&(h.updateFloat2("vReflectanceInfos",this._reflectanceTexture.coordinatesIndex,this._reflectanceTexture.level),si(this._reflectanceTexture,h,"reflectance")),this._microSurfaceTexture&&(h.updateFloat2("vMicroSurfaceSamplerInfos",this._microSurfaceTexture.coordinatesIndex,this._microSurfaceTexture.level),si(this._microSurfaceTexture,h,"microSurfaceSampler"))),this._bumpTexture&&o.getCaps().standardDerivatives&&ce.BumpTextureEnabled&&!this._disableBumpMap&&(h.updateFloat3("vBumpInfos",this._bumpTexture.coordinatesIndex,this._bumpTexture.level,this._parallaxScaleBias),si(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)),Sm(r,s,h,this._reflectionColor,f,this.realTimeFiltering,!0,!0,!0,!0,!0)),this.pointsCloud&&h.updateFloat("pointSize",this.pointSize),s.METALLICWORKFLOW){En.Color4[0].r=this._metallic===void 0||this._metallic===null?1:this._metallic,En.Color4[0].g=this._roughness===void 0||this._roughness===null?1:this._roughness;let _=(u=(d=this.subSurface)==null?void 0:d._indexOfRefraction)!=null?u:1.5,g=1;En.Color4[0].b=_;let v=Math.pow((_-g)/(_+g),2);En.Color4[0].a=v,h.updateDirectColor4("vReflectivityColor",En.Color4[0]),h.updateColor4("vMetallicReflectanceFactors",this._metallicReflectanceColor,this._metallicF0Factor)}else h.updateColor4("vReflectivityColor",this._reflectivityColor,this._microSurface);h.updateColor3("vEmissiveColor",ce.EmissiveTextureEnabled?this._emissiveColor:ge.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&&ce.DiffuseTextureEnabled&&h.setTexture("albedoSampler",this._albedoTexture),this._baseWeightTexture&&ce.BaseWeightTextureEnabled&&h.setTexture("baseWeightSampler",this._baseWeightTexture),this._baseDiffuseRoughnessTexture&&ce.BaseDiffuseRoughnessTextureEnabled&&h.setTexture("baseDiffuseRoughnessSampler",this._baseDiffuseRoughnessTexture),this._ambientTexture&&ce.AmbientTextureEnabled&&h.setTexture("ambientSampler",this._ambientTexture),this._opacityTexture&&ce.OpacityTextureEnabled&&h.setTexture("opacitySampler",this._opacityTexture),ZA(r,s,h,f,this.realTimeFiltering),s.ENVIRONMENTBRDF&&h.setTexture("environmentBrdfSampler",this._environmentBRDFTexture),this._emissiveTexture&&ce.EmissiveTextureEnabled&&h.setTexture("emissiveSampler",this._emissiveTexture),this._lightmapTexture&&ce.LightmapTextureEnabled&&h.setTexture("lightmapSampler",this._lightmapTexture),ce.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&&ce.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),Fn(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!==Jt.FOGMODE_NONE||f||this.subSurface.refractionTexture||t.receiveShadows||s.PREPASS||s.CLUSTLIGHT_BATCH)&&this.bindView(a),Tf(r,t,this._activeEffect,!0),s.NUM_MORPH_INFLUENCERS&&Un(t,this._activeEffect),s.BAKED_VERTEX_ANIMATION_TEXTURE&&((p=t.bakedVertexAnimationManager)==null||p.bind(a,s.INSTANCES)),this._imageProcessingConfiguration.bind(this._activeEffect),Sf(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(),(p=this._reflectanceTexture)==null||p.dispose(),(_=this._microSurfaceTexture)==null||_.dispose()),this._renderTargets.dispose(),this._imageProcessingConfiguration&&this._imageProcessingObserver&&this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver),super.dispose(e,t)}};Sr.PBRMATERIAL_OPAQUE=Ee.MATERIAL_OPAQUE;Sr.PBRMATERIAL_ALPHATEST=Ee.MATERIAL_ALPHATEST;Sr.PBRMATERIAL_ALPHABLEND=Ee.MATERIAL_ALPHABLEND;Sr.PBRMATERIAL_ALPHATESTANDBLEND=Ee.MATERIAL_ALPHATESTANDBLEND;Sr.DEFAULT_AO_ON_ANALYTICAL_LIGHTS=0;Sr.LIGHTFALLOFF_PHYSICAL=0;Sr.LIGHTFALLOFF_GLTF=1;Sr.LIGHTFALLOFF_STANDARD=2;Sr.ForceGLSL=!1;P([le("_markAllSubMeshesAsMiscDirty")],Sr.prototype,"debugMode",void 0)});var Q9={};tt(Q9,{PBRMaterial:()=>dt});var dt,$9=M(()=>{Gt();Vt();BR();zt();Z9();zi();Vn();Ar();dt=class n extends Sr{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===Sr.LIGHTFALLOFF_PHYSICAL}set usePhysicalLightFalloff(e){e!==this.usePhysicalLightFalloff&&(this._markAllSubMeshesAsTexturesDirty(),e?this._lightFalloff=Sr.LIGHTFALLOFF_PHYSICAL:this._lightFalloff=Sr.LIGHTFALLOFF_STANDARD)}get useGLTFLightFalloff(){return this._lightFalloff===Sr.LIGHTFALLOFF_GLTF}set useGLTFLightFalloff(e){e!==this.useGLTFLightFalloff&&(this._markAllSubMeshesAsTexturesDirty(),e?this._lightFalloff=Sr.LIGHTFALLOFF_GLTF:this._lightFalloff=Sr.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=ge.White(),this.useOnlyMetallicFromMetallicReflectanceTexture=!1,this.ambientColor=new ge(0,0,0),this.albedoColor=new ge(1,1,1),this.baseWeight=1,this.reflectivityColor=new ge(1,1,1),this.reflectionColor=new ge(1,1,1),this.emissiveColor=new ge(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=UR(this.getScene())}getClassName(){return"PBRMaterial"}clone(e,t=!0,i=""){let r=it.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=it.Parse(()=>new n(e.name,t),e,t,i);return e.stencil&&r.stencil.parse(e.stencil,t,i),Ee._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}};dt.PBRMATERIAL_OPAQUE=Sr.PBRMATERIAL_OPAQUE;dt.PBRMATERIAL_ALPHATEST=Sr.PBRMATERIAL_ALPHATEST;dt.PBRMATERIAL_ALPHABLEND=Sr.PBRMATERIAL_ALPHABLEND;dt.PBRMATERIAL_ALPHATESTANDBLEND=Sr.PBRMATERIAL_ALPHATESTANDBLEND;dt.DEFAULT_AO_ON_ANALYTICAL_LIGHTS=Sr.DEFAULT_AO_ON_ANALYTICAL_LIGHTS;P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"directIntensity",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"emissiveIntensity",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"environmentIntensity",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"specularIntensity",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"disableBumpMap",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"albedoTexture",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"baseWeightTexture",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"baseDiffuseRoughnessTexture",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"ambientTexture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"ambientTextureStrength",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"ambientTextureImpactOnAnalyticalLights",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesAndMiscDirty")],dt.prototype,"opacityTexture",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"reflectionTexture",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"emissiveTexture",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"reflectivityTexture",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"metallicTexture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"metallic",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"roughness",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"metallicF0Factor",void 0);P([vr(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"metallicReflectanceColor",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useOnlyMetallicFromMetallicReflectanceTexture",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"metallicReflectanceTexture",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"reflectanceTexture",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"microSurfaceTexture",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"bumpTexture",void 0);P([Bt(),le("_markAllSubMeshesAsTexturesDirty",null)],dt.prototype,"lightmapTexture",void 0);P([vr("ambient"),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"ambientColor",void 0);P([vr("albedo"),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"albedoColor",void 0);P([F("baseWeight"),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"baseWeight",void 0);P([F("baseDiffuseRoughness"),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"baseDiffuseRoughness",void 0);P([vr("reflectivity"),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"reflectivityColor",void 0);P([vr("reflection"),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"reflectionColor",void 0);P([vr("emissive"),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"emissiveColor",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"microSurface",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useLightmapAsShadowmap",void 0);P([F(),le("_markAllSubMeshesAsTexturesAndMiscDirty")],dt.prototype,"useAlphaFromAlbedoTexture",void 0);P([F(),le("_markAllSubMeshesAsTexturesAndMiscDirty")],dt.prototype,"forceAlphaTest",void 0);P([F(),le("_markAllSubMeshesAsTexturesAndMiscDirty")],dt.prototype,"alphaCutOff",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useSpecularOverAlpha",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useMicroSurfaceFromReflectivityMapAlpha",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useRoughnessFromMetallicTextureAlpha",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useRoughnessFromMetallicTextureGreen",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useMetallnessFromMetallicTextureBlue",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useAmbientOcclusionFromMetallicTextureRed",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useAmbientInGrayScale",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useAutoMicroSurfaceFromReflectivityMap",void 0);P([F()],dt.prototype,"usePhysicalLightFalloff",null);P([F()],dt.prototype,"useGLTFLightFalloff",null);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useRadianceOverAlpha",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useObjectSpaceNormalMap",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useParallax",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useParallaxOcclusion",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"parallaxScaleBias",void 0);P([F(),le("_markAllSubMeshesAsLightsDirty")],dt.prototype,"disableLighting",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"forceIrradianceInFragment",void 0);P([F(),le("_markAllSubMeshesAsLightsDirty")],dt.prototype,"maxSimultaneousLights",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"invertNormalMapX",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"invertNormalMapY",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"twoSidedLighting",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useAlphaFresnel",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useLinearAlphaFresnel",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"environmentBRDFTexture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"forceNormalForward",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"enableSpecularAntiAliasing",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useHorizonOcclusion",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useRadianceOcclusion",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],dt.prototype,"unlit",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],dt.prototype,"applyDecalMapAfterDetailMap",void 0);Ft("BABYLON.PBRMaterial",dt)});var J9={};tt(J9,{PBRMaterialLoadingAdapter:()=>LO});var LO,eK=M(()=>{zt();fD();Ge();LO=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!=ge.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 ge(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 ge(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 ge(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:ge.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 xue(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 un(i,r)}return null}var Tue,Aue,Kt,YR,tK=M(()=>{g5();Ge();zt();Mi();sl();R5();PR();I5();Vn();Vr();Zh();ki();KA();vm();Ci();oD();C5();aD();zl();Pt();_m();cD();hD();D5();sm();O5();Tue=new Jg(()=>Promise.resolve().then(()=>(B5(),U5))),Aue=new Jg(()=>Promise.resolve().then(()=>(W5(),k5))),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(()=>(z6(),H6))).OpenPBRMaterial,adapterClass:(await Promise.resolve().then(()=>(Y6(),X6))).OpenPBRMaterialLoadingAdapter}:this._pbrMaterialImpl={materialClass:(await Promise.resolve().then(()=>($9(),Q9))).PBRMaterial,adapterClass:(await Promise.resolve().then(()=>(eK(),J9))).PBRMaterialLoadingAdapter});let s=`${rs[rs.LOADING]} => ${rs[rs.READY]}`,a=`${rs[rs.LOADING]} => ${rs[rs.COMPLETE]}`;this._parent._startPerformanceCounter(s),this._parent._startPerformanceCounter(a),this._parent._setState(rs.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(rs.READY),this._skipStartAnimationStep||this._startAnimations(),r()}).then(f=>(this._parent._endPerformanceCounter(s),pe.SetImmediate(()=>{this._disposed||Promise.all(this._completePromises).then(()=>{this._parent._endPerformanceCounter(a),this._parent._setState(rs.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)&&ee.Warn(`Binary buffer length (${i.byteLength}) from JSON does not match chunk length (${e.bin.byteLength})`),this._bin=e.bin}else ee.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(y5.forEach((i,r)=>{var s;((s=this.parent.extensionOptions[r])==null?void 0:s.enabled)===!1?i.isGLTFExtension&&this.isExtensionUsed(r)&&ee.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&&ee.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 ip.AUTO:{this._babylonScene.useRightHandedSystem||(t.rotation=[0,1,0,0],t.scale=[1,1,-1],n._LoadTransform(t,this._rootBabylonMesh));break}case ip.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 Er&&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 cd.NONE:break;case cd.FIRST:{let e=this._getAnimationGroups();e.length!==0&&e[0].start(!0);break}case cd.ALL:{let e=this._getAnimationGroups();for(let t of e)t.start(!0);break}default:{ee.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 ei(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=dD(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 ei(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?Ee.CounterClockWiseSideOrientation:Ee.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,p=>{d.material=p}))}}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 mn(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=xue(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 ud(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?j.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 LR(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)&&(ee.Warn(`${e}/skeleton: Overriding with nearest common ancestor as skeleton node is not a common root`),t.skeleton=s.index)}else ee.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&&ee.Warn(`/skins/${t.index}/skeleton: Skeleton node is not a common root`));let o=t.joints.indexOf(e.index);return s=new Ua(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=j.Identity(),s=i._index;t&&s!==-1&&(j.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?j.FromArray(e.matrix):j.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 Rc(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=mt.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||Tue.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():Aue.value.then(()=>{var d,u,m,p;let f;switch(l){case"translation":{f=(d=Qg("/nodes/{}/translation"))==null?void 0:d.interpolation;break}case"rotation":{f=(u=Qg("/nodes/{}/rotation"))==null?void 0:u.interpolation;break}case"scale":{f=(m=Qg("/nodes/{}/scale"))==null?void 0:m.interpolation;break}case"weights":{f=(p=Qg("/nodes/{}/weights"))==null?void 0:p.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 p=m.getStride(d),_=f.input,g=f.output,v=new Array(_.length),x=0;switch(f.interpolation){case"STEP":{for(let A=0;A<_.length;A++){let E=m.getValue(d,g,x,1);x+=p,v[A]={frame:_[A]*o,value:E,interpolation:1}}break}case"CUBICSPLINE":{for(let A=0;A<_.length;A++){let E=m.getValue(d,g,x,l);x+=p;let S=m.getValue(d,g,x,1);x+=p;let R=m.getValue(d,g,x,l);x+=p,v[A]={frame:_[A]*o,inTangent:E,value:S,outTangent:R}}break}case"LINEAR":{for(let A=0;A<_.length;A++){let E=m.getValue(d,g,x,1);x+=p,v[A]={frame:_[A]*o,value:E}}break}}if(x>0){let A=`${i.name||`animation${i.index}`}_channel${r.index}_${h}`,E=m.buildAnimations(d,A,o,v);for(let S of E)h++,a(S.babylonAnimatable,S.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),p=r*o.count,_;if(t.componentType===5126&&!t.normalized)_=n._GetTypedArray(`${e}/sparse/values`,t.componentType,u,o.values.byteOffset,p);else{let v=n._GetTypedArray(`${e}/sparse/values`,t.componentType,u,o.values.byteOffset,p);_=new i(p),L.ForEach(v,0,s,r,t.componentType,_.length,t.normalized||!1,(x,A)=>{_[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 so(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=ge.FromArray(t.baseColorFactor),s.geometryOpacity=t.baseColorFactor[3]):s.baseColor=ge.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?ge.FromArray(t.emissiveFactor):new ge(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,p;let o=this._loadSampler(`/samplers/${t.index}`,t),l=new Array,c=new CR;this._babylonScene._blockEntityCollection=!!this._assetContainer;let f={noMipmap:o.noMipMaps,invertY:!1,samplingMode:o.samplingMode,onLoad:()=>{this._disposed||c.resolve()},onError:(_,g)=>{this._disposed||c.reject(new Error(`${e}: ${g&&g.message?g.message:_||"Failed to load texture"}`))},mimeType:(p=i.mimeType)!=null?p:pU((m=i.uri)!=null?m:""),loaderOptions:s,useSRGBBuffer:!!a&&this._parent.useSRGBBuffers},h=new _e(null,this._babylonScene,f);h._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,l.push(c.promise);let d=i.uri&&!ff(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(_=>{let g=`data:${this._uniqueRootUrl}${u}`;h.updateURL(g,_);let v=h.getInternalTexture();v&&(v.label=i.name)})),h.wrapU=o.wrapU,h.wrapV=o.wrapV,r(h),this._parent.useGltfTextureNames){let _=i.name||d||`image${i.index}`;h.name=_}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(ff(i)){let s=new Uint8Array(hf(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 am(`${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 _e.CLAMP_ADDRESSMODE;case 33648:return _e.MIRROR_ADDRESSMODE;case 10497:return _e.WRAP_ADDRESSMODE;default:return ee.Warn(`${e}: Invalid value (${t})`),_e.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 _e.LINEAR_NEAREST;case 9729:return _e.LINEAR_LINEAR;case 9984:return _e.LINEAR_NEAREST_MIPNEAREST;case 9985:return _e.LINEAR_LINEAR_MIPNEAREST;case 9986:return _e.LINEAR_NEAREST_MIPLINEAR;case 9987:return _e.LINEAR_LINEAR_MIPLINEAR;default:return ee.Warn(`${e}/minFilter: Invalid value (${r})`),_e.LINEAR_LINEAR_MIPLINEAR}else switch(i!==9728&&ee.Warn(`${e}/magFilter: Invalid value (${i})`),r){case 9728:return _e.NEAREST_NEAREST;case 9729:return _e.NEAREST_LINEAR;case 9984:return _e.NEAREST_NEAREST_MIPNEAREST;case 9985:return _e.NEAREST_LINEAR_MIPNEAREST;case 9986:return _e.NEAREST_NEAREST_MIPLINEAR;case 9987:return _e.NEAREST_LINEAR_MIPLINEAR;default:return ee.Warn(`${e}/minFilter: Invalid value (${r})`),_e.NEAREST_NEAREST_MIPNEAREST}}static _GetTypedArrayConstructor(e,t){try{return lC(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?(ee.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 pe.IsBase64(e)||e.indexOf("..")===-1}static _GetDrawMode(e,t){switch(t==null&&(t=4),t){case 0:return Ee.PointListDrawMode;case 1:return Ee.LineListDrawMode;case 2:return Ee.LineLoopDrawMode;case 3:return Ee.LineStripDrawMode;case 4:return Ee.TriangleFillMode;case 5:return Ee.TriangleStripDrawMode;case 6:return Ee.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)}};YR.DefaultSampler={index:-1};Kf._CreateGLTF2Loader=n=>new YR(n)});var OO,DO,iK=M(()=>{cD();OO="ExtrasAsMetadata",DO=class{_assignExtras(e,t){if(t.extras&&Object.keys(t.extras).length>0){let i=e.metadata=e.metadata||{},r=i.gltf=i.gltf||{};r.extras=t.extras}}constructor(e){this.name=OO,this.enabled=!0,this._loader=e}dispose(){this._loader=null}loadNodeAsync(e,t,i){return this._loader.loadNodeAsync(e,t,r=>{this._assignExtras(r,t),i(r)})}loadCameraAsync(e,t,i){return this._loader.loadCameraAsync(e,t,r=>{this._assignExtras(r,t),i(r)})}createMaterial(e,t,i){let r=this._loader.createMaterial(e,t,i);return this._assignExtras(r,t),r}loadAnimationAsync(e,t){return this._loader.loadAnimationAsync(e,t).then(i=>(this._assignExtras(i,t),i))}};Zg(OO);OR(OO,!1,n=>new DO(n))});var KR,rK=M(()=>{KR={name:"obj",extensions:".obj"}});var md,nK=M(()=>{zt();Vr();Ac();md=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 ke(u,e),l._parentContainer=r,e._blockEntityCollection=!1;else if(d==="kd"&&l)o=u.split(a,3).map(parseFloat),l.diffuseColor=ge.FromArray(o);else if(d==="ka"&&l)o=u.split(a,3).map(parseFloat),l.ambientColor=ge.FromArray(o);else if(d==="ks"&&l)o=u.split(a,3).map(parseFloat),l.specularColor=ge.FromArray(o);else if(d==="ke"&&l)o=u.split(a,3).map(parseFloat),l.emissiveColor=ge.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),p=m.indexOf("-bm"),_=null;p>=0&&(_=m[p+1],m.splice(p,2)),l.bumpTexture=n._GetTexture(i,m.join(" "),e),l.bumpTexture&&_!==null&&(l.bumpTexture.level=parseFloat(_))}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 _e(r,i,!1,n.INVERT_TEXTURE_Y)}};md.INVERT_TEXTURE_Y=!0});var jr,sK=M(()=>{ki();Ac();zt();Ge();KA();Ci();mr();Pt();jr=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 p=parseFloat(m[4]),_=parseFloat(m[5]),g=parseFloat(m[6]);this._colors.push(new lt(p>1?p/255:p,_>1?_/255:_,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 Fe(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 p of m)this._extColors.push(p);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 p={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(p),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 p={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(p),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)||ee.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 ke(mn.RandomId(),i),d.pointsCloud=!0,this._materialNameFromObj=d.name,this._normals.length||(d.disableLighting=!0,d.emissiveColor=ge.White()))}this._meshesFromObj.push({name:mn.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;--p)if(this._meshesFromObj[p].isObject&&this._meshesFromObj[p]._babylonMesh){u.parent=this._meshesFromObj[p]._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 Ce;if(m.indices=this._handledMesh.indices,m.positions=this._handledMesh.positions,this._loadingOptions.computeNormals||!this._handledMesh.normals){let p=new Array;Ce.ComputeNormals(this._handledMesh.positions,this._handledMesh.indices,p),m.normals=p}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)}}};jr.ObjectDescriptor=/^o/;jr.GroupDescriptor=/^g/;jr.MtlLibGroupDescriptor=/^mtllib /;jr.UseMtlDescriptor=/^usemtl /;jr.SmoothDescriptor=/^s /;jr.VertexPattern=/^v(\s+[\d|.|+|\-|e|E]+){3,7}/;jr.NormalPattern=/^vn(\s+[\d|.|+|\-|e|E]+)( +[\d|.|+|\-|e|E]+)( +[\d|.|+|\-|e|E]+)/;jr.UVPattern=/^vt(\s+[\d|.|+|\-|e|E]+)( +[\d|.|+|\-|e|E]+)/;jr.FacePattern1=/^f\s+(([\d]{1,}[\s]?){3,})+/;jr.FacePattern2=/^f\s+((([\d]{1,}\/[\d]{1,}[\s]?){3,})+)/;jr.FacePattern3=/^f\s+((([\d]{1,}\/[\d]{1,}\/[\d]{1,}[\s]?){3,})+)/;jr.FacePattern4=/^f\s+((([\d]{1,}\/\/[\d]{1,}[\s]?){3,})+)/;jr.FacePattern5=/^f\s+(((-[\d]{1,}\/-[\d]{1,}\/-[\d]{1,}[\s]?){3,})+)/;jr.LinePattern1=/^l\s+(([\d]{1,}[\s]?){2,})+/;jr.LinePattern2=/^l\s+((([\d]{1,}\/[\d]{1,}[\s]?){2,})+)/;jr.LinePattern3=/^l\s+((([\d]{1,}\/[\d]{1,}\/[\d]{1,}[\s]?){2,})+)/});var aK={};tt(aK,{OBJFileLoader:()=>ia});var ia,NO=M(()=>{Ge();Mi();ep();Kg();rK();nK();sK();Ac();ia=class n{static get INVERT_TEXTURE_Y(){return md.INVERT_TEXTURE_Y}static set INVERT_TEXTURE_Y(e){md.INVERT_TEXTURE_Y=e}constructor(e){this.name=KR.name,this.extensions=KR.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;pe.LoadFile(s,i,void 0,void 0,!1,(a,o)=>{r(s,o)})}createPlugin(e){return new n(e[KR.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 ul(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 md,o=[],l=[];i=i.replace(/#.*$/gm,"").trim(),new jr(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;)_.push(g),p=g+1;if(g===-1&&_.length===0)a.materials[m].dispose();else for(let v=0;v<_.length;v++){let x=l[_[v]],A=a.materials[m];x.material=A,x.getTotalIndices()||(A.pointsCloud=!0)}}h()}catch(m){pe.Warn(`Error processing MTL file: '${s}'`),this._loadingOptions.materialLoadingFailsSilently?h():d(m)}},(u,m)=>{pe.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 p=(u=d.material)!=null?u:new ke(d.name+"_line",t);p.getBindedMeshes().filter(g=>!h(g)).length>0&&(p=(m=p.clone(p.name+"_line"))!=null?m:p),p.wireframe=!0,d.material=p,d._internalMetadata&&(d._internalMetadata._isLine=void 0)}}),l})}};ia.OPTIMIZE_WITH_UV=!0;ia.INVERT_Y=!1;ia.IMPORT_VERTEX_COLORS=!1;ia.COMPUTE_NORMALS=!1;ia.OPTIMIZE_NORMALS=!1;ia.UV_SCALING=new Fe(1,1);ia.SKIP_MATERIALS=!1;ia.MATERIAL_LOADING_FAILS_SILENTLY=!0;ia.USE_LEGACY_BEHAVIOR=!1;Yf(new ia)});function Rue(n){let e=n.trim();return/^https?:\/\//i.test(e)||/^wss?:\/\//i.test(e)||/^\/\//.test(e)}function wO(n,e){if(Rue(n))throw new Error(`[AI3D] Babylon ${e} is limited to local vault resources. Refused remote URL: ${n}`);return n}function jR(n){throw new Error(`[AI3D] Babylon script loading is disabled in this plugin build. Refused script URL: ${n}`)}function lK(){if(oK)return;let n=i=>wO(i,"asset loading"),e=i=>wO(i,"script loading"),t=()=>-1;pe.PreprocessUrl=n,pe.ScriptPreprocessUrl=e,pe.DefaultRetryStrategy=t,pe.LoadScript=(i,r,s)=>{try{e(i),jR(i)}catch(a){s==null||s(a instanceof Error?a.message:String(a),a);return}r==null||r()},pe.LoadScriptAsync=async i=>{e(i),jR(i)},pe.LoadBabylonScript=(i,r,s)=>{try{jR(i)}catch(a){s==null||s(a instanceof Error?a.message:String(a),a);return}r()},pe.LoadBabylonScriptAsync=async i=>{jR(i)},Gi.PreprocessUrl=n,Gi.ScriptPreprocessUrl=e,Gi.DefaultRetryStrategy=t,Mr.CustomRequestModifiers.push((i,r)=>wO(r,"request")),oK=!0}var oK,cK=M(()=>{"use strict";zl();Mi();Bh();oK=!1});function qR(n,e){if(e.byteLength<84)throw new Error(`STL buffer too small: ${e.byteLength} bytes (need 84+)`);if(e.byteLength>=6){let p=new TextDecoder().decode(new Uint8Array(e,0,6));if(p==="solid "||p===`solid -`){let _=new TextDecoder().decode(new Uint8Array(e,0,Math.min(e.byteLength,800)));if(_.includes("facet")||_.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,B=p*12;l[B+0]=V,l[B+1]=N,l[B+2]=w,l[B+3]=1,l[B+4]=V,l[B+5]=N,l[B+6]=w,l[B+7]=1,l[B+8]=V,l[B+9]=N,l[B+10]=w,l[B+11]=1}let x=a[_+3]-a[_+0],A=a[_+4]-a[_+1],E=a[_+5]-a[_+2],S=a[_+6]-a[_+0],R=a[_+7]-a[_+1],I=a[_+8]-a[_+2],C=A*I-E*R,y=E*S-x*I,D=x*R-A*S,O=Math.sqrt(C*C+y*y+D*D);O>1e-8?(C/=O,y/=O,D/=O):(C=0,y=0,D=1,f++),o[_+0]=C,o[_+1]=y,o[_+2]=D,o[_+3]=C,o[_+4]=y,o[_+5]=D,o[_+6]=C,o[_+7]=y,o[_+8]=D,c[g+0]=_/3+0,c[g+1]=_/3+1,c[g+2]=_/3+2}f>0&&console.warn(`[AI3D STL] ${f} degenerate triangles with zero-area normals`);let d=new Ce;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 ke("stl-mat",n);return m.backFaceCulling=!1,m.specularColor=new ge(.3,.3,.3),m.specularPower=32,l?(m.diffuseColor=new ge(1,1,1),m.emissiveColor=new ge(.05,.05,.05),m.vertexColorEnabled=!0):(m.diffuseColor=new ge(.85,.85,.85),m.emissiveColor=new ge(.1,.1,.1)),u.material=m,u}function fK(n,e){return qR(n,e)}function hK(n){n(bue)}var bue,FO=M(()=>{"use strict";Ci();Kg();mr();Ac();zt();bue={name:"stl",extensions:".stl",importMeshAsync(n,e,t){return Promise.resolve().then(()=>({meshes:[qR(e,t)],particleSystems:[],skeletons:[],animationGroups:[],transformNodes:[],geometries:[],lights:[],spriteManagers:[]}))},loadAsync(n,e){return Promise.resolve().then(()=>{qR(n,e)})},loadAssetContainerAsync(n,e){return Promise.resolve().then(()=>{let t=qR(n,e),i=new ul(n);return i.meshes.push(t),t.material&&i.materials.push(t.material),i})},canDirectLoad(){return!1},rewriteRootURL(n){return n}}});function Iue(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 fp(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 ZR(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 Mue(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(p=>p.name==="x"),u=l.properties.some(p=>p.name==="red"||p.name==="r"),m=l.properties.filter(p=>!p.isList);for(let p=0;p0){c.indices=o.indices;let d=new Array(l.length).fill(0),u=o.indices,m=l.length-3;for(let p=0;pm||g>m||v>m)continue;let x=l[_],A=l[_+1],E=l[_+2],S=l[g]-x,R=l[g+1]-A,I=l[g+2]-E,C=l[v]-x,y=l[v+1]-A,D=l[v+2]-E,O=R*D-I*y,V=I*C-S*D,N=S*y-R*C;d[_]+=O,d[_+1]+=V,d[_+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 p=0;p0&&(d[p]/=_,d[p+1]/=_,d[p+2]/=_)}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 ke("ply-mat",n);return h.backFaceCulling=!1,o.colors.length>0?(c.colors=o.colors,c.applyToMesh(f),h.diffuseColor=new ge(1,1,1),h.vertexColorEnabled=!0):h.diffuseColor=new ge(.7,.7,.7),f.material=h,f}function dK(n,e){return QR(n,e)}function uK(n){n(yue)}var yue,UO=M(()=>{"use strict";Ci();Kg();mr();Ac();zt();yue={name:"ply",extensions:".ply",importMeshAsync(n,e,t){return Promise.resolve().then(()=>({meshes:[QR(e,t)],particleSystems:[],skeletons:[],animationGroups:[],transformNodes:[],geometries:[],lights:[],spriteManagers:[]}))},loadAsync(n,e){return Promise.resolve().then(()=>{QR(n,e)})},loadAssetContainerAsync(n,e){return Promise.resolve().then(()=>{let t=QR(n,e),i=new ul(n);return i.meshes.push(t),t.material&&i.materials.push(t.material),i})},canDirectLoad(){return!1},rewriteRootURL(n){return n}}});async function rv(){mK||(lK(),hK(Yf),uK(Yf),mK=!0)}var mK,nv=M(()=>{"use strict";aD();tK();iK();NO();ep();cK();FO();UO();mK=!1});function sv(n){return Math.floor(n.getTotalIndices()/3)}function pd(n){return n.getTotalVertices()}function _d(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),pd(r)>0||r.getTotalIndices()>0))}function pK(n){let e=Array.from(n),t=new Set(e);return e.filter(i=>{let r=i.parent;return!r||!t.has(r)})}function BO(n){n.computeWorldMatrix(!0);let e=n.getBoundingInfo().boundingBox;return D_(Ht(e.minimumWorld),Ht(e.maximumWorld))}function hp(n){let e=null;for(let t of n)!t||t.isDisposed()||(e=R3(e,BO(t)));return e}function $R(n,e=[]){var t;return(t=hp(_d(n,e)))!=null?t:BO(n)}function JR(n,e,t,i={}){return $S({rootName:n,boundingSize:Ur(e),meshes:t.map(r=>({triangleCount:sv(r),vertexCount:pd(r),materialKeys:r.material?[r.material.name]:[]})),splatCount:i.splatCount,resourceWarnings:i.resourceWarnings})}function _K(n){var t,i;let e=BO(n);return Ih({name:n.name||`mesh-${n.uniqueId}`,triangleCount:sv(n),vertexCount:pd(n),materialName:(i=(t=n.material)==null?void 0:t.name)!=null?i:null,boundingSize:Ur(e),center:fn(e)})}var eb=M(()=>{"use strict";rf();Vs();N_()});function Zf(n){return Zr(n)}function gK(n,e,t,i=[]){uT(new tb(n,i),e,t)}function VO(n,e=[]){mT(new tb(n,e))}var tb,vK=M(()=>{"use strict";Ge();rf();Vs();yM();eb();tb=class{constructor(e,t=[]){this.rootMesh=e,this.loadedMeshes=t}getParts(){return _d(this.rootMesh,this.loadedMeshes)}getRootCenter(){return fn($R(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:Zf(t._previewExplodeState.originalPosition),originalCenter:Zf(t._previewExplodeState.originalCenter)}:t!=null&&t._originalPos&&(t!=null&&t._originalCenter)?{originalPosition:Zf(t._originalPos),originalCenter:Zf(t._originalCenter)}:null}setPartState(e,t){(!e.metadata||typeof e.metadata!="object")&&(e.metadata={});let i=e.metadata;i._previewExplodeState={originalPosition:Zf(t.originalPosition),originalCenter:Zf(t.originalCenter)},i._originalPos=Zf(t.originalPosition),i._originalCenter=Zf(t.originalCenter)}}});var ib={};tt(ib,{glowBlurPostProcessPixelShaderWGSL:()=>Pue});var GO,EK,Pue,rb=M(()=>{G();GO="glowBlurPostProcessPixelShader",EK=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_2d;uniform screenSize: vec2f;uniform direction: vec2f;uniform blurWidth: f32;fn getLuminance(color: vec3f)->f32 +`;A.ShadersStore[OO]||(A.ShadersStore[OO]=nK);Fue={name:OO,shader:nK}});var cp,NO,ZR,wO,Sr,oK=M(()=>{Gt();Vt();Pt();lo();HR();Cs();Ge();ki();n7();gx();zt();vx();sg();Gn();Na();bg();Da();cy();Lf();s7();a7();o7();l7();c7();$P();ll();Ig();Vn();Ex();Sx();Tx();Ax();cp={effect:null,subMesh:null},NO=class extends jm(Km(br)){},ZR=class extends Xm(NO){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}},wO=class extends qm(dl){},Sr=class n extends wO{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=pe.White(),this._useOnlyMetallicFromMetallicReflectanceTexture=!1,this._metallicReflectanceTexture=null,this._reflectanceTexture=null,this._microSurfaceTexture=null,this._bumpTexture=null,this._lightmapTexture=null,this._ambientColor=new pe(0,0,0),this._albedoColor=new pe(1,1,1),this._baseWeight=1,this._baseDiffuseRoughness=null,this._reflectivityColor=new pe(1,1,1),this._reflectionColor=new pe(1,1,1),this._emissiveColor=new pe(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 Ui(16),this._globalAmbientColor=new pe(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 Pr(this),this.clearCoat=new an(this),this.iridescence=new Fs(this),this.anisotropy=new bc(this),this.sheen=new ia(this),this.subSurface=new Ai(this),this.detailMap=new wa(this),this._attachImageProcessingConfiguration(null),this.getRenderTargetTextures=()=>(this._renderTargets.reset(),ce.ReflectionTextureEnabled&&this._reflectionTexture&&this._reflectionTexture.isRenderTarget&&this._renderTargets.push(this._reflectionTexture),this._eventInfo.renderTargets=this._renderTargets,this._callbackPluginEventFillRenderTargetTextures(this._eventInfo),this._renderTargets),this._environmentBRDFTexture=WR(this.getScene()),this.prePassConfiguration=new Ns}get hasRenderTargetTextures(){return ce.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 ZR(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&&ce.DiffuseTextureEnabled&&!this._albedoTexture.isReadyOrNotBlocking()||this._baseWeightTexture&&ce.BaseWeightTextureEnabled&&!this._baseWeightTexture.isReadyOrNotBlocking()||this._baseDiffuseRoughnessTexture&&ce.BaseDiffuseRoughnessTextureEnabled&&!this._baseDiffuseRoughnessTexture.isReadyOrNotBlocking()||this._ambientTexture&&ce.AmbientTextureEnabled&&!this._ambientTexture.isReadyOrNotBlocking()||this._opacityTexture&&ce.OpacityTextureEnabled&&!this._opacityTexture.isReadyOrNotBlocking())return!1;let u=this._getReflectionTexture();if(u&&ce.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&&ce.LightmapTextureEnabled&&!this._lightmapTexture.isReadyOrNotBlocking()||this._emissiveTexture&&ce.EmissiveTextureEnabled&&!this._emissiveTexture.isReadyOrNotBlocking())return!1;if(ce.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&&ce.BumpTextureEnabled&&!this._disableBumpMap&&!this._bumpTexture.isReady()||this._environmentBRDFTexture&&ce.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;kt&&(kt.PrepareUniforms(m,i),kt.PrepareSamplers(p,i)),Nm({uniformsNames:m,uniformBuffersNames:_,samplers:p,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(),T=c.createEffect(u,{attributes:d,uniformsNames:m,uniformBuffersNames:_,samplers:p,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(()=>(u7(),d7)),Promise.resolve().then(()=>(n9(),r9))]):await Promise.all([Promise.resolve().then(()=>(f9(),c9)),Promise.resolve().then(()=>(aK(),sK))]),this._shadersLoaded=!0}},c);return this._eventInfo.customCode=void 0,T}_prepareDefines(e,t,i,r=null,s=null){let a=t.hasThinInstances,o=this.getScene(),l=o.getEngine();Cm(o,e,i,!0,this._maxSimultaneousLights,this._disableLighting),i._needNormals=!0,Lm(o,i);let c=this.needAlphaBlendingForMesh(e)&&this.getScene().useOrderIndependentTransparency;if(Om(o,i,this.canRenderToMRT&&!c),Dm(o,i,c),zn.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&&ce.DiffuseTextureEnabled?(ni(this._albedoTexture,i,"ALBEDO"),i.GAMMAALBEDO=this._albedoTexture.gammaSpace):i.ALBEDO=!1,this._baseWeightTexture&&ce.BaseWeightTextureEnabled?ni(this._baseWeightTexture,i,"BASE_WEIGHT"):i.BASE_WEIGHT=!1,this._baseDiffuseRoughnessTexture&&ce.BaseDiffuseRoughnessTextureEnabled?ni(this._baseDiffuseRoughnessTexture,i,"BASE_DIFFUSE_ROUGHNESS"):i.BASE_DIFFUSE_ROUGHNESS=!1,this._ambientTexture&&ce.AmbientTextureEnabled?(ni(this._ambientTexture,i,"AMBIENT"),i.AMBIENTINGRAYSCALE=this._useAmbientInGrayScale):i.AMBIENT=!1,this._opacityTexture&&ce.OpacityTextureEnabled?(ni(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;xf(o,f,i,this.realTimeFiltering,this.realTimeFilteringQuality,!h),this._lightmapTexture&&ce.LightmapTextureEnabled?(ni(this._lightmapTexture,i,"LIGHTMAP"),i.USELIGHTMAPASSHADOWMAP=this._useLightmapAsShadowmap,i.GAMMALIGHTMAP=this._lightmapTexture.gammaSpace,i.RGBDLIGHTMAP=this._lightmapTexture.isRGBD):i.LIGHTMAP=!1,this._emissiveTexture&&ce.EmissiveTextureEnabled?(ni(this._emissiveTexture,i,"EMISSIVE"),i.GAMMAEMISSIVE=this._emissiveTexture.gammaSpace):i.EMISSIVE=!1,ce.SpecularTextureEnabled?(this._metallicTexture?(ni(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?(ni(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?(ni(this._metallicReflectanceTexture,i,"METALLIC_REFLECTANCE"),i.METALLIC_REFLECTANCE_GAMMA=this._metallicReflectanceTexture.gammaSpace):i.METALLIC_REFLECTANCE=!1,this._reflectanceTexture&&(!this._metallicReflectanceTexture||this._metallicReflectanceTexture&&this._useOnlyMetallicFromMetallicReflectanceTexture)?(ni(this._reflectanceTexture,i,"REFLECTANCE"),i.REFLECTANCE_GAMMA=this._reflectanceTexture.gammaSpace):i.REFLECTANCE=!1):(i.METALLIC_REFLECTANCE=!1,i.REFLECTANCE=!1),this._microSurfaceTexture?ni(this._microSurfaceTexture,i,"MICROSURFACEMAP"):i.MICROSURFACEMAP=!1):(i.REFLECTIVITY=!1,i.MICROSURFACEMAP=!1),l.getCaps().standardDerivatives&&this._bumpTexture&&ce.BumpTextureEnabled&&!this._disableBumpMap?(ni(this._bumpTexture,i,"BUMP"),this._useParallax&&this._albedoTexture&&ce.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&&ce.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&&(Im(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),ym(o,l,this,i,!!r,s,a),this._eventInfo.defines=i,this._eventInfo.mesh=e,this._callbackPluginEventPrepareDefinesBeforeAttributes(this._eventInfo),Pm(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 ZR(this._eventInfo.defineNames),o=this._prepareEffect(e,e,a,void 0,void 0,r.useInstances,r.clipPlane);this._onEffectCreatedObservable&&(cp.effect=o,cp.subMesh=null,this._onEffectCreatedObservable.notifyObservers(cp)),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),wm(e,!0,!0,!0,!0,!0),super.buildUniformLayout()}bindForSubMesh(e,t,i){var d,u,m,p;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),zn.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);Ps(t,this._activeEffect,this.prePassConfiguration),this._vertexPullingMetadata&&Of(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&&ce.DiffuseTextureEnabled&&(h.updateFloat2("vAlbedoInfos",this._albedoTexture.coordinatesIndex,this._albedoTexture.level),si(this._albedoTexture,h,"albedo")),this._baseWeightTexture&&ce.BaseWeightTextureEnabled&&(h.updateFloat2("vBaseWeightInfos",this._baseWeightTexture.coordinatesIndex,this._baseWeightTexture.level),si(this._baseWeightTexture,h,"baseWeight")),this._baseDiffuseRoughnessTexture&&ce.BaseDiffuseRoughnessTextureEnabled&&(h.updateFloat2("vBaseDiffuseRoughnessInfos",this._baseDiffuseRoughnessTexture.coordinatesIndex,this._baseDiffuseRoughnessTexture.level),si(this._baseDiffuseRoughnessTexture,h,"baseDiffuseRoughness")),this._ambientTexture&&ce.AmbientTextureEnabled&&(h.updateFloat4("vAmbientInfos",this._ambientTexture.coordinatesIndex,this._ambientTexture.level,this._ambientTextureStrength,this._ambientTextureImpactOnAnalyticalLights),si(this._ambientTexture,h,"ambient")),this._opacityTexture&&ce.OpacityTextureEnabled&&(h.updateFloat2("vOpacityInfos",this._opacityTexture.coordinatesIndex,this._opacityTexture.level),si(this._opacityTexture,h,"opacity")),this._emissiveTexture&&ce.EmissiveTextureEnabled&&(h.updateFloat2("vEmissiveInfos",this._emissiveTexture.coordinatesIndex,this._emissiveTexture.level),si(this._emissiveTexture,h,"emissive")),this._lightmapTexture&&ce.LightmapTextureEnabled&&(h.updateFloat2("vLightmapInfos",this._lightmapTexture.coordinatesIndex,this._lightmapTexture.level),si(this._lightmapTexture,h,"lightmap")),ce.SpecularTextureEnabled&&(this._metallicTexture?(h.updateFloat3("vReflectivityInfos",this._metallicTexture.coordinatesIndex,this._metallicTexture.level,this._ambientTextureStrength),si(this._metallicTexture,h,"reflectivity")):this._reflectivityTexture&&(h.updateFloat3("vReflectivityInfos",this._reflectivityTexture.coordinatesIndex,this._reflectivityTexture.level,1),si(this._reflectivityTexture,h,"reflectivity")),this._metallicReflectanceTexture&&(h.updateFloat2("vMetallicReflectanceInfos",this._metallicReflectanceTexture.coordinatesIndex,this._metallicReflectanceTexture.level),si(this._metallicReflectanceTexture,h,"metallicReflectance")),this._reflectanceTexture&&s.REFLECTANCE&&(h.updateFloat2("vReflectanceInfos",this._reflectanceTexture.coordinatesIndex,this._reflectanceTexture.level),si(this._reflectanceTexture,h,"reflectance")),this._microSurfaceTexture&&(h.updateFloat2("vMicroSurfaceSamplerInfos",this._microSurfaceTexture.coordinatesIndex,this._microSurfaceTexture.level),si(this._microSurfaceTexture,h,"microSurfaceSampler"))),this._bumpTexture&&o.getCaps().standardDerivatives&&ce.BumpTextureEnabled&&!this._disableBumpMap&&(h.updateFloat3("vBumpInfos",this._bumpTexture.coordinatesIndex,this._bumpTexture.level,this._parallaxScaleBias),si(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)),Sm(r,s,h,this._reflectionColor,f,this.realTimeFiltering,!0,!0,!0,!0,!0)),this.pointsCloud&&h.updateFloat("pointSize",this.pointSize),s.METALLICWORKFLOW){Sn.Color4[0].r=this._metallic===void 0||this._metallic===null?1:this._metallic,Sn.Color4[0].g=this._roughness===void 0||this._roughness===null?1:this._roughness;let _=(u=(d=this.subSurface)==null?void 0:d._indexOfRefraction)!=null?u:1.5,g=1;Sn.Color4[0].b=_;let v=Math.pow((_-g)/(_+g),2);Sn.Color4[0].a=v,h.updateDirectColor4("vReflectivityColor",Sn.Color4[0]),h.updateColor4("vMetallicReflectanceFactors",this._metallicReflectanceColor,this._metallicF0Factor)}else h.updateColor4("vReflectivityColor",this._reflectivityColor,this._microSurface);h.updateColor3("vEmissiveColor",ce.EmissiveTextureEnabled?this._emissiveColor:pe.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&&ce.DiffuseTextureEnabled&&h.setTexture("albedoSampler",this._albedoTexture),this._baseWeightTexture&&ce.BaseWeightTextureEnabled&&h.setTexture("baseWeightSampler",this._baseWeightTexture),this._baseDiffuseRoughnessTexture&&ce.BaseDiffuseRoughnessTextureEnabled&&h.setTexture("baseDiffuseRoughnessSampler",this._baseDiffuseRoughnessTexture),this._ambientTexture&&ce.AmbientTextureEnabled&&h.setTexture("ambientSampler",this._ambientTexture),this._opacityTexture&&ce.OpacityTextureEnabled&&h.setTexture("opacitySampler",this._opacityTexture),tx(r,s,h,f,this.realTimeFiltering),s.ENVIRONMENTBRDF&&h.setTexture("environmentBrdfSampler",this._environmentBRDFTexture),this._emissiveTexture&&ce.EmissiveTextureEnabled&&h.setTexture("emissiveSampler",this._emissiveTexture),this._lightmapTexture&&ce.LightmapTextureEnabled&&h.setTexture("lightmapSampler",this._lightmapTexture),ce.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&&ce.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),Bn(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!==Jt.FOGMODE_NONE||f||this.subSurface.refractionTexture||t.receiveShadows||s.PREPASS||s.CLUSTLIGHT_BATCH)&&this.bindView(a),Tf(r,t,this._activeEffect,!0),s.NUM_MORPH_INFLUENCERS&&Un(t,this._activeEffect),s.BAKED_VERTEX_ANIMATION_TEXTURE&&((p=t.bakedVertexAnimationManager)==null||p.bind(a,s.INSTANCES)),this._imageProcessingConfiguration.bind(this._activeEffect),Sf(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(),(p=this._reflectanceTexture)==null||p.dispose(),(_=this._microSurfaceTexture)==null||_.dispose()),this._renderTargets.dispose(),this._imageProcessingConfiguration&&this._imageProcessingObserver&&this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver),super.dispose(e,t)}};Sr.PBRMATERIAL_OPAQUE=Ee.MATERIAL_OPAQUE;Sr.PBRMATERIAL_ALPHATEST=Ee.MATERIAL_ALPHATEST;Sr.PBRMATERIAL_ALPHABLEND=Ee.MATERIAL_ALPHABLEND;Sr.PBRMATERIAL_ALPHATESTANDBLEND=Ee.MATERIAL_ALPHATESTANDBLEND;Sr.DEFAULT_AO_ON_ANALYTICAL_LIGHTS=0;Sr.LIGHTFALLOFF_PHYSICAL=0;Sr.LIGHTFALLOFF_GLTF=1;Sr.LIGHTFALLOFF_STANDARD=2;Sr.ForceGLSL=!1;P([le("_markAllSubMeshesAsMiscDirty")],Sr.prototype,"debugMode",void 0)});var lK={};tt(lK,{PBRMaterial:()=>dt});var dt,cK=M(()=>{Gt();Vt();HR();zt();oK();zi();Gn();xr();dt=class n extends Sr{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===Sr.LIGHTFALLOFF_PHYSICAL}set usePhysicalLightFalloff(e){e!==this.usePhysicalLightFalloff&&(this._markAllSubMeshesAsTexturesDirty(),e?this._lightFalloff=Sr.LIGHTFALLOFF_PHYSICAL:this._lightFalloff=Sr.LIGHTFALLOFF_STANDARD)}get useGLTFLightFalloff(){return this._lightFalloff===Sr.LIGHTFALLOFF_GLTF}set useGLTFLightFalloff(e){e!==this.useGLTFLightFalloff&&(this._markAllSubMeshesAsTexturesDirty(),e?this._lightFalloff=Sr.LIGHTFALLOFF_GLTF:this._lightFalloff=Sr.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=pe.White(),this.useOnlyMetallicFromMetallicReflectanceTexture=!1,this.ambientColor=new pe(0,0,0),this.albedoColor=new pe(1,1,1),this.baseWeight=1,this.reflectivityColor=new pe(1,1,1),this.reflectionColor=new pe(1,1,1),this.emissiveColor=new pe(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=WR(this.getScene())}getClassName(){return"PBRMaterial"}clone(e,t=!0,i=""){let r=it.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=it.Parse(()=>new n(e.name,t),e,t,i);return e.stencil&&r.stencil.parse(e.stencil,t,i),Ee._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}};dt.PBRMATERIAL_OPAQUE=Sr.PBRMATERIAL_OPAQUE;dt.PBRMATERIAL_ALPHATEST=Sr.PBRMATERIAL_ALPHATEST;dt.PBRMATERIAL_ALPHABLEND=Sr.PBRMATERIAL_ALPHABLEND;dt.PBRMATERIAL_ALPHATESTANDBLEND=Sr.PBRMATERIAL_ALPHATESTANDBLEND;dt.DEFAULT_AO_ON_ANALYTICAL_LIGHTS=Sr.DEFAULT_AO_ON_ANALYTICAL_LIGHTS;P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"directIntensity",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"emissiveIntensity",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"environmentIntensity",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"specularIntensity",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"disableBumpMap",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"albedoTexture",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"baseWeightTexture",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"baseDiffuseRoughnessTexture",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"ambientTexture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"ambientTextureStrength",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"ambientTextureImpactOnAnalyticalLights",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesAndMiscDirty")],dt.prototype,"opacityTexture",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"reflectionTexture",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"emissiveTexture",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"reflectivityTexture",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"metallicTexture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"metallic",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"roughness",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"metallicF0Factor",void 0);P([vr(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"metallicReflectanceColor",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useOnlyMetallicFromMetallicReflectanceTexture",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"metallicReflectanceTexture",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"reflectanceTexture",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"microSurfaceTexture",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"bumpTexture",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty",null)],dt.prototype,"lightmapTexture",void 0);P([vr("ambient"),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"ambientColor",void 0);P([vr("albedo"),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"albedoColor",void 0);P([F("baseWeight"),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"baseWeight",void 0);P([F("baseDiffuseRoughness"),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"baseDiffuseRoughness",void 0);P([vr("reflectivity"),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"reflectivityColor",void 0);P([vr("reflection"),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"reflectionColor",void 0);P([vr("emissive"),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"emissiveColor",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"microSurface",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useLightmapAsShadowmap",void 0);P([F(),le("_markAllSubMeshesAsTexturesAndMiscDirty")],dt.prototype,"useAlphaFromAlbedoTexture",void 0);P([F(),le("_markAllSubMeshesAsTexturesAndMiscDirty")],dt.prototype,"forceAlphaTest",void 0);P([F(),le("_markAllSubMeshesAsTexturesAndMiscDirty")],dt.prototype,"alphaCutOff",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useSpecularOverAlpha",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useMicroSurfaceFromReflectivityMapAlpha",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useRoughnessFromMetallicTextureAlpha",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useRoughnessFromMetallicTextureGreen",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useMetallnessFromMetallicTextureBlue",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useAmbientOcclusionFromMetallicTextureRed",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useAmbientInGrayScale",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useAutoMicroSurfaceFromReflectivityMap",void 0);P([F()],dt.prototype,"usePhysicalLightFalloff",null);P([F()],dt.prototype,"useGLTFLightFalloff",null);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useRadianceOverAlpha",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useObjectSpaceNormalMap",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useParallax",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useParallaxOcclusion",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"parallaxScaleBias",void 0);P([F(),le("_markAllSubMeshesAsLightsDirty")],dt.prototype,"disableLighting",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"forceIrradianceInFragment",void 0);P([F(),le("_markAllSubMeshesAsLightsDirty")],dt.prototype,"maxSimultaneousLights",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"invertNormalMapX",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"invertNormalMapY",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"twoSidedLighting",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useAlphaFresnel",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useLinearAlphaFresnel",void 0);P([le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"environmentBRDFTexture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"forceNormalForward",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"enableSpecularAntiAliasing",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useHorizonOcclusion",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"useRadianceOcclusion",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],dt.prototype,"unlit",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],dt.prototype,"applyDecalMapAfterDetailMap",void 0);Ft("BABYLON.PBRMaterial",dt)});var fK={};tt(fK,{PBRMaterialLoadingAdapter:()=>FO});var FO,hK=M(()=>{zt();pD();Ge();FO=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!=pe.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 pe(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 pe(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 pe(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:pe.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 Vue(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 un(i,r)}return null}var Bue,Uue,Kt,QR,dK=M(()=>{C5();Ge();zt();Ci();al();w5();wR();B5();Gn();Vr();Zh();ki();$A();vm();yi();dD();V5();hD();zl();Pt();_m();mD();_D();H5();sm();z5();Bue=new ev(()=>Promise.resolve().then(()=>(q5(),j5))),Uue=new ev(()=>Promise.resolve().then(()=>(J5(),$5))),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(()=>(t7(),e7))).OpenPBRMaterial,adapterClass:(await Promise.resolve().then(()=>(r7(),i7))).OpenPBRMaterialLoadingAdapter}:this._pbrMaterialImpl={materialClass:(await Promise.resolve().then(()=>(cK(),lK))).PBRMaterial,adapterClass:(await Promise.resolve().then(()=>(hK(),fK))).PBRMaterialLoadingAdapter});let s=`${ns[ns.LOADING]} => ${ns[ns.READY]}`,a=`${ns[ns.LOADING]} => ${ns[ns.COMPLETE]}`;this._parent._startPerformanceCounter(s),this._parent._startPerformanceCounter(a),this._parent._setState(ns.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(ns.READY),this._skipStartAnimationStep||this._startAnimations(),r()}).then(f=>(this._parent._endPerformanceCounter(s),_e.SetImmediate(()=>{this._disposed||Promise.all(this._completePromises).then(()=>{this._parent._endPerformanceCounter(a),this._parent._setState(ns.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)&&ee.Warn(`Binary buffer length (${i.byteLength}) from JSON does not match chunk length (${e.bin.byteLength})`),this._bin=e.bin}else ee.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(G5.forEach((i,r)=>{var s;((s=this.parent.extensionOptions[r])==null?void 0:s.enabled)===!1?i.isGLTFExtension&&this.isExtensionUsed(r)&&ee.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&&ee.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 ip.AUTO:{this._babylonScene.useRightHandedSystem||(t.rotation=[0,1,0,0],t.scale=[1,1,-1],n._LoadTransform(t,this._rootBabylonMesh));break}case ip.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 Er&&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 cd.NONE:break;case cd.FIRST:{let e=this._getAnimationGroups();e.length!==0&&e[0].start(!0);break}case cd.ALL:{let e=this._getAnimationGroups();for(let t of e)t.start(!0);break}default:{ee.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 ei(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=gD(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 ei(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?Ee.CounterClockWiseSideOrientation:Ee.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,p=>{d.material=p}))}}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 mn(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=Vue(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 ud(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?j.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 FR(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)&&(ee.Warn(`${e}/skeleton: Overriding with nearest common ancestor as skeleton node is not a common root`),t.skeleton=s.index)}else ee.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&&ee.Warn(`/skins/${t.index}/skeleton: Skeleton node is not a common root`));let o=t.joints.indexOf(e.index);return s=new Ba(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=j.Identity(),s=i._index;t&&s!==-1&&(j.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?j.FromArray(e.matrix):j.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 Rc(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=mt.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||Bue.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():Uue.value.then(()=>{var d,u,m,p;let f;switch(l){case"translation":{f=(d=$g("/nodes/{}/translation"))==null?void 0:d.interpolation;break}case"rotation":{f=(u=$g("/nodes/{}/rotation"))==null?void 0:u.interpolation;break}case"scale":{f=(m=$g("/nodes/{}/scale"))==null?void 0:m.interpolation;break}case"weights":{f=(p=$g("/nodes/{}/weights"))==null?void 0:p.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 p=m.getStride(d),_=f.input,g=f.output,v=new Array(_.length),x=0;switch(f.interpolation){case"STEP":{for(let T=0;T<_.length;T++){let E=m.getValue(d,g,x,1);x+=p,v[T]={frame:_[T]*o,value:E,interpolation:1}}break}case"CUBICSPLINE":{for(let T=0;T<_.length;T++){let E=m.getValue(d,g,x,l);x+=p;let S=m.getValue(d,g,x,1);x+=p;let R=m.getValue(d,g,x,l);x+=p,v[T]={frame:_[T]*o,inTangent:E,value:S,outTangent:R}}break}case"LINEAR":{for(let T=0;T<_.length;T++){let E=m.getValue(d,g,x,1);x+=p,v[T]={frame:_[T]*o,value:E}}break}}if(x>0){let T=`${i.name||`animation${i.index}`}_channel${r.index}_${h}`,E=m.buildAnimations(d,T,o,v);for(let S of E)h++,a(S.babylonAnimatable,S.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),p=r*o.count,_;if(t.componentType===5126&&!t.normalized)_=n._GetTypedArray(`${e}/sparse/values`,t.componentType,u,o.values.byteOffset,p);else{let v=n._GetTypedArray(`${e}/sparse/values`,t.componentType,u,o.values.byteOffset,p);_=new i(p),L.ForEach(v,0,s,r,t.componentType,_.length,t.normalized||!1,(x,T)=>{_[T]=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 ao(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=pe.FromArray(t.baseColorFactor),s.geometryOpacity=t.baseColorFactor[3]):s.baseColor=pe.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?pe.FromArray(t.emissiveFactor):new pe(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,p;let o=this._loadSampler(`/samplers/${t.index}`,t),l=new Array,c=new OR;this._babylonScene._blockEntityCollection=!!this._assetContainer;let f={noMipmap:o.noMipMaps,invertY:!1,samplingMode:o.samplingMode,onLoad:()=>{this._disposed||c.resolve()},onError:(_,g)=>{this._disposed||c.reject(new Error(`${e}: ${g&&g.message?g.message:_||"Failed to load texture"}`))},mimeType:(p=i.mimeType)!=null?p:IB((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&&!ff(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(_=>{let g=`data:${this._uniqueRootUrl}${u}`;h.updateURL(g,_);let v=h.getInternalTexture();v&&(v.label=i.name)})),h.wrapU=o.wrapU,h.wrapV=o.wrapV,r(h),this._parent.useGltfTextureNames){let _=i.name||d||`image${i.index}`;h.name=_}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(ff(i)){let s=new Uint8Array(hf(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 am(`${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 ee.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 ee.Warn(`${e}/minFilter: Invalid value (${r})`),ge.LINEAR_LINEAR_MIPLINEAR}else switch(i!==9728&&ee.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 ee.Warn(`${e}/minFilter: Invalid value (${r})`),ge.NEAREST_NEAREST_MIPNEAREST}}static _GetTypedArrayConstructor(e,t){try{return uC(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?(ee.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 _e.IsBase64(e)||e.indexOf("..")===-1}static _GetDrawMode(e,t){switch(t==null&&(t=4),t){case 0:return Ee.PointListDrawMode;case 1:return Ee.LineListDrawMode;case 2:return Ee.LineLoopDrawMode;case 3:return Ee.LineStripDrawMode;case 4:return Ee.TriangleFillMode;case 5:return Ee.TriangleStripDrawMode;case 6:return Ee.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)}};QR.DefaultSampler={index:-1};Kf._CreateGLTF2Loader=n=>new QR(n)});var UO,BO,uK=M(()=>{mD();UO="ExtrasAsMetadata",BO=class{_assignExtras(e,t){if(t.extras&&Object.keys(t.extras).length>0){let i=e.metadata=e.metadata||{},r=i.gltf=i.gltf||{};r.extras=t.extras}}constructor(e){this.name=UO,this.enabled=!0,this._loader=e}dispose(){this._loader=null}loadNodeAsync(e,t,i){return this._loader.loadNodeAsync(e,t,r=>{this._assignExtras(r,t),i(r)})}loadCameraAsync(e,t,i){return this._loader.loadCameraAsync(e,t,r=>{this._assignExtras(r,t),i(r)})}createMaterial(e,t,i){let r=this._loader.createMaterial(e,t,i);return this._assignExtras(r,t),r}loadAnimationAsync(e,t){return this._loader.loadAnimationAsync(e,t).then(i=>(this._assignExtras(i,t),i))}};Qg(UO);UR(UO,!1,n=>new BO(n))});var $R,mK=M(()=>{$R={name:"obj",extensions:".obj"}});var md,pK=M(()=>{zt();Vr();Ac();md=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 ke(u,e),l._parentContainer=r,e._blockEntityCollection=!1;else if(d==="kd"&&l)o=u.split(a,3).map(parseFloat),l.diffuseColor=pe.FromArray(o);else if(d==="ka"&&l)o=u.split(a,3).map(parseFloat),l.ambientColor=pe.FromArray(o);else if(d==="ks"&&l)o=u.split(a,3).map(parseFloat),l.specularColor=pe.FromArray(o);else if(d==="ke"&&l)o=u.split(a,3).map(parseFloat),l.emissiveColor=pe.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),p=m.indexOf("-bm"),_=null;p>=0&&(_=m[p+1],m.splice(p,2)),l.bumpTexture=n._GetTexture(i,m.join(" "),e),l.bumpTexture&&_!==null&&(l.bumpTexture.level=parseFloat(_))}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)}};md.INVERT_TEXTURE_Y=!0});var jr,_K=M(()=>{ki();Ac();zt();Ge();$A();yi();mr();Pt();jr=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 p=parseFloat(m[4]),_=parseFloat(m[5]),g=parseFloat(m[6]);this._colors.push(new lt(p>1?p/255:p,_>1?_/255:_,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 Fe(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 p of m)this._extColors.push(p);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 p={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(p),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 p={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(p),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)||ee.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 ke(mn.RandomId(),i),d.pointsCloud=!0,this._materialNameFromObj=d.name,this._normals.length||(d.disableLighting=!0,d.emissiveColor=pe.White()))}this._meshesFromObj.push({name:mn.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;--p)if(this._meshesFromObj[p].isObject&&this._meshesFromObj[p]._babylonMesh){u.parent=this._meshesFromObj[p]._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 Ce;if(m.indices=this._handledMesh.indices,m.positions=this._handledMesh.positions,this._loadingOptions.computeNormals||!this._handledMesh.normals){let p=new Array;Ce.ComputeNormals(this._handledMesh.positions,this._handledMesh.indices,p),m.normals=p}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)}}};jr.ObjectDescriptor=/^o/;jr.GroupDescriptor=/^g/;jr.MtlLibGroupDescriptor=/^mtllib /;jr.UseMtlDescriptor=/^usemtl /;jr.SmoothDescriptor=/^s /;jr.VertexPattern=/^v(\s+[\d|.|+|\-|e|E]+){3,7}/;jr.NormalPattern=/^vn(\s+[\d|.|+|\-|e|E]+)( +[\d|.|+|\-|e|E]+)( +[\d|.|+|\-|e|E]+)/;jr.UVPattern=/^vt(\s+[\d|.|+|\-|e|E]+)( +[\d|.|+|\-|e|E]+)/;jr.FacePattern1=/^f\s+(([\d]{1,}[\s]?){3,})+/;jr.FacePattern2=/^f\s+((([\d]{1,}\/[\d]{1,}[\s]?){3,})+)/;jr.FacePattern3=/^f\s+((([\d]{1,}\/[\d]{1,}\/[\d]{1,}[\s]?){3,})+)/;jr.FacePattern4=/^f\s+((([\d]{1,}\/\/[\d]{1,}[\s]?){3,})+)/;jr.FacePattern5=/^f\s+(((-[\d]{1,}\/-[\d]{1,}\/-[\d]{1,}[\s]?){3,})+)/;jr.LinePattern1=/^l\s+(([\d]{1,}[\s]?){2,})+/;jr.LinePattern2=/^l\s+((([\d]{1,}\/[\d]{1,}[\s]?){2,})+)/;jr.LinePattern3=/^l\s+((([\d]{1,}\/[\d]{1,}\/[\d]{1,}[\s]?){2,})+)/});var gK={};tt(gK,{OBJFileLoader:()=>ra});var ra,VO=M(()=>{Ge();Ci();ep();jg();mK();pK();_K();Ac();ra=class n{static get INVERT_TEXTURE_Y(){return md.INVERT_TEXTURE_Y}static set INVERT_TEXTURE_Y(e){md.INVERT_TEXTURE_Y=e}constructor(e){this.name=$R.name,this.extensions=$R.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;_e.LoadFile(s,i,void 0,void 0,!1,(a,o)=>{r(s,o)})}createPlugin(e){return new n(e[$R.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 ml(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 md,o=[],l=[];i=i.replace(/#.*$/gm,"").trim(),new jr(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;)_.push(g),p=g+1;if(g===-1&&_.length===0)a.materials[m].dispose();else for(let v=0;v<_.length;v++){let x=l[_[v]],T=a.materials[m];x.material=T,x.getTotalIndices()||(T.pointsCloud=!0)}}h()}catch(m){_e.Warn(`Error processing MTL file: '${s}'`),this._loadingOptions.materialLoadingFailsSilently?h():d(m)}},(u,m)=>{_e.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 p=(u=d.material)!=null?u:new ke(d.name+"_line",t);p.getBindedMeshes().filter(g=>!h(g)).length>0&&(p=(m=p.clone(p.name+"_line"))!=null?m:p),p.wireframe=!0,d.material=p,d._internalMetadata&&(d._internalMetadata._isLine=void 0)}}),l})}};ra.OPTIMIZE_WITH_UV=!0;ra.INVERT_Y=!1;ra.IMPORT_VERTEX_COLORS=!1;ra.COMPUTE_NORMALS=!1;ra.OPTIMIZE_NORMALS=!1;ra.UV_SCALING=new Fe(1,1);ra.SKIP_MATERIALS=!1;ra.MATERIAL_LOADING_FAILS_SILENTLY=!0;ra.USE_LEGACY_BEHAVIOR=!1;Yf(new ra)});function Gue(n){let e=n.trim();return/^https?:\/\//i.test(e)||/^wss?:\/\//i.test(e)||/^\/\//.test(e)}function GO(n,e){if(Gue(n))throw new Error(`[AI3D] Babylon ${e} is limited to local vault resources. Refused remote URL: ${n}`);return n}function JR(n){throw new Error(`[AI3D] Babylon script loading is disabled in this plugin build. Refused script URL: ${n}`)}function EK(){if(vK)return;let n=i=>GO(i,"asset loading"),e=i=>GO(i,"script loading"),t=()=>-1;_e.PreprocessUrl=n,_e.ScriptPreprocessUrl=e,_e.DefaultRetryStrategy=t,_e.LoadScript=(i,r,s)=>{try{e(i),JR(i)}catch(a){s==null||s(a instanceof Error?a.message:String(a),a);return}r==null||r()},_e.LoadScriptAsync=async i=>{e(i),JR(i)},_e.LoadBabylonScript=(i,r,s)=>{try{JR(i)}catch(a){s==null||s(a instanceof Error?a.message:String(a),a);return}r()},_e.LoadBabylonScriptAsync=async i=>{JR(i)},Gi.PreprocessUrl=n,Gi.ScriptPreprocessUrl=e,Gi.DefaultRetryStrategy=t,yr.CustomRequestModifiers.push((i,r)=>GO(r,"request")),vK=!0}var vK,SK=M(()=>{"use strict";zl();Ci();Uh();vK=!1});function eb(n,e){if(e.byteLength<84)throw new Error(`STL buffer too small: ${e.byteLength} bytes (need 84+)`);if(e.byteLength>=6){let p=new TextDecoder().decode(new Uint8Array(e,0,6));if(p==="solid "||p===`solid +`){let _=new TextDecoder().decode(new Uint8Array(e,0,Math.min(e.byteLength,800)));if(_.includes("facet")||_.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=p*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[_+3]-a[_+0],T=a[_+4]-a[_+1],E=a[_+5]-a[_+2],S=a[_+6]-a[_+0],R=a[_+7]-a[_+1],I=a[_+8]-a[_+2],C=T*I-E*R,y=E*S-x*I,D=x*R-T*S,O=Math.sqrt(C*C+y*y+D*D);O>1e-8?(C/=O,y/=O,D/=O):(C=0,y=0,D=1,f++),o[_+0]=C,o[_+1]=y,o[_+2]=D,o[_+3]=C,o[_+4]=y,o[_+5]=D,o[_+6]=C,o[_+7]=y,o[_+8]=D,c[g+0]=_/3+0,c[g+1]=_/3+1,c[g+2]=_/3+2}f>0&&console.warn(`[AI3D STL] ${f} degenerate triangles with zero-area normals`);let d=new Ce;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 ke("stl-mat",n);return m.backFaceCulling=!1,m.specularColor=new pe(.3,.3,.3),m.specularPower=32,l?(m.diffuseColor=new pe(1,1,1),m.emissiveColor=new pe(.05,.05,.05),m.vertexColorEnabled=!0):(m.diffuseColor=new pe(.85,.85,.85),m.emissiveColor=new pe(.1,.1,.1)),u.material=m,u}function TK(n,e){return eb(n,e)}function AK(n){n(kue)}var kue,kO=M(()=>{"use strict";yi();jg();mr();Ac();zt();kue={name:"stl",extensions:".stl",importMeshAsync(n,e,t){return Promise.resolve().then(()=>({meshes:[eb(e,t)],particleSystems:[],skeletons:[],animationGroups:[],transformNodes:[],geometries:[],lights:[],spriteManagers:[]}))},loadAsync(n,e){return Promise.resolve().then(()=>{eb(n,e)})},loadAssetContainerAsync(n,e){return Promise.resolve().then(()=>{let t=eb(n,e),i=new ml(n);return i.meshes.push(t),t.material&&i.materials.push(t.material),i})},canDirectLoad(){return!1},rewriteRootURL(n){return n}}});function Wue(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 fp(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 tb(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 Hue(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(p=>p.name==="x"),u=l.properties.some(p=>p.name==="red"||p.name==="r"),m=l.properties.filter(p=>!p.isList);for(let p=0;p0){c.indices=o.indices;let d=new Array(l.length).fill(0),u=o.indices,m=l.length-3;for(let p=0;pm||g>m||v>m)continue;let x=l[_],T=l[_+1],E=l[_+2],S=l[g]-x,R=l[g+1]-T,I=l[g+2]-E,C=l[v]-x,y=l[v+1]-T,D=l[v+2]-E,O=R*D-I*y,V=I*C-S*D,N=S*y-R*C;d[_]+=O,d[_+1]+=V,d[_+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 p=0;p0&&(d[p]/=_,d[p+1]/=_,d[p+2]/=_)}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 ke("ply-mat",n);return h.backFaceCulling=!1,o.colors.length>0?(c.colors=o.colors,c.applyToMesh(f),h.diffuseColor=new pe(1,1,1),h.vertexColorEnabled=!0):h.diffuseColor=new pe(.7,.7,.7),f.material=h,f}function xK(n,e){return ib(n,e)}function RK(n){n(Xue)}var Xue,WO=M(()=>{"use strict";yi();jg();mr();Ac();zt();Xue={name:"ply",extensions:".ply",importMeshAsync(n,e,t){return Promise.resolve().then(()=>({meshes:[ib(e,t)],particleSystems:[],skeletons:[],animationGroups:[],transformNodes:[],geometries:[],lights:[],spriteManagers:[]}))},loadAsync(n,e){return Promise.resolve().then(()=>{ib(n,e)})},loadAssetContainerAsync(n,e){return Promise.resolve().then(()=>{let t=ib(n,e),i=new ml(n);return i.meshes.push(t),t.material&&i.materials.push(t.material),i})},canDirectLoad(){return!1},rewriteRootURL(n){return n}}});async function nv(){bK||(EK(),AK(Yf),RK(Yf),bK=!0)}var bK,sv=M(()=>{"use strict";hD();dK();uK();VO();ep();SK();kO();WO();bK=!1});function av(n){return Math.floor(n.getTotalIndices()/3)}function pd(n){return n.getTotalVertices()}function _d(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),pd(r)>0||r.getTotalIndices()>0))}function IK(n){let e=Array.from(n),t=new Set(e);return e.filter(i=>{let r=i.parent;return!r||!t.has(r)})}function HO(n){n.computeWorldMatrix(!0);let e=n.getBoundingInfo().boundingBox;return O_(Ht(e.minimumWorld),Ht(e.maximumWorld))}function hp(n){let e=null;for(let t of n)!t||t.isDisposed()||(e=D3(e,HO(t)));return e}function rb(n,e=[]){var t;return(t=hp(_d(n,e)))!=null?t:HO(n)}function nb(n,e,t,i={}){return iT({rootName:n,boundingSize:Rr(e),meshes:t.map(r=>({triangleCount:av(r),vertexCount:pd(r),materialKeys:r.material?[r.material.name]:[]})),splatCount:i.splatCount,resourceWarnings:i.resourceWarnings})}function MK(n){var t,i;let e=HO(n);return Ih({name:n.name||`mesh-${n.uniqueId}`,triangleCount:av(n),vertexCount:pd(n),materialName:(i=(t=n.material)==null?void 0:t.name)!=null?i:null,boundingSize:Rr(e),center:fn(e)})}var sb=M(()=>{"use strict";rf();Ws();w_()});function Zf(n){return Zr(n)}function CK(n,e,t,i=[]){gT(new ab(n,i),e,t)}function zO(n,e=[]){vT(new ab(n,e))}var ab,yK=M(()=>{"use strict";Ge();rf();Ws();NM();sb();ab=class{constructor(e,t=[]){this.rootMesh=e,this.loadedMeshes=t}getParts(){return _d(this.rootMesh,this.loadedMeshes)}getRootCenter(){return fn(rb(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:Zf(t._previewExplodeState.originalPosition),originalCenter:Zf(t._previewExplodeState.originalCenter)}:t!=null&&t._originalPos&&(t!=null&&t._originalCenter)?{originalPosition:Zf(t._originalPos),originalCenter:Zf(t._originalCenter)}:null}setPartState(e,t){(!e.metadata||typeof e.metadata!="object")&&(e.metadata={});let i=e.metadata;i._previewExplodeState={originalPosition:Zf(t.originalPosition),originalCenter:Zf(t.originalCenter)},i._originalPos=Zf(t.originalPosition),i._originalCenter=Zf(t.originalCenter)}}});var ob={};tt(ob,{glowBlurPostProcessPixelShaderWGSL:()=>Yue});var XO,PK,Yue,lb=M(()=>{G();XO="glowBlurPostProcessPixelShader",PK=`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;}`;T.ShadersStoreWGSL[GO]||(T.ShadersStoreWGSL[GO]=EK);Pue={name:GO,shader:EK}});var nb={};tt(nb,{glowBlurPostProcessPixelShader:()=>Lue});var kO,SK,Lue,sb=M(()=>{G();kO="glowBlurPostProcessPixelShader",SK=`varying vec2 vUV;uniform sampler2D textureSampler;uniform vec2 screenSize;uniform vec2 direction;uniform float blurWidth;float getLuminance(vec3 color) +fragmentOutputs.color=baseColor;}`;A.ShadersStoreWGSL[XO]||(A.ShadersStoreWGSL[XO]=PK);Yue={name:XO,shader:PK}});var cb={};tt(cb,{glowBlurPostProcessPixelShader:()=>Kue});var YO,LK,Kue,fb=M(()=>{G();YO="glowBlurPostProcessPixelShader",LK=`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;}`;T.ShadersStore[kO]||(T.ShadersStore[kO]=SK);Lue={name:kO,shader:SK}});var AK={};tt(AK,{glowMapGenerationVertexShaderWGSL:()=>Due});var WO,TK,Due,xK=M(()=>{G();nc();sc();Uf();Bf();ac();Nf();Vf();Gf();oc();lc();cc();fc();WO="glowMapGenerationVertexShader",TK=`attribute position: vec3f; +gl_FragColor=baseColor;}`;A.ShadersStore[YO]||(A.ShadersStore[YO]=LK);Kue={name:YO,shader:LK}});var OK={};tt(OK,{glowMapGenerationVertexShaderWGSL:()=>jue});var KO,DK,jue,NK=M(()=>{G();nc();sc();Bf();Uf();ac();Nf();Vf();Gf();oc();lc();cc();fc();KO="glowMapGenerationVertexShader",DK=`attribute position: vec3f; #include #include #include @@ -23490,7 +23490,7 @@ vertexOutputs.vUVEmissive= (uniforms.emissiveMatrix* vec4f(uv2Updated,1.0,0.0)). vertexOutputs.vColor=vertexInputs.color; #endif #include -}`;T.ShadersStoreWGSL[WO]||(T.ShadersStoreWGSL[WO]=TK);Due={name:WO,shader:TK}});var bK={};tt(bK,{glowMapGenerationPixelShaderWGSL:()=>Oue});var HO,RK,Oue,IK=M(()=>{G();ya();hc();dc();HO="glowMapGenerationPixelShader",RK=`#if defined(DIFFUSE_ISLINEAR) || defined(EMISSIVE_ISLINEAR) +}`;A.ShadersStoreWGSL[KO]||(A.ShadersStoreWGSL[KO]=DK);jue={name:KO,shader:DK}});var FK={};tt(FK,{glowMapGenerationPixelShaderWGSL:()=>que});var jO,wK,que,BK=M(()=>{G();ya();hc();dc();jO="glowMapGenerationPixelShader",wK=`#if defined(DIFFUSE_ISLINEAR) || defined(EMISSIVE_ISLINEAR) #include #endif #ifdef DIFFUSE @@ -23552,7 +23552,7 @@ fragmentOutputs.color=finalColor*uniforms.glowIntensity; fragmentOutputs.color=vec4f(fragmentOutputs.color.rgb,uniforms.glowColor.a); #endif } -`;T.ShadersStoreWGSL[HO]||(T.ShadersStoreWGSL[HO]=RK);Oue={name:HO,shader:RK}});var CK={};tt(CK,{glowMapGenerationVertexShader:()=>Nue});var zO,MK,Nue,yK=M(()=>{G();uc();mc();kf();Wf();pc();wf();Hf();zf();_c();gc();vc();Ec();zO="glowMapGenerationVertexShader",MK=`attribute vec3 position; +`;A.ShadersStoreWGSL[jO]||(A.ShadersStoreWGSL[jO]=wK);que={name:jO,shader:wK}});var VK={};tt(VK,{glowMapGenerationVertexShader:()=>Zue});var qO,UK,Zue,GK=M(()=>{G();uc();mc();kf();Wf();pc();wf();Hf();zf();_c();gc();vc();Ec();qO="glowMapGenerationVertexShader",UK=`attribute vec3 position; #include #include #include @@ -23626,7 +23626,7 @@ vUVEmissive=vec2(emissiveMatrix*vec4(uv2Updated,1.0,0.0)); vColor=color; #endif #include -}`;T.ShadersStore[zO]||(T.ShadersStore[zO]=MK);Nue={name:zO,shader:MK}});var LK={};tt(LK,{glowMapGenerationPixelShader:()=>wue});var XO,PK,wue,DK=M(()=>{G();Pa();Sc();Tc();XO="glowMapGenerationPixelShader",PK=`#if defined(DIFFUSE_ISLINEAR) || defined(EMISSIVE_ISLINEAR) +}`;A.ShadersStore[qO]||(A.ShadersStore[qO]=UK);Zue={name:qO,shader:UK}});var WK={};tt(WK,{glowMapGenerationPixelShader:()=>Que});var ZO,kK,Que,HK=M(()=>{G();Pa();Sc();Tc();ZO="glowMapGenerationPixelShader",kK=`#if defined(DIFFUSE_ISLINEAR) || defined(EMISSIVE_ISLINEAR) #include #endif #ifdef DIFFUSE @@ -23688,8 +23688,8 @@ gl_FragColor=finalColor*glowIntensity; #ifdef HIGHLIGHT gl_FragColor.a=glowColor.a; #endif -}`;T.ShadersStore[XO]||(T.ShadersStore[XO]=PK);wue={name:XO,shader:PK}});var xo,Ic,ab=M(()=>{di();zt();Oi();ki();Wh();Vn();Lf();kh();ol();Bn();mC();xo=class n extends Xr{constructor(e,t=null,i,r,s){super({...s,name:e,engine:t||Oe.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(()=>(rb(),ib)))):t.push(Promise.resolve().then(()=>(sb(),nb))),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)}};xo.FragmentUrl="glowBlurPostProcess";xo.Uniforms=["screenSize","direction","blurWidth"];Ic=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?ll(s.morphTargetManager,l,c,s,!0,!1,!1,f,h,d):0;t&&(l.push("#define INSTANCES"),_o(c),e.getRenderingMesh().hasThinInstances&&l.push("#define THIN_INSTANCES"));let p=s.bakedVertexAnimationManager;p&&p.isEnabled&&(l.push("#define BAKED_VERTEX_ANIMATION_TEXTURE"),t&&c.push("bakedVertexAnimationSettingsInstanced")),al(o,this._scene,l),this._addCustomEffectDefines(l);let _=e._getDrawWrapper(void 0,!0),g=_.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"];wn(E),_.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 _.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(()=>(xK(),AK)),Promise.resolve().then(()=>(IK(),bK))]):await Promise.all([Promise.resolve().then(()=>(yK(),CK)),Promise.resolve().then(()=>(DK(),LK))]),(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()}};Ic.ForceGLSL=!1});var Ns,YO=M(()=>{Gt();Vt();Mi();di();Oi();Vr();_f();hn();eo();ab();OA();Ns=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 Ic.ForceGLSL}static set ForceGLSL(e){Ic.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=Jl.UniqueId,this.onDisposeObservable=new ie,this.onBeforeRenderMainTextureObservable=new ie,this.onBeforeComposeObservable=new ie,this.onBeforeRenderMeshToEffect=new ie,this.onAfterRenderMeshToEffect=new ie,this.onAfterComposeObservable=new ie,this.onSizeChangedObservable=new ie,this._internalThinEffectLayer=!r,r||(r=new Ic(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||Oe.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?gn(this._mainTextureDesiredSize.width,this._maxSize):this._mainTextureDesiredSize.width,this._mainTextureDesiredSize.height=this._engine.needPOTTextures?gn(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 Gr("EffectLayerMainRTT",{width:this._mainTextureDesiredSize.width,height:this._mainTextureDesiredSize.height},this._scene,{type:this._effectLayerOptions.mainTextureType,format:this._effectLayerOptions.mainTextureFormat,samplingMode:_e.TRILINEAR_SAMPLINGMODE,generateStencilBuffer:this._effectLayerOptions.generateStencilBuffer,existingObjectRenderer:this._thinEffectLayer.objectRenderer}),this._mainTexture.activeCamera=this._effectLayerOptions.camera,this._mainTexture.wrapU=_e.CLAMP_ADDRESSMODE,this._mainTexture.wrapV=_e.CLAMP_ADDRESSMODE,this._mainTexture.anisotropicFilteringLevel=1,this._mainTexture.updateSamplingMode(_e.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 Ze("EffectLayerSceneComponent")};P([F()],Ns.prototype,"name",null);P([rm()],Ns.prototype,"neutralColor",null);P([F()],Ns.prototype,"isEnabled",null);P([aU()],Ns.prototype,"camera",null);P([F()],Ns.prototype,"renderingGroupId",null);P([F()],Ns.prototype,"disableBoundingBoxesFromEffectLayer",null)});var NK={};tt(NK,{glowMapMergePixelShaderWGSL:()=>Fue});var KO,OK,Fue,wK=M(()=>{G();KO="glowMapMergePixelShader",OK=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_2d; +}`;A.ShadersStore[ZO]||(A.ShadersStore[ZO]=kK);Que={name:ZO,shader:kK}});var Ro,Ic,hb=M(()=>{di();zt();Ni();ki();Wh();Gn();Lf();kh();ll();Vn();EC();Ro=class n extends Xr{constructor(e,t=null,i,r,s){super({...s,name:e,engine:t||Oe.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(()=>(lb(),ob)))):t.push(Promise.resolve().then(()=>(fb(),cb))),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)}};Ro.FragmentUrl="glowBlurPostProcess";Ro.Uniforms=["screenSize","direction","blurWidth"];Ic=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?cl(s.morphTargetManager,l,c,s,!0,!1,!1,f,h,d):0;t&&(l.push("#define INSTANCES"),go(c),e.getRenderingMesh().hasThinInstances&&l.push("#define THIN_INSTANCES"));let p=s.bakedVertexAnimationManager;p&&p.isEnabled&&(l.push("#define BAKED_VERTEX_ANIMATION_TEXTURE"),t&&c.push("bakedVertexAnimationSettingsInstanced")),ol(o,this._scene,l),this._addCustomEffectDefines(l);let _=e._getDrawWrapper(void 0,!0),g=_.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"];Fn(E),_.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 _.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(()=>(NK(),OK)),Promise.resolve().then(()=>(BK(),FK))]):await Promise.all([Promise.resolve().then(()=>(GK(),VK)),Promise.resolve().then(()=>(HK(),WK))]),(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(T),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()}};Ic.ForceGLSL=!1});var Bs,QO=M(()=>{Gt();Vt();Ci();di();Ni();Vr();_f();hn();to();hb();UA();Bs=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 Ic.ForceGLSL}static set ForceGLSL(e){Ic.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=Jl.UniqueId,this.onDisposeObservable=new ie,this.onBeforeRenderMainTextureObservable=new ie,this.onBeforeComposeObservable=new ie,this.onBeforeRenderMeshToEffect=new ie,this.onAfterRenderMeshToEffect=new ie,this.onAfterComposeObservable=new ie,this.onSizeChangedObservable=new ie,this._internalThinEffectLayer=!r,r||(r=new Ic(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||Oe.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?vn(this._mainTextureDesiredSize.width,this._maxSize):this._mainTextureDesiredSize.width,this._mainTextureDesiredSize.height=this._engine.needPOTTextures?vn(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 Gr("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 Ze("EffectLayerSceneComponent")};P([F()],Bs.prototype,"name",null);P([rm()],Bs.prototype,"neutralColor",null);P([F()],Bs.prototype,"isEnabled",null);P([gB()],Bs.prototype,"camera",null);P([F()],Bs.prototype,"renderingGroupId",null);P([F()],Bs.prototype,"disableBoundingBoxesFromEffectLayer",null)});var XK={};tt(XK,{glowMapMergePixelShaderWGSL:()=>$ue});var $O,zK,$ue,YK=M(()=>{G();$O="glowMapMergePixelShader",zK=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_2d; #ifdef EMISSIVE var textureSampler2Sampler: sampler;var textureSampler2: texture_2d; #endif @@ -23713,14 +23713,14 @@ baseColor=clamp(baseColor,vec4f(0.),vec4f(1.0)); fragmentOutputs.color=baseColor; #define CUSTOM_FRAGMENT_MAIN_END } -`;T.ShadersStoreWGSL[KO]||(T.ShadersStoreWGSL[KO]=OK);Fue={name:KO,shader:OK}});var UK={};tt(UK,{glowMapMergeVertexShaderWGSL:()=>Uue});var jO,FK,Uue,BK=M(()=>{G();jO="glowMapMergeVertexShader",FK=`attribute position: vec2f;varying vUV: vec2f; +`;A.ShadersStoreWGSL[$O]||(A.ShadersStoreWGSL[$O]=zK);$ue={name:$O,shader:zK}});var jK={};tt(jK,{glowMapMergeVertexShaderWGSL:()=>Jue});var JO,KK,Jue,qK=M(()=>{G();JO="glowMapMergeVertexShader",KK=`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 -}`;T.ShadersStoreWGSL[jO]||(T.ShadersStoreWGSL[jO]=FK);Uue={name:jO,shader:FK}});var GK={};tt(GK,{glowMapMergePixelShader:()=>Bue});var qO,VK,Bue,kK=M(()=>{G();qO="glowMapMergePixelShader",VK=`varying vec2 vUV;uniform sampler2D textureSampler; +}`;A.ShadersStoreWGSL[JO]||(A.ShadersStoreWGSL[JO]=KK);Jue={name:JO,shader:KK}});var QK={};tt(QK,{glowMapMergePixelShader:()=>eme});var eN,ZK,eme,$K=M(()=>{G();eN="glowMapMergePixelShader",ZK=`varying vec2 vUV;uniform sampler2D textureSampler; #ifdef EMISSIVE uniform sampler2D textureSampler2; #endif @@ -23742,14 +23742,14 @@ baseColor=clamp(baseColor,0.,1.0); #endif gl_FragColor=baseColor; #define CUSTOM_FRAGMENT_MAIN_END -}`;T.ShadersStore[qO]||(T.ShadersStore[qO]=VK);Bue={name:qO,shader:VK}});var HK={};tt(HK,{glowMapMergeVertexShader:()=>Vue});var ZO,WK,Vue,zK=M(()=>{G();ZO="glowMapMergeVertexShader",WK=`attribute vec2 position;varying vec2 vUV;const vec2 madd=vec2(0.5,0.5); +}`;A.ShadersStore[eN]||(A.ShadersStore[eN]=ZK);eme={name:eN,shader:ZK}});var ej={};tt(ej,{glowMapMergeVertexShader:()=>tme});var tN,JK,tme,tj=M(()=>{G();tN="glowMapMergeVertexShader",JK=`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 -}`;T.ShadersStore[ZO]||(T.ShadersStore[ZO]=WK);Vue={name:ZO,shader:WK}});var ml,XK=M(()=>{Ge();ki();Vn();yC();ab();zt();IL();ml=class n extends Ic{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(()=>(wK(),NK)),Promise.resolve().then(()=>(BK(),UK)),Promise.resolve().then(()=>(rb(),ib))]):await Promise.all([Promise.resolve().then(()=>(kK(),GK)),Promise.resolve().then(()=>(zK(),HK)),Promise.resolve().then(()=>(sb(),nb))]),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 ql("HighlightLayerPPP",this._scene.getEngine()),this._horizontalBlurPostprocess=new xo("HighlightLayerHBP",this._scene.getEngine(),new Fe(1,0),this._options.blurHorizontalSize),this._verticalBlurPostprocess=new xo("HighlightLayerVBP",this._scene.getEngine(),new Fe(0,1),this._options.blurVerticalSize),this._postProcesses=[this._downSamplePostprocess,this._horizontalBlurPostprocess,this._verticalBlurPostprocess]):(this._horizontalBlurPostprocess=new is("HighlightLayerHBP",this._scene.getEngine(),new Fe(1,0),this._options.blurHorizontalSize/2),this._verticalBlurPostprocess=new is("HighlightLayerVBP",this._scene.getEngine(),new Fe(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(Ee.TriangleFillMode,0,6)),this.innerGlow&&t===1&&(e.setFloat("offset",1),i.setStencilFunction(514),i.drawElementsType(Ee.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()}};ml.EffectName="HighlightLayer";ml.NeutralColor=new lt(0,0,0,0);ml.GlowingMeshStencilReference=2;ml.NormalMeshStencilReference=1});var ob,ra,YK=M(()=>{Gt();Vt();di();bs();Ge();Vr();_f();jl();LC();ML();YO();Pt();zi();zt();XK();Ar();eo();ab();Jt.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()===ra.EffectName)return this.effectLayers[t];return null};ob=class extends Ri{constructor(e,t,i,r,s=null,a=_e.BILINEAR_SAMPLINGMODE,o,l){let c={uniforms:xo.Uniforms,size:typeof r=="number"?r:void 0,camera:s,samplingMode:a,engine:o,reusable:l,...r};super(e,xo.FragmentUrl,{effectWrapper:typeof r=="number"||!r.effectWrapper?new xo(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(()=>(rb(),ib)))):t.push(Promise.resolve().then(()=>(sb(),nb))),super._gatherImports(e,t)}},ra=class n extends Ns{static get NeutralColor(){return ml.NeutralColor}static set NeutralColor(e){ml.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 ml(e,t,i)),this.onBeforeBlurObservable=new ie,this.onAfterBlurObservable=new ie,this._engine.isStencilEnable||ee.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?gn(e,this._maxSize):e,t=this._engine.needPOTTextures?gn(t,this._maxSize):t;let i;this._engine.getCaps().textureHalfFloatRender?i=2:i=0,this._blurTexture=new Gr("HighlightLayerBlurRTT",{width:e,height:t},this._scene,!1,!0,i),this._blurTexture.wrapU=_e.CLAMP_ADDRESSMODE,this._blurTexture.wrapV=_e.CLAMP_ADDRESSMODE,this._blurTexture.anisotropicFilteringLevel=16,this._blurTexture.updateSamplingMode(_e.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 Hh("HighlightLayerPPP",{size:this._options.blurTextureSizeRatio,samplingMode:_e.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 ob("HighlightLayerHBP",new Fe(1,0),this._options.blurHorizontalSize,{samplingMode:_e.BILINEAR_SAMPLINGMODE,engine:this._scene.getEngine(),effectWrapper:this._thinEffectLayer._postProcesses[1]}),this._horizontalBlurPostprocess.onApplyObservable.add(r=>{r.setFloat2("screenSize",e,t)}),this._verticalBlurPostprocess=new ob("HighlightLayerVBP",new Fe(0,1),this._options.blurVerticalSize,{samplingMode:_e.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 Fa("HighlightLayerHBP",new Fe(1,0),this._options.blurHorizontalSize/2,{size:{width:e,height:t},samplingMode:_e.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 Fa("HighlightLayerVBP",new Fe(0,1),this._options.blurVerticalSize/2,{size:{width:e,height:t},samplingMode:_e.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=it.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=it.Parse(()=>new n(e.name,t,e.options),e,t,i),s;for(s=0;s{sl();lm();YO();Oi();KL();RR(et.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===mt.RIG_MODE_NONE&&e===r.camera||r.camera.cameraRigMode!==mt.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(et.NAME_EFFECTLAYER);e||(e=new QO(n),n._addComponent(e))}});function jK(n,e,t=()=>!0){let i=new ra("ai3d-pick-highlight",n),r=new ge(.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!==st.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 qK=M(()=>{"use strict";co();zt();YK();KK()});function Yue(n,e,t){let i=ge.FromHexString(e),r=new ke(n,t);return r.emissiveColor=i,r.diffuseColor=ge.Black(),r.specularColor=ge.Black(),r.backFaceCulling=!1,r}function Kue(n){let e=new ke("gizmo-origin-mat",n);return e.emissiveColor=new ge(.72,.78,.86),e.diffuseColor=ge.Black(),e.specularColor=ge.Black(),e}var Gue,lb,kue,JO,Wue,Hue,$O,zue,Xue,cb,ZK=M(()=>{"use strict";bs();nx();sx();Ge();zt();em();XP();Ac();Gue=.32,lb=1.05,kue=.075,JO=.28,Wue=.22,Hue=.16,$O=(lb+JO)*.42,zue=new b($O,$O,$O),Xue=[{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)}];cb=class{constructor(e,t){this.engine=e,this.scene=new Jt(e),this.scene.clearColor=new lt(0,0,0,0),this.scene.autoClear=!1,this.camera=new gi("gizmo-cam",0,0,4.1,zue,this.scene),this.camera.minZ=.01,this.camera.fov=.56,this.camera.detachControl(),new ea("gizmo-light",new b(0,1,.5),this.scene);let i=ts.CreateSphere("gizmo-origin",{diameter:Hue,segments:16},this.scene);i.material=Kue(this.scene);for(let{name:s,color:a,rot:o,dir:l}of Xue){let c=Yue(`gizmo-${s}-mat`,a,this.scene),f=ts.CreateCylinder(`gizmo-${s}-shaft`,{height:lb,diameter:kue,tessellation:8},this.scene);f.material=c,f.position=l.scale(lb/2),f.rotation=o;let h=ts.CreateCylinder(`gizmo-${s}-head`,{height:JO,diameterTop:0,diameterBottom:Wue,tessellation:8},this.scene);h.material=c;let d=lb+JO/2;h.position=l.scale(d),h.rotation=o}let r=Gue;this.viewport=new no(.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 tN={};tt(tN,{boundingBoxRendererVertexShaderWGSL:()=>jue});var eN,QK,jue,iN=M(()=>{G();eN="boundingBoxRendererVertexShader",QK=`attribute position: vec3f;uniform world: mat4x4f;uniform viewProjection: mat4x4f; +}`;A.ShadersStore[tN]||(A.ShadersStore[tN]=JK);tme={name:tN,shader:JK}});var pl,ij=M(()=>{Ge();ki();Gn();NC();hb();zt();LL();pl=class n extends Ic{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(()=>(YK(),XK)),Promise.resolve().then(()=>(qK(),jK)),Promise.resolve().then(()=>(lb(),ob))]):await Promise.all([Promise.resolve().then(()=>($K(),QK)),Promise.resolve().then(()=>(tj(),ej)),Promise.resolve().then(()=>(fb(),cb))]),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 ql("HighlightLayerPPP",this._scene.getEngine()),this._horizontalBlurPostprocess=new Ro("HighlightLayerHBP",this._scene.getEngine(),new Fe(1,0),this._options.blurHorizontalSize),this._verticalBlurPostprocess=new Ro("HighlightLayerVBP",this._scene.getEngine(),new Fe(0,1),this._options.blurVerticalSize),this._postProcesses=[this._downSamplePostprocess,this._horizontalBlurPostprocess,this._verticalBlurPostprocess]):(this._horizontalBlurPostprocess=new rs("HighlightLayerHBP",this._scene.getEngine(),new Fe(1,0),this._options.blurHorizontalSize/2),this._verticalBlurPostprocess=new rs("HighlightLayerVBP",this._scene.getEngine(),new Fe(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(Ee.TriangleFillMode,0,6)),this.innerGlow&&t===1&&(e.setFloat("offset",1),i.setStencilFunction(514),i.drawElementsType(Ee.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()}};pl.EffectName="HighlightLayer";pl.NeutralColor=new lt(0,0,0,0);pl.GlowingMeshStencilReference=2;pl.NormalMeshStencilReference=1});var db,na,rj=M(()=>{Gt();Vt();di();Cs();Ge();Vr();_f();jl();FC();DL();QO();Pt();zi();zt();ij();xr();to();hb();Jt.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()===na.EffectName)return this.effectLayers[t];return null};db=class extends Ri{constructor(e,t,i,r,s=null,a=ge.BILINEAR_SAMPLINGMODE,o,l){let c={uniforms:Ro.Uniforms,size:typeof r=="number"?r:void 0,camera:s,samplingMode:a,engine:o,reusable:l,...r};super(e,Ro.FragmentUrl,{effectWrapper:typeof r=="number"||!r.effectWrapper?new Ro(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(()=>(lb(),ob)))):t.push(Promise.resolve().then(()=>(fb(),cb))),super._gatherImports(e,t)}},na=class n extends Bs{static get NeutralColor(){return pl.NeutralColor}static set NeutralColor(e){pl.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 pl(e,t,i)),this.onBeforeBlurObservable=new ie,this.onAfterBlurObservable=new ie,this._engine.isStencilEnable||ee.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?vn(e,this._maxSize):e,t=this._engine.needPOTTextures?vn(t,this._maxSize):t;let i;this._engine.getCaps().textureHalfFloatRender?i=2:i=0,this._blurTexture=new Gr("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 Hh("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 db("HighlightLayerHBP",new Fe(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 db("HighlightLayerVBP",new Fe(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 Fa("HighlightLayerHBP",new Fe(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 Fa("HighlightLayerVBP",new Fe(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=it.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=it.Parse(()=>new n(e.name,t,e.options),e,t,i),s;for(s=0;s{al();lm();QO();Ni();$L();yR(et.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===mt.RIG_MODE_NONE&&e===r.camera||r.camera.cameraRigMode!==mt.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(et.NAME_EFFECTLAYER);e||(e=new iN(n),n._addComponent(e))}});function sj(n,e,t=()=>!0){let i=new na("ai3d-pick-highlight",n),r=new pe(.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!==st.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 aj=M(()=>{"use strict";fo();zt();rj();nj()});function lme(n,e,t){let i=pe.FromHexString(e),r=new ke(n,t);return r.emissiveColor=i,r.diffuseColor=pe.Black(),r.specularColor=pe.Black(),r.backFaceCulling=!1,r}function cme(n){let e=new ke("gizmo-origin-mat",n);return e.emissiveColor=new pe(.72,.78,.86),e.diffuseColor=pe.Black(),e.specularColor=pe.Black(),e}var ime,ub,rme,nN,nme,sme,rN,ame,ome,mb,oj=M(()=>{"use strict";Cs();cx();fx();Ge();zt();em();ZP();Ac();ime=.32,ub=1.05,rme=.075,nN=.28,nme=.22,sme=.16,rN=(ub+nN)*.42,ame=new b(rN,rN,rN),ome=[{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)}];mb=class{constructor(e,t){this.engine=e,this.scene=new Jt(e),this.scene.clearColor=new lt(0,0,0,0),this.scene.autoClear=!1,this.camera=new gi("gizmo-cam",0,0,4.1,ame,this.scene),this.camera.minZ=.01,this.camera.fov=.56,this.camera.detachControl(),new ta("gizmo-light",new b(0,1,.5),this.scene);let i=is.CreateSphere("gizmo-origin",{diameter:sme,segments:16},this.scene);i.material=cme(this.scene);for(let{name:s,color:a,rot:o,dir:l}of ome){let c=lme(`gizmo-${s}-mat`,a,this.scene),f=is.CreateCylinder(`gizmo-${s}-shaft`,{height:ub,diameter:rme,tessellation:8},this.scene);f.material=c,f.position=l.scale(ub/2),f.rotation=o;let h=is.CreateCylinder(`gizmo-${s}-head`,{height:nN,diameterTop:0,diameterBottom:nme,tessellation:8},this.scene);h.material=c;let d=ub+nN/2;h.position=l.scale(d),h.rotation=o}let r=ime;this.viewport=new so(.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 aN={};tt(aN,{boundingBoxRendererVertexShaderWGSL:()=>fme});var sN,lj,fme,oN=M(()=>{G();sN="boundingBoxRendererVertexShader",lj=`attribute position: vec3f;uniform world: mat4x4f;uniform viewProjection: mat4x4f; #ifdef INSTANCES attribute world0 : vec4;attribute world1 : vec4;attribute world2 : vec4;attribute world3 : vec4; #endif @@ -23765,18 +23765,18 @@ var worldPos: vec4f=uniforms.world* vec4f(vertexInputs.position,1.0); vertexOutputs.position=uniforms.viewProjection*worldPos; #define CUSTOM_VERTEX_MAIN_END } -`;T.ShadersStoreWGSL[eN]||(T.ShadersStoreWGSL[eN]=QK);jue={name:eN,shader:QK}});var nN={};tt(nN,{boundingBoxRendererPixelShaderWGSL:()=>que});var rN,$K,que,sN=M(()=>{G();rN="boundingBoxRendererPixelShader",$K=`uniform color: vec4f; +`;A.ShadersStoreWGSL[sN]||(A.ShadersStoreWGSL[sN]=lj);fme={name:sN,shader:lj}});var cN={};tt(cN,{boundingBoxRendererPixelShaderWGSL:()=>hme});var lN,cj,hme,fN=M(()=>{G();lN="boundingBoxRendererPixelShader",cj=`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 -}`;T.ShadersStoreWGSL[rN]||(T.ShadersStoreWGSL[rN]=$K);que={name:rN,shader:$K}});var JK,Zue,ej=M(()=>{G();JK="boundingBoxRendererVertexDeclaration",Zue=`uniform mat4 world;uniform mat4 viewProjection; +}`;A.ShadersStoreWGSL[lN]||(A.ShadersStoreWGSL[lN]=cj);hme={name:lN,shader:cj}});var fj,dme,hj=M(()=>{G();fj="boundingBoxRendererVertexDeclaration",dme=`uniform mat4 world;uniform mat4 viewProjection; #ifdef MULTIVIEW uniform mat4 viewProjectionR; #endif -`;T.IncludesShadersStore[JK]||(T.IncludesShadersStore[JK]=Zue)});var tj,Que,aN=M(()=>{G();tj="boundingBoxRendererUboDeclaration",Que=`#ifdef WEBGL2 +`;A.IncludesShadersStore[fj]||(A.IncludesShadersStore[fj]=dme)});var dj,ume,hN=M(()=>{G();dj="boundingBoxRendererUboDeclaration",ume=`#ifdef WEBGL2 uniform vec4 color;uniform mat4 world;uniform mat4 viewProjection; #ifdef MULTIVIEW uniform mat4 viewProjectionR; @@ -23784,7 +23784,7 @@ uniform mat4 viewProjectionR; #else layout(std140,column_major) uniform;uniform BoundingBoxRenderer {vec4 color;mat4 world;mat4 viewProjection;mat4 viewProjectionR;}; #endif -`;T.IncludesShadersStore[tj]||(T.IncludesShadersStore[tj]=Que)});var lN={};tt(lN,{boundingBoxRendererVertexShader:()=>$ue});var oN,ij,$ue,cN=M(()=>{G();ej();aN();oN="boundingBoxRendererVertexShader",ij=`attribute vec3 position; +`;A.IncludesShadersStore[dj]||(A.IncludesShadersStore[dj]=ume)});var uN={};tt(uN,{boundingBoxRendererVertexShader:()=>mme});var dN,uj,mme,mN=M(()=>{G();hj();hN();dN="boundingBoxRendererVertexShader",uj=`attribute vec3 position; #include<__decl__boundingBoxRendererVertex> #ifdef INSTANCES attribute vec4 world0;attribute vec4 world1;attribute vec4 world2;attribute vec4 world3; @@ -23804,17 +23804,17 @@ gl_Position=viewProjection*worldPos; #endif #define CUSTOM_VERTEX_MAIN_END } -`;T.ShadersStore[oN]||(T.ShadersStore[oN]=ij);$ue={name:oN,shader:ij}});var rj,Jue,nj=M(()=>{G();rj="boundingBoxRendererFragmentDeclaration",Jue=`uniform vec4 color; -`;T.IncludesShadersStore[rj]||(T.IncludesShadersStore[rj]=Jue)});var hN={};tt(hN,{boundingBoxRendererPixelShader:()=>eme});var fN,sj,eme,dN=M(()=>{G();nj();aN();fN="boundingBoxRendererPixelShader",sj=`#include<__decl__boundingBoxRendererFragment> +`;A.ShadersStore[dN]||(A.ShadersStore[dN]=uj);mme={name:dN,shader:uj}});var mj,pme,pj=M(()=>{G();mj="boundingBoxRendererFragmentDeclaration",pme=`uniform vec4 color; +`;A.IncludesShadersStore[mj]||(A.IncludesShadersStore[mj]=pme)});var _N={};tt(_N,{boundingBoxRendererPixelShader:()=>_me});var pN,_j,_me,gN=M(()=>{G();pj();hN();pN="boundingBoxRendererPixelShader",_j=`#include<__decl__boundingBoxRendererFragment> #define CUSTOM_FRAGMENT_DEFINITIONS void main(void) { #define CUSTOM_FRAGMENT_MAIN_BEGIN gl_FragColor=color; #define CUSTOM_FRAGMENT_MAIN_END -}`;T.ShadersStore[fN]||(T.ShadersStore[fN]=sj);eme={name:fN,shader:sj}});var lj,aj,fb,tme,ime,oj,uN,cj=M(()=>{bs();ki();vm();Ge();oo();lm();ky();Vn();xP();zt();di();kh();mf();mP();jo();Pt();Object.defineProperty(Jt.prototype,"forceShowBoundingBoxes",{get:function(){return this._forceShowBoundingBoxes||!1},set:function(n){this._forceShowBoundingBoxes=n,n&&this.getBoundingBoxRenderer()},enumerable:!0,configurable:!0});Jt.prototype.getBoundingBoxRenderer=function(){return this._boundingBoxRenderer||(this._boundingBoxRenderer=new uN(this)),this._boundingBoxRenderer};Object.defineProperty(Er.prototype,"showBoundingBox",{get:function(){return this._showBoundingBox||!1},set:function(n){this._showBoundingBox=n,n&&this.getScene().getBoundingBoxRenderer()},enumerable:!0,configurable:!0});lj=j.Identity(),aj=new j,fb=new b,tme=new b,ime=lj.asArray(),oj=new Ef(fb,fb),uN=class{get shaderLanguage(){return this._shaderLanguage}constructor(e){this.name=et.NAME_BOUNDINGBOXRENDERER,this.frontColor=new ge(1,1,1),this.backColor=new ge(.1,.1,.1),this.showBackLines=!0,this.onBeforeBoxRenderingObservable=new ie,this.onAfterBoxRenderingObservable=new ie,this.onResourcesReadyObservable=new ie,this.enabled=!0,this._shaderLanguage=0,this.renderList=new Bi(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 ur(this.scene.getEngine(),void 0,void 0,"BoundingBoxRendererFront",!0),this._buildUniformLayout(this._uniformBufferFront),this._uniformBufferBack=new ur(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(et.STEP_BEFOREEVALUATEACTIVEMESH_BOUNDINGBOXRENDERER,this,this.reset),this.scene._preActiveMeshStage.registerStep(et.STEP_PREACTIVEMESH_BOUNDINGBOXRENDERER,this,this._preActiveMesh),this.scene._evaluateSubMeshStage.registerStep(et.STEP_EVALUATESUBMESH_BOUNDINGBOXRENDERER,this,this._evaluateSubMesh),this.scene._afterRenderingGroupDrawStage.registerStep(et.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?(ee.Error("BoundingBoxRenderer: Timeout while waiting for the renderer to be ready."),r&&ee.Error(r)):(ee.Error("BoundingBoxRenderer: An unexpected error occurred while waiting for the renderer to be ready."),r&&(ee.Error(r),r.stack&&ee.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 So("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(()=>(iN(),tN)),Promise.resolve().then(()=>(sN(),nN))]):await Promise.all([Promise.resolve().then(()=>(cN(),lN)),Promise.resolve().then(()=>(dN(),hN))])}},!1),this._colorShader.setDefine("INSTANCES",this._useInstances),this._colorShader.doNotSerialize=!0,this._colorShader.reservedDataStore={hidden:!0},this._colorShaderForOcclusionQuery=new So("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(()=>(iN(),tN)),Promise.resolve().then(()=>(sN(),nN))]):await Promise.all([Promise.resolve().then(()=>(cN(),lN)),Promise.resolve().then(()=>(dN(),hN))])}},!0),this._colorShaderForOcclusionQuery.doNotSerialize=!0,this._colorShaderForOcclusionQuery.reservedDataStore={hidden:!0};let e=this.scene.getEngine(),t=ox({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(oj);let s=0,a=this.scene.floatingOriginOffset;for(let g=0;g{"use strict";Ge();EL();zt();co();cj();Vs();MM();Qf=class Qf{constructor(e,t,i){this.occlusionDirection=b.Zero();this.occlusionRay=new Kr(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(Qf.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===st.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===st.POINTERMOVE){if(this.activePointerId!==null&&a.pointerId!==this.activePointerId)return;this.partPointerActive&&(a.preventDefault(),a.stopPropagation()),e.onPointerMove(a)}else if(s.type===st.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(Qf.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=Gd(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=wc(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)&&Nc(a.distance,r.distance,r.epsilon);o!==this.lastOccluded&&(this.lastOccluded=o,this.setBoundingBoxColor(o?Qf.BBOX_OCCLUDED:Qf.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=yv({startPosition:Ht(e.startPosition),pivot:Ht(e.pivot),startRotationQuaternion:Cv(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=Gd(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,j.Identity(),this.camera),l=Mv({origin:Ht(o.origin),direction:Ht(o.direction)},t);return l?new b(l.x,l.y,l.z):null}};Qf.BBOX_VISIBLE=new ge(.25,.7,1),Qf.BBOX_OCCLUDED=new ge(.1,.25,.4);mN=Qf});var _j={};tt(_j,{BabylonModelPreview:()=>ub,createBabylonModelPreview:()=>mme});function ame(n){let e=n.getClassName();return e==="DirectionalLight"||e==="PointLight"||e==="SpotLight"}function pN(n){return n.getClassName()==="GaussianSplattingMesh"}function db(n,e){var i;return((i=nf(n.metadata,{name:n.name}).displayName)==null?void 0:i.trim())||n.name||e}function uj(n){let e=[],t=n;for(;t&&typeof t=="object"&&"name"in t;){let i=t,r=db(i,"node");r.trim()&&e.push(r),t=i.parent}return e.reverse().join("/")}function mj(n,e){var t;return((t=n.displayName)==null?void 0:t.trim())||n.partNumber||n.componentId||e}function ome(n,e){try{if(e==="gltf")return JSON.parse(new TextDecoder().decode(new Uint8Array(n)));if(e!=="glb")return null;let t=new DataView(n);if(t.byteLength<20||t.getUint32(0,!0)!==1179937895)return null;let i=t.getUint32(12,!0);if(t.getUint32(16,!0)!==1313821514||20+i>t.byteLength)return null;let s=new Uint8Array(n,20,i);return JSON.parse(new TextDecoder().decode(s))}catch(t){return null}}function lme(n,e){let t=ome(n,e),i=new Map;if(!t)return i;let r=Array.isArray(t.nodes)?t.nodes:[];for(let a of r){if(!a||typeof a!="object")continue;let o=a,l=typeof o.name=="string"?o.name:"";l&&o.extras&&i.set(`node:${l}`,o.extras)}let s=Array.isArray(t.meshes)?t.meshes:[];for(let a of s){if(!a||typeof a!="object")continue;let o=a,l=typeof o.name=="string"?o.name:"";l&&o.extras&&i.set(`mesh:${l}`,o.extras)}return i}function pj(n,e){return e===void 0?n:n==null?e:{metadata:n,extras:e}}function cme(n){return!!n&&typeof n=="object"&&"getBoundingInfo"in n}function av(n){return new b(n.x,n.y,n.z)}function fme(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 hme(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 dme(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 ume(n,e,t){let i=hs(e),r=i.replace(/\.[^.]+$/,""),s=qr(t),a=[Us(n,e),Us(n,i)];if(s)for(let o of dj)a.push(Us(n,`${s}.${o}`));for(let o of dj){let l=`${r}.${o}`;l!==i&&a.push(Us(n,l))}return a}function mme(n){return new ub(n)}var hb,dj,rme,nme,sme,na,ub,gj=M(()=>{"use strict";Fy();bs();nx();sx();ok();lk();aP();Ge();zt();Ci();XP();Ac();Kz();EL();ER();n5();qy();ep();nv();nv();FO();UO();vK();qK();jS();Zs();Bs();ZK();hj();eb();rf();ZS();TM();AM();Vs();iT();N_();SM();bM();hb=null,dj=["jpg","jpeg","png","bmp","tga","webp","tif","tiff"],rme=/^\s*(map_Kd|map_Ka|map_Ks|map_Ns|map_d|map_bump|bump|disp|decal)\s+(.+)/i,nme=.242,sme=320;na=class na{constructor(e){this.rootMesh=null;this.loadedMeshes=[];this.loadedTransformNodes=[];this.loadedExt="";this.rendering=!1;this.contextLost=!1;this.viewportVisible=!0;this.viewportObserver=null;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.gltfComponentMetadata=new Map;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.measurementActive=!1;this.measurementScale={x:1,y:1,z:1};this.measurementUnit="mm";this.measurementSegments=[];this.measurementMarkers=[];this.pendingPoint=null;this.pendingMarker=null;this.hoveredMarkerIndex=-1;this.lastPointerClient={x:0,y:0};this.previewLine=null;this.handlePointerMove=e=>{if(this.lastPointerClient={x:e.clientX,y:e.clientY},!this.measurementActive||(this.pendingPoint&&this.updatePreviewLine(),this.measurementMarkers.length===0))return;let t=this.engine.getRenderingCanvas();if(!t)return;let i=t.getBoundingClientRect(),r=e.clientX-i.left,s=e.clientY-i.top,a=this.scene.pick(r,s,l=>this.measurementMarkers.includes(l)),o=a.hit?this.measurementMarkers.indexOf(a.pickedMesh):-1;if(o!==this.hoveredMarkerIndex){if(this.hoveredMarkerIndex>=0&&this.hoveredMarkerIndex=0&&o{e.preventDefault(),e.stopPropagation()};this.handleViewportIntersection=e=>{let t=e.some(i=>i.isIntersecting);t!==this.viewportVisible&&(this.viewportVisible=t,t?this.startRenderLoop():this.rendering&&(this.engine.stopRenderLoop(),this.rendering=!1))};this.handleContextLost=e=>{e.preventDefault(),this.contextLost=!0,this.rendering&&(this.engine.stopRenderLoop(),this.rendering=!1)};this.handleContextRestored=()=>{this.contextLost=!1,this.engine.resize(),this.startRenderLoop()};this.engine=new Be(e,!0,{preserveDrawingBuffer:!0}),this.scene=new Jt(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}),e.addEventListener("pointermove",this.handlePointerMove),e.addEventListener("webglcontextlost",this.handleContextLost),e.addEventListener("webglcontextrestored",this.handleContextRestored),this.scene.ambientColor=new ge(.3,.3,.3);let t=new ea("default-light",new b(0,1,.5),this.scene);t.intensity=1.2,this.resizeObs=new ResizeObserver(()=>this.engine.resize()),this.resizeObs.observe(e),typeof IntersectionObserver!="undefined"&&(this.viewportObserver=new IntersectionObserver(this.handleViewportIntersection,{root:null,threshold:[0,.01]}),this.viewportObserver.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=fj(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 rv(),this.rootMesh){let m=this.rootMesh;m.dispose(!0,!0);for(let p of this.loadedMeshes)p!==m&&!p.isDisposed()&&p.dispose(!0,!0);this.rootMesh=null}this.loadedMeshes=[],this.loadedTransformNodes=[],this.clearMeasurements(),(h=this.disassembly)==null||h.dispose(),this.disassembly=null,this.clearFocusedMesh(),this.originalMeshVisibility.clear();let s=t.toLowerCase().replace(".","");this.loadedExt=s,this.resourceWarnings=[],this.gltfComponentMetadata=lme(e,s);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,${Nl(e)}`;if(s==="obj"&&i&&r){hb&&await hb;let m;hb=new Promise(p=>{m=p});try{let{OBJFileLoader:p}=await Promise.resolve().then(()=>(NO(),aK)),_=p.prototype;typeof _._loadMTL!="function"&&console.warn("[AI3D] OBJFileLoader._loadMTL not found \u2014 MTL vault resolution disabled");let g=_._loadMTL,x=new TextDecoder().decode(new Uint8Array(e)).match(/mtllib\s+(.+)/),A=null;if(x&&i&&r){let S=fme(x[1]),R=Dp(r),I=Us(R,S);try{let C=await i(I),D=new TextDecoder().decode(new Uint8Array(C)).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(C){this.resourceWarnings.push(`OBJ material library not found: ${I}`)}}_._loadMTL=function(S,R,I){let C=A!=null?A:"";I(C)};let E=await Yg(c,a,{meshNames:"",pluginExtension:l});this.loadedMeshes=E.meshes,this.loadedTransformNodes=E.transformNodes,E.meshes.length>0&&(this.rootMesh=E.meshes[0]),_._loadMTL=g}catch(p){throw console.error("[AI3D] OBJ load error:",p),p}finally{m(),hb=null}}else if(s==="stl")this.rootMesh=fK(a,e),this.rootMesh&&(this.loadedMeshes=[this.rootMesh]);else if(s==="ply")this.rootMesh=dK(a,e),this.rootMesh&&(this.loadedMeshes=[this.rootMesh]);else{let m=await Yg(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=qS(this.getRenderableBounds(this.rootMesh));return this.camera.target=av(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=jK(this.scene,m=>{if(!this.isDisassemblyActive()){if(this.measurementActive&&m.pickedPoint){this.addMeasurementPoint(av(m.pickedPoint));return}this._lastPickResult=m,this.focusSelectionEnabled&&m.mesh&&this.setFocusedMesh(m.mesh),this._onPickCallbacks.forEach(p=>p(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?ge.FromHexString(e.color):ge.White(),i=(r=e.intensity)!=null?r:1;switch(e.type){case"hemisphere":{let a=e.groundColor?ge.FromHexString(e.groundColor):new ge(.2,.2,.2),o=new ea("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 Ps("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 Pf("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 kr("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 Pf("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(!ame(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(ge.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 Bm,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=Ur(e),i=Math.max(t.x,t.z)*3,r=e.min.y;this.groundMesh=ts.CreateGround("ground",{width:i,height:i},this.scene),this.groundMesh.position.y=r;let s=new ke("ground-mat",this.scene);s.diffuseColor=new ge(.15,.15,.15),s.specularColor=ge.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=Ur(e),i=Math.max(t.x,t.z)*2,r=e.min.y-.01;this.gridMesh=ts.CreateGround("grid",{width:i,height:i,subdivisions:20},this.scene),this.gridMesh.position.y=r;let s=new ke("grid-mat",this.scene);s.wireframe=!0,s.diffuseColor=new ge(.3,.3,.3),s.emissiveColor=new ge(.1,.1,.1),this.gridMesh.material=s}createAxis(){if(!this.rootMesh||this.axisMeshes.length>0)return;let e=this.getRenderableBounds(this.rootMesh),t=I3(e)*1.5,i=av(e.min),r=O_(e)*.01,s=[["x",ge.Red(),new b(t,0,0)],["y",ge.Green(),new b(0,t,0)],["z",ge.Blue(),new b(0,0,t)]];for(let[a,o,l]of s){let c=ts.CreateTube(`axis-${a}`,{path:[i,i.add(l)],radius:r,tessellation:8},this.scene),f=new ke(`axis-${a}-mat`,this.scene);f.emissiveColor=o,f.diffuseColor=ge.Black(),c.material=f,this.axisMeshes.push(c)}}setSTLColor(e){if(!this.rootMesh)return;let t=ge.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&&(pN(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}toggleMeasurement(){return this.measurementActive=!this.measurementActive,this.measurementActive||this.clearMeasurements(),this.measurementActive}isMeasurementActive(){return this.measurementActive}clearMeasurements(){this.measurementActive=!1,this.pendingPoint=null,this.pendingMarker=null,this.hoveredMarkerIndex=-1,this.removePreviewLine();for(let e of this.measurementSegments)e.line.dispose(),e.label.dispose();this.measurementSegments=[];for(let e of this.measurementMarkers)e.dispose();this.measurementMarkers=[]}setMeasurementScale(e){this.measurementScale=B_(e),this.updateMeasurementLabels()}getMeasurementScale(){return{...this.measurementScale}}setMeasurementUnit(e){this.measurementUnit=lT(e),this.updateMeasurementLabels()}getMeasurementUnit(){return this.measurementUnit}getMeasurementBounds(){if(!this.rootMesh)return null;let e=this.getRenderableBounds(this.rootMesh);return e?{x:e.max.x-e.min.x,y:e.max.y-e.min.y,z:e.max.z-e.min.z}:null}exportMeasurements(){return fT(this.createMeasurementRecords())}updateMeasurementLabels(){if(this.measurementSegments.length===0)return;let e=this.getMeasurementMarkerSize()*4;for(let t of this.measurementSegments){let i=Bu(this.createMeasurementReading(t.start,t.end));t.label.dispose(!1,!0);let r=b.Center(t.start,t.end);t.label=this.createMeasurementLabelMesh(i,r,e)}}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 cb(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=pr()?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=av(fn(t)),r=av(Ur(t));this.bboxMesh=ts.CreateBox("bbox",{width:r.x,height:r.y,depth:r.z},this.scene),this.bboxMesh.position=i;let s=new ke("bbox-mat",this.scene);s.wireframe=!0,s.emissiveColor=new ge(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&&gK(this.rootMesh,e,t,this.loadedMeshes)}resetExplode(){this.rootMesh&&VO(this.rootMesh,this.loadedMeshes)}resetView(){this.rootMesh&&VO(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=pN(this.rootMesh),s=e&&hs(e)||t.rootName;return eT({title:s,format:this.loadedExt.toUpperCase(),summary:t,meshBreakdown:i.map(a=>{var o,l;return{name:a.name,triangleCount:r?null:sv(a),vertexCount:pd(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(){if(!this.rootMesh)return null;let e=this.getRenderableMeshes(this.rootMesh),t=this.computeComponentPartSummaries(e);return oT({summary:this.computeSummary(this.rootMesh),renderableMeshes:e,groupedPartCandidates:t,createMeshPart:i=>this.computePartSummary(i),getMeshMaterialNames:i=>{var r;return[(r=i.material)==null?void 0:r.name]},resourceWarnings:this.resourceWarnings})}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?tT(e):""}getPickWorldPoint(e){if(e.pickedPoint&&typeof e.pickedPoint=="object")return Ht(e.pickedPoint);if(cme(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)/sme)),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=window.requestAnimationFrame(s);return}this.focusWorldPointFrame=0};this.focusWorldPointFrame=window.requestAnimationFrame(s)}getAnnotationCameraStateKey(){return sT([{value:this.camera.alpha,digits:3},{value:this.camera.beta,digits:3},{value:this.camera.radius,digits:3},{value:this.camera.target.x,digits:2},{value:this.camera.target.y,digits:2},{value:this.camera.target.z,digits: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=na.annotationWorldPoint;return a.set(e.x,e.y,e.z),b.ProjectToRef(a,na.annotationIdentity,this.scene.getTransformMatrix(),this.camera.viewport.toGlobal(r,s),na.annotationProjection),w3(na.annotationProjection,r,s,i,t)}isAnnotationWorldPointOccluded(e){if(this.scene.isDisposed)return!1;let t=wc(Ht(this.camera.position),e);if(!t)return!1;let i=na.annotationDirection,r=na.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)&&Nc(s.distance,t.distance,t.epsilon)}getAnnotationProvider(){let e=this.engine.getRenderingCanvas();if(!e)throw new Error("Preview canvas is unavailable");return nT({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=pr()?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,c;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.clearMeasurements(),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),e==null||e.removeEventListener("pointermove",this.handlePointerMove),e==null||e.removeEventListener("webglcontextlost",this.handleContextLost),e==null||e.removeEventListener("webglcontextrestored",this.handleContextRestored),(a=this.viewportObserver)==null||a.disconnect(),this.viewportObserver=null,this.resizeObs.disconnect(),this.autoRotateBehavior&&(this.camera.removeBehavior(this.autoRotateBehavior),this.autoRotateBehavior=null);for(let f of this.configLights)f.dispose();this.configLights=[],(o=this.shadowGenerator)==null||o.dispose(),this.shadowGenerator=null,(l=this.groundMesh)==null||l.dispose(),this.groundMesh=null,(c=this.gridMesh)==null||c.dispose(),this.gridMesh=null;for(let f of this.axisMeshes)f.dispose();this.axisMeshes=[],this.scene.dispose(),this.engine.dispose()}startRenderLoop(){this.rendering||!this.viewportVisible||this.contextLost||(this.rendering=!0,this.engine.runRenderLoop(()=>{if(!this.canRender()||!this.viewportVisible||this.contextLost){this.engine.stopRenderLoop(),this.rendering=!1;return}this.scene.render(),this.gizmo&&this.gizmoEnabled&&(this.gizmo.syncWith(this.camera),this.gizmo.render())}))}getRenderableMeshes(e){return _d(e,this.loadedMeshes)}getRenderableBounds(e){return $R(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:nme,r.renderOutline=s,r.outlineColor=new ge(.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){var s;let t=e.name||`mesh-${e.uniqueId}`,i=pj(e.metadata,(s=this.gltfComponentMetadata.get(`node:${t}`))!=null?s:this.gltfComponentMetadata.get(`mesh:${t}`)),r=nf(i,{name:t,path:uj(e)});return{..._K(e),name:mj(r,t),source:r.hasExplicitIdentity?"component":"mesh",meshNames:[t],childCount:1,componentId:r.componentId,occurrenceId:r.occurrenceId,partNumber:r.partNumber,componentPath:r.componentPath}}computeComponentPartSummaries(e){let t=new Set(e),i=[],r=new Set,s=[];for(let a of this.loadedTransformNodes){let o=a.getChildMeshes(!1).filter(h=>t.has(h)),l=db(a,`component-${a.uniqueId}`),c=pj(a.metadata,this.gltfComponentMetadata.get(`node:${l}`)),f=nf(c,{name:db(a,`component-${a.uniqueId}`),path:uj(a)});o.length<1||o.length===e.length||!f.hasExplicitIdentity&&(!a.name.trim()||o.length<2)||s.push({node:a,childMeshes:o,identity:f})}return s.sort((a,o)=>a.childMeshes.length-o.childMeshes.length).forEach(({node:a,childMeshes:o,identity:l})=>{var m;let c=o.filter(p=>!r.has(p));if(c.length<1||!l.hasExplicitIdentity&&c.length<2)return;for(let p of c)r.add(p);let f=hp(c);if(!f)return;let h=new Set,d=0,u=0;for(let p of c)d+=sv(p),u+=pd(p),(m=p.material)!=null&&m.name&&h.add(p.material.name);i.push(Ih({name:mj(l,db(a,`component-${a.uniqueId}`)),triangleCount:d,vertexCount:u,materialName:aT(h),boundingSize:Ur(f),center:fn(f),source:l.hasExplicitIdentity?"component":"group",meshNames:c.map(p=>p.name||`mesh-${p.uniqueId}`),childCount:c.length,componentId:l.componentId,occurrenceId:l.occurrenceId,partNumber:l.partNumber,componentPath:l.componentPath}))}),{parts:i,groupedMeshes:r}}getMeasurementMarkerSize(){if(!this.rootMesh)return .02;let e=this.getRenderableBounds(this.rootMesh);return e?Math.max(e.max.x-e.min.x,e.max.y-e.min.y,e.max.z-e.min.z,.001)*.015:.02}findNearestMarkerIndex(e){let t=this.getMeasurementMarkerSize()*2.5;for(let i=0;i=0?this.measurementMarkers[t].position.clone():e;if(this.pendingPoint){if(b.Distance(i,this.pendingPoint)<1e-4)return;if(t<0){let r=this.getMeasurementMarkerSize(),s=ts.CreateSphere("measure-marker",{diameter:r},this.scene);s.position=i,s.isPickable=!1;let a=new ke("measure-marker-mat",this.scene);a.diffuseColor=new ge(1,.42,.42),a.emissiveColor=new ge(1,.42,.42),s.material=a,s.renderingGroupId=2,this.measurementMarkers.push(s)}this.createMeasurementSegment(this.pendingPoint,i),this.pendingMarker&&(this.pendingMarker.scaling.setAll(1),this.pendingMarker.material.diffuseColor=new ge(1,.42,.42),this.pendingMarker.material.emissiveColor=new ge(1,.42,.42)),this.pendingPoint=null,this.pendingMarker=null,this.removePreviewLine()}else{if(t<0){let r=this.getMeasurementMarkerSize(),s=ts.CreateSphere("measure-marker",{diameter:r},this.scene);s.position=i,s.isPickable=!1;let a=new ke("measure-marker-mat",this.scene);a.diffuseColor=new ge(1,.42,.42),a.emissiveColor=new ge(1,.42,.42),s.material=a,s.renderingGroupId=2,this.measurementMarkers.push(s),this.pendingMarker=s}else this.pendingMarker=this.measurementMarkers[t];this.pendingMarker.scaling.setAll(1.6),this.pendingMarker.material.diffuseColor=new ge(.32,.81,.4),this.pendingMarker.material.emissiveColor=new ge(.32,.81,.4),this.pendingPoint=i,this.ensurePreviewLine()}}createMeasurementSegment(e,t){let i=ts.CreateLines("measure-line",{points:[e,t]},this.scene);i.color=new ge(1,.42,.42),i.isPickable=!1,i.renderingGroupId=2;let r=Bu(this.createMeasurementReading(e,t)),s=b.Center(e,t),a=this.createMeasurementLabelMesh(r,s,this.getMeasurementMarkerSize()*4);this.measurementSegments.push({start:e,end:t,line:i,label:a})}createMeasurementLabelMesh(e,t,i){let r=ts.CreatePlane("measure-label",{width:i*5,height:i*1.25},this.scene);r.position=t,r.billboardMode=q.BILLBOARDMODE_ALL,r.isPickable=!1,r.renderingGroupId=2;let s=new mR("measure-label-tex",{width:640,height:160},this.scene),a=s.getContext();a.fillStyle="rgba(32, 36, 46, 0.9)",a.fillRect(0,0,640,160),a.strokeStyle="#ff6b6b",a.lineWidth=4,a.strokeRect(0,0,640,160),a.fillStyle="#ffffff",a.textAlign="center",a.textBaseline="middle",a.font="bold 46px sans-serif",a.fillText(e.primary,320,58),a.font="28px sans-serif",a.fillStyle="rgba(255, 255, 255, 0.82)",a.fillText(e.secondary,320,112),s.update();let o=new ke("measure-label-mat",this.scene);return o.diffuseTexture=s,o.emissiveColor=new ge(1,1,1),o.disableLighting=!0,o.opacityTexture=s,r.material=o,r}ensurePreviewLine(){this.previewLine||(this.previewLine=ts.CreateLines("measure-preview",{points:[b.Zero(),b.Zero()],updatable:!0},this.scene),this.previewLine.color=new ge(1,1,1),this.previewLine.alpha=.5,this.previewLine.isPickable=!1,this.previewLine.renderingGroupId=2)}updatePreviewLine(){if(!this.pendingPoint||!this.previewLine||!this.rootMesh)return;let e=this.engine.getRenderingCanvas();if(!e)return;let t=e.getBoundingClientRect(),i=this.lastPointerClient.x-t.left,r=this.lastPointerClient.y-t.top,s=this.scene.pick(i,r,o=>o!==this.previewLine&&!this.measurementMarkers.includes(o)),a;if(s.hit&&s.pickedPoint)a=s.pickedPoint;else{let o=this.scene.createPickingRay(i,r,j.Identity(),this.camera);a=this.pendingPoint.add(o.direction.scale(5))}this.previewLine=ts.CreateLines("measure-preview",{points:[this.pendingPoint,a],instance:this.previewLine},this.scene),this.previewLine.color=new ge(1,1,1),this.previewLine.alpha=.5,this.previewLine.isPickable=!1,this.previewLine.renderingGroupId=2}removePreviewLine(){this.previewLine&&(this.previewLine.dispose(),this.previewLine=null)}createMeasurementReading(e,t){return cT(this.toMeasurementPoint(e),this.toMeasurementPoint(t),this.measurementScale,this.measurementUnit)}createMeasurementRecords(){return this.measurementSegments.map((e,t)=>({index:t+1,start:this.toMeasurementPoint(e.start),end:this.toMeasurementPoint(e.end),reading:this.createMeasurementReading(e.start,e.end)}))}toMeasurementPoint(e){return{x:e.x,y:e.y,z:e.z}}computeSummary(e){let t=this.getRenderableMeshes(e),i=pN(e),r=t.reduce((s,a)=>s+pd(a),0);return JR(e.name,this.getRenderableBounds(e),t,{splatCount:i?r:void 0,resourceWarnings:this.resourceWarnings})}};na.annotationIdentity=j.Identity(),na.annotationWorldPoint=b.Zero(),na.annotationProjection=b.Zero(),na.annotationDirection=b.Zero(),na.annotationRay=new Kr(b.Zero(),b.Zero(),1);ub=na});async function vj(n,e){if(Hd(e).backend==="three"){let{createThreeModelPreview:r}=await Promise.resolve().then(()=>(j3(),K3));return r(n)}let{createBabylonModelPreview:i}=await Promise.resolve().then(()=>(gj(),_j));return i(n)}var Ej=M(()=>{"use strict";Lv()});var Sj={};tt(Sj,{createBabylonGridRenderer:()=>_me});function pme(n){return n.replace(/\|/g,"\\|").replace(/\r?\n/g," ")}function _N(n){return new b(n.x,n.y,n.z)}function _me(n){return new gN(n)}var dp,gN,Tj=M(()=>{"use strict";Fy();bs();nx();sx();Ge();zt();em();ep();Zh();Ac();nv();nv();eb();jS();Zs();rf();ZS();dp=32;gN=class{constructor(e){this.cells=[];this.initialCameras=[];this.wireframeEnabled=!1;this.rendering=!1;this.dirty=!0;this.contextLost=!1;this.preventCanvasWheelScroll=e=>{e.preventDefault(),e.stopPropagation()};this.handleContextLost=e=>{e.preventDefault(),this.contextLost=!0,this.rendering&&(this.engine.stopRenderLoop(),this.rendering=!1)};this.handleContextRestored=()=>{this.contextLost=!1,this.engine.resize(),this.startRenderLoop(),this.markDirty()};e.className="ai3d-canvas-full",e.addEventListener("wheel",this.preventCanvasWheelScroll,{passive:!1}),this.engine=new Be(e,!0,{preserveDrawingBuffer:!0}),e.addEventListener("webglcontextlost",this.handleContextLost),e.addEventListener("webglcontextrestored",this.handleContextRestored),this.scene=new Jt(this.engine),this.scene.clearColor=new lt(.12,.12,.14,1),this.scene.autoClear=!1,new ea("default-light",new b(0,1,.5),this.scene),this.resizeObs=new ResizeObserver(()=>{this.engine.resize(),this.markDirty()}),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}markDirty(){this.dirty=!0}getCellBounds(e){let t=hp(e);if(!t)throw new Error("Grid cell has no renderable meshes");return t}async loadModels(e,t,i){var h,d,u;await rv();let r=e.length>dp?(console.warn(`[AI3D Grid] Capping ${e.length} models to ${dp} (layerMask limit)`),e.slice(0,dp)):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;mdp?(console.warn(`[AI3D Preset] Capping ${e.placements.length} placements to ${dp} (layerMask limit)`),e.placements.slice(0,dp)):e.placements,r=[];for(let f=0;f0&&(d.push(...r[p]),u|=1<this.markDirty())),this.initialCameras.push({alpha:f.alpha,beta:f.beta,radius:f.radius,target:f.target.clone()}),f}async loadOne(e,t,i,r,s,a,o){var d,u;let l=await t(e.path),c=(u=(d=e.path.split(".").pop())==null?void 0:d.replace(".","").toLowerCase())!=null?u:"glb",{renderableMeshes:f}=await this.importMesh(e.path,l,o);if(c==="stl"&&e.color){let m=ge.FromHexString(e.color);for(let p of f)p.material instanceof ke&&p.material.name==="stl-mat"&&(p.material.diffuseColor=m)}if(c==="stl"&&e.wireframe!==void 0)for(let m of f)m.material instanceof ke&&(m.material.wireframe=e.wireframe);let h=this.createCellCamera(f,o,i,r,s,a);this.cells.push({meshes:f,camera:h})}createCellCamera(e,t,i,r,s,a){let o=qS(this.getCellBounds(e)),l=new gi(`cell-cam-${t}`,Math.PI/4,Math.PI/3,o.radius,_N(o.target),this.scene);l.fov=45*Math.PI/180,l.minZ=o.near,l.maxZ=o.far,l.lowerRadiusLimit=o.lowerRadiusLimit,l.upperRadiusLimit=o.upperRadiusLimit,l.wheelPrecision=30,l.viewport=new no(i,r,s,a),l.layerMask=1<this.markDirty())),this.initialCameras.push({alpha:l.alpha,beta:l.beta,radius:l.radius,target:l.target.clone()}),l}renderFrame(){if(!this.canRender()||!this.dirty||this.contextLost)return;this.dirty=!1;let e=this.engine,t=this.scene;e.clear(t.clearColor,!0,!0);for(let i of this.cells){e.setViewport(i.camera.viewport);let r=i.camera.viewport,s=e.getRenderWidth(),a=e.getRenderHeight();e.enableScissor(r.x*s,r.y*a,r.width*s,r.height*a),t.activeCamera=i.camera,t.render(),e.disableScissor()}}startRenderLoop(){this.rendering||(this.rendering=!0,this.engine.runRenderLoop(()=>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=pr()?1.5:1;return this.engine.setHardwareScalingLevel(i/t),t}resetView(){for(let e=0;e(Tj(),Sj));return e(n)}var xj=M(()=>{"use strict"});function gme(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 gd(n,e,t,i){let r=Hd(i);return gme(n,e,r),{preview:await vj(t,i),route:r}}function vme(n,e,t){n.info("select preview backend",{...e,backend:t.backend,reason:t.reason})}async function Rj(n,e,t){let i=kw();return vme(n,e,i),{renderer:await Aj(t),route:i}}var mb=M(()=>{"use strict";Ej();xj();Lv()});function vN(n){Ij=n}function pb(n){return bj[n]>=bj[Ij]}function _b(){return new Date().toISOString()}function gb(n){return n&&Object.keys(n).length>0?n:void 0}function Wi(n){let e=`[AI3D][${n}]`;return{debug(t,i){pb("debug")&&console.debug(e,_b(),t,gb(i))},info(t,i){pb("info")&&console.debug(e,_b(),t,gb(i))},warn(t,i){pb("warn")&&console.warn(e,_b(),t,gb(i))},error(t,i){pb("error")&&console.error(e,_b(),t,gb(i))}}}var bj,Ij,Tn=M(()=>{"use strict";bj={debug:10,info:20,warn:30,error:40},Ij="warn"});function yr(n,e){return!!n&&typeof n=="object"&&e in n}function vb(n){return yr(n,"getAnnotationProvider")}function Mj(n){return yr(n,"hasAnimations")&&yr(n,"toggleAnimation")}function ss(n){return yr(n,"toggleMeasurement")&&yr(n,"isMeasurementActive")&&yr(n,"clearMeasurements")&&yr(n,"setMeasurementScale")&&yr(n,"getMeasurementScale")&&yr(n,"setMeasurementUnit")&&yr(n,"getMeasurementUnit")&&yr(n,"getMeasurementBounds")&&yr(n,"updateMeasurementLabels")&&yr(n,"exportMeasurements")}function Eb(n){return yr(n,"toggleDisassembly")&&yr(n,"resetDisassembly")&&yr(n,"isDisassemblyEnabled")}function Sb(n){return yr(n,"toggleFocusSelection")&&yr(n,"isFocusSelectionEnabled")}function Cj(n){return yr(n,"toggleWireframe")}function EN(n){return yr(n,"toggleOrientationGizmo")}function yj(n){return yr(n,"toggleBoundingBox")}function Pj(n){return yr(n,"setRenderScale")}var ov=M(()=>{"use strict"});function Pr(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 Lj(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{re.stopPropagation()};d.addEventListener("pointerdown",_),d.addEventListener("mousedown",_),d.addEventListener("click",_),f&&(d.classList.add("is-mobile"),Dj(e,!1));let g=re=>(re.classList.add("is-secondary"),re),v=(re,K)=>{re.classList.toggle("ai3d-btn-active",K),re.setAttribute("aria-pressed",String(K))},x=()=>{for(let re of[u,m,p]){let K=Array.from(re.querySelectorAll(".ai3d-inline-btn")).filter(qe=>!qe.classList.contains("is-hidden")),Pe=K.length>0,Ae=K.some(qe=>!qe.classList.contains("is-secondary"));re.classList.toggle("is-hidden",!Pe),re.classList.toggle("has-primary-visible",Ae)}},A=!1,E=!1,S=f?u.createEl("button",{cls:"ai3d-inline-btn ai3d-mobile-mode-btn",attr:{"aria-label":Q("helper.enableInteractionLabel"),"aria-pressed":"false"}}):null;S==null||S.appendChild(Pr(''));let R=(Wt=S==null?void 0:S.createSpan({cls:"ai3d-mobile-mode-btn-label"}))!=null?Wt:null,I=()=>{f&&S&&(Dj(e,A),v(S,A),R==null||R.setText(A?Q("helper.scrollAction"):Q("helper.interactAction")),S.setAttribute("aria-label",A?Q("helper.disableInteractionLabel"):Q("helper.enableInteractionLabel"))),v($t,E),d.classList.toggle("show-secondary",E),x()},C=re=>{A=re,I()};S==null||S.addEventListener("click",()=>{let re=!A;l==null||l(re),C(re),bi(S,re?Q("helper.interactionOn"):Q("helper.interactionOff"))});let y=(re,K)=>{re.classList.toggle("is-hidden",!K)},D=null,O=()=>{var Ae;let re=i(),K=re&&Sb(re)?re:null,Pe=re&&Eb(re)?re:null;v(J,!!(K!=null&&K.isFocusSelectionEnabled())),v(z,!!(Pe!=null&&Pe.isDisassemblyEnabled())),re&&EN(re)&&v(te,!!((Ae=re.isOrientationGizmoEnabled)!=null&&Ae.call(re)))},V=()=>{let re=i(),K=re&&Sb(re)?re:null,Pe=re&&Eb(re)?re:null,Ae=re&&Mj(re)?re:null;re!==D&&(D=re,v(W,!1),v($,!1),v(ae,!1),ae.replaceChildren(Pr('')),y(N,!!(re!=null&&re.resetView)),y(w,!!(re!=null&&re.exportModelInfo)),y(B,!!(re!=null&&re.exportSelectedPartInfo)),y(W,!!re&&Cj(re)),y(te,!!re&&EN(re)),y($,!!re&&yj(re)),y(J,!!K),y(z,!!Pe),y(Ue,!!re&&Pj(re)),y(ae,!!(Ae!=null&&Ae.hasAnimations()))),y(ve,!!re&&ss(re)),y(ne,!!re&&ss(re)),y(ue,!!re&&ss(re)),y(De,!!re&&ss(re)),O(),x()},N=u.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.resetViewLabel")}});on(N,"reset-view"),N.appendChild(Pr('')),N.addEventListener("click",()=>{let re=i();re!=null&&re.resetView&&(re.resetView(),V(),bi(N,Q("helper.resetViewDone")))});let w=g(m.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.copyModelInfoLabel")}}));on(w,"copy-model-info"),w.appendChild(Pr('')),w.addEventListener("click",()=>{let re=i();if(re!=null&&re.exportModelInfo)try{let K=re.exportModelInfo(r());if(!K)return;navigator.clipboard.writeText(K).then(()=>{bi(w,Q("helper.copied"))}).catch(()=>{bi(w,Q("helper.failed"))})}catch(K){console.error("[AI3D] Export model info failed:",K),bi(w,Q("helper.failed"))}});let B=g(m.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.copySelectedPartInfoLabel")}}));on(B,"copy-selected-part-info"),B.appendChild(Pr('')),B.addEventListener("click",()=>{let re=i();if(re!=null&&re.exportSelectedPartInfo)try{let K=re.exportSelectedPartInfo();if(!K){bi(B,Q("helper.noSelectedPart"));return}navigator.clipboard.writeText(K).then(()=>{bi(B,Q("helper.copied"))}).catch(()=>{bi(B,Q("helper.failed"))})}catch(K){console.error("[AI3D] Export selected part info failed:",K),bi(B,Q("helper.failed"))}});let W=u.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.toggleWireframeLabel"),"aria-pressed":"false"}});on(W,"toggle-wireframe"),W.appendChild(Pr('')),W.addEventListener("click",()=>{let re=i();if(!(re!=null&&re.toggleWireframe))return;let K=re.toggleWireframe();v(W,K),bi(W,K?Q("helper.wireframeOn"):Q("helper.wireframeOff"))});let te=u.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.toggleAxesLabel"),"aria-pressed":"false"}});on(te,"toggle-axes"),te.appendChild(Pr('')),te.addEventListener("click",()=>{let re=i();if(!(re!=null&&re.toggleOrientationGizmo))return;let K=re.toggleOrientationGizmo();v(te,K),bi(te,K?Q("helper.axesOn"):Q("helper.axesOff"))});let $=u.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.toggleBoundingBoxLabel"),"aria-pressed":"false"}});on($,"toggle-bounding-box"),$.appendChild(Pr('')),$.addEventListener("click",()=>{let re=i();if(!(re!=null&&re.toggleBoundingBox))return;let K=re.toggleBoundingBox();v($,K),bi($,K?Q("helper.boundingBoxOn"):Q("helper.boundingBoxOff"))});let J=m.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.toggleFocusSelectionLabel"),"aria-pressed":"false"}});on(J,"toggle-focus"),J.appendChild(Pr('')),J.addEventListener("click",()=>{let re=i();if(!re||!Sb(re))return;let K=re.toggleFocusSelection();V(),bi(J,K?Q("helper.focusSelectionOn"):Q("helper.focusSelectionOff"))});let z=m.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.toggleDisassemblyLabel"),"aria-pressed":"false"}});on(z,"toggle-disassembly"),z.appendChild(Pr('')),z.addEventListener("click",()=>{let re=i();if(!re||!Eb(re))return;let K=re.toggleDisassembly();V(),bi(z,K?Q("helper.disassemblyOn"):Q("helper.disassemblyOff"))});let Y=[.5,.75,1,1.5,2],me=(qt=a==null?void 0:a().renderScale)!=null?qt:1,xe=Y.reduce((re,K,Pe)=>{let Ae=Math.abs(K-me),qe=Math.abs(Y[re]-me);return Ae{let re=i();if(!(re!=null&&re.setRenderScale))return;xe=(xe+1)%Y.length;let K=re.setRenderScale(Y[xe]);Ue.textContent=`${K.toFixed(1)}x`,bi(Ue,Ki("helper.resolutionValue",{value:`${K}x`}))});let ae=g(u.createEl("button",{cls:"ai3d-inline-btn is-hidden",attr:{"aria-label":Q("helper.toggleAnimationLabel"),"aria-pressed":"false"}}));on(ae,"toggle-animation"),ae.appendChild(Pr('')),ae.addEventListener("click",()=>{let re=i();if(!(re!=null&&re.toggleAnimation))return;let K=re.toggleAnimation();ae.replaceChildren(Pr(K?'':'')),v(ae,K),bi(ae,K?Q("helper.playing"):Q("helper.paused"))});let ve=m.createEl("button",{cls:"ai3d-inline-btn is-hidden",attr:{"aria-label":Q("helper.toggleMeasurementLabel"),"aria-pressed":"false",title:Q("helper.toggleMeasurementLabel")}});on(ve,"toggle-measurement"),ve.appendChild(Pr('')),ve.addEventListener("click",()=>{let re=i();if(!re||!ss(re))return;let K=re.toggleMeasurement();v(ve,K),bi(ve,K?Q("helper.measurementOn"):Q("helper.measurementOff")),K||v(ne,!1)});let ne=g(m.createEl("button",{cls:"ai3d-inline-btn is-hidden",attr:{"aria-label":Q("helper.clearMeasurementsLabel")}}));on(ne,"clear-measurements"),ne.appendChild(Pr('')),ne.addEventListener("click",()=>{let re=i();!re||!ss(re)||(re.clearMeasurements(),v(ve,!1),bi(ne,Q("helper.measurementsCleared")))});let ue=g(m.createEl("button",{cls:"ai3d-inline-btn is-hidden",attr:{"aria-label":Q("helper.copyMeasurementsLabel")}}));on(ue,"copy-measurements"),ue.appendChild(Pr('')),ue.addEventListener("click",()=>{let re=i();if(!re||!ss(re))return;let K=re.exportMeasurements();if(!K){bi(ue,Q("helper.noMeasurements"));return}navigator.clipboard.writeText(K).then(()=>{bi(ue,Q("helper.measurementsCopied"))}).catch(()=>{bi(ue,Q("helper.failed"))})});let De=g(m.createEl("button",{cls:"ai3d-inline-btn is-hidden",attr:{"aria-label":Q("helper.calibrateLabel")}}));on(De,"toggle-calibration"),De.appendChild(Pr(''));let de=p.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.copySnapshotLabel")}});on(de,"copy-snapshot"),de.appendChild(Pr('')),de.addEventListener("click",()=>{let re=i();if(re)try{let K=re.captureSnapshot();if(!K)return;let Pe=Lj(K);navigator.clipboard.write([new ClipboardItem({"image/png":Pe})]).then(()=>{bi(de,Q("helper.copied"))}).catch(()=>{bi(de,Q("helper.failed"))})}catch(K){console.error("[AI3D] Copy snapshot failed:",K),bi(de,Q("helper.failed"))}});let be=g(p.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.saveSnapshotLabel")}}));on(be,"save-snapshot"),be.appendChild(Pr('')),be.addEventListener("click",()=>{var K,Pe;let re=i();if(re)try{let Ae=re.captureSnapshot();if(!Ae)return;let qe=r(),Ye=qr(qe)||"model",we=a==null?void 0:a(),At=(K=we==null?void 0:we.snapshotFolder)!=null?K:"Media/3D Previews",Zt=(Pe=we==null?void 0:we.snapshotNaming)!=null?Pe:"model-name",tr=Date.now(),vi=Zt==="timestamp"?`snapshot_${tr}.png`:`${Ye}_snapshot_${tr}.png`,xn=Lj(Ae),Zi=new FileReader;Zi.onload=()=>{let Ba=Zi.result;t.vault.adapter.exists(At).then(Ip=>Ip?Promise.resolve():t.vault.createFolder(At).catch(Tv=>{Eme.warn("Failed to create vault folder",{path:At,error:String(Tv)})})).then(()=>t.vault.createBinary(`${At}/${vi}`,Ba)).then(()=>{bi(be,Q("helper.saved"))}).catch(Ip=>{console.error("[AI3D] Save snapshot failed:",Ip),bi(be,Q("helper.failed"))})},Zi.onerror=()=>{console.error("[AI3D] FileReader error"),bi(be,Q("helper.failed"))},Zi.onabort=()=>{console.error("[AI3D] FileReader aborted"),bi(be,Q("helper.failed"))},Zi.readAsArrayBuffer(xn)}catch(Ae){console.error("[AI3D] Save snapshot failed:",Ae),bi(be,Q("helper.failed"))}});let Ke=g(p.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.downloadSnapshotLabel")}}));on(Ke,"download-snapshot"),Ke.appendChild(Pr('')),Ke.addEventListener("click",()=>{let re=i();if(re)try{let K=re.captureSnapshot();if(!K)return;let Pe=r(),qe=`${qr(Pe)||"model"}_snapshot_${Date.now()}.png`,Ye=createEl("a");Ye.href=K,Ye.download=qe,activeDocument.body.appendChild(Ye),Ye.click(),Ye.remove(),bi(Ke,Q("helper.downloaded"))}catch(K){console.error("[AI3D] Download snapshot failed:",K),bi(Ke,Q("helper.failed"))}});let Tt=g(p.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.removePreviewLabel")}}));on(Tt,"remove-preview"),Tt.appendChild(Pr('')),Tt.addEventListener("click",s);let Xe=m.createEl("button",{cls:"ai3d-inline-btn is-hidden ai3d-annot-btn",attr:{"aria-label":Q(h.labelKey),"aria-pressed":"false"}});on(Xe,"toggle-annotation"),Xe.appendChild(Pr(''));let je=Xe.createSpan({cls:"ai3d-pin-badge is-hidden"});Xe.addEventListener("click",()=>{if(!o)return;let re=o();v(Xe,re),bi(Xe,re?Q(h.activeTooltipKey):Q(h.inactiveTooltipKey))});let $t=d.createEl("button",{cls:"ai3d-inline-btn ai3d-mobile-more-toggle",attr:{"aria-label":Q("helper.showMoreActionsLabel"),"aria-pressed":"false"}});$t.appendChild(Pr('')),$t.addEventListener("click",()=>{E=!E,$t.setAttribute("aria-label",E?Q("helper.hideMoreActionsLabel"):Q("helper.showMoreActionsLabel")),I(),bi($t,E?Q("helper.moreActionsShown"):Q("helper.moreActionsHidden"))}),n.insertBefore(d,e.nextSibling);let Dt=n.createDiv({cls:"ai3d-calibrate-panel is-hidden"});Dt.createDiv({cls:"ai3d-calibrate-title",text:Q("helper.calibrateTitle")});let xi=Dt.createDiv({cls:"ai3d-calibrate-row"});xi.createSpan({cls:"ai3d-calibrate-label",text:Q("helper.calibrateCurrent")});let oe=xi.createSpan({cls:"ai3d-calibrate-readonly"}),Vi=xi.createSpan({cls:"ai3d-calibrate-readonly"}),ti=xi.createSpan({cls:"ai3d-calibrate-readonly"}),wi=Dt.createDiv({cls:"ai3d-calibrate-row"});wi.createSpan({cls:"ai3d-calibrate-label",text:Q("helper.calibrateReal")});let ot=wi.createEl("input",{cls:"ai3d-calibrate-input",attr:{type:"number",step:"any",placeholder:"X"}}),Pi=wi.createEl("input",{cls:"ai3d-calibrate-input",attr:{type:"number",step:"any",placeholder:"Y"}}),X=wi.createEl("input",{cls:"ai3d-calibrate-input",attr:{type:"number",step:"any",placeholder:"Z"}}),U=Dt.createDiv({cls:"ai3d-calibrate-row"}),he=U.createEl("select",{cls:"ai3d-calibrate-select"});for(let re of[{v:"um",l:"\u03BCm"},{v:"mm",l:"mm"},{v:"cm",l:"cm"},{v:"m",l:"m"}])he.createEl("option",{text:re.l,value:re.v});he.value="mm";let Le=U.createEl("label",{cls:"ai3d-calibrate-lock"}),Ve=Le.createEl("input",{attr:{type:"checkbox",checked:"true"}});Le.appendChild(activeDocument.createTextNode(" "+Q("helper.calibrateLock")));let Je=Dt.createDiv({cls:"ai3d-calibrate-row ai3d-calibrate-actions"}),rt=Je.createEl("button",{cls:"ai3d-inline-btn",text:Q("helper.calibrateApply")}),ye=Je.createEl("button",{cls:"ai3d-inline-btn is-secondary",text:Q("helper.calibrateReset")}),Ie=null;function ct(){var Ae,qe;let re=i();if(!re||!ss(re))return;let K=(qe=(Ae=re.getMeasurementBounds)==null?void 0:Ae.call(re))!=null?qe:null,Pe=re.getMeasurementScale();he.value=re.getMeasurementUnit(),Ie=K,K?(oe.textContent=`X: ${(K.x*Pe.x).toFixed(3)}`,Vi.textContent=`Y: ${(K.y*Pe.y).toFixed(3)}`,ti.textContent=`Z: ${(K.z*Pe.z).toFixed(3)}`):(oe.textContent="X: -",Vi.textContent="Y: -",ti.textContent="Z: -")}function St(){var Ye,we;let re=i();if(!re||!ss(re)||!Ie)return;let K=parseFloat(ot.value),Pe=parseFloat(Pi.value),Ae=parseFloat(X.value);if(!isFinite(K)||!isFinite(Pe)||!isFinite(Ae))return;let qe={x:Ie.x>1e-4?K/Ie.x:1,y:Ie.y>1e-4?Pe/Ie.y:1,z:Ie.z>1e-4?Ae/Ie.z:1};(Ye=re.setMeasurementUnit)==null||Ye.call(re,he.value),(we=re.setMeasurementScale)==null||we.call(re,qe),bi(rt,Q("helper.calibrated"))}function nt(){var K,Pe;let re=i();!re||!ss(re)||((K=re.setMeasurementUnit)==null||K.call(re,he.value),(Pe=re.setMeasurementScale)==null||Pe.call(re,{x:1,y:1,z:1}),ct(),Ie?(ot.value=Ie.x.toFixed(3),Pi.value=Ie.y.toFixed(3),X.value=Ie.z.toFixed(3)):(ot.value="",Pi.value="",X.value=""),bi(ye,Q("helper.calibrateResetDone")))}function Qe(re){if(!Ve.checked||!Ie)return;let Pe=parseFloat((re==="x"?ot:re==="y"?Pi:X).value);if(!isFinite(Pe)||Pe===0)return;let Ae=Ie[re];if(Ae<=1e-4)return;let qe=Pe/Ae;re!=="x"&&(ot.value=(Ie.x*qe).toFixed(3)),re!=="y"&&(Pi.value=(Ie.y*qe).toFixed(3)),re!=="z"&&(X.value=(Ie.z*qe).toFixed(3))}return ot.addEventListener("input",()=>Qe("x")),Pi.addEventListener("input",()=>Qe("y")),X.addEventListener("input",()=>Qe("z")),he.addEventListener("change",()=>{let re=i();!re||!ss(re)||re.setMeasurementUnit(he.value)}),rt.addEventListener("click",St),ye.addEventListener("click",nt),De.addEventListener("click",()=>{let re=Dt.classList.contains("is-hidden");if(re&&(ct(),Ie)){let K=i(),Pe=K&&ss(K)?K.getMeasurementScale():{x:1,y:1,z:1};ot.value=(Ie.x*Pe.x).toFixed(3),Pi.value=(Ie.y*Pe.y).toFixed(3),X.value=(Ie.z*Pe.z).toFixed(3)}Dt.classList.toggle("is-hidden",!re),v(De,re),bi(De,re?Q("helper.calibrateOpen"):Q("helper.calibrateClose"))}),I(),V(),{showAnimButton(){ae.classList.remove("is-hidden"),x()},showAnnotateButton(){Xe.classList.remove("is-hidden"),x()},updateAnnotationBadge(re){re>0?(je.textContent=String(re),je.classList.remove("is-hidden")):je.classList.add("is-hidden")},setMobileInteractionMode(re){f&&C(re)},syncCapabilities:V}}function bi(n,e){var i;(i=SN.get(n))==null||i.remove();let t=n.createSpan({cls:"ai3d-tooltip"});t.textContent=e,SN.set(n,t),window.setTimeout(()=>{t.remove(),SN.delete(n)},1500)}var Eme,SN,TN=M(()=>{"use strict";os();Tn();ov();Zs();Bs();Eme=Wi("helper-buttons");SN=new WeakMap});function Tme(n,e,t){let i=typeof activeWindow!="undefined"?activeWindow.setTimeout.bind(activeWindow):setTimeout,r=typeof activeWindow!="undefined"?activeWindow.clearTimeout.bind(activeWindow):clearTimeout,s=new Promise((a,o)=>{let l=i(()=>{o(new AN(`Conversion did not complete within ${e}ms`))},e);n.then(()=>r(l)).catch(()=>r(l))});return Promise.race([n,s])}var cv,Sme,AN,Tb,Oj=M(()=>{"use strict";Mo();Tn();cv=Wi("conversion-manager"),Sme=3e5,AN=class extends Error{constructor(e="Conversion timed out"){super(e),this.name="ConversionTimeoutError"}};Tb=class{constructor(){this.converters=new Map;this.pending=new Map}getConverter(e){return this.converters.get(Va(e))}registerConverter(e){cv.info("register converter",{converterId:e.id,sourceExts:[...e.sourceExts]});for(let t of e.sourceExts)this.converters.set(Va(t),e)}canConvert(e){let t=Va(e),i=this.converters.has(t);return cv.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){var o;let t=Va(e.sourceExt),i=this.getConverter(t);if(!i)throw cv.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 cv.info("joining in-flight conversion",{key:r}),s;cv.info("dispatch conversion",{converterId:i.id,ext:t,targetExt:e.targetExt});let a=Tme(i.convert({...e,sourceExt:t}),(o=e.timeoutMs)!=null?o:Sme,{converterId:i.id,ext:t,targetExt:e.targetExt});this.pending.set(r,a);try{return await a}finally{this.pending.delete(r)}}}});function bN(...n){let e=(We==null?void 0:We.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 xme(){var r,s,a;if((We==null?void 0:We.platform)==="darwin")return["/Applications/FreeCAD.app/Contents/MacOS/FreeCADCmd","/Applications/FreeCAD.app/Contents/Resources/bin/FreeCADCmd","/Applications/FreeCAD.app/Contents/Resources/bin/freecadcmd",...bN("FreeCADCmd","freecadcmd")];if((We==null?void 0:We.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=We==null?void 0:We.env)==null?void 0:r.LOCALAPPDATA,t=(s=We==null?void 0:We.env)==null?void 0:s.ProgramFiles,i=(a=We==null?void 0:We.env)==null?void 0:a["ProgramFiles(x86)"];if(e&&n.push(Xi(e,"Programs","FreeCAD","bin","FreeCADCmd.exe")),t&&n.push(Xi(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 Rme(n){var a,o,l,c;if((We==null?void 0:We.platform)!=="win32")return[];let e=(a=We==null?void 0:We.env)==null?void 0:a.APPDATA,t=(o=We==null?void 0:We.env)==null?void 0:o.LOCALAPPDATA,i=(l=We==null?void 0:We.env)==null?void 0:l.npm_config_prefix,r=(c=We==null?void 0:We.env)==null?void 0:c.USERPROFILE,s=[i,e?Xi(e,"npm"):void 0,t?Xi(t,"npm"):void 0,r?Xi(r,"AppData","Roaming","npm"):void 0].filter(f=>!!f);return Array.from(new Set(s.map(f=>Xi(f,n))))}function bme(...n){var s,a,o;if((We==null?void 0:We.platform)!=="win32")return[];let e=(s=We==null?void 0:We.env)==null?void 0:s.ProgramFiles,t=(a=We==null?void 0:We.env)==null?void 0:a["ProgramFiles(x86)"],i=(o=We==null?void 0:We.env)==null?void 0:o.LOCALAPPDATA,r=[e,t,i?Xi(i,"Programs"):void 0].filter(l=>!!l);return Array.from(new Set(r.flatMap(l=>n.map(c=>Xi(l,c)))))}async function CN(n){try{return await cs(n,(We==null?void 0:We.platform)==="win32"?fs:Mw),!0}catch(e){return!1}}function xN(n){let e=n==null?void 0:n.trim();if(e)return e}function Fj(n){return Ime.test(n)?{ok:!1,reason:"Command contains unsafe shell metacharacters."}:{ok:!0}}async function Mme(n){try{return(await Lp(n)).isFile()}catch(e){return!1}}function Cme(n){let e=[],t="",i=null;for(let r=0;rr.trim().toLowerCase()).filter(Boolean);return e!=null&&e.length?e:Ame}async function Dme(n){var r;let e=(r=We==null?void 0:We.env)==null?void 0:r.PATH;if(!e)return;let t=e.split(Cw).map(s=>s.trim()).filter(Boolean),i=(We==null?void 0:We.platform)==="win32"?Lme(n):[""];for(let s of t)for(let a of i){let o=Xi(s,a?`${n}${a}`:n);if(await CN(o))return o}}function IN(n,e,t=15e3){let i=Fj(n);return i.ok?new Promise((r,s)=>{ca(n,e,{timeout:t,windowsHide:!0,maxBuffer:4*1024*1024},(a,o,l)=>{if(a){s(new Error((l||o||a.message).toString().trim()||a.message));return}r({stdout:o!=null?o:"",stderr:l!=null?l:""})})}):Promise.reject(new Error(`Refusing to execute converter command: ${i.reason}`))}function MN(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 RN(n,e,t,i){let r="";for(let s of t)try{return await IN(n,[...e,...s]),{ok:!0,detail:""}}catch(a){let o=MN(a);if(i.test(o))return{ok:!0,detail:""};r=o}return{ok:!1,detail:r||"Command probe failed."}}async function Ome(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 IN(e,[...t,"-c","import cadquery, trimesh; print('ok')"]),[{kind:"cad-python",ok:!0,detail:""}]}catch(r){return[{kind:"cad-python",ok:!1,detail:MN(r)}]}if(n.id==="assimp")try{return await IN(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:MN(r)}]}if(n.id==="freecadcmd"){let r=await RN(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 RN(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 RN(e,t,[["--version"],["--help"]],/fbx2gltf|usage|help|version/i);return[{kind:"fbx2gltf-cli",ok:r.ok,detail:r.detail}]}return[]}function Nme(n){let e=wj.find(t=>t.id===n);if(!e)throw new Error(`Unknown converter command id: ${n}`);return e}function wme(n){var s,a,o,l;let e=(a=(s=We==null?void 0:We.env)==null?void 0:s.ProgramFiles)==null?void 0:a.toLowerCase(),t=(l=(o=We==null?void 0:We.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=(We==null?void 0:We.platform)==="win32"&&((e?f.startsWith(e):!1)||(t?f.startsWith(t):!1)),d=(We==null?void 0:We.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 Nj(n,e,t){for(let i of e)if(await CN(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 Fme(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 Ab(n,e,t,i){let r=yme(e),s=Fj(r.executable);if(!s.ok)return{id:n.id,label:n.label,envVar:n.envVar,settingsKey:n.settingsKey,configuredCommand:i,command:e,executable:r.executable,args:r.args,resolvedPath:void 0,available:!1,source:t,detail:s.reason,checkedCandidates:[r.executable]};if(Pme(r.executable)){let[o,l]=await Promise.all([CN(r.executable),Mme(r.executable)]),c=o&&l;return{id:n.id,label:n.label,envVar:n.envVar,settingsKey:n.settingsKey,configuredCommand:i,command:e,executable:r.executable,args:r.args,resolvedPath:c?r.executable:void 0,available:c,source:t,detail:c?`Using ${xb(t)} path.`:"Configured path was not found or is not executable.",checkedCandidates:[r.executable]}}let a=await Dme(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,available:!!a,source:t,detail:a?`Resolved from ${xb(t)} via PATH lookup.`:"Command name was not found on PATH.",checkedCandidates:[r.executable]}}function xb(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 Uj(n,e){var d,u,m;let t=Nme(n),{userCandidates:i,systemCandidates:r}=wme(t),s=xN(e);if(s)return Ab(t,s,"settings",s);let a=xN((d=We==null?void 0:We.env)==null?void 0:d[t.envVar]);if(a)return Ab(t,a,"env");for(let p of(u=t.envVarAliases)!=null?u:[]){let _=xN((m=We==null?void 0:We.env)==null?void 0:m[p]);if(_)return Ab(t,_,"env")}let o=await Nj(t,i,"Detected at a common user-managed install location.");if(o)return o;let l=[];for(let p of t.fallbackCommands){let _=await Ab(t,p,"path");if(l.push(_),_.available)return _}let c=await Nj(t,r,"Detected at a system fallback install location.");if(c)return c;let f=l.flatMap(p=>p.checkedCandidates),h=Fme(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 Rb(n){let e=await Promise.all(wj.map(t=>Uj(t.id,n[t.settingsKey])));return Promise.all(e.map(async t=>({...t,dependencyChecks:await Ome(t)})))}async function as(n,e){var i;let t=await Uj(n,e);return{command:(i=t.resolvedPath)!=null?i:t.executable,args:[...t.args]}}var We,Ame,wj,Ime,$f=M(()=>{"use strict";cr();cr();cr();We=Rv(),Ame=[".exe",".cmd",".bat",".com"];wj=[{id:"freecad",label:"Python (CadQuery/OCCT)",settingsKey:"freecadCommand",envVar:"AI3D_FREECAD_CMD",fallbackCommands:(We==null?void 0:We.platform)==="win32"?["py","python"]:["python3","python"],knownCandidates:(We==null?void 0:We.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:(We==null?void 0:We.platform)==="win32"?["obj2gltf.cmd"]:["obj2gltf"],knownCandidates:(We==null?void 0:We.platform)==="win32"?Rme("obj2gltf.cmd"):bN("obj2gltf")},{id:"fbx2gltf",label:"FBX2glTF",settingsKey:"fbx2gltfCommand",envVar:"AI3D_FBX2GLTF_CMD",fallbackCommands:(We==null?void 0:We.platform)==="win32"?["FBX2glTF.exe"]:["FBX2glTF","fbx2gltf"],knownCandidates:(We==null?void 0:We.platform)==="win32"?bme(Xi("FBX2glTF","FBX2glTF-windows-x64.exe"),Xi("FBX2glTF","FBX2glTF.exe")):bN("FBX2glTF","fbx2gltf")},{id:"assimp",label:"Python (trimesh)",settingsKey:"assimpCommand",envVar:"AI3D_ASSIMP_CMD",fallbackCommands:(We==null?void 0:We.platform)==="win32"?["py","python"]:["python3","python"],knownCandidates:(We==null?void 0:We.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:(We==null?void 0:We.platform)==="win32"?["FreeCADCmd.exe"]:["freecadcmd","FreeCADCmd"],knownCandidates:xme()}];Ime=/[;|&<>$`\r\n\t{}()[\]\\]/});var Vj,Bj=M(()=>{Vj=`import cadquery as cq +}`;A.ShadersStore[pN]||(A.ShadersStore[pN]=_j);_me={name:pN,shader:_j}});var Ej,gj,pb,gme,vme,vj,vN,Sj=M(()=>{Cs();ki();vm();Ge();lo();lm();Yy();Gn();CP();zt();di();kh();mf();EP();qo();Pt();Object.defineProperty(Jt.prototype,"forceShowBoundingBoxes",{get:function(){return this._forceShowBoundingBoxes||!1},set:function(n){this._forceShowBoundingBoxes=n,n&&this.getBoundingBoxRenderer()},enumerable:!0,configurable:!0});Jt.prototype.getBoundingBoxRenderer=function(){return this._boundingBoxRenderer||(this._boundingBoxRenderer=new vN(this)),this._boundingBoxRenderer};Object.defineProperty(Er.prototype,"showBoundingBox",{get:function(){return this._showBoundingBox||!1},set:function(n){this._showBoundingBox=n,n&&this.getScene().getBoundingBoxRenderer()},enumerable:!0,configurable:!0});Ej=j.Identity(),gj=new j,pb=new b,gme=new b,vme=Ej.asArray(),vj=new Ef(pb,pb),vN=class{get shaderLanguage(){return this._shaderLanguage}constructor(e){this.name=et.NAME_BOUNDINGBOXRENDERER,this.frontColor=new pe(1,1,1),this.backColor=new pe(.1,.1,.1),this.showBackLines=!0,this.onBeforeBoxRenderingObservable=new ie,this.onAfterBoxRenderingObservable=new ie,this.onResourcesReadyObservable=new ie,this.enabled=!0,this._shaderLanguage=0,this.renderList=new Ui(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 ur(this.scene.getEngine(),void 0,void 0,"BoundingBoxRendererFront",!0),this._buildUniformLayout(this._uniformBufferFront),this._uniformBufferBack=new ur(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(et.STEP_BEFOREEVALUATEACTIVEMESH_BOUNDINGBOXRENDERER,this,this.reset),this.scene._preActiveMeshStage.registerStep(et.STEP_PREACTIVEMESH_BOUNDINGBOXRENDERER,this,this._preActiveMesh),this.scene._evaluateSubMeshStage.registerStep(et.STEP_EVALUATESUBMESH_BOUNDINGBOXRENDERER,this,this._evaluateSubMesh),this.scene._afterRenderingGroupDrawStage.registerStep(et.STEP_AFTERRENDERINGGROUPDRAW_BOUNDINGBOXRENDERER,this,this.render)}async whenReadyAsync(e=16,t=3e4){return this._prepareResources(),await new Promise(i=>{jo(()=>this._colorShader.isReady(),()=>{i()},(r,s)=>{s?(ee.Error("BoundingBoxRenderer: Timeout while waiting for the renderer to be ready."),r&&ee.Error(r)):(ee.Error("BoundingBoxRenderer: An unexpected error occurred while waiting for the renderer to be ready."),r&&(ee.Error(r),r.stack&&ee.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 To("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(()=>(oN(),aN)),Promise.resolve().then(()=>(fN(),cN))]):await Promise.all([Promise.resolve().then(()=>(mN(),uN)),Promise.resolve().then(()=>(gN(),_N))])}},!1),this._colorShader.setDefine("INSTANCES",this._useInstances),this._colorShader.doNotSerialize=!0,this._colorShader.reservedDataStore={hidden:!0},this._colorShaderForOcclusionQuery=new To("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(()=>(oN(),aN)),Promise.resolve().then(()=>(fN(),cN))]):await Promise.all([Promise.resolve().then(()=>(mN(),uN)),Promise.resolve().then(()=>(gN(),_N))])}},!0),this._colorShaderForOcclusionQuery.doNotSerialize=!0,this._colorShaderForOcclusionQuery.reservedDataStore={hidden:!0};let e=this.scene.getEngine(),t=dx({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(vj);let s=0,a=this.scene.floatingOriginOffset;for(let g=0;g{"use strict";Ge();RL();zt();fo();Sj();Ws();DM();Qf=class Qf{constructor(e,t,i){this.occlusionDirection=b.Zero();this.occlusionRay=new Kr(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(Qf.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===st.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===st.POINTERMOVE){if(this.activePointerId!==null&&a.pointerId!==this.activePointerId)return;this.partPointerActive&&(a.preventDefault(),a.stopPropagation()),e.onPointerMove(a)}else if(s.type===st.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(Qf.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=Gd(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=wc(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)&&Nc(a.distance,r.distance,r.epsilon);o!==this.lastOccluded&&(this.lastOccluded=o,this.setBoundingBoxColor(o?Qf.BBOX_OCCLUDED:Qf.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=Dv({startPosition:Ht(e.startPosition),pivot:Ht(e.pivot),startRotationQuaternion:Lv(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=Gd(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,j.Identity(),this.camera),l=Pv({origin:Ht(o.origin),direction:Ht(o.direction)},t);return l?new b(l.x,l.y,l.z):null}};Qf.BBOX_VISIBLE=new pe(.25,.7,1),Qf.BBOX_OCCLUDED=new pe(.1,.25,.4);EN=Qf});var Mj={};tt(Mj,{BabylonModelPreview:()=>vb,createBabylonModelPreview:()=>Pme});function Ame(n){let e=n.getClassName();return e==="DirectionalLight"||e==="PointLight"||e==="SpotLight"}function SN(n){return n.getClassName()==="GaussianSplattingMesh"}function gb(n,e){var i;return((i=nf(n.metadata,{name:n.name}).displayName)==null?void 0:i.trim())||n.name||e}function Rj(n){let e=[],t=n;for(;t&&typeof t=="object"&&"name"in t;){let i=t,r=gb(i,"node");r.trim()&&e.push(r),t=i.parent}return e.reverse().join("/")}function bj(n,e){var t;return((t=n.displayName)==null?void 0:t.trim())||n.partNumber||n.componentId||e}function xme(n,e){try{if(e==="gltf")return JSON.parse(new TextDecoder().decode(new Uint8Array(n)));if(e!=="glb")return null;let t=new DataView(n);if(t.byteLength<20||t.getUint32(0,!0)!==1179937895)return null;let i=t.getUint32(12,!0);if(t.getUint32(16,!0)!==1313821514||20+i>t.byteLength)return null;let s=new Uint8Array(n,20,i);return JSON.parse(new TextDecoder().decode(s))}catch(t){return null}}function Rme(n,e){let t=xme(n,e),i=new Map;if(!t)return i;let r=Array.isArray(t.nodes)?t.nodes:[];for(let a of r){if(!a||typeof a!="object")continue;let o=a,l=typeof o.name=="string"?o.name:"";l&&o.extras&&i.set(`node:${l}`,o.extras)}let s=Array.isArray(t.meshes)?t.meshes:[];for(let a of s){if(!a||typeof a!="object")continue;let o=a,l=typeof o.name=="string"?o.name:"";l&&o.extras&&i.set(`mesh:${l}`,o.extras)}return i}function Ij(n,e){return e===void 0?n:n==null?e:{metadata:n,extras:e}}function bme(n){return!!n&&typeof n=="object"&&"getBoundingInfo"in n}function ov(n){return new b(n.x,n.y,n.z)}function Ime(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 Mme(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 Cme(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 yme(n,e,t){let i=hs(e),r=i.replace(/\.[^.]+$/,""),s=qr(t),a=[Gs(n,e),Gs(n,i)];if(s)for(let o of xj)a.push(Gs(n,`${s}.${o}`));for(let o of xj){let l=`${r}.${o}`;l!==i&&a.push(Gs(n,l))}return a}function Pme(n){return new vb(n)}var _b,xj,Eme,Sme,Tme,sa,vb,Cj=M(()=>{"use strict";ky();Cs();cx();fx();vk();Ek();hP();Ge();zt();yi();ZP();Ac();n4();RL();RR();p5();eP();ep();sv();sv();kO();WO();yK();aj();QS();Qs();ks();oj();Aj();sb();rf();eT();IM();MM();Ws();aT();w_();bM();PM();_b=null,xj=["jpg","jpeg","png","bmp","tga","webp","tif","tiff"],Eme=/^\s*(map_Kd|map_Ka|map_Ks|map_Ns|map_d|map_bump|bump|disp|decal)\s+(.+)/i,Sme=.242,Tme=320;sa=class sa{constructor(e){this.rootMesh=null;this.loadedMeshes=[];this.loadedTransformNodes=[];this.loadedExt="";this.rendering=!1;this.contextLost=!1;this.viewportVisible=!0;this.viewportObserver=null;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.gltfComponentMetadata=new Map;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.measurementActive=!1;this.measurementScale={x:1,y:1,z:1};this.measurementUnit="mm";this.measurementSegments=[];this.measurementMarkers=[];this.pendingPoint=null;this.pendingMarker=null;this.hoveredMarkerIndex=-1;this.lastPointerClient={x:0,y:0};this.previewLine=null;this.handlePointerMove=e=>{if(this.lastPointerClient={x:e.clientX,y:e.clientY},!this.measurementActive||(this.pendingPoint&&this.updatePreviewLine(),this.measurementMarkers.length===0))return;let t=this.engine.getRenderingCanvas();if(!t)return;let i=t.getBoundingClientRect(),r=e.clientX-i.left,s=e.clientY-i.top,a=this.scene.pick(r,s,l=>this.measurementMarkers.includes(l)),o=a.hit?this.measurementMarkers.indexOf(a.pickedMesh):-1;if(o!==this.hoveredMarkerIndex){if(this.hoveredMarkerIndex>=0&&this.hoveredMarkerIndex=0&&o{e.preventDefault(),e.stopPropagation()};this.handleViewportIntersection=e=>{let t=e.some(i=>i.isIntersecting);t!==this.viewportVisible&&(this.viewportVisible=t,t?this.startRenderLoop():this.rendering&&(this.engine.stopRenderLoop(),this.rendering=!1))};this.handleContextLost=e=>{e.preventDefault(),this.contextLost=!0,this.rendering&&(this.engine.stopRenderLoop(),this.rendering=!1)};this.handleContextRestored=()=>{this.contextLost=!1,this.engine.resize(),this.startRenderLoop()};this.engine=new Ue(e,!0,{preserveDrawingBuffer:!0}),this.scene=new Jt(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}),e.addEventListener("pointermove",this.handlePointerMove),e.addEventListener("webglcontextlost",this.handleContextLost),e.addEventListener("webglcontextrestored",this.handleContextRestored),this.scene.ambientColor=new pe(.3,.3,.3);let t=new ta("default-light",new b(0,1,.5),this.scene);t.intensity=1.2,this.resizeObs=new ResizeObserver(()=>this.engine.resize()),this.resizeObs.observe(e),typeof IntersectionObserver!="undefined"&&(this.viewportObserver=new IntersectionObserver(this.handleViewportIntersection,{root:null,threshold:[0,.01]}),this.viewportObserver.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=Tj(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 nv(),this.rootMesh){let m=this.rootMesh;m.dispose(!0,!0);for(let p of this.loadedMeshes)p!==m&&!p.isDisposed()&&p.dispose(!0,!0);this.rootMesh=null}this.loadedMeshes=[],this.loadedTransformNodes=[],this.disposeMeasurementOverlays(!0),(h=this.disassembly)==null||h.dispose(),this.disassembly=null,this.clearFocusedMesh(),this.originalMeshVisibility.clear();let s=t.toLowerCase().replace(".","");this.loadedExt=s,this.resourceWarnings=[],this.gltfComponentMetadata=Rme(e,s);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,${wl(e)}`;if(s==="obj"&&i&&r){_b&&await _b;let m;_b=new Promise(p=>{m=p});try{let{OBJFileLoader:p}=await Promise.resolve().then(()=>(VO(),gK)),_=p.prototype;typeof _._loadMTL!="function"&&console.warn("[AI3D] OBJFileLoader._loadMTL not found \u2014 MTL vault resolution disabled");let g=_._loadMTL,x=new TextDecoder().decode(new Uint8Array(e)).match(/mtllib\s+(.+)/),T=null;if(x&&i&&r){let S=Ime(x[1]),R=Op(r),I=Gs(R,S);try{let C=await i(I),D=new TextDecoder().decode(new Uint8Array(C)).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")}T=O.join(` +`)}catch(C){this.resourceWarnings.push(`OBJ material library not found: ${I}`)}}_._loadMTL=function(S,R,I){let C=T!=null?T:"";I(C)};let E=await Kg(c,a,{meshNames:"",pluginExtension:l});this.loadedMeshes=E.meshes,this.loadedTransformNodes=E.transformNodes,E.meshes.length>0&&(this.rootMesh=E.meshes[0]),_._loadMTL=g}catch(p){throw console.error("[AI3D] OBJ load error:",p),p}finally{m(),_b=null}}else if(s==="stl")this.rootMesh=TK(a,e),this.rootMesh&&(this.loadedMeshes=[this.rootMesh]);else if(s==="ply")this.rootMesh=xK(a,e),this.rootMesh&&(this.loadedMeshes=[this.rootMesh]);else{let m=await Kg(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=JS(this.getRenderableBounds(this.rootMesh));return this.camera.target=ov(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=sj(this.scene,m=>{if(!this.isDisassemblyActive()){if(this.measurementActive&&m.pickedPoint){this.addMeasurementPoint(ov(m.pickedPoint));return}this._lastPickResult=m,this.focusSelectionEnabled&&m.mesh&&this.setFocusedMesh(m.mesh),this._onPickCallbacks.forEach(p=>p(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?pe.FromHexString(e.color):pe.White(),i=(r=e.intensity)!=null?r:1;switch(e.type){case"hemisphere":{let a=e.groundColor?pe.FromHexString(e.groundColor):new pe(.2,.2,.2),o=new ta("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 Os("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 Pf("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 kr("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 Pf("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(!Ame(e)){console.warn("[AI3D] Light type does not support shadows:",e.name);return}let t=new Pi(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(pe.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 Um,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=Rr(e),i=Math.max(t.x,t.z)*3,r=e.min.y;this.groundMesh=is.CreateGround("ground",{width:i,height:i},this.scene),this.groundMesh.position.y=r;let s=new ke("ground-mat",this.scene);s.diffuseColor=new pe(.15,.15,.15),s.specularColor=pe.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=Rr(e),i=Math.max(t.x,t.z)*2,r=e.min.y-.01;this.gridMesh=is.CreateGround("grid",{width:i,height:i,subdivisions:20},this.scene),this.gridMesh.position.y=r;let s=new ke("grid-mat",this.scene);s.wireframe=!0,s.diffuseColor=new pe(.3,.3,.3),s.emissiveColor=new pe(.1,.1,.1),this.gridMesh.material=s}createAxis(){if(!this.rootMesh||this.axisMeshes.length>0)return;let e=this.getRenderableBounds(this.rootMesh),t=N3(e)*1.5,i=ov(e.min),r=N_(e)*.01,s=[["x",pe.Red(),new b(t,0,0)],["y",pe.Green(),new b(0,t,0)],["z",pe.Blue(),new b(0,0,t)]];for(let[a,o,l]of s){let c=is.CreateTube(`axis-${a}`,{path:[i,i.add(l)],radius:r,tessellation:8},this.scene),f=new ke(`axis-${a}-mat`,this.scene);f.emissiveColor=o,f.diffuseColor=pe.Black(),c.material=f,this.axisMeshes.push(c)}}setSTLColor(e){if(!this.rootMesh)return;let t=pe.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&&(SN(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}toggleMeasurement(){return this.measurementActive=!this.measurementActive,this.measurementActive||this.cancelPendingMeasurement(),this.measurementActive}isMeasurementActive(){return this.measurementActive}clearMeasurements(){this.disposeMeasurementOverlays(!1)}disposeMeasurementOverlays(e){e&&(this.measurementActive=!1),this.cancelPendingMeasurement(!1);for(let t of this.measurementSegments)t.line.dispose(!1,!0),t.label.dispose(!1,!0);this.measurementSegments=[];for(let t of this.measurementMarkers)t.dispose(!1,!0);this.measurementMarkers=[]}setMeasurementScale(e){this.measurementScale=V_(e),this.updateMeasurementLabels()}getMeasurementScale(){return{...this.measurementScale}}setMeasurementUnit(e){this.measurementUnit=dT(e),this.updateMeasurementLabels()}getMeasurementUnit(){return this.measurementUnit}getMeasurementBounds(){if(!this.rootMesh)return null;let e=this.getRenderableBounds(this.rootMesh);return e?{x:e.max.x-e.min.x,y:e.max.y-e.min.y,z:e.max.z-e.min.z}:null}getMeasurementRecords(){return this.createMeasurementRecords()}exportMeasurements(){return mT(this.createMeasurementRecords())}updateMeasurementLabels(){if(this.measurementSegments.length===0)return;let e=this.getMeasurementMarkerSize()*4;for(let t of this.measurementSegments){let i=Uu(this.createMeasurementReading(t.start,t.end));t.label.dispose(!1,!0);let r=b.Center(t.start,t.end);t.label=this.createMeasurementLabelMesh(i,r,e)}}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 mb(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=pr()?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=ov(fn(t)),r=ov(Rr(t));this.bboxMesh=is.CreateBox("bbox",{width:r.x,height:r.y,depth:r.z},this.scene),this.bboxMesh.position=i;let s=new ke("bbox-mat",this.scene);s.wireframe=!0,s.emissiveColor=new pe(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&&CK(this.rootMesh,e,t,this.loadedMeshes)}resetExplode(){this.rootMesh&&zO(this.rootMesh,this.loadedMeshes)}resetView(){this.rootMesh&&zO(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=SN(this.rootMesh),s=e&&hs(e)||t.rootName;return nT({title:s,format:this.loadedExt.toUpperCase(),summary:t,meshBreakdown:i.map(a=>{var o,l;return{name:a.name,triangleCount:r?null:av(a),vertexCount:pd(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(){if(!this.rootMesh)return null;let e=this.getRenderableMeshes(this.rootMesh),t=this.computeComponentPartSummaries(e);return hT({summary:this.computeSummary(this.rootMesh),renderableMeshes:e,groupedPartCandidates:t,createMeshPart:i=>this.computePartSummary(i),getMeshMaterialNames:i=>{var r;return[(r=i.material)==null?void 0:r.name]},resourceWarnings:this.resourceWarnings})}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?sT(e):""}getPickWorldPoint(e){if(e.pickedPoint&&typeof e.pickedPoint=="object")return Ht(e.pickedPoint);if(bme(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)/Tme)),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=window.requestAnimationFrame(s);return}this.focusWorldPointFrame=0};this.focusWorldPointFrame=window.requestAnimationFrame(s)}getAnnotationCameraStateKey(){return cT([{value:this.camera.alpha,digits:3},{value:this.camera.beta,digits:3},{value:this.camera.radius,digits:3},{value:this.camera.target.x,digits:2},{value:this.camera.target.y,digits:2},{value:this.camera.target.z,digits: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=sa.annotationWorldPoint;return a.set(e.x,e.y,e.z),b.ProjectToRef(a,sa.annotationIdentity,this.scene.getTransformMatrix(),this.camera.viewport.toGlobal(r,s),sa.annotationProjection),H3(sa.annotationProjection,r,s,i,t)}isAnnotationWorldPointOccluded(e){if(this.scene.isDisposed)return!1;let t=wc(Ht(this.camera.position),e);if(!t)return!1;let i=sa.annotationDirection,r=sa.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)&&Nc(s.distance,t.distance,t.epsilon)}getAnnotationProvider(){let e=this.engine.getRenderingCanvas();if(!e)throw new Error("Preview canvas is unavailable");return lT({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=pr()?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,c;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.disposeMeasurementOverlays(!0),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),e==null||e.removeEventListener("pointermove",this.handlePointerMove),e==null||e.removeEventListener("webglcontextlost",this.handleContextLost),e==null||e.removeEventListener("webglcontextrestored",this.handleContextRestored),(a=this.viewportObserver)==null||a.disconnect(),this.viewportObserver=null,this.resizeObs.disconnect(),this.autoRotateBehavior&&(this.camera.removeBehavior(this.autoRotateBehavior),this.autoRotateBehavior=null);for(let f of this.configLights)f.dispose();this.configLights=[],(o=this.shadowGenerator)==null||o.dispose(),this.shadowGenerator=null,(l=this.groundMesh)==null||l.dispose(),this.groundMesh=null,(c=this.gridMesh)==null||c.dispose(),this.gridMesh=null;for(let f of this.axisMeshes)f.dispose();this.axisMeshes=[],this.scene.dispose(),this.engine.dispose()}startRenderLoop(){this.rendering||!this.viewportVisible||this.contextLost||(this.rendering=!0,this.engine.runRenderLoop(()=>{if(!this.canRender()||!this.viewportVisible||this.contextLost){this.engine.stopRenderLoop(),this.rendering=!1;return}this.scene.render(),this.gizmo&&this.gizmoEnabled&&(this.gizmo.syncWith(this.camera),this.gizmo.render())}))}getRenderableMeshes(e){return _d(e,this.loadedMeshes)}getRenderableBounds(e){return rb(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:Sme,r.renderOutline=s,r.outlineColor=new pe(.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){var s;let t=e.name||`mesh-${e.uniqueId}`,i=Ij(e.metadata,(s=this.gltfComponentMetadata.get(`node:${t}`))!=null?s:this.gltfComponentMetadata.get(`mesh:${t}`)),r=nf(i,{name:t,path:Rj(e)});return{...MK(e),name:bj(r,t),source:r.hasExplicitIdentity?"component":"mesh",meshNames:[t],childCount:1,componentId:r.componentId,occurrenceId:r.occurrenceId,partNumber:r.partNumber,componentPath:r.componentPath}}computeComponentPartSummaries(e){let t=new Set(e),i=[],r=new Set,s=[];for(let a of this.loadedTransformNodes){let o=a.getChildMeshes(!1).filter(h=>t.has(h)),l=gb(a,`component-${a.uniqueId}`),c=Ij(a.metadata,this.gltfComponentMetadata.get(`node:${l}`)),f=nf(c,{name:gb(a,`component-${a.uniqueId}`),path:Rj(a)});o.length<1||o.length===e.length||!f.hasExplicitIdentity&&(!a.name.trim()||o.length<2)||s.push({node:a,childMeshes:o,identity:f})}return s.sort((a,o)=>a.childMeshes.length-o.childMeshes.length).forEach(({node:a,childMeshes:o,identity:l})=>{var m;let c=o.filter(p=>!r.has(p));if(c.length<1||!l.hasExplicitIdentity&&c.length<2)return;for(let p of c)r.add(p);let f=hp(c);if(!f)return;let h=new Set,d=0,u=0;for(let p of c)d+=av(p),u+=pd(p),(m=p.material)!=null&&m.name&&h.add(p.material.name);i.push(Ih({name:bj(l,gb(a,`component-${a.uniqueId}`)),triangleCount:d,vertexCount:u,materialName:fT(h),boundingSize:Rr(f),center:fn(f),source:l.hasExplicitIdentity?"component":"group",meshNames:c.map(p=>p.name||`mesh-${p.uniqueId}`),childCount:c.length,componentId:l.componentId,occurrenceId:l.occurrenceId,partNumber:l.partNumber,componentPath:l.componentPath}))}),{parts:i,groupedMeshes:r}}getMeasurementMarkerSize(){if(!this.rootMesh)return .02;let e=this.getRenderableBounds(this.rootMesh);return e?Math.max(e.max.x-e.min.x,e.max.y-e.min.y,e.max.z-e.min.z,.001)*.015:.02}cancelPendingMeasurement(e=!0){var r,s;let t=this.pendingMarker,i=(s=(r=this.pendingPoint)==null?void 0:r.clone())!=null?s:null;if(this.pendingPoint=null,this.pendingMarker=null,this.hoveredMarkerIndex=-1,this.removePreviewLine(),t&&i&&!this.isMeasurementPointUsed(i)){let a=this.measurementMarkers.indexOf(t);a>=0&&this.measurementMarkers.splice(a,1),t.dispose(!1,!0)}else t&&(t.scaling.setAll(1),t.material.diffuseColor=new pe(1,.42,.42),t.material.emissiveColor=new pe(1,.42,.42));e&&this.scene.render()}isMeasurementPointUsed(e){return this.measurementSegments.some(t=>b.Distance(t.start,e)<1e-4||b.Distance(t.end,e)<1e-4)}findNearestMarkerIndex(e){let t=this.getMeasurementMarkerSize()*2.5;for(let i=0;i=0?this.measurementMarkers[t].position.clone():e;if(this.pendingPoint){if(b.Distance(i,this.pendingPoint)<1e-4)return;if(t<0){let r=this.getMeasurementMarkerSize(),s=is.CreateSphere("measure-marker",{diameter:r},this.scene);s.position=i,s.isPickable=!1;let a=new ke("measure-marker-mat",this.scene);a.diffuseColor=new pe(1,.42,.42),a.emissiveColor=new pe(1,.42,.42),s.material=a,s.renderingGroupId=2,this.measurementMarkers.push(s)}this.createMeasurementSegment(this.pendingPoint,i),this.pendingMarker&&(this.pendingMarker.scaling.setAll(1),this.pendingMarker.material.diffuseColor=new pe(1,.42,.42),this.pendingMarker.material.emissiveColor=new pe(1,.42,.42)),this.pendingPoint=null,this.pendingMarker=null,this.removePreviewLine()}else{if(t<0){let r=this.getMeasurementMarkerSize(),s=is.CreateSphere("measure-marker",{diameter:r},this.scene);s.position=i,s.isPickable=!1;let a=new ke("measure-marker-mat",this.scene);a.diffuseColor=new pe(1,.42,.42),a.emissiveColor=new pe(1,.42,.42),s.material=a,s.renderingGroupId=2,this.measurementMarkers.push(s),this.pendingMarker=s}else this.pendingMarker=this.measurementMarkers[t];this.pendingMarker.scaling.setAll(1.6),this.pendingMarker.material.diffuseColor=new pe(.32,.81,.4),this.pendingMarker.material.emissiveColor=new pe(.32,.81,.4),this.pendingPoint=i,this.ensurePreviewLine()}}createMeasurementSegment(e,t){let i=is.CreateLines("measure-line",{points:[e,t]},this.scene);i.color=new pe(1,.42,.42),i.isPickable=!1,i.renderingGroupId=2;let r=Uu(this.createMeasurementReading(e,t)),s=b.Center(e,t),a=this.createMeasurementLabelMesh(r,s,this.getMeasurementMarkerSize()*4);this.measurementSegments.push({start:e,end:t,line:i,label:a})}createMeasurementLabelMesh(e,t,i){let r=is.CreatePlane("measure-label",{width:i*5,height:i*1.25},this.scene);r.position=t,r.billboardMode=q.BILLBOARDMODE_ALL,r.isPickable=!1,r.renderingGroupId=2;let s=new ER("measure-label-tex",{width:640,height:160},this.scene),a=s.getContext();a.fillStyle="rgba(32, 36, 46, 0.9)",a.fillRect(0,0,640,160),a.strokeStyle="#ff6b6b",a.lineWidth=4,a.strokeRect(0,0,640,160),a.fillStyle="#ffffff",a.textAlign="center",a.textBaseline="middle",a.font="bold 46px sans-serif",a.fillText(e.primary,320,58),a.font="28px sans-serif",a.fillStyle="rgba(255, 255, 255, 0.82)",a.fillText(e.secondary,320,112),s.update();let o=new ke("measure-label-mat",this.scene);return o.diffuseTexture=s,o.emissiveColor=new pe(1,1,1),o.disableLighting=!0,o.opacityTexture=s,r.material=o,r}ensurePreviewLine(){this.previewLine||(this.previewLine=is.CreateLines("measure-preview",{points:[b.Zero(),b.Zero()],updatable:!0},this.scene),this.previewLine.color=new pe(1,1,1),this.previewLine.alpha=.5,this.previewLine.isPickable=!1,this.previewLine.renderingGroupId=2)}updatePreviewLine(){if(!this.pendingPoint||!this.previewLine||!this.rootMesh)return;let e=this.engine.getRenderingCanvas();if(!e)return;let t=e.getBoundingClientRect(),i=this.lastPointerClient.x-t.left,r=this.lastPointerClient.y-t.top,s=this.scene.pick(i,r,o=>o!==this.previewLine&&!this.measurementMarkers.includes(o)),a;if(s.hit&&s.pickedPoint)a=s.pickedPoint;else{let o=this.scene.createPickingRay(i,r,j.Identity(),this.camera);a=this.pendingPoint.add(o.direction.scale(5))}this.previewLine=is.CreateLines("measure-preview",{points:[this.pendingPoint,a],instance:this.previewLine},this.scene),this.previewLine.color=new pe(1,1,1),this.previewLine.alpha=.5,this.previewLine.isPickable=!1,this.previewLine.renderingGroupId=2}removePreviewLine(){this.previewLine&&(this.previewLine.dispose(),this.previewLine=null)}createMeasurementReading(e,t){return uT(this.toMeasurementPoint(e),this.toMeasurementPoint(t),this.measurementScale,this.measurementUnit)}createMeasurementRecords(){return this.measurementSegments.map((e,t)=>({index:t+1,start:this.toMeasurementPoint(e.start),end:this.toMeasurementPoint(e.end),reading:this.createMeasurementReading(e.start,e.end)}))}toMeasurementPoint(e){return{x:e.x,y:e.y,z:e.z}}computeSummary(e){let t=this.getRenderableMeshes(e),i=SN(e),r=t.reduce((s,a)=>s+pd(a),0);return nb(e.name,this.getRenderableBounds(e),t,{splatCount:i?r:void 0,resourceWarnings:this.resourceWarnings})}};sa.annotationIdentity=j.Identity(),sa.annotationWorldPoint=b.Zero(),sa.annotationProjection=b.Zero(),sa.annotationDirection=b.Zero(),sa.annotationRay=new Kr(b.Zero(),b.Zero(),1);vb=sa});async function yj(n,e){if(Hd(e).backend==="three"){let{createThreeModelPreview:r}=await Promise.resolve().then(()=>(s2(),n2));return r(n)}let{createBabylonModelPreview:i}=await Promise.resolve().then(()=>(Cj(),Mj));return i(n)}var Pj=M(()=>{"use strict";Nv()});var Lj={};tt(Lj,{createBabylonGridRenderer:()=>Dme});function Lme(n){return n.replace(/\|/g,"\\|").replace(/\r?\n/g," ")}function TN(n){return new b(n.x,n.y,n.z)}function Dme(n){return new AN(n)}var dp,AN,Dj=M(()=>{"use strict";ky();Cs();cx();fx();Ge();zt();em();ep();Zh();Ac();sv();sv();sb();QS();Qs();rf();eT();dp=32;AN=class{constructor(e){this.cells=[];this.initialCameras=[];this.wireframeEnabled=!1;this.rendering=!1;this.dirty=!0;this.contextLost=!1;this.preventCanvasWheelScroll=e=>{e.preventDefault(),e.stopPropagation()};this.handleContextLost=e=>{e.preventDefault(),this.contextLost=!0,this.rendering&&(this.engine.stopRenderLoop(),this.rendering=!1)};this.handleContextRestored=()=>{this.contextLost=!1,this.engine.resize(),this.startRenderLoop(),this.markDirty()};e.className="ai3d-canvas-full",e.addEventListener("wheel",this.preventCanvasWheelScroll,{passive:!1}),this.engine=new Ue(e,!0,{preserveDrawingBuffer:!0}),e.addEventListener("webglcontextlost",this.handleContextLost),e.addEventListener("webglcontextrestored",this.handleContextRestored),this.scene=new Jt(this.engine),this.scene.clearColor=new lt(.12,.12,.14,1),this.scene.autoClear=!1,new ta("default-light",new b(0,1,.5),this.scene),this.resizeObs=new ResizeObserver(()=>{this.engine.resize(),this.markDirty()}),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}markDirty(){this.dirty=!0}getCellBounds(e){let t=hp(e);if(!t)throw new Error("Grid cell has no renderable meshes");return t}async loadModels(e,t,i){var h,d,u;await nv();let r=e.length>dp?(console.warn(`[AI3D Grid] Capping ${e.length} models to ${dp} (layerMask limit)`),e.slice(0,dp)):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;mdp?(console.warn(`[AI3D Preset] Capping ${e.placements.length} placements to ${dp} (layerMask limit)`),e.placements.slice(0,dp)):e.placements,r=[];for(let f=0;f0&&(d.push(...r[p]),u|=1<this.markDirty())),this.initialCameras.push({alpha:f.alpha,beta:f.beta,radius:f.radius,target:f.target.clone()}),f}async loadOne(e,t,i,r,s,a,o){var d,u;let l=await t(e.path),c=(u=(d=e.path.split(".").pop())==null?void 0:d.replace(".","").toLowerCase())!=null?u:"glb",{renderableMeshes:f}=await this.importMesh(e.path,l,o);if(c==="stl"&&e.color){let m=pe.FromHexString(e.color);for(let p of f)p.material instanceof ke&&p.material.name==="stl-mat"&&(p.material.diffuseColor=m)}if(c==="stl"&&e.wireframe!==void 0)for(let m of f)m.material instanceof ke&&(m.material.wireframe=e.wireframe);let h=this.createCellCamera(f,o,i,r,s,a);this.cells.push({meshes:f,camera:h})}createCellCamera(e,t,i,r,s,a){let o=JS(this.getCellBounds(e)),l=new gi(`cell-cam-${t}`,Math.PI/4,Math.PI/3,o.radius,TN(o.target),this.scene);l.fov=45*Math.PI/180,l.minZ=o.near,l.maxZ=o.far,l.lowerRadiusLimit=o.lowerRadiusLimit,l.upperRadiusLimit=o.upperRadiusLimit,l.wheelPrecision=30,l.viewport=new so(i,r,s,a),l.layerMask=1<this.markDirty())),this.initialCameras.push({alpha:l.alpha,beta:l.beta,radius:l.radius,target:l.target.clone()}),l}renderFrame(){if(!this.canRender()||!this.dirty||this.contextLost)return;this.dirty=!1;let e=this.engine,t=this.scene;e.clear(t.clearColor,!0,!0);for(let i of this.cells){e.setViewport(i.camera.viewport);let r=i.camera.viewport,s=e.getRenderWidth(),a=e.getRenderHeight();e.enableScissor(r.x*s,r.y*a,r.width*s,r.height*a),t.activeCamera=i.camera,t.render(),e.disableScissor()}}startRenderLoop(){this.rendering||(this.rendering=!0,this.engine.runRenderLoop(()=>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=pr()?1.5:1;return this.engine.setHardwareScalingLevel(i/t),t}resetView(){for(let e=0;e(Dj(),Lj));return e(n)}var Nj=M(()=>{"use strict"});function Ome(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 gd(n,e,t,i){let r=Hd(i);return Ome(n,e,r),{preview:await yj(t,i),route:r}}function Nme(n,e,t){n.info("select preview backend",{...e,backend:t.backend,reason:t.reason})}async function wj(n,e,t){let i=qw();return Nme(n,e,i),{renderer:await Oj(t),route:i}}var Eb=M(()=>{"use strict";Pj();Nj();Nv()});function xN(n){Bj=n}function Sb(n){return Fj[n]>=Fj[Bj]}function Tb(){return new Date().toISOString()}function Ab(n){return n&&Object.keys(n).length>0?n:void 0}function Wi(n){let e=`[AI3D][${n}]`;return{debug(t,i){Sb("debug")&&console.debug(e,Tb(),t,Ab(i))},info(t,i){Sb("info")&&console.debug(e,Tb(),t,Ab(i))},warn(t,i){Sb("warn")&&console.warn(e,Tb(),t,Ab(i))},error(t,i){Sb("error")&&console.error(e,Tb(),t,Ab(i))}}}var Fj,Bj,An=M(()=>{"use strict";Fj={debug:10,info:20,warn:30,error:40},Bj="warn"});function Mr(n,e){return!!n&&typeof n=="object"&&typeof n[e]=="function"}function lv(n){return Mr(n,"getAnnotationProvider")}function RN(n){return Mr(n,"hasAnimations")&&Mr(n,"toggleAnimation")}function xn(n){return Mr(n,"toggleMeasurement")&&Mr(n,"isMeasurementActive")&&Mr(n,"clearMeasurements")&&Mr(n,"setMeasurementScale")&&Mr(n,"getMeasurementScale")&&Mr(n,"setMeasurementUnit")&&Mr(n,"getMeasurementUnit")&&Mr(n,"getMeasurementBounds")&&Mr(n,"getMeasurementRecords")&&Mr(n,"updateMeasurementLabels")&&Mr(n,"exportMeasurements")}function cv(n){return Mr(n,"toggleDisassembly")&&Mr(n,"resetDisassembly")&&Mr(n,"isDisassemblyEnabled")}function fv(n){return Mr(n,"toggleFocusSelection")&&Mr(n,"isFocusSelectionEnabled")}function bN(n){return Mr(n,"toggleWireframe")}function xb(n){return Mr(n,"toggleOrientationGizmo")}function IN(n){return Mr(n,"toggleBoundingBox")}function MN(n){return Mr(n,"setRenderScale")}var up=M(()=>{"use strict"});function Lr(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 Uj(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{re.stopPropagation()};d.addEventListener("pointerdown",_),d.addEventListener("mousedown",_),d.addEventListener("click",_),f&&(d.classList.add("is-mobile"),Vj(e,!1));let g=re=>(re.classList.add("is-secondary"),re),v=(re,K)=>{re.classList.toggle("ai3d-btn-active",K),re.setAttribute("aria-pressed",String(K))},x=()=>{for(let re of[u,m,p]){let K=Array.from(re.querySelectorAll(".ai3d-inline-btn")).filter(Ye=>!Ye.classList.contains("is-hidden")),Pe=K.length>0,Ae=K.some(Ye=>!Ye.classList.contains("is-secondary"));re.classList.toggle("is-hidden",!Pe),re.classList.toggle("has-primary-visible",Ae)}},T=!1,E=!1,S=f?u.createEl("button",{cls:"ai3d-inline-btn ai3d-mobile-mode-btn",attr:{"aria-label":Q("helper.enableInteractionLabel"),"aria-pressed":"false"}}):null;S==null||S.appendChild(Lr(''));let R=(Wt=S==null?void 0:S.createSpan({cls:"ai3d-mobile-mode-btn-label"}))!=null?Wt:null,I=()=>{f&&S&&(Vj(e,T),v(S,T),R==null||R.setText(T?Q("helper.scrollAction"):Q("helper.interactAction")),S.setAttribute("aria-label",T?Q("helper.disableInteractionLabel"):Q("helper.enableInteractionLabel"))),v($t,E),d.classList.toggle("show-secondary",E),x()},C=re=>{T=re,I()};S==null||S.addEventListener("click",()=>{let re=!T;l==null||l(re),C(re),bi(S,re?Q("helper.interactionOn"):Q("helper.interactionOff"))});let y=(re,K)=>{re.classList.toggle("is-hidden",!K)},D=null,O=()=>{var Ye;let re=i(),K=re&&fv(re)?re:null,Pe=re&&cv(re)?re:null,Ae=re&&xn(re)?re:null;v(J,!!(K!=null&&K.isFocusSelectionEnabled())),v(z,!!(Pe!=null&&Pe.isDisassemblyEnabled())),v(ve,!!(Ae!=null&&Ae.isMeasurementActive())),re&&xb(re)&&v(te,!!((Ye=re.isOrientationGizmoEnabled)!=null&&Ye.call(re)))},V=()=>{let re=i(),K=re&&fv(re)?re:null,Pe=re&&cv(re)?re:null,Ae=re&&RN(re)?re:null;re!==D&&(D=re,v(W,!1),v($,!1),v(ae,!1),ae.replaceChildren(Lr('')),y(N,!!(re!=null&&re.resetView)),y(w,!!(re!=null&&re.exportModelInfo)),y(U,!!(re!=null&&re.exportSelectedPartInfo)),y(W,!!re&&bN(re)),y(te,!!re&&xb(re)),y($,!!re&&IN(re)),y(J,!!K),y(z,!!Pe),y(Be,!!re&&MN(re)),y(ae,!!(Ae!=null&&Ae.hasAnimations()))),y(ve,!!re&&xn(re)),y(ne,!!re&&xn(re)),y(ue,!!re&&xn(re)),y(De,!!re&&xn(re)),O(),x()},N=u.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.resetViewLabel")}});on(N,"reset-view"),N.appendChild(Lr('')),N.addEventListener("click",()=>{let re=i();re!=null&&re.resetView&&(re.resetView(),V(),bi(N,Q("helper.resetViewDone")))});let w=g(m.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.copyModelInfoLabel")}}));on(w,"copy-model-info"),w.appendChild(Lr('')),w.addEventListener("click",()=>{let re=i();if(re!=null&&re.exportModelInfo)try{let K=re.exportModelInfo(r());if(!K)return;navigator.clipboard.writeText(K).then(()=>{bi(w,Q("helper.copied"))}).catch(()=>{bi(w,Q("helper.failed"))})}catch(K){console.error("[AI3D] Export model info failed:",K),bi(w,Q("helper.failed"))}});let U=g(m.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.copySelectedPartInfoLabel")}}));on(U,"copy-selected-part-info"),U.appendChild(Lr('')),U.addEventListener("click",()=>{let re=i();if(re!=null&&re.exportSelectedPartInfo)try{let K=re.exportSelectedPartInfo();if(!K){bi(U,Q("helper.noSelectedPart"));return}navigator.clipboard.writeText(K).then(()=>{bi(U,Q("helper.copied"))}).catch(()=>{bi(U,Q("helper.failed"))})}catch(K){console.error("[AI3D] Export selected part info failed:",K),bi(U,Q("helper.failed"))}});let W=u.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.toggleWireframeLabel"),"aria-pressed":"false"}});on(W,"toggle-wireframe"),W.appendChild(Lr('')),W.addEventListener("click",()=>{let re=i();if(!(re!=null&&re.toggleWireframe))return;let K=re.toggleWireframe();v(W,K),bi(W,K?Q("helper.wireframeOn"):Q("helper.wireframeOff"))});let te=u.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.toggleAxesLabel"),"aria-pressed":"false"}});on(te,"toggle-axes"),te.appendChild(Lr('')),te.addEventListener("click",()=>{let re=i();if(!(re!=null&&re.toggleOrientationGizmo))return;let K=re.toggleOrientationGizmo();v(te,K),bi(te,K?Q("helper.axesOn"):Q("helper.axesOff"))});let $=u.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.toggleBoundingBoxLabel"),"aria-pressed":"false"}});on($,"toggle-bounding-box"),$.appendChild(Lr('')),$.addEventListener("click",()=>{let re=i();if(!(re!=null&&re.toggleBoundingBox))return;let K=re.toggleBoundingBox();v($,K),bi($,K?Q("helper.boundingBoxOn"):Q("helper.boundingBoxOff"))});let J=m.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.toggleFocusSelectionLabel"),"aria-pressed":"false"}});on(J,"toggle-focus"),J.appendChild(Lr('')),J.addEventListener("click",()=>{let re=i();if(!re||!fv(re))return;let K=re.toggleFocusSelection();V(),bi(J,K?Q("helper.focusSelectionOn"):Q("helper.focusSelectionOff"))});let z=m.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.toggleDisassemblyLabel"),"aria-pressed":"false"}});on(z,"toggle-disassembly"),z.appendChild(Lr('')),z.addEventListener("click",()=>{let re=i();if(!re||!cv(re))return;let K=re.toggleDisassembly();V(),bi(z,K?Q("helper.disassemblyOn"):Q("helper.disassemblyOff"))});let Y=[.5,.75,1,1.5,2],me=(qt=a==null?void 0:a().renderScale)!=null?qt:1,xe=Y.reduce((re,K,Pe)=>{let Ae=Math.abs(K-me),Ye=Math.abs(Y[re]-me);return Ae{let re=i();if(!(re!=null&&re.setRenderScale))return;xe=(xe+1)%Y.length;let K=re.setRenderScale(Y[xe]);Be.textContent=`${K.toFixed(1)}x`,bi(Be,Ki("helper.resolutionValue",{value:`${K}x`}))});let ae=g(u.createEl("button",{cls:"ai3d-inline-btn is-hidden",attr:{"aria-label":Q("helper.toggleAnimationLabel"),"aria-pressed":"false"}}));on(ae,"toggle-animation"),ae.appendChild(Lr('')),ae.addEventListener("click",()=>{let re=i();if(!(re!=null&&re.toggleAnimation))return;let K=re.toggleAnimation();ae.replaceChildren(Lr(K?'':'')),v(ae,K),bi(ae,K?Q("helper.playing"):Q("helper.paused"))});let ve=m.createEl("button",{cls:"ai3d-inline-btn is-hidden",attr:{"aria-label":Q("helper.toggleMeasurementLabel"),"aria-pressed":"false",title:Q("helper.toggleMeasurementLabel")}});on(ve,"toggle-measurement"),ve.appendChild(Lr('')),ve.addEventListener("click",()=>{let re=i();if(!re||!xn(re))return;let K=re.toggleMeasurement();v(ve,K),bi(ve,K?Q("helper.measurementOn"):Q("helper.measurementOff")),K||v(ne,!1)});let ne=g(m.createEl("button",{cls:"ai3d-inline-btn is-hidden",attr:{"aria-label":Q("helper.clearMeasurementsLabel")}}));on(ne,"clear-measurements"),ne.appendChild(Lr('')),ne.addEventListener("click",()=>{let re=i();!re||!xn(re)||(re.clearMeasurements(),v(ve,re.isMeasurementActive()),bi(ne,Q("helper.measurementsCleared")))});let ue=g(m.createEl("button",{cls:"ai3d-inline-btn is-hidden",attr:{"aria-label":Q("helper.copyMeasurementsLabel")}}));on(ue,"copy-measurements"),ue.appendChild(Lr('')),ue.addEventListener("click",()=>{let re=i();if(!re||!xn(re))return;let K=re.exportMeasurements();if(!K){bi(ue,Q("helper.noMeasurements"));return}navigator.clipboard.writeText(K).then(()=>{bi(ue,Q("helper.measurementsCopied"))}).catch(()=>{bi(ue,Q("helper.failed"))})});let De=g(m.createEl("button",{cls:"ai3d-inline-btn is-hidden",attr:{"aria-label":Q("helper.calibrateLabel")}}));on(De,"toggle-calibration"),De.appendChild(Lr(''));let de=p.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.copySnapshotLabel")}});on(de,"copy-snapshot"),de.appendChild(Lr('')),de.addEventListener("click",()=>{let re=i();if(re)try{let K=re.captureSnapshot();if(!K)return;let Pe=Uj(K);navigator.clipboard.write([new ClipboardItem({"image/png":Pe})]).then(()=>{bi(de,Q("helper.copied"))}).catch(()=>{bi(de,Q("helper.failed"))})}catch(K){console.error("[AI3D] Copy snapshot failed:",K),bi(de,Q("helper.failed"))}});let be=g(p.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.saveSnapshotLabel")}}));on(be,"save-snapshot"),be.appendChild(Lr('')),be.addEventListener("click",()=>{var K,Pe;let re=i();if(re)try{let Ae=re.captureSnapshot();if(!Ae)return;let Ye=r(),Ke=qr(Ye)||"model",we=a==null?void 0:a(),At=(K=we==null?void 0:we.snapshotFolder)!=null?K:"Media/3D Previews",Zt=(Pe=we==null?void 0:we.snapshotNaming)!=null?Pe:"model-name",tr=Date.now(),vi=Zt==="timestamp"?`snapshot_${tr}.png`:`${Ke}_snapshot_${tr}.png`,bn=Uj(Ae),Zi=new FileReader;Zi.onload=()=>{let Ua=Zi.result;t.vault.adapter.exists(At).then(Mp=>Mp?Promise.resolve():t.vault.createFolder(At).catch(Rv=>{wme.warn("Failed to create vault folder",{path:At,error:String(Rv)})})).then(()=>t.vault.createBinary(`${At}/${vi}`,Ua)).then(()=>{bi(be,Q("helper.saved"))}).catch(Mp=>{console.error("[AI3D] Save snapshot failed:",Mp),bi(be,Q("helper.failed"))})},Zi.onerror=()=>{console.error("[AI3D] FileReader error"),bi(be,Q("helper.failed"))},Zi.onabort=()=>{console.error("[AI3D] FileReader aborted"),bi(be,Q("helper.failed"))},Zi.readAsArrayBuffer(bn)}catch(Ae){console.error("[AI3D] Save snapshot failed:",Ae),bi(be,Q("helper.failed"))}});let je=g(p.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.downloadSnapshotLabel")}}));on(je,"download-snapshot"),je.appendChild(Lr('')),je.addEventListener("click",()=>{let re=i();if(re)try{let K=re.captureSnapshot();if(!K)return;let Pe=r(),Ye=`${qr(Pe)||"model"}_snapshot_${Date.now()}.png`,Ke=createEl("a");Ke.href=K,Ke.download=Ye,activeDocument.body.appendChild(Ke),Ke.click(),Ke.remove(),bi(je,Q("helper.downloaded"))}catch(K){console.error("[AI3D] Download snapshot failed:",K),bi(je,Q("helper.failed"))}});let Tt=g(p.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.removePreviewLabel")}}));on(Tt,"remove-preview"),Tt.appendChild(Lr('')),Tt.addEventListener("click",s);let Xe=m.createEl("button",{cls:"ai3d-inline-btn is-hidden ai3d-annot-btn",attr:{"aria-label":Q(h.labelKey),"aria-pressed":"false"}});on(Xe,"toggle-annotation"),Xe.appendChild(Lr(''));let qe=Xe.createSpan({cls:"ai3d-pin-badge is-hidden"});Xe.addEventListener("click",()=>{if(!o)return;let re=o();v(Xe,re),bi(Xe,re?Q(h.activeTooltipKey):Q(h.inactiveTooltipKey))});let $t=d.createEl("button",{cls:"ai3d-inline-btn ai3d-mobile-more-toggle",attr:{"aria-label":Q("helper.showMoreActionsLabel"),"aria-pressed":"false"}});$t.appendChild(Lr('')),$t.addEventListener("click",()=>{E=!E,$t.setAttribute("aria-label",E?Q("helper.hideMoreActionsLabel"):Q("helper.showMoreActionsLabel")),I(),bi($t,E?Q("helper.moreActionsShown"):Q("helper.moreActionsHidden"))}),n.insertBefore(d,e.nextSibling);let Dt=n.createDiv({cls:"ai3d-calibrate-panel is-hidden"});Dt.createDiv({cls:"ai3d-calibrate-title",text:Q("helper.calibrateTitle")});let xi=Dt.createDiv({cls:"ai3d-calibrate-row"});xi.createSpan({cls:"ai3d-calibrate-label",text:Q("helper.calibrateCurrent")});let oe=xi.createSpan({cls:"ai3d-calibrate-readonly"}),Vi=xi.createSpan({cls:"ai3d-calibrate-readonly"}),ii=xi.createSpan({cls:"ai3d-calibrate-readonly"}),Fi=Dt.createDiv({cls:"ai3d-calibrate-row"});Fi.createSpan({cls:"ai3d-calibrate-label",text:Q("helper.calibrateReal")});let ot=Fi.createEl("input",{cls:"ai3d-calibrate-input",attr:{type:"number",step:"any",placeholder:"X"}}),Li=Fi.createEl("input",{cls:"ai3d-calibrate-input",attr:{type:"number",step:"any",placeholder:"Y"}}),X=Fi.createEl("input",{cls:"ai3d-calibrate-input",attr:{type:"number",step:"any",placeholder:"Z"}}),B=Dt.createDiv({cls:"ai3d-calibrate-row"}),he=B.createEl("select",{cls:"ai3d-calibrate-select"});for(let re of["um","mm","cm","m"]){let K=he.createEl("option");K.value=re,K.textContent=re}he.value="mm";let Le=B.createEl("label",{cls:"ai3d-calibrate-lock"}),Ve=Le.createEl("input",{attr:{type:"checkbox",checked:"true"}});Le.appendChild(activeDocument.createTextNode(" "+Q("helper.calibrateLock")));let Je=Dt.createDiv({cls:"ai3d-calibrate-row ai3d-calibrate-actions"}),rt=Je.createEl("button",{cls:"ai3d-inline-btn",text:Q("helper.calibrateApply")}),ye=Je.createEl("button",{cls:"ai3d-inline-btn is-secondary",text:Q("helper.calibrateReset")}),Ie=null;function ct(){var Ae,Ye;let re=i();if(!re||!xn(re))return;let K=(Ye=(Ae=re.getMeasurementBounds)==null?void 0:Ae.call(re))!=null?Ye:null,Pe=re.getMeasurementScale();he.value=re.getMeasurementUnit(),Ie=K,K?(oe.textContent=`X: ${(K.x*Pe.x).toFixed(3)}`,Vi.textContent=`Y: ${(K.y*Pe.y).toFixed(3)}`,ii.textContent=`Z: ${(K.z*Pe.z).toFixed(3)}`):(oe.textContent="X: -",Vi.textContent="Y: -",ii.textContent="Z: -")}function St(){var Ke,we;let re=i();if(!re||!xn(re)||!Ie)return;let K=parseFloat(ot.value),Pe=parseFloat(Li.value),Ae=parseFloat(X.value);if(!isFinite(K)||!isFinite(Pe)||!isFinite(Ae))return;let Ye={x:Ie.x>1e-4?K/Ie.x:1,y:Ie.y>1e-4?Pe/Ie.y:1,z:Ie.z>1e-4?Ae/Ie.z:1};(Ke=re.setMeasurementUnit)==null||Ke.call(re,he.value),(we=re.setMeasurementScale)==null||we.call(re,Ye),bi(rt,Q("helper.calibrated"))}function nt(){var K,Pe;let re=i();!re||!xn(re)||((K=re.setMeasurementUnit)==null||K.call(re,he.value),(Pe=re.setMeasurementScale)==null||Pe.call(re,{x:1,y:1,z:1}),ct(),Ie?(ot.value=Ie.x.toFixed(3),Li.value=Ie.y.toFixed(3),X.value=Ie.z.toFixed(3)):(ot.value="",Li.value="",X.value=""),bi(ye,Q("helper.calibrateResetDone")))}function Qe(re){if(!Ve.checked||!Ie)return;let Pe=parseFloat((re==="x"?ot:re==="y"?Li:X).value);if(!isFinite(Pe)||Pe===0)return;let Ae=Ie[re];if(Ae<=1e-4)return;let Ye=Pe/Ae;re!=="x"&&(ot.value=(Ie.x*Ye).toFixed(3)),re!=="y"&&(Li.value=(Ie.y*Ye).toFixed(3)),re!=="z"&&(X.value=(Ie.z*Ye).toFixed(3))}return ot.addEventListener("input",()=>Qe("x")),Li.addEventListener("input",()=>Qe("y")),X.addEventListener("input",()=>Qe("z")),he.addEventListener("change",()=>{let re=i();!re||!xn(re)||re.setMeasurementUnit(he.value)}),rt.addEventListener("click",St),ye.addEventListener("click",nt),De.addEventListener("click",()=>{let re=Dt.classList.contains("is-hidden");if(re&&(ct(),Ie)){let K=i(),Pe=K&&xn(K)?K.getMeasurementScale():{x:1,y:1,z:1};ot.value=(Ie.x*Pe.x).toFixed(3),Li.value=(Ie.y*Pe.y).toFixed(3),X.value=(Ie.z*Pe.z).toFixed(3)}Dt.classList.toggle("is-hidden",!re),v(De,re),bi(De,re?Q("helper.calibrateOpen"):Q("helper.calibrateClose"))}),I(),V(),{showAnimButton(){ae.classList.remove("is-hidden"),x()},showAnnotateButton(){Xe.classList.remove("is-hidden"),x()},updateAnnotationBadge(re){re>0?(qe.textContent=String(re),qe.classList.remove("is-hidden")):qe.classList.add("is-hidden")},setMobileInteractionMode(re){f&&C(re)},syncCapabilities:V}}function bi(n,e){var i;(i=CN.get(n))==null||i.remove();let t=n.createSpan({cls:"ai3d-tooltip"});t.textContent=e,CN.set(n,t),window.setTimeout(()=>{t.remove(),CN.delete(n)},1500)}var wme,CN,yN=M(()=>{"use strict";os();An();up();Qs();ks();wme=Wi("helper-buttons");CN=new WeakMap});function Bme(n,e,t){let i=typeof activeWindow!="undefined"?activeWindow.setTimeout.bind(activeWindow):setTimeout,r=typeof activeWindow!="undefined"?activeWindow.clearTimeout.bind(activeWindow):clearTimeout,s=new Promise((a,o)=>{let l=i(()=>{o(new PN(`Conversion did not complete within ${e}ms`))},e);n.then(()=>r(l)).catch(()=>r(l))});return Promise.race([n,s])}var dv,Fme,PN,Rb,Gj=M(()=>{"use strict";Co();An();dv=Wi("conversion-manager"),Fme=3e5,PN=class extends Error{constructor(e="Conversion timed out"){super(e),this.name="ConversionTimeoutError"}};Rb=class{constructor(){this.converters=new Map;this.pending=new Map}getConverter(e){return this.converters.get(Va(e))}registerConverter(e){dv.info("register converter",{converterId:e.id,sourceExts:[...e.sourceExts]});for(let t of e.sourceExts)this.converters.set(Va(t),e)}canConvert(e){let t=Va(e),i=this.converters.has(t);return dv.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){var o;let t=Va(e.sourceExt),i=this.getConverter(t);if(!i)throw dv.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 dv.info("joining in-flight conversion",{key:r}),s;dv.info("dispatch conversion",{converterId:i.id,ext:t,targetExt:e.targetExt});let a=Bme(i.convert({...e,sourceExt:t}),(o=e.timeoutMs)!=null?o:Fme,{converterId:i.id,ext:t,targetExt:e.targetExt});this.pending.set(r,a);try{return await a}finally{this.pending.delete(r)}}}});function ON(...n){let e=(We==null?void 0:We.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 Vme(){var r,s,a;if((We==null?void 0:We.platform)==="darwin")return["/Applications/FreeCAD.app/Contents/MacOS/FreeCADCmd","/Applications/FreeCAD.app/Contents/Resources/bin/FreeCADCmd","/Applications/FreeCAD.app/Contents/Resources/bin/freecadcmd",...ON("FreeCADCmd","freecadcmd")];if((We==null?void 0:We.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=We==null?void 0:We.env)==null?void 0:r.LOCALAPPDATA,t=(s=We==null?void 0:We.env)==null?void 0:s.ProgramFiles,i=(a=We==null?void 0:We.env)==null?void 0:a["ProgramFiles(x86)"];if(e&&n.push(Xi(e,"Programs","FreeCAD","bin","FreeCADCmd.exe")),t&&n.push(Xi(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 Gme(n){var a,o,l,c;if((We==null?void 0:We.platform)!=="win32")return[];let e=(a=We==null?void 0:We.env)==null?void 0:a.APPDATA,t=(o=We==null?void 0:We.env)==null?void 0:o.LOCALAPPDATA,i=(l=We==null?void 0:We.env)==null?void 0:l.npm_config_prefix,r=(c=We==null?void 0:We.env)==null?void 0:c.USERPROFILE,s=[i,e?Xi(e,"npm"):void 0,t?Xi(t,"npm"):void 0,r?Xi(r,"AppData","Roaming","npm"):void 0].filter(f=>!!f);return Array.from(new Set(s.map(f=>Xi(f,n))))}function kme(...n){var s,a,o;if((We==null?void 0:We.platform)!=="win32")return[];let e=(s=We==null?void 0:We.env)==null?void 0:s.ProgramFiles,t=(a=We==null?void 0:We.env)==null?void 0:a["ProgramFiles(x86)"],i=(o=We==null?void 0:We.env)==null?void 0:o.LOCALAPPDATA,r=[e,t,i?Xi(i,"Programs"):void 0].filter(l=>!!l);return Array.from(new Set(r.flatMap(l=>n.map(c=>Xi(l,c)))))}async function FN(n){try{return await cs(n,(We==null?void 0:We.platform)==="win32"?fs:ww),!0}catch(e){return!1}}function LN(n){let e=n==null?void 0:n.trim();if(e)return e}function Hj(n){return Wme.test(n)?{ok:!1,reason:"Command contains unsafe shell metacharacters."}:{ok:!0}}async function Hme(n){try{return(await Dp(n)).isFile()}catch(e){return!1}}function zme(n){let e=[],t="",i=null;for(let r=0;rr.trim().toLowerCase()).filter(Boolean);return e!=null&&e.length?e:Ume}async function jme(n){var r;let e=(r=We==null?void 0:We.env)==null?void 0:r.PATH;if(!e)return;let t=e.split(Fw).map(s=>s.trim()).filter(Boolean),i=(We==null?void 0:We.platform)==="win32"?Kme(n):[""];for(let s of t)for(let a of i){let o=Xi(s,a?`${n}${a}`:n);if(await FN(o))return o}}function NN(n,e,t=15e3){let i=Hj(n);return i.ok?new Promise((r,s)=>{fa(n,e,{timeout:t,windowsHide:!0,maxBuffer:4*1024*1024},(a,o,l)=>{if(a){s(new Error((l||o||a.message).toString().trim()||a.message));return}r({stdout:o!=null?o:"",stderr:l!=null?l:""})})}):Promise.reject(new Error(`Refusing to execute converter command: ${i.reason}`))}function wN(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 DN(n,e,t,i){let r="";for(let s of t)try{return await NN(n,[...e,...s]),{ok:!0,detail:""}}catch(a){let o=wN(a);if(i.test(o))return{ok:!0,detail:""};r=o}return{ok:!1,detail:r||"Command probe failed."}}async function qme(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 NN(e,[...t,"-c","import cadquery, trimesh; print('ok')"]),[{kind:"cad-python",ok:!0,detail:""}]}catch(r){return[{kind:"cad-python",ok:!1,detail:wN(r)}]}if(n.id==="assimp")try{return await NN(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:wN(r)}]}if(n.id==="freecadcmd"){let r=await DN(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 DN(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 DN(e,t,[["--version"],["--help"]],/fbx2gltf|usage|help|version/i);return[{kind:"fbx2gltf-cli",ok:r.ok,detail:r.detail}]}return[]}function Zme(n){let e=Wj.find(t=>t.id===n);if(!e)throw new Error(`Unknown converter command id: ${n}`);return e}function Qme(n){var s,a,o,l;let e=(a=(s=We==null?void 0:We.env)==null?void 0:s.ProgramFiles)==null?void 0:a.toLowerCase(),t=(l=(o=We==null?void 0:We.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=(We==null?void 0:We.platform)==="win32"&&((e?f.startsWith(e):!1)||(t?f.startsWith(t):!1)),d=(We==null?void 0:We.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 kj(n,e,t){for(let i of e)if(await FN(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 $me(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 bb(n,e,t,i){let r=Xme(e),s=Hj(r.executable);if(!s.ok)return{id:n.id,label:n.label,envVar:n.envVar,settingsKey:n.settingsKey,configuredCommand:i,command:e,executable:r.executable,args:r.args,resolvedPath:void 0,available:!1,source:t,detail:s.reason,checkedCandidates:[r.executable]};if(Yme(r.executable)){let[o,l]=await Promise.all([FN(r.executable),Hme(r.executable)]),c=o&&l;return{id:n.id,label:n.label,envVar:n.envVar,settingsKey:n.settingsKey,configuredCommand:i,command:e,executable:r.executable,args:r.args,resolvedPath:c?r.executable:void 0,available:c,source:t,detail:c?`Using ${Ib(t)} path.`:"Configured path was not found or is not executable.",checkedCandidates:[r.executable]}}let a=await jme(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,available:!!a,source:t,detail:a?`Resolved from ${Ib(t)} via PATH lookup.`:"Command name was not found on PATH.",checkedCandidates:[r.executable]}}function Ib(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 zj(n,e){var d,u,m;let t=Zme(n),{userCandidates:i,systemCandidates:r}=Qme(t),s=LN(e);if(s)return bb(t,s,"settings",s);let a=LN((d=We==null?void 0:We.env)==null?void 0:d[t.envVar]);if(a)return bb(t,a,"env");for(let p of(u=t.envVarAliases)!=null?u:[]){let _=LN((m=We==null?void 0:We.env)==null?void 0:m[p]);if(_)return bb(t,_,"env")}let o=await kj(t,i,"Detected at a common user-managed install location.");if(o)return o;let l=[];for(let p of t.fallbackCommands){let _=await bb(t,p,"path");if(l.push(_),_.available)return _}let c=await kj(t,r,"Detected at a system fallback install location.");if(c)return c;let f=l.flatMap(p=>p.checkedCandidates),h=$me(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 Mb(n){let e=await Promise.all(Wj.map(t=>zj(t.id,n[t.settingsKey])));return Promise.all(e.map(async t=>({...t,dependencyChecks:await qme(t)})))}async function as(n,e){var i;let t=await zj(n,e);return{command:(i=t.resolvedPath)!=null?i:t.executable,args:[...t.args]}}var We,Ume,Wj,Wme,$f=M(()=>{"use strict";cr();cr();cr();We=Mv(),Ume=[".exe",".cmd",".bat",".com"];Wj=[{id:"freecad",label:"Python (CadQuery/OCCT)",settingsKey:"freecadCommand",envVar:"AI3D_FREECAD_CMD",fallbackCommands:(We==null?void 0:We.platform)==="win32"?["py","python"]:["python3","python"],knownCandidates:(We==null?void 0:We.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:(We==null?void 0:We.platform)==="win32"?["obj2gltf.cmd"]:["obj2gltf"],knownCandidates:(We==null?void 0:We.platform)==="win32"?Gme("obj2gltf.cmd"):ON("obj2gltf")},{id:"fbx2gltf",label:"FBX2glTF",settingsKey:"fbx2gltfCommand",envVar:"AI3D_FBX2GLTF_CMD",fallbackCommands:(We==null?void 0:We.platform)==="win32"?["FBX2glTF.exe"]:["FBX2glTF","fbx2gltf"],knownCandidates:(We==null?void 0:We.platform)==="win32"?kme(Xi("FBX2glTF","FBX2glTF-windows-x64.exe"),Xi("FBX2glTF","FBX2glTF.exe")):ON("FBX2glTF","fbx2gltf")},{id:"assimp",label:"Python (trimesh)",settingsKey:"assimpCommand",envVar:"AI3D_ASSIMP_CMD",fallbackCommands:(We==null?void 0:We.platform)==="win32"?["py","python"]:["python3","python"],knownCandidates:(We==null?void 0:We.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:(We==null?void 0:We.platform)==="win32"?["FreeCADCmd.exe"]:["freecadcmd","FreeCADCmd"],knownCandidates:Vme()}];Wme=/[;|&<>$`\r\n\t{}()[\]\\]/});var Yj,Xj=M(()=>{Yj=`import cadquery as cq import trimesh import trimesh.visual import numpy as np @@ -23942,7 +23942,7 @@ with open(out, 'wb') as f: f.write(data) print(f'Converted {src} -> {out} ({len(data)} bytes, {matched_count}/{total_faces} colored faces)') -`});var kj,Gj=M(()=>{kj=`import cadquery as cq +`});var jj,Kj=M(()=>{jj=`import cadquery as cq import trimesh import trimesh.visual import numpy as np @@ -24070,7 +24070,7 @@ with open(out, 'wb') as f: f.write(data) print(f'Converted {src} -> {out} ({len(data)} bytes, {matched_count}/{total_faces} colored faces)') -`});var Hj,Wj=M(()=>{Hj=`import cadquery as cq +`});var Zj,qj=M(()=>{Zj=`import cadquery as cq import trimesh import trimesh.visual import numpy as np @@ -24593,28 +24593,28 @@ with open(out, 'wb') as f: f.write(data) print(f'Converted {src} -> {out} ({len(data)} bytes, {matched_count}/{total_faces} colored faces)') -`});function Mc(n){if(n.includes('"'))throw new Error(`File path contains double-quote character, not supported for Python conversion: ${n}`);return n.replace(/\\/g,"/")}var bb=M(()=>{"use strict"});function zj(n){return n.toLowerCase().replace(/^\./,"")}function Hme(n){let e=zj(n);return e==="step"||e==="stp"?Hj:e==="iges"||e==="igs"?kj:Vj}function yN(n,e,t){return n.split(e).join(t)}function Xj(n,e,t){let i=zj(t),r=yN(Hme(i),Gme,Mc(n)),s=yN(r,kme,Mc(e));return yN(s,Wme,i)}var Gme,kme,Wme,Yj=M(()=>{"use strict";Bj();Gj();Wj();bb();Gme="__AI3D_SOURCE_PATH__",kme="__AI3D_OUTPUT_PATH__",Wme="__AI3D_SOURCE_EXT__"});async function Yme(n){try{return await cs(n,fs),!0}catch(e){return!1}}function Kme(n,e,t){return new Promise((i,r)=>{ca(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(" | ")))})})}var zme,Xme,Ib,Kj=M(()=>{"use strict";cr();cr();cr();cr();Tn();$f();Yj();zme=Wi("freecad-converter"),Xme=300*1e3;Ib=class{constructor(e){this.configuredCommand=e;this.id="freecad";this.sourceExts=["step","stp","iges","igs","brep"];this.targetExt="glb"}async getCacheKey(){let e=await as(this.id,this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!Xn(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 as(this.id,this.configuredCommand),i=Co(e.sourcePath),r=yo(e.sourcePath,la(e.sourcePath)),s=Xi(i,`${r}.ai3d-converted.glb`),a=Xi(Fd(),"ai3d-freecad"),o=Xi(a,`${r}-${Date.now()}.py`);await Nd(a,{recursive:!0}),await Od(o,Xj(e.sourcePath,s,e.sourceExt),"utf8"),zme.info("run CAD conversion (CadQuery/OCCT)",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{await Kme(t.command,[...t.args,o],Xme)}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{wd(o,{force:!0})}if(!await Yme(s))throw new Error(`CAD conversion finished but output was not found: '${s}'. Check that CadQuery supports this CAD format.`);if((await oa(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 Zme(n){try{return await cs(n,fs),!0}catch(e){return!1}}function Qme(n,e,t){return new Promise((i,r)=>{ca(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 jme,qme,Mb,jj=M(()=>{"use strict";cr();cr();cr();Tn();$f();jme=Wi("obj2gltf-converter"),qme=180*1e3;Mb=class{constructor(e){this.configuredCommand=e;this.id="obj2gltf";this.sourceExts=["obj"];this.targetExt="glb"}async getCacheKey(){let e=await as(this.id,this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!Xn(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 as(this.id,this.configuredCommand),i=Co(e.sourcePath),r=yo(e.sourcePath,la(e.sourcePath)),s=Xi(i,`${r}.ai3d-converted.glb`);jme.info("run obj2gltf conversion",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{await Qme(t.command,[...t.args,"-i",e.sourcePath,"-o",s,"-b"],qme)}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 Zme(s))throw new Error(`obj2gltf conversion finished but output was not found: '${s}'.`);if((await oa(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 epe(n){try{return await cs(n,fs),!0}catch(e){return!1}}function tpe(n,e,t){return new Promise((i,r)=>{ca(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 $me,Jme,Cb,qj=M(()=>{"use strict";cr();cr();cr();Tn();$f();$me=Wi("fbx2gltf-converter"),Jme=180*1e3;Cb=class{constructor(e){this.configuredCommand=e;this.id="fbx2gltf";this.sourceExts=["fbx"];this.targetExt="glb"}async getCacheKey(){let e=await as(this.id,this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!Xn(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 as(this.id,this.configuredCommand),i=Co(e.sourcePath),r=yo(e.sourcePath,la(e.sourcePath)),s=Xi(i,`${r}.ai3d-converted.glb`);$me.info("run FBX2glTF conversion",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{await tpe(t.command,[...t.args,"-i",e.sourcePath,"-o",s,"-b"],Jme)}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 epe(s))throw new Error(`FBX2glTF conversion finished but output was not found: '${s}'.`);if((await oa(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 npe(n){try{return await cs(n,fs),!0}catch(e){return!1}}function spe(n,e,t){return new Promise((i,r)=>{ca(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 ape(n,e){let t=Mc(n),i=Mc(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 ipe,rpe,yb,Zj=M(()=>{"use strict";cr();cr();cr();cr();Tn();$f();bb();ipe=Wi("assimp-converter"),rpe=300*1e3;yb=class{constructor(e){this.configuredCommand=e;this.id="assimp";this.sourceExts=["3mf","dae"];this.targetExt="glb"}async getCacheKey(){let e=await as(this.id,this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!Xn(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 as(this.id,this.configuredCommand),i=Co(e.sourcePath),r=yo(e.sourcePath,la(e.sourcePath)),s=Xi(i,`${r}.ai3d-converted.glb`),a=Xi(Fd(),"ai3d-mesh-convert"),o=Xi(a,`${r}-${Date.now()}.py`);await Nd(a,{recursive:!0}),await Od(o,ape(e.sourcePath,s),"utf8"),ipe.info("run mesh conversion (trimesh)",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{await spe(t.command,[...t.args,o],rpe)}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{wd(o,{force:!0})}if(!await npe(s))throw new Error(`Mesh conversion finished but output was not found: '${s}'. Check that trimesh supports this format.`);if((await oa(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 lpe(n){try{return await cs(n,fs),!0}catch(e){return!1}}function cpe(n,e,t){return new Promise((i,r)=>{ca(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 fpe(n,e){let t=Mc(n),i=Mc(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 PN,ope,Pb,Qj=M(()=>{"use strict";cr();cr();cr();cr();Tn();$f();bb();PN=Wi("sldprt-converter"),ope=600*1e3;Pb=class{constructor(e){this.configuredCommand=e;this.id="sldprt";this.sourceExts=["sldprt"];this.targetExt="glb"}async getCacheKey(){let e=await as("freecadcmd",this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!Xn(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 as("freecadcmd",this.configuredCommand),i=Co(e.sourcePath),r=yo(e.sourcePath,la(e.sourcePath)),s=Xi(i,`${r}.ai3d-converted.glb`),a=Xi(Fd(),"ai3d-sldprt"),o=Xi(a,`${r}-${Date.now()}.py`);await Nd(a,{recursive:!0}),await Od(o,fpe(e.sourcePath,s),"utf8"),PN.info("run SLDPRT conversion (FreeCAD + OCP)",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{let{stdout:c,stderr:f}=await cpe(t.command,[...t.args,o],ope);c&&PN.info("FreeCAD stdout",{stdout:c.trim().slice(0,500)}),f&&PN.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{wd(o,{force:!0})}if(!await lpe(s))throw new Error(`SLDPRT conversion finished but output was not found: '${s}'. Check that FreeCAD can import this SolidWorks file version.`);if((await oa(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 vd(n){var r;let e=new Tb,t=new Set((r=n==null?void 0:n.enabledConverterIds)!=null?r:[]);LN.debug("create conversion manager",{enabledConverterIds:[...t]});let i=[new Ib(n==null?void 0:n.freecadCommand),new Mb(n==null?void 0:n.obj2gltfCommand),new Cb(n==null?void 0:n.fbx2gltfCommand),new yb(n==null?void 0:n.assimpCommand),new Pb(n==null?void 0:n.freecadcmdCommand)];for(let s of i)t.has(s.id)?(e.registerConverter(s),LN.info("enabled converter",{converterId:s.id})):LN.debug("converter disabled",{converterId:s.id});return e}var LN,Lb=M(()=>{"use strict";Oj();Kj();jj();qj();Zj();Qj();Tn();LN=Wi("conversion-factory")});function $j(n){let e=Va(n.sourceExt),t=[];return e!==n.sourceExt&&t.push(`Normalized extension '${n.sourceExt}' -> '${e}'.`),hpe.debug("prepare direct load",{path:n.path,sourceExt:n.sourceExt,normalizedExt:e,warningCount:t.length}),{effectivePath:n.path,effectiveExt:e,warnings:t}}var hpe,Jj=M(()=>{"use strict";Mo();Tn();hpe=Wi("direct-load-service")});function Db(n){return`.${n.trim().toLowerCase()}`}function mp(n){return n instanceof Ed}function DN(n){var e;if(n instanceof Ed){let t=(e=dpe[n.converterId])!=null?e:n.converterId;return Ki("modelLoad.warningMessage",{ext:Db(n.sourceExt),converterName:t})}return n instanceof up?Ki("modelLoad.mobileWarningMessage",{ext:Db(n.sourceExt)}):Ki("modelLoad.errorMessage",{reason:n instanceof Error?n.message:String(n)})}function pp(n){return n instanceof Ed?{level:"warning",title:Q("modelLoad.warningTitle"),message:DN(n),hint:Q("modelLoad.warningHint")}:n instanceof up?{level:"warning",title:Q("modelLoad.warningTitle"),message:DN(n),hint:Q("modelLoad.mobileWarningHint")}:{level:"error",title:Q("modelLoad.errorTitle"),message:DN(n),hint:Q("modelLoad.errorHint")}}var dpe,Ed,up,_p=M(()=>{"use strict";os();dpe={freecad:"FreeCAD",obj2gltf:"obj2gltf",fbx2gltf:"FBX2glTF",assimp:"mesh",sldprt:"SolidWorks"};Ed=class extends Error{constructor(t,i){super(`Converter '${t}' is not registered for ${Db(i)}. Enable the matching converter in plugin settings before loading this format.`);this.converterId=t;this.sourceExt=i;this.name="MissingConverterError"}},up=class extends Error{constructor(t){super(`Format ${Db(t)} requires local conversion tools that are unavailable on iOS, iPadOS, and Android.`);this.sourceExt=t;this.name="MobileConversionUnavailableError"}}});function upe(n,e){let t=n.lastIndexOf("."),i=t>0?n.slice(0,t):n,r=Math.max(i.lastIndexOf("/"),i.lastIndexOf("\\")),s=i.slice(0,r+1),a=i.slice(r+1);return`${s}${a}.ai3d-converted.${e}`}function mpe(n,e,t){return n.converterId!==e?!1:t?n.converterId===t.converterId&&n.converterCacheKey===t.cacheKey:!0}async function ppe(n){if(!n)return!1;try{return await cs(n,fs),!0}catch(e){return!1}}async function tq(n,e){if(!e)return!1;try{let[t,i]=await Promise.all([Lp(n),Lp(e)]);return i.size>0&&i.mtimeMs>=t.mtimeMs}catch(t){return!1}}async function iq(n){var o,l,c,f,h,d,u,m,p,_;if(n.capability.strategy!=="convert")throw new Error(`Expected convert strategy, got '${n.capability.strategy}'.`);let e=n.capability.converterId,t=(o=n.capability.outputFormat)!=null?o:"glb";if(!e)throw new Error(`Format .${n.sourceExt} does not define a converter id.`);Sd.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=(l=n.convertedAssetCache)==null?void 0:l.get(n.sourcePath,n.sourceExt,t);if(r)if(!await ppe(r.outputPath))Sd.warn("conversion cache stale",{sourcePath:n.sourcePath,sourceExt:n.sourceExt,targetExt:t,outputPath:r.outputPath}),(c=n.convertedAssetCache)==null||c.delete(n.sourcePath,n.sourceExt,t);else if(!mpe(r,e,i))Sd.warn("conversion cache identity mismatch",{sourcePath:n.sourcePath,sourceExt:n.sourceExt,targetExt:t,cachedConverterId:r.converterId,cachedConverterCacheKey:r.converterCacheKey,currentConverterId:(f=i==null?void 0:i.converterId)!=null?f:e,currentConverterCacheKey:i==null?void 0:i.cacheKey}),(h=n.convertedAssetCache)==null||h.delete(n.sourcePath,n.sourceExt,t);else if(!await tq(n.sourcePath,r.outputPath))Sd.warn("conversion cache output older than source",{sourcePath:n.sourcePath,sourceExt:n.sourceExt,targetExt:t,outputPath:r.outputPath}),(d=n.convertedAssetCache)==null||d.delete(n.sourcePath,n.sourceExt,t);else return Sd.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."]};let s=upe(n.sourcePath,t);if(await tq(n.sourcePath,s))return Sd.info("conversion output already exists",{sourcePath:n.sourcePath,outputPath:s}),(m=n.convertedAssetCache)==null||m.set({cacheVersion:2,converterId:e,converterCacheKey:(u=i==null?void 0:i.cacheKey)!=null?u:e,sourcePath:n.sourcePath,sourceExt:n.sourceExt,targetExt:t,outputPath:s,outputExt:t,warnings:["Using existing conversion output."],createdAt:Date.now()}),{effectivePath:s,effectiveExt:t,warnings:["Using existing conversion output."]};if(!n.conversionManager.canConvert(n.sourceExt))throw new Ed(e,n.sourceExt);let a=await n.conversionManager.convert({sourcePath:n.sourcePath,sourceExt:n.sourceExt,targetExt:t});return(_=n.convertedAssetCache)==null||_.set({cacheVersion:2,converterId:e,converterCacheKey:(p=i==null?void 0:i.cacheKey)!=null?p:e,sourcePath:n.sourcePath,sourceExt:n.sourceExt,targetExt:t,outputPath:a.outputPath,outputExt:a.outputExt,warnings:a.warnings,createdAt:Date.now()}),Sd.info("conversion route done",{sourcePath:n.sourcePath,outputPath:a.outputPath,warningCount:a.warnings.length}),{effectivePath:a.outputPath,effectiveExt:a.outputExt,warnings:a.warnings}}var Sd,rq=M(()=>{"use strict";$b();Tn();cr();_p();Sd=Wi("conversion-service")});function _pe(n,e){var t;return!!((t=n.preferConversionExts)!=null&&t.includes(e))}async function Td(n){var a,o;let e=Va((a=n.path.split(".").pop())!=null?a:""),t=Jb(e);if(Cc.info("prepare model input",{path:n.path,sourceExt:e}),!t||!t.enabled)throw Cc.warn("unsupported format",{sourceExt:e,path:n.path}),Mp(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=_pe(n,e);if(t.strategy==="convert"||i&&!!t.converterId){if(pr())throw Cc.warn("conversion unavailable on mobile",{sourceExt:e,path:n.path}),new up(e);if(!n.absolutePath)throw Cc.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 Cc.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 Cc.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"&&Cc.info("preferred conversion route",{sourceExt:e,path:n.path,converterId:l.converterId});let c=await iq({sourcePath:n.absolutePath,sourceExt:e,capability:l,conversionManager:n.conversionManager,convertedAssetCache:n.convertedAssetCache});return Cc.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=$j({path:n.path,sourceExt:e});return Cc.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 Cc,Ob=M(()=>{"use strict";Mo();Jj();rq();_p();Tn();Zs();Cc=Wi("model-pipeline")});function fv(n){return{path:n.effectivePath,ext:n.effectiveExt,strategy:n.strategy,sourcePath:n.sourcePath,sourceExt:n.sourceExt,warnings:n.warnings}}var ON=M(()=>{"use strict"});function Ad(n){let e=[];return n.preferObj2gltfForObj&&e.push("obj"),n.preferFbx2gltfForFbx&&e.push("fbx"),e}var Nb=M(()=>{"use strict"});function hv(n){return n.replace(/\[\[([^\]|]+)\|([^\]]+)\]\]/g,"$2").replace(/\[\[([^\]]+)\]\]/g,"$1").replace(/\[([^\]]+)\]\([^)]*\)/g,"$1").replace(/[*_~`]+/g,"").replace(/==([^=]+)==/g,"$1").replace(/\s+/g," ").trim()}function gpe(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 sq(n){return e=>gpe(n,e)}async function vpe(n,e,t){try{let i=n.vault.getAbstractFileByPath(e);if(!(i instanceof nq.TFile))return null;let s=(await n.vault.cachedRead(i)).split(` -`),a=-1,o=0,l=hv(t);for(let f=0;fvpe(n,e,t)}var nq,dv=M(()=>{"use strict";nq=require("obsidian")});function xd(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?Q(s):a};o();let c=e.createDiv({cls:"ai3d-loading-bar-track"}).createDiv({cls:"ai3d-loading-bar-fill is-indeterminate"}),f=!1,h=xw(()=>{!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 wb=M(()=>{"use strict";os()});function vp(n,e){let t=n.createDiv({cls:"ai3d-inline-empty ai3d-load-feedback-shell"});pr()&&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 Ep(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 Fb=M(()=>{"use strict";Zs()});function lq(){return typeof performance!="undefined"?performance.now():Date.now()}function Rd(n,e,t=`${e}s`){return`${n.toLocaleString()} ${n===1?e:t}`}function Ape(n){return{stage:"reason",durationMs:Math.max(0,Math.round(lq()-n)),status:"success"}}function xpe(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 cq(n){var t;let e=(t=n.split(".").pop())==null?void 0:t.trim().toLowerCase();return Tpe.has(e)?e:"glb"}function wN(n){return[n.x,n.y,n.z]}function aq(n){return n.trim().replace(/[\\/:*?"<>|#[\]^]+/g,"-").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").slice(0,96)}function Rpe(n,e,t,i){var c,f;let r=aq(qr(n)||"model")||"model",s=(f=(c=e.occurrenceId)!=null?c:e.componentId)!=null?f:e.partNumber,a=s?`${r}:component:${aq(s)||t+1}`:`${r}:part:${t+1}`,o=a,l=2;for(;i.has(o);)o=`${a}:${l}`,l++;return i.add(o),o}function uv(n){return(n!=null?n:"").toLowerCase().replace(/[_\-./\\]+/g," ").replace(/[^\p{L}\p{N}\s]+/gu," ").replace(/\s+/g," ").trim()}function Ub(n){return new Set(uv(n).split(" ").filter(e=>e.length>=2))}function oq(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 bpe(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 Ipe(n,e){let t=uv(n),i=uv(e);return!!t&&!!i&&t===i}function NN(n,e){let t=uv(n),i=uv(e);return!!t&&!!i&&t===i}function Mpe(n,e){let t=Ub(n.name),i=Ub(n.meshRefs.join(" "));return e.filter(s=>s.assetId!==n.assetId||s.partId!==n.partId).flatMap(s=>{let a=[],o=oq(t,Ub(s.name)),l=oq(i,Ub(s.meshRefs.join(" "))),c=bpe(n.bbox,s.bbox),f=!!n.category&&!!s.category&&n.category===s.category,h=Ipe(n.materialName,s.materialName),d=NN(n.componentId,s.componentId),u=NN(n.partNumber,s.partNumber),m=NN(n.occurrenceId,s.occurrenceId),p=o*.38+l*.22+c*.22;return d&&(p+=.5),u&&(p+=.4),m&&(p+=.25),f&&(p+=.1),h&&(p+=.08),d&&a.push(`same component id: ${n.componentId}`),u&&a.push(`same part number: ${n.partNumber}`),m&&a.push("same occurrence id"),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}`),p=Math.min(1,p),pa.matchScore-s.matchScore).slice(0,Epe)}function Cpe(n,e){return e.length===0?n.map(t=>({...t})):n.map(t=>{let i=Mpe(t,e);return i.length>0?{...t,registeredMatches:i}:{...t}})}function ype(n){var t;let e=n.name.toLowerCase();return n.source==="component"?"component":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 Ppe(n){var t,i,r,s,a,o;let e=[];return n.source==="group"&&e.push(`Registered from model group with ${Rd((r=(i=n.childCount)!=null?i:(t=n.meshNames)==null?void 0:t.length)!=null?r:0,"child mesh","child meshes")}.`),n.source==="component"&&e.push(`Registered from model component metadata with ${Rd((o=(a=n.childCount)!=null?a:(s=n.meshNames)==null?void 0:s.length)!=null?o:1,"child mesh","child meshes")}.`),n.componentId&&e.push(`Component ID: ${n.componentId}.`),n.occurrenceId&&e.push(`Occurrence ID: ${n.occurrenceId}.`),n.partNumber&&e.push(`Part number: ${n.partNumber}.`),n.componentPath&&e.push(`Component path: ${n.componentPath}.`),e.push(`${Rd(n.triangleCount,"triangle")} and ${Rd(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 FN(n,e){let t=new Set;return e.map((i,r)=>{var s;return{partId:Rpe(n,i,r,t),assetId:n,name:i.name||`Part ${r+1}`,source:i.source,componentId:i.componentId,occurrenceId:i.occurrenceId,partNumber:i.partNumber,componentPath:i.componentPath,category:ype(i),meshRefs:(s=i.meshNames)!=null&&s.length?[...i.meshNames]:[i.name||`mesh-${r+1}`],childCount:i.childCount,materialRefs:i.materialName?[i.materialName]:[],bbox:wN(i.boundingSize),center:wN(i.center),triangleCount:i.triangleCount,vertexCount:i.vertexCount,materialName:i.materialName,confidence:i.source==="component"?.82:i.source==="group"?.72:i.name?.55:.35,observations:Ppe(i),inferredFunctions:[],knowledgeTags:[],reviewed:!1}})}function Lpe(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:`${Rd(a.meshCount,"mesh")}, ${Rd(a.triangleCount,"triangle")}, ${Rd(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 Dpe(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=xpe(s,c.center);f{var l;return{partId:o.partId,name:o.name,notePath:o.notePath,source:o.source,componentId:o.componentId,occurrenceId:o.occurrenceId,partNumber:o.partNumber,componentPath:o.componentPath,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 Npe(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 Bb(n){var f,h,d,u,m,p,_,g,v,x;let e=(f=n.startedAt)!=null?f:lq(),t=(d=(h=n.evidence)==null?void 0:h.summary)!=null?d:n.preview,i=Cpe(FN(n.modelPath,(m=(u=n.evidence)==null?void 0:u.parts)!=null?m:[]),(p=n.registeredParts)!=null?p:[]),r=new Date().toISOString(),s=Npe(n.preview,n.evidence),a=Dpe(n.profile,i),o=Lpe(n.modelPath,n.profile,n.evidence,i,a),l=(_=n.previewImages)!=null?_:[],c=Ope({modelPath:n.modelPath,profile:n.profile,preview:t,parts:i,knowledgeNodes:o,annotationLinks:a,previewImages:l,warnings:s});return{asset:{assetId:n.modelPath,title:qr(n.modelPath)||n.modelPath,sourcePath:n.modelPath,format:cq(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?wN(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"},Ape(e)]}}var Sp,Epe,Spe,Tpe,UN=M(()=>{"use strict";Bs();Sp="local-evidence-v1",Epe=3,Spe=.58,Tpe=new Set(["glb","gltf","stl","obj","splat","ply","fbx","step","stp","iges","igs","brep","sldprt","3mf","dae"])});function Tp(n,e,t){let i=Q("previewCanvas.modelShortcuts");Eq(n,{label:Ki(_q[e],{model:hs(t)||Q("workbench.modelTitle"),shortcuts:i}),shortcutKeys:Bpe,shortcutHint:i})}function gq(n){let e=Q("previewCanvas.gridShortcuts");Eq(n,{label:Ki(_q.grid,{shortcuts:e}),shortcutKeys:Vpe,shortcutHint:e})}function Ap(n,e){n.addEventListener("keydown",t=>{var s,a,o,l,c;let i=e();if(!i)return;let r=t.key.toLowerCase();r==="r"?((s=i.resetView)==null||s.call(i),t.preventDefault()):r==="w"?((a=i.toggleWireframe)==null||a.call(i),t.preventDefault()):r==="g"?((o=i.toggleOrientationGizmo)==null||o.call(i),t.preventDefault()):r==="b"?((l=i.toggleBoundingBox)==null||l.call(i),t.preventDefault()):r===" "?((c=i.toggleAnimation)==null||c.call(i),t.preventDefault()):r==="m"&&(ss(i)&&i.toggleMeasurement(),t.preventDefault())})}function vq(n,e){n.addEventListener("keydown",t=>{var s,a;let i=e();if(!i)return;let r=t.key.toLowerCase();r==="r"?((s=i.resetView)==null||s.call(i),t.preventDefault()):r==="w"&&((a=i.toggleWireframe)==null||a.call(i),t.preventDefault())})}function Eq(n,e){Gpe(n),n.setAttribute("role","application"),n.setAttribute("aria-label",e.label),n.setAttribute("aria-keyshortcuts",e.shortcutKeys.join(" ")),n.setAttribute("title",e.shortcutHint),n.dataset.testid="ai3d-preview-canvas"}function Gpe(n){if(pq(n),mq.has(n)||typeof MutationObserver=="undefined")return;mq.add(n),new MutationObserver(()=>pq(n)).observe(n,{attributes:!0,attributeFilter:["tabindex"]})}function pq(n){n.tabIndex!==0&&(n.tabIndex=0),n.getAttribute("tabindex")!=="0"&&n.setAttribute("tabindex","0")}var Bpe,Vpe,mq,_q,Vb=M(()=>{"use strict";os();ov();Bs();Bpe=["R","W","G","B","M","Space"],Vpe=["R","W"],mq=new WeakSet,_q={inline:"previewCanvas.inlineLabel",grid:"previewCanvas.gridLabel","live-preview":"previewCanvas.liveLabel","direct-view":"previewCanvas.directLabel"}});function bd(n){let e=n.trim();return e.length>Sq?Li(e.slice(0,Sq))+"\u2026":Li(e)}function Tq(n){if(!n||typeof n!="object")return null;let e=n,t=typeof e.summary=="string"?e.summary.trim():"",i=bd(t);if(!i)return null;let r=Array.isArray(e.sections)?e.sections.flatMap(o=>{if(!o||typeof o!="object")return[];let l=o,c=typeof l.heading=="string"?l.heading.trim():"",f=typeof l.body=="string"?l.body.trim():"",h=bd(c),d=bd(f);return h&&d?[{heading:h,body:d}]:[]}):void 0,s=Array.isArray(e.suggestedTags)?e.suggestedTags.filter(o=>typeof o=="string"&&o.trim().length>0).map(o=>bd(o)):void 0,a=Array.isArray(e.warnings)?e.warnings.filter(o=>typeof o=="string"&&o.trim().length>0).map(o=>bd(o)):void 0;return{title:typeof e.title=="string"?bd(e.title):void 0,summary:i,sections:r,suggestedTags:s,warnings:a,model:typeof e.model=="string"?bd(e.model):void 0}}var Sq,Aq=M(()=>{"use strict";QS();Sq=8e3});function Wpe(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 Hpe(n){return{...n,evidence:{...n.evidence,previewImages:[]}}}function zpe(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 Xpe(n,e){let t=e;return n.sendPreviewImagesToRemote||(t=Hpe(t)),n.sendGeometrySummaryToRemote||(t=zpe(t)),{...t,evidence:{...t.evidence,rawModelIncluded:!1}}}function Rq(n,e,t){if(n.analysisMode==="local")return{enabled:!1,reason:"analysisMode=local"};let i=Wpe(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:Xpe(n,e)}}:{enabled:!1,reason:"drafting input is unavailable"}}function Ype(n){return Number.isFinite(n)&&Number(n)>0?Math.floor(Number(n)):kpe}async function Kpe(n,e,t){let i=null,r=new Promise((s,a)=>{i=activeWindow.setTimeout(()=>{a(new BN(e,t))},e)});try{return await Promise.race([n,r])}finally{i!==null&&activeWindow.clearTimeout(i)}}async function bq(n,e={}){if(!n.enabled||!n.endpoint||!n.request)return null;let t=Ype(e.timeoutMs),i=await Kpe((0,xq.requestUrl)({url:n.endpoint,method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(n.request)}),t,n.endpoint);if(i.status<200||i.status>=300)throw new Error(`Remote draft request failed: HTTP ${i.status}`);return Tq(i.json)}var xq,kpe,BN,Iq=M(()=>{"use strict";xq=require("obsidian");Aq();kpe=15e3,BN=class extends Error{constructor(e,t){super(`Remote draft request timed out after ${e}ms: ${t}`),this.name="RemoteDraftTimeoutError"}}});var Gb={};tt(Gb,{buildKnowledgeIndexContent:()=>Hq,buildKnowledgeIndexManagedSection:()=>jN,buildKnowledgeNoteContent:()=>Bq,collectRegisteredPartsFromProfiles:()=>kq,generateKnowledgeNote:()=>x_e,replaceManagedSection:()=>Wq});function VN(n){var e,t,i;return{modelPath:n.modelPath,reportNotePath:n.reportNotePath,analysisSidecarPath:n.analysisSidecarPath,knowledgeIndexPath:n.knowledgeIndexPath,partNoteCount:(e=n.partNoteCount)!=null?e:0,previewImageCount:(t=n.previewImageCount)!=null?t:0,generatedAt:new Date().toISOString(),status:n.status,warningCount:(i=n.warningCount)!=null?i:0}}function Dq(n){var t;let e=(t=n.split(".").pop())==null?void 0:t.trim().toLowerCase();return e&&e.length>0?e:"unknown"}function HN(n){return n.filter(e=>e.length>0).join(", ")}function GN(n){return Array.from(new Set(n.map(e=>e.trim()).filter(Boolean)))}function YN(n){return n.replace(/\\/g,"/").replace(/^\/+|\/+$/g,"").trim()}function zN(n,e){return n.replace(/[\\/:*?"<>|#[\]^]/g," ").replace(/\s+/g," ").trim().slice(0,80)||e}function XN(n){var e;return(e=n==null?void 0:n.map(t=>t.toFixed(2)).join(", "))!=null?e:"-"}function qpe(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 Oq(n){var e;return n.source==="component"?n.childCount&&n.childCount>1?`component (${n.childCount})`:"component":n.source==="group"?`group (${(e=n.childCount)!=null?e:n.meshRefs.length})`:"mesh"}function Zpe(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 Nq(n){var t;let e=[];if(n.headingRef&&e.push(`heading: ${Li(n.headingRef)}`),n.notePath){let i=(t=hs(n.notePath))!=null?t:n.notePath;e.push(`note: [[${n.notePath}|${i}]]`)}return e}function Qpe(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 wq(n){let[e,t,i]=Qpe(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 Fq(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 $pe(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: ${HN(e)}.`}function Mq(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 Jpe(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.",Mq(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.`,Fq(n),wq(n),Mq(e)],i=$pe(e);return i&&t.push(i),t}function e_e(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=Nq(r),a=s.length>0?` (${s.join("; ")})`:"";t.push(`- **${Li(r.label||"Untitled pin")}**${a}`)}return t.push(""),t}function t_e(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(`| ${sa(s.label)} | ${sa((r=s.nearestPartName)!=null?r:"-")} | ${sa(a)} | ${s.distance===void 0?"-":s.distance.toFixed(3)} | ${Math.round(s.confidence*100)}% |`)}return t.push(""),t}function i_e(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,Pq)){let l=Li((s=hs((r=o.notePath)!=null?r:""))!=null?s:o.name),c=[(a=o.category)!=null?a:"unclassified",Ro(o.triangleCount,"triangle"),o.materialName?`material ${Li(o.materialName)}`:""].filter(Boolean).join(", ");t.push(`- [[${o.notePath}|${l}]] - ${Li(o.name)} (${c})`)}return t.push(""),t}function Ro(n,e){return`${(n!=null?n:0).toLocaleString()} ${e}${n===1?"":"s"}`}function r_e(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 ${Li(e.materialName)}`:"";return`${t+1}. ${Li(e.name)} (${(r=e.category)!=null?r:"unclassified"}, ${Ro(e.triangleCount,"triangle")}${i})`}).join(` -`)}function n_e(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?`- ${Li(t.name)}: possible reuse of ${Li(i.sourcePartName)} from ${Li(i.sourceAssetId)} (${Math.round(i.confidence*100)}% confidence).`:""}).filter(Boolean).join(` -`)}function Uq(n){var _,g,v,x,A,E,S,R,I;let e=Dq(n.sourcePath).toUpperCase(),t=n.preview,i=[...(g=(_=n.analysis)==null?void 0:_.parts)!=null?g:[]].sort((C,y)=>{var D,O;return((D=y.triangleCount)!=null?D:0)-((O=C.triangleCount)!=null?O:0)}),r=(x=(v=n.profile)==null?void 0:v.annotations)!=null?x:[],s=(E=(A=n.analysis)==null?void 0:A.annotationLinks)!=null?E:[],a=GN(i.map(C=>{var y;return(y=C.category)!=null?y:"unclassified"})).slice(0,6),o=GN(i.flatMap(C=>C.materialName?[Li(C.materialName)]:[])).slice(0,6),l=r_e(i),c=n_e(i),f=t?wq(t):"Geometry statistics are not available yet, so this draft should stay provisional.",h=t?Fq(t):"Reload the preview to capture mesh, triangle, vertex, and material evidence.",d=(S=n.profile)==null?void 0:S.notes.trim(),u=t?`${n.baseName} is a ${e} asset with ${Ro(t.meshCount,"mesh")}, ${Ro(t.triangleCount,"triangle")}, ${Ro(t.vertexCount,"vertex")}, and ${Ro(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(C=>{let y=s.find(V=>V.annotationId===C.id),D=y!=null&&y.nearestPartName?` Nearest captured part: ${Li(y.nearestPartName)}.`:"",O=C.headingRef?` Linked heading: ${Li(C.headingRef)}.`:"";return`- ${Li(C.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.",p=[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: ${HN(a)}.`:"No part categories were inferred yet.",o.length>0?`Visible materials include ${HN(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:GN([...(I=(R=n.profile)==null?void 0:R.tags)!=null?I:[],`format/${e.toLowerCase()}`,...a.map(C=>`part/${C}`)]).slice(0,12),nextActions:p,generatedAt:new Date().toISOString()}}function s_e(n){var i,r;let e=(r=(i=n.analysis)==null?void 0:i.localDraft)!=null?r:Uq(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=>`- ${Li(s)}`),""),e.nextActions.length>0&&t.push("Next actions:","",...e.nextActions.map(s=>`- ${Li(s)}`),""),t}function An(n){return JSON.stringify(n)}function a_e(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 o_e(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 l_e(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 c_e(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 f_e(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 | Source | Category | Triangles | Material | Center | Evidence |","|---|------|-----------|--------|----------|-----------|----------|--------|----------|"];for(let[o,l]of e.slice(0,32).entries()){let c=XN(l.center),f=l.observations.slice(0,2).join(" "),h=l.notePath?`[[${l.notePath}]]`:"-",d=Oq(l);t.push(`| ${o+1} | ${sa(l.name)} | ${sa(h)} | ${sa(d)} | ${sa((r=l.category)!=null?r:"unclassified")} | ${((s=l.triangleCount)!=null?s:0).toLocaleString()} | ${sa((a=l.materialName)!=null?a:"-")} | ${c} | ${sa(f)} |`)}return e.length>32&&t.push(`| ... | ${e.length-32} more candidate parts omitted from this note | - | - | - | - | - | - | See sidecar JSON |`),t.push(""),t}function h_e(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(`| ${sa(s.name)} | ${sa(o)} | ${sa(a.sourceAssetId)} | ${Math.round(a.confidence*100)}% | ${sa(a.reasons.join(", "))} |`)}return e.length>32&&t.push(`| ... | ${e.length-32} more matched parts omitted | - | - | See sidecar JSON |`),t.push(""),t}function d_e(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(`- **${Li(r.title)}** (${r.domain}, ${Math.round(r.confidence*100)}%, ${r.source}): ${Li(r.summary)}`);return t.push(""),t}function u_e(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 m_e(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=Nq(s),o=a.length>0?` (${a.join("; ")})`:"";i.push(`- **${Li(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 Bq(n){var c,f,h,d;let e=n.profile,t=n.preview,i=n.analysis,r=Dq(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: ${An(n.sourcePath)}`,`format: ${r}`,"status: ready","analysis_mode: local",`analysis_version: ${Sp}`,`report_note_path: ${An(n.notePath)}`,...n.analysisSidecarPath?[`analysis_sidecar_path: ${An(n.analysisSidecarPath)}`]:[],...n.knowledgeIndexPath?[`knowledge_index_path: ${An(n.knowledgeIndexPath)}`]:[],`annotation_count: ${a.length}`,`updated_at: ${new Date().toISOString()}`,...o.length>0?["preview_images:",...o.map(u=>` - ${An(u)}`)]:[],...s.length>0?["knowledge_tags:",...s.map(u=>` - ${An(u)}`)]:[],"---"].join(` -`),"",`# ${Li(n.baseName)}`,"","## Summary","",...t?[...L3(t,{decimals:2}),""]:["(No preview data available)",""],...l_e(i),...s_e(n),...n.knowledgeIndexPath?["## Knowledge Index","",`- [[${n.knowledgeIndexPath}|Open model knowledge index]]`,""]:[],"## Local Observations","",...Jpe(t,e).map(u=>`- ${u}`),"",...u_e(i,n.analysisSidecarPath),...c_e(i),...e_e(e),...t_e(i),...i_e(i),...f_e(i),...h_e(i),...d_e(i),...a_e(i),...o_e(i),...m_e(t,e),"## Review Notes","",(d=e==null?void 0:e.notes)!=null&&d.trim()?Li(e.notes.trim()):"-",""].join(` -`)}function sa(n){return Li(n).replace(/\|/g,"\\|").replace(/\r?\n/g," ")}function p_e(n){let[,e=""]=n.split(",",2),t=atob(e),i=new Uint8Array(t.length);for(let r=0;r{jpe.warn("Failed to create vault folder",{path:i,error:String(s)})})}async function Vq(n,e,t){let i=n.vault.getAbstractFileByPath(e);if(i instanceof pl.TFile)return i;try{return await n.vault.create(e,t)}catch(r){let s=n.vault.getAbstractFileByPath(e);return s instanceof pl.TFile?s:null}}async function Cq(n,e,t){let i=n.vault.getAbstractFileByPath(e);if(i instanceof pl.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 pl.TFile)return await n.vault.modify(s,t),s}return null}async function __e(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 KN(n,t);let a=`${t}/${i}_evidence_${Date.now()}.png`;return await n.vault.createBinary(a,p_e(r)),{paths:[a]}}catch(a){let o=a instanceof Error?a.message:String(a);return{paths:[],warning:`Evidence snapshot failed: ${o}`}}}function Gq(n){return!!n&&typeof n=="object"}function mv(n){return Array.isArray(n)?n.filter(e=>typeof e=="string"):[]}function yq(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 g_e(n,e){if(!Gq(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==="component"?n.source:void 0,componentId:typeof n.componentId=="string"?n.componentId:void 0,occurrenceId:typeof n.occurrenceId=="string"?n.occurrenceId:void 0,partNumber:typeof n.partNumber=="string"?n.partNumber:void 0,componentPath:typeof n.componentPath=="string"?n.componentPath:void 0,category:typeof n.category=="string"?n.category:void 0,meshRefs:mv(n.meshRefs),childCount:Number.isFinite(n.childCount)?Number(n.childCount):void 0,materialRefs:mv(n.materialRefs),bbox:yq(n.bbox),center:yq(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:mv(n.observations),inferredFunctions:mv(n.inferredFunctions),knowledgeTags:mv(n.knowledgeTags),notePath:typeof n.notePath=="string"?n.notePath:void 0,registeredMatches:Array.isArray(n.registeredMatches)?n.registeredMatches.filter(s=>!!(s&&typeof s=="object"&&typeof s.sourceAssetId=="string"&&typeof s.sourcePartId=="string"&&typeof s.sourcePartName=="string")):void 0,reviewed:n.reviewed===!0}}async function kq(n,e,t){var a;let i=[],r=new Set,s=(o,l)=>{let c=g_e(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 pl.TFile)try{let f=await n.vault.read(c),h=JSON.parse(f);if(Gq(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 v_e(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,Pq).map(i=>i.partId))}function E_e(n,e,t,i){let r=YN(n)||"Parts/3D Components",s=zN(e,"model"),a=zN(t.name,`Part ${i+1}`);return`${r}/${s}/${String(i+1).padStart(2,"0")} ${a}.md`}function S_e(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: ${An(n.sourcePath)}`,`parent_report: ${An(n.notePath)}`,`part_id: ${An(n.part.partId)}`,`asset_id: ${An(n.part.assetId)}`,...n.part.componentId?[`component_id: ${An(n.part.componentId)}`]:[],...n.part.occurrenceId?[`occurrence_id: ${An(n.part.occurrenceId)}`]:[],...n.part.partNumber?[`part_number: ${An(n.part.partNumber)}`]:[],`category: ${An((r=n.part.category)!=null?r:"unclassified")}`,"status: draft","generated_by: ai-model-workbench",`updated_at: ${new Date().toISOString()}`,"---"].join(` -`),"",`# ${Li(n.part.name)}`,"","## Evidence","",`- Source model: [[${n.sourcePath}|${n.baseName}]]`,`- Parent report: [[${n.notePath}|${n.baseName} Report]]`,`- Source: ${Oq(n.part)}`,`- Category: ${(s=n.part.category)!=null?s:"unclassified"}`,...n.part.componentId?[`- Component ID: ${n.part.componentId}`]:[],...n.part.occurrenceId?[`- Occurrence ID: ${n.part.occurrenceId}`]:[],...n.part.partNumber?[`- Part number: ${n.part.partNumber}`]:[],...n.part.componentPath?[`- Component path: ${n.part.componentPath}`]:[],...n.part.source==="group"||n.part.source==="component"?[`- Child meshes: ${qpe(n.part.meshRefs)}`]:[],`- Triangles: ${((a=n.part.triangleCount)!=null?a:0).toLocaleString()}`,`- Vertices: ${((o=n.part.vertexCount)!=null?o:0).toLocaleString()}`,`- Material: ${n.part.materialName?Li(n.part.materialName):"-"}`,`- Bounding size: ${XN(n.part.bbox)}`,`- Center: ${XN(n.part.center)}`,...(l=n.part.registeredMatches)!=null&&l.length?[`- Possible registered match: ${Zpe(n.part.registeredMatches[0])}`]:[],"","## 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 T_e(n){var a;let e=v_e(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=`${YN(n.partFolder)||"Parts/3D Components"}/${zN(n.baseName,"model")}`;await KN(n.app,s);for(let[o,l]of n.analysis.parts.entries()){if(!e.has(l.partId))continue;let c=E_e(n.partFolder,n.baseName,l,o),f={...l,notePath:c},h=S_e({baseName:n.baseName,notePath:n.notePath,sourcePath:n.sourcePath,part:f,analysis:n.analysis}),d=await Vq(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 jN(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[Lq,"","## 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?`- ${Ro(n.preview.meshCount,"mesh")}, ${Ro(n.preview.triangleCount,"triangle")}, ${Ro(n.preview.vertexCount,"vertex")}, ${Ro(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 ${Li(h.sourcePartName)} (${Math.round(h.confidence*100)}%)`:"";return`- [[${f.notePath}|${Li(f.name)}]] - ${(m=f.category)!=null?m:"unclassified"}, ${Ro(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."],"",WN,""].join(` -`)}function Wq(n,e){let t=n.indexOf(Lq),i=n.indexOf(WN);if(t>=0&&i>t){let r=n.slice(0,t).replace(/\s+$/,""),s=n.slice(i+WN.length).replace(/^\s+/,"");return[r,e.trim(),s].filter(Boolean).join(` +`});function Mc(n){if(n.includes('"'))throw new Error(`File path contains double-quote character, not supported for Python conversion: ${n}`);return n.replace(/\\/g,"/")}var Cb=M(()=>{"use strict"});function Qj(n){return n.toLowerCase().replace(/^\./,"")}function spe(n){let e=Qj(n);return e==="step"||e==="stp"?Zj:e==="iges"||e==="igs"?jj:Yj}function BN(n,e,t){return n.split(e).join(t)}function $j(n,e,t){let i=Qj(t),r=BN(spe(i),ipe,Mc(n)),s=BN(r,rpe,Mc(e));return BN(s,npe,i)}var ipe,rpe,npe,Jj=M(()=>{"use strict";Xj();Kj();qj();Cb();ipe="__AI3D_SOURCE_PATH__",rpe="__AI3D_OUTPUT_PATH__",npe="__AI3D_SOURCE_EXT__"});async function lpe(n){try{return await cs(n,fs),!0}catch(e){return!1}}function cpe(n,e,t){return new Promise((i,r)=>{fa(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(" | ")))})})}var ape,ope,yb,eq=M(()=>{"use strict";cr();cr();cr();cr();An();$f();Jj();ape=Wi("freecad-converter"),ope=300*1e3;yb=class{constructor(e){this.configuredCommand=e;this.id="freecad";this.sourceExts=["step","stp","iges","igs","brep"];this.targetExt="glb"}async getCacheKey(){let e=await as(this.id,this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!Yn(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 as(this.id,this.configuredCommand),i=yo(e.sourcePath),r=Po(e.sourcePath,ca(e.sourcePath)),s=Xi(i,`${r}.ai3d-converted.glb`),a=Xi(Fd(),"ai3d-freecad"),o=Xi(a,`${r}-${Date.now()}.py`);await Nd(a,{recursive:!0}),await Od(o,$j(e.sourcePath,s,e.sourceExt),"utf8"),ape.info("run CAD conversion (CadQuery/OCCT)",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{await cpe(t.command,[...t.args,o],ope)}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{wd(o,{force:!0})}if(!await lpe(s))throw new Error(`CAD conversion finished but output was not found: '${s}'. Check that CadQuery supports this CAD format.`);if((await la(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 dpe(n){try{return await cs(n,fs),!0}catch(e){return!1}}function upe(n,e,t){return new Promise((i,r)=>{fa(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 fpe,hpe,Pb,tq=M(()=>{"use strict";cr();cr();cr();An();$f();fpe=Wi("obj2gltf-converter"),hpe=180*1e3;Pb=class{constructor(e){this.configuredCommand=e;this.id="obj2gltf";this.sourceExts=["obj"];this.targetExt="glb"}async getCacheKey(){let e=await as(this.id,this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!Yn(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 as(this.id,this.configuredCommand),i=yo(e.sourcePath),r=Po(e.sourcePath,ca(e.sourcePath)),s=Xi(i,`${r}.ai3d-converted.glb`);fpe.info("run obj2gltf conversion",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{await upe(t.command,[...t.args,"-i",e.sourcePath,"-o",s,"-b"],hpe)}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 dpe(s))throw new Error(`obj2gltf conversion finished but output was not found: '${s}'.`);if((await la(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 _pe(n){try{return await cs(n,fs),!0}catch(e){return!1}}function gpe(n,e,t){return new Promise((i,r)=>{fa(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 mpe,ppe,Lb,iq=M(()=>{"use strict";cr();cr();cr();An();$f();mpe=Wi("fbx2gltf-converter"),ppe=180*1e3;Lb=class{constructor(e){this.configuredCommand=e;this.id="fbx2gltf";this.sourceExts=["fbx"];this.targetExt="glb"}async getCacheKey(){let e=await as(this.id,this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!Yn(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 as(this.id,this.configuredCommand),i=yo(e.sourcePath),r=Po(e.sourcePath,ca(e.sourcePath)),s=Xi(i,`${r}.ai3d-converted.glb`);mpe.info("run FBX2glTF conversion",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{await gpe(t.command,[...t.args,"-i",e.sourcePath,"-o",s,"-b"],ppe)}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 _pe(s))throw new Error(`FBX2glTF conversion finished but output was not found: '${s}'.`);if((await la(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 Spe(n){try{return await cs(n,fs),!0}catch(e){return!1}}function Tpe(n,e,t){return new Promise((i,r)=>{fa(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 Ape(n,e){let t=Mc(n),i=Mc(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 vpe,Epe,Db,rq=M(()=>{"use strict";cr();cr();cr();cr();An();$f();Cb();vpe=Wi("assimp-converter"),Epe=300*1e3;Db=class{constructor(e){this.configuredCommand=e;this.id="assimp";this.sourceExts=["3mf","dae"];this.targetExt="glb"}async getCacheKey(){let e=await as(this.id,this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!Yn(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 as(this.id,this.configuredCommand),i=yo(e.sourcePath),r=Po(e.sourcePath,ca(e.sourcePath)),s=Xi(i,`${r}.ai3d-converted.glb`),a=Xi(Fd(),"ai3d-mesh-convert"),o=Xi(a,`${r}-${Date.now()}.py`);await Nd(a,{recursive:!0}),await Od(o,Ape(e.sourcePath,s),"utf8"),vpe.info("run mesh conversion (trimesh)",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{await Tpe(t.command,[...t.args,o],Epe)}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{wd(o,{force:!0})}if(!await Spe(s))throw new Error(`Mesh conversion finished but output was not found: '${s}'. Check that trimesh supports this format.`);if((await la(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 Rpe(n){try{return await cs(n,fs),!0}catch(e){return!1}}function bpe(n,e,t){return new Promise((i,r)=>{fa(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 Ipe(n,e){let t=Mc(n),i=Mc(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 UN,xpe,Ob,nq=M(()=>{"use strict";cr();cr();cr();cr();An();$f();Cb();UN=Wi("sldprt-converter"),xpe=600*1e3;Ob=class{constructor(e){this.configuredCommand=e;this.id="sldprt";this.sourceExts=["sldprt"];this.targetExt="glb"}async getCacheKey(){let e=await as("freecadcmd",this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!Yn(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 as("freecadcmd",this.configuredCommand),i=yo(e.sourcePath),r=Po(e.sourcePath,ca(e.sourcePath)),s=Xi(i,`${r}.ai3d-converted.glb`),a=Xi(Fd(),"ai3d-sldprt"),o=Xi(a,`${r}-${Date.now()}.py`);await Nd(a,{recursive:!0}),await Od(o,Ipe(e.sourcePath,s),"utf8"),UN.info("run SLDPRT conversion (FreeCAD + OCP)",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{let{stdout:c,stderr:f}=await bpe(t.command,[...t.args,o],xpe);c&&UN.info("FreeCAD stdout",{stdout:c.trim().slice(0,500)}),f&&UN.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{wd(o,{force:!0})}if(!await Rpe(s))throw new Error(`SLDPRT conversion finished but output was not found: '${s}'. Check that FreeCAD can import this SolidWorks file version.`);if((await la(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 vd(n){var r;let e=new Rb,t=new Set((r=n==null?void 0:n.enabledConverterIds)!=null?r:[]);VN.debug("create conversion manager",{enabledConverterIds:[...t]});let i=[new yb(n==null?void 0:n.freecadCommand),new Pb(n==null?void 0:n.obj2gltfCommand),new Lb(n==null?void 0:n.fbx2gltfCommand),new Db(n==null?void 0:n.assimpCommand),new Ob(n==null?void 0:n.freecadcmdCommand)];for(let s of i)t.has(s.id)?(e.registerConverter(s),VN.info("enabled converter",{converterId:s.id})):VN.debug("converter disabled",{converterId:s.id});return e}var VN,Nb=M(()=>{"use strict";Gj();eq();tq();iq();rq();nq();An();VN=Wi("conversion-factory")});function sq(n){let e=Va(n.sourceExt),t=[];return e!==n.sourceExt&&t.push(`Normalized extension '${n.sourceExt}' -> '${e}'.`),Mpe.debug("prepare direct load",{path:n.path,sourceExt:n.sourceExt,normalizedExt:e,warningCount:t.length}),{effectivePath:n.path,effectiveExt:e,warnings:t}}var Mpe,aq=M(()=>{"use strict";Co();An();Mpe=Wi("direct-load-service")});function wb(n){return`.${n.trim().toLowerCase()}`}function pp(n){return n instanceof Ed}function GN(n){var e;if(n instanceof Ed){let t=(e=Cpe[n.converterId])!=null?e:n.converterId;return Ki("modelLoad.warningMessage",{ext:wb(n.sourceExt),converterName:t})}return n instanceof mp?Ki("modelLoad.mobileWarningMessage",{ext:wb(n.sourceExt)}):Ki("modelLoad.errorMessage",{reason:n instanceof Error?n.message:String(n)})}function _p(n){return n instanceof Ed?{level:"warning",title:Q("modelLoad.warningTitle"),message:GN(n),hint:Q("modelLoad.warningHint")}:n instanceof mp?{level:"warning",title:Q("modelLoad.warningTitle"),message:GN(n),hint:Q("modelLoad.mobileWarningHint")}:{level:"error",title:Q("modelLoad.errorTitle"),message:GN(n),hint:Q("modelLoad.errorHint")}}var Cpe,Ed,mp,gp=M(()=>{"use strict";os();Cpe={freecad:"FreeCAD",obj2gltf:"obj2gltf",fbx2gltf:"FBX2glTF",assimp:"mesh",sldprt:"SolidWorks"};Ed=class extends Error{constructor(t,i){super(`Converter '${t}' is not registered for ${wb(i)}. Enable the matching converter in plugin settings before loading this format.`);this.converterId=t;this.sourceExt=i;this.name="MissingConverterError"}},mp=class extends Error{constructor(t){super(`Format ${wb(t)} requires local conversion tools that are unavailable on iOS, iPadOS, and Android.`);this.sourceExt=t;this.name="MobileConversionUnavailableError"}}});function ype(n,e){let t=n.lastIndexOf("."),i=t>0?n.slice(0,t):n,r=Math.max(i.lastIndexOf("/"),i.lastIndexOf("\\")),s=i.slice(0,r+1),a=i.slice(r+1);return`${s}${a}.ai3d-converted.${e}`}function Ppe(n,e,t){return n.converterId!==e?!1:t?n.converterId===t.converterId&&n.converterCacheKey===t.cacheKey:!0}async function Lpe(n){if(!n)return!1;try{return await cs(n,fs),!0}catch(e){return!1}}async function lq(n,e){if(!e)return!1;try{let[t,i]=await Promise.all([Dp(n),Dp(e)]);return i.size>0&&i.mtimeMs>=t.mtimeMs}catch(t){return!1}}async function cq(n){var o,l,c,f,h,d,u,m,p,_;if(n.capability.strategy!=="convert")throw new Error(`Expected convert strategy, got '${n.capability.strategy}'.`);let e=n.capability.converterId,t=(o=n.capability.outputFormat)!=null?o:"glb";if(!e)throw new Error(`Format .${n.sourceExt} does not define a converter id.`);Sd.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=(l=n.convertedAssetCache)==null?void 0:l.get(n.sourcePath,n.sourceExt,t);if(r)if(!await Lpe(r.outputPath))Sd.warn("conversion cache stale",{sourcePath:n.sourcePath,sourceExt:n.sourceExt,targetExt:t,outputPath:r.outputPath}),(c=n.convertedAssetCache)==null||c.delete(n.sourcePath,n.sourceExt,t);else if(!Ppe(r,e,i))Sd.warn("conversion cache identity mismatch",{sourcePath:n.sourcePath,sourceExt:n.sourceExt,targetExt:t,cachedConverterId:r.converterId,cachedConverterCacheKey:r.converterCacheKey,currentConverterId:(f=i==null?void 0:i.converterId)!=null?f:e,currentConverterCacheKey:i==null?void 0:i.cacheKey}),(h=n.convertedAssetCache)==null||h.delete(n.sourcePath,n.sourceExt,t);else if(!await lq(n.sourcePath,r.outputPath))Sd.warn("conversion cache output older than source",{sourcePath:n.sourcePath,sourceExt:n.sourceExt,targetExt:t,outputPath:r.outputPath}),(d=n.convertedAssetCache)==null||d.delete(n.sourcePath,n.sourceExt,t);else return Sd.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."]};let s=ype(n.sourcePath,t);if(await lq(n.sourcePath,s))return Sd.info("conversion output already exists",{sourcePath:n.sourcePath,outputPath:s}),(m=n.convertedAssetCache)==null||m.set({cacheVersion:2,converterId:e,converterCacheKey:(u=i==null?void 0:i.cacheKey)!=null?u:e,sourcePath:n.sourcePath,sourceExt:n.sourceExt,targetExt:t,outputPath:s,outputExt:t,warnings:["Using existing conversion output."],createdAt:Date.now()}),{effectivePath:s,effectiveExt:t,warnings:["Using existing conversion output."]};if(!n.conversionManager.canConvert(n.sourceExt))throw new Ed(e,n.sourceExt);let a=await n.conversionManager.convert({sourcePath:n.sourcePath,sourceExt:n.sourceExt,targetExt:t});return(_=n.convertedAssetCache)==null||_.set({cacheVersion:2,converterId:e,converterCacheKey:(p=i==null?void 0:i.cacheKey)!=null?p:e,sourcePath:n.sourcePath,sourceExt:n.sourceExt,targetExt:t,outputPath:a.outputPath,outputExt:a.outputExt,warnings:a.warnings,createdAt:Date.now()}),Sd.info("conversion route done",{sourcePath:n.sourcePath,outputPath:a.outputPath,warningCount:a.warnings.length}),{effectivePath:a.outputPath,effectiveExt:a.outputExt,warnings:a.warnings}}var Sd,fq=M(()=>{"use strict";t0();An();cr();gp();Sd=Wi("conversion-service")});function Dpe(n,e){var t;return!!((t=n.preferConversionExts)!=null&&t.includes(e))}async function Td(n){var a,o;let e=Va((a=n.path.split(".").pop())!=null?a:""),t=i0(e);if(Cc.info("prepare model input",{path:n.path,sourceExt:e}),!t||!t.enabled)throw Cc.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=Dpe(n,e);if(t.strategy==="convert"||i&&!!t.converterId){if(pr())throw Cc.warn("conversion unavailable on mobile",{sourceExt:e,path:n.path}),new mp(e);if(!n.absolutePath)throw Cc.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 Cc.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 Cc.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"&&Cc.info("preferred conversion route",{sourceExt:e,path:n.path,converterId:l.converterId});let c=await cq({sourcePath:n.absolutePath,sourceExt:e,capability:l,conversionManager:n.conversionManager,convertedAssetCache:n.convertedAssetCache});return Cc.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=sq({path:n.path,sourceExt:e});return Cc.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 Cc,Fb=M(()=>{"use strict";Co();aq();fq();gp();An();Qs();Cc=Wi("model-pipeline")});function uv(n){return{path:n.effectivePath,ext:n.effectiveExt,strategy:n.strategy,sourcePath:n.sourcePath,sourceExt:n.sourceExt,warnings:n.warnings}}var kN=M(()=>{"use strict"});function Ad(n){let e=[];return n.preferObj2gltfForObj&&e.push("obj"),n.preferFbx2gltfForFbx&&e.push("fbx"),e}var Bb=M(()=>{"use strict"});function mv(n){return n.replace(/\[\[([^\]|]+)\|([^\]]+)\]\]/g,"$2").replace(/\[\[([^\]]+)\]\]/g,"$1").replace(/\[([^\]]+)\]\([^)]*\)/g,"$1").replace(/[*_~`]+/g,"").replace(/==([^=]+)==/g,"$1").replace(/\s+/g," ").trim()}function Ope(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 dq(n){return e=>Ope(n,e)}async function Npe(n,e,t){try{let i=n.vault.getAbstractFileByPath(e);if(!(i instanceof hq.TFile))return null;let s=(await n.vault.cachedRead(i)).split(` +`),a=-1,o=0,l=mv(t);for(let f=0;fNpe(n,e,t)}var hq,pv=M(()=>{"use strict";hq=require("obsidian")});function xd(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?Q(s):a};o();let c=e.createDiv({cls:"ai3d-loading-bar-track"}).createDiv({cls:"ai3d-loading-bar-fill is-indeterminate"}),f=!1,h=Lw(()=>{!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 Ub=M(()=>{"use strict";os()});function Ep(n,e){let t=n.createDiv({cls:"ai3d-inline-empty ai3d-load-feedback-shell"});pr()&&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 Sp(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 Vb=M(()=>{"use strict";Qs()});function pq(){return typeof performance!="undefined"?performance.now():Date.now()}function Rd(n,e,t=`${e}s`){return`${n.toLocaleString()} ${n===1?e:t}`}function Upe(n){return{stage:"reason",durationMs:Math.max(0,Math.round(pq()-n)),status:"success"}}function Vpe(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 _q(n){var t;let e=(t=n.split(".").pop())==null?void 0:t.trim().toLowerCase();return Bpe.has(e)?e:"glb"}function HN(n){return[n.x,n.y,n.z]}function uq(n){return n.trim().replace(/[\\/:*?"<>|#[\]^]+/g,"-").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").slice(0,96)}function Gpe(n,e,t,i){var c,f;let r=uq(qr(n)||"model")||"model",s=(f=(c=e.occurrenceId)!=null?c:e.componentId)!=null?f:e.partNumber,a=s?`${r}:component:${uq(s)||t+1}`:`${r}:part:${t+1}`,o=a,l=2;for(;i.has(o);)o=`${a}:${l}`,l++;return i.add(o),o}function _v(n){return(n!=null?n:"").toLowerCase().replace(/[_\-./\\]+/g," ").replace(/[^\p{L}\p{N}\s]+/gu," ").replace(/\s+/g," ").trim()}function Gb(n){return new Set(_v(n).split(" ").filter(e=>e.length>=2))}function mq(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 kpe(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 Wpe(n,e){let t=_v(n),i=_v(e);return!!t&&!!i&&t===i}function WN(n,e){let t=_v(n),i=_v(e);return!!t&&!!i&&t===i}function Hpe(n,e){let t=Gb(n.name),i=Gb(n.meshRefs.join(" "));return e.filter(s=>s.assetId!==n.assetId||s.partId!==n.partId).flatMap(s=>{let a=[],o=mq(t,Gb(s.name)),l=mq(i,Gb(s.meshRefs.join(" "))),c=kpe(n.bbox,s.bbox),f=!!n.category&&!!s.category&&n.category===s.category,h=Wpe(n.materialName,s.materialName),d=WN(n.componentId,s.componentId),u=WN(n.partNumber,s.partNumber),m=WN(n.occurrenceId,s.occurrenceId),p=o*.38+l*.22+c*.22;return d&&(p+=.5),u&&(p+=.4),m&&(p+=.25),f&&(p+=.1),h&&(p+=.08),d&&a.push(`same component id: ${n.componentId}`),u&&a.push(`same part number: ${n.partNumber}`),m&&a.push("same occurrence id"),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}`),p=Math.min(1,p),pa.matchScore-s.matchScore).slice(0,wpe)}function zpe(n,e){return e.length===0?n.map(t=>({...t})):n.map(t=>{let i=Hpe(t,e);return i.length>0?{...t,registeredMatches:i}:{...t}})}function Xpe(n){var t;let e=n.name.toLowerCase();return n.source==="component"?"component":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 Ype(n){var t,i,r,s,a,o;let e=[];return n.source==="group"&&e.push(`Registered from model group with ${Rd((r=(i=n.childCount)!=null?i:(t=n.meshNames)==null?void 0:t.length)!=null?r:0,"child mesh","child meshes")}.`),n.source==="component"&&e.push(`Registered from model component metadata with ${Rd((o=(a=n.childCount)!=null?a:(s=n.meshNames)==null?void 0:s.length)!=null?o:1,"child mesh","child meshes")}.`),n.componentId&&e.push(`Component ID: ${n.componentId}.`),n.occurrenceId&&e.push(`Occurrence ID: ${n.occurrenceId}.`),n.partNumber&&e.push(`Part number: ${n.partNumber}.`),n.componentPath&&e.push(`Component path: ${n.componentPath}.`),e.push(`${Rd(n.triangleCount,"triangle")} and ${Rd(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 zN(n,e){let t=new Set;return e.map((i,r)=>{var s;return{partId:Gpe(n,i,r,t),assetId:n,name:i.name||`Part ${r+1}`,source:i.source,componentId:i.componentId,occurrenceId:i.occurrenceId,partNumber:i.partNumber,componentPath:i.componentPath,category:Xpe(i),meshRefs:(s=i.meshNames)!=null&&s.length?[...i.meshNames]:[i.name||`mesh-${r+1}`],childCount:i.childCount,materialRefs:i.materialName?[i.materialName]:[],bbox:HN(i.boundingSize),center:HN(i.center),triangleCount:i.triangleCount,vertexCount:i.vertexCount,materialName:i.materialName,confidence:i.source==="component"?.82:i.source==="group"?.72:i.name?.55:.35,observations:Ype(i),inferredFunctions:[],knowledgeTags:[],reviewed:!1}})}function Kpe(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:`${Rd(a.meshCount,"mesh")}, ${Rd(a.triangleCount,"triangle")}, ${Rd(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 jpe(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=Vpe(s,c.center);f{var l;return{partId:o.partId,name:o.name,notePath:o.notePath,source:o.source,componentId:o.componentId,occurrenceId:o.occurrenceId,partNumber:o.partNumber,componentPath:o.componentPath,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 Zpe(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 kb(n){var f,h,d,u,m,p,_,g,v,x;let e=(f=n.startedAt)!=null?f:pq(),t=(d=(h=n.evidence)==null?void 0:h.summary)!=null?d:n.preview,i=zpe(zN(n.modelPath,(m=(u=n.evidence)==null?void 0:u.parts)!=null?m:[]),(p=n.registeredParts)!=null?p:[]),r=new Date().toISOString(),s=Zpe(n.preview,n.evidence),a=jpe(n.profile,i),o=Kpe(n.modelPath,n.profile,n.evidence,i,a),l=(_=n.previewImages)!=null?_:[],c=qpe({modelPath:n.modelPath,profile:n.profile,preview:t,parts:i,knowledgeNodes:o,annotationLinks:a,previewImages:l,warnings:s});return{asset:{assetId:n.modelPath,title:qr(n.modelPath)||n.modelPath,sourcePath:n.modelPath,format:_q(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?HN(t.boundingSize):void 0,analysisVersion:Tp},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"},Upe(e)]}}var Tp,wpe,Fpe,Bpe,XN=M(()=>{"use strict";ks();Tp="local-evidence-v1",wpe=3,Fpe=.58,Bpe=new Set(["glb","gltf","stl","obj","splat","ply","fbx","step","stp","iges","igs","brep","sldprt","3mf","dae"])});function Ap(n,e,t){let i=Q("previewCanvas.modelShortcuts");Iq(n,{label:Ki(xq[e],{model:hs(t)||Q("workbench.modelTitle"),shortcuts:i}),shortcutKeys:e_e,shortcutHint:i})}function Rq(n){let e=Q("previewCanvas.gridShortcuts");Iq(n,{label:Ki(xq.grid,{shortcuts:e}),shortcutKeys:t_e,shortcutHint:e})}function xp(n,e){n.addEventListener("keydown",t=>{var s,a,o,l,c;let i=e();if(!i)return;let r=t.key.toLowerCase();r==="r"?((s=i.resetView)==null||s.call(i),t.preventDefault()):r==="w"?((a=i.toggleWireframe)==null||a.call(i),t.preventDefault()):r==="g"?((o=i.toggleOrientationGizmo)==null||o.call(i),t.preventDefault()):r==="b"?((l=i.toggleBoundingBox)==null||l.call(i),t.preventDefault()):r===" "?((c=i.toggleAnimation)==null||c.call(i),t.preventDefault()):r==="m"&&(xn(i)&&i.toggleMeasurement(),t.preventDefault())})}function bq(n,e){n.addEventListener("keydown",t=>{var s,a;let i=e();if(!i)return;let r=t.key.toLowerCase();r==="r"?((s=i.resetView)==null||s.call(i),t.preventDefault()):r==="w"&&((a=i.toggleWireframe)==null||a.call(i),t.preventDefault())})}function Iq(n,e){i_e(n),n.setAttribute("role","application"),n.setAttribute("aria-label",e.label),n.setAttribute("aria-keyshortcuts",e.shortcutKeys.join(" ")),n.setAttribute("title",e.shortcutHint),n.dataset.testid="ai3d-preview-canvas"}function i_e(n){if(Aq(n),Tq.has(n)||typeof MutationObserver=="undefined")return;Tq.add(n),new MutationObserver(()=>Aq(n)).observe(n,{attributes:!0,attributeFilter:["tabindex"]})}function Aq(n){n.tabIndex!==0&&(n.tabIndex=0),n.getAttribute("tabindex")!=="0"&&n.setAttribute("tabindex","0")}var e_e,t_e,Tq,xq,Wb=M(()=>{"use strict";os();up();ks();e_e=["R","W","G","B","M","Space"],t_e=["R","W"],Tq=new WeakSet,xq={inline:"previewCanvas.inlineLabel",grid:"previewCanvas.gridLabel","live-preview":"previewCanvas.liveLabel","direct-view":"previewCanvas.directLabel"}});function bd(n){let e=n.trim();return e.length>Mq?Di(e.slice(0,Mq))+"\u2026":Di(e)}function Cq(n){if(!n||typeof n!="object")return null;let e=n,t=typeof e.summary=="string"?e.summary.trim():"",i=bd(t);if(!i)return null;let r=Array.isArray(e.sections)?e.sections.flatMap(o=>{if(!o||typeof o!="object")return[];let l=o,c=typeof l.heading=="string"?l.heading.trim():"",f=typeof l.body=="string"?l.body.trim():"",h=bd(c),d=bd(f);return h&&d?[{heading:h,body:d}]:[]}):void 0,s=Array.isArray(e.suggestedTags)?e.suggestedTags.filter(o=>typeof o=="string"&&o.trim().length>0).map(o=>bd(o)):void 0,a=Array.isArray(e.warnings)?e.warnings.filter(o=>typeof o=="string"&&o.trim().length>0).map(o=>bd(o)):void 0;return{title:typeof e.title=="string"?bd(e.title):void 0,summary:i,sections:r,suggestedTags:s,warnings:a,model:typeof e.model=="string"?bd(e.model):void 0}}var Mq,yq=M(()=>{"use strict";tT();Mq=8e3});function n_e(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 s_e(n){return{...n,evidence:{...n.evidence,previewImages:[]}}}function a_e(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 o_e(n,e){let t=e;return n.sendPreviewImagesToRemote||(t=s_e(t)),n.sendGeometrySummaryToRemote||(t=a_e(t)),{...t,evidence:{...t.evidence,rawModelIncluded:!1}}}function Lq(n,e,t){if(n.analysisMode==="local")return{enabled:!1,reason:"analysisMode=local"};let i=n_e(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:o_e(n,e)}}:{enabled:!1,reason:"drafting input is unavailable"}}function l_e(n){return Number.isFinite(n)&&Number(n)>0?Math.floor(Number(n)):r_e}async function c_e(n,e,t){let i=null,r=new Promise((s,a)=>{i=activeWindow.setTimeout(()=>{a(new YN(e,t))},e)});try{return await Promise.race([n,r])}finally{i!==null&&activeWindow.clearTimeout(i)}}async function Dq(n,e={}){if(!n.enabled||!n.endpoint||!n.request)return null;let t=l_e(e.timeoutMs),i=await c_e((0,Pq.requestUrl)({url:n.endpoint,method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(n.request)}),t,n.endpoint);if(i.status<200||i.status>=300)throw new Error(`Remote draft request failed: HTTP ${i.status}`);return Cq(i.json)}var Pq,r_e,YN,Oq=M(()=>{"use strict";Pq=require("obsidian");yq();r_e=15e3,YN=class extends Error{constructor(e,t){super(`Remote draft request timed out after ${e}ms: ${t}`),this.name="RemoteDraftTimeoutError"}}});var Hb={};tt(Hb,{buildKnowledgeIndexContent:()=>Zq,buildKnowledgeIndexManagedSection:()=>iw,buildKnowledgeNoteContent:()=>Xq,collectRegisteredPartsFromProfiles:()=>jq,generateKnowledgeNote:()=>V_e,replaceManagedSection:()=>qq});function KN(n){var e,t,i;return{modelPath:n.modelPath,reportNotePath:n.reportNotePath,analysisSidecarPath:n.analysisSidecarPath,knowledgeIndexPath:n.knowledgeIndexPath,partNoteCount:(e=n.partNoteCount)!=null?e:0,previewImageCount:(t=n.previewImageCount)!=null?t:0,generatedAt:new Date().toISOString(),status:n.status,warningCount:(i=n.warningCount)!=null?i:0}}function Vq(n){var t;let e=(t=n.split(".").pop())==null?void 0:t.trim().toLowerCase();return e&&e.length>0?e:"unknown"}function QN(n){return n.filter(e=>e.length>0).join(", ")}function jN(n){return Array.from(new Set(n.map(e=>e.trim()).filter(Boolean)))}function ew(n){return n.replace(/\\/g,"/").replace(/^\/+|\/+$/g,"").trim()}function $N(n,e){return n.replace(/[\\/:*?"<>|#[\]^]/g," ").replace(/\s+/g," ").trim().slice(0,80)||e}function JN(n){var e;return(e=n==null?void 0:n.map(t=>t.toFixed(2)).join(", "))!=null?e:"-"}function h_e(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 Gq(n){var e;return n.source==="component"?n.childCount&&n.childCount>1?`component (${n.childCount})`:"component":n.source==="group"?`group (${(e=n.childCount)!=null?e:n.meshRefs.length})`:"mesh"}function d_e(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 kq(n){var t;let e=[];if(n.headingRef&&e.push(`heading: ${Di(n.headingRef)}`),n.notePath){let i=(t=hs(n.notePath))!=null?t:n.notePath;e.push(`note: [[${n.notePath}|${i}]]`)}return e}function u_e(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 Wq(n){let[e,t,i]=u_e(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 Hq(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 m_e(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: ${QN(e)}.`}function Nq(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 p_e(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.",Nq(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.`,Hq(n),Wq(n),Nq(e)],i=m_e(e);return i&&t.push(i),t}function __e(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=kq(r),a=s.length>0?` (${s.join("; ")})`:"";t.push(`- **${Di(r.label||"Untitled pin")}**${a}`)}return t.push(""),t}function g_e(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(`| ${aa(s.label)} | ${aa((r=s.nearestPartName)!=null?r:"-")} | ${aa(a)} | ${s.distance===void 0?"-":s.distance.toFixed(3)} | ${Math.round(s.confidence*100)}% |`)}return t.push(""),t}function v_e(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,Bq)){let l=Di((s=hs((r=o.notePath)!=null?r:""))!=null?s:o.name),c=[(a=o.category)!=null?a:"unclassified",bo(o.triangleCount,"triangle"),o.materialName?`material ${Di(o.materialName)}`:""].filter(Boolean).join(", ");t.push(`- [[${o.notePath}|${l}]] - ${Di(o.name)} (${c})`)}return t.push(""),t}function bo(n,e){return`${(n!=null?n:0).toLocaleString()} ${e}${n===1?"":"s"}`}function E_e(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 ${Di(e.materialName)}`:"";return`${t+1}. ${Di(e.name)} (${(r=e.category)!=null?r:"unclassified"}, ${bo(e.triangleCount,"triangle")}${i})`}).join(` +`)}function S_e(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?`- ${Di(t.name)}: possible reuse of ${Di(i.sourcePartName)} from ${Di(i.sourceAssetId)} (${Math.round(i.confidence*100)}% confidence).`:""}).filter(Boolean).join(` +`)}function zq(n){var _,g,v,x,T,E,S,R,I;let e=Vq(n.sourcePath).toUpperCase(),t=n.preview,i=[...(g=(_=n.analysis)==null?void 0:_.parts)!=null?g:[]].sort((C,y)=>{var D,O;return((D=y.triangleCount)!=null?D:0)-((O=C.triangleCount)!=null?O:0)}),r=(x=(v=n.profile)==null?void 0:v.annotations)!=null?x:[],s=(E=(T=n.analysis)==null?void 0:T.annotationLinks)!=null?E:[],a=jN(i.map(C=>{var y;return(y=C.category)!=null?y:"unclassified"})).slice(0,6),o=jN(i.flatMap(C=>C.materialName?[Di(C.materialName)]:[])).slice(0,6),l=E_e(i),c=S_e(i),f=t?Wq(t):"Geometry statistics are not available yet, so this draft should stay provisional.",h=t?Hq(t):"Reload the preview to capture mesh, triangle, vertex, and material evidence.",d=(S=n.profile)==null?void 0:S.notes.trim(),u=t?`${n.baseName} is a ${e} asset with ${bo(t.meshCount,"mesh")}, ${bo(t.triangleCount,"triangle")}, ${bo(t.vertexCount,"vertex")}, and ${bo(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(C=>{let y=s.find(V=>V.annotationId===C.id),D=y!=null&&y.nearestPartName?` Nearest captured part: ${Di(y.nearestPartName)}.`:"",O=C.headingRef?` Linked heading: ${Di(C.headingRef)}.`:"";return`- ${Di(C.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.",p=[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: ${QN(a)}.`:"No part categories were inferred yet.",o.length>0?`Visible materials include ${QN(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:jN([...(I=(R=n.profile)==null?void 0:R.tags)!=null?I:[],`format/${e.toLowerCase()}`,...a.map(C=>`part/${C}`)]).slice(0,12),nextActions:p,generatedAt:new Date().toISOString()}}function T_e(n){var i,r;let e=(r=(i=n.analysis)==null?void 0:i.localDraft)!=null?r:zq(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=>`- ${Di(s)}`),""),e.nextActions.length>0&&t.push("Next actions:","",...e.nextActions.map(s=>`- ${Di(s)}`),""),t}function Rn(n){return JSON.stringify(n)}function A_e(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 x_e(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 R_e(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 b_e(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 I_e(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 | Source | Category | Triangles | Material | Center | Evidence |","|---|------|-----------|--------|----------|-----------|----------|--------|----------|"];for(let[o,l]of e.slice(0,32).entries()){let c=JN(l.center),f=l.observations.slice(0,2).join(" "),h=l.notePath?`[[${l.notePath}]]`:"-",d=Gq(l);t.push(`| ${o+1} | ${aa(l.name)} | ${aa(h)} | ${aa(d)} | ${aa((r=l.category)!=null?r:"unclassified")} | ${((s=l.triangleCount)!=null?s:0).toLocaleString()} | ${aa((a=l.materialName)!=null?a:"-")} | ${c} | ${aa(f)} |`)}return e.length>32&&t.push(`| ... | ${e.length-32} more candidate parts omitted from this note | - | - | - | - | - | - | See sidecar JSON |`),t.push(""),t}function M_e(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(`| ${aa(s.name)} | ${aa(o)} | ${aa(a.sourceAssetId)} | ${Math.round(a.confidence*100)}% | ${aa(a.reasons.join(", "))} |`)}return e.length>32&&t.push(`| ... | ${e.length-32} more matched parts omitted | - | - | See sidecar JSON |`),t.push(""),t}function C_e(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(`- **${Di(r.title)}** (${r.domain}, ${Math.round(r.confidence*100)}%, ${r.source}): ${Di(r.summary)}`);return t.push(""),t}function y_e(n,e){var i,r;let t=["## Evidence Health","",`- Analysis version: ${Tp}`,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 P_e(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=kq(s),o=a.length>0?` (${a.join("; ")})`:"";i.push(`- **${Di(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 Xq(n){var c,f,h,d;let e=n.profile,t=n.preview,i=n.analysis,r=Vq(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: ${Rn(n.sourcePath)}`,`format: ${r}`,"status: ready","analysis_mode: local",`analysis_version: ${Tp}`,`report_note_path: ${Rn(n.notePath)}`,...n.analysisSidecarPath?[`analysis_sidecar_path: ${Rn(n.analysisSidecarPath)}`]:[],...n.knowledgeIndexPath?[`knowledge_index_path: ${Rn(n.knowledgeIndexPath)}`]:[],`annotation_count: ${a.length}`,`updated_at: ${new Date().toISOString()}`,...o.length>0?["preview_images:",...o.map(u=>` - ${Rn(u)}`)]:[],...s.length>0?["knowledge_tags:",...s.map(u=>` - ${Rn(u)}`)]:[],"---"].join(` +`),"",`# ${Di(n.baseName)}`,"","## Summary","",...t?[...V3(t,{decimals:2}),""]:["(No preview data available)",""],...R_e(i),...T_e(n),...n.knowledgeIndexPath?["## Knowledge Index","",`- [[${n.knowledgeIndexPath}|Open model knowledge index]]`,""]:[],"## Local Observations","",...p_e(t,e).map(u=>`- ${u}`),"",...y_e(i,n.analysisSidecarPath),...b_e(i),...__e(e),...g_e(i),...v_e(i),...I_e(i),...M_e(i),...C_e(i),...A_e(i),...x_e(i),...P_e(t,e),"## Review Notes","",(d=e==null?void 0:e.notes)!=null&&d.trim()?Di(e.notes.trim()):"-",""].join(` +`)}function aa(n){return Di(n).replace(/\|/g,"\\|").replace(/\r?\n/g," ")}function L_e(n){let[,e=""]=n.split(",",2),t=atob(e),i=new Uint8Array(t.length);for(let r=0;r{f_e.warn("Failed to create vault folder",{path:i,error:String(s)})})}async function Yq(n,e,t){let i=n.vault.getAbstractFileByPath(e);if(i instanceof _l.TFile)return i;try{return await n.vault.create(e,t)}catch(r){let s=n.vault.getAbstractFileByPath(e);return s instanceof _l.TFile?s:null}}async function wq(n,e,t){let i=n.vault.getAbstractFileByPath(e);if(i instanceof _l.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 _l.TFile)return await n.vault.modify(s,t),s}return null}async function D_e(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 tw(n,t);let a=`${t}/${i}_evidence_${Date.now()}.png`;return await n.vault.createBinary(a,L_e(r)),{paths:[a]}}catch(a){let o=a instanceof Error?a.message:String(a);return{paths:[],warning:`Evidence snapshot failed: ${o}`}}}function Kq(n){return!!n&&typeof n=="object"}function gv(n){return Array.isArray(n)?n.filter(e=>typeof e=="string"):[]}function Fq(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 O_e(n,e){if(!Kq(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==="component"?n.source:void 0,componentId:typeof n.componentId=="string"?n.componentId:void 0,occurrenceId:typeof n.occurrenceId=="string"?n.occurrenceId:void 0,partNumber:typeof n.partNumber=="string"?n.partNumber:void 0,componentPath:typeof n.componentPath=="string"?n.componentPath:void 0,category:typeof n.category=="string"?n.category:void 0,meshRefs:gv(n.meshRefs),childCount:Number.isFinite(n.childCount)?Number(n.childCount):void 0,materialRefs:gv(n.materialRefs),bbox:Fq(n.bbox),center:Fq(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:gv(n.observations),inferredFunctions:gv(n.inferredFunctions),knowledgeTags:gv(n.knowledgeTags),notePath:typeof n.notePath=="string"?n.notePath:void 0,registeredMatches:Array.isArray(n.registeredMatches)?n.registeredMatches.filter(s=>!!(s&&typeof s=="object"&&typeof s.sourceAssetId=="string"&&typeof s.sourcePartId=="string"&&typeof s.sourcePartName=="string")):void 0,reviewed:n.reviewed===!0}}async function jq(n,e,t){var a;let i=[],r=new Set,s=(o,l)=>{let c=O_e(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 _l.TFile)try{let f=await n.vault.read(c),h=JSON.parse(f);if(Kq(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 N_e(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,Bq).map(i=>i.partId))}function w_e(n,e,t,i){let r=ew(n)||"Parts/3D Components",s=$N(e,"model"),a=$N(t.name,`Part ${i+1}`);return`${r}/${s}/${String(i+1).padStart(2,"0")} ${a}.md`}function F_e(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: ${Rn(n.sourcePath)}`,`parent_report: ${Rn(n.notePath)}`,`part_id: ${Rn(n.part.partId)}`,`asset_id: ${Rn(n.part.assetId)}`,...n.part.componentId?[`component_id: ${Rn(n.part.componentId)}`]:[],...n.part.occurrenceId?[`occurrence_id: ${Rn(n.part.occurrenceId)}`]:[],...n.part.partNumber?[`part_number: ${Rn(n.part.partNumber)}`]:[],`category: ${Rn((r=n.part.category)!=null?r:"unclassified")}`,"status: draft","generated_by: ai-model-workbench",`updated_at: ${new Date().toISOString()}`,"---"].join(` +`),"",`# ${Di(n.part.name)}`,"","## Evidence","",`- Source model: [[${n.sourcePath}|${n.baseName}]]`,`- Parent report: [[${n.notePath}|${n.baseName} Report]]`,`- Source: ${Gq(n.part)}`,`- Category: ${(s=n.part.category)!=null?s:"unclassified"}`,...n.part.componentId?[`- Component ID: ${n.part.componentId}`]:[],...n.part.occurrenceId?[`- Occurrence ID: ${n.part.occurrenceId}`]:[],...n.part.partNumber?[`- Part number: ${n.part.partNumber}`]:[],...n.part.componentPath?[`- Component path: ${n.part.componentPath}`]:[],...n.part.source==="group"||n.part.source==="component"?[`- Child meshes: ${h_e(n.part.meshRefs)}`]:[],`- Triangles: ${((a=n.part.triangleCount)!=null?a:0).toLocaleString()}`,`- Vertices: ${((o=n.part.vertexCount)!=null?o:0).toLocaleString()}`,`- Material: ${n.part.materialName?Di(n.part.materialName):"-"}`,`- Bounding size: ${JN(n.part.bbox)}`,`- Center: ${JN(n.part.center)}`,...(l=n.part.registeredMatches)!=null&&l.length?[`- Possible registered match: ${d_e(n.part.registeredMatches[0])}`]:[],"","## 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 B_e(n){var a;let e=N_e(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=`${ew(n.partFolder)||"Parts/3D Components"}/${$N(n.baseName,"model")}`;await tw(n.app,s);for(let[o,l]of n.analysis.parts.entries()){if(!e.has(l.partId))continue;let c=w_e(n.partFolder,n.baseName,l,o),f={...l,notePath:c},h=F_e({baseName:n.baseName,notePath:n.notePath,sourcePath:n.sourcePath,part:f,analysis:n.analysis}),d=await Yq(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 iw(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[Uq,"","## 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?`- ${bo(n.preview.meshCount,"mesh")}, ${bo(n.preview.triangleCount,"triangle")}, ${bo(n.preview.vertexCount,"vertex")}, ${bo(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 ${Di(h.sourcePartName)} (${Math.round(h.confidence*100)}%)`:"";return`- [[${f.notePath}|${Di(f.name)}]] - ${(m=f.category)!=null?m:"unclassified"}, ${bo(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."],"",ZN,""].join(` +`)}function qq(n,e){let t=n.indexOf(Uq),i=n.indexOf(ZN);if(t>=0&&i>t){let r=n.slice(0,t).replace(/\s+$/,""),s=n.slice(i+ZN.length).replace(/^\s+/,"");return[r,e.trim(),s].filter(Boolean).join(` `)+` `}return`${n.replace(/\s+$/,"")} ${e.trim()} -`}function Hq(n){var r;let e=jN(n),t=((r=n.analysis.parts)!=null?r:[]).filter(s=>s.notePath).length;return[["---",`source_model: ${An(n.sourcePath)}`,`report_note_path: ${An(n.notePath)}`,`analysis_sidecar_path: ${An(n.analysisSidecarPath)}`,`part_note_count: ${t}`,"status: index","generated_by: ai-model-workbench",`updated_at: ${new Date().toISOString()}`,"---"].join(` +`}function Zq(n){var r;let e=iw(n),t=((r=n.analysis.parts)!=null?r:[]).filter(s=>s.notePath).length;return[["---",`source_model: ${Rn(n.sourcePath)}`,`report_note_path: ${Rn(n.notePath)}`,`analysis_sidecar_path: ${Rn(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 A_e(n){let e=typeof performance!="undefined"?performance.now():Date.now(),t=n.app.vault.getAbstractFileByPath(n.indexPath),i=null;if(t instanceof pl.TFile){let r=await n.app.vault.read(t),s=jN(n);await n.app.vault.modify(t,Wq(r,s)),i=t}else i=await Vq(n.app,n.indexPath,Hq(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 x_e(n,e,t={}){var o,l,c,f,h,d,u,m,p,_,g;if(kN!==null)return;let i;kN=new Promise(v=>{i=v});let r=null,s=null,a=0;try{let v=e.store.getState(),x=v.currentModelPath;if(!x)return;let A=v.modelAssetProfiles[x],E=v.modelPreview,S=qr(x)||"model",R=v.settings.reportFolder,I=`${R}/${S} Report.md`,C=`${R}/${S} Analysis.json`,y=`${R}/${S} Index.md`,D=((o=v.lastKnowledgeGeneration)==null?void 0:o.status)==="pending"?`Previous knowledge generation for ${v.lastKnowledgeGeneration.modelPath} did not complete. This run can replace the pending marker if it finishes.`:null;D&&new pl.Notice(D),r=VN({modelPath:x,reportNotePath:I,analysisSidecarPath:C,knowledgeIndexPath:y,status:"pending"}),e.setLastKnowledgeGeneration(r);let O=(f=(c=(l=t.preview)==null?void 0:l.getModelEvidence)==null?void 0:c.call(l))!=null?f:null,V=await __e(n,t.preview,v.settings.previewFolder,S);a=V.paths.length;let N=await kq(n,v.modelAssetProfiles,x);s=Bb({modelPath:x,profile:A,preview:E,evidence:O,previewImages:V.paths,registeredParts:N}),D&&(s.warnings=[...s.warnings,D]);let w=s;V.warning&&(w.warnings=[...w.warnings,V.warning],w.draftingInput&&(w.draftingInput={...w.draftingInput,evidence:{...w.draftingInput.evidence,warnings:[...w.draftingInput.evidence.warnings,V.warning]}})),w.localDraft=Uq({baseName:S,sourcePath:x,profile:A,preview:E,analysis:w}),w.pipeline.push({stage:"draft",durationMs:0,status:"success"}),await T_e({app:n,partFolder:v.settings.partFolder,baseName:S,notePath:I,sourcePath:x,analysis:w}),w.draftingInput&&(w.draftingInput={...w.draftingInput,partCandidates:w.draftingInput.partCandidates.map(z=>{let Y=w.parts.find(me=>me.partId===z.partId);return Y!=null&&Y.notePath?{...z,notePath:Y.notePath}:z}),annotationLinks:[...(h=w.annotationLinks)!=null?h:[]]});let B=Rq(v.settings,w.draftingInput,Sp);if(B.enabled)try{let z=await bq(B);z?(w.remoteDraft=z,w.pipeline.push({stage:"remoteDraft",durationMs:0,status:"success"})):w.pipeline.push({stage:"remoteDraft",durationMs:0,status:"skipped"})}catch(z){let Y=z instanceof Error?z.message:String(z);w.warnings=[...w.warnings,`Remote draft failed: ${Y}`],w.pipeline.push({stage:"remoteDraft",durationMs:0,status:"failed"})}else w.pipeline.push({stage:"remoteDraft",durationMs:0,status:"skipped"});if(await KN(n,R),!await A_e({app:n,baseName:S,notePath:I,sourcePath:x,analysisSidecarPath:C,indexPath:y,analysis:w,preview:E,profile:A}))throw new Error(`Unable to write knowledge index: ${y}`);let te=Bq({baseName:S,notePath:I,sourcePath:x,profile:A,preview:E,analysis:w,analysisSidecarPath:C,knowledgeIndexPath:w.knowledgeIndexPath});if(!await Cq(n,C,`${JSON.stringify(w,null,2)} -`))throw new Error(`Unable to write analysis sidecar: ${C}`);let J=await Cq(n,I,te);if(!J)throw new Error(`Unable to write knowledge report: ${I}`);e.updateModelProfile(x,z=>({analysisVersion:Sp,registeredParts:w.parts,reportNotePath:J.path,analysisSidecarPath:C,knowledgeIndexPath:w.knowledgeIndexPath,previewImagePaths:V.paths})),e.setLastKnowledgeGeneration(VN({modelPath:x,reportNotePath:J.path,analysisSidecarPath:C,knowledgeIndexPath:w.knowledgeIndexPath,partNoteCount:(u=(d=w.partNotePaths)==null?void 0:d.length)!=null?u:0,previewImageCount:w.previewImages.length,status:"success",warningCount:w.warnings.length})),await n.workspace.getLeaf(!0).openFile(J,{active:!0}),new pl.Notice(`Knowledge note updated: ${J.path}`)}catch(v){throw r&&e.setLastKnowledgeGeneration(VN({...r,partNoteCount:(p=(m=s==null?void 0:s.partNotePaths)==null?void 0:m.length)!=null?p:0,previewImageCount:(_=s==null?void 0:s.previewImages.length)!=null?_:a,status:"failed",warningCount:Math.max(1,(g=s==null?void 0:s.warnings.length)!=null?g:0)})),v}finally{i(),kN=null}}var pl,jpe,Pq,Lq,WN,kN,kb=M(()=>{"use strict";pl=require("obsidian");iT();QS();Tn();Bs();UN();Iq();jpe=Wi("knowledge-note"),Pq=8,Lq="",WN="";kN=null});function bo(n,e,t=2.5){var i;if(typeof n=="string"){let r=(i=JN[n])!=null?i:JN.iso;return{alpha:r.alpha,beta:r.beta,radiusMultiplier:t}}return{alpha:n,beta:e!=null?e:Math.PI/3,radiusMultiplier:t}}function _l(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 tw(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 JN,Id=M(()=>{"use strict";JN={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 Kq,jq=M(()=>{"use strict";Id();Kq={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=gv(n,t),s=n.length<=3?n.length:2,a=Math.ceil(n.length/s),o=_l(s,a),l=n.map((c,f)=>({modelIndex:f,camera:bo(i),viewport:o[f]}));return{placements:r,cells:l}}}});var qq,Zq=M(()=>{"use strict";Id();qq={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=_l(a,o),c=s.map((f,h)=>({modelIndex:0,camera:bo(f,void 0,i),viewport:l[h]}));return{placements:r,cells:c}}}});var Qq,$q=M(()=>{"use strict";Id();Qq={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=tw(n,t),s=Math.min(n.length,4),a=Math.ceil(n.length/s),o=_l(s,a),l=n.map((c,f)=>({modelIndex:f,camera:bo(i),viewport:o[f]}));return{placements:r,cells:l}}}});var Jq,eZ=M(()=>{"use strict";Id();Jq={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=gv(n,t),s=ew(n.length),a=n.map((o,l)=>({modelIndex:l,camera:bo(i),viewport:s[l]}));return{placements:r,cells:a}}}});function iw(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";tZ={name:"compose",description:"Combine multiple presets into one layout",minModels:1,maxModels:32,compute(n,e,t){return null}}});var iZ,rZ=M(()=>{"use strict";Id();iZ={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,p=(u-(a-1)/2)*t;return{path:f.path,position:[m,0,p],color:f.color,wireframe:f.wireframe}}),l=_l(1,1,0),c=[{modelIndex:0,camera:bo(i,void 0,3+Math.max(s,a)*.5),viewport:l[0]}];return{placements:o,cells:c}}}});function xp(n){nZ.set(n.name,n)}function nw(n){return nZ.get(n)}var nZ,sZ=M(()=>{"use strict";jq();Zq();$q();eZ();rw();rZ();Id();rw();nZ=new Map;xp(Kq);xp(qq);xp(Qq);xp(Jq);xp(tZ);xp(iZ)});var cZ={};tt(cZ,{registerCodeBlockProcessor:()=>D_e,registerGridCodeBlockProcessor:()=>N_e});async function oZ(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(Ki("workbench.fileNotFound",{path:r.path}));let a=(d=(h=s.split(".").pop())==null?void 0:h.toLowerCase())!=null?d:"";if(!gl(a))throw Mp(a)?new Error(Q("codeBlock.splatDisabled")):new Error(Ki("codeBlock.unsupportedFormat",{ext:`.${a}`,formats:vl().join(", ")}));let o=(u=eh(n,s))!=null?u:void 0,l=vd(t),c=await Td({path:s,absolutePath:o,preferConversionExts:Ad(t),conversionManager:l,convertedAssetCache:i}),f=fv(c);return{sourcePath:s,effectivePath:f.path,effectiveExt:f.ext,warnings:f.warnings,model:{...r,path:f.path}}}async function L_e(n,e,t,i){let r=[];for(let s of e.models){let a=await oZ(n,s,t,i);r.push(a.model)}return{...e,models:r}}function lZ(n){pr()&&n.createDiv({cls:"ai3d-mobile-mode-hint ai3d-mobile-mode-hint--inline",text:Q("codeBlock.mobileHint")})}function D_e(n,e,t,i){return{id:"3d",handler:(r,s,a)=>{var C,y;let o=r.trim();if(!o){s.createDiv({cls:"ai3d-inline-empty",text:Q("codeBlock.noModelPathOrConfig")});return}let l;if(o.startsWith("{")||o.startsWith("["))try{let D=JSON.parse(o);l=O_e(D)}catch(D){let O=s.createDiv({cls:"ai3d-json-error"}),V=String(D).match(/position\s+(\d+)/),N=Ki("codeBlock.jsonParseError",{error:String(D)});if(V){let w=parseInt(V[1],10),B=o.substring(0,w).split(` -`);N+=Ki("codeBlock.jsonParseLine",{line:String(B.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:Q("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:Ki("workbench.fileNotFound",{path:f.path})});return}let d=(y=(C=h.split(".").pop())==null?void 0:C.toLowerCase())!=null?y:"";if(!gl(d)){s.createDiv({cls:"ai3d-inline-empty",text:Mp(d)?Q("codeBlock.splatDisabled"):Ki("codeBlock.unsupportedFormat",{ext:`.${d}`,formats:vl().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 p=m.createEl("canvas",{cls:"ai3d-canvas-full"});Tp(p,"inline",h),m.appendChild(p);let _=null,g=null,v=!0,x=!1,A=!1;Ap(p,()=>x?null:_);let E=lv(s,m,n,()=>_,()=>h,()=>{x||(x=!0,S.disconnect(),I.disconnect(),g==null||g.destroy(),g=null,_==null||_.destroy(),_=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"});lZ(s);let S=new MutationObserver(()=>{x||s.contains(m)||(x=!0,S.disconnect(),I.disconnect(),g==null||g.destroy(),g=null,_==null||_.destroy(),_=null)});S.observe(s,{childList:!0});async function R(){var O,V,N,w,B,W,te;if(A||x||!h)return;A=!0;let D=xd(m);try{let $=(O=eh(n,h))!=null?O:void 0,J=vd(u);D.setPhaseKey("loading.preparingModel");let z=await Td({path:h,absolutePath:$,preferConversionExts:Ad(u),conversionManager:J,convertedAssetCache:t}),Y=fv(z),me=(V=i==null?void 0:i(h))!=null?V:[],xe={ext:Y.ext,annotationMode:me.length>0?"readonly":"none",rendererRollout:u.previewRendererRollout,useThreeRenderer:u.useThreeRenderer},{preview:Ue}=await gd(aZ,{surface:"code-block",modelPath:h},p,xe);_=Ue,E.syncCapabilities(),D.setPhaseKey("loading.loadingModel");let ae=await Ga(n,Y.path),ve=async ue=>Ga(n,ue);if(x){D.hide();return}let ne=await _.loadModel(ae,Y.ext,ve,Y.path);if(D.setProgress(100),Ep(m,ne),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}),_.applyConfig(l),(w=_.setRenderQuality)==null||w.call(_,u.renderQuality,u.renderScale),E.syncCapabilities(),me.length>0&&vb(_)){let ue=_.getAnnotationProvider();ue.canvas&&(g=new Fc(ue,m,"readonly",me,void 0,gp(n),void 0,{app:n,previewMode:u.annotationPreviewMode,displayMode:u.annotationDisplayMode}),E.showAnnotateButton(),E.updateAnnotationBadge(me.length))}d==="stl"&&f.color&&((B=_.setSTLColor)==null||B.call(_,f.color)),d==="stl"&&f.wireframe!==void 0&&((W=_.setWireframe)==null||W.call(_,f.wireframe)),(te=_.hasAnimations)!=null&&te.call(_)&&E.showAnimButton(),D.hide()}catch($){x=!0,S.disconnect(),I.disconnect(),D.hide(),_==null||_.destroy(),_=null,m.replaceChildren();let J=pp($);mp($)?console.warn("[AI3D] Inline preview blocked by converter settings:",J.message):console.error("[AI3D] Inline preview failed:",$),vp(m,J)}}let I=new IntersectionObserver(D=>{for(let O of D)O.isIntersecting&&(I.disconnect(),R())},{rootMargin:"200px"});I.observe(m)}}}function O_e(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 N_e(n,e,t){return{id:"3dgrid",handler:(i,r,s)=>{let a=i.trim();if(!a){r.createDiv({cls:"ai3d-inline-empty",text:Q("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:Q("codeBlock.noModelsSpecified")});return}let l=e(),c=xd(r);(async()=>{var S,R,I,C;let f=[];for(let y of(S=o.models)!=null?S:[])try{let D=await oZ(n,y,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(y=>y.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(gq(m),u.appendChild(m),typeof o.rowHeight=="number"){let y=o.preset==="compose"?1:Math.ceil(h.length/((C=o.columns)!=null?C:Math.min(h.length,3)));u.style.setProperty("--grid-height",`${o.rowHeight*y}px`)}let p=null,_=!1,g=!1;vq(m,()=>_?null:p);let v=lv(r,u,n,()=>p,()=>d,()=>{_||(_=!0,x.disconnect(),E.disconnect(),p==null||p.destroy(),p=null,u.remove())},e);lZ(r);let x=new MutationObserver(()=>{_||r.contains(u)||(_=!0,x.disconnect(),E.disconnect(),p==null||p.destroy(),p=null)});x.observe(r,{childList:!0});async function A(){var y,D,O,V,N,w,B;if(!(g||_)){g=!0,c.setPhaseKey("codeBlock.renderingGrid"),c.setProgress(-1);try{let{renderer:W}=await Rj(aZ,{surface:"3dgrid",preset:(y=o.preset)!=null?y:"compare",modelCount:(O=(D=o.models)==null?void 0:D.length)!=null?O:0},m);p=W,v.syncCapabilities();let te=p,$=async J=>Ga(n,J);if(o.preset==="compose"){if(!o.sections||o.sections.length===0){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:Q("codeBlock.composeRequiresSections")}),p.destroy(),p=null;return}let J=[];for(let Y of o.sections)try{if(!d){let xe=Y.models[0];if(xe){let Ue=typeof xe=="string"?xe:xe.path;d=(V=Bd(n,Ue))!=null?V:Ue}}let me=await L_e(n,Y,l,t);J.push(me)}catch(me){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:me instanceof Error?me.message:String(me)}),te.destroy(),p=null;return}let z=iw(J,(N=o.direction)!=null?N:"horizontal",Number((w=o.params)==null?void 0:w.gap)||.02,Y=>typeof Y=="string"?null:Y,nw);if(!z){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:Q("codeBlock.composeNoValidSections")}),te.destroy(),p=null;return}await te.loadWithPreset(z,$)}else if(o.preset){let J=nw(o.preset);if(!J){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:Ki("codeBlock.unknownPreset",{preset:o.preset})}),te.destroy(),p=null;return}let z=J.compute(h,(B=o.params)!=null?B:{});if(!z){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:Ki("codeBlock.presetRequiresModels",{preset:o.preset,min:String(J.minModels),max:String(J.maxModels),count:String(h.length)})}),te.destroy(),p=null;return}await te.loadWithPreset(z,$)}else await te.loadModels(h,o,$);if(_){c.hide();return}c.hide()}catch(W){_=!0,x.disconnect(),E.disconnect(),c.hide(),p==null||p.destroy(),p=null,console.error("[AI3D Grid] Failed:",W),u.createDiv({cls:"ai3d-inline-empty",text:Ki("codeBlock.gridFailed",{reason:String(W)})})}}}let E=new IntersectionObserver(y=>{for(let D of y)D.isIntersecting&&(E.disconnect(),A())},{rootMargin:"200px"});E.observe(u)})()}}}var aZ,fZ=M(()=>{"use strict";Mo();Pv();mb();ov();Bs();sZ();TN();Lb();Ob();ON();Nb();wb();dv();_p();os();Fb();Zs();Tn();Vb();aZ=Wi("inline-code-block")});function vv(n){return createDiv().createDiv(n?{cls:n}:void 0)}function sw(n,e){return createDiv().createEl(n,e?{cls:e}:void 0)}var hZ=M(()=>{"use strict"});var mZ={};tt(mZ,{registerLivePreviewExtension:()=>F_e});function dZ(n,e,t,i,r,s,a,o,l,c,f,h,d,u,m,p){var v,x;let _="state"in n?n.state.doc:n.doc,g=[];for(let A=1;A<=_.lines;A++){let E=_.line(A),S=E.text;if(!S.includes("!["))continue;let R=0;for(;R0&&S[I-1]==="\\"){R=I+3;continue}let C=S.indexOf("]]",I+3);if(C===-1)break;let D=S.slice(I+3,C).split("|"),O=D[0].trim(),V=(x=(v=O.split(".").pop())==null?void 0:v.toLowerCase())!=null?x:"";if(!gl(V)){R=C+2;continue}let N=400,w=300;if(D.length>1){let $=D[1].trim().match(/^(\d+)\s*x\s*(\d+)$/);$&&(N=parseInt($[1],10),w=parseInt($[2],10))}let B=Bd(e,O);if(!B){R=C+2;continue}let W=E.from+I,te=E.from+C+2;g.push(Rp.Decoration.replace({widget:new aw(e,B,N,w,t,i,r,s,a,o,l,c,f,h,d,u,m,p),block:!0}).range(W,te)),R=C+2}}return g}function uZ(n){return n.length===0?Md.RangeSet.empty:Md.RangeSet.of(n,!0)}function F_e(n,e,t,i){let r=Md.StateField.define({create(s){let a=e(),o=dZ(s,n,a.autoRotateDefault,a.enabledConverterIds,a.freecadCommand,a.obj2gltfCommand,a.fbx2gltfCommand,a.freecadcmdCommand,a.preferObj2gltfForObj,a.preferFbx2gltfForFbx,a.annotationPreviewMode,a.annotationDisplayMode,a.previewRendererRollout,a.useThreeRenderer,t,i);return uZ(o)},update(s,a){if(a.docChanged){let o=e(),l=dZ(a.state,n,o.autoRotateDefault,o.enabledConverterIds,o.freecadCommand,o.obj2gltfCommand,o.fbx2gltfCommand,o.freecadcmdCommand,o.preferObj2gltfForObj,o.preferFbx2gltfForFbx,o.annotationPreviewMode,o.annotationDisplayMode,o.previewRendererRollout,o.useThreeRenderer,t,i);return uZ(l)}return s.map(a.changes)},provide:s=>Rp.EditorView.decorations.from(s)});return[Md.Prec.highest(r)]}var Rp,Md,w_e,aw,pZ=M(()=>{"use strict";Rp=require("@codemirror/view"),Md=require("@codemirror/state");Mo();Pv();mb();ov();Bs();Lb();Ob();Nb();wb();dv();hZ();_p();Zs();Fb();os();Tn();Vb();w_e=Wi("inline-live-preview"),aw=class extends Rp.WidgetType{constructor(t,i,r,s,a,o,l,c,f,h,d,u,m,p,_,g,v,x){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.annotationDisplayMode=p;this.previewRendererRollout=_;this.useThreeRenderer=g;this.convertedAssetCache=v;this.getAnnotations=x;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.annotationDisplayMode===t.annotationDisplayMode&&this.previewRendererRollout===t.previewRendererRollout&&this.convertedAssetCache===t.convertedAssetCache}toDOM(){let t=pr(),i=vv("ai3d-embed-preview ai3d-cm-widget");i.setAttribute("contenteditable","false"),t&&i.classList.add("is-mobile","is-mobile-scroll-mode");let r=sw("canvas","ai3d-embed-canvas"),s=t?Math.min(this.height,220):this.height;r.style.setProperty("--ai3d-embed-height",`${s}px`),Tp(r,"live-preview",this.modelPath),Ap(r,()=>this.destroyed?null:this.preview),i.appendChild(r);let a=xd(i),o=vv("ai3d-embed-error is-hidden");if(i.appendChild(o),t){let h=!1,d=vv("ai3d-mobile-mode-bar"),u=vv("ai3d-mobile-mode-hint");u.textContent=Q("livePreview.mobileHint");let m=sw("button","ai3d-mobile-mode-btn");m.type="button";let p=()=>{i.classList.toggle("is-mobile-interactive",h),i.classList.toggle("is-mobile-scroll-mode",!h),m.textContent=h?Q("helper.scrollAction"):Q("helper.interactAction"),m.classList.toggle("ai3d-btn-active",h),m.setAttribute("aria-label",h?Q("helper.disableInteractionLabel"):Q("helper.enableInteractionLabel"))};m.addEventListener("click",()=>{h=!h,p()}),p(),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=eh(this.app,this.modelPath))!=null?o:void 0,m=vd({enabledConverterIds:this.enabledConverterIds,freecadCommand:this.freecadCommand,obj2gltfCommand:this.obj2gltfCommand,fbx2gltfCommand:this.fbx2gltfCommand,freecadcmdCommand:this.freecadcmdCommand});r.setPhaseKey("loading.preparingModel");let p=await Td({path:this.modelPath,absolutePath:u,preferConversionExts:Ad({preferObj2gltfForObj:this.preferObj2gltfForObj,preferFbx2gltfForFbx:this.preferFbx2gltfForFbx}),conversionManager:m,convertedAssetCache:this.convertedAssetCache}),_=(c=(l=this.getAnnotations)==null?void 0:l.call(this,this.modelPath))!=null?c:[],g={ext:p.effectiveExt,annotationMode:_.length>0?"readonly":"none",rendererRollout:this.previewRendererRollout,useThreeRenderer:this.useThreeRenderer},{preview:v}=await gd(w_e,{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 Ga(this.app,p.effectivePath);if(this.destroyed||a!==this.initGeneration){(f=this.preview)==null||f.destroy(),this.preview=null;return}let A=await this.preview.loadModel(x,p.effectiveExt,E=>Ga(this.app,E),p.effectivePath);if(this.destroyed||a!==this.initGeneration){(h=this.preview)==null||h.destroy(),this.preview=null;return}if(Ep(t,A),this.autoRotate&&this.preview.applyConfig({models:[],scene:{autoRotate:!0,autoRotateSpeed:.5}}),_.length>0&&vb(this.preview)){let E=this.preview.getAnnotationProvider();E.canvas&&(this.annotationMgr=new Fc(E,t,"readonly",_,void 0,gp(this.app),void 0,{app:this.app,previewMode:this.annotationPreviewMode,displayMode:this.annotationDisplayMode}))}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=pp(u);mp(u)?console.warn("[AI3D] Live Preview blocked by converter settings:",m.message):console.error("[AI3D] Live Preview failed:",u),vp(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 gZ={};tt(gZ,{buildDiagnosticsReport:()=>G_e});function Kb(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 U_e(n){var i;let e=(i=n.split(/[\\/]/).pop())!=null?i:n,t=e.lastIndexOf(".");return t<=0||t===e.length-1?"":`.${e.slice(t+1).toLowerCase()}`}function bp(n,e,t){if(!n)return t;if(e)return n;let i=U_e(n);return i?``:""}function Ev(n,e){return n?`set (${bp(n,e,"not set")})`:"not set"}function B_e(n){let e=n.settings;return e.analysisMode==="local"?"local only":[e.analysisMode,e.serviceBaseUrl.trim()?"service configured":"service missing",`geometry ${Kb(e.sendGeometrySummaryToRemote)}`,`preview refs ${Kb(e.sendPreviewImagesToRemote)}`,`raw model ${e.sendRawModelToRemote?"blocked if requested":"off"}`].join(", ")}function V_e(n){let e=n.currentModelPath;return e?n.modelAssetProfiles[e]:void 0}function G_e(n){var l,c,f,h,d,u,m,p;let{manifest:e,state:t}=n,i=t.settings,r=V_e(t),s=n.includeVaultPaths===!0,a=t.currentModelPath?Hd({ext:(l=t.currentModelPath.split(".").pop())!=null?l:"",annotationMode:r!=null&&r.annotations.length?"readonly":"none",allowEditModeOnThree:!0,allowWorkbenchFeaturesOnThree:i.experimentalThreeWorkbench,rendererRollout:i.previewRendererRollout,useThreeRenderer:i.useThreeRenderer}):null,o=t.lastKnowledgeGeneration;return["# AI Model Workbench Diagnostics","",`Generated: ${(c=n.generatedAt)!=null?c:new Date().toISOString()}`,"","## Runtime","",`- Plugin version: ${e.version}`,`- Minimum Obsidian version: ${e.minAppVersion}`,`- Obsidian API version: ${_Z.apiVersion}`,`- Platform: ${pr()?"mobile":"desktop"}`,`- Locale: ${i.locale}`,"","## Renderer","",`- Use Three renderer: ${Kb(i.useThreeRenderer)}`,`- Preview rollout: ${i.previewRendererRollout}`,`- Experimental Three workbench: ${Kb(i.experimentalThreeWorkbench)}`,`- Current route: ${a?`${a.backend} (${a.reason})`:"no current model"}`,`- Render quality: ${i.renderQuality}`,`- Render scale: ${i.renderScale}`,"","## Current Model","",`- Path: ${bp(t.currentModelPath,s,"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: ${Ev(r==null?void 0:r.reportNotePath,s)}`,`- Analysis sidecar: ${Ev(r==null?void 0:r.analysisSidecarPath,s)}`,`- Knowledge index: ${Ev(r==null?void 0:r.knowledgeIndexPath,s)}`,"","## Knowledge Generation","",`- Mode: ${B_e(t)}`,`- Report folder: ${bp(i.reportFolder,s,"empty")}`,`- Part notes folder: ${bp(i.partFolder,s,"empty")}`,`- Snapshot folder: ${bp(i.previewFolder,s,"empty")}`,`- Last generation: ${o?`${o.status} at ${o.generatedAt}`:"none"}`,`- Last generated model: ${bp(o==null?void 0:o.modelPath,s,"none")}`,`- Last report: ${Ev(o==null?void 0:o.reportNotePath,s)}`,`- Last index: ${Ev(o==null?void 0:o.knowledgeIndexPath,s)}`,`- Last part notes: ${(u=o==null?void 0:o.partNoteCount)!=null?u:0}`,`- Last preview images: ${(m=o==null?void 0:o.previewImageCount)!=null?m:0}`,`- Last warning count: ${(p=o==null?void 0:o.warningCount)!=null?p:0}`,"","## Conversion","",`- Enabled converters: ${i.enabledConverterIds.length?i.enabledConverterIds.join(", "):"none"}`,`- Cached conversions: ${t.convertedAssetRecords.length}`,`- Supported direct/model extensions: ${vl().join(", ")}`,"","## Notes","","- Draft service URL and command paths are intentionally omitted from this report.",s?"- Vault-relative model and note paths are included because includeVaultPaths was requested.":"- Vault-relative model, report, index, and folder paths are redacted by default.","- Attach this report with the model format, console error, and reproduction steps when filing a bug.",""].join(` -`)}var _Z,vZ=M(()=>{"use strict";_Z=require("obsidian");Mo();Lv();Zs()});var k_e={};tt(k_e,{default:()=>jb});module.exports=LZ(k_e);var ws=require("obsidian");$b();Mo();Mo();var Y_e=new Set(vl());var Oc={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",annotationDisplayMode:"surface",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 _w(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 wZ={settings:{...Oc},currentModelPath:null,convertedAssetRecords:[],modelAssetProfiles:{},agentDraft:"",agentPlan:null,modelPreview:null,selectedPart:null,lastKnowledgeGeneration:null};function vw(n){let e=_w(wZ),t=null,i=0,r=0,s=null;function a(){t&&window.clearTimeout(t),t=window.setTimeout(()=>{t=null,c().catch(d=>console.error("[AI3D] Auto-save failed:",d))},500)}function o(){i+=1,a()}function l(){let d=e.getState();return{settings:d.settings,convertedAssetRecords:d.convertedAssetRecords,modelAssetProfiles:d.modelAssetProfiles,agentDraft:d.agentDraft,agentPlan:d.agentPlan,lastKnowledgeGeneration:d.lastKnowledgeGeneration}}function c(d=!1){return d&&r>=i&&(i+=1),s||(s=f()),s}async function f(){try{for(;ro());let h=!1;return{store:e,get localeLoadedFromSaved(){return h},setCurrentModel(d,u){e.setState({currentModelPath:d,modelPreview:u,selectedPart:null})},clearModelPreview(){e.setState({modelPreview:null,selectedPart:null})},updateModelProfile(d,u){var _;let m=e.getState().modelAssetProfiles,p=(_=m[d])!=null?_:e0();e.setState({modelAssetProfiles:{...m,[d]:{...p,...u(p),updatedAt:new Date().toISOString()}}})},setConvertedAssetRecords(d){e.setState({convertedAssetRecords:d})},updateSettings(d){let u=e.getState().settings;e.setState({settings:{...u,...d}})},setLastKnowledgeGeneration(d){e.setState({lastKnowledgeGeneration:d})},async load(){var u,m,p,_,g;let d=await n.loadData();d&&(h=!!((u=d.settings)!=null&&u.locale),e.setState({settings:{...Oc,...(m=d.settings)!=null?m:{}},convertedAssetRecords:(p=d.convertedAssetRecords)!=null?p:[],modelAssetProfiles:FZ(d.modelAssetProfiles),agentDraft:(_=d.agentDraft)!=null?_:"",agentPlan:(g=d.agentPlan)!=null?g:null,lastKnowledgeGeneration:BZ(d.lastKnowledgeGeneration)}))},async save(){t&&(window.clearTimeout(t),t=null),await c(!0)},dispose(){t&&(window.clearTimeout(t),t=null),c(!0).catch(d=>console.error("[AI3D] Final save on dispose failed:",d))}}}function FZ(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:UZ(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 Cp(n){return Array.isArray(n)?n.filter(e=>typeof e=="string"&&e.trim().length>0):[]}function gw(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 UZ(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==="component"?s.source:void 0,componentId:typeof s.componentId=="string"?s.componentId:void 0,occurrenceId:typeof s.occurrenceId=="string"?s.occurrenceId:void 0,partNumber:typeof s.partNumber=="string"?s.partNumber:void 0,componentPath:typeof s.componentPath=="string"?s.componentPath:void 0,category:typeof s.category=="string"?s.category:void 0,meshRefs:Cp(s.meshRefs),childCount:Number.isFinite(s.childCount)?Math.max(0,Math.floor(Number(s.childCount))):void 0,materialRefs:Cp(s.materialRefs),bbox:gw(s.bbox),center:gw(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:Cp(s.observations),inferredFunctions:Cp(s.inferredFunctions),knowledgeTags:Cp(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 BZ(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"||n.status==="pending"?n.status:"success",warningCount:Number.isFinite(n.warningCount)?Math.max(0,Math.floor(n.warningCount)):0}:null}function e0(){let n=new Date().toISOString();return{tags:[],notes:"",annotations:[],registeredParts:void 0,createdAt:n,updatedAt:n}}var yc=require("obsidian");Pv();mb();TN();Lb();Ob();ON();Bs();Nb();dv();wb();_p();os();Fb();Zs();Tn();UN();os();function wpe(n){if(!n)return"";let e=n.split("/");return e[e.length-1]||n}function fq(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:Ki("directWorkbench.registeredSourceModel",{model:wpe(t.sourceModelPath)})}),r.createDiv({cls:"ai3d-direct-workbench-match-target",text:t.sourceNotePath?Q("directWorkbench.registeredTargetPartNote"):t.sourceModelPath?Q("directWorkbench.registeredTargetSourceModel"):Q("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?Q("directWorkbench.registeredOpenNote"):Q("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 hq=new Set(["glb","gltf","stl","ply","obj"]),dq=new Set(["glb","gltf"]);function Fpe(n,e){return n.experimentalThreeWorkbench&&n.useThreeRenderer&&e.strategy==="direct"&&dq.has(e.ext)&&dq.has(e.sourceExt)}function Upe(n){return n.strategy==="direct"&&hq.has(n.ext)&&hq.has(n.sourceExt)}function uq(n,e){let t=Fpe(n,e);return{ext:e.ext,annotationMode:"edit",allowEditModeOnThree:!0,allowWorkbenchFeaturesOnThree:t,requireWorkbenchFeatures:t||!Upe(e),rendererRollout:n.previewRendererRollout,useThreeRenderer:n.useThreeRenderer}}Vb();var zb="ai3d-direct-view",qN=Wi("direct-view");function Wb(n){return Math.round(n!=null?n:0).toLocaleString()}function R_e(n){return[n.boundingSize.x,n.boundingSize.y,n.boundingSize.z].map(e=>e.toFixed(2)).join(" x ")}function b_e(n){return n==="three"?"Three.js":"Babylon.js"}function I_e(n){return n instanceof Error&&n.message.includes("Missing external model resource:")}function zq(n){var i,r,s;let e=(r=(i=n.occurrenceId)!=null?i:n.componentId)!=null?r:n.partNumber;if(e!=null&&e.trim())return`component:${e.trim().toLowerCase()}`;let t=n.meshRefs.map(a=>a.trim().toLowerCase()).filter(Boolean).sort().join("|");return`${(s=n.source)!=null?s:"mesh"}:${n.name.trim().toLowerCase()}:${t}`}function M_e(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 Hb=class extends yc.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.sidebarContent=null;this.getSettings=i,this.convertedAssetCache=r,this.ps=s}getViewType(){return zb}getDisplayText(){var t,i;return(i=(t=this.file)==null?void 0:t.name)!=null?i:Q("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 A,E,S,R,I,C,y,D,O;let i=++this.loadGeneration,r=pr();(A=this.annotationMgr)==null||A.destroy(),this.annotationMgr=null,this.workbenchPanel=null,this.workbenchSummary=null,this.workbenchRoute=null,this.workbenchModelPath=null,this.sidebarContent=null,(E=this.preview)==null||E.destroy(),this.preview=null,this.ps.setCurrentModel(t.path,null);let s=this.contentEl.createDiv({cls:"ai3d-workspace"}),a=s.createDiv({cls:"ai3d-workspace-track-top"}),o=a.createDiv({cls:"ai3d-workspace-main"}),l=a.createDiv({cls:"ai3d-resize-handle ai3d-resize-handle-h"}),c=a.createDiv({cls:"ai3d-workspace-sidebar"}),f=createDiv(),h=f.createDiv({cls:"ai3d-preview-host"}),d=f.createEl("canvas");d.className="ai3d-canvas-full",Tp(d,"direct-view",t.path),Ap(d,()=>this.preview),h.appendChild(d);let u=f.createDiv();u.className="ai3d-annot-mode-overlay is-hidden",h.appendChild(u),o.appendChild(h);let m=null,p=V=>{var N;this.annotationMode=V,r&&V&&(m==null||m.setMobileInteractionMode(!0)),(N=this.annotationMgr)==null||N.hideEditor(),u.classList.toggle("is-hidden",!V)};this.escHandler&&activeDocument.removeEventListener("keydown",this.escHandler),this.escHandler=V=>{V.key==="Escape"&&this.annotationMode&&p(!1)},activeDocument.addEventListener("keydown",this.escHandler),m=lv(o,h,this.app,()=>this.preview,()=>t.path,()=>{this.leaf.detach()},this.getSettings,()=>(p(!this.annotationMode),this.annotationMode),V=>{!V&&this.annotationMode&&p(!1)});let _=c.createDiv({cls:"ai3d-sidebar-content"});this.sidebarContent=_;let g=s.createDiv({cls:"ai3d-resize-handle ai3d-resize-handle-v"}),v=s.createDiv({cls:"ai3d-direct-workbench-panel is-hidden"});this.workbenchPanel=v,this.setupResizeHandles(l,g,a,s),r&&o.createDiv({cls:"ai3d-mobile-mode-hint ai3d-mobile-mode-hint--inline",text:Q("directView.mobileHint")});let x=xd(h);try{let V=this.getSettings(),N=vd(V),w=(S=eh(this.app,t.path))!=null?S:void 0;x.setPhaseKey("loading.preparingModel");let B=await Td({path:t.path,absolutePath:w,preferConversionExts:Ad(V),conversionManager:N,convertedAssetCache:this.convertedAssetCache});if(i!==this.loadGeneration){new yc.Notice(Q("directWorkbench.modelLoadInterrupted"));return}let W=fv(B),te=uq(V,W);m==null||m.syncCapabilities(),x.setPhaseKey("loading.loadingModel");let $=await Ga(this.app,W.path),J=await this.createPreviewWithFallback(d,$,W,te,t.path);if(i!==this.loadGeneration){J.preview.destroy(),new yc.Notice(Q("directWorkbench.modelLoadInterrupted"));return}this.preview=J.preview,h.dataset.ai3dBackend=J.route.backend,h.dataset.ai3dRouteReason=J.route.reason,m==null||m.syncCapabilities();let z=J.summary,Y=(C=(I=(R=this.preview).getModelEvidence)==null?void 0:I.call(R))!=null?C:null;this.registerModelPartsFromEvidence(t.path,Y),Ep(h,z),this.workbenchPanel=v,this.workbenchSummary=z,this.workbenchRoute=J.route,this.workbenchModelPath=t.path,this.renderWorkbenchPanel(v,z,J.route,t.path),this.renderSidebarContent(t.path,z),this.ps.setCurrentModel(t.path,z),qN.info("direct view model loaded",{path:t.path,effectivePath:W.path,effectiveExt:W.ext,strategy:W.strategy,backend:J.route.backend,routeReason:J.route.reason,meshCount:z.meshCount,triangleCount:z.triangleCount}),x.setProgress(100);let me=this.preview.getAnnotationProvider();if(me.canvas){let xe=this.ps.store.getState().modelAssetProfiles[t.path],Ue=(y=xe==null?void 0:xe.annotations)!=null?y:[],ae=gp(this.app),ve=sq(this.app);this.annotationMgr=new Fc(me,h,"edit",Ue,ne=>{this.ps.updateModelProfile(t.path,ue=>({annotations:ne})),m.updateAnnotationBadge(ne.length)},ae,ve,{app:this.app,previewMode:this.getSettings().annotationPreviewMode,displayMode:this.getSettings().annotationDisplayMode}),m.showAnnotateButton(),m.updateAnnotationBadge(Ue.length),this.preview.onPick(ne=>{var be,Ke;if(!this.annotationMode||!this.annotationMgr)return;let ue=ne.screenX,De=ne.screenY,de=(Ke=(be=this.preview)==null?void 0:be.getPickWorldPoint(ne))!=null?Ke:null;de&&this.annotationMgr.showEditor(ue,De,de)})}x.hide()}catch(V){if(i!==this.loadGeneration)return;x.hide(),(D=this.preview)==null||D.destroy(),this.preview=null,h.replaceChildren(),(O=this.workbenchPanel)==null||O.addClass("is-hidden");let N=pp(V);mp(V)?console.warn("[AI3D] Direct view blocked by converter settings:",N.message):console.error("[AI3D] Direct view failed:",V),this.ps.store.getState().currentModelPath===t.path&&this.ps.clearModelPreview(),vp(h,N)}}registerModelPartsFromEvidence(t,i){var c,f;if(!(i!=null&&i.parts.length))return;let r=FN(t,i.parts);if(r.length===0)return;let a=(c=this.ps.store.getState().modelAssetProfiles[t])!=null?c:e0(),o=new Map(((f=a.registeredParts)!=null?f:[]).map(h=>[zq(h),h])),l=r.map(h=>M_e(o.get(zq(h)),h));this.ps.updateModelProfile(t,h=>({registeredParts:l}))}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-overview"}),o=a.createDiv({cls:"ai3d-direct-workbench-status"}),l=o.createDiv({cls:"ai3d-direct-workbench-line"});l.createSpan({cls:"ai3d-direct-workbench-label",text:Q("directWorkbench.backendLabel")}),l.createSpan({cls:"ai3d-direct-workbench-value",text:b_e(r.backend)});let c=o.createDiv({cls:"ai3d-direct-workbench-line ai3d-direct-workbench-route"});c.createSpan({cls:"ai3d-direct-workbench-label",text:Q("directWorkbench.routeLabel")}),c.createSpan({cls:"ai3d-direct-workbench-value",text:r.reason});let f=a.createDiv({cls:"ai3d-direct-workbench-metrics"});this.renderMetric(f,Q("workbench.meshesLabel"),Wb(i.meshCount)),this.renderMetric(f,Q("directWorkbench.partCandidatesLabel"),Wb((d=(h=this.ps.store.getState().modelAssetProfiles[s])==null?void 0:h.registeredParts)==null?void 0:d.length)),this.renderMetric(f,i.splatCount!==void 0?Q("workbench.splatsLabel"):Q("workbench.trianglesLabel"),Wb((u=i.splatCount)!=null?u:i.triangleCount)),this.renderMetric(f,Q("workbench.materialsLabel"),Wb(i.materialCount)),this.renderMetric(f,Q("workbench.boundingSizeLabel"),R_e(i)),this.renderMetric(f,Q("directWorkbench.performanceLabel"),(m=i.performanceTier)!=null?m:"light")}renderSidebarContent(t,i){this.sidebarContent&&(this.sidebarContent.empty(),this.renderKnowledgeControls(this.sidebarContent,t),this.renderRegisteredPartMatches(this.sidebarContent,t,i))}refreshWorkbenchPanel(){!this.workbenchPanel||!this.workbenchSummary||!this.workbenchRoute||!this.workbenchModelPath||(this.renderWorkbenchPanel(this.workbenchPanel,this.workbenchSummary,this.workbenchRoute,this.workbenchModelPath),this.renderSidebarContent(this.workbenchModelPath,this.workbenchSummary))}setupResizeHandles(t,i,r,s){let a=(c,f,h)=>{let d=0,u=0,m=_=>{f(_.clientX-d,_.clientY-u),d=_.clientX,u=_.clientY},p=()=>{activeDocument.removeEventListener("mousemove",m),activeDocument.removeEventListener("mouseup",p),h()};c.addEventListener("mousedown",_=>{_.preventDefault(),d=_.clientX,u=_.clientY,activeDocument.addEventListener("mousemove",m),activeDocument.addEventListener("mouseup",p)})},o=200;a(t,c=>{o=Math.max(48,Math.min(400,o-c)),r.style.gridTemplateColumns=`1fr 4px ${o}px`},()=>{});let l=220;a(i,(c,f)=>{l=Math.max(120,Math.min(500,l-f)),s.style.gridTemplateRows=`1fr 4px ${l}px`},()=>{})}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})}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:Q("directWorkbench.knowledgeTitle")}),s.createDiv({cls:"ai3d-direct-workbench-value",text:r!=null&&r.knowledgeIndexPath?Q("workbench.indexReady"):r!=null&&r.reportNotePath?Q("workbench.noteReady"):Q("workbench.noReportYet")});let a=s.createDiv({cls:"ai3d-direct-workbench-actions"}),o=a.createEl("button",{cls:"ai3d-direct-workbench-action",text:Q("workbench.generateNoteAction"),attr:{type:"button","data-ai3d-action":"generate-note"}});o.addEventListener("click",()=>{o.disabled=!0,Promise.resolve().then(()=>(kb(),Gb)).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:Q("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 yc.TFile&&this.app.workspace.getLeaf(!0).openFile(h,{active:!0})});let c=a.createEl("button",{cls:"ai3d-direct-workbench-action",text:Q("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 yc.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:Q("directWorkbench.registeredTitle")});let l=o.createSpan({cls:"ai3d-direct-workbench-value",text:Q("directWorkbench.registeredLoading")}),c=a.createDiv({cls:"ai3d-direct-workbench-registered-body"}),f=p=>{l.setText(""),c.empty(),c.createDiv({cls:"ai3d-direct-workbench-empty",text:Q(p)})},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(()=>(kb(),Gb)).then(async({collectRegisteredPartsFromProfiles:p})=>{var S;let _=this.ps.store.getState(),g=await p(this.app,_.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=Bb({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 C,y,D,O,V,N;return((D=(y=(C=I.registeredMatches)==null?void 0:C[0])==null?void 0:y.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(Ki("directWorkbench.registeredCount",{count:String(A.length)})),c.empty();let E=c.createDiv({cls:"ai3d-direct-workbench-match-list"});for(let R of A){let I=(S=R.registeredMatches)==null?void 0:S[0];if(!I)continue;let y=fq(E,R.name,I).querySelector("[data-ai3d-action='open-registered-part']");y instanceof HTMLButtonElement&&y.addEventListener("click",()=>{let D=y.getAttribute("data-ai3d-target-path")||void 0;if(!D)return;let O=this.app.vault.getAbstractFileByPath(D);O instanceof yc.TFile&&this.app.workspace.getLeaf(!0).openFile(O,{active:!0})})}}).catch(p=>{console.warn("[AI3D] Registered part match preview failed:",p),s===this.loadGeneration&&this.workbenchModelPath===i&&a.isConnected&&f("directWorkbench.registeredUnavailable")})}async createPreviewWithFallback(t,i,r,s,a){let o=await gd(qN,{surface:"direct-view",modelPath:a},t,s);try{let l=await o.preview.loadModel(i.slice(0),r.ext,c=>Ga(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.requireWorkbenchFeatures||!s.allowWorkbenchFeaturesOnThree)throw l;console.warn("[AI3D] Experimental Three workbench failed; falling back to Babylon:",l);let c={...s,allowWorkbenchFeaturesOnThree:!1},f=await gd(qN,{surface:"direct-view-fallback",modelPath:a},t,c);try{let h=await f.preview.loadModel(i.slice(0),r.ext,d=>Ga(this.app,d),r.path);return{preview:f.preview,summary:h,route:f.route}}catch(h){throw f.preview.destroy(),I_e(l)?l:h}}}};var Xq=require("obsidian");Mo();os();var Xb=class extends Xq.FuzzySuggestModal{constructor(e,t){super(e),this.onChoose=t,this.setPlaceholder(Q("modal.selectModel"))}getItems(){return this.app.vault.getFiles().filter(e=>{let t=e.extension.toLowerCase();return gl(t)})}getItemText(e){return e.path}onChooseItem(e){this.onChoose(e)}};os();dv();Bs();var pv=".markdown-preview-view, .markdown-source-view",_v=[".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(", ");function C_e(n){if(n.length===0)return"var(--interactive-accent)";if(n.length===1)return n[0];let e=100/n.length;return`linear-gradient(135deg, ${n.map((t,i)=>{let r=Math.round(i*e),s=Math.round((i+1)*e);return`${t} ${r}% ${s}%`}).join(", ")})`}function QN(n){return n.map(e=>`${e.pinId}:${e.modelPath}:${e.color}`).sort().join("|")}function ZN(n){return Array.from(n.entries()).map(([e,t])=>`${e}=>${QN(t)}`).sort().join("||")}function Yq(n){let e=new Map,t=()=>{let E=new Map,S=n.getModelAssetProfiles();for(let[R,I]of Object.entries(S))for(let C of I.annotations)if(C.headingRef&&C.id){let y=hv(C.headingRef);if(!y)continue;let D=E.get(y);D||(D=[],E.set(y,D)),D.push({pinId:C.id,modelPath:R,color:C.color})}return E},i=E=>hv(Array.from(E.childNodes).map(S=>{var R;return S.instanceOf(Element)&&S.classList.contains("ai3d-heading-pin-badge")?"":(R=S.textContent)!=null?R:""}).join(" ")),r=E=>{let S=e.get(E);S&&(E.removeEventListener("mouseover",S.handler),S.badge.remove(),delete E.dataset.pinBound,e.delete(E))},s=(E,S)=>{if(S.length===0){r(E);return}let R=QN(S),I=e.get(E);if((I==null?void 0:I.signature)===R)return;I&&r(E),E.dataset.pinBound=R;let C=E.createSpan({cls:"ai3d-heading-pin-badge"}),y=[...new Set(S.map(w=>w.color).filter(Boolean))],D=C.createSpan({cls:"ai3d-heading-pin-badge-swatch"});if(D.style.background=C_e(y),D.title=S.length>1?Q("headingPin.showMultiple"):Q("headingPin.showSingle"),D.setAttribute("role","button"),D.setAttribute("tabindex","0"),S.length>1){let w=C.createSpan({cls:"ai3d-heading-pin-badge-count"});w.textContent=`\xD7${S.length}`}let O=[...new Set(S.map(w=>qr(w.modelPath)))];C.title=Ki("headingPin.linkedTo",{models:O.join(", ")});let V=w=>{w==null||w.stopPropagation(),w==null||w.preventDefault();for(let B of S)activeDocument.dispatchEvent(new CustomEvent("ai3d-pin-highlight",{detail:{pinId:B.pinId}}))};D.addEventListener("click",w=>{V(w)}),D.addEventListener("keydown",w=>{w.instanceOf(KeyboardEvent)&&(w.key!=="Enter"&&w.key!==" "||V(w))}),C.addEventListener("click",w=>{w.stopPropagation()}),E.appendChild(C);let N=()=>{for(let w of S)activeDocument.dispatchEvent(new CustomEvent("ai3d-pin-highlight",{detail:{pinId:w.pinId}}))};E.addEventListener("mouseover",N),e.set(E,{badge:C,handler:N,signature:R})},a=(E,S)=>{var I;let R=i(E);s(E,(I=S.get(R))!=null?I:[])},o=E=>{var S;for(let[R,I]of Array.from(e.entries())){if(!R.isConnected){r(R);continue}let C=(S=E.get(i(R)))!=null?S:[],y=QN(C);(C.length===0||I.signature!==y)&&s(R,C)}},l=(E,S)=>{E.querySelectorAll(_v).forEach(R=>a(R,S))},c=()=>{let E=t();o(E),activeDocument.querySelectorAll(pv).forEach(R=>l(R,E))},f=ZN(t()),h=0,d=(E=0)=>{h&&window.clearTimeout(h),h=window.setTimeout(()=>{h=0,c()},E)},u=n.subscribeStore(()=>{let E=t(),S=ZN(E);S!==f&&(f=S,d())});n.onLayoutChange(()=>{d(200)});let m=E=>E.matches(pv)||E.matches(_v)?!0:!!E.querySelector(pv)||!!E.querySelector(_v),p=E=>E.isConnected&&m(E),_=E=>m(E),g=new Set,v=0,x=()=>{var R,I,C,y,D,O;let E=Array.from(g);g.clear(),v=0;let S=t();o(S);for(let V of E)V.isConnected&&((R=V.matches)!=null&&R.call(V,_v)&&a(V,S),(C=(I=V.querySelectorAll)==null?void 0:I.call(V,_v))==null||C.forEach(N=>a(N,S)),(y=V.matches)!=null&&y.call(V,pv)&&l(V,S),(O=(D=V.querySelectorAll)==null?void 0:D.call(V,pv))==null||O.forEach(N=>l(N,S)));f=ZN(S)},A=new MutationObserver(E=>{let S=!1;for(let R of E){for(let I of Array.from(R.addedNodes))I.instanceOf(HTMLElement)&&p(I)&&(g.add(I),S=!0);for(let I of Array.from(R.removedNodes))I.instanceOf(HTMLElement)&&_(I)&&(S=!0)}S&&!v&&(v=window.setTimeout(x,100))});A.observe(activeDocument.body,{childList:!0,subtree:!0}),n.registerCleanup(()=>{u(),A.disconnect(),v&&(window.clearTimeout(v),v=0),h&&(window.clearTimeout(h),h=0);for(let E of Array.from(e.keys()))r(E)}),d(500)}var jt=require("obsidian");$f();os();Zs();cr();var $N=Rv();function y_e(){switch($N==null?void 0:$N.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 Yb=class extends jt.PluginSettingTab{constructor(t,i){super(t,i);this.diagnosticsRunId=0;this.diagnosticsEl=null;this.plugin=i}display(){let{containerEl:t}=this;t.empty(),yp(this.plugin.getSettings().locale),this.diagnosticsEl=null,this.addTitle(t),this.buildLanguageSection(t),this.buildFoldersSection(t),this.buildBehaviorSection(t),this.buildKnowledgeGenerationSection(t),this.buildConvertersSection(t),this.buildPerformanceSection(t)}addTitle(t){new jt.Setting(t).setName(Q("settings.title")).setHeading()}createSecondaryMenu(t,i,r){let s=t.createEl("details",{cls:"ai3d-settings-secondary-menu"});s.createEl("summary",{cls:"ai3d-settings-secondary-menu-summary",text:i});let a=s.createDiv({cls:"ai3d-settings-secondary-menu-body"});return a.createEl("p",{cls:"setting-item-description",text:r}),a}resetCommandDiagnostics(){this.diagnosticsEl&&(this.diagnosticsRunId++,this.diagnosticsEl.empty(),this.diagnosticsEl.createEl("p",{text:Q("settings.diagnostics.idle")}))}buildLanguageSection(t){new jt.Setting(t).setName(Q("settings.language")).setHeading(),new jt.Setting(t).setName(Q("settings.language")).setDesc(Q("settings.language.desc")).addDropdown(i=>i.addOption("en","English").addOption("zh-CN","\u7B80\u4F53\u4E2D\u6587").setValue(this.plugin.getSettings().locale).onChange(r=>{this.plugin.updateSettings({locale:r}),this.display()}))}buildFoldersSection(t){new jt.Setting(t).setName(Q("settings.folders")).setHeading(),new jt.Setting(t).setName(Q("settings.sourceModelFolder")).setDesc(Q("settings.sourceModelFolder.desc")).addText(i=>i.setPlaceholder(Oc.sourceModelFolder).setValue(this.plugin.getSettings().sourceModelFolder).onChange(r=>{this.plugin.updateSettings({sourceModelFolder:r})})),new jt.Setting(t).setName(Q("settings.reportFolder")).setDesc(Q("settings.reportFolder.desc")).addText(i=>i.setPlaceholder(Oc.reportFolder).setValue(this.plugin.getSettings().reportFolder).onChange(r=>{this.plugin.updateSettings({reportFolder:r})})),new jt.Setting(t).setName(Q("settings.partFolder")).setDesc(Q("settings.partFolder.desc")).addText(i=>i.setPlaceholder(Oc.partFolder).setValue(this.plugin.getSettings().partFolder).onChange(r=>{this.plugin.updateSettings({partFolder:r})})),new jt.Setting(t).setName(Q("settings.snapshotFolder")).setDesc(Q("settings.snapshotFolder.desc")).addText(i=>i.setPlaceholder(Oc.snapshotFolder).setValue(this.plugin.getSettings().snapshotFolder).onChange(r=>{this.plugin.updateSettings({snapshotFolder:r})}))}buildBehaviorSection(t){new jt.Setting(t).setName(Q("settings.behavior")).setHeading(),new jt.Setting(t).setName(Q("settings.autoGenerateKnowledgeNotes")).setDesc(Q("settings.autoGenerateKnowledgeNotes.desc")).addToggle(i=>i.setValue(this.plugin.getSettings().autoGenerateKnowledgeNotes).onChange(r=>{this.plugin.updateSettings({autoGenerateKnowledgeNotes:r})})),new jt.Setting(t).setName(Q("settings.annotationPreviewMode")).setDesc(Q("settings.annotationPreviewMode.desc")).addDropdown(i=>i.addOption("plain-text",Q("settings.annotationPreviewMode.plainText")).addOption("markdown",Q("settings.annotationPreviewMode.markdown")).setValue(this.plugin.getSettings().annotationPreviewMode).onChange(r=>{this.plugin.updateSettings({annotationPreviewMode:r})})),new jt.Setting(t).setName(Q("settings.annotationDisplayMode")).setDesc(Q("settings.annotationDisplayMode.desc")).addDropdown(i=>i.addOption("snippet",Q("settings.annotationDisplayMode.snippet")).addOption("surface",Q("settings.annotationDisplayMode.surface")).addOption("dot",Q("settings.annotationDisplayMode.dot")).setValue(this.plugin.getSettings().annotationDisplayMode).onChange(r=>{this.plugin.updateSettings({annotationDisplayMode:r})})),new jt.Setting(t).setName(Q("settings.previewRendererRollout")).setDesc(Q("settings.previewRendererRollout.desc")).addDropdown(i=>i.addOption("babylon-safe",Q("settings.previewRendererRollout.babylonSafe")).addOption("three-readonly-glb",Q("settings.previewRendererRollout.readonly")).addOption("three-direct-glb",Q("settings.previewRendererRollout.direct")).setValue(this.plugin.getSettings().previewRendererRollout).onChange(r=>{this.plugin.updateSettings({previewRendererRollout:r})})),new jt.Setting(t).setName(Q("settings.useThreeRenderer")).setDesc(Q("settings.useThreeRenderer.desc")).addToggle(i=>i.setValue(this.plugin.getSettings().useThreeRenderer).onChange(r=>{this.plugin.updateSettings({useThreeRenderer:r})})),new jt.Setting(t).setName(Q("settings.experimentalThreeWorkbench")).setDesc(Q("settings.experimentalThreeWorkbench.desc")).addToggle(i=>i.setValue(this.plugin.getSettings().experimentalThreeWorkbench).onChange(r=>{this.plugin.updateSettings({experimentalThreeWorkbench:r})})),new jt.Setting(t).setName(Q("settings.autoRotateDefault")).setDesc(Q("settings.autoRotateDefault.desc")).addToggle(i=>i.setValue(this.plugin.getSettings().autoRotateDefault).onChange(r=>{this.plugin.updateSettings({autoRotateDefault:r})})),new jt.Setting(t).setName(Q("settings.snapshotNaming")).setDesc(Q("settings.snapshotNaming.desc")).addDropdown(i=>i.addOption("model-name",Q("settings.snapshotNaming.modelName")).addOption("timestamp",Q("settings.snapshotNaming.timestamp")).setValue(this.plugin.getSettings().snapshotNaming).onChange(r=>{this.plugin.updateSettings({snapshotNaming:r})})),new jt.Setting(t).setName(Q("settings.logLevel")).setDesc(Q("settings.logLevel.desc")).addDropdown(i=>i.addOption("debug","Debug").addOption("info","Info").addOption("warn","Warn").addOption("error","Error").setValue(this.plugin.getSettings().logLevel).onChange(r=>{this.plugin.updateSettings({logLevel:r})}))}buildKnowledgeGenerationSection(t){new jt.Setting(t).setName(Q("settings.knowledgeGeneration")).setHeading(),new jt.Setting(t).setName(Q("settings.analysisMode")).setDesc(Q("settings.analysisMode.desc")).addDropdown(i=>i.addOption("local",Q("settings.analysisMode.local")).addOption("hybrid",Q("settings.analysisMode.hybrid")).addOption("remote",Q("settings.analysisMode.remote")).setValue(this.plugin.getSettings().analysisMode).onChange(r=>{this.plugin.updateSettings({analysisMode:r})})),new jt.Setting(t).setName(Q("settings.serviceBaseUrl")).setDesc(Q("settings.serviceBaseUrl.desc")).addText(i=>i.setPlaceholder("Local draft service URL").setValue(this.plugin.getSettings().serviceBaseUrl).onChange(r=>{this.plugin.updateSettings({serviceBaseUrl:r.trim()})})),new jt.Setting(t).setName(Q("settings.sendGeometrySummaryToRemote")).setDesc(Q("settings.sendGeometrySummaryToRemote.desc")).addToggle(i=>i.setValue(this.plugin.getSettings().sendGeometrySummaryToRemote).onChange(r=>{this.plugin.updateSettings({sendGeometrySummaryToRemote:r})})),new jt.Setting(t).setName(Q("settings.sendPreviewImagesToRemote")).setDesc(Q("settings.sendPreviewImagesToRemote.desc")).addToggle(i=>i.setValue(this.plugin.getSettings().sendPreviewImagesToRemote).onChange(r=>{this.plugin.updateSettings({sendPreviewImagesToRemote:r})})),new jt.Setting(t).setName(Q("settings.sendRawModelToRemote")).setDesc(Q("settings.sendRawModelToRemote.desc")).addToggle(i=>i.setValue(this.plugin.getSettings().sendRawModelToRemote).onChange(r=>{this.plugin.updateSettings({sendRawModelToRemote:r})}))}buildConvertersSection(t){if(new jt.Setting(t).setName(Q("settings.converters")).setHeading(),pr()){t.createEl("p",{cls:"setting-item-description",text:Q("settings.mobileSupport.desc")});return}let i=this.createSecondaryMenu(t,Q("settings.converterMenu"),Q("settings.converterMenu.desc"));this.buildConverterToggles(i);let r=this.createSecondaryMenu(t,Q("settings.environmentInspector"),Q("settings.environmentInspector.desc"));this.buildConverterPaths(r),this.buildDiagnostics(r)}buildConverterToggles(t){new jt.Setting(t).setName(Q("settings.enableCad")).setDesc(Q("settings.enableCad.desc")).addToggle(i=>{let r=this.plugin.getSettings().enabledConverterIds.includes("freecad");return i.setValue(r).onChange(s=>{let a=this.plugin.getSettings().enabledConverterIds,o=s?Array.from(new Set([...a,"freecad"])):a.filter(l=>l!=="freecad");this.plugin.updateSettings({enabledConverterIds:o})})}),new jt.Setting(t).setName(Q("settings.enableObj2gltf")).setDesc(Q("settings.enableObj2gltf.desc")).addToggle(i=>{let r=this.plugin.getSettings().enabledConverterIds.includes("obj2gltf");return i.setValue(r).onChange(s=>{let a=this.plugin.getSettings().enabledConverterIds,o=s?Array.from(new Set([...a,"obj2gltf"])):a.filter(l=>l!=="obj2gltf");this.plugin.updateSettings({enabledConverterIds:o})})}),new jt.Setting(t).setName(Q("settings.preferObj2gltf")).setDesc(Q("settings.preferObj2gltf.desc")).addToggle(i=>i.setValue(this.plugin.getSettings().preferObj2gltfForObj).onChange(r=>{this.plugin.updateSettings({preferObj2gltfForObj:r})})),new jt.Setting(t).setName(Q("settings.enableFbx2gltf")).setDesc(Q("settings.enableFbx2gltf.desc")).addToggle(i=>{let r=this.plugin.getSettings().enabledConverterIds.includes("fbx2gltf");return i.setValue(r).onChange(s=>{let a=this.plugin.getSettings().enabledConverterIds,o=s?Array.from(new Set([...a,"fbx2gltf"])):a.filter(l=>l!=="fbx2gltf");this.plugin.updateSettings({enabledConverterIds:o})})}),new jt.Setting(t).setName(Q("settings.enableMesh")).setDesc(Q("settings.enableMesh.desc")).addToggle(i=>{let r=this.plugin.getSettings().enabledConverterIds.includes("assimp");return i.setValue(r).onChange(s=>{let a=this.plugin.getSettings().enabledConverterIds,o=s?Array.from(new Set([...a,"assimp"])):a.filter(l=>l!=="assimp");this.plugin.updateSettings({enabledConverterIds:o})})}),new jt.Setting(t).setName(Q("settings.enableSldprt")).setDesc(Q("settings.enableSldprt.desc")).addToggle(i=>{let r=this.plugin.getSettings().enabledConverterIds.includes("sldprt");return i.setValue(r).onChange(s=>{let a=this.plugin.getSettings().enabledConverterIds,o=s?Array.from(new Set([...a,"sldprt"])):a.filter(l=>l!=="sldprt");this.plugin.updateSettings({enabledConverterIds:o})})})}buildConverterPaths(t){let i=y_e();new jt.Setting(t).setName(Q("settings.paths")).setHeading(),new jt.Setting(t).setName(Q("settings.pythonCmd")).setDesc(Q("settings.pythonCmd.desc")).addText(r=>r.setPlaceholder(i.python).setValue(this.plugin.getSettings().freecadCommand).onChange(s=>{this.plugin.updateSettings({freecadCommand:s.trim()}),this.resetCommandDiagnostics()})),new jt.Setting(t).setName(Q("settings.freecadCmd")).setDesc(Q("settings.freecadCmd.desc")).addText(r=>r.setPlaceholder(i.freecad).setValue(this.plugin.getSettings().freecadcmdCommand).onChange(s=>{this.plugin.updateSettings({freecadcmdCommand:s.trim()}),this.resetCommandDiagnostics()})),new jt.Setting(t).setName(Q("settings.obj2gltfCmd")).setDesc(Q("settings.obj2gltfCmd.desc")).addText(r=>r.setPlaceholder(i.obj2gltf).setValue(this.plugin.getSettings().obj2gltfCommand).onChange(s=>{this.plugin.updateSettings({obj2gltfCommand:s.trim()}),this.resetCommandDiagnostics()})),new jt.Setting(t).setName(Q("settings.fbx2gltfCmd")).setDesc(Q("settings.fbx2gltfCmd.desc")).addText(r=>r.setPlaceholder(i.fbx2gltf).setValue(this.plugin.getSettings().fbx2gltfCommand).onChange(s=>{this.plugin.updateSettings({fbx2gltfCommand:s.trim()}),this.resetCommandDiagnostics()})),new jt.Setting(t).setName(Q("settings.assimpCmd")).setDesc(Q("settings.assimpCmd.desc")).addText(r=>r.setPlaceholder(i.python).setValue(this.plugin.getSettings().assimpCommand).onChange(s=>{this.plugin.updateSettings({assimpCommand:s.trim()}),this.resetCommandDiagnostics()}))}buildDiagnostics(t){new jt.Setting(t).setName(Q("settings.diagnostics")).setDesc(Q("settings.diagnostics.desc")).addButton(r=>r.setButtonText(Q("settings.diagnostics.checkNow")).onClick(async()=>{r.setDisabled(!0),r.setButtonText(Q("settings.diagnostics.checking")),this.diagnosticsEl&&await this.renderCommandDiagnostics(this.diagnosticsEl),r.setButtonText(Q("settings.diagnostics.checkNow")),r.setDisabled(!1),new jt.Notice(Q("settings.diagnostics.refreshed"))})),this.diagnosticsEl=t.createDiv({cls:"ai3d-settings-diagnostics"}),this.resetCommandDiagnostics()}buildPerformanceSection(t){new jt.Setting(t).setName(Q("settings.performance")).setHeading(),new jt.Setting(t).setName(Q("settings.canvasHeight")).setDesc(Q("settings.canvasHeight.desc")).addSlider(i=>i.setLimits(200,800,25).setValue(this.plugin.getSettings().defaultCanvasHeight).setDynamicTooltip().onChange(r=>{this.plugin.updateSettings({defaultCanvasHeight:r})})),new jt.Setting(t).setName(Q("settings.autoRotateSpeed")).setDesc(Q("settings.autoRotateSpeed.desc")).addSlider(i=>i.setLimits(.1,2,.1).setValue(this.plugin.getSettings().autoRotateSpeed).setDynamicTooltip().onChange(r=>{this.plugin.updateSettings({autoRotateSpeed:r})})),new jt.Setting(t).setName(Q("settings.renderQuality")).setDesc(Q("settings.renderQuality.desc")).addDropdown(i=>i.addOption("low","Low").addOption("medium","Medium").addOption("high","High").setValue(this.plugin.getSettings().renderQuality).onChange(r=>{this.plugin.updateSettings({renderQuality:r})})),new jt.Setting(t).setName(Q("settings.renderScale")).setDesc(Q("settings.renderScale.desc")).addSlider(i=>i.setLimits(.25,2,.25).setValue(this.plugin.getSettings().renderScale).setDynamicTooltip().onChange(r=>{this.plugin.updateSettings({renderScale:r})}))}async renderCommandDiagnostics(t){let i=++this.diagnosticsRunId;t.empty(),t.createEl("p",{text:Q("settings.diagnostics.checkingAvailability")});let r=await Rb(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?Q("settings.diagnostics.available"):Q("settings.diagnostics.notFound")}`});let s=[`${Q("settings.diagnostics.sourceLabel")}: ${xb(i.source)}`,`${Q("settings.diagnostics.commandLabel")}: ${i.command}`,i.resolvedPath&&i.resolvedPath!==i.command?`${Q("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 Q("settings.diagnostics.cadPythonCheck");case"mesh-python":return Q("settings.diagnostics.meshPythonCheck");case"freecadcmd-cli":return Q("settings.diagnostics.freecadCmdCheck");case"obj2gltf-cli":return Q("settings.diagnostics.obj2gltfCheck");case"fbx2gltf-cli":return Q("settings.diagnostics.fbx2gltfCheck")}})(),s=i.ok?Q("settings.diagnostics.selfCheckOk"):Q("settings.diagnostics.selfCheckFailed");t.createDiv({text:`${Q("settings.diagnostics.selfCheckLabel")}: ${r} - ${s}`}),i.detail&&t.createDiv({text:i.detail})}};$f();Tn();os();Zs();var EZ=Wi("main");function Sv(n,e){return()=>{n().catch(t=>{EZ.error(`Command ${e} failed`,{error:String(t)}),new ws.Notice(`AI3D: ${e} failed \u2014 ${String(t)}`,5e3)})}}var jb=class extends ws.Plugin{getSettings(){return this.ps.store.getState().settings}updateSettings(e){this.ps.updateSettings(e),vN(this.getSettings().logLevel),yp(this.getSettings().locale)}async onload(){var l;if(this.ps=vw(this),await this.ps.load(),this.convertedAssetCache=mw(this.ps.store.getState().convertedAssetRecords,c=>this.ps.setConvertedAssetRecords(c)),vN(this.getSettings().logLevel),!this.ps.localeLoadedFromSaved){let f=((l=navigator.language)!=null?l:"en").startsWith("zh")?"zh-CN":"en";this.updateSettings({locale:f})}yp(this.getSettings().locale),this.addRibbonIcon("box",Q("main.commandImportModel"),()=>this.importModel()),this.addCommand({id:"import-model",name:Q("main.commandImportModel"),callback:()=>this.importModel()}),this.addCommand({id:"generate-note",name:Q("main.commandGenerateNote"),callback:Sv(()=>this.generateNote(),"generate note")}),this.addCommand({id:"open-knowledge-index",name:Q("main.commandOpenKnowledgeIndex"),callback:Sv(()=>this.openKnowledgeIndex(),"open knowledge index")}),this.addCommand({id:"clear-conversion-cache",name:Q("main.commandClearConversionCache"),callback:Sv(()=>Promise.resolve(this.clearConversionCache()),"clear conversion cache")}),this.addCommand({id:"check-converters",name:Q("main.commandCheckConverters"),callback:Sv(()=>this.checkConverterCommands(),"check converters")}),this.addCommand({id:"copy-diagnostics-report",name:Q("main.commandCopyDiagnostics"),callback:Sv(()=>this.copyDiagnosticsReport(),"copy diagnostics")}),this.addSettingTab(new Yb(this.app,this)),this.registerView(zb,c=>new Hb(c,()=>this.getSettings(),this.convertedAssetCache,this.ps)),this.registerExtensions(vl(),zb);let{registerCodeBlockProcessor:e,registerGridCodeBlockProcessor:t}=await Promise.resolve().then(()=>(fZ(),cZ)),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(()=>(pZ(),mZ)),o=a(this.app,()=>this.getSettings(),this.convertedAssetCache,i);for(let c of o)this.registerEditorExtension(c);Yq({subscribeStore:c=>this.ps.store.subscribe(c),getModelAssetProfiles:()=>this.ps.store.getState().modelAssetProfiles,registerCleanup:c=>this.register(c),onLayoutChange:c=>{this.registerEvent(this.app.workspace.on("layout-change",c))}})}onunload(){this.ps.save().catch(e=>console.error("[AI3D] unload save failed:",e))}importModel(){new Xb(this.app,e=>{let t=e.extension.toLowerCase();gl(t)&&this.openModelFile(e)}).open()}async openModelFile(e){this.ps.setCurrentModel(e.path,null),await this.app.workspace.getLeaf(!0).openFile(e,{active:!0})}async generateNote(){let{generateKnowledgeNote:e}=await Promise.resolve().then(()=>(kb(),Gb));await e(this.app,this.ps)}async openKnowledgeIndex(){let e=this.resolveKnowledgeIndexPath();if(!e){new ws.Notice(Q("workbench.noIndexYet"));return}let t=this.app.vault.getAbstractFileByPath(e);t instanceof ws.TFile?await this.app.workspace.getLeaf(!0).openFile(t,{active:!0}):new ws.Notice(Ki("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 ws.Notice("AI 3d conversion cache cleared.")}async checkConverterCommands(){if(pr()){new ws.Notice(Q("main.converterDiagnosticsMobileUnavailable"),8e3);return}let e=await Rb(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 ws.Notice(`AI 3D converter diagnostics: all commands available (${t.join(", ")}).`,8e3);return}new ws.Notice(`AI 3D converter diagnostics: available ${t.join(", ")||"none"}; missing ${i.join(", ")}.`,1e4)}async copyDiagnosticsReport(){let{buildDiagnosticsReport:e}=await Promise.resolve().then(()=>(vZ(),gZ)),t=e({manifest:this.manifest,state:this.ps.store.getState()});try{await navigator.clipboard.writeText(t),new ws.Notice(Q("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 ws.Notice(Q("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(r=>{EZ.warn("Failed to create vault folder",{path:t,error:String(r)})})}}; +`)}async function U_e(n){let e=typeof performance!="undefined"?performance.now():Date.now(),t=n.app.vault.getAbstractFileByPath(n.indexPath),i=null;if(t instanceof _l.TFile){let r=await n.app.vault.read(t),s=iw(n);await n.app.vault.modify(t,qq(r,s)),i=t}else i=await Yq(n.app,n.indexPath,Zq(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 V_e(n,e,t={}){var o,l,c,f,h,d,u,m,p,_,g;if(qN!==null)return;let i;qN=new Promise(v=>{i=v});let r=null,s=null,a=0;try{let v=e.store.getState(),x=v.currentModelPath;if(!x)return;let T=v.modelAssetProfiles[x],E=v.modelPreview,S=qr(x)||"model",R=v.settings.reportFolder,I=`${R}/${S} Report.md`,C=`${R}/${S} Analysis.json`,y=`${R}/${S} Index.md`,D=((o=v.lastKnowledgeGeneration)==null?void 0:o.status)==="pending"?`Previous knowledge generation for ${v.lastKnowledgeGeneration.modelPath} did not complete. This run can replace the pending marker if it finishes.`:null;D&&new _l.Notice(D),r=KN({modelPath:x,reportNotePath:I,analysisSidecarPath:C,knowledgeIndexPath:y,status:"pending"}),e.setLastKnowledgeGeneration(r);let O=(f=(c=(l=t.preview)==null?void 0:l.getModelEvidence)==null?void 0:c.call(l))!=null?f:null,V=await D_e(n,t.preview,v.settings.previewFolder,S);a=V.paths.length;let N=await jq(n,v.modelAssetProfiles,x);s=kb({modelPath:x,profile:T,preview:E,evidence:O,previewImages:V.paths,registeredParts:N}),D&&(s.warnings=[...s.warnings,D]);let w=s;V.warning&&(w.warnings=[...w.warnings,V.warning],w.draftingInput&&(w.draftingInput={...w.draftingInput,evidence:{...w.draftingInput.evidence,warnings:[...w.draftingInput.evidence.warnings,V.warning]}})),w.localDraft=zq({baseName:S,sourcePath:x,profile:T,preview:E,analysis:w}),w.pipeline.push({stage:"draft",durationMs:0,status:"success"}),await B_e({app:n,partFolder:v.settings.partFolder,baseName:S,notePath:I,sourcePath:x,analysis:w}),w.draftingInput&&(w.draftingInput={...w.draftingInput,partCandidates:w.draftingInput.partCandidates.map(z=>{let Y=w.parts.find(me=>me.partId===z.partId);return Y!=null&&Y.notePath?{...z,notePath:Y.notePath}:z}),annotationLinks:[...(h=w.annotationLinks)!=null?h:[]]});let U=Lq(v.settings,w.draftingInput,Tp);if(U.enabled)try{let z=await Dq(U);z?(w.remoteDraft=z,w.pipeline.push({stage:"remoteDraft",durationMs:0,status:"success"})):w.pipeline.push({stage:"remoteDraft",durationMs:0,status:"skipped"})}catch(z){let Y=z instanceof Error?z.message:String(z);w.warnings=[...w.warnings,`Remote draft failed: ${Y}`],w.pipeline.push({stage:"remoteDraft",durationMs:0,status:"failed"})}else w.pipeline.push({stage:"remoteDraft",durationMs:0,status:"skipped"});if(await tw(n,R),!await U_e({app:n,baseName:S,notePath:I,sourcePath:x,analysisSidecarPath:C,indexPath:y,analysis:w,preview:E,profile:T}))throw new Error(`Unable to write knowledge index: ${y}`);let te=Xq({baseName:S,notePath:I,sourcePath:x,profile:T,preview:E,analysis:w,analysisSidecarPath:C,knowledgeIndexPath:w.knowledgeIndexPath});if(!await wq(n,C,`${JSON.stringify(w,null,2)} +`))throw new Error(`Unable to write analysis sidecar: ${C}`);let J=await wq(n,I,te);if(!J)throw new Error(`Unable to write knowledge report: ${I}`);e.updateModelProfile(x,z=>({analysisVersion:Tp,registeredParts:w.parts,reportNotePath:J.path,analysisSidecarPath:C,knowledgeIndexPath:w.knowledgeIndexPath,previewImagePaths:V.paths})),e.setLastKnowledgeGeneration(KN({modelPath:x,reportNotePath:J.path,analysisSidecarPath:C,knowledgeIndexPath:w.knowledgeIndexPath,partNoteCount:(u=(d=w.partNotePaths)==null?void 0:d.length)!=null?u:0,previewImageCount:w.previewImages.length,status:"success",warningCount:w.warnings.length})),await n.workspace.getLeaf(!0).openFile(J,{active:!0}),new _l.Notice(`Knowledge note updated: ${J.path}`)}catch(v){throw r&&e.setLastKnowledgeGeneration(KN({...r,partNoteCount:(p=(m=s==null?void 0:s.partNotePaths)==null?void 0:m.length)!=null?p:0,previewImageCount:(_=s==null?void 0:s.previewImages.length)!=null?_:a,status:"failed",warningCount:Math.max(1,(g=s==null?void 0:s.warnings.length)!=null?g:0)})),v}finally{i(),qN=null}}var _l,f_e,Bq,Uq,ZN,qN,zb=M(()=>{"use strict";_l=require("obsidian");aT();tT();An();ks();XN();Oq();f_e=Wi("knowledge-note"),Bq=8,Uq="",ZN="";qN=null});function Io(n,e,t=2.5){var i;if(typeof n=="string"){let r=(i=ow[n])!=null?i:ow.iso;return{alpha:r.alpha,beta:r.beta,radiusMultiplier:t}}return{alpha:n,beta:e!=null?e:Math.PI/3,radiusMultiplier:t}}function gl(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 cw(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 ow,Id=M(()=>{"use strict";ow={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 eZ,tZ=M(()=>{"use strict";Id();eZ={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=Sv(n,t),s=n.length<=3?n.length:2,a=Math.ceil(n.length/s),o=gl(s,a),l=n.map((c,f)=>({modelIndex:f,camera:Io(i),viewport:o[f]}));return{placements:r,cells:l}}}});var iZ,rZ=M(()=>{"use strict";Id();iZ={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=gl(a,o),c=s.map((f,h)=>({modelIndex:0,camera:Io(f,void 0,i),viewport:l[h]}));return{placements:r,cells:c}}}});var nZ,sZ=M(()=>{"use strict";Id();nZ={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=cw(n,t),s=Math.min(n.length,4),a=Math.ceil(n.length/s),o=gl(s,a),l=n.map((c,f)=>({modelIndex:f,camera:Io(i),viewport:o[f]}));return{placements:r,cells:l}}}});var aZ,oZ=M(()=>{"use strict";Id();aZ={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=Sv(n,t),s=lw(n.length),a=n.map((o,l)=>({modelIndex:l,camera:Io(i),viewport:s[l]}));return{placements:r,cells:a}}}});function fw(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";lZ={name:"compose",description:"Combine multiple presets into one layout",minModels:1,maxModels:32,compute(n,e,t){return null}}});var cZ,fZ=M(()=>{"use strict";Id();cZ={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,p=(u-(a-1)/2)*t;return{path:f.path,position:[m,0,p],color:f.color,wireframe:f.wireframe}}),l=gl(1,1,0),c=[{modelIndex:0,camera:Io(i,void 0,3+Math.max(s,a)*.5),viewport:l[0]}];return{placements:o,cells:c}}}});function Rp(n){hZ.set(n.name,n)}function dw(n){return hZ.get(n)}var hZ,dZ=M(()=>{"use strict";tZ();rZ();sZ();oZ();hw();fZ();Id();hw();hZ=new Map;Rp(eZ);Rp(iZ);Rp(nZ);Rp(aZ);Rp(lZ);Rp(cZ)});var _Z={};tt(_Z,{registerCodeBlockProcessor:()=>j_e,registerGridCodeBlockProcessor:()=>Z_e});async function mZ(n,e,t,i){var h,d,u;let r=typeof e=="string"?{path:e}:e,s=Ud(n,r.path);if(!s)throw new Error(Ki("workbench.fileNotFound",{path:r.path}));let a=(d=(h=s.split(".").pop())==null?void 0:h.toLowerCase())!=null?d:"";if(!vl(a))throw Cp(a)?new Error(Q("codeBlock.splatDisabled")):new Error(Ki("codeBlock.unsupportedFormat",{ext:`.${a}`,formats:El().join(", ")}));let o=(u=eh(n,s))!=null?u:void 0,l=vd(t),c=await Td({path:s,absolutePath:o,preferConversionExts:Ad(t),conversionManager:l,convertedAssetCache:i}),f=uv(c);return{sourcePath:s,effectivePath:f.path,effectiveExt:f.ext,warnings:f.warnings,model:{...r,path:f.path}}}async function K_e(n,e,t,i){let r=[];for(let s of e.models){let a=await mZ(n,s,t,i);r.push(a.model)}return{...e,models:r}}function pZ(n){pr()&&n.createDiv({cls:"ai3d-mobile-mode-hint ai3d-mobile-mode-hint--inline",text:Q("codeBlock.mobileHint")})}function j_e(n,e,t,i){return{id:"3d",handler:(r,s,a)=>{var C,y;let o=r.trim();if(!o){s.createDiv({cls:"ai3d-inline-empty",text:Q("codeBlock.noModelPathOrConfig")});return}let l;if(o.startsWith("{")||o.startsWith("["))try{let D=JSON.parse(o);l=q_e(D)}catch(D){let O=s.createDiv({cls:"ai3d-json-error"}),V=String(D).match(/position\s+(\d+)/),N=Ki("codeBlock.jsonParseError",{error:String(D)});if(V){let w=parseInt(V[1],10),U=o.substring(0,w).split(` +`);N+=Ki("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:Q("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=Ud(n,f.path);if(!h){s.createDiv({cls:"ai3d-inline-empty",text:Ki("workbench.fileNotFound",{path:f.path})});return}let d=(y=(C=h.split(".").pop())==null?void 0:C.toLowerCase())!=null?y:"";if(!vl(d)){s.createDiv({cls:"ai3d-inline-empty",text:Cp(d)?Q("codeBlock.splatDisabled"):Ki("codeBlock.unsupportedFormat",{ext:`.${d}`,formats:El().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 p=m.createEl("canvas",{cls:"ai3d-canvas-full"});Ap(p,"inline",h),m.appendChild(p);let _=null,g=null,v=!0,x=!1,T=!1;xp(p,()=>x?null:_);let E=hv(s,m,n,()=>_,()=>h,()=>{x||(x=!0,S.disconnect(),I.disconnect(),g==null||g.destroy(),g=null,_==null||_.destroy(),_=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"});pZ(s);let S=new MutationObserver(()=>{x||s.contains(m)||(x=!0,S.disconnect(),I.disconnect(),g==null||g.destroy(),g=null,_==null||_.destroy(),_=null)});S.observe(s,{childList:!0});async function R(){var O,V,N,w,U,W,te;if(T||x||!h)return;T=!0;let D=xd(m);try{let $=(O=eh(n,h))!=null?O:void 0,J=vd(u);D.setPhaseKey("loading.preparingModel");let z=await Td({path:h,absolutePath:$,preferConversionExts:Ad(u),conversionManager:J,convertedAssetCache:t}),Y=uv(z),me=(V=i==null?void 0:i(h))!=null?V:[],xe={ext:Y.ext,annotationMode:me.length>0?"readonly":"none",rendererRollout:u.previewRendererRollout,useThreeRenderer:u.useThreeRenderer},{preview:Be}=await gd(uZ,{surface:"code-block",modelPath:h},p,xe);_=Be,E.syncCapabilities(),D.setPhaseKey("loading.loadingModel");let ae=await Ga(n,Y.path),ve=async ue=>Ga(n,ue);if(x){D.hide();return}let ne=await _.loadModel(ae,Y.ext,ve,Y.path);if(D.setProgress(100),Sp(m,ne),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}),_.applyConfig(l),(w=_.setRenderQuality)==null||w.call(_,u.renderQuality,u.renderScale),E.syncCapabilities(),me.length>0&&lv(_)){let ue=_.getAnnotationProvider();ue.canvas&&(g=new Fc(ue,m,"readonly",me,void 0,vp(n),void 0,{app:n,previewMode:u.annotationPreviewMode,displayMode:u.annotationDisplayMode}),E.showAnnotateButton(),E.updateAnnotationBadge(me.length))}d==="stl"&&f.color&&((U=_.setSTLColor)==null||U.call(_,f.color)),d==="stl"&&f.wireframe!==void 0&&((W=_.setWireframe)==null||W.call(_,f.wireframe)),(te=_.hasAnimations)!=null&&te.call(_)&&E.showAnimButton(),D.hide()}catch($){x=!0,S.disconnect(),I.disconnect(),D.hide(),_==null||_.destroy(),_=null,m.replaceChildren();let J=_p($);pp($)?console.warn("[AI3D] Inline preview blocked by converter settings:",J.message):console.error("[AI3D] Inline preview failed:",$),Ep(m,J)}}let I=new IntersectionObserver(D=>{for(let O of D)O.isIntersecting&&(I.disconnect(),R())},{rootMargin:"200px"});I.observe(m)}}}function q_e(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 Z_e(n,e,t){return{id:"3dgrid",handler:(i,r,s)=>{let a=i.trim();if(!a){r.createDiv({cls:"ai3d-inline-empty",text:Q("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:Q("codeBlock.noModelsSpecified")});return}let l=e(),c=xd(r);(async()=>{var S,R,I,C;let f=[];for(let y of(S=o.models)!=null?S:[])try{let D=await mZ(n,y,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(y=>y.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(Rq(m),u.appendChild(m),typeof o.rowHeight=="number"){let y=o.preset==="compose"?1:Math.ceil(h.length/((C=o.columns)!=null?C:Math.min(h.length,3)));u.style.setProperty("--grid-height",`${o.rowHeight*y}px`)}let p=null,_=!1,g=!1;bq(m,()=>_?null:p);let v=hv(r,u,n,()=>p,()=>d,()=>{_||(_=!0,x.disconnect(),E.disconnect(),p==null||p.destroy(),p=null,u.remove())},e);pZ(r);let x=new MutationObserver(()=>{_||r.contains(u)||(_=!0,x.disconnect(),E.disconnect(),p==null||p.destroy(),p=null)});x.observe(r,{childList:!0});async function T(){var y,D,O,V,N,w,U;if(!(g||_)){g=!0,c.setPhaseKey("codeBlock.renderingGrid"),c.setProgress(-1);try{let{renderer:W}=await wj(uZ,{surface:"3dgrid",preset:(y=o.preset)!=null?y:"compare",modelCount:(O=(D=o.models)==null?void 0:D.length)!=null?O:0},m);p=W,v.syncCapabilities();let te=p,$=async J=>Ga(n,J);if(o.preset==="compose"){if(!o.sections||o.sections.length===0){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:Q("codeBlock.composeRequiresSections")}),p.destroy(),p=null;return}let J=[];for(let Y of o.sections)try{if(!d){let xe=Y.models[0];if(xe){let Be=typeof xe=="string"?xe:xe.path;d=(V=Ud(n,Be))!=null?V:Be}}let me=await K_e(n,Y,l,t);J.push(me)}catch(me){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:me instanceof Error?me.message:String(me)}),te.destroy(),p=null;return}let z=fw(J,(N=o.direction)!=null?N:"horizontal",Number((w=o.params)==null?void 0:w.gap)||.02,Y=>typeof Y=="string"?null:Y,dw);if(!z){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:Q("codeBlock.composeNoValidSections")}),te.destroy(),p=null;return}await te.loadWithPreset(z,$)}else if(o.preset){let J=dw(o.preset);if(!J){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:Ki("codeBlock.unknownPreset",{preset:o.preset})}),te.destroy(),p=null;return}let z=J.compute(h,(U=o.params)!=null?U:{});if(!z){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:Ki("codeBlock.presetRequiresModels",{preset:o.preset,min:String(J.minModels),max:String(J.maxModels),count:String(h.length)})}),te.destroy(),p=null;return}await te.loadWithPreset(z,$)}else await te.loadModels(h,o,$);if(_){c.hide();return}c.hide()}catch(W){_=!0,x.disconnect(),E.disconnect(),c.hide(),p==null||p.destroy(),p=null,console.error("[AI3D Grid] Failed:",W),u.createDiv({cls:"ai3d-inline-empty",text:Ki("codeBlock.gridFailed",{reason:String(W)})})}}}let E=new IntersectionObserver(y=>{for(let D of y)D.isIntersecting&&(E.disconnect(),T())},{rootMargin:"200px"});E.observe(u)})()}}}var uZ,gZ=M(()=>{"use strict";Co();Ov();Eb();up();ks();dZ();yN();Nb();Fb();kN();Bb();Ub();pv();gp();os();Vb();Qs();An();Wb();uZ=Wi("inline-code-block")});function Tv(n){return createDiv().createDiv(n?{cls:n}:void 0)}function uw(n,e){return createDiv().createEl(n,e?{cls:e}:void 0)}var vZ=M(()=>{"use strict"});var TZ={};tt(TZ,{registerLivePreviewExtension:()=>$_e});function EZ(n,e,t,i,r,s,a,o,l,c,f,h,d,u,m,p){var v,x;let _="state"in n?n.state.doc:n.doc,g=[];for(let T=1;T<=_.lines;T++){let E=_.line(T),S=E.text;if(!S.includes("!["))continue;let R=0;for(;R0&&S[I-1]==="\\"){R=I+3;continue}let C=S.indexOf("]]",I+3);if(C===-1)break;let D=S.slice(I+3,C).split("|"),O=D[0].trim(),V=(x=(v=O.split(".").pop())==null?void 0:v.toLowerCase())!=null?x:"";if(!vl(V)){R=C+2;continue}let N=400,w=300;if(D.length>1){let $=D[1].trim().match(/^(\d+)\s*x\s*(\d+)$/);$&&(N=parseInt($[1],10),w=parseInt($[2],10))}let U=Ud(e,O);if(!U){R=C+2;continue}let W=E.from+I,te=E.from+C+2;g.push(bp.Decoration.replace({widget:new mw(e,U,N,w,t,i,r,s,a,o,l,c,f,h,d,u,m,p),block:!0}).range(W,te)),R=C+2}}return g}function SZ(n){return n.length===0?Md.RangeSet.empty:Md.RangeSet.of(n,!0)}function $_e(n,e,t,i){let r=Md.StateField.define({create(s){let a=e(),o=EZ(s,n,a.autoRotateDefault,a.enabledConverterIds,a.freecadCommand,a.obj2gltfCommand,a.fbx2gltfCommand,a.freecadcmdCommand,a.preferObj2gltfForObj,a.preferFbx2gltfForFbx,a.annotationPreviewMode,a.annotationDisplayMode,a.previewRendererRollout,a.useThreeRenderer,t,i);return SZ(o)},update(s,a){if(a.docChanged){let o=e(),l=EZ(a.state,n,o.autoRotateDefault,o.enabledConverterIds,o.freecadCommand,o.obj2gltfCommand,o.fbx2gltfCommand,o.freecadcmdCommand,o.preferObj2gltfForObj,o.preferFbx2gltfForFbx,o.annotationPreviewMode,o.annotationDisplayMode,o.previewRendererRollout,o.useThreeRenderer,t,i);return SZ(l)}return s.map(a.changes)},provide:s=>bp.EditorView.decorations.from(s)});return[Md.Prec.highest(r)]}var bp,Md,Q_e,mw,AZ=M(()=>{"use strict";bp=require("@codemirror/view"),Md=require("@codemirror/state");Co();Ov();Eb();up();ks();Nb();Fb();Bb();Ub();pv();vZ();gp();Qs();Vb();os();An();Wb();Q_e=Wi("inline-live-preview"),mw=class extends bp.WidgetType{constructor(t,i,r,s,a,o,l,c,f,h,d,u,m,p,_,g,v,x){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.annotationDisplayMode=p;this.previewRendererRollout=_;this.useThreeRenderer=g;this.convertedAssetCache=v;this.getAnnotations=x;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.annotationDisplayMode===t.annotationDisplayMode&&this.previewRendererRollout===t.previewRendererRollout&&this.convertedAssetCache===t.convertedAssetCache}toDOM(){let t=pr(),i=Tv("ai3d-embed-preview ai3d-cm-widget");i.setAttribute("contenteditable","false"),t&&i.classList.add("is-mobile","is-mobile-scroll-mode");let r=uw("canvas","ai3d-embed-canvas"),s=t?Math.min(this.height,220):this.height;r.style.setProperty("--ai3d-embed-height",`${s}px`),Ap(r,"live-preview",this.modelPath),xp(r,()=>this.destroyed?null:this.preview),i.appendChild(r);let a=xd(i),o=Tv("ai3d-embed-error is-hidden");if(i.appendChild(o),t){let h=!1,d=Tv("ai3d-mobile-mode-bar"),u=Tv("ai3d-mobile-mode-hint");u.textContent=Q("livePreview.mobileHint");let m=uw("button","ai3d-mobile-mode-btn");m.type="button";let p=()=>{i.classList.toggle("is-mobile-interactive",h),i.classList.toggle("is-mobile-scroll-mode",!h),m.textContent=h?Q("helper.scrollAction"):Q("helper.interactAction"),m.classList.toggle("ai3d-btn-active",h),m.setAttribute("aria-label",h?Q("helper.disableInteractionLabel"):Q("helper.enableInteractionLabel"))};m.addEventListener("click",()=>{h=!h,p()}),p(),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=eh(this.app,this.modelPath))!=null?o:void 0,m=vd({enabledConverterIds:this.enabledConverterIds,freecadCommand:this.freecadCommand,obj2gltfCommand:this.obj2gltfCommand,fbx2gltfCommand:this.fbx2gltfCommand,freecadcmdCommand:this.freecadcmdCommand});r.setPhaseKey("loading.preparingModel");let p=await Td({path:this.modelPath,absolutePath:u,preferConversionExts:Ad({preferObj2gltfForObj:this.preferObj2gltfForObj,preferFbx2gltfForFbx:this.preferFbx2gltfForFbx}),conversionManager:m,convertedAssetCache:this.convertedAssetCache}),_=(c=(l=this.getAnnotations)==null?void 0:l.call(this,this.modelPath))!=null?c:[],g={ext:p.effectiveExt,annotationMode:_.length>0?"readonly":"none",rendererRollout:this.previewRendererRollout,useThreeRenderer:this.useThreeRenderer},{preview:v}=await gd(Q_e,{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 Ga(this.app,p.effectivePath);if(this.destroyed||a!==this.initGeneration){(f=this.preview)==null||f.destroy(),this.preview=null;return}let T=await this.preview.loadModel(x,p.effectiveExt,E=>Ga(this.app,E),p.effectivePath);if(this.destroyed||a!==this.initGeneration){(h=this.preview)==null||h.destroy(),this.preview=null;return}if(Sp(t,T),this.autoRotate&&this.preview.applyConfig({models:[],scene:{autoRotate:!0,autoRotateSpeed:.5}}),_.length>0&&lv(this.preview)){let E=this.preview.getAnnotationProvider();E.canvas&&(this.annotationMgr=new Fc(E,t,"readonly",_,void 0,vp(this.app),void 0,{app:this.app,previewMode:this.annotationPreviewMode,displayMode:this.annotationDisplayMode}))}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=_p(u);pp(u)?console.warn("[AI3D] Live Preview blocked by converter settings:",m.message):console.error("[AI3D] Live Preview failed:",u),Ep(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}}});function xZ(n,e){return n==="three"?{backend:n,supportedFormats:J_e,fallbackRole:"Primary single-model preview path",capabilities:[...e],colorPipeline:"sRGB output, no tone mapping, PBR material preservation",fidelityNotes:["Direct GLB/GLTF/STL/PLY/OBJ are expected to preserve geometry scale and material color intent.","Workbench, grid, and SPLAT routes still keep Babylon fallback coverage."]}:{backend:n,supportedFormats:ege,fallbackRole:"Capability and compatibility backend",capabilities:[...e],colorPipeline:"Babylon material pipeline with conservative fallback behavior",fidelityNotes:["3dgrid, conservative workbench, SPLAT, and converted workbench inputs remain on Babylon.","Babylon remains the rollback path when Three direct rendering is disabled."]}}function RZ(n){return n.backend==="three"?xZ("three",["annotation","animation","measurement","disassembly","focus-selection","wireframe","orientation-gizmo","bounding-box","render-scale","workbench"]):xZ("babylon",["annotation","animation","measurement","disassembly","focus-selection","wireframe","orientation-gizmo","bounding-box","render-scale","workbench"])}function bZ(n){return[`${n.backend}`,`formats=${n.supportedFormats.join("/")}`,`capabilities=${n.capabilities.join("/")||"none"}`,`role=${n.fallbackRole}`].join("; ")}var J_e,ege,IZ=M(()=>{"use strict";up();J_e=["glb","gltf","stl","ply","obj"],ege=["glb","gltf","stl","ply","obj","splat","converted-glb"]});var CZ={};tt(CZ,{buildDiagnosticsReport:()=>sge});function Zb(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 tge(n){var i;let e=(i=n.split(/[\\/]/).pop())!=null?i:n,t=e.lastIndexOf(".");return t<=0||t===e.length-1?"":`.${e.slice(t+1).toLowerCase()}`}function Ip(n,e,t){if(!n)return t;if(e)return n;let i=tge(n);return i?``:""}function Av(n,e){return n?`set (${Ip(n,e,"not set")})`:"not set"}function ige(n){let e=n.settings;return e.analysisMode==="local"?"local only":[e.analysisMode,e.serviceBaseUrl.trim()?"service configured":"service missing",`geometry ${Zb(e.sendGeometrySummaryToRemote)}`,`preview refs ${Zb(e.sendPreviewImagesToRemote)}`,`raw model ${e.sendRawModelToRemote?"blocked if requested":"off"}`].join(", ")}function rge(n){let e=n.currentModelPath;return e?n.modelAssetProfiles[e]:void 0}function nge(n){let e=n.lastKnowledgeGeneration;return e?e.status==="pending"?"pending or interrupted; rerun generation to replace the marker":e.status==="failed"?"failed; inspect console details and rerun after fixing the issue":e.warningCount>0?"completed with warnings":"none":"none"}function sge(n){var c,f,h,d,u,m,p,_,g;let{manifest:e,state:t}=n,i=t.settings,r=rge(t),s=n.includeVaultPaths===!0,a=t.currentModelPath?Hd({ext:(c=t.currentModelPath.split(".").pop())!=null?c:"",annotationMode:r!=null&&r.annotations.length?"readonly":"none",allowEditModeOnThree:!0,allowWorkbenchFeaturesOnThree:i.experimentalThreeWorkbench,rendererRollout:i.previewRendererRollout,useThreeRenderer:i.useThreeRenderer}):null,o=a?RZ(a):null,l=t.lastKnowledgeGeneration;return["# AI Model Workbench Diagnostics","",`Generated: ${(f=n.generatedAt)!=null?f:new Date().toISOString()}`,"","## Runtime","",`- Plugin version: ${e.version}`,`- Minimum Obsidian version: ${e.minAppVersion}`,`- Obsidian API version: ${MZ.apiVersion}`,`- Platform: ${pr()?"mobile":"desktop"}`,`- Locale: ${i.locale}`,"","## Renderer","",`- Use Three renderer: ${Zb(i.useThreeRenderer)}`,`- Preview rollout: ${i.previewRendererRollout}`,`- Experimental Three workbench: ${Zb(i.experimentalThreeWorkbench)}`,`- Current route: ${a?`${a.backend} (${a.reason})`:"no current model"}`,`- Route capability profile: ${o?bZ(o):"no current model"}`,`- Route color pipeline: ${(h=o==null?void 0:o.colorPipeline)!=null?h:"no current model"}`,`- Render quality: ${i.renderQuality}`,`- Render scale: ${i.renderScale}`,"","## Current Model","",`- Path: ${Ip(t.currentModelPath,s,"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: ${(d=r==null?void 0:r.annotations.length)!=null?d:0}`,`- Registered part candidates: ${(m=(u=r==null?void 0:r.registeredParts)==null?void 0:u.length)!=null?m:0}`,`- Report note: ${Av(r==null?void 0:r.reportNotePath,s)}`,`- Analysis sidecar: ${Av(r==null?void 0:r.analysisSidecarPath,s)}`,`- Knowledge index: ${Av(r==null?void 0:r.knowledgeIndexPath,s)}`,"","## Knowledge Generation","",`- Mode: ${ige(t)}`,`- Report folder: ${Ip(i.reportFolder,s,"empty")}`,`- Part notes folder: ${Ip(i.partFolder,s,"empty")}`,`- Snapshot folder: ${Ip(i.previewFolder,s,"empty")}`,`- Last generation: ${l?`${l.status} at ${l.generatedAt}`:"none"}`,`- Last generation attention: ${nge(t)}`,`- Last generated model: ${Ip(l==null?void 0:l.modelPath,s,"none")}`,`- Last report: ${Av(l==null?void 0:l.reportNotePath,s)}`,`- Last index: ${Av(l==null?void 0:l.knowledgeIndexPath,s)}`,`- Last part notes: ${(p=l==null?void 0:l.partNoteCount)!=null?p:0}`,`- Last preview images: ${(_=l==null?void 0:l.previewImageCount)!=null?_:0}`,`- Last warning count: ${(g=l==null?void 0:l.warningCount)!=null?g:0}`,"","## Conversion","",`- Enabled converters: ${i.enabledConverterIds.length?i.enabledConverterIds.join(", "):"none"}`,`- Cached conversions: ${t.convertedAssetRecords.length}`,`- Supported direct/model extensions: ${El().join(", ")}`,"","## Notes","","- Draft service URL and command paths are intentionally omitted from this report.",s?"- Vault-relative model and note paths are included because includeVaultPaths was requested.":"- Vault-relative model, report, index, and folder paths are redacted by default.","- Attach this report with the model format, console error, and reproduction steps when filing a bug.",""].join(` +`)}var MZ,yZ=M(()=>{"use strict";MZ=require("obsidian");Co();IZ();Nv();Qs()});var age={};tt(age,{default:()=>Qb});module.exports=WZ(age);var Us=require("obsidian");t0();Co();Co();var hge=new Set(El());var Oc={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",annotationDisplayMode:"surface",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 Rw(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 YZ={settings:{...Oc},currentModelPath:null,convertedAssetRecords:[],modelAssetProfiles:{},agentDraft:"",agentPlan:null,modelPreview:null,selectedPart:null,lastKnowledgeGeneration:null};function Iw(n){let e=Rw(YZ),t=null,i=0,r=0,s=null;function a(){t&&window.clearTimeout(t),t=window.setTimeout(()=>{t=null,c().catch(d=>console.error("[AI3D] Auto-save failed:",d))},500)}function o(){i+=1,a()}function l(){let d=e.getState();return{settings:d.settings,convertedAssetRecords:d.convertedAssetRecords,modelAssetProfiles:d.modelAssetProfiles,agentDraft:d.agentDraft,agentPlan:d.agentPlan,lastKnowledgeGeneration:d.lastKnowledgeGeneration}}function c(d=!1){return d&&r>=i&&(i+=1),s||(s=f()),s}async function f(){try{for(;ro());let h=!1;return{store:e,get localeLoadedFromSaved(){return h},setCurrentModel(d,u){e.setState({currentModelPath:d,modelPreview:u,selectedPart:null})},clearModelPreview(){e.setState({modelPreview:null,selectedPart:null})},updateModelProfile(d,u){var _;let m=e.getState().modelAssetProfiles,p=(_=m[d])!=null?_:r0();e.setState({modelAssetProfiles:{...m,[d]:{...p,...u(p),updatedAt:new Date().toISOString()}}})},setConvertedAssetRecords(d){e.setState({convertedAssetRecords:d})},updateSettings(d){let u=e.getState().settings;e.setState({settings:{...u,...d}})},setLastKnowledgeGeneration(d){e.setState({lastKnowledgeGeneration:d})},async load(){var u,m,p,_,g;let d=await n.loadData();d&&(h=!!((u=d.settings)!=null&&u.locale),e.setState({settings:{...Oc,...(m=d.settings)!=null?m:{}},convertedAssetRecords:(p=d.convertedAssetRecords)!=null?p:[],modelAssetProfiles:KZ(d.modelAssetProfiles),agentDraft:(_=d.agentDraft)!=null?_:"",agentPlan:(g=d.agentPlan)!=null?g:null,lastKnowledgeGeneration:qZ(d.lastKnowledgeGeneration)}))},async save(){t&&(window.clearTimeout(t),t=null),await c(!0)},dispose(){t&&(window.clearTimeout(t),t=null),c(!0).catch(d=>console.error("[AI3D] Final save on dispose failed:",d))}}}function KZ(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:jZ(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 yp(n){return Array.isArray(n)?n.filter(e=>typeof e=="string"&&e.trim().length>0):[]}function bw(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 jZ(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==="component"?s.source:void 0,componentId:typeof s.componentId=="string"?s.componentId:void 0,occurrenceId:typeof s.occurrenceId=="string"?s.occurrenceId:void 0,partNumber:typeof s.partNumber=="string"?s.partNumber:void 0,componentPath:typeof s.componentPath=="string"?s.componentPath:void 0,category:typeof s.category=="string"?s.category:void 0,meshRefs:yp(s.meshRefs),childCount:Number.isFinite(s.childCount)?Math.max(0,Math.floor(Number(s.childCount))):void 0,materialRefs:yp(s.materialRefs),bbox:bw(s.bbox),center:bw(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:yp(s.observations),inferredFunctions:yp(s.inferredFunctions),knowledgeTags:yp(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 qZ(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"||n.status==="pending"?n.status:"success",warningCount:Number.isFinite(n.warningCount)?Math.max(0,Math.floor(n.warningCount)):0}:null}function r0(){let n=new Date().toISOString();return{tags:[],notes:"",annotations:[],registeredParts:void 0,createdAt:n,updatedAt:n}}var yc=require("obsidian");Ov();Eb();yN();Nb();Fb();kN();ks();Bb();pv();Ub();gp();os();Vb();Qs();An();XN();os();function Qpe(n){if(!n)return"";let e=n.split("/");return e[e.length-1]||n}function gq(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:Ki("directWorkbench.registeredSourceModel",{model:Qpe(t.sourceModelPath)})}),r.createDiv({cls:"ai3d-direct-workbench-match-target",text:t.sourceNotePath?Q("directWorkbench.registeredTargetPartNote"):t.sourceModelPath?Q("directWorkbench.registeredTargetSourceModel"):Q("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?Q("directWorkbench.registeredOpenNote"):Q("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 vq=new Set(["glb","gltf","stl","ply","obj"]),Eq=new Set(["glb","gltf"]);function $pe(n,e){return n.experimentalThreeWorkbench&&n.useThreeRenderer&&e.strategy==="direct"&&Eq.has(e.ext)&&Eq.has(e.sourceExt)}function Jpe(n){return n.strategy==="direct"&&vq.has(n.ext)&&vq.has(n.sourceExt)}function Sq(n,e){let t=$pe(n,e);return{ext:e.ext,annotationMode:"edit",allowEditModeOnThree:!0,allowWorkbenchFeaturesOnThree:t,requireWorkbenchFeatures:t||!Jpe(e),rendererRollout:n.previewRendererRollout,useThreeRenderer:n.useThreeRenderer}}Wb();var Kb="ai3d-direct-view",rw=Wi("direct-view");function Xb(n){return Math.round(n!=null?n:0).toLocaleString()}function G_e(n){return[n.boundingSize.x,n.boundingSize.y,n.boundingSize.z].map(e=>e.toFixed(2)).join(" x ")}function k_e(n){return n==="three"?"Three.js":"Babylon.js"}function W_e(n){return n instanceof Error&&n.message.includes("Missing external model resource:")}function Qq(n){var i,r,s;let e=(r=(i=n.occurrenceId)!=null?i:n.componentId)!=null?r:n.partNumber;if(e!=null&&e.trim())return`component:${e.trim().toLowerCase()}`;let t=n.meshRefs.map(a=>a.trim().toLowerCase()).filter(Boolean).sort().join("|");return`${(s=n.source)!=null?s:"mesh"}:${n.name.trim().toLowerCase()}:${t}`}function H_e(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 Yb=class extends yc.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.sidebarContent=null;this.getSettings=i,this.convertedAssetCache=r,this.ps=s}getViewType(){return Kb}getDisplayText(){var t,i;return(i=(t=this.file)==null?void 0:t.name)!=null?i:Q("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 T,E,S,R,I,C,y,D,O;let i=++this.loadGeneration,r=pr();(T=this.annotationMgr)==null||T.destroy(),this.annotationMgr=null,this.workbenchPanel=null,this.workbenchSummary=null,this.workbenchRoute=null,this.workbenchModelPath=null,this.sidebarContent=null,(E=this.preview)==null||E.destroy(),this.preview=null,this.ps.setCurrentModel(t.path,null);let s=this.contentEl.createDiv({cls:"ai3d-workspace"}),a=s.createDiv({cls:"ai3d-workspace-track-top"}),o=a.createDiv({cls:"ai3d-workspace-main"}),l=a.createDiv({cls:"ai3d-resize-handle ai3d-resize-handle-h"}),c=a.createDiv({cls:"ai3d-workspace-sidebar"}),f=createDiv(),h=f.createDiv({cls:"ai3d-preview-host"}),d=f.createEl("canvas");d.className="ai3d-canvas-full",Ap(d,"direct-view",t.path),xp(d,()=>this.preview),h.appendChild(d);let u=f.createDiv();u.className="ai3d-annot-mode-overlay is-hidden",h.appendChild(u),o.appendChild(h);let m=null,p=V=>{var N;this.annotationMode=V,r&&V&&(m==null||m.setMobileInteractionMode(!0)),(N=this.annotationMgr)==null||N.hideEditor(),u.classList.toggle("is-hidden",!V)};this.escHandler&&activeDocument.removeEventListener("keydown",this.escHandler),this.escHandler=V=>{V.key==="Escape"&&this.annotationMode&&p(!1)},activeDocument.addEventListener("keydown",this.escHandler),m=hv(o,h,this.app,()=>this.preview,()=>t.path,()=>{this.leaf.detach()},this.getSettings,()=>(p(!this.annotationMode),this.annotationMode),V=>{!V&&this.annotationMode&&p(!1)});let _=c.createDiv({cls:"ai3d-sidebar-content"});this.sidebarContent=_;let g=s.createDiv({cls:"ai3d-resize-handle ai3d-resize-handle-v"}),v=s.createDiv({cls:"ai3d-direct-workbench-panel is-hidden"});this.workbenchPanel=v,this.setupResizeHandles(l,g,a,s),r&&o.createDiv({cls:"ai3d-mobile-mode-hint ai3d-mobile-mode-hint--inline",text:Q("directView.mobileHint")});let x=xd(h);try{let V=this.getSettings(),N=vd(V),w=(S=eh(this.app,t.path))!=null?S:void 0;x.setPhaseKey("loading.preparingModel");let U=await Td({path:t.path,absolutePath:w,preferConversionExts:Ad(V),conversionManager:N,convertedAssetCache:this.convertedAssetCache});if(i!==this.loadGeneration){new yc.Notice(Q("directWorkbench.modelLoadInterrupted"));return}let W=uv(U),te=Sq(V,W);m==null||m.syncCapabilities(),x.setPhaseKey("loading.loadingModel");let $=await Ga(this.app,W.path),J=await this.createPreviewWithFallback(d,$,W,te,t.path);if(i!==this.loadGeneration){J.preview.destroy(),new yc.Notice(Q("directWorkbench.modelLoadInterrupted"));return}this.preview=J.preview,h.dataset.ai3dBackend=J.route.backend,h.dataset.ai3dRouteReason=J.route.reason,m==null||m.syncCapabilities();let z=J.summary,Y=(C=(I=(R=this.preview).getModelEvidence)==null?void 0:I.call(R))!=null?C:null;this.registerModelPartsFromEvidence(t.path,Y),Sp(h,z),this.workbenchPanel=v,this.workbenchSummary=z,this.workbenchRoute=J.route,this.workbenchModelPath=t.path,this.renderWorkbenchPanel(v,z,J.route,t.path),this.renderSidebarContent(t.path,z),this.ps.setCurrentModel(t.path,z),rw.info("direct view model loaded",{path:t.path,effectivePath:W.path,effectiveExt:W.ext,strategy:W.strategy,backend:J.route.backend,routeReason:J.route.reason,meshCount:z.meshCount,triangleCount:z.triangleCount}),x.setProgress(100);let me=this.preview.getAnnotationProvider();if(me.canvas){let xe=this.ps.store.getState().modelAssetProfiles[t.path],Be=(y=xe==null?void 0:xe.annotations)!=null?y:[],ae=vp(this.app),ve=dq(this.app);this.annotationMgr=new Fc(me,h,"edit",Be,ne=>{this.ps.updateModelProfile(t.path,ue=>({annotations:ne})),m.updateAnnotationBadge(ne.length)},ae,ve,{app:this.app,previewMode:this.getSettings().annotationPreviewMode,displayMode:this.getSettings().annotationDisplayMode}),m.showAnnotateButton(),m.updateAnnotationBadge(Be.length),this.preview.onPick(ne=>{var be,je;if(!this.annotationMode||!this.annotationMgr)return;let ue=ne.screenX,De=ne.screenY,de=(je=(be=this.preview)==null?void 0:be.getPickWorldPoint(ne))!=null?je:null;de&&this.annotationMgr.showEditor(ue,De,de)})}x.hide()}catch(V){if(i!==this.loadGeneration)return;x.hide(),(D=this.preview)==null||D.destroy(),this.preview=null,h.replaceChildren(),(O=this.workbenchPanel)==null||O.addClass("is-hidden");let N=_p(V);pp(V)?console.warn("[AI3D] Direct view blocked by converter settings:",N.message):console.error("[AI3D] Direct view failed:",V),this.ps.store.getState().currentModelPath===t.path&&this.ps.clearModelPreview(),Ep(h,N)}}registerModelPartsFromEvidence(t,i){var c,f;if(!(i!=null&&i.parts.length))return;let r=zN(t,i.parts);if(r.length===0)return;let a=(c=this.ps.store.getState().modelAssetProfiles[t])!=null?c:r0(),o=new Map(((f=a.registeredParts)!=null?f:[]).map(h=>[Qq(h),h])),l=r.map(h=>H_e(o.get(Qq(h)),h));this.ps.updateModelProfile(t,h=>({registeredParts:l}))}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-overview"}),o=a.createDiv({cls:"ai3d-direct-workbench-status"}),l=o.createDiv({cls:"ai3d-direct-workbench-line"});l.createSpan({cls:"ai3d-direct-workbench-label",text:Q("directWorkbench.backendLabel")}),l.createSpan({cls:"ai3d-direct-workbench-value",text:k_e(r.backend)});let c=o.createDiv({cls:"ai3d-direct-workbench-line ai3d-direct-workbench-route"});c.createSpan({cls:"ai3d-direct-workbench-label",text:Q("directWorkbench.routeLabel")}),c.createSpan({cls:"ai3d-direct-workbench-value",text:r.reason});let f=a.createDiv({cls:"ai3d-direct-workbench-metrics"});this.renderMetric(f,Q("workbench.meshesLabel"),Xb(i.meshCount)),this.renderMetric(f,Q("directWorkbench.partCandidatesLabel"),Xb((d=(h=this.ps.store.getState().modelAssetProfiles[s])==null?void 0:h.registeredParts)==null?void 0:d.length)),this.renderMetric(f,i.splatCount!==void 0?Q("workbench.splatsLabel"):Q("workbench.trianglesLabel"),Xb((u=i.splatCount)!=null?u:i.triangleCount)),this.renderMetric(f,Q("workbench.materialsLabel"),Xb(i.materialCount)),this.renderMetric(f,Q("workbench.boundingSizeLabel"),G_e(i)),this.renderMetric(f,Q("directWorkbench.performanceLabel"),(m=i.performanceTier)!=null?m:"light")}renderSidebarContent(t,i){this.sidebarContent&&(this.sidebarContent.empty(),this.renderKnowledgeControls(this.sidebarContent,t),this.renderRegisteredPartMatches(this.sidebarContent,t,i))}refreshWorkbenchPanel(){!this.workbenchPanel||!this.workbenchSummary||!this.workbenchRoute||!this.workbenchModelPath||(this.renderWorkbenchPanel(this.workbenchPanel,this.workbenchSummary,this.workbenchRoute,this.workbenchModelPath),this.renderSidebarContent(this.workbenchModelPath,this.workbenchSummary))}setupResizeHandles(t,i,r,s){let a=(c,f,h)=>{let d=0,u=0,m=_=>{f(_.clientX-d,_.clientY-u),d=_.clientX,u=_.clientY},p=()=>{activeDocument.removeEventListener("mousemove",m),activeDocument.removeEventListener("mouseup",p),h()};c.addEventListener("mousedown",_=>{_.preventDefault(),d=_.clientX,u=_.clientY,activeDocument.addEventListener("mousemove",m),activeDocument.addEventListener("mouseup",p)})},o=200;a(t,c=>{o=Math.max(48,Math.min(400,o-c)),r.style.gridTemplateColumns=`1fr 4px ${o}px`},()=>{});let l=220;a(i,(c,f)=>{l=Math.max(120,Math.min(500,l-f)),s.style.gridTemplateRows=`1fr 4px ${l}px`},()=>{})}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})}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:Q("directWorkbench.knowledgeTitle")}),s.createDiv({cls:"ai3d-direct-workbench-value",text:r!=null&&r.knowledgeIndexPath?Q("workbench.indexReady"):r!=null&&r.reportNotePath?Q("workbench.noteReady"):Q("workbench.noReportYet")});let a=s.createDiv({cls:"ai3d-direct-workbench-actions"}),o=a.createEl("button",{cls:"ai3d-direct-workbench-action",text:Q("workbench.generateNoteAction"),attr:{type:"button","data-ai3d-action":"generate-note"}});o.addEventListener("click",()=>{o.disabled=!0,Promise.resolve().then(()=>(zb(),Hb)).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:Q("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 yc.TFile&&this.app.workspace.getLeaf(!0).openFile(h,{active:!0})});let c=a.createEl("button",{cls:"ai3d-direct-workbench-action",text:Q("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 yc.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:Q("directWorkbench.registeredTitle")});let l=o.createSpan({cls:"ai3d-direct-workbench-value",text:Q("directWorkbench.registeredLoading")}),c=a.createDiv({cls:"ai3d-direct-workbench-registered-body"}),f=p=>{l.setText(""),c.empty(),c.createDiv({cls:"ai3d-direct-workbench-empty",text:Q(p)})},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(()=>(zb(),Hb)).then(async({collectRegisteredPartsFromProfiles:p})=>{var S;let _=this.ps.store.getState(),g=await p(this.app,_.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],T=kb({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 C,y,D,O,V,N;return((D=(y=(C=I.registeredMatches)==null?void 0:C[0])==null?void 0:y.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(T.length===0){f("directWorkbench.registeredEmpty");return}l.setText(Ki("directWorkbench.registeredCount",{count:String(T.length)})),c.empty();let E=c.createDiv({cls:"ai3d-direct-workbench-match-list"});for(let R of T){let I=(S=R.registeredMatches)==null?void 0:S[0];if(!I)continue;let y=gq(E,R.name,I).querySelector("[data-ai3d-action='open-registered-part']");y instanceof HTMLButtonElement&&y.addEventListener("click",()=>{let D=y.getAttribute("data-ai3d-target-path")||void 0;if(!D)return;let O=this.app.vault.getAbstractFileByPath(D);O instanceof yc.TFile&&this.app.workspace.getLeaf(!0).openFile(O,{active:!0})})}}).catch(p=>{console.warn("[AI3D] Registered part match preview failed:",p),s===this.loadGeneration&&this.workbenchModelPath===i&&a.isConnected&&f("directWorkbench.registeredUnavailable")})}async createPreviewWithFallback(t,i,r,s,a){let o=await gd(rw,{surface:"direct-view",modelPath:a},t,s);try{let l=await o.preview.loadModel(i.slice(0),r.ext,c=>Ga(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.requireWorkbenchFeatures||!s.allowWorkbenchFeaturesOnThree)throw l;console.warn("[AI3D] Experimental Three workbench failed; falling back to Babylon:",l);let c={...s,allowWorkbenchFeaturesOnThree:!1},f=await gd(rw,{surface:"direct-view-fallback",modelPath:a},t,c);try{let h=await f.preview.loadModel(i.slice(0),r.ext,d=>Ga(this.app,d),r.path);return{preview:f.preview,summary:h,route:f.route}}catch(h){throw f.preview.destroy(),W_e(l)?l:h}}}};var $q=require("obsidian");Co();os();var jb=class extends $q.FuzzySuggestModal{constructor(e,t){super(e),this.onChoose=t,this.setPlaceholder(Q("modal.selectModel"))}getItems(){return this.app.vault.getFiles().filter(e=>{let t=e.extension.toLowerCase();return vl(t)})}getItemText(e){return e.path}onChooseItem(e){this.onChoose(e)}};os();pv();ks();var vv=".markdown-preview-view, .markdown-source-view",Ev=[".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(", ");function z_e(n){if(n.length===0)return"var(--interactive-accent)";if(n.length===1)return n[0];let e=100/n.length;return`linear-gradient(135deg, ${n.map((t,i)=>{let r=Math.round(i*e),s=Math.round((i+1)*e);return`${t} ${r}% ${s}%`}).join(", ")})`}function sw(n){return n.map(e=>`${e.pinId}:${e.modelPath}:${e.color}`).sort().join("|")}function nw(n){return Array.from(n.entries()).map(([e,t])=>`${e}=>${sw(t)}`).sort().join("||")}function Jq(n){let e=new Map,t=()=>{let E=new Map,S=n.getModelAssetProfiles();for(let[R,I]of Object.entries(S))for(let C of I.annotations)if(C.headingRef&&C.id){let y=mv(C.headingRef);if(!y)continue;let D=E.get(y);D||(D=[],E.set(y,D)),D.push({pinId:C.id,modelPath:R,color:C.color})}return E},i=E=>mv(Array.from(E.childNodes).map(S=>{var R;return S.instanceOf(Element)&&S.classList.contains("ai3d-heading-pin-badge")?"":(R=S.textContent)!=null?R:""}).join(" ")),r=E=>{let S=e.get(E);S&&(E.removeEventListener("mouseover",S.handler),S.badge.remove(),delete E.dataset.pinBound,e.delete(E))},s=(E,S)=>{if(S.length===0){r(E);return}let R=sw(S),I=e.get(E);if((I==null?void 0:I.signature)===R)return;I&&r(E),E.dataset.pinBound=R;let C=E.createSpan({cls:"ai3d-heading-pin-badge"}),y=[...new Set(S.map(w=>w.color).filter(Boolean))],D=C.createSpan({cls:"ai3d-heading-pin-badge-swatch"});if(D.style.background=z_e(y),D.title=S.length>1?Q("headingPin.showMultiple"):Q("headingPin.showSingle"),D.setAttribute("role","button"),D.setAttribute("tabindex","0"),S.length>1){let w=C.createSpan({cls:"ai3d-heading-pin-badge-count"});w.textContent=`\xD7${S.length}`}let O=[...new Set(S.map(w=>qr(w.modelPath)))];C.title=Ki("headingPin.linkedTo",{models:O.join(", ")});let V=w=>{w==null||w.stopPropagation(),w==null||w.preventDefault();for(let U of S)activeDocument.dispatchEvent(new CustomEvent("ai3d-pin-highlight",{detail:{pinId:U.pinId}}))};D.addEventListener("click",w=>{V(w)}),D.addEventListener("keydown",w=>{w.instanceOf(KeyboardEvent)&&(w.key!=="Enter"&&w.key!==" "||V(w))}),C.addEventListener("click",w=>{w.stopPropagation()}),E.appendChild(C);let N=()=>{for(let w of S)activeDocument.dispatchEvent(new CustomEvent("ai3d-pin-highlight",{detail:{pinId:w.pinId}}))};E.addEventListener("mouseover",N),e.set(E,{badge:C,handler:N,signature:R})},a=(E,S)=>{var I;let R=i(E);s(E,(I=S.get(R))!=null?I:[])},o=E=>{var S;for(let[R,I]of Array.from(e.entries())){if(!R.isConnected){r(R);continue}let C=(S=E.get(i(R)))!=null?S:[],y=sw(C);(C.length===0||I.signature!==y)&&s(R,C)}},l=(E,S)=>{E.querySelectorAll(Ev).forEach(R=>a(R,S))},c=()=>{let E=t();o(E),activeDocument.querySelectorAll(vv).forEach(R=>l(R,E))},f=nw(t()),h=0,d=(E=0)=>{h&&window.clearTimeout(h),h=window.setTimeout(()=>{h=0,c()},E)},u=n.subscribeStore(()=>{let E=t(),S=nw(E);S!==f&&(f=S,d())});n.onLayoutChange(()=>{d(200)});let m=E=>E.matches(vv)||E.matches(Ev)?!0:!!E.querySelector(vv)||!!E.querySelector(Ev),p=E=>E.isConnected&&m(E),_=E=>m(E),g=new Set,v=0,x=()=>{var R,I,C,y,D,O;let E=Array.from(g);g.clear(),v=0;let S=t();o(S);for(let V of E)V.isConnected&&((R=V.matches)!=null&&R.call(V,Ev)&&a(V,S),(C=(I=V.querySelectorAll)==null?void 0:I.call(V,Ev))==null||C.forEach(N=>a(N,S)),(y=V.matches)!=null&&y.call(V,vv)&&l(V,S),(O=(D=V.querySelectorAll)==null?void 0:D.call(V,vv))==null||O.forEach(N=>l(N,S)));f=nw(S)},T=new MutationObserver(E=>{let S=!1;for(let R of E){for(let I of Array.from(R.addedNodes))I.instanceOf(HTMLElement)&&p(I)&&(g.add(I),S=!0);for(let I of Array.from(R.removedNodes))I.instanceOf(HTMLElement)&&_(I)&&(S=!0)}S&&!v&&(v=window.setTimeout(x,100))});T.observe(activeDocument.body,{childList:!0,subtree:!0}),n.registerCleanup(()=>{u(),T.disconnect(),v&&(window.clearTimeout(v),v=0),h&&(window.clearTimeout(h),h=0);for(let E of Array.from(e.keys()))r(E)}),d(500)}var jt=require("obsidian");$f();os();Qs();cr();var aw=Mv();function X_e(){switch(aw==null?void 0:aw.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 qb=class extends jt.PluginSettingTab{constructor(t,i){super(t,i);this.diagnosticsRunId=0;this.diagnosticsEl=null;this.plugin=i}display(){let{containerEl:t}=this;t.empty(),Pp(this.plugin.getSettings().locale),this.diagnosticsEl=null,this.addTitle(t),this.buildLanguageSection(t),this.buildFoldersSection(t),this.buildBehaviorSection(t),this.buildKnowledgeGenerationSection(t),this.buildConvertersSection(t),this.buildPerformanceSection(t)}addTitle(t){new jt.Setting(t).setName(Q("settings.title")).setHeading()}createSecondaryMenu(t,i,r){let s=t.createEl("details",{cls:"ai3d-settings-secondary-menu"});s.createEl("summary",{cls:"ai3d-settings-secondary-menu-summary",text:i});let a=s.createDiv({cls:"ai3d-settings-secondary-menu-body"});return a.createEl("p",{cls:"setting-item-description",text:r}),a}resetCommandDiagnostics(){this.diagnosticsEl&&(this.diagnosticsRunId++,this.diagnosticsEl.empty(),this.diagnosticsEl.createEl("p",{text:Q("settings.diagnostics.idle")}))}buildLanguageSection(t){new jt.Setting(t).setName(Q("settings.language")).setHeading(),new jt.Setting(t).setName(Q("settings.language")).setDesc(Q("settings.language.desc")).addDropdown(i=>i.addOption("en","English").addOption("zh-CN","\u7B80\u4F53\u4E2D\u6587").setValue(this.plugin.getSettings().locale).onChange(r=>{this.plugin.updateSettings({locale:r}),this.display()}))}buildFoldersSection(t){new jt.Setting(t).setName(Q("settings.folders")).setHeading(),new jt.Setting(t).setName(Q("settings.sourceModelFolder")).setDesc(Q("settings.sourceModelFolder.desc")).addText(i=>i.setPlaceholder(Oc.sourceModelFolder).setValue(this.plugin.getSettings().sourceModelFolder).onChange(r=>{this.plugin.updateSettings({sourceModelFolder:r})})),new jt.Setting(t).setName(Q("settings.reportFolder")).setDesc(Q("settings.reportFolder.desc")).addText(i=>i.setPlaceholder(Oc.reportFolder).setValue(this.plugin.getSettings().reportFolder).onChange(r=>{this.plugin.updateSettings({reportFolder:r})})),new jt.Setting(t).setName(Q("settings.partFolder")).setDesc(Q("settings.partFolder.desc")).addText(i=>i.setPlaceholder(Oc.partFolder).setValue(this.plugin.getSettings().partFolder).onChange(r=>{this.plugin.updateSettings({partFolder:r})})),new jt.Setting(t).setName(Q("settings.snapshotFolder")).setDesc(Q("settings.snapshotFolder.desc")).addText(i=>i.setPlaceholder(Oc.snapshotFolder).setValue(this.plugin.getSettings().snapshotFolder).onChange(r=>{this.plugin.updateSettings({snapshotFolder:r})}))}buildBehaviorSection(t){new jt.Setting(t).setName(Q("settings.behavior")).setHeading(),new jt.Setting(t).setName(Q("settings.autoGenerateKnowledgeNotes")).setDesc(Q("settings.autoGenerateKnowledgeNotes.desc")).addToggle(i=>i.setValue(this.plugin.getSettings().autoGenerateKnowledgeNotes).onChange(r=>{this.plugin.updateSettings({autoGenerateKnowledgeNotes:r})})),new jt.Setting(t).setName(Q("settings.annotationPreviewMode")).setDesc(Q("settings.annotationPreviewMode.desc")).addDropdown(i=>i.addOption("plain-text",Q("settings.annotationPreviewMode.plainText")).addOption("markdown",Q("settings.annotationPreviewMode.markdown")).setValue(this.plugin.getSettings().annotationPreviewMode).onChange(r=>{this.plugin.updateSettings({annotationPreviewMode:r})})),new jt.Setting(t).setName(Q("settings.annotationDisplayMode")).setDesc(Q("settings.annotationDisplayMode.desc")).addDropdown(i=>i.addOption("snippet",Q("settings.annotationDisplayMode.snippet")).addOption("surface",Q("settings.annotationDisplayMode.surface")).addOption("dot",Q("settings.annotationDisplayMode.dot")).setValue(this.plugin.getSettings().annotationDisplayMode).onChange(r=>{this.plugin.updateSettings({annotationDisplayMode:r})})),new jt.Setting(t).setName(Q("settings.previewRendererRollout")).setDesc(Q("settings.previewRendererRollout.desc")).addDropdown(i=>i.addOption("babylon-safe",Q("settings.previewRendererRollout.babylonSafe")).addOption("three-readonly-glb",Q("settings.previewRendererRollout.readonly")).addOption("three-direct-glb",Q("settings.previewRendererRollout.direct")).setValue(this.plugin.getSettings().previewRendererRollout).onChange(r=>{this.plugin.updateSettings({previewRendererRollout:r})})),new jt.Setting(t).setName(Q("settings.useThreeRenderer")).setDesc(Q("settings.useThreeRenderer.desc")).addToggle(i=>i.setValue(this.plugin.getSettings().useThreeRenderer).onChange(r=>{this.plugin.updateSettings({useThreeRenderer:r})})),new jt.Setting(t).setName(Q("settings.experimentalThreeWorkbench")).setDesc(Q("settings.experimentalThreeWorkbench.desc")).addToggle(i=>i.setValue(this.plugin.getSettings().experimentalThreeWorkbench).onChange(r=>{this.plugin.updateSettings({experimentalThreeWorkbench:r})})),new jt.Setting(t).setName(Q("settings.autoRotateDefault")).setDesc(Q("settings.autoRotateDefault.desc")).addToggle(i=>i.setValue(this.plugin.getSettings().autoRotateDefault).onChange(r=>{this.plugin.updateSettings({autoRotateDefault:r})})),new jt.Setting(t).setName(Q("settings.snapshotNaming")).setDesc(Q("settings.snapshotNaming.desc")).addDropdown(i=>i.addOption("model-name",Q("settings.snapshotNaming.modelName")).addOption("timestamp",Q("settings.snapshotNaming.timestamp")).setValue(this.plugin.getSettings().snapshotNaming).onChange(r=>{this.plugin.updateSettings({snapshotNaming:r})})),new jt.Setting(t).setName(Q("settings.logLevel")).setDesc(Q("settings.logLevel.desc")).addDropdown(i=>i.addOption("debug","Debug").addOption("info","Info").addOption("warn","Warn").addOption("error","Error").setValue(this.plugin.getSettings().logLevel).onChange(r=>{this.plugin.updateSettings({logLevel:r})}))}buildKnowledgeGenerationSection(t){new jt.Setting(t).setName(Q("settings.knowledgeGeneration")).setHeading(),new jt.Setting(t).setName(Q("settings.analysisMode")).setDesc(Q("settings.analysisMode.desc")).addDropdown(i=>i.addOption("local",Q("settings.analysisMode.local")).addOption("hybrid",Q("settings.analysisMode.hybrid")).addOption("remote",Q("settings.analysisMode.remote")).setValue(this.plugin.getSettings().analysisMode).onChange(r=>{this.plugin.updateSettings({analysisMode:r})})),new jt.Setting(t).setName(Q("settings.serviceBaseUrl")).setDesc(Q("settings.serviceBaseUrl.desc")).addText(i=>i.setPlaceholder("Local draft service URL").setValue(this.plugin.getSettings().serviceBaseUrl).onChange(r=>{this.plugin.updateSettings({serviceBaseUrl:r.trim()})})),new jt.Setting(t).setName(Q("settings.sendGeometrySummaryToRemote")).setDesc(Q("settings.sendGeometrySummaryToRemote.desc")).addToggle(i=>i.setValue(this.plugin.getSettings().sendGeometrySummaryToRemote).onChange(r=>{this.plugin.updateSettings({sendGeometrySummaryToRemote:r})})),new jt.Setting(t).setName(Q("settings.sendPreviewImagesToRemote")).setDesc(Q("settings.sendPreviewImagesToRemote.desc")).addToggle(i=>i.setValue(this.plugin.getSettings().sendPreviewImagesToRemote).onChange(r=>{this.plugin.updateSettings({sendPreviewImagesToRemote:r})})),new jt.Setting(t).setName(Q("settings.sendRawModelToRemote")).setDesc(Q("settings.sendRawModelToRemote.desc")).addToggle(i=>i.setValue(this.plugin.getSettings().sendRawModelToRemote).onChange(r=>{this.plugin.updateSettings({sendRawModelToRemote:r})}))}buildConvertersSection(t){if(new jt.Setting(t).setName(Q("settings.converters")).setHeading(),pr()){t.createEl("p",{cls:"setting-item-description",text:Q("settings.mobileSupport.desc")});return}let i=this.createSecondaryMenu(t,Q("settings.converterMenu"),Q("settings.converterMenu.desc"));this.buildConverterToggles(i);let r=this.createSecondaryMenu(t,Q("settings.environmentInspector"),Q("settings.environmentInspector.desc"));this.buildConverterPaths(r),this.buildDiagnostics(r)}buildConverterToggles(t){new jt.Setting(t).setName(Q("settings.enableCad")).setDesc(Q("settings.enableCad.desc")).addToggle(i=>{let r=this.plugin.getSettings().enabledConverterIds.includes("freecad");return i.setValue(r).onChange(s=>{let a=this.plugin.getSettings().enabledConverterIds,o=s?Array.from(new Set([...a,"freecad"])):a.filter(l=>l!=="freecad");this.plugin.updateSettings({enabledConverterIds:o})})}),new jt.Setting(t).setName(Q("settings.enableObj2gltf")).setDesc(Q("settings.enableObj2gltf.desc")).addToggle(i=>{let r=this.plugin.getSettings().enabledConverterIds.includes("obj2gltf");return i.setValue(r).onChange(s=>{let a=this.plugin.getSettings().enabledConverterIds,o=s?Array.from(new Set([...a,"obj2gltf"])):a.filter(l=>l!=="obj2gltf");this.plugin.updateSettings({enabledConverterIds:o})})}),new jt.Setting(t).setName(Q("settings.preferObj2gltf")).setDesc(Q("settings.preferObj2gltf.desc")).addToggle(i=>i.setValue(this.plugin.getSettings().preferObj2gltfForObj).onChange(r=>{this.plugin.updateSettings({preferObj2gltfForObj:r})})),new jt.Setting(t).setName(Q("settings.enableFbx2gltf")).setDesc(Q("settings.enableFbx2gltf.desc")).addToggle(i=>{let r=this.plugin.getSettings().enabledConverterIds.includes("fbx2gltf");return i.setValue(r).onChange(s=>{let a=this.plugin.getSettings().enabledConverterIds,o=s?Array.from(new Set([...a,"fbx2gltf"])):a.filter(l=>l!=="fbx2gltf");this.plugin.updateSettings({enabledConverterIds:o})})}),new jt.Setting(t).setName(Q("settings.enableMesh")).setDesc(Q("settings.enableMesh.desc")).addToggle(i=>{let r=this.plugin.getSettings().enabledConverterIds.includes("assimp");return i.setValue(r).onChange(s=>{let a=this.plugin.getSettings().enabledConverterIds,o=s?Array.from(new Set([...a,"assimp"])):a.filter(l=>l!=="assimp");this.plugin.updateSettings({enabledConverterIds:o})})}),new jt.Setting(t).setName(Q("settings.enableSldprt")).setDesc(Q("settings.enableSldprt.desc")).addToggle(i=>{let r=this.plugin.getSettings().enabledConverterIds.includes("sldprt");return i.setValue(r).onChange(s=>{let a=this.plugin.getSettings().enabledConverterIds,o=s?Array.from(new Set([...a,"sldprt"])):a.filter(l=>l!=="sldprt");this.plugin.updateSettings({enabledConverterIds:o})})})}buildConverterPaths(t){let i=X_e();new jt.Setting(t).setName(Q("settings.paths")).setHeading(),new jt.Setting(t).setName(Q("settings.pythonCmd")).setDesc(Q("settings.pythonCmd.desc")).addText(r=>r.setPlaceholder(i.python).setValue(this.plugin.getSettings().freecadCommand).onChange(s=>{this.plugin.updateSettings({freecadCommand:s.trim()}),this.resetCommandDiagnostics()})),new jt.Setting(t).setName(Q("settings.freecadCmd")).setDesc(Q("settings.freecadCmd.desc")).addText(r=>r.setPlaceholder(i.freecad).setValue(this.plugin.getSettings().freecadcmdCommand).onChange(s=>{this.plugin.updateSettings({freecadcmdCommand:s.trim()}),this.resetCommandDiagnostics()})),new jt.Setting(t).setName(Q("settings.obj2gltfCmd")).setDesc(Q("settings.obj2gltfCmd.desc")).addText(r=>r.setPlaceholder(i.obj2gltf).setValue(this.plugin.getSettings().obj2gltfCommand).onChange(s=>{this.plugin.updateSettings({obj2gltfCommand:s.trim()}),this.resetCommandDiagnostics()})),new jt.Setting(t).setName(Q("settings.fbx2gltfCmd")).setDesc(Q("settings.fbx2gltfCmd.desc")).addText(r=>r.setPlaceholder(i.fbx2gltf).setValue(this.plugin.getSettings().fbx2gltfCommand).onChange(s=>{this.plugin.updateSettings({fbx2gltfCommand:s.trim()}),this.resetCommandDiagnostics()})),new jt.Setting(t).setName(Q("settings.assimpCmd")).setDesc(Q("settings.assimpCmd.desc")).addText(r=>r.setPlaceholder(i.python).setValue(this.plugin.getSettings().assimpCommand).onChange(s=>{this.plugin.updateSettings({assimpCommand:s.trim()}),this.resetCommandDiagnostics()}))}buildDiagnostics(t){new jt.Setting(t).setName(Q("settings.diagnostics")).setDesc(Q("settings.diagnostics.desc")).addButton(r=>r.setButtonText(Q("settings.diagnostics.checkNow")).onClick(async()=>{r.setDisabled(!0),r.setButtonText(Q("settings.diagnostics.checking")),this.diagnosticsEl&&await this.renderCommandDiagnostics(this.diagnosticsEl),r.setButtonText(Q("settings.diagnostics.checkNow")),r.setDisabled(!1),new jt.Notice(Q("settings.diagnostics.refreshed"))})),this.diagnosticsEl=t.createDiv({cls:"ai3d-settings-diagnostics"}),this.resetCommandDiagnostics()}buildPerformanceSection(t){new jt.Setting(t).setName(Q("settings.performance")).setHeading(),new jt.Setting(t).setName(Q("settings.canvasHeight")).setDesc(Q("settings.canvasHeight.desc")).addSlider(i=>i.setLimits(200,800,25).setValue(this.plugin.getSettings().defaultCanvasHeight).setDynamicTooltip().onChange(r=>{this.plugin.updateSettings({defaultCanvasHeight:r})})),new jt.Setting(t).setName(Q("settings.autoRotateSpeed")).setDesc(Q("settings.autoRotateSpeed.desc")).addSlider(i=>i.setLimits(.1,2,.1).setValue(this.plugin.getSettings().autoRotateSpeed).setDynamicTooltip().onChange(r=>{this.plugin.updateSettings({autoRotateSpeed:r})})),new jt.Setting(t).setName(Q("settings.renderQuality")).setDesc(Q("settings.renderQuality.desc")).addDropdown(i=>i.addOption("low","Low").addOption("medium","Medium").addOption("high","High").setValue(this.plugin.getSettings().renderQuality).onChange(r=>{this.plugin.updateSettings({renderQuality:r})})),new jt.Setting(t).setName(Q("settings.renderScale")).setDesc(Q("settings.renderScale.desc")).addSlider(i=>i.setLimits(.25,2,.25).setValue(this.plugin.getSettings().renderScale).setDynamicTooltip().onChange(r=>{this.plugin.updateSettings({renderScale:r})}))}async renderCommandDiagnostics(t){let i=++this.diagnosticsRunId;t.empty(),t.createEl("p",{text:Q("settings.diagnostics.checkingAvailability")});let r=await Mb(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?Q("settings.diagnostics.available"):Q("settings.diagnostics.notFound")}`});let s=[`${Q("settings.diagnostics.sourceLabel")}: ${Ib(i.source)}`,`${Q("settings.diagnostics.commandLabel")}: ${i.command}`,i.resolvedPath&&i.resolvedPath!==i.command?`${Q("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 Q("settings.diagnostics.cadPythonCheck");case"mesh-python":return Q("settings.diagnostics.meshPythonCheck");case"freecadcmd-cli":return Q("settings.diagnostics.freecadCmdCheck");case"obj2gltf-cli":return Q("settings.diagnostics.obj2gltfCheck");case"fbx2gltf-cli":return Q("settings.diagnostics.fbx2gltfCheck")}})(),s=i.ok?Q("settings.diagnostics.selfCheckOk"):Q("settings.diagnostics.selfCheckFailed");t.createDiv({text:`${Q("settings.diagnostics.selfCheckLabel")}: ${r} - ${s}`}),i.detail&&t.createDiv({text:i.detail})}};$f();An();os();Qs();var PZ=Wi("main");function xv(n,e){return()=>{n().catch(t=>{PZ.error(`Command ${e} failed`,{error:String(t)}),new Us.Notice(`AI3D: ${e} failed \u2014 ${String(t)}`,5e3)})}}var Qb=class extends Us.Plugin{getSettings(){return this.ps.store.getState().settings}updateSettings(e){this.ps.updateSettings(e),xN(this.getSettings().logLevel),Pp(this.getSettings().locale)}async onload(){var l;if(this.ps=Iw(this),await this.ps.load(),this.convertedAssetCache=Aw(this.ps.store.getState().convertedAssetRecords,c=>this.ps.setConvertedAssetRecords(c)),xN(this.getSettings().logLevel),!this.ps.localeLoadedFromSaved){let f=((l=navigator.language)!=null?l:"en").startsWith("zh")?"zh-CN":"en";this.updateSettings({locale:f})}Pp(this.getSettings().locale),this.addRibbonIcon("box",Q("main.commandImportModel"),()=>this.importModel()),this.addCommand({id:"import-model",name:Q("main.commandImportModel"),callback:()=>this.importModel()}),this.addCommand({id:"generate-note",name:Q("main.commandGenerateNote"),callback:xv(()=>this.generateNote(),"generate note")}),this.addCommand({id:"open-knowledge-index",name:Q("main.commandOpenKnowledgeIndex"),callback:xv(()=>this.openKnowledgeIndex(),"open knowledge index")}),this.addCommand({id:"clear-conversion-cache",name:Q("main.commandClearConversionCache"),callback:xv(()=>Promise.resolve(this.clearConversionCache()),"clear conversion cache")}),this.addCommand({id:"check-converters",name:Q("main.commandCheckConverters"),callback:xv(()=>this.checkConverterCommands(),"check converters")}),this.addCommand({id:"copy-diagnostics-report",name:Q("main.commandCopyDiagnostics"),callback:xv(()=>this.copyDiagnosticsReport(),"copy diagnostics")}),this.addSettingTab(new qb(this.app,this)),this.registerView(Kb,c=>new Yb(c,()=>this.getSettings(),this.convertedAssetCache,this.ps)),this.registerExtensions(El(),Kb);let{registerCodeBlockProcessor:e,registerGridCodeBlockProcessor:t}=await Promise.resolve().then(()=>(gZ(),_Z)),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(()=>(AZ(),TZ)),o=a(this.app,()=>this.getSettings(),this.convertedAssetCache,i);for(let c of o)this.registerEditorExtension(c);Jq({subscribeStore:c=>this.ps.store.subscribe(c),getModelAssetProfiles:()=>this.ps.store.getState().modelAssetProfiles,registerCleanup:c=>this.register(c),onLayoutChange:c=>{this.registerEvent(this.app.workspace.on("layout-change",c))}})}onunload(){this.ps.save().catch(e=>console.error("[AI3D] unload save failed:",e))}importModel(){new jb(this.app,e=>{let t=e.extension.toLowerCase();vl(t)&&this.openModelFile(e)}).open()}async openModelFile(e){this.ps.setCurrentModel(e.path,null),await this.app.workspace.getLeaf(!0).openFile(e,{active:!0})}async generateNote(){let{generateKnowledgeNote:e}=await Promise.resolve().then(()=>(zb(),Hb));await e(this.app,this.ps)}async openKnowledgeIndex(){let e=this.resolveKnowledgeIndexPath();if(!e){new Us.Notice(Q("workbench.noIndexYet"));return}let t=this.app.vault.getAbstractFileByPath(e);t instanceof Us.TFile?await this.app.workspace.getLeaf(!0).openFile(t,{active:!0}):new Us.Notice(Ki("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 Us.Notice("AI 3d conversion cache cleared.")}async checkConverterCommands(){if(pr()){new Us.Notice(Q("main.converterDiagnosticsMobileUnavailable"),8e3);return}let e=await Mb(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 Us.Notice(`AI 3D converter diagnostics: all commands available (${t.join(", ")}).`,8e3);return}new Us.Notice(`AI 3D converter diagnostics: available ${t.join(", ")||"none"}; missing ${i.join(", ")}.`,1e4)}async copyDiagnosticsReport(){let{buildDiagnosticsReport:e}=await Promise.resolve().then(()=>(yZ(),CZ)),t=e({manifest:this.manifest,state:this.ps.store.getState()});try{await navigator.clipboard.writeText(t),new Us.Notice(Q("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 Us.Notice(Q("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(r=>{PZ.warn("Failed to create vault folder",{path:t,error:String(r)})})}}; diff --git a/models/quality-fixtures/three-color-fidelity.glb b/models/quality-fixtures/three-color-fidelity.glb new file mode 100644 index 0000000..c0c37b5 Binary files /dev/null and b/models/quality-fixtures/three-color-fidelity.glb differ diff --git a/models/quality-fixtures/three-small-parts.glb b/models/quality-fixtures/three-small-parts.glb new file mode 100644 index 0000000..459daa5 Binary files /dev/null and b/models/quality-fixtures/three-small-parts.glb differ diff --git a/scripts/generate-three-quality-fixtures.mjs b/scripts/generate-three-quality-fixtures.mjs new file mode 100644 index 0000000..8068b13 --- /dev/null +++ b/scripts/generate-three-quality-fixtures.mjs @@ -0,0 +1,84 @@ +import { mkdir, writeFile } from "node:fs/promises"; +import { resolve } from "node:path"; +import { fileURLToPath } from "node:url"; +import { + BoxGeometry, + Mesh, + MeshStandardMaterial, + Scene, +} from "three"; +import { GLTFExporter } from "three/examples/jsm/exporters/GLTFExporter.js"; + +globalThis.FileReader = class FileReader { + result = null; + onloadend = null; + + async readAsArrayBuffer(blob) { + this.result = await blob.arrayBuffer(); + this.onloadend?.(); + } + + async readAsDataURL(blob) { + const buffer = Buffer.from(await blob.arrayBuffer()); + this.result = `data:${blob.type || "application/octet-stream"};base64,${buffer.toString("base64")}`; + this.onloadend?.(); + } +}; + +const rootDir = resolve(fileURLToPath(new URL("..", import.meta.url))); +const outDir = resolve(rootDir, "models", "quality-fixtures"); + +function addBox(scene, name, size, position, material) { + const mesh = new Mesh(new BoxGeometry(size[0], size[1], size[2]), material); + mesh.name = name; + mesh.position.set(position[0], position[1], position[2]); + scene.add(mesh); +} + +function createColorScene() { + const scene = new Scene(); + scene.name = "three_color_fidelity_fixture"; + const materials = { + red: new MeshStandardMaterial({ name: "color_red_srgb", color: 0xff0000, roughness: 0.72, metalness: 0 }), + green: new MeshStandardMaterial({ name: "color_green_srgb", color: 0x00ff00, roughness: 0.72, metalness: 0 }), + blue: new MeshStandardMaterial({ name: "color_blue_srgb", color: 0x0066ff, roughness: 0.72, metalness: 0 }), + gray: new MeshStandardMaterial({ name: "color_gray_neutral", color: 0x808080, roughness: 0.72, metalness: 0 }), + }; + addBox(scene, "color_red_panel", [0.7, 0.7, 0.05], [-1.2, 0.45, 0], materials.red); + addBox(scene, "color_green_panel", [0.7, 0.7, 0.05], [-0.4, -0.45, 0], materials.green); + addBox(scene, "color_blue_panel", [0.7, 0.7, 0.05], [0.4, 0.45, 0], materials.blue); + addBox(scene, "color_gray_panel", [0.7, 0.7, 0.05], [1.2, -0.45, 0], materials.gray); + return scene; +} + +function createSmallPartsScene() { + const scene = new Scene(); + scene.name = "three_small_parts_fixture"; + const body = new MeshStandardMaterial({ name: "mat_body_neutral", color: 0x62748a, roughness: 0.62, metalness: 0.02 }); + const small = new MeshStandardMaterial({ name: "mat_tiny_parts", color: 0xfacc15, roughness: 0.45, metalness: 0.12 }); + addBox(scene, "main_plate", [1.2, 0.08, 0.75], [0, 0, 0], body); + const positions = [ + [-0.54, 0.075, -0.31], + [-0.42, 0.075, 0.28], + [0.48, 0.075, -0.24], + [0.56, 0.075, 0.32], + [-0.05, 0.075, 0.0], + [0.12, 0.075, 0.18], + ]; + positions.forEach((position, index) => { + addBox(scene, `tiny_screw_${String(index + 1).padStart(2, "0")}`, [0.018, 0.018, 0.018], position, small); + }); + addBox(scene, "thin_alignment_pin", [0.012, 0.12, 0.012], [0.33, 0.13, 0.0], small); + return scene; +} + +async function exportGlb(scene, filename) { + const exporter = new GLTFExporter(); + const arrayBuffer = await exporter.parseAsync(scene, { binary: true }); + await writeFile(resolve(outDir, filename), Buffer.from(arrayBuffer)); +} + +await mkdir(outDir, { recursive: true }); +await exportGlb(createColorScene(), "three-color-fidelity.glb"); +await exportGlb(createSmallPartsScene(), "three-small-parts.glb"); +console.log(`Wrote Three quality fixtures to ${outDir}`); diff --git a/scripts/verify-diagnostics.mjs b/scripts/verify-diagnostics.mjs index 13c6c43..10594f3 100644 --- a/scripts/verify-diagnostics.mjs +++ b/scripts/verify-diagnostics.mjs @@ -101,15 +101,81 @@ await writeFile(entryPath, ` generatedAt: "2026-01-01T00:00:00.000Z", includeVaultPaths: true, }); + const failedState: PluginState = { + ...state, + lastKnowledgeGeneration: { + ...state.lastKnowledgeGeneration!, + status: "failed", + warningCount: 2, + }, + }; + const pendingState: PluginState = { + ...state, + lastKnowledgeGeneration: { + ...state.lastKnowledgeGeneration!, + status: "pending", + warningCount: 0, + }, + }; + const warningState: PluginState = { + ...state, + lastKnowledgeGeneration: { + ...state.lastKnowledgeGeneration!, + status: "success", + warningCount: 2, + }, + }; + const failedReport = 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: failedState, + generatedAt: "2026-01-01T00:00:00.000Z", + }); + const pendingReport = 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: pendingState, + generatedAt: "2026-01-01T00:00:00.000Z", + }); + const warningReport = 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: warningState, + 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("Route capability profile: three; formats=glb/gltf/stl/ply/obj"), "Route capability profile missing"); + assert(report.includes("Route color pipeline: sRGB output, no tone mapping"), "Route color pipeline missing"); assert(report.includes("Path: "), "Current model path was not redacted"); assert(report.includes("Knowledge index: set ()"), "Knowledge index status missing or unredacted"); assert(report.includes("Analysis sidecar: set ()"), "Analysis sidecar status missing or unredacted"); assert(report.includes("Report folder: "), "Report folder was not redacted"); assert(report.includes("Last part notes: 2"), "Last generation part count missing"); + assert(report.includes("Last generation attention: none"), "Last generation attention missing"); + assert(failedReport.includes("Last generation attention: failed; inspect console details and rerun after fixing the issue"), "Failed generation attention missing"); + assert(pendingReport.includes("Last generation attention: pending or interrupted; rerun generation to replace the marker"), "Pending generation attention missing"); + assert(warningReport.includes("Last generation attention: completed with warnings"), "Warning generation attention 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"); @@ -117,6 +183,11 @@ await writeFile(entryPath, ` assert(!report.includes("models/example.glb"), "Diagnostics leaked current model path"); assert(!report.includes("Analysis/3D Reports"), "Diagnostics leaked report folder path"); assert(!report.includes("example Report.md"), "Diagnostics leaked report note name"); + assert(!failedReport.includes("secret.example.invalid"), "Failed diagnostics leaked service host"); + assert(!failedReport.includes("/private/"), "Failed diagnostics leaked command path"); + assert(!failedReport.includes("models/example.glb"), "Failed diagnostics leaked model path"); + assert(!pendingReport.includes("secret.example.invalid"), "Pending diagnostics leaked service host"); + assert(!warningReport.includes("secret.example.invalid"), "Warning diagnostics leaked service host"); assert(fullPathReport.includes("Knowledge index: set (Analysis/3D Reports/example Index.md)"), "Full-path diagnostics mode did not include vault paths"); console.log("Diagnostics verification passed"); diff --git a/scripts/verify-preview-success.mjs b/scripts/verify-preview-success.mjs index bf29a32..61182c1 100644 --- a/scripts/verify-preview-success.mjs +++ b/scripts/verify-preview-success.mjs @@ -104,6 +104,24 @@ const cases = [ "OBJ material texture not found", ], }, + { + label: "Three color fidelity fixture", + args: [ + "--model", + join(rootDir, "models", "quality-fixtures", "three-color-fidelity.glb"), + "--expect-color-fidelity", + "--route-only", + ], + }, + { + label: "Three small-parts precision fixture", + args: [ + "--model", + join(rootDir, "models", "quality-fixtures", "three-small-parts.glb"), + "--expect-small-parts", + "--route-only", + ], + }, // GLB alternate path (confirms path resolution works) { label: "GLB alternate path (Three.js)", diff --git a/scripts/verify-preview.mjs b/scripts/verify-preview.mjs index 44a790e..f0d4686 100644 --- a/scripts/verify-preview.mjs +++ b/scripts/verify-preview.mjs @@ -72,6 +72,14 @@ function parseExpectGroupParts() { return process.argv.includes("--expect-group-parts"); } +function parseExpectColorFidelity() { + return process.argv.includes("--expect-color-fidelity"); +} + +function parseExpectSmallParts() { + return process.argv.includes("--expect-small-parts"); +} + const verifyMode = parseMode(); const verifyRollout = parseRollout(); const verifyAllowWorkbenchThree = parseAllowWorkbenchThree(); @@ -80,6 +88,8 @@ const verifyRouteOnly = parseRouteOnly(); const verifyExpectedWarning = parseExpectWarning(); const verifyExpectNoWarnings = parseExpectNoWarnings(); const verifyExpectGroupParts = parseExpectGroupParts(); +const verifyExpectColorFidelity = parseExpectColorFidelity(); +const verifyExpectSmallParts = parseExpectSmallParts(); const mimeTypes = new Map([ [".html", "text/html; charset=utf-8"], @@ -282,6 +292,9 @@ async function canvasPixelStats(page) { const stepX = Math.max(1, Math.floor(width / 64)); const stepY = Math.max(1, Math.floor(height / 64)); let nonBackground = 0; + let redDominant = 0; + let greenDominant = 0; + let blueDominant = 0; let samples = 0; let min = 255; let max = 0; @@ -298,6 +311,9 @@ async function canvasPixelStats(page) { max = Math.max(max, brightness); if (a > 0 && Math.abs(r - 32) + Math.abs(g - 36) + Math.abs(b - 46) > 18) { nonBackground += 1; + if (r > g * 1.25 && r > b * 1.25) redDominant += 1; + if (g > r * 1.2 && g > b * 1.2) greenDominant += 1; + if (b > r * 1.2 && b > g * 1.2) blueDominant += 1; } samples += 1; } @@ -306,6 +322,9 @@ async function canvasPixelStats(page) { return { samples, nonBackground, + redDominant, + greenDominant, + blueDominant, nonBackgroundRatio: nonBackground / samples, contrast: max - min, }; @@ -358,6 +377,9 @@ const toolbarLabels = { axes: "Toggle orientation axes", boundingBox: "Toggle bounding box", resolution: "Change resolution", + measurement: "Toggle distance measurement", + copyMeasurements: "Copy measurements", + clearMeasurements: "Clear measurements", }; async function getToolbarButton(page, label) { @@ -426,6 +448,100 @@ async function pickSelectedPartInfo(page, box) { return { markdown: "", clientX: box.x + box.width / 2, clientY: box.y + box.height / 2 }; } +async function readPickWorldPoint(page, clientX, clientY) { + return page.evaluate(({ clientX, clientY }) => new Promise((resolve) => { + const preview = window.__ai3dPreview; + const canvas = document.querySelector("#preview-canvas"); + if (!preview || !(canvas instanceof HTMLCanvasElement) || typeof preview.onPick !== "function") { + resolve(null); + return; + } + + let settled = false; + const settle = (value) => { + if (settled) return; + settled = true; + release(); + resolve(value); + }; + const release = preview.onPick((result) => { + const point = preview.getPickWorldPoint?.(result); + settle(point ? { x: point.x, y: point.y, z: point.z } : null); + }); + + canvas.dispatchEvent(new PointerEvent("pointerdown", { + bubbles: true, + button: 0, + buttons: 1, + clientX, + clientY, + isPrimary: true, + pointerId: 2, + pointerType: "mouse", + })); + canvas.dispatchEvent(new PointerEvent("pointerup", { + bubbles: true, + button: 0, + buttons: 0, + clientX, + clientY, + isPrimary: true, + pointerId: 2, + pointerType: "mouse", + })); + window.setTimeout(() => settle(null), 250); + }), { clientX, clientY }); +} + +function worldPointDistance(left, right) { + return Math.hypot(left.x - right.x, left.y - right.y, left.z - right.z); +} + +function clampClickToBox(box, clientX, clientY) { + return { + clientX: Math.min(Math.max(clientX, box.x + 8), box.x + box.width - 8), + clientY: Math.min(Math.max(clientY, box.y + 8), box.y + box.height - 8), + }; +} + +async function findMeasurementClickPair(page, box, firstPick) { + const candidates = [ + { clientX: firstPick.clientX, clientY: firstPick.clientY }, + { clientX: firstPick.clientX + 64, clientY: firstPick.clientY }, + { clientX: firstPick.clientX - 64, clientY: firstPick.clientY }, + { clientX: firstPick.clientX, clientY: firstPick.clientY + 64 }, + { clientX: firstPick.clientX, clientY: firstPick.clientY - 64 }, + { clientX: firstPick.clientX + 48, clientY: firstPick.clientY + 48 }, + { clientX: firstPick.clientX - 48, clientY: firstPick.clientY + 48 }, + { clientX: firstPick.clientX + 48, clientY: firstPick.clientY - 48 }, + { clientX: firstPick.clientX - 48, clientY: firstPick.clientY - 48 }, + { clientX: box.x + box.width * 0.5, clientY: box.y + box.height * 0.5 }, + { clientX: box.x + box.width * 0.56, clientY: box.y + box.height * 0.5 }, + { clientX: box.x + box.width * 0.44, clientY: box.y + box.height * 0.5 }, + { clientX: box.x + box.width * 0.5, clientY: box.y + box.height * 0.56 }, + { clientX: box.x + box.width * 0.5, clientY: box.y + box.height * 0.44 }, + ].map((entry) => clampClickToBox(box, entry.clientX, entry.clientY)); + + let first = null; + for (const candidate of candidates) { + const point = await readPickWorldPoint(page, candidate.clientX, candidate.clientY); + if (point) { + first = { ...candidate, point }; + break; + } + } + assert(first, "Could not find a first pick point for measurement verification"); + + for (const candidate of candidates) { + const point = await readPickWorldPoint(page, candidate.clientX, candidate.clientY); + if (point && worldPointDistance(point, first.point) > 0.0001) { + return { first, second: { ...candidate, point } }; + } + } + + throw new Error("Could not find two distinct pick points for measurement verification"); +} + async function verifyHelperToolbar(page) { await page.waitForSelector(".ai3d-helper-toolbar", { timeout: 5000 }); @@ -457,6 +573,89 @@ async function verifyHelperToolbar(page) { ); } +async function verifyMeasurementTool(page, box, firstPick) { + const clickPair = await findMeasurementClickPair(page, box, firstPick); + const measureBtn = await getToolbarButton(page, toolbarLabels.measurement); + await measureBtn.click(); + await page.waitForTimeout(100); + + const active = await page.evaluate(() => window.__ai3dPreview?.isMeasurementActive?.() ?? false); + assert(active === true, "Measurement mode did not turn on"); + assert( + await measureBtn.evaluate((entry) => entry.classList.contains("ai3d-btn-active")), + "Measurement toolbar button did not show active state", + ); + + await dispatchCanvasClick(page, clickPair.first.clientX, clickPair.first.clientY); + await page.waitForTimeout(100); + await dispatchCanvasClick(page, clickPair.second.clientX, clickPair.second.clientY); + await page.waitForTimeout(120); + const records = await page.evaluate(() => window.__ai3dPreview?.getMeasurementRecords?.() ?? []); + + assert(records.length === 1, `Expected one measurement record, got ${JSON.stringify(records)}`); + assert(records[0].reading.distance > 0, `Measurement distance was not positive: ${JSON.stringify(records[0])}`); + assert( + records[0].reading.absDelta.x > 0 || records[0].reading.absDelta.y > 0 || records[0].reading.absDelta.z > 0, + `Measurement axis deltas were empty: ${JSON.stringify(records[0])}`, + ); + + const calibrated = await page.evaluate(() => { + const preview = window.__ai3dPreview; + preview?.setMeasurementUnit?.("cm"); + preview?.setMeasurementScale?.({ x: 2, y: 2, z: 2 }); + return { + unit: preview?.getMeasurementUnit?.(), + records: preview?.getMeasurementRecords?.() ?? [], + markdown: preview?.exportMeasurements?.() ?? "", + }; + }); + assert(calibrated.unit === "cm", `Measurement unit did not update: ${JSON.stringify(calibrated)}`); + assert(calibrated.records[0]?.reading.unit === "cm", `Measurement record unit did not update: ${JSON.stringify(calibrated.records)}`); + assert(calibrated.markdown.includes("## Measurements"), "Measurement Markdown export missing heading"); + assert(calibrated.markdown.includes("Delta X"), "Measurement Markdown export missing delta columns"); + assert(calibrated.markdown.includes("cm"), `Measurement Markdown export missing calibrated unit: ${calibrated.markdown}`); + + await measureBtn.click(); + await page.waitForTimeout(100); + const toggledOff = await page.evaluate(() => ({ + active: window.__ai3dPreview?.isMeasurementActive?.() ?? true, + records: window.__ai3dPreview?.getMeasurementRecords?.() ?? [], + })); + assert(toggledOff.active === false, `Measurement mode did not turn off: ${JSON.stringify(toggledOff)}`); + assert(toggledOff.records.length === 1, "Completed measurements were cleared when measurement mode toggled off"); + + const copyBtn = await getToolbarButton(page, toolbarLabels.copyMeasurements); + await copyBtn.click(); + await page.waitForTimeout(100); + const clipboardText = await page.evaluate(() => navigator.clipboard.readText().catch(() => "")); + assert(clipboardText.includes("## Measurements") && clipboardText.includes("cm"), `Copied measurements were unexpected: ${clipboardText}`); + + const clearBtn = await getToolbarButton(page, toolbarLabels.clearMeasurements); + await clearBtn.click(); + await page.waitForTimeout(100); + const cleared = await page.evaluate(() => ({ + active: window.__ai3dPreview?.isMeasurementActive?.() ?? true, + records: window.__ai3dPreview?.getMeasurementRecords?.() ?? [], + markdown: window.__ai3dPreview?.exportMeasurements?.() ?? "not-empty", + })); + assert(cleared.active === false, "Clearing measurements unexpectedly enabled measurement mode"); + assert(cleared.records.length === 0, `Clear measurements left records behind: ${JSON.stringify(cleared.records)}`); + assert(cleared.markdown === "", `Clear measurements left Markdown behind: ${cleared.markdown}`); + + await measureBtn.click(); + await page.waitForTimeout(100); + await dispatchCanvasClick(page, clickPair.first.clientX, clickPair.first.clientY); + await page.waitForTimeout(100); + await measureBtn.click(); + await page.waitForTimeout(100); + const pendingCancelled = await page.evaluate(() => ({ + active: window.__ai3dPreview?.isMeasurementActive?.() ?? true, + records: window.__ai3dPreview?.getMeasurementRecords?.() ?? [], + })); + assert(pendingCancelled.active === false, "Measurement mode stayed active after cancelling a pending point"); + assert(pendingCancelled.records.length === 0, "Cancelling a pending measurement created a record"); +} + async function verifyReadonlyPinMode(page, state) { assert(state?.mode === "readonly-pin", `Expected readonly-pin mode, received ${state?.mode ?? "unknown"}`); await page.waitForFunction(() => { @@ -593,6 +792,78 @@ async function verifyThreePerformanceBudgetSnapshot(page, route, performanceSnap performanceSnapshot?.disposalAudit?.reason, `Three disposal audit is missing: ${JSON.stringify(performanceSnapshot)}`, ); + assert( + typeof performanceSnapshot?.renderedFrameCount === "number" && performanceSnapshot.renderedFrameCount > 0, + `Three performance snapshot is missing rendered frame count: ${JSON.stringify(performanceSnapshot)}`, + ); + assert( + typeof performanceSnapshot?.idleFrameSkipCount === "number" && performanceSnapshot.idleFrameSkipCount >= 0, + `Three performance snapshot is missing idle frame count: ${JSON.stringify(performanceSnapshot)}`, + ); + assert( + typeof performanceSnapshot?.averageRenderMs === "number" && performanceSnapshot.averageRenderMs >= 0, + `Three performance snapshot is missing average frame timing: ${JSON.stringify(performanceSnapshot)}`, + ); + assert( + typeof performanceSnapshot?.p95RenderMs === "number" && performanceSnapshot.p95RenderMs >= 0, + `Three performance snapshot is missing p95 frame timing: ${JSON.stringify(performanceSnapshot)}`, + ); + assert( + typeof performanceSnapshot?.maxRenderMs === "number" && performanceSnapshot.maxRenderMs >= 0, + `Three performance snapshot is missing max frame timing: ${JSON.stringify(performanceSnapshot)}`, + ); + assert( + typeof performanceSnapshot?.adaptiveScaleChangeCount === "number" && performanceSnapshot.adaptiveScaleChangeCount >= 0, + `Three performance snapshot is missing adaptive scale changes: ${JSON.stringify(performanceSnapshot)}`, + ); + const quality = performanceSnapshot?.qualitySnapshot; + assert(quality?.backend === "three", `Three quality snapshot is missing: ${JSON.stringify(performanceSnapshot)}`); + assert( + quality.supportedFormats?.includes("glb") && quality.supportedFormats?.includes("obj"), + `Three quality snapshot missing direct formats: ${JSON.stringify(quality)}`, + ); + assert( + quality.colorPipeline?.outputColorSpace === "srgb" && quality.colorPipeline?.toneMapping === "NoToneMapping", + `Three color pipeline drifted: ${JSON.stringify(quality?.colorPipeline)}`, + ); + assert( + typeof quality.camera?.nearFarRatio === "number" && quality.camera.nearFarRatio > 1, + `Three quality snapshot missing camera precision data: ${JSON.stringify(quality)}`, + ); + assert( + typeof quality.performance?.renderedFrameCount === "number" && quality.performance.renderedFrameCount > 0, + `Three quality snapshot missing rendered frame count: ${JSON.stringify(quality)}`, + ); + assert( + typeof quality.performance?.averageRenderMs === "number" && quality.performance.averageRenderMs >= 0, + `Three quality snapshot missing average frame timing: ${JSON.stringify(quality)}`, + ); +} + +function verifyColorFidelity(stats) { + if (!verifyExpectColorFidelity) return; + assert(stats.redDominant > 4, `Color fixture did not expose enough red-dominant pixels: ${JSON.stringify(stats)}`); + assert(stats.greenDominant > 4, `Color fixture did not expose enough green-dominant pixels: ${JSON.stringify(stats)}`); + assert(stats.blueDominant > 4, `Color fixture did not expose enough blue-dominant pixels: ${JSON.stringify(stats)}`); +} + +function verifySmallPartsQuality(state) { + if (!verifyExpectSmallParts) return; + const quality = state?.qualitySnapshot; + const parts = Array.isArray(state?.evidence?.parts) ? state.evidence.parts : []; + assert(state?.summary?.meshCount >= 7, `Small-parts fixture lost meshes: ${JSON.stringify(state?.summary)}`); + assert( + quality?.geometry?.smallPartCount >= 5, + `Three quality snapshot did not detect small parts: ${JSON.stringify(quality)}`, + ); + assert( + quality.geometry.smallestPartSpan > 0 && quality.geometry.smallestPartSpan < quality.geometry.modelSpan * 0.05, + `Smallest-part precision looks wrong: ${JSON.stringify(quality.geometry)}`, + ); + assert( + parts.some((part) => String(part?.name ?? "").includes("tiny_screw")), + `Small part evidence did not include tiny screw meshes: ${JSON.stringify(parts)}`, + ); } function verifyGroupedPartsEvidence(state) { @@ -829,6 +1100,9 @@ async function verify() { params.set("model", modelRef); } const targetUrl = params.size > 0 ? `${url}?${params.toString()}` : url; + await page.context().grantPermissions(["clipboard-read", "clipboard-write"], { + origin: new URL(targetUrl).origin, + }); await page.goto(targetUrl, { waitUntil: "commit" }); await page.waitForFunction(() => !!window.__ai3dPreviewVerify && window.__ai3dPreviewVerify.status !== "loading", null, { timeout: 15000, @@ -854,6 +1128,7 @@ async function verify() { assert(warnings.length === 0, `Expected no resource warnings, got ${JSON.stringify(warnings)}`); } verifyGroupedPartsEvidence(state); + verifySmallPartsQuality(state); await page.locator("#preview-canvas").scrollIntoViewIfNeeded(); await verifyCanvasAccessibility(page); @@ -861,6 +1136,7 @@ async function verify() { const stats = await canvasPixelStats(page); assert(stats.nonBackgroundRatio > 0.01, `Canvas looks blank: ${JSON.stringify(stats)}`); assert(stats.contrast > 12, `Canvas has too little contrast: ${JSON.stringify(stats)}`); + verifyColorFidelity(stats); const performanceSnapshot = await page.evaluate(() => window.__ai3dPreview?.getPerformanceSnapshot?.() ?? null); assert( performanceSnapshot?.backend === state.route?.backend, @@ -875,6 +1151,7 @@ async function verify() { rendererRollout: verifyRollout, route: state.route, summary: state.summary, + qualitySnapshot: state.qualitySnapshot, pixelStats: stats, performance: performanceSnapshot, }, null, 2)); @@ -904,6 +1181,7 @@ async function verify() { clientX: selectedPartPick.clientX, clientY: selectedPartPick.clientY, }); + await verifyMeasurementTool(page, box, selectedPartPick); } await verifyHelperToolbar(page); diff --git a/scripts/visual-preview-entry.ts b/scripts/visual-preview-entry.ts index 85948f2..b45745e 100644 --- a/scripts/visual-preview-entry.ts +++ b/scripts/visual-preview-entry.ts @@ -25,6 +25,12 @@ declare global { setText(text: string): void; } + interface Document { + createDiv(options?: DomCreateInput): HTMLDivElement; + createEl(tag: K, options?: DomCreateInput): HTMLElementTagNameMap[K]; + createSvg(tag: K): SVGElementTagNameMap[K]; + } + interface Window { __ai3dPreview?: ModelPreview; __ai3dPreviewVerify?: { @@ -33,6 +39,7 @@ declare global { rendererRollout?: "babylon-safe" | "three-readonly-glb" | "three-direct-glb"; summary?: unknown; route?: unknown; + qualitySnapshot?: unknown; evidence?: unknown; pinCount?: number; pinLabels?: string[]; @@ -81,6 +88,10 @@ function installObsidianDomShims(): void { globals.createEl = (tag, options) => applyDomCreateOptions(document.createElement(tag), options); globals.createSvg = ((tag: keyof SVGElementTagNameMap) => document.createElementNS("http://www.w3.org/2000/svg", tag)) as typeof globals.createSvg; + document.createDiv = (options) => applyDomCreateOptions(document.createElement("div"), options); + document.createEl = (tag, options) => applyDomCreateOptions(document.createElement(tag), options); + document.createSvg = ((tag: keyof SVGElementTagNameMap) => + document.createElementNS("http://www.w3.org/2000/svg", tag)) as Document["createSvg"]; const proto = HTMLElement.prototype as HTMLElement & { createDiv?: (options?: DomCreateInput) => HTMLDivElement; @@ -408,7 +419,15 @@ 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, evidence: preview.getModelEvidence?.() ?? null }); + setVerifyState({ + status: "ready", + mode: "basic", + rendererRollout, + summary, + route, + qualitySnapshot: preview.getQualitySnapshot?.() ?? null, + evidence: preview.getModelEvidence?.() ?? null, + }); } async function runDirectEditPreview( @@ -453,6 +472,7 @@ async function runDirectEditPreview( rendererRollout, summary, route, + qualitySnapshot: preview.getQualitySnapshot?.() ?? null, evidence: preview.getModelEvidence?.() ?? null, pinCount: 0, pinLabels: [], @@ -515,6 +535,7 @@ async function runReadonlyPinPreview( rendererRollout, summary, route, + qualitySnapshot: preview.getQualitySnapshot?.() ?? null, evidence: preview.getModelEvidence?.() ?? null, pinCount: initialPins.length, pinLabels: initialPins.map((pin) => pin.label), @@ -575,6 +596,7 @@ async function runWorkbenchPreview( rendererRollout, summary, route, + qualitySnapshot: preview.getQualitySnapshot?.() ?? null, evidence: preview.getModelEvidence?.() ?? null, pinCount: initialPins.length, pinLabels: initialPins.map((pin) => pin.label), diff --git a/src/diagnostics/report.test.ts b/src/diagnostics/report.test.ts new file mode 100644 index 0000000..0e9b1d2 --- /dev/null +++ b/src/diagnostics/report.test.ts @@ -0,0 +1,64 @@ +import { describe, expect, it, vi } from "vitest"; +import { DEFAULT_SETTINGS } from "../domain/constants"; +import type { PluginState } from "../domain/models"; +import { buildDiagnosticsReport } from "./report"; + +vi.mock("obsidian", () => ({ + apiVersion: "1.12.7", + Platform: { isMobile: false }, +})); + +function createState(): PluginState { + return { + settings: { + ...DEFAULT_SETTINGS, + useThreeRenderer: true, + previewRendererRollout: "three-direct-glb", + }, + currentModelPath: "models/example.glb", + convertedAssetRecords: [], + modelAssetProfiles: { + "models/example.glb": { + tags: [], + notes: "", + annotations: [], + createdAt: "2026-01-01T00:00:00.000Z", + updatedAt: "2026-01-01T00:00:00.000Z", + }, + }, + agentDraft: "", + agentPlan: null, + modelPreview: { + meshCount: 1, + triangleCount: 12, + vertexCount: 24, + materialCount: 1, + boundingSize: { x: 1, y: 1, z: 1 }, + rootName: "example", + }, + selectedPart: null, + lastKnowledgeGeneration: null, + }; +} + +describe("diagnostics report", () => { + it("includes renderer route capability and color pipeline context", () => { + const report = buildDiagnosticsReport({ + manifest: { + id: "ai-model-workbench", + name: "AI Model Workbench", + version: "0.5.8", + minAppVersion: "1.5.0", + description: "", + author: "", + }, + state: createState(), + generatedAt: "2026-01-01T00:00:00.000Z", + }); + + expect(report).toContain("Current route: three"); + expect(report).toContain("Route capability profile: three; formats=glb/gltf/stl/ply/obj"); + expect(report).toContain("Route color pipeline: sRGB output, no tone mapping"); + expect(report).toContain("Path: "); + }); +}); diff --git a/src/diagnostics/report.ts b/src/diagnostics/report.ts index b72c47f..305d1d6 100644 --- a/src/diagnostics/report.ts +++ b/src/diagnostics/report.ts @@ -2,6 +2,7 @@ import { apiVersion } from "obsidian"; import type { PluginManifest } from "obsidian"; import type { PluginState } from "../domain/models"; import { listSupportedModelExtensions } from "../io/formats/registry"; +import { describePreviewRouteCapabilities, formatPreviewCapabilityProfile } from "../render/preview/capabilities"; import { resolvePreviewRoute } from "../render/preview/routing"; import { isMobile } from "../utils/device"; @@ -62,6 +63,23 @@ function getCurrentProfile(state: PluginState) { return path ? state.modelAssetProfiles[path] : undefined; } +function formatKnowledgeGenerationAttention(state: PluginState): string { + const last = state.lastKnowledgeGeneration; + if (!last) { + return "none"; + } + if (last.status === "pending") { + return "pending or interrupted; rerun generation to replace the marker"; + } + if (last.status === "failed") { + return "failed; inspect console details and rerun after fixing the issue"; + } + if (last.warningCount > 0) { + return "completed with warnings"; + } + return "none"; +} + export function buildDiagnosticsReport(options: BuildDiagnosticsReportOptions): string { const { manifest, state } = options; const settings = state.settings; @@ -77,6 +95,7 @@ export function buildDiagnosticsReport(options: BuildDiagnosticsReportOptions): useThreeRenderer: settings.useThreeRenderer, }) : null; + const routeCapabilityProfile = route ? describePreviewRouteCapabilities(route) : null; const last = state.lastKnowledgeGeneration; return [ @@ -98,6 +117,8 @@ export function buildDiagnosticsReport(options: BuildDiagnosticsReportOptions): `- Preview rollout: ${settings.previewRendererRollout}`, `- Experimental Three workbench: ${formatValue(settings.experimentalThreeWorkbench)}`, `- Current route: ${route ? `${route.backend} (${route.reason})` : "no current model"}`, + `- Route capability profile: ${routeCapabilityProfile ? formatPreviewCapabilityProfile(routeCapabilityProfile) : "no current model"}`, + `- Route color pipeline: ${routeCapabilityProfile?.colorPipeline ?? "no current model"}`, `- Render quality: ${settings.renderQuality}`, `- Render scale: ${settings.renderScale}`, "", @@ -118,6 +139,7 @@ export function buildDiagnosticsReport(options: BuildDiagnosticsReportOptions): `- Part notes folder: ${formatPathValue(settings.partFolder, includeVaultPaths, "empty")}`, `- Snapshot folder: ${formatPathValue(settings.previewFolder, includeVaultPaths, "empty")}`, `- Last generation: ${last ? `${last.status} at ${last.generatedAt}` : "none"}`, + `- Last generation attention: ${formatKnowledgeGenerationAttention(state)}`, `- Last generated model: ${formatPathValue(last?.modelPath, includeVaultPaths, "none")}`, `- Last report: ${formatPathStatus(last?.reportNotePath, includeVaultPaths)}`, `- Last index: ${formatPathStatus(last?.knowledgeIndexPath, includeVaultPaths)}`, diff --git a/src/render/babylon/scene.ts b/src/render/babylon/scene.ts index 7e3cbc5..749ee2e 100644 --- a/src/render/babylon/scene.ts +++ b/src/render/babylon/scene.ts @@ -421,7 +421,7 @@ export class BabylonModelPreview implements WorkbenchPreview { } this.loadedMeshes = []; this.loadedTransformNodes = []; - this.clearMeasurements(); + this.disposeMeasurementOverlays(true); this.disassembly?.dispose(); this.disassembly = null; this.clearFocusedMesh(); @@ -880,7 +880,7 @@ export class BabylonModelPreview implements WorkbenchPreview { toggleMeasurement(): boolean { this.measurementActive = !this.measurementActive; if (!this.measurementActive) { - this.clearMeasurements(); + this.cancelPendingMeasurement(); } return this.measurementActive; } @@ -890,18 +890,21 @@ export class BabylonModelPreview implements WorkbenchPreview { } clearMeasurements(): void { - this.measurementActive = false; - this.pendingPoint = null; - this.pendingMarker = null; - this.hoveredMarkerIndex = -1; - this.removePreviewLine(); + this.disposeMeasurementOverlays(false); + } + + private disposeMeasurementOverlays(deactivate: boolean): void { + if (deactivate) { + this.measurementActive = false; + } + this.cancelPendingMeasurement(false); for (const segment of this.measurementSegments) { - segment.line.dispose(); - segment.label.dispose(); + segment.line.dispose(false, true); + segment.label.dispose(false, true); } this.measurementSegments = []; for (const marker of this.measurementMarkers) { - marker.dispose(); + marker.dispose(false, true); } this.measurementMarkers = []; } @@ -936,6 +939,10 @@ export class BabylonModelPreview implements WorkbenchPreview { }; } + getMeasurementRecords(): MeasurementRecord[] { + return this.createMeasurementRecords(); + } + exportMeasurements(): string { return createMeasurementMarkdown(this.createMeasurementRecords()); } @@ -1310,7 +1317,7 @@ export class BabylonModelPreview implements WorkbenchPreview { this.gizmo = null; this.disassembly?.dispose(); this.disassembly = null; - this.clearMeasurements(); + this.disposeMeasurementOverlays(true); this.clearFocusedMesh(); this.originalMeshVisibility.clear(); this.bboxMesh?.dispose(); @@ -1549,6 +1556,36 @@ export class BabylonModelPreview implements WorkbenchPreview { return maxSpan * 0.015; } + private cancelPendingMeasurement(markDirty = true): void { + const pendingMarker = this.pendingMarker; + const pendingPoint = this.pendingPoint?.clone() ?? null; + this.pendingPoint = null; + this.pendingMarker = null; + this.hoveredMarkerIndex = -1; + this.removePreviewLine(); + + if (pendingMarker && pendingPoint && !this.isMeasurementPointUsed(pendingPoint)) { + const index = this.measurementMarkers.indexOf(pendingMarker); + if (index >= 0) { + this.measurementMarkers.splice(index, 1); + } + pendingMarker.dispose(false, true); + } else if (pendingMarker) { + pendingMarker.scaling.setAll(1); + (pendingMarker.material as StandardMaterial).diffuseColor = new Color3(1, 0.42, 0.42); + (pendingMarker.material as StandardMaterial).emissiveColor = new Color3(1, 0.42, 0.42); + } + + if (markDirty) { + this.scene.render(); + } + } + + private isMeasurementPointUsed(point: Vector3): boolean { + return this.measurementSegments.some((segment) => + Vector3.Distance(segment.start, point) < 0.0001 || Vector3.Distance(segment.end, point) < 0.0001); + } + private findNearestMarkerIndex(point: Vector3): number { const threshold = this.getMeasurementMarkerSize() * 2.5; for (let i = 0; i < this.measurementMarkers.length; i++) { diff --git a/src/render/preview/camera-fit.test.ts b/src/render/preview/camera-fit.test.ts new file mode 100644 index 0000000..f2c8563 --- /dev/null +++ b/src/render/preview/camera-fit.test.ts @@ -0,0 +1,38 @@ +import { describe, expect, it } from "vitest"; +import { createPreviewBounds } from "./bounds"; +import { createPreviewPerspectiveCameraFit } from "./camera-fit"; + +describe("preview perspective camera fit", () => { + it("keeps tiny models on their real scale", () => { + const fit = createPreviewPerspectiveCameraFit(createPreviewBounds( + { x: 0, y: 0, z: 0 }, + { x: 0.001, y: 0.001, z: 0.001 }, + )); + + expect(fit.position.x).toBeLessThan(0.01); + expect(fit.near).toBeLessThan(0.001); + expect(fit.far).toBeLessThanOrEqual(1); + }); + + it("fits ordinary models without an excessive far plane", () => { + const fit = createPreviewPerspectiveCameraFit(createPreviewBounds( + { x: -0.5, y: -0.5, z: -0.5 }, + { x: 0.5, y: 0.5, z: 0.5 }, + )); + + expect(fit.near).toBeGreaterThan(0); + expect(fit.far).toBeLessThan(100); + expect(fit.far / fit.near).toBeLessThan(25000); + }); + + it("scales far plane for large models", () => { + const fit = createPreviewPerspectiveCameraFit(createPreviewBounds( + { x: -500, y: -250, z: -100 }, + { x: 500, y: 250, z: 100 }, + )); + + expect(fit.position.x).toBeGreaterThan(1000); + expect(fit.far).toBeGreaterThan(10000); + expect(fit.near).toBeGreaterThanOrEqual(1); + }); +}); diff --git a/src/render/preview/camera-fit.ts b/src/render/preview/camera-fit.ts index 43875a4..ebb7f8e 100644 --- a/src/render/preview/camera-fit.ts +++ b/src/render/preview/camera-fit.ts @@ -65,7 +65,10 @@ export function createPreviewPerspectiveCameraFit( options: PreviewPerspectiveCameraFitOptions = {}, ): PreviewPerspectiveCameraFit { const metrics = getPreviewBoundsMetrics(bounds); - const distance = Math.max(metrics.maxSpan, 1) * (options.distanceMultiplier ?? 1.8); + const modelSpan = Math.max(metrics.maxSpan, metrics.radius, Number.EPSILON); + const distance = modelSpan * (options.distanceMultiplier ?? 1.8); + const near = Math.max(options.minNear ?? Math.max(modelSpan / 10000, 0.00001), modelSpan / (options.nearDivisor ?? 1000)); + const far = Math.max(options.minFar ?? Math.max(modelSpan * (options.farMultiplier ?? 20), 1), distance + metrics.radius * 4); return { target: clonePreviewWorldPoint(metrics.center), position: addPreviewWorldPoints(metrics.center, { @@ -73,7 +76,7 @@ export function createPreviewPerspectiveCameraFit( y: distance * (options.elevationFactor ?? 0.65), z: distance, }), - near: Math.max(options.minNear ?? 0.01, metrics.maxSpan / (options.nearDivisor ?? 100)), - far: Math.max(options.minFar ?? 100, metrics.maxSpan * (options.farMultiplier ?? 20)), + near, + far, }; } diff --git a/src/render/preview/capabilities.test.ts b/src/render/preview/capabilities.test.ts new file mode 100644 index 0000000..fd6615d --- /dev/null +++ b/src/render/preview/capabilities.test.ts @@ -0,0 +1,92 @@ +import { describe, expect, it } from "vitest"; +import { + collectPreviewCapabilities, + collectPreviewCapabilityProfile, + describePreviewRouteCapabilities, +} from "./capabilities"; +import type { PreviewRouteDecision } from "./routing"; + +describe("preview capability profile", () => { + it("collects complete callable capabilities", () => { + const preview = { + getAnnotationProvider: () => ({}), + hasAnimations: () => true, + toggleAnimation: () => true, + toggleMeasurement: () => true, + isMeasurementActive: () => false, + clearMeasurements: () => undefined, + setMeasurementScale: () => undefined, + getMeasurementScale: () => ({ x: 1, y: 1, z: 1 }), + setMeasurementUnit: () => undefined, + getMeasurementUnit: () => "mm", + getMeasurementBounds: () => null, + getMeasurementRecords: () => [], + updateMeasurementLabels: () => undefined, + exportMeasurements: () => "", + toggleDisassembly: () => true, + resetDisassembly: () => undefined, + isDisassemblyEnabled: () => false, + toggleFocusSelection: () => true, + isFocusSelectionEnabled: () => false, + toggleWireframe: () => true, + toggleOrientationGizmo: () => true, + toggleBoundingBox: () => true, + setRenderScale: () => 1, + setExplode: () => undefined, + resetExplode: () => undefined, + focusWorldPoint: () => undefined, + }; + + expect(collectPreviewCapabilities(preview)).toEqual([ + "annotation", + "animation", + "measurement", + "disassembly", + "focus-selection", + "wireframe", + "orientation-gizmo", + "bounding-box", + "render-scale", + "workbench", + ]); + }); + + it("rejects partial or non-callable capability contracts", () => { + const preview = { + getAnnotationProvider: true, + hasAnimations: () => true, + toggleAnimation: false, + toggleMeasurement: () => true, + isMeasurementActive: () => false, + setExplode: () => undefined, + resetExplode: "nope", + focusWorldPoint: () => undefined, + }; + + expect(collectPreviewCapabilities(preview)).toEqual([]); + }); + + it("describes route capability policy without a live preview instance", () => { + const route: PreviewRouteDecision = { + backend: "three", + ext: "glb", + annotationMode: "none", + requireWorkbenchFeatures: false, + rendererRollout: "three-direct-glb", + reason: "simple glb preview", + }; + + const profile = describePreviewRouteCapabilities(route); + expect(profile.backend).toBe("three"); + expect(profile.supportedFormats).toContain("gltf"); + expect(profile.colorPipeline).toContain("sRGB"); + }); + + it("builds a backend-specific profile from a live preview", () => { + const profile = collectPreviewCapabilityProfile({ toggleWireframe: () => true }, "babylon"); + + expect(profile.backend).toBe("babylon"); + expect(profile.supportedFormats).toContain("splat"); + expect(profile.capabilities).toEqual(["wireframe"]); + }); +}); diff --git a/src/render/preview/capabilities.ts b/src/render/preview/capabilities.ts new file mode 100644 index 0000000..aa42317 --- /dev/null +++ b/src/render/preview/capabilities.ts @@ -0,0 +1,111 @@ +import type { PreviewRouteDecision } from "./routing"; +import { + supportsAnnotationPreview, + supportsAnimationPreview, + supportsBoundingBoxPreview, + supportsDisassemblyPreview, + supportsFocusSelectionPreview, + supportsMeasurementPreview, + supportsOrientationGizmoPreview, + supportsRenderScalePreview, + supportsWireframePreview, + supportsWorkbenchPreview, + type PreviewCapabilityId, + type PreviewCapabilityProfile, +} from "./types"; + +const THREE_DIRECT_FORMATS = ["glb", "gltf", "stl", "ply", "obj"] as const; +const BABYLON_CAPABILITY_FORMATS = ["glb", "gltf", "stl", "ply", "obj", "splat", "converted-glb"] as const; + +export function collectPreviewCapabilities(preview: unknown): PreviewCapabilityId[] { + const capabilities: PreviewCapabilityId[] = []; + if (supportsAnnotationPreview(preview)) capabilities.push("annotation"); + if (supportsAnimationPreview(preview)) capabilities.push("animation"); + if (supportsMeasurementPreview(preview)) capabilities.push("measurement"); + if (supportsDisassemblyPreview(preview)) capabilities.push("disassembly"); + if (supportsFocusSelectionPreview(preview)) capabilities.push("focus-selection"); + if (supportsWireframePreview(preview)) capabilities.push("wireframe"); + if (supportsOrientationGizmoPreview(preview)) capabilities.push("orientation-gizmo"); + if (supportsBoundingBoxPreview(preview)) capabilities.push("bounding-box"); + if (supportsRenderScalePreview(preview)) capabilities.push("render-scale"); + if (supportsWorkbenchPreview(preview)) capabilities.push("workbench"); + return capabilities; +} + +export function createPreviewCapabilityProfile( + backend: "three" | "babylon", + capabilities: readonly PreviewCapabilityId[], +): PreviewCapabilityProfile { + if (backend === "three") { + return { + backend, + supportedFormats: THREE_DIRECT_FORMATS, + fallbackRole: "Primary single-model preview path", + capabilities: [...capabilities], + colorPipeline: "sRGB output, no tone mapping, PBR material preservation", + fidelityNotes: [ + "Direct GLB/GLTF/STL/PLY/OBJ are expected to preserve geometry scale and material color intent.", + "Workbench, grid, and SPLAT routes still keep Babylon fallback coverage.", + ], + }; + } + + return { + backend, + supportedFormats: BABYLON_CAPABILITY_FORMATS, + fallbackRole: "Capability and compatibility backend", + capabilities: [...capabilities], + colorPipeline: "Babylon material pipeline with conservative fallback behavior", + fidelityNotes: [ + "3dgrid, conservative workbench, SPLAT, and converted workbench inputs remain on Babylon.", + "Babylon remains the rollback path when Three direct rendering is disabled.", + ], + }; +} + +export function collectPreviewCapabilityProfile( + preview: unknown, + backend: "three" | "babylon", +): PreviewCapabilityProfile { + return createPreviewCapabilityProfile(backend, collectPreviewCapabilities(preview)); +} + +export function describePreviewRouteCapabilities(route: PreviewRouteDecision): PreviewCapabilityProfile { + if (route.backend === "three") { + const capabilities: PreviewCapabilityId[] = [ + "annotation", + "animation", + "measurement", + "disassembly", + "focus-selection", + "wireframe", + "orientation-gizmo", + "bounding-box", + "render-scale", + "workbench", + ]; + return createPreviewCapabilityProfile("three", capabilities); + } + + return createPreviewCapabilityProfile("babylon", [ + "annotation", + "animation", + "measurement", + "disassembly", + "focus-selection", + "wireframe", + "orientation-gizmo", + "bounding-box", + "render-scale", + "workbench", + ]); +} + +export function formatPreviewCapabilityProfile(profile: PreviewCapabilityProfile): string { + return [ + `${profile.backend}`, + `formats=${profile.supportedFormats.join("/")}`, + `capabilities=${profile.capabilities.join("/") || "none"}`, + `role=${profile.fallbackRole}`, + ].join("; "); +} diff --git a/src/render/preview/measurement.test.ts b/src/render/preview/measurement.test.ts index 9a3b421..749d873 100644 --- a/src/render/preview/measurement.test.ts +++ b/src/render/preview/measurement.test.ts @@ -3,6 +3,7 @@ import { createMeasurementLabel, createMeasurementMarkdown, createMeasurementReading, + formatMeasurementValue, normalizeMeasurementUnit, sanitizeMeasurementScale, } from "./measurement"; @@ -14,10 +15,17 @@ describe("measurement helpers", () => { it("normalizes unsupported units to millimeters", () => { expect(normalizeMeasurementUnit("μm")).toBe("um"); + expect(normalizeMeasurementUnit("\u00b5m")).toBe("um"); + expect(normalizeMeasurementUnit("\u03bcm")).toBe("um"); expect(normalizeMeasurementUnit("cm")).toBe("cm"); expect(normalizeMeasurementUnit("inch")).toBe("mm"); }); + it("formats micrometer values with an ascii unit label", () => { + expect(formatMeasurementValue(0.0004, "mm")).toBe("0.4 um"); + expect(formatMeasurementValue(12, "um", false)).toBe("12 um"); + }); + it("creates distance and axis-delta labels from calibrated scale", () => { const reading = createMeasurementReading( { x: 0, y: 0, z: 0 }, diff --git a/src/render/preview/measurement.ts b/src/render/preview/measurement.ts index 8698d11..7a94b71 100644 --- a/src/render/preview/measurement.ts +++ b/src/render/preview/measurement.ts @@ -1,18 +1,6 @@ -import type { MeasurementScale, MeasurementUnit, PreviewWorldPoint } from "./types"; +import type { MeasurementReading, MeasurementRecord, MeasurementScale, MeasurementUnit, PreviewWorldPoint } from "./types"; -export interface MeasurementReading { - distance: number; - delta: PreviewWorldPoint; - absDelta: PreviewWorldPoint; - unit: MeasurementUnit; -} - -export interface MeasurementRecord { - index: number; - start: PreviewWorldPoint; - end: PreviewWorldPoint; - reading: MeasurementReading; -} +export type { MeasurementReading, MeasurementRecord } from "./types"; const UNIT_FACTORS_TO_METERS: Record = { um: 0.000001, @@ -30,7 +18,8 @@ const UNIT_LABELS: Record = { export function normalizeMeasurementUnit(unit: string | undefined): MeasurementUnit { switch (unit) { - case "μm": + case "\u00b5m": + case "\u03bcm": return "um"; case "um": case "mm": @@ -89,12 +78,16 @@ function chooseDisplayUnit(value: number, unit: MeasurementUnit): MeasurementUni return "m"; } +function getMeasurementUnitLabel(unit: MeasurementUnit): string { + return unit === "um" ? "um" : UNIT_LABELS[unit]; +} + export function formatMeasurementValue(value: number, unit: MeasurementUnit, autoUnit = true): string { const displayUnit = autoUnit ? chooseDisplayUnit(value, unit) : unit; const converted = value * UNIT_FACTORS_TO_METERS[unit] / UNIT_FACTORS_TO_METERS[displayUnit]; const abs = Math.abs(converted); const decimals = abs >= 100 ? 1 : abs >= 10 ? 2 : 3; - return `${formatNumber(converted, decimals)} ${UNIT_LABELS[displayUnit]}`; + return `${formatNumber(converted, decimals)} ${getMeasurementUnitLabel(displayUnit)}`; } export function formatMeasurementAxisValue(value: number): string { @@ -110,7 +103,7 @@ export function createMeasurementLabel(reading: MeasurementReading): { primary: `X ${formatMeasurementAxisValue(reading.absDelta.x)}`, `Y ${formatMeasurementAxisValue(reading.absDelta.y)}`, `Z ${formatMeasurementAxisValue(reading.absDelta.z)}`, - UNIT_LABELS[reading.unit], + getMeasurementUnitLabel(reading.unit), ].join(" "), }; } diff --git a/src/render/preview/types.test.ts b/src/render/preview/types.test.ts new file mode 100644 index 0000000..ada1510 --- /dev/null +++ b/src/render/preview/types.test.ts @@ -0,0 +1,89 @@ +import { describe, expect, it } from "vitest"; +import { + supportsAnnotationPreview, + supportsAnimationPreview, + supportsBoundingBoxPreview, + supportsDisassemblyPreview, + supportsFocusSelectionPreview, + supportsMeasurementPreview, + supportsOrientationGizmoPreview, + supportsRenderScalePreview, + supportsWireframePreview, + supportsWorkbenchPreview, +} from "./types"; + +describe("preview capability guards", () => { + it("requires capability properties to be callable methods", () => { + expect(supportsAnnotationPreview({ getAnnotationProvider: true })).toBe(false); + expect(supportsAnimationPreview({ hasAnimations: true, toggleAnimation: () => true })).toBe(false); + expect(supportsBoundingBoxPreview({ toggleBoundingBox: true })).toBe(false); + expect(supportsDisassemblyPreview({ + toggleDisassembly: () => true, + resetDisassembly: () => undefined, + isDisassemblyEnabled: "not a function", + })).toBe(false); + expect(supportsFocusSelectionPreview({ + toggleFocusSelection: () => true, + isFocusSelectionEnabled: false, + })).toBe(false); + expect(supportsWorkbenchPreview({ + setExplode: () => undefined, + resetExplode: "not a function", + focusWorldPoint: () => undefined, + })).toBe(false); + expect(supportsOrientationGizmoPreview({ toggleOrientationGizmo: true })).toBe(false); + expect(supportsRenderScalePreview({ setRenderScale: 1 })).toBe(false); + expect(supportsWireframePreview({ toggleWireframe: "yes" })).toBe(false); + }); + + it("accepts complete toolbar capability contracts", () => { + expect(supportsAnnotationPreview({ getAnnotationProvider: () => ({}) })).toBe(true); + expect(supportsAnimationPreview({ hasAnimations: () => true, toggleAnimation: () => true })).toBe(true); + expect(supportsBoundingBoxPreview({ toggleBoundingBox: () => true })).toBe(true); + expect(supportsDisassemblyPreview({ + toggleDisassembly: () => true, + resetDisassembly: () => undefined, + isDisassemblyEnabled: () => false, + })).toBe(true); + expect(supportsFocusSelectionPreview({ + toggleFocusSelection: () => true, + isFocusSelectionEnabled: () => false, + })).toBe(true); + expect(supportsOrientationGizmoPreview({ toggleOrientationGizmo: () => true })).toBe(true); + expect(supportsRenderScalePreview({ setRenderScale: () => 1 })).toBe(true); + expect(supportsWireframePreview({ toggleWireframe: () => true })).toBe(true); + expect(supportsWorkbenchPreview({ + setExplode: () => undefined, + resetExplode: () => undefined, + focusWorldPoint: () => undefined, + })).toBe(true); + }); + + it("accepts a complete measurement preview contract", () => { + const preview = { + toggleMeasurement: () => true, + isMeasurementActive: () => false, + clearMeasurements: () => undefined, + setMeasurementScale: () => undefined, + getMeasurementScale: () => ({ x: 1, y: 1, z: 1 }), + setMeasurementUnit: () => undefined, + getMeasurementUnit: () => "mm", + getMeasurementBounds: () => null, + getMeasurementRecords: () => [], + updateMeasurementLabels: () => undefined, + exportMeasurements: () => "", + }; + + expect(supportsMeasurementPreview(preview)).toBe(true); + }); + + it("rejects partial measurement contracts", () => { + const preview = { + toggleMeasurement: () => true, + isMeasurementActive: () => false, + clearMeasurements: () => undefined, + }; + + expect(supportsMeasurementPreview(preview)).toBe(false); + }); +}); diff --git a/src/render/preview/types.ts b/src/render/preview/types.ts index 112b8c6..b8296dd 100644 --- a/src/render/preview/types.ts +++ b/src/render/preview/types.ts @@ -64,6 +64,66 @@ export interface ModelPreview { setRenderQuality?(quality: "low" | "medium" | "high", renderScale?: number): void; setRenderScale?(scale: number): number; getPerformanceSnapshot?(): ModelPreviewPerformanceSnapshot; + getQualitySnapshot?(): PreviewQualitySnapshot; +} + +export type PreviewCapabilityId = + | "annotation" + | "animation" + | "measurement" + | "disassembly" + | "focus-selection" + | "wireframe" + | "orientation-gizmo" + | "bounding-box" + | "render-scale" + | "workbench"; + +export interface PreviewCapabilityProfile { + backend: "three" | "babylon"; + supportedFormats: readonly string[]; + fallbackRole: string; + capabilities: readonly PreviewCapabilityId[]; + colorPipeline: string; + fidelityNotes: readonly string[]; +} + +export interface PreviewQualitySnapshot { + backend: "three" | "babylon"; + supportedFormats: readonly string[]; + colorPipeline: { + outputColorSpace: string; + toneMapping: string; + textureCount: number; + colorTextureCount: number; + srgbColorTextureCount: number; + }; + geometry: { + meshCount: number; + pointCloudCount: number; + smallPartCount: number; + smallestPartSpan: number | null; + modelSpan: number | null; + }; + camera: { + near: number; + far: number; + nearFarRatio: number; + }; + performance: { + renderScale: number; + pixelRatio?: number; + frameBudgetPixelRatioScale?: number; + frameBudgetObserverStride?: number; + viewportVisible?: boolean; + renderedFrameCount?: number; + idleFrameSkipCount?: number; + slowFrameCount?: number; + averageRenderMs?: number; + p95RenderMs?: number; + maxRenderMs?: number; + adaptiveScaleChangeCount?: number; + }; } export interface ModelPreviewPerformanceSnapshot { @@ -76,6 +136,13 @@ export interface ModelPreviewPerformanceSnapshot { frameBudgetObserverStride?: number; frameBudgetShadowDeferred?: boolean; lastFrameDurationMs?: number; + averageRenderMs?: number; + p95RenderMs?: number; + maxRenderMs?: number; + renderedFrameCount?: number; + slowFrameCount?: number; + idleFrameSkipCount?: number; + adaptiveScaleChangeCount?: number; viewportVisible?: boolean; disposalAudit?: { reason: "initial" | "model-switch" | "destroy"; @@ -90,6 +157,7 @@ export interface ModelPreviewPerformanceSnapshot { renderObserverCount?: number; renderObserverSettleFrames?: number; meshCount?: number; + qualitySnapshot?: PreviewQualitySnapshot; } export interface AnnotationPreview extends ModelPreview { @@ -109,6 +177,20 @@ export interface MeasurementScale { export type MeasurementUnit = "um" | "mm" | "cm" | "m"; +export interface MeasurementReading { + distance: number; + delta: PreviewWorldPoint; + absDelta: PreviewWorldPoint; + unit: MeasurementUnit; +} + +export interface MeasurementRecord { + index: number; + start: PreviewWorldPoint; + end: PreviewWorldPoint; + reading: MeasurementReading; +} + export interface MeasurementPreview { toggleMeasurement(): boolean; isMeasurementActive(): boolean; @@ -118,6 +200,7 @@ export interface MeasurementPreview { setMeasurementUnit(unit: MeasurementUnit): void; getMeasurementUnit(): MeasurementUnit; getMeasurementBounds(): { x: number; y: number; z: number } | null; + getMeasurementRecords(): MeasurementRecord[]; updateMeasurementLabels(): void; exportMeasurements(): string; } @@ -183,7 +266,9 @@ export interface PreviewFactoryOptions { } function hasMethod(value: unknown, name: string): boolean { - return !!value && typeof value === "object" && name in value; + return !!value + && typeof value === "object" + && typeof (value as Record)[name] === "function"; } export function supportsAnnotationPreview(preview: unknown): preview is AnnotationPreview { @@ -203,6 +288,7 @@ export function supportsMeasurementPreview(preview: unknown): preview is Measure && hasMethod(preview, "setMeasurementUnit") && hasMethod(preview, "getMeasurementUnit") && hasMethod(preview, "getMeasurementBounds") + && hasMethod(preview, "getMeasurementRecords") && hasMethod(preview, "updateMeasurementLabels") && hasMethod(preview, "exportMeasurements"); } diff --git a/src/render/three/loaders.test.ts b/src/render/three/loaders.test.ts new file mode 100644 index 0000000..54f0f88 --- /dev/null +++ b/src/render/three/loaders.test.ts @@ -0,0 +1,106 @@ +import { Mesh, MeshStandardMaterial, Points, PointsMaterial } from "three"; +import { beforeAll, describe, expect, it, vi } from "vitest"; + +vi.mock("obsidian", () => ({ + TFile: class TFile {}, + TFolder: class TFolder {}, +})); + +let loadThreePLY: typeof import("./loaders").loadThreePLY; +let loadThreeSTL: typeof import("./loaders").loadThreeSTL; + +beforeAll(async () => { + (globalThis as unknown as Record).activeWindow = {}; + const loaders = await import("./loaders"); + loadThreePLY = loaders.loadThreePLY; + loadThreeSTL = loaders.loadThreeSTL; +}); + +function encodeAscii(text: string): ArrayBuffer { + return new TextEncoder().encode(text).buffer; +} + +function createColoredBinaryStl(): ArrayBuffer { + const buffer = new ArrayBuffer(84 + 50); + const bytes = new Uint8Array(buffer); + bytes.set(new TextEncoder().encode("COLOR="), 0); + bytes[6] = 255; + bytes[7] = 0; + bytes[8] = 0; + bytes[9] = 255; + const view = new DataView(buffer); + view.setUint32(80, 1, true); + let offset = 84; + view.setFloat32(offset, 0, true); + view.setFloat32(offset + 4, 0, true); + view.setFloat32(offset + 8, 1, true); + offset += 12; + for (const point of [[0, 0, 0], [1, 0, 0], [0, 1, 0]]) { + view.setFloat32(offset, point[0], true); + view.setFloat32(offset + 4, point[1], true); + view.setFloat32(offset + 8, point[2], true); + offset += 12; + } + view.setUint16(offset, 0x8000, true); + return buffer; +} + +describe("Three loaders", () => { + it("enables vertex colors for colored STL", async () => { + const object = await loadThreeSTL(createColoredBinaryStl()); + + expect(object).toBeInstanceOf(Mesh); + expect((object as Mesh).geometry.hasAttribute("color")).toBe(true); + expect(((object as Mesh).material as MeshStandardMaterial).vertexColors).toBe(true); + }); + + it("loads vertex-colored PLY faces as a mesh", async () => { + const ply = [ + "ply", + "format ascii 1.0", + "element vertex 3", + "property float x", + "property float y", + "property float z", + "property uchar red", + "property uchar green", + "property uchar blue", + "element face 1", + "property list uchar int vertex_indices", + "end_header", + "0 0 0 255 0 0", + "1 0 0 0 255 0", + "0 1 0 0 0 255", + "3 0 1 2", + ].join("\n"); + + const object = await loadThreePLY(encodeAscii(ply)); + + expect(object).toBeInstanceOf(Mesh); + expect((object as Mesh).geometry.hasAttribute("color")).toBe(true); + expect(((object as Mesh).material as MeshStandardMaterial).vertexColors).toBe(true); + }); + + it("loads vertex-colored PLY point clouds with adaptive point material", async () => { + const ply = [ + "ply", + "format ascii 1.0", + "element vertex 2", + "property float x", + "property float y", + "property float z", + "property uchar red", + "property uchar green", + "property uchar blue", + "end_header", + "0 0 0 255 0 0", + "0.01 0 0 0 255 0", + ].join("\n"); + + const object = await loadThreePLY(encodeAscii(ply)); + + expect(object).toBeInstanceOf(Points); + expect(((object as Points).material as PointsMaterial).vertexColors).toBe(true); + expect(((object as Points).material as PointsMaterial).size).toBeLessThan(0.01); + }); +}); diff --git a/src/render/three/loaders.ts b/src/render/three/loaders.ts index 1e4ce0d..5cb62f8 100644 --- a/src/render/three/loaders.ts +++ b/src/render/three/loaders.ts @@ -4,9 +4,13 @@ import { OBJLoader } from "three/examples/jsm/loaders/OBJLoader.js"; import { PLYLoader } from "three/examples/jsm/loaders/PLYLoader.js"; import { STLLoader } from "three/examples/jsm/loaders/STLLoader.js"; import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js"; -import { Mesh, MeshStandardMaterial, PointsMaterial, Points } from "three"; +import { Material, Mesh, MeshStandardMaterial, PointsMaterial, Points } from "three"; import { getPortableBasename, getPortableDirname, getPortableStem, joinPortablePath } from "../../utils/resolve-path"; import { arrayBufferToBase64 } from "../../utils/base64"; +import { + getAdaptivePointSize, + prepareThreeMaterialForColorAccuracy, +} from "./material-quality"; const IMAGE_MIME: Record = { jpg: "image/jpeg", jpeg: "image/jpeg", png: "image/png", @@ -141,7 +145,9 @@ export async function loadThreeGLTF( export async function loadThreeSTL(data: ArrayBuffer): Promise { const loader = new STLLoader(); const geometry = loader.parse(data); - const material = new MeshStandardMaterial({ color: 0xcccccc }); + const material = geometry.hasAttribute("color") + ? new MeshStandardMaterial({ color: 0xffffff, vertexColors: true }) + : new MeshStandardMaterial({ color: 0xcccccc }); const mesh = new Mesh(geometry, material); mesh.name = getPortableBasename("") || "stl-model"; return mesh; @@ -154,27 +160,41 @@ export async function loadThreeSTL(data: ArrayBuffer): Promise { export async function loadThreePLY(data: ArrayBuffer): Promise { const loader = new PLYLoader(); const geometry = loader.parse(data); + const hasFaces = !!geometry.index || geometry.hasAttribute("normal"); if (geometry.hasAttribute("color")) { - // Vertex-colored mesh or point cloud - if (geometry.index) { + if (hasFaces) { + if (!geometry.hasAttribute("normal")) geometry.computeVertexNormals(); const material = new MeshStandardMaterial({ vertexColors: true }); return new Mesh(geometry, material); } - // Point cloud (no faces) - const material = new PointsMaterial({ size: 0.02, vertexColors: true }); + const material = new PointsMaterial({ size: getAdaptivePointSize(geometry), vertexColors: true }); return new Points(geometry, material); } - // No vertex color - if (geometry.index) { + if (hasFaces) { + if (!geometry.hasAttribute("normal")) geometry.computeVertexNormals(); const material = new MeshStandardMaterial({ color: 0xcccccc }); return new Mesh(geometry, material); } - const material = new PointsMaterial({ size: 0.02, color: 0xcccccc }); + const material = new PointsMaterial({ size: getAdaptivePointSize(geometry), color: 0xcccccc }); return new Points(geometry, material); } +function materialList(material: Material | Material[] | undefined | null): Material[] { + if (!material) return []; + return Array.isArray(material) ? material : [material]; +} + +function prepareObjectMaterials(object: Object3D): void { + object.traverse((entry) => { + if (!(entry instanceof Mesh)) return; + for (const material of materialList(entry.material)) { + prepareThreeMaterialForColorAccuracy(material, 1); + } + }); +} + /** * Load an OBJ model with vault-based MTL resolution. * Reads MTL and texture files from the Obsidian vault via readFile. @@ -254,7 +274,9 @@ export async function loadThreeOBJ( if (materials) { objLoader.setMaterials(materials); } - return { object: objLoader.parse(objText), warnings }; + const object = objLoader.parse(objText); + prepareObjectMaterials(object); + return { object, warnings }; } /** Check if a format extension is supported by the Three.js path. */ diff --git a/src/render/three/material-quality.test.ts b/src/render/three/material-quality.test.ts new file mode 100644 index 0000000..6310e4d --- /dev/null +++ b/src/render/three/material-quality.test.ts @@ -0,0 +1,42 @@ +import { BufferAttribute, BufferGeometry, MeshStandardMaterial, Texture } from "three"; +import { describe, expect, it } from "vitest"; +import { + getAdaptivePointSize, + prepareThreeMaterialForColorAccuracy, +} from "./material-quality"; + +describe("Three material quality helpers", () => { + it("sets sRGB only for color texture slots", () => { + const colorMap = new Texture(); + const normalMap = new Texture(); + const roughnessMap = new Texture(); + const material = new MeshStandardMaterial({ + map: colorMap, + normalMap, + roughnessMap, + }); + + const audit = prepareThreeMaterialForColorAccuracy(material, 8); + + expect(audit.textureCount).toBe(3); + expect(audit.colorTextureCount).toBe(1); + expect(audit.srgbColorTextureCount).toBe(1); + expect(colorMap.colorSpace).toBe("srgb"); + expect(normalMap.colorSpace).not.toBe("srgb"); + expect(roughnessMap.colorSpace).not.toBe("srgb"); + expect(colorMap.anisotropy).toBe(8); + expect(normalMap.anisotropy).toBe(8); + }); + + it("scales PLY point size with model span", () => { + const small = new BufferGeometry(); + small.setAttribute("position", new BufferAttribute(new Float32Array([0, 0, 0, 0.01, 0, 0]), 3)); + + const large = new BufferGeometry(); + large.setAttribute("position", new BufferAttribute(new Float32Array([0, 0, 0, 20, 0, 0]), 3)); + + expect(getAdaptivePointSize(small)).toBeLessThan(getAdaptivePointSize(large)); + expect(getAdaptivePointSize(small)).toBeGreaterThanOrEqual(0.0005); + expect(getAdaptivePointSize(large)).toBeLessThanOrEqual(0.05); + }); +}); diff --git a/src/render/three/material-quality.ts b/src/render/three/material-quality.ts new file mode 100644 index 0000000..f5c4ed9 --- /dev/null +++ b/src/render/three/material-quality.ts @@ -0,0 +1,62 @@ +import { + BufferGeometry, + Material, + SRGBColorSpace, + Texture, + Vector3, +} from "three"; + +const COLOR_TEXTURE_SLOTS = new Set([ + "map", + "emissiveMap", + "specularMap", + "specularColorMap", + "sheenColorMap", + "clearcoatColorMap", +]); + +export interface ThreeTextureAudit { + textureCount: number; + colorTextureCount: number; + srgbColorTextureCount: number; +} + +export function isThreeColorTextureSlot(name: string): boolean { + return COLOR_TEXTURE_SLOTS.has(name); +} + +export function prepareThreeMaterialForColorAccuracy(material: Material, anisotropy: number): ThreeTextureAudit { + const record = material as unknown as Record; + const audit: ThreeTextureAudit = { + textureCount: 0, + colorTextureCount: 0, + srgbColorTextureCount: 0, + }; + + for (const [name, value] of Object.entries(record)) { + if (!(value instanceof Texture)) continue; + audit.textureCount++; + value.anisotropy = Math.max(value.anisotropy, anisotropy); + if (isThreeColorTextureSlot(name)) { + audit.colorTextureCount++; + value.colorSpace = SRGBColorSpace; + audit.srgbColorTextureCount++; + } + value.needsUpdate = true; + } + + material.needsUpdate = true; + return audit; +} + +export function getAdaptivePointSize(geometry: BufferGeometry): number { + if (!geometry.boundingBox) { + geometry.computeBoundingBox(); + } + const box = geometry.boundingBox; + if (!box) return 0.02; + const size = box.getSize(new Vector3()); + const span = Math.max(size.x, size.y, size.z); + if (!Number.isFinite(span) || span <= 0) return 0.02; + return Math.min(Math.max(span / 180, 0.0005), 0.05); +} diff --git a/src/render/three/scene.ts b/src/render/three/scene.ts index 98f964a..cd3c345 100644 --- a/src/render/three/scene.ts +++ b/src/render/three/scene.ts @@ -23,6 +23,7 @@ import { PerspectiveCamera, PlaneGeometry, PointLight, + Points, PMREMGenerator, Raycaster, Scene, @@ -82,6 +83,7 @@ import type { PreviewWorldPoint, MeasurementScale, MeasurementUnit, + PreviewQualitySnapshot, } from "../preview/types"; import { createAnnotationViewportProvider, @@ -107,6 +109,11 @@ import { import { createThreeDisassemblyController } from "./disassembly"; import { setThreeExplode, resetThreeExplode } from "./explode"; import { getPortableBasename } from "../../utils/resolve-path"; +import { + prepareThreeMaterialForColorAccuracy, + type ThreeTextureAudit, +} from "./material-quality"; +import { ThreeSmoothnessTracker } from "./smoothness"; const DEFAULT_BACKGROUND = new Color("#20242e"); const FOCUS_DIM_OPACITY = 0.242; @@ -114,7 +121,7 @@ const DEFAULT_SHADOW_OPACITY = 0.28; const MAX_RENDER_PIXEL_RATIO = 2.5; const DESKTOP_INTERACTIVE_PIXEL_RATIO_CAP = 1.5; const MOBILE_INTERACTIVE_PIXEL_RATIO_CAP = 1.15; -const INTERACTIVE_PIXEL_RATIO_HOLD_MS = 180; +const INTERACTIVE_PIXEL_RATIO_HOLD_MS = 260; const RENDER_OBSERVER_SETTLE_FRAMES = 30; const RENDER_OBSERVER_SETTLE_MIN_FRAMES = 8; const FRAME_BUDGET_SLOW_MS = 28; @@ -139,6 +146,20 @@ interface ThreeDisposalAudit { timestamp: number; } +function createEmptyTextureAudit(): ThreeTextureAudit { + return { + textureCount: 0, + colorTextureCount: 0, + srgbColorTextureCount: 0, + }; +} + +function addTextureAudit(target: ThreeTextureAudit, next: ThreeTextureAudit): void { + target.textureCount += next.textureCount; + target.colorTextureCount += next.colorTextureCount; + target.srgbColorTextureCount += next.srgbColorTextureCount; +} + type ShadowCastingLight = DirectionalLight | PointLight | SpotLight; function isMesh(value: unknown): value is Mesh { @@ -242,6 +263,7 @@ export class ThreeModelPreview implements WorkbenchPreview { private rootObject: Object3D | null = null; private loadedExt = ""; private resourceWarnings: string[] = []; + private textureAudit = createEmptyTextureAudit(); private renderHandle = 0; private contextLost = false; private quality: "low" | "medium" | "high" = "high"; @@ -256,6 +278,7 @@ export class ThreeModelPreview implements WorkbenchPreview { private frameBudgetObserverCursor = 0; private frameBudgetShadowDeferred = false; private lastFrameDurationMs = 0; + private readonly smoothness = new ThreeSmoothnessTracker(); private viewportVisible = true; private viewportObserver: IntersectionObserver | null = null; private lastDisposalAudit: ThreeDisposalAudit = { @@ -311,15 +334,13 @@ export class ThreeModelPreview implements WorkbenchPreview { private cachedMeshRoot: Object3D | null = null; private cameraAnimHandle = 0; private readonly preventCanvasWheelScroll = (event: WheelEvent) => { + this.prepareInteractiveFrameBudget(); event.preventDefault(); event.stopPropagation(); + this.markDirty(); }; private readonly handleControlsChange = () => { - const now = performance.now(); - this.interactionPixelRatioDeadline = now + INTERACTIVE_PIXEL_RATIO_HOLD_MS; - if (this.activateInteractivePixelRatio()) { - this.resizeRenderer(); - } + this.prepareInteractiveFrameBudget(); this.markDirty(); }; private readonly handleViewportIntersection: IntersectionObserverCallback = (entries) => { @@ -341,6 +362,7 @@ export class ThreeModelPreview implements WorkbenchPreview { private readonly handlePointerDown = (event: PointerEvent) => { if (event.button !== 0 || event.isPrimary === false) return; this.lastPointerDown = { x: event.clientX, y: event.clientY }; + this.prepareInteractiveFrameBudget(); }; private readonly handlePointerUp = (event: PointerEvent) => { if (event.button !== 0 || event.isPrimary === false) return; @@ -353,6 +375,9 @@ export class ThreeModelPreview implements WorkbenchPreview { }; private readonly handlePointerMove = (event: PointerEvent) => { this.lastPointerClient = { x: event.clientX, y: event.clientY }; + if (event.buttons & 1) { + this.prepareInteractiveFrameBudget(); + } if (!this.measurementActive) return; if (this.pendingPoint) { this.updatePreviewLine(); @@ -445,6 +470,7 @@ export class ThreeModelPreview implements WorkbenchPreview { this.clearLoadedModel("model-switch"); this.loadedExt = ext.toLowerCase(); this.resourceWarnings = []; + this.textureAudit = createEmptyTextureAudit(); let root: Object3D; let animations: import("three").AnimationClip[] = []; @@ -778,7 +804,7 @@ export class ThreeModelPreview implements WorkbenchPreview { toggleMeasurement(): boolean { this.measurementActive = !this.measurementActive; if (!this.measurementActive) { - this.clearMeasurements(); + this.cancelPendingMeasurement(); } return this.measurementActive; } @@ -788,11 +814,14 @@ export class ThreeModelPreview implements WorkbenchPreview { } clearMeasurements(): void { - this.measurementActive = false; - this.pendingPoint = null; - this.pendingMarker = null; - this.hoveredMarkerIndex = -1; - this.removePreviewLine(); + this.disposeMeasurementOverlays(false); + } + + private disposeMeasurementOverlays(deactivate: boolean): void { + if (deactivate) { + this.measurementActive = false; + } + this.cancelPendingMeasurement(false); for (const segment of this.measurementSegments) { segment.line.removeFromParent(); segment.line.geometry.dispose(); @@ -843,6 +872,10 @@ export class ThreeModelPreview implements WorkbenchPreview { return size; } + getMeasurementRecords(): MeasurementRecord[] { + return this.createMeasurementRecords(); + } + exportMeasurements(): string { return createMeasurementMarkdown(this.createMeasurementRecords()); } @@ -876,6 +909,7 @@ export class ThreeModelPreview implements WorkbenchPreview { } getPerformanceSnapshot() { + const smoothness = this.smoothness.snapshot(); return { backend: "three" as const, renderScale: Number(this.renderScale.toFixed(2)), @@ -889,9 +923,53 @@ export class ThreeModelPreview implements WorkbenchPreview { frameBudgetObserverStride: this.frameBudgetObserverStride, frameBudgetShadowDeferred: this.frameBudgetShadowDeferred, lastFrameDurationMs: Number(this.lastFrameDurationMs.toFixed(2)), + averageRenderMs: smoothness.averageRenderMs, + p95RenderMs: smoothness.p95RenderMs, + maxRenderMs: smoothness.maxRenderMs, + renderedFrameCount: smoothness.renderedFrameCount, + slowFrameCount: smoothness.slowFrameCount, + idleFrameSkipCount: smoothness.idleFrameSkipCount, + adaptiveScaleChangeCount: smoothness.adaptiveScaleChangeCount, viewportVisible: this.viewportVisible, disposalAudit: { ...this.lastDisposalAudit }, meshCount: this.rootObject ? this.getRenderableMeshes(this.rootObject).length : 0, + qualitySnapshot: this.getQualitySnapshot(), + }; + } + + getQualitySnapshot(): PreviewQualitySnapshot { + const geometry = this.getGeometryQualityStats(); + const smoothness = this.smoothness.snapshot(); + return { + backend: "three", + supportedFormats: ["glb", "gltf", "stl", "ply", "obj"], + colorPipeline: { + outputColorSpace: String(this.renderer.outputColorSpace), + toneMapping: this.renderer.toneMapping === NoToneMapping ? "NoToneMapping" : String(this.renderer.toneMapping), + textureCount: this.textureAudit.textureCount, + colorTextureCount: this.textureAudit.colorTextureCount, + srgbColorTextureCount: this.textureAudit.srgbColorTextureCount, + }, + geometry, + camera: { + near: Number(this.camera.near.toPrecision(6)), + far: Number(this.camera.far.toPrecision(6)), + nearFarRatio: Number((this.camera.far / Math.max(this.camera.near, Number.EPSILON)).toPrecision(6)), + }, + performance: { + renderScale: Number(this.renderScale.toFixed(2)), + pixelRatio: Number(this.renderer.getPixelRatio().toFixed(2)), + frameBudgetPixelRatioScale: Number(this.frameBudgetPixelRatioScale.toFixed(2)), + frameBudgetObserverStride: this.frameBudgetObserverStride, + viewportVisible: this.viewportVisible, + renderedFrameCount: smoothness.renderedFrameCount, + idleFrameSkipCount: smoothness.idleFrameSkipCount, + slowFrameCount: smoothness.slowFrameCount, + averageRenderMs: smoothness.averageRenderMs, + p95RenderMs: smoothness.p95RenderMs, + maxRenderMs: smoothness.maxRenderMs, + adaptiveScaleChangeCount: smoothness.adaptiveScaleChangeCount, + }, }; } @@ -1029,6 +1107,7 @@ export class ThreeModelPreview implements WorkbenchPreview { this.restoreInteractivePixelRatioIfIdle(now, cameraMoved); if (!cameraMoved && !animating && !this.renderDirty) { + this.smoothness.recordIdleFrameSkip(); if (this.renderObserverSettleFrames > 0) { this.renderObserverSettleFrames--; this.notifyRenderObservers(); @@ -1046,7 +1125,9 @@ export class ThreeModelPreview implements WorkbenchPreview { } const renderStartedAt = performance.now(); this.renderer.render(this.scene, this.camera); - this.updateFrameBudget(performance.now() - renderStartedAt); + const frameDurationMs = performance.now() - renderStartedAt; + this.smoothness.recordRenderedFrame(frameDurationMs, FRAME_BUDGET_SLOW_MS); + this.updateFrameBudget(frameDurationMs); this.notifyRenderObservers(); } @@ -1074,6 +1155,14 @@ export class ThreeModelPreview implements WorkbenchPreview { this.renderer.shadowMap.needsUpdate = true; } + private prepareInteractiveFrameBudget(): void { + const now = performance.now(); + this.interactionPixelRatioDeadline = now + INTERACTIVE_PIXEL_RATIO_HOLD_MS; + if (this.activateInteractivePixelRatio()) { + this.resizeRenderer(); + } + } + private activateInteractivePixelRatio(): boolean { if (this.interactivePixelRatioActive) return false; const normalPixelRatio = this.computePixelRatio(false); @@ -1135,6 +1224,7 @@ export class ThreeModelPreview implements WorkbenchPreview { RENDER_OBSERVER_SETTLE_MIN_FRAMES, Math.floor(RENDER_OBSERVER_SETTLE_FRAMES / this.frameBudgetObserverStride), ); + this.smoothness.recordAdaptiveScaleChange(); this.resizeRenderer(); } return; @@ -1148,6 +1238,7 @@ export class ThreeModelPreview implements WorkbenchPreview { ); this.frameBudgetObserverStride = Math.max(1, this.frameBudgetObserverStride - 1); this.renderObserverSettleFrames = RENDER_OBSERVER_SETTLE_FRAMES; + this.smoothness.recordAdaptiveScaleChange(); this.resizeRenderer(); } } @@ -1452,14 +1543,7 @@ export class ThreeModelPreview implements WorkbenchPreview { } private prepareMaterialForQuality(material: Material, anisotropy: number): void { - const record = material as unknown as Record; - for (const value of Object.values(record)) { - if (value instanceof Texture) { - value.anisotropy = Math.max(value.anisotropy, anisotropy); - value.needsUpdate = true; - } - } - material.needsUpdate = true; + addTextureAudit(this.textureAudit, prepareThreeMaterialForColorAccuracy(material, anisotropy)); } private applyShadowQuality(): void { @@ -1660,7 +1744,7 @@ export class ThreeModelPreview implements WorkbenchPreview { this.markDirty(); this.clearFocusedMesh(); this.clearSelectionHighlight(); - this.clearMeasurements(); + this.disposeMeasurementOverlays(true); this.wireframeEnabled = false; this.wireframeOriginalMaterials.clear(); this.stlMaterial = null; @@ -1757,14 +1841,18 @@ export class ThreeModelPreview implements WorkbenchPreview { this.initialPosition.set(fit.position.x, fit.position.y, fit.position.z); this.initialFov = 45; const boundsSize = getPreviewBoundsSize(bounds); - const maxSpan = Math.max(boundsSize.x, boundsSize.y, boundsSize.z, 1); + const maxSpan = Math.max(boundsSize.x, boundsSize.y, boundsSize.z, Number.EPSILON); const fitDistance = this.initialPosition.distanceTo(this.initialTarget); - this.controls.minDistance = Math.max(fit.near * 4, maxSpan * 0.02, 0.001); + this.controls.minDistance = Math.max(fit.near * 4, maxSpan * 0.02, 0.00001); this.controls.maxDistance = Math.max(fitDistance * 8, this.controls.minDistance * 10); + this.raycaster.params.Points = { threshold: Math.max(maxSpan * 0.01, 0.00001) }; + this.raycaster.params.Line = { threshold: Math.max(maxSpan * 0.002, 0.00001) }; + this.occlusionRaycaster.params.Points = { threshold: Math.max(maxSpan * 0.006, 0.00001) }; + this.occlusionRaycaster.params.Line = { threshold: Math.max(maxSpan * 0.001, 0.00001) }; this.resetView(); if (this.axesHelper) { this.axesHelper.position.copy(this.controls.target); - this.axesHelper.scale.setScalar(Math.max(0.5, maxSpan * 0.25)); + this.axesHelper.scale.setScalar(Math.max(maxSpan * 0.25, 0.0005)); } this.camera.near = fit.near; this.camera.far = fit.far; @@ -1839,6 +1927,50 @@ export class ThreeModelPreview implements WorkbenchPreview { return meshes; } + private getGeometryQualityStats(): PreviewQualitySnapshot["geometry"] { + if (!this.rootObject) { + return { + meshCount: 0, + pointCloudCount: 0, + smallPartCount: 0, + smallestPartSpan: null, + modelSpan: null, + }; + } + + const modelSize = getPreviewBoundsSize(getObjectPreviewBounds(this.rootObject)); + const modelSpan = Math.max(modelSize.x, modelSize.y, modelSize.z); + const smallPartThreshold = Math.max(modelSpan * 0.04, Number.EPSILON); + let pointCloudCount = 0; + let smallPartCount = 0; + let smallestPartSpan = Number.POSITIVE_INFINITY; + + for (const mesh of this.getRenderableMeshes(this.rootObject)) { + const size = getPreviewBoundsSize(getObjectPreviewBounds(mesh)); + const span = Math.max(size.x, size.y, size.z); + if (Number.isFinite(span) && span > 0) { + smallestPartSpan = Math.min(smallestPartSpan, span); + if (span <= smallPartThreshold && span < modelSpan) { + smallPartCount++; + } + } + } + + this.rootObject.traverse((object) => { + if (object instanceof Points) { + pointCloudCount++; + } + }); + + return { + meshCount: this.getRenderableMeshes(this.rootObject).length, + pointCloudCount, + smallPartCount, + smallestPartSpan: Number.isFinite(smallestPartSpan) ? Number(smallestPartSpan.toPrecision(6)) : null, + modelSpan: Number.isFinite(modelSpan) && modelSpan > 0 ? Number(modelSpan.toPrecision(6)) : null, + }; + } + private invalidateMeshCache(): void { this.cachedMeshes = null; this.cachedMeshRoot = null; @@ -1947,6 +2079,46 @@ export class ThreeModelPreview implements WorkbenchPreview { return maxSpan * 0.015; } + private cancelPendingMeasurement(markDirty = true): void { + const pendingMarker = this.pendingMarker; + const pendingPoint = this.pendingPoint?.clone() ?? null; + this.pendingPoint = null; + this.pendingMarker = null; + this.hoveredMarkerIndex = -1; + this.removePreviewLine(); + + if (pendingMarker && pendingPoint && !this.isMeasurementPointUsed(pendingPoint)) { + const index = this.measurementMarkers.indexOf(pendingMarker); + if (index >= 0) { + this.measurementMarkers.splice(index, 1); + } + this.disposeMeasurementMarker(pendingMarker); + } else if (pendingMarker) { + pendingMarker.scale.setScalar(1); + (pendingMarker.material as MeshBasicMaterial).color.setHex(0xff6b6b); + } + + if (markDirty) { + this.markDirty(); + } + } + + private isMeasurementPointUsed(point: Vector3): boolean { + return this.measurementSegments.some((segment) => + segment.start.distanceTo(point) < 0.0001 || segment.end.distanceTo(point) < 0.0001); + } + + private disposeMeasurementMarker(marker: Mesh): void { + marker.removeFromParent(); + marker.geometry.dispose(); + const mat = marker.material; + if (Array.isArray(mat)) { + for (const entry of mat) entry.dispose(); + } else { + mat.dispose(); + } + } + private findNearestMarkerIndex(point: Vector3): number { const threshold = this.getMeasurementMarkerSize() * 2.5; for (let i = 0; i < this.measurementMarkers.length; i++) { diff --git a/src/render/three/smoothness.test.ts b/src/render/three/smoothness.test.ts new file mode 100644 index 0000000..d4a84db --- /dev/null +++ b/src/render/three/smoothness.test.ts @@ -0,0 +1,30 @@ +import { describe, expect, it } from "vitest"; +import { ThreeSmoothnessTracker } from "./smoothness"; + +describe("Three smoothness tracker", () => { + it("tracks render frame timing and slow frames", () => { + const tracker = new ThreeSmoothnessTracker(5); + for (const duration of [8, 10, 12, 30, 16, 20]) { + tracker.recordRenderedFrame(duration, 28); + } + + const snapshot = tracker.snapshot(); + expect(snapshot.renderedFrameCount).toBe(6); + expect(snapshot.slowFrameCount).toBe(1); + expect(snapshot.averageRenderMs).toBe(17.6); + expect(snapshot.p95RenderMs).toBe(30); + expect(snapshot.maxRenderMs).toBe(30); + }); + + it("tracks idle skips and adaptive changes", () => { + const tracker = new ThreeSmoothnessTracker(); + tracker.recordIdleFrameSkip(); + tracker.recordIdleFrameSkip(); + tracker.recordAdaptiveScaleChange(); + + expect(tracker.snapshot()).toMatchObject({ + idleFrameSkipCount: 2, + adaptiveScaleChangeCount: 1, + }); + }); +}); diff --git a/src/render/three/smoothness.ts b/src/render/three/smoothness.ts new file mode 100644 index 0000000..025415e --- /dev/null +++ b/src/render/three/smoothness.ts @@ -0,0 +1,56 @@ +export interface ThreeSmoothnessSnapshot { + renderedFrameCount: number; + idleFrameSkipCount: number; + slowFrameCount: number; + averageRenderMs: number; + p95RenderMs: number; + maxRenderMs: number; + adaptiveScaleChangeCount: number; +} + +export class ThreeSmoothnessTracker { + private readonly samples: number[] = []; + private renderedFrameCount = 0; + private idleFrameSkipCount = 0; + private slowFrameCount = 0; + private maxRenderMs = 0; + private adaptiveScaleChangeCount = 0; + + constructor(private readonly maxSamples = 120) {} + + recordRenderedFrame(durationMs: number, slowThresholdMs: number): void { + if (!Number.isFinite(durationMs) || durationMs < 0) return; + this.renderedFrameCount++; + if (durationMs >= slowThresholdMs) { + this.slowFrameCount++; + } + this.maxRenderMs = Math.max(this.maxRenderMs, durationMs); + this.samples.push(durationMs); + if (this.samples.length > this.maxSamples) { + this.samples.shift(); + } + } + + recordIdleFrameSkip(): void { + this.idleFrameSkipCount++; + } + + recordAdaptiveScaleChange(): void { + this.adaptiveScaleChangeCount++; + } + + snapshot(): ThreeSmoothnessSnapshot { + const sorted = [...this.samples].sort((a, b) => a - b); + const total = this.samples.reduce((sum, value) => sum + value, 0); + const p95Index = sorted.length === 0 ? -1 : Math.min(sorted.length - 1, Math.ceil(sorted.length * 0.95) - 1); + return { + renderedFrameCount: this.renderedFrameCount, + idleFrameSkipCount: this.idleFrameSkipCount, + slowFrameCount: this.slowFrameCount, + averageRenderMs: sorted.length ? Number((total / sorted.length).toFixed(2)) : 0, + p95RenderMs: p95Index >= 0 ? Number(sorted[p95Index].toFixed(2)) : 0, + maxRenderMs: Number(this.maxRenderMs.toFixed(2)), + adaptiveScaleChangeCount: this.adaptiveScaleChangeCount, + }; + } +} diff --git a/src/view/inline/helper-buttons.ts b/src/view/inline/helper-buttons.ts index 41db8db..a0e5eb0 100644 --- a/src/view/inline/helper-buttons.ts +++ b/src/view/inline/helper-buttons.ts @@ -202,8 +202,10 @@ export function createHelperButtons( const preview = getPreview(); const focusPreview = preview && supportsFocusSelectionPreview(preview) ? preview : null; const disassemblyPreview = preview && supportsDisassemblyPreview(preview) ? preview : null; + const measurementPreview = preview && supportsMeasurementPreview(preview) ? preview : null; setTogglePressed(focusBtn, !!focusPreview?.isFocusSelectionEnabled()); setTogglePressed(disassembleBtn, !!disassemblyPreview?.isDisassemblyEnabled()); + setTogglePressed(measureBtn, !!measurementPreview?.isMeasurementActive()); if (preview && supportsOrientationGizmoPreview(preview)) { setTogglePressed(gizmoBtn, !!preview.isOrientationGizmoEnabled?.()); } @@ -440,7 +442,7 @@ export function createHelperButtons( const preview = getPreview(); if (!preview || !supportsMeasurementPreview(preview)) return; preview.clearMeasurements(); - setTogglePressed(measureBtn, false); + setTogglePressed(measureBtn, preview.isMeasurementActive()); showTooltip(clearMeasureBtn, t("helper.measurementsCleared")); }); @@ -634,8 +636,10 @@ export function createHelperButtons( const unitRow = calibratePanel.createDiv({ cls: "ai3d-calibrate-row" }); const unitSelect = unitRow.createEl("select", { cls: "ai3d-calibrate-select" }); - for (const u of [{ v: "um", l: "μm" }, { v: "mm", l: "mm" }, { v: "cm", l: "cm" }, { v: "m", l: "m" }]) { - unitSelect.createEl("option", { text: u.l, value: u.v }); + for (const unit of ["um", "mm", "cm", "m"] as const) { + const option = unitSelect.createEl("option"); + option.value = unit; + option.textContent = unit; } unitSelect.value = "mm";