diff --git a/CHANGELOG.md b/CHANGELOG.md index 525ffce..af6f43b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +- Rendering: include Three.js PLY point clouds in summary, part evidence, picking, measurement, material audit, and disposal paths without faking triangle counts. +- Rendering: keep Three.js orthographic camera, shadow, and grid helper scales tied to real tiny-model bounds instead of a one-unit floor. +- Knowledge: merge generic tiny mesh fragments into a lower-confidence detail cluster so imported models keep meaningful small parts without over-splitting renderer noise. + ## 0.6.1 - 2026-06-25 - Review: use `window.setTimeout()` and `window.clearTimeout()` in timeout helpers and preview verification to satisfy Obsidian source review guidance. diff --git a/README.md b/README.md index 9eea47b..26f4cd7 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ https://community.obsidian.md/plugins/ai-model-workbench - **Inline and file previews**: Live Preview, code blocks, and direct file view - **Grid system**: render multiple models in a single viewport with presets - **3D annotations**: click-to-pin bookmarks with labels, colors, and depth-aware occlusion -- **Knowledge notes**: generate structured Markdown from loaded models and auto-register captured part candidates for cross-model reuse checks +- **Knowledge notes**: generate structured Markdown from loaded models, preserve meaningful small-part candidates, and auto-register captured parts for cross-model reuse checks - **Snapshots**: copy, save, or download rendered previews as PNG - **i18n**: English and Simplified Chinese with auto-detect system locale - **Desktop support**: Obsidian Desktop on Windows, macOS, and Linux @@ -401,7 +401,7 @@ The workbench `Generate note` action creates an evidence-backed Markdown note ra - a current viewport evidence snapshot in `Media/3D Previews` - an editable local draft that turns the captured evidence, annotations, tags, and profile notes into a first-pass knowledge note body, plus local draft metadata for tags and next actions -The default local pass does not send model data to a remote service. It uses renderer evidence, saved annotations, tags, and profile notes as the grounding layer for later AI-assisted drafting. When a GLB/GLTF file contains named internal groups or assemblies, the renderer registers those groups as higher-confidence part candidates and keeps ungrouped meshes as standalone candidates. GLB/GLTF component metadata in `extras.ai3d` (`partId`, `occurrenceId`, `partNumber`, and `componentPath`) is registered as individual component parts when present. STEP conversion preserves XDE component labels as GLB component metadata, so PCB reference designators and CAD assembly children can become individual registered parts after conversion. Direct file view stores those captured candidates in the model profile immediately after a successful load, preserving source extensions such as STEP, FBX, 3MF, and DAE in the analysis record so later imported models can match reused parts across converted model types even before a full report exists. During note generation, current part candidates are also compared with parts registered in other profiles or analyzed model sidecars, so likely reused components can be linked back to their existing part notes for review. +The default local pass does not send model data to a remote service. It uses renderer evidence, saved annotations, tags, and profile notes as the grounding layer for later AI-assisted drafting. When a GLB/GLTF file contains named internal groups or assemblies, the renderer registers those groups as higher-confidence part candidates and keeps ungrouped meshes as standalone candidates. Semantically named tiny meshes, such as screws, pins, and component details, remain separate candidates, while multiple generic tiny fragments are merged into a lower-confidence detail cluster so reports do not over-split renderer noise into fake parts. GLB/GLTF component metadata in `extras.ai3d` (`partId`, `occurrenceId`, `partNumber`, and `componentPath`) is registered as individual component parts when present. STEP conversion preserves XDE component labels as GLB component metadata, so PCB reference designators and CAD assembly children can become individual registered parts after conversion. Direct file view stores those captured candidates in the model profile immediately after a successful load, preserving source extensions such as STEP, FBX, 3MF, and DAE in the analysis record so later imported models can match reused parts across converted model types even before a full report exists. During note generation, current part candidates are also compared with parts registered in other profiles or analyzed model sidecars, so likely reused components can be linked back to their existing part notes for review. After a report has been generated, use the direct workbench `Open index` action or the command palette `Open knowledge index` command to jump back into the model's knowledge map. diff --git a/docs/requirements-tracker.md b/docs/requirements-tracker.md index 7c272fc..b5701e2 100644 --- a/docs/requirements-tracker.md +++ b/docs/requirements-tracker.md @@ -30,7 +30,7 @@ future agent notes can refer to the same requirement over time. | REQ-001 | Single-model previews use Three.js by default while Babylon remains fallback/capability backend | P0 | Verified | `npm run verify:preview`, `npm run verify:preview:success` | | REQ-002 | `3dgrid` and conservative workbench routes remain on Babylon until workflow evidence justifies migration | P0 | Verified | `docs/preview-routing-matrix.md`, `npm test -- --run src/render/preview/routing.test.ts`, `npm run verify:preview`, `npm run verify:preview:success` | | REQ-003 | Knowledge generation remains local-first and records report, sidecar, index, preview evidence, and part notes | P0 | Verified | `npm run verify:knowledge-index` | -| REQ-004 | Direct file view auto-registers captured part candidates for later cross-model reuse matching | P1 | Verified | `npm run verify:knowledge-index`, `node scripts/verify-preview.mjs --model "models/resource-fixtures/grouped-parts/grouped parts.gltf" --expect-group-parts`, AstroInk STEP component conversion probe | +| REQ-004 | Direct file view auto-registers captured part candidates for later cross-model reuse matching | P1 | Verified | `npm run verify:knowledge-index`, `npm test -- --run src/render/preview/evidence.test.ts src/view/workbench/knowledge-note.test.ts src/store/plugin-store.test.ts`, `node scripts/verify-preview.mjs --model "models/resource-fixtures/grouped-parts/grouped parts.gltf" --expect-group-parts`, AstroInk STEP component conversion probe | | REQ-005 | Registered part reuse feedback is visible in generated notes and direct workbench UI | P1 | Verified | `npm run verify:knowledge-index`, `npm run typecheck`, `node scripts/verify-preview.mjs --mode workbench --allow-workbench-three` | | REQ-006 | Diagnostics reports expose support context without leaking draft service URLs, 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` | @@ -56,9 +56,13 @@ future agent notes can refer to the same requirement over time. - STEP XDE assembly/component labels are preserved during CAD conversion as individual GLB component meshes with `extras.ai3d` metadata. - Source formats such as STEP, FBX, 3MF, and DAE are preserved in analysis records so registered matches can connect reused parts across converted model types. - Ungrouped mesh parts remain available as lower-confidence candidates. + - Generic, tiny, semantically unnamed mesh fragments are merged into a lower-confidence detail cluster when multiple fragments would otherwise over-split the evidence. + - Semantically named tiny mesh parts, explicit groups, and component metadata remain separate part candidates. + - Detail clusters remain visible in reports and sidecars but are not drafted as standalone part notes unless user evidence or registered matches promotes them. - The grouped-parts browser fixture verifies that group and mesh evidence are both preserved. - Verification: - `npm run verify:knowledge-index` + - `npm test -- --run src/render/preview/evidence.test.ts src/view/workbench/knowledge-note.test.ts src/store/plugin-store.test.ts` - `node scripts/verify-preview.mjs --model "models/resource-fixtures/grouped-parts/grouped parts.gltf" --expect-group-parts` - `AstroInk_v1_1_3D模型.step` conversion probe exported 82 named component meshes and preview verification passed on the generated GLB. @@ -323,8 +327,10 @@ future agent notes can refer to the same requirement over time. - 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. + - PLY point clouds participate in Three.js summary, part evidence, picking, measurement, material audit, and disposal without fake triangle geometry. - 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. + - Tiny model camera fit, orthographic framing, shadow, and grid helpers use the real model span instead of a unit-size floor. + - Small-part evidence keeps named details separate while clustering generic tiny fragments that would create over-cut part lists. - Color, small-part, and smoothness snapshot checks are covered by the preview success suite. - Verification: - `npm run typecheck` diff --git a/main.js b/main.js index b49b3ac..fc56012 100644 --- a/main.js +++ b/main.js @@ -1,10 +1,10 @@ -"use strict";var i0=Object.defineProperty;var $Z=Object.getOwnPropertyDescriptor;var JZ=Object.getOwnPropertyNames;var eQ=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)i0(n,t,{get:e[t],enumerable:!0})},tQ=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of JZ(e))!eQ.call(n,r)&&r!==t&&i0(n,r,{get:()=>e[r],enumerable:!(i=$Z(e,r))||i.enumerable});return n};var iQ=n=>tQ(i0({},"__esModule",{value:!0}),n);function yd(n,e,t){return`${n}::${e}::${t}`}function rQ(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 Rw(n,e=Date.now()){let t=new Map;for(let i of n){if(!rQ(i,e))continue;let r=yd(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 nQ(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 o0=Object.defineProperty;var eQ=Object.getOwnPropertyDescriptor;var tQ=Object.getOwnPropertyNames;var iQ=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)o0(n,t,{get:e[t],enumerable:!0})},rQ=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of tQ(e))!iQ.call(n,r)&&r!==t&&o0(n,r,{get:()=>e[r],enumerable:!(i=eQ(e,r))||i.enumerable});return n};var nQ=n=>rQ(o0({},"__esModule",{value:!0}),n);function Ld(n,e,t){return`${n}::${e}::${t}`}function sQ(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 Cw(n,e=Date.now()){let t=new Map;for(let i of n){if(!sQ(i,e))continue;let r=Ld(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 aQ(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 bw(n=[],e){function t(){return Rw([...s.values()])}function i(l){s.clear();for(let c of l)s.set(yd(c.sourcePath,c.sourceExt,c.targetExt),c)}let r=Rw(n),s=new Map(r.map(l=>[yd(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)=>!nQ(l,n[c])))&&(e==null||e(r)),{get(l,c,f){return s.get(yd(l,c,f))},set(l){s.set(yd(l.sourcePath,l.sourceExt,l.targetExt),l),a()},delete(l,c,f){let h=s.delete(yd(l,c,f));return h&&a(),h},clear(){s.size!==0&&(s.clear(),a())},entries(){return t()}}}var r0=M(()=>{"use strict"});function Ga(n){return n.trim().toLowerCase().replace(/^\./,"")}function n0(n){return sQ.get(Ga(n))}function vl(n){let e=n0(n);return!!(e!=null&&e.enabled)}function Cp(n){return["splat","spz","sog"].includes(Ga(n))}function El(){return Iw.filter(n=>n.enabled).map(n=>n.ext)}var Iw,sQ,Co=M(()=>{"use strict";Iw=[{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}],sQ=new Map(Iw.map(n=>[n.ext,n]))});var a0,Pw=M(()=>{"use strict";a0={"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 Lw,Dw=M(()=>{"use strict";Lw={"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){Ow=n;for(let e of o0)e()}function Q(n){var e,t,i;return(i=(t=(e=fQ[Ow])==null?void 0:e[n])!=null?t:a0[n])!=null?i:n}function Nw(n){return o0.add(n),()=>{o0.delete(n)}}function hQ(n,e){return n.replace(/\{(\w+)\}/g,(t,i)=>{var r;return(r=e[i])!=null?r:""})}function Ki(n,e){return hQ(Q(n),e)}var fQ,Ow,o0,Mn=M(()=>{"use strict";Pw();Dw();fQ={en:a0,"zh-CN":Lw},Ow="en",o0=new Set});function dQ(){if("require"in activeWindow)return activeWindow.require}function Iv(){if("process"in activeWindow)return activeWindow.process}function Lp(n){let e=dQ();if(!e)return null;try{return e(n)}catch(t){return null}}function cs(n,e){if(n===null)throw new Error(`${e} is not available in this environment (mobile or web).`);return n}function fs(n,e){return cs(Ld,"node:fs/promises").access(n,e)}function ca(n){return cs(Ld,"node:fs/promises").readFile(n)}function Dd(n,e,t){return cs(Ld,"node:fs/promises").writeFile(n,e,{encoding:t})}function Od(n,e){return cs(Ld,"node:fs/promises").mkdir(n,e)}function Nd(n,e){return cs(Ld,"node:fs/promises").rm(n,e)}function Dp(n){return cs(Ld,"node:fs/promises").stat(n)}function Xi(...n){return cs(Sl,"node:path").join(...n)}function yo(n){return cs(Sl,"node:path").dirname(n)}function Po(n,e){return cs(Sl,"node:path").basename(n,e)}function fa(n){return cs(Sl,"node:path").extname(n)}function l0(n){return cs(Sl,"node:path").normalize(n)}function Kn(n){return cs(Sl,"node:path").isAbsolute(n)}function ha(n,e,t,i){cs(uQ,"node:child_process").execFile(n,e,t,i)}function wd(){return cs(mQ,"node:os").tmpdir()}var Ld,Pd,Sl,uQ,mQ,ww,hs,Fw,Uw,Bw,Vw,cr=M(()=>{"use strict";Ld=Lp("node:fs/promises"),Pd=Lp("node:fs"),Sl=Lp("node:path"),uQ=Lp("node:child_process"),mQ=Lp("node:os");hs=(ww=Pd==null?void 0:Pd.constants.F_OK)!=null?ww:0,Uw=(Fw=Pd==null?void 0:Pd.constants.X_OK)!=null?Fw:0;Vw=(Bw=Sl==null?void 0:Sl.delimiter)!=null?Bw:":"});function c0(n){return n.replace(/\\/g,"/")}function Mv(n){let e=c0(n),t=[];for(let i of e.split("/"))if(!(!i||i===".")){if(i===".."){t.pop();continue}t.push(i)}return t.join("/")}function Gw(n){try{return decodeURIComponent(n)}catch(e){return n}}function ks(n,e){var r;let t=Gw((r=e.split(/[?#]/,1)[0])!=null?r:e),i=Mv(t);return n?Mv(`${n}/${i}`):i}function Op(n){let e=c0(n).replace(/\/+$/,""),t=e.lastIndexOf("/");return t>0?e.slice(0,t):""}function ds(n){let e=c0(n).replace(/\/+$/,""),t=e.lastIndexOf("/");return t>=0?e.slice(t+1):e}function qr(n){return ds(n).replace(/\.[^.]+$/,"")}async function pQ(n,e){let t=Mv(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 Fd.TFile)return r;if(!(l instanceof Fd.TFolder))return null;s=l.children}return null}function _Q(n){return Uint8Array.from(n).buffer}function gQ(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 th(n,e){if(Kn(e))return l0(e);let t=gQ(n);return t?l0(Xi(t,e)):null}async function ka(n,e){if(Kn(e)){let r=await ca(e);return _Q(r)}let t=Mv(Gw(e)),i=n.vault.getAbstractFileByPath(t);if(!(i instanceof Fd.TFile)){let r=await pQ(n,t);if(r){let s=n.vault.getAbstractFileByPath(r);if(s instanceof Fd.TFile)return n.vault.readBinary(s)}throw new Error(`File not found: ${t}`)}return n.vault.readBinary(i)}var Fd,Ws=M(()=>{"use strict";Fd=require("obsidian");cr();cr()});function Gt(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 Ud(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 Hw(n,e){let t=Ud(n,e);return Math.hypot(t.x,t.y,t.z)}function f0(n){let e=Math.hypot(n.x,n.y,n.z);return e<=Number.EPSILON?null:Np(n,1/e)}function ih(n,e){return{x:n.x+e.x,y:n.y+e.y,z:n.z+e.z}}function kw(n,e){return n.x*e.x+n.y*e.y+n.z*e.z}function zw(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 Xw(n){return Math.max(n*.01,.01)}function wc(n,e,t=Xw(e)){return n{"use strict"});function RQ(){return`pin-${Date.now()}-${SQ++}`}function qw(n){return Zr(n)}function bQ(n,e,t){return n.lefte.left-t&&n.tope.top-t}var wp,Gd,SQ,h0,TQ,AQ,Yw,Kw,xQ,jw,kd,Bc,Dv=M(()=>{"use strict";wp=require("obsidian");Mn();Ws();us();Gd=["#4a9eff","#ff6b6b","#51cf66","#ffd43b","#845ef7","#ff922b","#22b8cf","#f06595","#94d82d","#ffa8a8"],SQ=1,h0=4,TQ=2,AQ=6,Yw=6,Kw=72,xQ=80,jw=200;kd=class kd{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>=jw)return console.warn(`[AI3D] Pin limit (${jw}) reached; ignoring new pin.`),this.annotations[this.annotations.length-1];let r={id:RQ(),position:[e.x,e.y,e.z],label:t,color:i!=null?i:Gd[this.annotations.length%Gd.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,qw(i.worldPos),t)}getPinPosition(e){let t=this.pinEls.get(e);return t?qw(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",w=>{w.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=w=>{let N=h.querySelectorAll(".ai3d-heading-dropdown-item");N.forEach(U=>U.classList.remove("active")),d=w,w>=0&&w{var H;this._selectedHeading=w,o.value=w.heading;let N=qr(w.notePath);(H=l.querySelector(".ai3d-editor-binding-text"))==null||H.remove();let U=l.createSpan({cls:"ai3d-editor-binding-text"});U.textContent=`\u{1F4C4} ${N}`,l.classList.remove("is-hidden"),_(),o.focus(),this.loadContentPreview(f,w.notePath,w.heading)},_=()=>{h.classList.add("is-hidden"),h.replaceChildren(),d=-1},g=w=>{if(h.replaceChildren(),d=-1,u=w,w.length===0){h.classList.add("is-hidden");return}for(let N=0;N{te.preventDefault(),te.stopPropagation(),p(U)}),H.addEventListener("mouseenter",()=>m(N))}h.classList.remove("is-hidden")};o.addEventListener("input",()=>{if(!this.headingSearch)return;this._headingDebounce&&window.clearTimeout(this._headingDebounce);let w=o.value.trim();if(w.length<1){_();return}this._headingDebounce=window.setTimeout(()=>{let N=this.headingSearch(w);g(N)},150)}),o.addEventListener("keydown",w=>{if(h.classList.contains("is-hidden")){w.key==="Enter"?(w.preventDefault(),R.click()):w.key==="Escape"&&(w.preventDefault(),this.hideEditor());return}let N=h.querySelectorAll(".ai3d-heading-dropdown-item");w.key==="ArrowDown"?(w.preventDefault(),m(Math.min(d+1,N.length-1))):w.key==="ArrowUp"?(w.preventDefault(),m(Math.max(d-1,0))):w.key==="Enter"?(w.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||Gd[0],E=x&&!Gd.includes(x)?[x,...Gd]:Gd;for(let w of E){let N=v.createEl("button",{cls:"ai3d-pin-color-swatch"});N.type="button",N.title=w,N.setAttribute("aria-label",Ki("annotation.selectColor",{color:w})),N.style.setProperty("--swatch-color",w),N.style.backgroundColor=w,w===T&&N.classList.add("is-selected"),N.addEventListener("click",U=>{U.stopPropagation(),T=w,v.querySelectorAll(".ai3d-pin-color-swatch").forEach(H=>H.classList.remove("is-selected")),N.classList.add("is-selected")})}let S=s.createDiv({cls:"ai3d-annotation-editor-actions"});if(r){let w=S.createEl("button",{cls:"ai3d-annotation-editor-btn ai3d-annotation-editor-delete"});w.textContent="Delete",w.addEventListener("click",N=>{N.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",w=>{w.stopPropagation();let N=o.value.trim()||"Pin",U=this._selectedHeading;if(r){let H={label:N,color:T};U&&(H.notePath=U.notePath,H.headingRef=U.heading,H.headingLevel=U.level),this.updatePin(r.id,H)}else{let H=this.addPin(i,N,T);U&&this.updatePin(H.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",w=>{w.stopPropagation(),this.hideEditor()});let C=this.overlay.getBoundingClientRect(),y=e-C.left,L=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(L-10,C.height-160))}px`),this.editorEl=s,r!=null&&r.notePath&&(r!=null&&r.headingRef)){let w=qr(r.notePath),N=l.createSpan({cls:"ai3d-editor-binding-text"});N.textContent=`\u{1F4C4} ${w}`,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",w=>w.stopPropagation()),s.addEventListener("mousedown",w=>w.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>=kd.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%AQ===0:this.frameCount%TQ===0,a=this.cameraIdle||r.length<=h0,o=a?0:this.movingOcclusionCursor%r.length,l=o+h0,c=kd._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+h0)%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>xQ){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(!bQ(c,f,Yw))continue;let h=a.screenY>=f.top+f.height/2?1:-1;l=Math.max(-Kw,Math.min(Kw,l+h*(f.height+Yw)));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")}};kd.IDLE_THRESHOLD=15,kd._scratchProjection={screenX:0,screenY:0,depth:0};Bc=kd});function MQ(n){return n!=null?n:Qw}function Wd(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=MQ(n.rendererRollout);if(!(n.useThreeRenderer!==!1))return{backend:"babylon",ext:e,annotationMode:t,requireWorkbenchFeatures:s,rendererRollout:a,reason:"useThreeRenderer=false"};if(Zw.has(e)&&(!s||r)){if(s&&!IQ.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 Zw.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!==Qw&&l.push(`rendererRollout=${a}`),{backend:"babylon",ext:e,annotationMode:t,requireWorkbenchFeatures:s,rendererRollout:a,reason:l.join(", ")||"fallback route"}}function $w(){return{backend:"babylon",reason:"grid previews remain on the Babylon grid renderer"}}var Qw,Zw,IQ,Ov=M(()=>{"use strict";Qw="three-direct-glb",Zw=new Set(["glb","gltf","stl","ply","obj"]),IQ=new Set(["glb","gltf"])});function CQ(n){for(let e=n.length-1;e>=0;--e)if(n[e]>=65535)return!0;return!1}function yQ(n){return ArrayBuffer.isView(n)&&!(n instanceof DataView)}function fu(n){return document.createElementNS("http://www.w3.org/1999/xhtml",n)}function S1(){let n=fu("canvas");return n.style.display="block",n}function Qp(...n){let e="THREE."+n.shift();hu?hu("log",e,...n):console.log(e,...n)}function T1(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=T1(n);let e="THREE."+n.shift();if(hu)hu("warn",e,...n);else{let t=n[0];t&&t.isStackTrace?console.warn(t.getError(e)):console.warn(e,...n)}}function Bt(...n){n=T1(n);let e="THREE."+n.shift();if(hu)hu("error",e,...n);else{let t=n[0];t&&t.isStackTrace?console.error(t.getError(e)):console.error(e,...n)}}function TE(...n){let e=n.join(" ");e in Jw||(Jw[e]=!0,Ct(...n))}function A1(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 Ka(){let n=Math.random()*4294967295|0,e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,i=Math.random()*4294967295|0;return(Cn[n&255]+Cn[n>>8&255]+Cn[n>>16&255]+Cn[n>>24&255]+"-"+Cn[e&255]+Cn[e>>8&255]+"-"+Cn[e>>16&15|64]+Cn[e>>24&255]+"-"+Cn[t&63|128]+Cn[t>>8&255]+"-"+Cn[t>>16&255]+Cn[t>>24&255]+Cn[i&255]+Cn[i>>8&255]+Cn[i>>16&255]+Cn[i>>24&255]).toLowerCase()}function mi(n,e,t){return Math.max(e,Math.min(t,n))}function _I(n,e){return(n%e+e)%e}function PQ(n,e,t,i,r){return i+(n-e)*(r-i)/(t-e)}function LQ(n,e,t){return n!==e?(t-n)/(e-n):0}function jp(n,e,t){return(1-t)*n+t*e}function DQ(n,e,t,i){return jp(n,e,1-Math.exp(-t*i))}function OQ(n,e=1){return e-Math.abs(_I(n,e*2)-e)}function NQ(n,e,t){return n<=e?0:n>=t?1:(n=(n-e)/(t-e),n*n*(3-2*n))}function wQ(n,e,t){return n<=e?0:n>=t?1:(n=(n-e)/(t-e),n*n*n*(n*(n*6-15)+10))}function FQ(n,e){return n+Math.floor(Math.random()*(e-n+1))}function BQ(n,e){return n+Math.random()*(e-n)}function UQ(n){return n*(.5-Math.random())}function VQ(n){n!==void 0&&(eF=n);let e=eF+=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 GQ(n){return n*Kp}function kQ(n){return n*mh}function WQ(n){return(n&n-1)===0&&n!==0}function HQ(n){return Math.pow(2,Math.ceil(Math.log(n)/Math.LN2))}function zQ(n){return Math.pow(2,Math.floor(Math.log(n)/Math.LN2))}function XQ(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 Xa(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 YQ(){let n={enabled:!0,workingColorSpace:qn,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=ou(r.r),r.g=ou(r.g),r.b=ou(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 TE("ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),n.workingToColorSpace(r,s)},toWorkingColorSpace:function(r,s){return TE("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({[qn]:{primaries:e,whitePoint:i,transfer:Zp,toXYZ:iF,fromXYZ:rF,luminanceCoefficients:t,workingColorSpaceConfig:{unpackColorSpace:Ii},outputColorSpaceConfig:{drawingBufferColorSpace:Ii}},[Ii]:{primaries:e,whitePoint:i,transfer:Yi,toXYZ:iF,fromXYZ:rF,luminanceCoefficients:t,outputColorSpaceConfig:{drawingBufferColorSpace:Ii}}}),n}function Cl(n){return n<.04045?n*.0773993808:Math.pow(n*.9478672986+.0521327014,2.4)}function ou(n){return n<.0031308?n*12.92:1.055*Math.pow(n,.41666)-.055}function m0(n){return typeof HTMLImageElement!="undefined"&&n instanceof HTMLImageElement||typeof HTMLCanvasElement!="undefined"&&n instanceof HTMLCanvasElement||typeof ImageBitmap!="undefined"&&n instanceof ImageBitmap?AE.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 g0(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 b0(n,e,t,i,r){for(let s=0,a=n.length-3;s<=a;s+=3){nh.fromArray(n,s);let o=r.x*Math.abs(nh.x)+r.y*Math.abs(nh.y)+r.z*Math.abs(nh.z),l=e.dot(nh),c=t.dot(nh),f=i.dot(nh);if(Math.max(-Math.max(l,c,f),Math.min(l,c,f))>o)return!1}return!0}function Hv(n,e,t,i,r,s){iu.subVectors(n,t).addScalar(.5).multiply(i),r!==void 0?(kp.x=s*iu.x-r*iu.y,kp.y=r*iu.x+s*iu.y):kp.copy(iu),n.copy(e),n.x+=kp.x,n.y+=kp.y,n.applyMatrix4(b1)}function a$(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;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 $v(n,e,t,i,r,s,a,o,l,c){n.getVertexPosition(o,Kv),n.getVertexPosition(l,jv),n.getVertexPosition(c,qv);let f=a$(n,e,t,i,Kv,jv,qv,_F);if(f){let h=new se;Ml.getBarycoord(_F,Kv,jv,qv,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(Kv,jv,qv,d.normal),f.face=d,f.barycoord=h}return f}function rE(n,e,t,i,r,s,a){let o=n.geometry.attributes.position;if(bE.fromBufferAttribute(o,r),IE.fromBufferAttribute(o,s),t.distanceSqToSegment(bE,IE,F0,bF)>i)return;F0.applyMatrix4(n.matrixWorld);let c=e.ray.origin.distanceTo(F0);if(!(ce.far))return{distance:c,point:bF.clone().applyMatrix4(n.matrixWorld),index:a,face:null,faceIndex:null,barycoord:null,object:n}}function yF(n,e,t,i,r,s,a){let o=W0.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 Rh(n){let e={};for(let t in n){e[t]={};for(let i in n[t]){let r=n[t][i];if(PF(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(PF(r[0])){let s=[];for(let a=0,o=r.length;a{Zc={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},Qc={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},VF=0,Z0=1,GF=2,v_=1,WE=2,Ru=3,Ys=0,_n=1,_a=2,Wo=0,fh=1,Q0=2,$0=3,J0=4,kF=5,zc=100,WF=101,HF=102,zF=103,XF=104,YF=200,KF=201,jF=202,qF=203,hE=204,dE=205,ZF=206,QF=207,$F=208,JF=209,e1=210,t1=211,i1=212,r1=213,n1=214,uE=0,mE=1,pE=2,hh=3,_E=4,gE=5,vE=6,EE=7,E_=0,s1=1,a1=2,Ts=0,eI=1,tI=2,iI=3,rI=4,nI=5,sI=6,aI=7,V0="attached",o1="detached",oI=300,$c=301,Ah=302,HE=303,zE=304,S_=306,Oo=1e3,ma=1001,lu=1002,Nr=1003,XE=1004,xh=1005,wr=1006,bu=1007,$a=1008,As=1009,lI=1010,cI=1011,Iu=1012,YE=1013,Ja=1014,qs=1015,Ho=1016,KE=1017,jE=1018,Mu=1020,fI=35902,hI=35899,dI=1021,uI=1022,Zs=1023,No=1026,Jc=1027,qE=1028,ZE=1029,ef=1030,QE=1031,$E=1033,T_=33776,A_=33777,x_=33778,R_=33779,JE=35840,eS=35841,tS=35842,iS=35843,rS=36196,nS=37492,sS=37496,aS=37488,oS=37489,b_=37490,lS=37491,cS=37808,fS=37809,hS=37810,dS=37811,uS=37812,mS=37813,pS=37814,_S=37815,gS=37816,vS=37817,ES=37818,SS=37819,TS=37820,AS=37821,xS=36492,RS=36494,bS=36495,IS=36283,MS=36284,I_=36285,CS=36286,l1=2200,c1=2201,f1=2202,dh=2300,uh=2301,fE=2302,G0=2303,lh=2400,ch=2401,qp=2402,yS=2500,h1=2501,mI=0,M_=1,Cu=2,d1=3200,yu=0,u1=1,Nl="",Ii="srgb",qn="srgb-linear",Zp="linear",Yi="srgb",oh=7680,k0=519,m1=512,p1=513,_1=514,PS=515,g1=516,v1=517,LS=518,E1=519,SE=35044,pI="300 es",Ya=2e3,cu=2001;Jw={},hu=null;x1={[uE]:mE,[pE]:vE,[_E]:EE,[hh]:gE,[mE]:uE,[vE]:pE,[EE]:_E,[gE]:hh},pa=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}},AI=class AI{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(tF.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(tF.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 d0.copy(this).projectOnVector(e),this.sub(d0)}reflect(e){return this.sub(d0.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}};AI.prototype.isVector3=!0;se=AI,d0=new se,tF=new Qr,xI=class xI{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(u0.makeScale(e,t)),this}rotate(e){return this.premultiply(u0.makeRotation(-e)),this}translate(e,t){return this.premultiply(u0.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)}};xI.prototype.isMatrix3=!0;ri=xI,u0=new ri,iF=new ri().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),rF=new ri().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);oi=YQ();AE=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{Hd===void 0&&(Hd=fu("canvas")),Hd.width=e.width,Hd.height=e.height;let r=Hd.getContext("2d");e instanceof ImageData?r.putImageData(e,0,0):r.drawImage(e,0,0,e.width,e.height),i=Hd}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=fu("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(p0).x}get height(){return this.source.getSize(p0).y}get depth(){return this.source.getSize(p0).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!==oI)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 ma:e.x=e.x<0?0:1;break;case lu: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 ma:e.y=e.y<0?0:1;break;case lu:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y=e.y-Math.floor(e.y);break}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){e===!0&&this.pmremVersion++}};Ar.DEFAULT_IMAGE=null;Ar.DEFAULT_MAPPING=oI;Ar.DEFAULT_ANISOTROPY=1;RI=class RI{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}};RI.prototype.isVector4=!0;Ji=RI,xE=class extends pa{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 Ar(r),a=i.count;for(let o=0;o1);this.dispose()}this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}clone(){return new this.constructor().copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.scissor.copy(e.scissor),this.scissorTest=e.scissorTest,this.viewport.copy(e.viewport),this.textures.length=0;for(let t=0,i=e.textures.length;t>>0}enable(e){this.mask|=1<1){for(let t=0;t1){for(let i=0;i0&&(r.userData=this.userData),r.layers=this.layers.mask,r.matrix=this.matrix.toArray(),r.up=this.up.toArray(),this.pivot!==null&&(r.pivot=this.pivot.toArray()),this.matrixAutoUpdate===!1&&(r.matrixAutoUpdate=!1),this.morphTargetDictionary!==void 0&&(r.morphTargetDictionary=Object.assign({},this.morphTargetDictionary)),this.morphTargetInfluences!==void 0&&(r.morphTargetInfluences=this.morphTargetInfluences.slice()),this.isInstancedMesh&&(r.type="InstancedMesh",r.count=this.count,r.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(r.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(r.type="BatchedMesh",r.perObjectFrustumCulled=this.perObjectFrustumCulled,r.sortObjects=this.sortObjects,r.drawRanges=this._drawRanges,r.reservedRanges=this._reservedRanges,r.geometryInfo=this._geometryInfo.map(o=>({...o,boundingBox:o.boundingBox?o.boundingBox.toJSON():void 0,boundingSphere:o.boundingSphere?o.boundingSphere.toJSON():void 0})),r.instanceInfo=this._instanceInfo.map(o=>({...o})),r.availableInstanceIds=this._availableInstanceIds.slice(),r.availableGeometryIds=this._availableGeometryIds.slice(),r.nextIndexStart=this._nextIndexStart,r.nextVertexStart=this._nextVertexStart,r.geometryCount=this._geometryCount,r.maxInstanceCount=this._maxInstanceCount,r.maxVertexCount=this._maxVertexCount,r.maxIndexCount=this._maxIndexCount,r.geometryInitialized=this._geometryInitialized,r.matricesTexture=this._matricesTexture.toJSON(e),r.indirectTexture=this._indirectTexture.toJSON(e),this._colorsTexture!==null&&(r.colorsTexture=this._colorsTexture.toJSON(e)),this.boundingSphere!==null&&(r.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(r.boundingBox=this.boundingBox.toJSON()));function s(o,l){return o[l.uuid]===void 0&&(o[l.uuid]=l.toJSON(e)),l.uuid}if(this.isScene)this.background&&(this.background.isColor?r.background=this.background.toJSON():this.background.isTexture&&(r.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(r.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){r.geometry=s(e.geometries,this.geometry);let o=this.geometry.parameters;if(o!==void 0&&o.shapes!==void 0){let l=o.shapes;if(Array.isArray(l))for(let c=0,f=l.length;c0){r.children=[];for(let o=0;o0){r.animations=[];for(let o=0;o0&&(i.geometries=o),l.length>0&&(i.materials=l),c.length>0&&(i.textures=c),f.length>0&&(i.images=f),h.length>0&&(i.shapes=h),d.length>0&&(i.skeletons=d),u.length>0&&(i.animations=u),m.length>0&&(i.nodes=m)}return i.object=r,i;function a(o){let l=[];for(let c in o){let f=o[c];delete f.metadata,l.push(f)}return l}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.pivot=e.pivot!==null?e.pivot.clone():null,this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.static=e.static,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let i=0;iu+m?(c.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:e.handedness,target:this})):!c.inputState.pinching&&d<=u-m&&(c.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:e.handedness,target:this}))}else l!==null&&e.gripSpace&&(s=t.getPose(e.gripSpace,i),s!==null&&(l.matrix.fromArray(s.transform.matrix),l.matrix.decompose(l.position,l.rotation,l.scale),l.matrixWorldNeedsUpdate=!0,s.linearVelocity?(l.hasLinearVelocity=!0,l.linearVelocity.copy(s.linearVelocity)):l.hasLinearVelocity=!1,s.angularVelocity?(l.hasAngularVelocity=!0,l.angularVelocity.copy(s.angularVelocity)):l.hasAngularVelocity=!1,l.eventsEnabled&&l.dispatchEvent({type:"gripUpdated",data:e,target:this})));o!==null&&(r=t.getPose(e.targetRaySpace,i),r===null&&s!==null&&(r=s),r!==null&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(t$)))}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]}},R1={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},Vc={h:0,s:0,l:0},Fv={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=_I(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=g0(a,s,e+1/3),this.g=g0(a,s,e),this.b=g0(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=R1[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=ou(e.r),this.g=ou(e.g),this.b=ou(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=Ii){return oi.workingToColorSpace(yn.copy(this),e),Math.round(mi(yn.r*255,0,255))*65536+Math.round(mi(yn.g*255,0,255))*256+Math.round(mi(yn.b*255,0,255))}getHexString(e=Ii){return("000000"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=oi.workingColorSpace){oi.workingToColorSpace(yn.copy(this),t);let i=yn.r,r=yn.g,s=yn.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}},Ha=new se,Al=new se,v0=new se,xl=new se,Kd=new se,jd=new se,hF=new se,E0=new se,S0=new se,T0=new se,A0=new Ji,x0=new Ji,R0=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),Ha.subVectors(e,t),r.cross(Ha);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){Ha.subVectors(r,t),Al.subVectors(i,t),v0.subVectors(e,t);let a=Ha.dot(Ha),o=Ha.dot(Al),l=Ha.dot(v0),c=Al.dot(Al),f=Al.dot(v0),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 A0.setScalar(0),x0.setScalar(0),R0.setScalar(0),A0.fromBufferAttribute(e,t),x0.fromBufferAttribute(e,i),R0.fromBufferAttribute(e,r),a.setScalar(0),a.addScaledVector(A0,s.x),a.addScaledVector(x0,s.y),a.addScaledVector(R0,s.z),a}static isFrontFacing(e,t,i,r){return Ha.subVectors(i,t),Al.subVectors(e,t),Ha.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 Ha.subVectors(this.c,this.b),Al.subVectors(this.a,this.b),Ha.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;Kd.subVectors(r,i),jd.subVectors(s,i),E0.subVectors(e,i);let l=Kd.dot(E0),c=jd.dot(E0);if(l<=0&&c<=0)return t.copy(i);S0.subVectors(e,r);let f=Kd.dot(S0),h=jd.dot(S0);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(Kd,a);T0.subVectors(e,s);let u=Kd.dot(T0),m=jd.dot(T0);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(jd,o);let _=f*m-u*h;if(_<=0&&h-f>=0&&u-m>=0)return hF.subVectors(s,r),o=(h-f)/(h-f+(u-m)),t.copy(r).addScaledVector(hF,o);let g=1/(_+p+d);return a=p*g,o=d*g,t.copy(i).addScaledVector(Kd,a).addScaledVector(jd,o)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}},pr=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,za),za.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),Uv.subVectors(this.max,Bp),qd.subVectors(e.a,Bp),Zd.subVectors(e.b,Bp),Qd.subVectors(e.c,Bp),Gc.subVectors(Zd,qd),kc.subVectors(Qd,Zd),rh.subVectors(qd,Qd);let t=[0,-Gc.z,Gc.y,0,-kc.z,kc.y,0,-rh.z,rh.y,Gc.z,0,-Gc.x,kc.z,0,-kc.x,rh.z,0,-rh.x,-Gc.y,Gc.x,0,-kc.y,kc.x,0,-rh.y,rh.x,0];return!b0(t,qd,Zd,Qd,Uv)||(t=[1,0,0,0,1,0,0,0,1],!b0(t,qd,Zd,Qd,Uv))?!1:(Vv.crossVectors(Gc,kc),t=[Vv.x,Vv.y,Vv.z],b0(t,qd,Zd,Qd,Uv))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,za).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(za).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],za=new se,Bv=new pr,qd=new se,Zd=new se,Qd=new se,Gc=new se,kc=new se,rh=new se,Bp=new se,Uv=new se,Vv=new se,nh=new se;Hr=new se,Gv=new It,i$=0,hr=class extends pa{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:i$++}),this.name="",this.array=e,this.itemSize=t,this.count=e!==void 0?e.length/t:0,this.normalized=i,this.usage=SE,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):(I0.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(Up.copy(e.center).add(I0)),this.expandByPoint(Up.copy(e.center).sub(I0))),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}},n$=0,da=new li,M0=new nr,$d=new se,zs=new pr,Vp=new pr,cn=new se,Hi=class n extends pa{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:n$++}),this.uuid=Ka(),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(CQ(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 da.makeRotationFromQuaternion(e),this.applyMatrix4(da),this}rotateX(e){return da.makeRotationX(e),this.applyMatrix4(da),this}rotateY(e){return da.makeRotationY(e),this.applyMatrix4(da),this}rotateZ(e){return da.makeRotationZ(e),this.applyMatrix4(da),this}translate(e,t,i){return da.makeTranslation(e,t,i),this.applyMatrix4(da),this}scale(e,t,i){return da.makeScale(e,t,i),this.applyMatrix4(da),this}lookAt(e){return M0.lookAt(e),M0.updateMatrix(),this.applyMatrix4(M0.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter($d).negate(),this.translate($d.x,$d.y,$d.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 pr);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!==fh&&(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!==hE&&(i.blendSrc=this.blendSrc),this.blendDst!==dE&&(i.blendDst=this.blendDst),this.blendEquation!==zc&&(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!==hh&&(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!==k0&&(i.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(i.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(i.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==oh&&(i.stencilFail=this.stencilFail),this.stencilZFail!==oh&&(i.stencilZFail=this.stencilZFail),this.stencilZPass!==oh&&(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++}},pu=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,eu=new se,tu=new se,iu=new It,kp=new It,b1=new li,kv=new se,Wp=new se,Wv=new se,dF=new It,C0=new It,uF=new It,t_=class extends nr{constructor(e=new pu){if(super(),this.isSprite=!0,this.type="Sprite",Jd===void 0){Jd=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 _h(t,5);Jd.setIndex([0,1,2,0,2,3]),Jd.setAttribute("position",new Xc(i,3,0,!1)),Jd.setAttribute("uv",new Xc(i,2,3,!1))}this.geometry=Jd,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.'),eu.setFromMatrixScale(this.matrixWorld),b1.copy(e.camera.matrixWorld),this.modelViewMatrix.multiplyMatrices(e.camera.matrixWorldInverse,this.matrixWorld),tu.setFromMatrixPosition(this.modelViewMatrix),e.camera.isPerspectiveCamera&&this.material.sizeAttenuation===!1&&eu.multiplyScalar(-tu.z);let i=this.material.rotation,r,s;i!==0&&(s=Math.cos(i),r=Math.sin(i));let a=this.center;Hv(kv.set(-.5,-.5,0),tu,a,eu,r,s),Hv(Wp.set(.5,-.5,0),tu,a,eu,r,s),Hv(Wv.set(.5,.5,0),tu,a,eu,r,s),dF.set(0,0),C0.set(1,0),uF.set(1,1);let o=e.ray.intersectTriangle(kv,Wp,Wv,!1,Gp);if(o===null&&(Hv(Wp.set(-.5,.5,0),tu,a,eu,r,s),C0.set(0,1),o=e.ray.intersectTriangle(kv,Wv,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,kv,Wp,Wv,dF,C0,uF,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,y0=new se,zv=new se,Wc=new se,P0=new se,Xv=new se,L0=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){y0.copy(e).add(t).multiplyScalar(.5),zv.copy(t).sub(e).normalize(),Wc.copy(this.origin).sub(y0);let s=e.distanceTo(t)*.5,a=-this.direction.dot(zv),o=Wc.dot(this.direction),l=-Wc.dot(zv),c=Wc.lengthSq(),f=Math.abs(1-a*a),h,d,u,m;if(f>0)if(h=a*l-o,d=a*o-l,m=s*f,h>=0)if(d>=-m)if(d<=m){let 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(y0).addScaledVector(zv,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){P0.subVectors(t,e),Xv.subVectors(i,e),L0.crossVectors(P0,Xv);let a=this.direction.dot(L0),o;if(a>0){if(r)return null;o=1}else if(a<0)o=-1,a=-a;else return null;Wc.subVectors(this.origin,e);let l=o*this.direction.dot(Xv.crossVectors(Wc,Xv));if(l<0)return null;let c=o*this.direction.dot(P0.cross(Wc));if(c<0||l+c>a)return null;let f=-o*Wc.dot(L0);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)}},Zn=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 ja,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}},mF=new li,sh=new wo,Yv=new ms,pF=new se,Kv=new se,jv=new se,qv=new se,D0=new se,Zv=new se,_F=new se,Qv=new se,Jt=class extends nr{constructor(e=new Hi,t=new Zn){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))&&(mF.copy(s).invert(),sh.copy(e.ray).applyMatrix4(mF),!(i.boundingBox!==null&&sh.intersectsBox(i.boundingBox)===!1)&&this._computeIntersections(e,t,sh)))}_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||h$.getNormalMatrix(e),r=this.coplanarPoint(w0).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)}},ah=new ms,d$=new It(.5,.5),tE=new se,vu=class{constructor(e=new ua,t=new ua,i=new ua,r=new ua,s=new ua,a=new ua){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=Ya,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===Ya)r[5].setComponents(c+l,u+d,g+_,E+T).normalize();else if(t===cu)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(),ah.copy(e.boundingSphere).applyMatrix4(e.matrixWorld);else{let t=e.geometry;t.boundingSphere===null&&t.computeBoundingSphere(),ah.copy(t.boundingSphere).applyMatrix4(e.matrixWorld)}return this.intersectsSphere(ah)}intersectsSprite(e){ah.center.set(0,0,0);let t=d$.distanceTo(e.center);return ah.radius=.7071067811865476+t,ah.applyMatrix4(e.matrixWorld),this.intersectsSphere(ah)}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,tE.y=r.normal.y>0?e.max.y:e.min.y,tE.z=r.normal.z>0?e.max.z:e.min.z,r.distanceToPoint(tE)<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)}},Pn=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}},bE=new se,IE=new se,RF=new li,Yp=new wo,iE=new ms,F0=new se,bF=new se,Fo=class extends nr{constructor(e=new Hi,t=new Pn){super(),this.isLine=!0,this.type="Line",this.geometry=e,this.material=t,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),this.material=Array.isArray(e.material)?e.material.slice():e.material,this.geometry=e.geometry,this}computeLineDistances(){let e=this.geometry;if(e.index===null){let t=e.attributes.position,i=[0];for(let r=1,s=t.count;r0){let r=t[i[0]];if(r!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let s=0,a=r.length;s0){let r=t[i[0]];if(r!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let s=0,a=r.length;s0?1:-1,f.push(q.x,q.y,q.z),h.push(Y/R),h.push(1-te/I),H+=1}}for(let te=0;te0)&&u.push(x,T,S),(g!==i-1||l[Ld(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)=>!aQ(l,n[c])))&&(e==null||e(r)),{get(l,c,f){return s.get(Ld(l,c,f))},set(l){s.set(Ld(l.sourcePath,l.sourceExt,l.targetExt),l),a()},delete(l,c,f){let h=s.delete(Ld(l,c,f));return h&&a(),h},clear(){s.size!==0&&(s.clear(),a())},entries(){return t()}}}var l0=M(()=>{"use strict"});function Ga(n){return n.trim().toLowerCase().replace(/^\./,"")}function c0(n){return oQ.get(Ga(n))}function Sl(n){let e=c0(n);return!!(e!=null&&e.enabled)}function yp(n){return["splat","spz","sog"].includes(Ga(n))}function Tl(){return Pw.filter(n=>n.enabled).map(n=>n.ext)}var Pw,oQ,yo=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}],oQ=new Map(Pw.map(n=>[n.ext,n]))});var h0,Nw=M(()=>{"use strict";h0={"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 ww,Fw=M(()=>{"use strict";ww={"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 Lp(n){Bw=n;for(let e of d0)e()}function Q(n){var e,t,i;return(i=(t=(e=uQ[Bw])==null?void 0:e[n])!=null?t:h0[n])!=null?i:n}function Uw(n){return d0.add(n),()=>{d0.delete(n)}}function mQ(n,e){return n.replace(/\{(\w+)\}/g,(t,i)=>{var r;return(r=e[i])!=null?r:""})}function Ki(n,e){return mQ(Q(n),e)}var uQ,Bw,d0,Mn=M(()=>{"use strict";Nw();Fw();uQ={en:h0,"zh-CN":ww},Bw="en",d0=new Set});function pQ(){if("require"in activeWindow)return activeWindow.require}function Pv(){if("process"in activeWindow)return activeWindow.process}function Dp(n){let e=pQ();if(!e)return null;try{return e(n)}catch(t){return null}}function fs(n,e){if(n===null)throw new Error(`${e} is not available in this environment (mobile or web).`);return n}function hs(n,e){return fs(Od,"node:fs/promises").access(n,e)}function fa(n){return fs(Od,"node:fs/promises").readFile(n)}function Nd(n,e,t){return fs(Od,"node:fs/promises").writeFile(n,e,{encoding:t})}function wd(n,e){return fs(Od,"node:fs/promises").mkdir(n,e)}function Fd(n,e){return fs(Od,"node:fs/promises").rm(n,e)}function Op(n){return fs(Od,"node:fs/promises").stat(n)}function Xi(...n){return fs(Al,"node:path").join(...n)}function Po(n){return fs(Al,"node:path").dirname(n)}function Lo(n,e){return fs(Al,"node:path").basename(n,e)}function ha(n){return fs(Al,"node:path").extname(n)}function u0(n){return fs(Al,"node:path").normalize(n)}function jn(n){return fs(Al,"node:path").isAbsolute(n)}function da(n,e,t,i){fs(_Q,"node:child_process").execFile(n,e,t,i)}function Bd(){return fs(gQ,"node:os").tmpdir()}var Od,Dd,Al,_Q,gQ,Vw,ds,Gw,Ww,kw,Hw,fr=M(()=>{"use strict";Od=Dp("node:fs/promises"),Dd=Dp("node:fs"),Al=Dp("node:path"),_Q=Dp("node:child_process"),gQ=Dp("node:os");ds=(Vw=Dd==null?void 0:Dd.constants.F_OK)!=null?Vw:0,Ww=(Gw=Dd==null?void 0:Dd.constants.X_OK)!=null?Gw:0;Hw=(kw=Al==null?void 0:Al.delimiter)!=null?kw:":"});function m0(n){return n.replace(/\\/g,"/")}function Lv(n){let e=m0(n),t=[];for(let i of e.split("/"))if(!(!i||i===".")){if(i===".."){t.pop();continue}t.push(i)}return t.join("/")}function zw(n){try{return decodeURIComponent(n)}catch(e){return n}}function Ws(n,e){var r;let t=zw((r=e.split(/[?#]/,1)[0])!=null?r:e),i=Lv(t);return n?Lv(`${n}/${i}`):i}function Np(n){let e=m0(n).replace(/\/+$/,""),t=e.lastIndexOf("/");return t>0?e.slice(0,t):""}function us(n){let e=m0(n).replace(/\/+$/,""),t=e.lastIndexOf("/");return t>=0?e.slice(t+1):e}function Zr(n){return us(n).replace(/\.[^.]+$/,"")}async function vQ(n,e){let t=Lv(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 EQ(n){return Uint8Array.from(n).buffer}function SQ(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 Vd(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 rh(n,e){if(jn(e))return u0(e);let t=SQ(n);return t?u0(Xi(t,e)):null}async function ka(n,e){if(jn(e)){let r=await fa(e);return EQ(r)}let t=Lv(zw(e)),i=n.vault.getAbstractFileByPath(t);if(!(i instanceof Ud.TFile)){let r=await vQ(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,Hs=M(()=>{"use strict";Ud=require("obsidian");fr();fr()});function Gt(n){return{x:n.x,y:n.y,z:n.z}}function Qr(n){return{x:n.x,y:n.y,z:n.z}}function Gd(n,e){return{x:n.x-e.x,y:n.y-e.y,z:n.z-e.z}}function wp(n,e){return{x:n.x*e,y:n.y*e,z:n.z*e}}function Kw(n,e){let t=Gd(n,e);return Math.hypot(t.x,t.y,t.z)}function p0(n){let e=Math.hypot(n.x,n.y,n.z);return e<=Number.EPSILON?null:wp(n,1/e)}function nh(n,e){return{x:n.x+e.x,y:n.y+e.y,z:n.z+e.z}}function Xw(n,e){return n.x*e.x+n.y*e.y+n.z*e.z}function jw(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 qw(n){return Math.max(n*.01,.01)}function Bc(n,e,t=qw(e)){return n{"use strict"});function MQ(){return`pin-${Date.now()}-${xQ++}`}function Jw(n){return Qr(n)}function CQ(n,e,t){return n.lefte.left-t&&n.tope.top-t}var Fp,Wd,xQ,_0,RQ,bQ,Zw,Qw,IQ,$w,Hd,Vc,Fv=M(()=>{"use strict";Fp=require("obsidian");Mn();Hs();ms();Wd=["#4a9eff","#ff6b6b","#51cf66","#ffd43b","#845ef7","#ff922b","#22b8cf","#f06595","#94d82d","#ffa8a8"],xQ=1,_0=4,RQ=2,bQ=6,Zw=6,Qw=72,IQ=80,$w=200;Hd=class Hd{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 Fp.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>=$w)return console.warn(`[AI3D] Pin limit (${$w}) reached; ignoring new pin.`),this.annotations[this.annotations.length-1];let r={id:MQ(),position:[e.x,e.y,e.z],label:t,color:i!=null?i:Wd[this.annotations.length%Wd.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,Jw(i.worldPos),t)}getPinPosition(e){let t=this.pinEls.get(e);return t?Jw(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",w=>{w.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=w=>{let N=h.querySelectorAll(".ai3d-heading-dropdown-item");N.forEach(U=>U.classList.remove("active")),d=w,w>=0&&w{var H;this._selectedHeading=w,o.value=w.heading;let N=Zr(w.notePath);(H=l.querySelector(".ai3d-editor-binding-text"))==null||H.remove();let U=l.createSpan({cls:"ai3d-editor-binding-text"});U.textContent=`\u{1F4C4} ${N}`,l.classList.remove("is-hidden"),_(),o.focus(),this.loadContentPreview(f,w.notePath,w.heading)},_=()=>{h.classList.add("is-hidden"),h.replaceChildren(),d=-1},g=w=>{if(h.replaceChildren(),d=-1,u=w,w.length===0){h.classList.add("is-hidden");return}for(let N=0;N{te.preventDefault(),te.stopPropagation(),p(U)}),H.addEventListener("mouseenter",()=>m(N))}h.classList.remove("is-hidden")};o.addEventListener("input",()=>{if(!this.headingSearch)return;this._headingDebounce&&window.clearTimeout(this._headingDebounce);let w=o.value.trim();if(w.length<1){_();return}this._headingDebounce=window.setTimeout(()=>{let N=this.headingSearch(w);g(N)},150)}),o.addEventListener("keydown",w=>{if(h.classList.contains("is-hidden")){w.key==="Enter"?(w.preventDefault(),R.click()):w.key==="Escape"&&(w.preventDefault(),this.hideEditor());return}let N=h.querySelectorAll(".ai3d-heading-dropdown-item");w.key==="ArrowDown"?(w.preventDefault(),m(Math.min(d+1,N.length-1))):w.key==="ArrowUp"?(w.preventDefault(),m(Math.max(d-1,0))):w.key==="Enter"?(w.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||Wd[0],E=x&&!Wd.includes(x)?[x,...Wd]:Wd;for(let w of E){let N=v.createEl("button",{cls:"ai3d-pin-color-swatch"});N.type="button",N.title=w,N.setAttribute("aria-label",Ki("annotation.selectColor",{color:w})),N.style.setProperty("--swatch-color",w),N.style.backgroundColor=w,w===T&&N.classList.add("is-selected"),N.addEventListener("click",U=>{U.stopPropagation(),T=w,v.querySelectorAll(".ai3d-pin-color-swatch").forEach(H=>H.classList.remove("is-selected")),N.classList.add("is-selected")})}let S=s.createDiv({cls:"ai3d-annotation-editor-actions"});if(r){let w=S.createEl("button",{cls:"ai3d-annotation-editor-btn ai3d-annotation-editor-delete"});w.textContent="Delete",w.addEventListener("click",N=>{N.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",w=>{w.stopPropagation();let N=o.value.trim()||"Pin",U=this._selectedHeading;if(r){let H={label:N,color:T};U&&(H.notePath=U.notePath,H.headingRef=U.heading,H.headingLevel=U.level),this.updatePin(r.id,H)}else{let H=this.addPin(i,N,T);U&&this.updatePin(H.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",w=>{w.stopPropagation(),this.hideEditor()});let C=this.overlay.getBoundingClientRect(),y=e-C.left,L=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(L-10,C.height-160))}px`),this.editorEl=s,r!=null&&r.notePath&&(r!=null&&r.headingRef)){let w=Zr(r.notePath),N=l.createSpan({cls:"ai3d-editor-binding-text"});N.textContent=`\u{1F4C4} ${w}`,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",w=>w.stopPropagation()),s.addEventListener("mousedown",w=>w.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 Fp.Component);this.previewRenderChildren.set(e,l);try{await Fp.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>=Hd.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%bQ===0:this.frameCount%RQ===0,a=this.cameraIdle||r.length<=_0,o=a?0:this.movingOcclusionCursor%r.length,l=o+_0,c=Hd._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+_0)%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>IQ){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(!CQ(c,f,Zw))continue;let h=a.screenY>=f.top+f.height/2?1:-1;l=Math.max(-Qw,Math.min(Qw,l+h*(f.height+Zw)));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")}};Hd.IDLE_THRESHOLD=15,Hd._scratchProjection={screenX:0,screenY:0,depth:0};Vc=Hd});function PQ(n){return n!=null?n:tF}function zd(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=PQ(n.rendererRollout);if(!(n.useThreeRenderer!==!1))return{backend:"babylon",ext:e,annotationMode:t,requireWorkbenchFeatures:s,rendererRollout:a,reason:"useThreeRenderer=false"};if(eF.has(e)&&(!s||r)){if(s&&!yQ.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 eF.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!==tF&&l.push(`rendererRollout=${a}`),{backend:"babylon",ext:e,annotationMode:t,requireWorkbenchFeatures:s,rendererRollout:a,reason:l.join(", ")||"fallback route"}}function iF(){return{backend:"babylon",reason:"grid previews remain on the Babylon grid renderer"}}var tF,eF,yQ,Bv=M(()=>{"use strict";tF="three-direct-glb",eF=new Set(["glb","gltf","stl","ply","obj"]),yQ=new Set(["glb","gltf"])});function LQ(n){for(let e=n.length-1;e>=0;--e)if(n[e]>=65535)return!0;return!1}function DQ(n){return ArrayBuffer.isView(n)&&!(n instanceof DataView)}function du(n){return document.createElementNS("http://www.w3.org/1999/xhtml",n)}function R1(){let n=du("canvas");return n.style.display="block",n}function $p(...n){let e="THREE."+n.shift();uu?uu("log",e,...n):console.log(e,...n)}function b1(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=b1(n);let e="THREE."+n.shift();if(uu)uu("warn",e,...n);else{let t=n[0];t&&t.isStackTrace?console.warn(t.getError(e)):console.warn(e,...n)}}function Bt(...n){n=b1(n);let e="THREE."+n.shift();if(uu)uu("error",e,...n);else{let t=n[0];t&&t.isStackTrace?console.error(t.getError(e)):console.error(e,...n)}}function bE(...n){let e=n.join(" ");e in rF||(rF[e]=!0,Ct(...n))}function I1(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 Ka(){let n=Math.random()*4294967295|0,e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,i=Math.random()*4294967295|0;return(Cn[n&255]+Cn[n>>8&255]+Cn[n>>16&255]+Cn[n>>24&255]+"-"+Cn[e&255]+Cn[e>>8&255]+"-"+Cn[e>>16&15|64]+Cn[e>>24&255]+"-"+Cn[t&63|128]+Cn[t>>8&255]+"-"+Cn[t>>16&255]+Cn[t>>24&255]+Cn[i&255]+Cn[i>>8&255]+Cn[i>>16&255]+Cn[i>>24&255]).toLowerCase()}function mi(n,e,t){return Math.max(e,Math.min(t,n))}function TI(n,e){return(n%e+e)%e}function OQ(n,e,t,i,r){return i+(n-e)*(r-i)/(t-e)}function NQ(n,e,t){return n!==e?(t-n)/(e-n):0}function qp(n,e,t){return(1-t)*n+t*e}function wQ(n,e,t,i){return qp(n,e,1-Math.exp(-t*i))}function FQ(n,e=1){return e-Math.abs(TI(n,e*2)-e)}function BQ(n,e,t){return n<=e?0:n>=t?1:(n=(n-e)/(t-e),n*n*(3-2*n))}function UQ(n,e,t){return n<=e?0:n>=t?1:(n=(n-e)/(t-e),n*n*n*(n*(n*6-15)+10))}function VQ(n,e){return n+Math.floor(Math.random()*(e-n+1))}function GQ(n,e){return n+Math.random()*(e-n)}function kQ(n){return n*(.5-Math.random())}function WQ(n){n!==void 0&&(nF=n);let e=nF+=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 HQ(n){return n*jp}function zQ(n){return n*_h}function XQ(n){return(n&n-1)===0&&n!==0}function YQ(n){return Math.pow(2,Math.ceil(Math.log(n)/Math.LN2))}function KQ(n){return Math.pow(2,Math.floor(Math.log(n)/Math.LN2))}function jQ(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 Xa(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 qQ(){let n={enabled:!0,workingColorSpace:Zn,spaces:{},convert:function(r,s,a){return this.enabled===!1||s===a||!s||!a||(this.spaces[s].transfer===Yi&&(r.r=Pl(r.r),r.g=Pl(r.g),r.b=Pl(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=cu(r.r),r.g=cu(r.g),r.b=cu(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===Fl?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 bE("ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),n.workingToColorSpace(r,s)},toWorkingColorSpace:function(r,s){return bE("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({[Zn]:{primaries:e,whitePoint:i,transfer:Qp,toXYZ:aF,fromXYZ:oF,luminanceCoefficients:t,workingColorSpaceConfig:{unpackColorSpace:Ii},outputColorSpaceConfig:{drawingBufferColorSpace:Ii}},[Ii]:{primaries:e,whitePoint:i,transfer:Yi,toXYZ:aF,fromXYZ:oF,luminanceCoefficients:t,outputColorSpaceConfig:{drawingBufferColorSpace:Ii}}}),n}function Pl(n){return n<.04045?n*.0773993808:Math.pow(n*.9478672986+.0521327014,2.4)}function cu(n){return n<.0031308?n*12.92:1.055*Math.pow(n,.41666)-.055}function E0(n){return typeof HTMLImageElement!="undefined"&&n instanceof HTMLImageElement||typeof HTMLCanvasElement!="undefined"&&n instanceof HTMLCanvasElement||typeof ImageBitmap!="undefined"&&n instanceof ImageBitmap?IE.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 A0(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 P0(n,e,t,i,r){for(let s=0,a=n.length-3;s<=a;s+=3){ah.fromArray(n,s);let o=r.x*Math.abs(ah.x)+r.y*Math.abs(ah.y)+r.z*Math.abs(ah.z),l=e.dot(ah),c=t.dot(ah),f=i.dot(ah);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){nu.subVectors(n,t).addScalar(.5).multiply(i),r!==void 0?(Wp.x=s*nu.x-r*nu.y,Wp.y=r*nu.x+s*nu.y):Wp.copy(nu),n.copy(e),n.x+=Wp.x,n.y+=Wp.y,n.applyMatrix4(y1)}function c$(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===Ks,o),l===null)return null;tE.copy(o),tE.applyMatrix4(n.matrixWorld);let c=t.ray.origin.distanceTo(tE);return ct.far?null:{distance:c,point:tE.clone(),object:n}}function iE(n,e,t,i,r,s,a,o,l,c){n.getVertexPosition(o,Qv),n.getVertexPosition(l,$v),n.getVertexPosition(c,Jv);let f=c$(n,e,t,i,Qv,$v,Jv,SF);if(f){let h=new se;yl.getBarycoord(SF,Qv,$v,Jv,h),r&&(f.uv=yl.getInterpolatedAttribute(r,o,l,c,h,new It)),s&&(f.uv1=yl.getInterpolatedAttribute(s,o,l,c,h,new It)),a&&(f.normal=yl.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};yl.getNormal(Qv,$v,Jv,d.normal),f.face=d,f.barycoord=h}return f}function oE(n,e,t,i,r,s,a){let o=n.geometry.attributes.position;if(yE.fromBufferAttribute(o,r),PE.fromBufferAttribute(o,s),t.distanceSqToSegment(yE,PE,k0,yF)>i)return;k0.applyMatrix4(n.matrixWorld);let c=e.ray.origin.distanceTo(k0);if(!(ce.far))return{distance:c,point:yF.clone().applyMatrix4(n.matrixWorld),index:a,face:null,faceIndex:null,barycoord:null,object:n}}function OF(n,e,t,i,r,s,a){let o=K0.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 Ih(n){let e={};for(let t in n){e[t]={};for(let i in n[t]){let r=n[t][i];if(NF(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(NF(r[0])){let s=[];for(let a=0,o=r.length;a{$c={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},Jc={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},HF=0,tI=1,zF=2,E_=1,YE=2,Iu=3,Ks=0,_n=1,ga=2,Ho=0,dh=1,iI=2,rI=3,nI=4,XF=5,Yc=100,YF=101,KF=102,jF=103,qF=104,ZF=200,QF=201,$F=202,JF=203,pE=204,_E=205,e1=206,t1=207,i1=208,r1=209,n1=210,s1=211,a1=212,o1=213,l1=214,gE=0,vE=1,EE=2,uh=3,SE=4,TE=5,AE=6,xE=7,S_=0,c1=1,f1=2,Ts=0,sI=1,aI=2,oI=3,lI=4,cI=5,fI=6,hI=7,z0="attached",h1="detached",dI=300,ef=301,Rh=302,KE=303,jE=304,T_=306,No=1e3,pa=1001,fu=1002,wr=1003,qE=1004,bh=1005,Fr=1006,Mu=1007,$a=1008,As=1009,uI=1010,mI=1011,Cu=1012,ZE=1013,Ja=1014,Zs=1015,zo=1016,QE=1017,$E=1018,yu=1020,pI=35902,_I=35899,gI=1021,vI=1022,Qs=1023,wo=1026,tf=1027,JE=1028,eS=1029,rf=1030,tS=1031,iS=1033,A_=33776,x_=33777,R_=33778,b_=33779,rS=35840,nS=35841,sS=35842,aS=35843,oS=36196,lS=37492,cS=37496,fS=37488,hS=37489,I_=37490,dS=37491,uS=37808,mS=37809,pS=37810,_S=37811,gS=37812,vS=37813,ES=37814,SS=37815,TS=37816,AS=37817,xS=37818,RS=37819,bS=37820,IS=37821,MS=36492,CS=36494,yS=36495,PS=36283,LS=36284,M_=36285,DS=36286,d1=2200,u1=2201,m1=2202,mh=2300,ph=2301,mE=2302,X0=2303,fh=2400,hh=2401,Zp=2402,OS=2500,p1=2501,EI=0,C_=1,Pu=2,_1=3200,Lu=0,g1=1,Fl="",Ii="srgb",Zn="srgb-linear",Qp="linear",Yi="srgb",ch=7680,Y0=519,v1=512,E1=513,S1=514,NS=515,T1=516,A1=517,wS=518,x1=519,RE=35044,SI="300 es",Ya=2e3,hu=2001;rF={},uu=null;M1={[gE]:vE,[EE]:AE,[SE]:xE,[uh]:TE,[vE]:gE,[AE]:EE,[xE]:SE,[TE]:uh},_a=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}},MI=class MI{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(sF.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(sF.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 g0.copy(this).projectOnVector(e),this.sub(g0)}reflect(e){return this.sub(g0.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}};MI.prototype.isVector3=!0;se=MI,g0=new se,sF=new $r,CI=class CI{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(v0.makeScale(e,t)),this}rotate(e){return this.premultiply(v0.makeRotation(-e)),this}translate(e,t){return this.premultiply(v0.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)}};CI.prototype.isMatrix3=!0;ri=CI,v0=new ri,aF=new ri().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),oF=new ri().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);oi=qQ();IE=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{Xd===void 0&&(Xd=du("canvas")),Xd.width=e.width,Xd.height=e.height;let r=Xd.getContext("2d");e instanceof ImageData?r.putImageData(e,0,0):r.drawImage(e,0,0,e.width,e.height),i=Xd}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=du("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(S0).x}get height(){return this.source.getSize(S0).y}get depth(){return this.source.getSize(S0).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!==dI)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case No:e.x=e.x-Math.floor(e.x);break;case pa:e.x=e.x<0?0:1;break;case fu: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 No:e.y=e.y-Math.floor(e.y);break;case pa:e.y=e.y<0?0:1;break;case fu: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=dI;xr.DEFAULT_ANISOTROPY=1;yI=class yI{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}};yI.prototype.isVector4=!0;Ji=yI,ME=class extends _a{constructor(e=1,t=1,i={}){super(),i=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:Fr,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(n$)))}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 Ys;i.matrixAutoUpdate=!1,i.visible=!1,e.joints[t.jointName]=i,e.add(i)}return e.joints[t.jointName]}},C1={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},kc={h:0,s:0,l:0},Gv={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=TI(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=A0(a,s,e+1/3),this.g=A0(a,s,e),this.b=A0(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=C1[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=Pl(e.r),this.g=Pl(e.g),this.b=Pl(e.b),this}copyLinearToSRGB(e){return this.r=cu(e.r),this.g=cu(e.g),this.b=cu(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=Ii){return oi.workingToColorSpace(yn.copy(this),e),Math.round(mi(yn.r*255,0,255))*65536+Math.round(mi(yn.g*255,0,255))*256+Math.round(mi(yn.b*255,0,255))}getHexString(e=Ii){return("000000"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=oi.workingColorSpace){oi.workingToColorSpace(yn.copy(this),t);let i=yn.r,r=yn.g,s=yn.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}},Ha=new se,Rl=new se,x0=new se,bl=new se,qd=new se,Zd=new se,pF=new se,R0=new se,b0=new se,I0=new se,M0=new Ji,C0=new Ji,y0=new Ji,yl=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),Ha.subVectors(e,t),r.cross(Ha);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){Ha.subVectors(r,t),Rl.subVectors(i,t),x0.subVectors(e,t);let a=Ha.dot(Ha),o=Ha.dot(Rl),l=Ha.dot(x0),c=Rl.dot(Rl),f=Rl.dot(x0),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,bl)===null?!1:bl.x>=0&&bl.y>=0&&bl.x+bl.y<=1}static getInterpolation(e,t,i,r,s,a,o,l){return this.getBarycoord(e,t,i,r,bl)===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,bl.x),l.addScaledVector(a,bl.y),l.addScaledVector(o,bl.z),l)}static getInterpolatedAttribute(e,t,i,r,s,a){return M0.setScalar(0),C0.setScalar(0),y0.setScalar(0),M0.fromBufferAttribute(e,t),C0.fromBufferAttribute(e,i),y0.fromBufferAttribute(e,r),a.setScalar(0),a.addScaledVector(M0,s.x),a.addScaledVector(C0,s.y),a.addScaledVector(y0,s.z),a}static isFrontFacing(e,t,i,r){return Ha.subVectors(i,t),Rl.subVectors(e,t),Ha.cross(Rl).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 Ha.subVectors(this.c,this.b),Rl.subVectors(this.a,this.b),Ha.cross(Rl).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;qd.subVectors(r,i),Zd.subVectors(s,i),R0.subVectors(e,i);let l=qd.dot(R0),c=Zd.dot(R0);if(l<=0&&c<=0)return t.copy(i);b0.subVectors(e,r);let f=qd.dot(b0),h=Zd.dot(b0);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(qd,a);I0.subVectors(e,s);let u=qd.dot(I0),m=Zd.dot(I0);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(Zd,o);let _=f*m-u*h;if(_<=0&&h-f>=0&&u-m>=0)return pF.subVectors(s,r),o=(h-f)/(h-f+(u-m)),t.copy(r).addScaledVector(pF,o);let g=1/(_+p+d);return a=p*g,o=d*g,t.copy(i).addScaledVector(qd,a).addScaledVector(Zd,o)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}},_r=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,za),za.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(Up),Wv.subVectors(this.max,Up),Qd.subVectors(e.a,Up),$d.subVectors(e.b,Up),Jd.subVectors(e.c,Up),Wc.subVectors($d,Qd),Hc.subVectors(Jd,$d),sh.subVectors(Qd,Jd);let t=[0,-Wc.z,Wc.y,0,-Hc.z,Hc.y,0,-sh.z,sh.y,Wc.z,0,-Wc.x,Hc.z,0,-Hc.x,sh.z,0,-sh.x,-Wc.y,Wc.x,0,-Hc.y,Hc.x,0,-sh.y,sh.x,0];return!P0(t,Qd,$d,Jd,Wv)||(t=[1,0,0,0,1,0,0,0,1],!P0(t,Qd,$d,Jd,Wv))?!1:(Hv.crossVectors(Wc,Hc),t=[Hv.x,Hv.y,Hv.z],P0(t,Qd,$d,Jd,Wv))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,za).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(za).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:(Il[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),Il[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),Il[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),Il[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),Il[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),Il[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),Il[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),Il[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(Il),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}},Il=[new se,new se,new se,new se,new se,new se,new se,new se],za=new se,kv=new _r,Qd=new se,$d=new se,Jd=new se,Wc=new se,Hc=new se,sh=new se,Up=new se,Wv=new se,Hv=new se,ah=new se;zr=new se,zv=new It,s$=0,dr=class extends _a{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:s$++}),this.name="",this.array=e,this.itemSize=t,this.count=e!==void 0?e.length/t:0,this.normalized=i,this.usage=RE,this.updateRanges=[],this.gpuType=Zs,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;Vp.subVectors(e,this.center);let t=Vp.lengthSq();if(t>this.radius*this.radius){let i=Math.sqrt(t),r=(i-this.radius)*.5;this.center.addScaledVector(Vp,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):(L0.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(Vp.copy(e.center).add(L0)),this.expandByPoint(Vp.copy(e.center).sub(L0))),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}},o$=0,ua=new li,D0=new nr,eu=new se,Xs=new _r,Gp=new _r,cn=new se,Hi=class n extends _a{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:o$++}),this.uuid=Ka(),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(LQ(e)?t_:e_)(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 ua.makeRotationFromQuaternion(e),this.applyMatrix4(ua),this}rotateX(e){return ua.makeRotationX(e),this.applyMatrix4(ua),this}rotateY(e){return ua.makeRotationY(e),this.applyMatrix4(ua),this}rotateZ(e){return ua.makeRotationZ(e),this.applyMatrix4(ua),this}translate(e,t,i){return ua.makeTranslation(e,t,i),this.applyMatrix4(ua),this}scale(e,t,i){return ua.makeScale(e,t,i),this.applyMatrix4(ua),this}lookAt(e){return D0.lookAt(e),D0.updateMatrix(),this.applyMatrix4(D0.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(eu).negate(),this.translate(eu.x,eu.y,eu.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 _r);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!==dh&&(i.blending=this.blending),this.side!==Ks&&(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!==pE&&(i.blendSrc=this.blendSrc),this.blendDst!==_E&&(i.blendDst=this.blendDst),this.blendEquation!==Yc&&(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!==uh&&(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!==Y0&&(i.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(i.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(i.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==ch&&(i.stencilFail=this.stencilFail),this.stencilZFail!==ch&&(i.stencilZFail=this.stencilZFail),this.stencilZPass!==ch&&(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++}},gu=class extends Br{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}},kp=new se,iu=new se,ru=new se,nu=new It,Wp=new It,y1=new li,Xv=new se,Hp=new se,Yv=new se,_F=new It,O0=new It,gF=new It,i_=class extends nr{constructor(e=new gu){if(super(),this.isSprite=!0,this.type="Sprite",tu===void 0){tu=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 vh(t,5);tu.setIndex([0,1,2,0,2,3]),tu.setAttribute("position",new Kc(i,3,0,!1)),tu.setAttribute("uv",new Kc(i,2,3,!1))}this.geometry=tu,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.'),iu.setFromMatrixScale(this.matrixWorld),y1.copy(e.camera.matrixWorld),this.modelViewMatrix.multiplyMatrices(e.camera.matrixWorldInverse,this.matrixWorld),ru.setFromMatrixPosition(this.modelViewMatrix),e.camera.isPerspectiveCamera&&this.material.sizeAttenuation===!1&&iu.multiplyScalar(-ru.z);let i=this.material.rotation,r,s;i!==0&&(s=Math.cos(i),r=Math.sin(i));let a=this.center;Kv(Xv.set(-.5,-.5,0),ru,a,iu,r,s),Kv(Hp.set(.5,-.5,0),ru,a,iu,r,s),Kv(Yv.set(.5,.5,0),ru,a,iu,r,s),_F.set(0,0),O0.set(1,0),gF.set(1,1);let o=e.ray.intersectTriangle(Xv,Hp,Yv,!1,kp);if(o===null&&(Kv(Hp.set(-.5,.5,0),ru,a,iu,r,s),O0.set(0,1),o=e.ray.intersectTriangle(Xv,Yv,Hp,!1,kp),o===null))return;let l=e.ray.origin.distanceTo(kp);le.far||t.push({distance:l,point:kp.clone(),uv:yl.getInterpolation(kp,Xv,Hp,Yv,_F,O0,gF,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}};Ml=new se,N0=new se,jv=new se,zc=new se,w0=new se,qv=new se,F0=new se,Fo=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,Ml)),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=Ml.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(Ml.copy(this.origin).addScaledVector(this.direction,t),Ml.distanceToSquared(e))}distanceSqToSegment(e,t,i,r){N0.copy(e).add(t).multiplyScalar(.5),jv.copy(t).sub(e).normalize(),zc.copy(this.origin).sub(N0);let s=e.distanceTo(t)*.5,a=-this.direction.dot(jv),o=zc.dot(this.direction),l=-zc.dot(jv),c=zc.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(N0).addScaledVector(jv,d),u}intersectSphere(e,t){Ml.subVectors(e.center,this.origin);let i=Ml.dot(this.direction),r=Ml.dot(Ml)-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,Ml)!==null}intersectTriangle(e,t,i,r,s){w0.subVectors(t,e),qv.subVectors(i,e),F0.crossVectors(w0,qv);let a=this.direction.dot(F0),o;if(a>0){if(r)return null;o=1}else if(a<0)o=-1,a=-a;else return null;zc.subVectors(this.origin,e);let l=o*this.direction.dot(qv.crossVectors(zc,qv));if(l<0)return null;let c=o*this.direction.dot(w0.cross(zc));if(c<0||l+c>a)return null;let f=-o*zc.dot(F0);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 Br{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 ja,this.combine=S_,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}},vF=new li,oh=new Fo,Zv=new ps,EF=new se,Qv=new se,$v=new se,Jv=new se,B0=new se,eE=new se,SF=new se,tE=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))&&(vF.copy(s).invert(),oh.copy(e.ray).applyMatrix4(vF),!(i.boundingBox!==null&&oh.intersectsBox(i.boundingBox)===!1)&&this._computeIntersections(e,t,oh)))}_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||m$.getNormalMatrix(e),r=this.coplanarPoint(G0).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)}},lh=new ps,p$=new It(.5,.5),sE=new se,Su=class{constructor(e=new ma,t=new ma,i=new ma,r=new ma,s=new ma,a=new ma){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=Ya,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===Ya)r[5].setComponents(c+l,u+d,g+_,E+T).normalize();else if(t===hu)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(),lh.copy(e.boundingSphere).applyMatrix4(e.matrixWorld);else{let t=e.geometry;t.boundingSphere===null&&t.computeBoundingSphere(),lh.copy(t.boundingSphere).applyMatrix4(e.matrixWorld)}return this.intersectsSphere(lh)}intersectsSprite(e){lh.center.set(0,0,0);let t=p$.distanceTo(e.center);return lh.radius=.7071067811865476+t,lh.applyMatrix4(e.matrixWorld),this.intersectsSphere(lh)}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,sE.y=r.normal.y>0?e.max.y:e.min.y,sE.z=r.normal.z>0?e.max.z:e.min.z,r.distanceToPoint(sE)<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)}},Pn=class extends Br{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}},yE=new se,PE=new se,CF=new li,Kp=new Fo,aE=new ps,k0=new se,yF=new se,Bo=class extends nr{constructor(e=new Hi,t=new Pn){super(),this.isLine=!0,this.type="Line",this.geometry=e,this.material=t,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),this.material=Array.isArray(e.material)?e.material.slice():e.material,this.geometry=e.geometry,this}computeLineDistances(){let e=this.geometry;if(e.index===null){let t=e.attributes.position,i=[0];for(let r=1,s=t.count;r0){let r=t[i[0]];if(r!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let s=0,a=r.length;s0){let r=t[i[0]];if(r!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let s=0,a=r.length;s0?1:-1,f.push(q.x,q.y,q.z),h.push(Y/R),h.push(1-te/I),H+=1}}for(let te=0;te0)&&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}},CE=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=yu,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 ja,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}},gs=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}},Eh=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=yu,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 ja,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=yu,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 ja,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}},yE=class extends Fr{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=d1,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}},PE=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&&yQ(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()===fE,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}};vs.prototype.ValueTypeName="";vs.prototype.TimeBufferType=Float32Array;vs.prototype.ValueBufferType=Float32Array;vs.prototype.DefaultInterpolation=uh;Pl=class extends vs{constructor(e,t,i){super(e,t,i)}};Pl.prototype.ValueTypeName="bool";Pl.prototype.ValueBufferType=Array;Pl.prototype.DefaultInterpolation=dh;Pl.prototype.InterpolantFactoryMethodLinear=void 0;Pl.prototype.InterpolantFactoryMethodSmooth=void 0;h_=class extends vs{constructor(e,t,i,r){super(e,t,i,r)}};h_.prototype.ValueTypeName="color";Uo=class extends vs{constructor(e,t,i,r){super(e,t,i,r)}};Uo.prototype.ValueTypeName="number";NE=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 vs{constructor(e,t,i,r){super(e,t,i,r)}InterpolantFactoryMethodLinear(e){return new NE(this.times,this.values,this.getValueSize(),e)}};Vo.prototype.ValueTypeName="quaternion";Vo.prototype.InterpolantFactoryMethodSmooth=void 0;Ll=class extends vs{constructor(e,t,i){super(e,t,i)}};Ll.prototype.ValueTypeName="string";Ll.prototype.ValueBufferType=Array;Ll.prototype.DefaultInterpolation=dh;Ll.prototype.InterpolantFactoryMethodLinear=void 0;Ll.prototype.InterpolantFactoryMethodSmooth=void 0;Go=class extends vs{constructor(e,t,i,r){super(e,t,i,r)}};Go.prototype.ValueTypeName="vector";Sh=class{constructor(e="",t=-1,i=[],r=yS){this.name=e,this.tracks=i,this.duration=t,this.blendMode=r,this.uuid=Ka(),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(v$(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(vs.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=[];M1(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 H0(`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}},nu=new WeakMap,FE=class extends fn{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=nu.get(a);h===void 0&&(h=[],nu.set(a,h)),h.push({onLoad:t,onError:r})}return a}let o=fu("img");function l(){f(),t&&t(this);let h=nu.get(this)||[];for(let d=0;d{U0.has(a)===!0?(r&&r(U0.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),U0.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}},su=-90,au=1,BE=class extends nr{constructor(e,t,i){super(),this.type="CubeCamera",this.renderTarget=i,this.coordinateSystem=null,this.activeMipmapLevel=0;let r=new fr(su,au,e,t);r.layers=this.layers,this.add(r);let s=new fr(su,au,e,t);s.layers=this.layers,this.add(s);let a=new fr(su,au,e,t);a.layers=this.layers,this.add(a);let o=new fr(su,au,e,t);o.layers=this.layers,this.add(o);let l=new fr(su,au,e,t);l.layers=this.layers,this.add(l);let c=new fr(su,au,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===Ya)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===cu)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}},UE=class extends fr{constructor(e=[]){super(),this.isArrayCamera=!0,this.isMultiViewCamera=!1,this.cameras=e}},VE=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}}},vI="\\[\\]\\.:\\/",E$=new RegExp("["+vI+"]","g"),EI="[^"+vI+"]",S$="[^"+vI.replace("\\.","")+"]",T$=/((?:WC+[\/:])*)/.source.replace("WC",EI),A$=/(WCOD+)?/.source.replace("WCOD",S$),x$=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",EI),R$=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",EI),b$=new RegExp("^"+T$+A$+x$+R$+"$"),I$=["material","materials","bones","map"],K0=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(E$,"")}static parseTrackName(e){let t=b$.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);I$.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 h1:for(let f=0,h=l.length;f!==h;++f)l[f].evaluate(a),c[f].accumulateAdditive(o);break;case yS: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===f1;if(e===0)return s===-1?r:a&&(s&1)===1?t-r:r;if(i===l1){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=ch,r.endingEnd=ch):(e?r.endingStart=this.zeroSlopeAtStart?ch:lh:r.endingStart=qp,t?r.endingEnd=this.zeroSlopeAtEnd?ch:lh: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}},M$=new Float32Array(1),p_=class extends pa{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 VE($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 Jt(new Kc(1,1,1),new js({name:"BackgroundCubeMaterial",uniforms:Rh(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(hte.makeRotationFromEuler(x.backgroundRotation)).transpose(),T.isCubeTexture&&T.isRenderTargetTexture===!1&&c.material.uniforms.backgroundRotation.value.premultiply(Q1),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 Jt(new vh(2,2),new js({name:"BackgroundMaterial",uniforms:Rh(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(OS,gI(n)),t.buffers.color.setClear(OS.r,OS.g,OS.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 ute(n,e){let t=n.getParameter(n.MAX_VERTEX_ATTRIBS),i={},r=d(null),s=r,a=!1;function o(L,O,V,w,N){let U=!1,H=h(L,w,V,O);s!==H&&(s=H,c(s.object)),U=u(L,w,V,N),U&&m(L,w,V,N),N!==null&&e.update(N,n.ELEMENT_ARRAY_BUFFER),(U||a)&&(a=!1,T(L,O,V,w),N!==null&&n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,e.get(N).buffer))}function l(){return n.createVertexArray()}function c(L){return n.bindVertexArray(L)}function f(L){return n.deleteVertexArray(L)}function h(L,O,V,w){let N=w.wireframe===!0,U=i[O.id];U===void 0&&(U={},i[O.id]=U);let H=L.isInstancedMesh===!0?L.id:0,ee=U[H];ee===void 0&&(ee={},U[H]=ee);let q=ee[V.id];q===void 0&&(q={},ee[V.id]=q);let te=q[N];return te===void 0&&(te=d(l()),q[N]=te),te}function d(L){let O=[],V=[],w=[];for(let N=0;N=0){let z=N[q],Y=U[q];if(Y===void 0&&(q==="instanceMatrix"&&L.instanceMatrix&&(Y=L.instanceMatrix),q==="instanceColor"&&L.instanceColor&&(Y=L.instanceColor)),z===void 0||z.attribute!==Y||Y&&z.data!==Y.data)return!0;H++}return s.attributesNum!==H||s.index!==w}function m(L,O,V,w){let N={},U=O.attributes,H=0,ee=V.getAttributes();for(let q in ee)if(ee[q].location>=0){let z=U[q];z===void 0&&(q==="instanceMatrix"&&L.instanceMatrix&&(z=L.instanceMatrix),q==="instanceColor"&&L.instanceColor&&(z=L.instanceColor));let Y={};Y.attribute=z,z&&z.data&&(Y.data=z.data),N[q]=Y,H++}s.attributes=N,s.attributesNum=H,s.index=w}function p(){let L=s.newAttributes;for(let O=0,V=L.length;O=0){let te=N[ee];if(te===void 0&&(ee==="instanceMatrix"&&L.instanceMatrix&&(te=L.instanceMatrix),ee==="instanceColor"&&L.instanceColor&&(te=L.instanceColor)),te!==void 0){let z=te.normalized,Y=te.itemSize,me=e.get(te);if(me===void 0)continue;let Re=me.buffer,Be=me.type,ae=me.bytesPerElement,ge=Be===n.INT||Be===n.UNSIGNED_INT||te.gpuType===YE;if(te.isInterleavedBufferAttribute){let ne=te.data,ue=ne.stride,De=te.offset;if(ne.isInstancedInterleavedBuffer){for(let de=0;de0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.HIGH_FLOAT).precision>0)return"highp";R="mediump"}return R==="mediump"&&n.getShaderPrecisionFormat(n.VERTEX_SHADER,n.MEDIUM_FLOAT).precision>0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let c=t.precision!==void 0?t.precision:"highp",f=l(c);f!==c&&(Ct("WebGLRenderer:",c,"not supported, using",f,"instead."),c=f);let h=t.logarithmicDepthBuffer===!0,d=t.reversedDepthBuffer===!0&&e.has("EXT_clip_control");t.reversedDepthBuffer===!0&&d===!1&&Ct("WebGLRenderer: Unable to use reversed depth buffer due to missing EXT_clip_control extension. Fallback to default depth buffer.");let u=n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS),m=n.getParameter(n.MAX_VERTEX_TEXTURE_IMAGE_UNITS),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 _te(n){let e=this,t=null,i=0,r=!1,s=!1,a=new ua,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-tf?l=C1[a-n+tf-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 Jt(E,null)),r>tf&&r--}return{lodMeshes:i,sizeLods:e,sigmas:t}}function P1(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 Pu(n,e,t,i,r){n.viewport.set(e,t,i,r),n.scissor.set(e,t,i,r)}function Ste(n,e,t){return new js({name:"PMREMGGXConvolution",defines:{GGX_SAMPLES:gte,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:BS(),fragmentShader:` +}`,qs=class extends Br{constructor(e){super(),this.isShaderMaterial=!0,this.type="ShaderMaterial",this.defines={},this.uniforms={},this.uniformsGroups=[],this.vertexShader=g$,this.fragmentShader=v$,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=Ih(e.uniforms),this.uniformsGroups=_$(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}},DE=class extends qs{constructor(e){super(e),this.isRawShaderMaterial=!0,this.type="RawShaderMaterial"}},pn=class extends Br{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=Lu,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 ja,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}},gs=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}},Th=class extends Br{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=Lu,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 ja,this.combine=S_,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}},f_=class extends Br{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=Lu,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 ja,this.combine=S_,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}},OE=class extends Br{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=_1,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}},NE=class extends Br{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}};Uo=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&&DQ(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()===mE,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}};vs.prototype.ValueTypeName="";vs.prototype.TimeBufferType=Float32Array;vs.prototype.ValueBufferType=Float32Array;vs.prototype.DefaultInterpolation=ph;Dl=class extends vs{constructor(e,t,i){super(e,t,i)}};Dl.prototype.ValueTypeName="bool";Dl.prototype.ValueBufferType=Array;Dl.prototype.DefaultInterpolation=mh;Dl.prototype.InterpolantFactoryMethodLinear=void 0;Dl.prototype.InterpolantFactoryMethodSmooth=void 0;d_=class extends vs{constructor(e,t,i,r){super(e,t,i,r)}};d_.prototype.ValueTypeName="color";Vo=class extends vs{constructor(e,t,i,r){super(e,t,i,r)}};Vo.prototype.ValueTypeName="number";UE=class extends Uo{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)$r.slerpFlat(s,0,a,c-o,a,c,l);return s}},Go=class extends vs{constructor(e,t,i,r){super(e,t,i,r)}InterpolantFactoryMethodLinear(e){return new UE(this.times,this.values,this.getValueSize(),e)}};Go.prototype.ValueTypeName="quaternion";Go.prototype.InterpolantFactoryMethodSmooth=void 0;Ol=class extends vs{constructor(e,t,i){super(e,t,i)}};Ol.prototype.ValueTypeName="string";Ol.prototype.ValueBufferType=Array;Ol.prototype.DefaultInterpolation=mh;Ol.prototype.InterpolantFactoryMethodLinear=void 0;Ol.prototype.InterpolantFactoryMethodSmooth=void 0;ko=class extends vs{constructor(e,t,i,r){super(e,t,i,r)}};ko.prototype.ValueTypeName="vector";Ah=class{constructor(e="",t=-1,i=[],r=OS){this.name=e,this.tracks=i,this.duration=t,this.blendMode=r,this.uuid=Ka(),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(T$(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(vs.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=[];L1(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(Cl[e]!==void 0){Cl[e].push({onLoad:t,onProgress:i,onError:r});return}Cl[e]=[],Cl[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=Cl[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 j0(`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=>{Oo.add(`file:${e}`,c);let f=Cl[e];delete Cl[e];for(let h=0,d=f.length;h{let f=Cl[e];if(f===void 0)throw this.manager.itemError(e),c;delete Cl[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}},au=new WeakMap,GE=class extends fn{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=Oo.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=au.get(a);h===void 0&&(h=[],au.set(a,h)),h.push({onLoad:t,onError:r})}return a}let o=du("img");function l(){f(),t&&t(this);let h=au.get(this)||[];for(let d=0;d{H0.has(a)===!0?(r&&r(H0.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){Oo.add(`image-bitmap:${e}`,c),t&&t(c),s.manager.itemEnd(e)}).catch(function(c){r&&r(c),H0.set(l,c),Oo.remove(`image-bitmap:${e}`),s.manager.itemError(e),s.manager.itemEnd(e)});Oo.add(`image-bitmap:${e}`,l),s.manager.itemStart(e)}abort(){return this._abortController.abort(),this._abortController=new AbortController,this}},ou=-90,lu=1,kE=class extends nr{constructor(e,t,i){super(),this.type="CubeCamera",this.renderTarget=i,this.coordinateSystem=null,this.activeMipmapLevel=0;let r=new hr(ou,lu,e,t);r.layers=this.layers,this.add(r);let s=new hr(ou,lu,e,t);s.layers=this.layers,this.add(s);let a=new hr(ou,lu,e,t);a.layers=this.layers,this.add(a);let o=new hr(ou,lu,e,t);o.layers=this.layers,this.add(o);let l=new hr(ou,lu,e,t);l.layers=this.layers,this.add(l);let c=new hr(ou,lu,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===Ya)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===hu)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}},WE=class extends hr{constructor(e=[]){super(),this.isArrayCamera=!0,this.isMultiViewCamera=!1,this.cameras=e}},HE=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){$r.slerpFlat(e,t,e,t,e,i,r)}_slerpAdditive(e,t,i,r,s){let a=this._workIndex*s;$r.multiplyQuaternionsFlat(e,a,e,t,e,i),$r.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}}},xI="\\[\\]\\.:\\/",A$=new RegExp("["+xI+"]","g"),RI="[^"+xI+"]",x$="[^"+xI.replace("\\.","")+"]",R$=/((?:WC+[\/:])*)/.source.replace("WC",RI),b$=/(WCOD+)?/.source.replace("WCOD",x$),I$=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",RI),M$=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",RI),C$=new RegExp("^"+R$+b$+I$+M$+"$"),y$=["material","materials","bones","map"],$0=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(A$,"")}static parseTrackName(e){let t=C$.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);y$.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 p1:for(let f=0,h=l.length;f!==h;++f)l[f].evaluate(a),c[f].accumulateAdditive(o);break;case OS: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===m1;if(e===0)return s===-1?r:a&&(s&1)===1?t-r:r;if(i===d1){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=hh,r.endingEnd=hh):(e?r.endingStart=this.zeroSlopeAtStart?hh:fh:r.endingStart=Zp,t?r.endingEnd=this.zeroSlopeAtEnd?hh:fh:r.endingEnd=Zp)}_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}},P$=new Float32Array(1),__=class extends _a{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 HE($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===T_)?(c===void 0&&(c=new ti(new qc(1,1,1),new qs({name:"BackgroundCubeMaterial",uniforms:Ih(Yo.backgroundCube.uniforms),vertexShader:Yo.backgroundCube.vertexShader,fragmentShader:Yo.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(mte.makeRotationFromEuler(x.backgroundRotation)).transpose(),T.isCubeTexture&&T.isRenderTargetTexture===!1&&c.material.uniforms.backgroundRotation.value.premultiply(t3),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 Sh(2,2),new qs({name:"BackgroundMaterial",uniforms:Ih(Yo.background.uniforms),vertexShader:Yo.background.vertexShader,fragmentShader:Yo.background.fragmentShader,side:Ks,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(BS,AI(n)),t.buffers.color.setClear(BS.r,BS.g,BS.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 _te(n,e){let t=n.getParameter(n.MAX_VERTEX_ATTRIBS),i={},r=d(null),s=r,a=!1;function o(L,O,V,w,N){let U=!1,H=h(L,w,V,O);s!==H&&(s=H,c(s.object)),U=u(L,w,V,N),U&&m(L,w,V,N),N!==null&&e.update(N,n.ELEMENT_ARRAY_BUFFER),(U||a)&&(a=!1,T(L,O,V,w),N!==null&&n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,e.get(N).buffer))}function l(){return n.createVertexArray()}function c(L){return n.bindVertexArray(L)}function f(L){return n.deleteVertexArray(L)}function h(L,O,V,w){let N=w.wireframe===!0,U=i[O.id];U===void 0&&(U={},i[O.id]=U);let H=L.isInstancedMesh===!0?L.id:0,ee=U[H];ee===void 0&&(ee={},U[H]=ee);let q=ee[V.id];q===void 0&&(q={},ee[V.id]=q);let te=q[N];return te===void 0&&(te=d(l()),q[N]=te),te}function d(L){let O=[],V=[],w=[];for(let N=0;N=0){let z=N[q],Y=U[q];if(Y===void 0&&(q==="instanceMatrix"&&L.instanceMatrix&&(Y=L.instanceMatrix),q==="instanceColor"&&L.instanceColor&&(Y=L.instanceColor)),z===void 0||z.attribute!==Y||Y&&z.data!==Y.data)return!0;H++}return s.attributesNum!==H||s.index!==w}function m(L,O,V,w){let N={},U=O.attributes,H=0,ee=V.getAttributes();for(let q in ee)if(ee[q].location>=0){let z=U[q];z===void 0&&(q==="instanceMatrix"&&L.instanceMatrix&&(z=L.instanceMatrix),q==="instanceColor"&&L.instanceColor&&(z=L.instanceColor));let Y={};Y.attribute=z,z&&z.data&&(Y.data=z.data),N[q]=Y,H++}s.attributes=N,s.attributesNum=H,s.index=w}function p(){let L=s.newAttributes;for(let O=0,V=L.length;O=0){let te=N[ee];if(te===void 0&&(ee==="instanceMatrix"&&L.instanceMatrix&&(te=L.instanceMatrix),ee==="instanceColor"&&L.instanceColor&&(te=L.instanceColor)),te!==void 0){let z=te.normalized,Y=te.itemSize,me=e.get(te);if(me===void 0)continue;let Re=me.buffer,Be=me.type,ae=me.bytesPerElement,ge=Be===n.INT||Be===n.UNSIGNED_INT||te.gpuType===ZE;if(te.isInterleavedBufferAttribute){let ne=te.data,ue=ne.stride,De=te.offset;if(ne.isInstancedInterleavedBuffer){for(let de=0;de0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.HIGH_FLOAT).precision>0)return"highp";R="mediump"}return R==="mediump"&&n.getShaderPrecisionFormat(n.VERTEX_SHADER,n.MEDIUM_FLOAT).precision>0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let c=t.precision!==void 0?t.precision:"highp",f=l(c);f!==c&&(Ct("WebGLRenderer:",c,"not supported, using",f,"instead."),c=f);let h=t.logarithmicDepthBuffer===!0,d=t.reversedDepthBuffer===!0&&e.has("EXT_clip_control");t.reversedDepthBuffer===!0&&d===!1&&Ct("WebGLRenderer: Unable to use reversed depth buffer due to missing EXT_clip_control extension. Fallback to default depth buffer.");let u=n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS),m=n.getParameter(n.MAX_VERTEX_TEXTURE_IMAGE_UNITS),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 Ete(n){let e=this,t=null,i=0,r=!1,s=!1,a=new ma,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-nf?l=D1[a-n+nf-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 dr(v,p)),E.setAttribute("uv",new dr(x,_)),E.setAttribute("faceIndex",new dr(T,g)),i.push(new ti(E,null)),r>nf&&r--}return{lodMeshes:i,sizeLods:e,sigmas:t}}function N1(n,e,t){let i=new js(n,e,t);return i.texture.mapping=T_,i.texture.name="PMREM.cubeUv",i.scissorTest=!0,i}function Du(n,e,t,i,r){n.viewport.set(e,t,i,r),n.scissor.set(e,t,i,r)}function xte(n,e,t){return new qs({name:"PMREMGGXConvolution",defines:{GGX_SAMPLES:Ste,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:kS(),fragmentShader:` precision highp float; precision highp int; @@ -108,7 +108,7 @@ gl_FragColor = vec4(prefilteredColor, 1.0); } - `,blending:Wo,depthTest:!1,depthWrite:!1})}function Tte(n,e,t){let i=new Float32Array(bh),r=new se(0,1,0);return new js({name:"SphericalGaussianBlur",defines:{n:bh,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:BS(),fragmentShader:` + `,blending:Ho,depthTest:!1,depthWrite:!1})}function Rte(n,e,t){let i=new Float32Array(Mh),r=new se(0,1,0);return new qs({name:"SphericalGaussianBlur",defines:{n:Mh,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:kS(),fragmentShader:` precision mediump float; precision mediump int; @@ -168,7 +168,7 @@ } } - `,blending:Wo,depthTest:!1,depthWrite:!1})}function L1(){return new js({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:BS(),fragmentShader:` + `,blending:Ho,depthTest:!1,depthWrite:!1})}function w1(){return new qs({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:kS(),fragmentShader:` precision mediump float; precision mediump int; @@ -187,7 +187,7 @@ gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 ); } - `,blending:Wo,depthTest:!1,depthWrite:!1})}function D1(){return new js({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:BS(),fragmentShader:` + `,blending:Ho,depthTest:!1,depthWrite:!1})}function F1(){return new qs({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:kS(),fragmentShader:` precision mediump float; precision mediump int; @@ -203,7 +203,7 @@ gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) ); } - `,blending:Wo,depthTest:!1,depthWrite:!1})}function BS(){return` + `,blending:Ho,depthTest:!1,depthWrite:!1})}function kS(){return` precision mediump float; precision mediump int; @@ -258,7 +258,7 @@ gl_Position = vec4( position, 1.0 ); } - `}function Ate(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===HE||u===zE)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 wS(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===HE||u===zE,p=u===$c||u===Ah;if(m||p){let _=t.get(d),g=_!==void 0?_.texture.pmremVersion:0;if(d.isRenderTargetTexture&&d.pmremVersion!==g)return i===null&&(i=new Du(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 Du(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===HE?d.mapping=$c:u===zE&&(d.mapping=Ah),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){let p=new VS(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===jE,p=u===ef||u===Rh;if(m||p){let _=t.get(d),g=_!==void 0?_.texture.pmremVersion:0;if(d.isRenderTargetTexture&&d.pmremVersion!==g)return i===null&&(i=new Nu(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 Nu(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=ef:u===jE&&(d.mapping=Rh),d}function l(d){let u=0,m=6;for(let p=0;p=65535?t_:e_)(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 Jp(S,T,E,h);R.type=Zs,R.needsUpdate=!0;let I=x*4;for(let y=0;y0&&_[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===Ts&&_.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=Ts,!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=yte[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 Ou(n,e,t){let i=n[0];if(i<=0||i>0)return n;let r=e*t,s=O1[r];if(s===void 0&&(s=new Float32Array(r),O1[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===Ts&&_.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=Ts,!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=Dte[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 wu(n,e,t){let i=n[0];if(i<=0||i>0)return n;let r=e*t,s=B1[r];if(s===void 0&&(s=new Float32Array(r),B1[r]=s),e!==0){i.toArray(s,0);for(let a=1,o=0;a!==e;++a)o+=t,n[a].toArray(s,o)}return s}function Jr(n,e){if(n.length!==e.length)return!1;for(let t=0,i=n.length;t":" "} ${o}: ${t[a]}`)}return i.join(` -`)}function Tie(n){oi._getMatrix(G1,oi.workingColorSpace,n);let e=`mat3( ${G1.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 k1(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 Rie(n){oi._getMatrix(z1,oi.workingColorSpace,n);let e=`mat3( ${z1.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 X1(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+` -`+Sie(n.getShaderSource(e),o)}else return s}function Aie(n,e){let t=Tie(e);return[`vec4 ${n}( vec4 value ) {`,` return ${t[1]}( vec4( value.rgb * ${t[0]}, value.a ) );`,"}"].join(` -`)}function Rie(n,e){let t=xie[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 bie(){oi.getLuminanceCoefficients(NS);let n=NS.x.toFixed(4),e=NS.y.toFixed(4),t=NS.z.toFixed(4);return["float luminance( const in vec3 rgb ) {",` const vec3 weights = vec3( ${n}, ${e}, ${t} );`," return dot( weights, rgb );","}"].join(` -`)}function Iie(n){return[n.extensionClipCullDistance?"#extension GL_ANGLE_clip_cull_distance : require":"",n.extensionMultiDraw?"#extension GL_ANGLE_multi_draw : require":""].filter(L_).join(` -`)}function Mie(n){let e=[];for(let t in n){let i=n[t];i!==!1&&e.push("#define "+t+" "+i)}return e.join(` -`)}function Cie(n,e){let t={},i=n.getProgramParameter(e,n.ACTIVE_ATTRIBUTES);for(let r=0;r")}return BI(t)}function z1(n){return n.replace(Die,Oie)}function Oie(n,e,t,i){let r="";for(let s=parseInt(e);s")}return WI(t)}function j1(n){return n.replace(wie,Fie)}function Fie(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(L_).join(` +`),g=["#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,m].filter(D_).join(` `),g.length>0&&(g+=` -`)):(_=[X1(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=[X1(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!==Ts?"#define TONE_MAPPING":"",t.toneMapping!==Ts?hi.tonemapping_pars_fragment:"",t.toneMapping!==Ts?Rie("toneMapping",t.toneMapping):"",t.dithering?"#define DITHERING":"",t.opaque?"#define OPAQUE":"",hi.colorspace_pars_fragment,Aie("linearToOutputTexel",t.outputColorSpace),bie(),t.useDepthPacking?"#define DEPTH_PACKING "+t.depthPacking:"",` -`].filter(L_).join(` -`)),a=BI(a),a=W1(a,t),a=H1(a,t),o=BI(o),o=W1(o,t),o=H1(o,t),a=z1(a),o=z1(o),t.isRawShaderMaterial!==!0&&(v=`#version 300 es +`)):(_=[q1(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(D_).join(` +`),g=[q1(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!==Ts?"#define TONE_MAPPING":"",t.toneMapping!==Ts?hi.tonemapping_pars_fragment:"",t.toneMapping!==Ts?Mie("toneMapping",t.toneMapping):"",t.dithering?"#define DITHERING":"",t.opaque?"#define OPAQUE":"",hi.colorspace_pars_fragment,bie("linearToOutputTexel",t.outputColorSpace),Cie(),t.useDepthPacking?"#define DEPTH_PACKING "+t.depthPacking:"",` +`].filter(D_).join(` +`)),a=WI(a),a=Y1(a,t),a=K1(a,t),o=WI(o),o=Y1(o,t),o=K1(o,t),a=j1(a),o=j1(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===pI?"":"layout(location = 0) out highp vec4 pc_fragColor;",t.glslVersion===pI?"":"#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===SI?"":"layout(location = 0) out highp vec4 pc_fragColor;",t.glslVersion===SI?"":"#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,T=v+g+o,E=V1(r,r.VERTEX_SHADER,x),S=V1(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(L){if(n.debug.checkShaderErrors){let O=r.getProgramInfoLog(p)||"",V=r.getShaderInfoLog(E)||"",w=r.getShaderInfoLog(S)||"",N=O.trim(),U=V.trim(),H=w.trim(),ee=!0,q=!0;if(r.getProgramParameter(p,r.LINK_STATUS)===!1)if(ee=!1,typeof n.debug.onShaderError=="function")n.debug.onShaderError(r,p,E,S);else{let te=k1(r,E,"vertex"),z=k1(r,S,"fragment");Bt("THREE.WebGLProgram: Shader Error "+r.getError()+" - VALIDATE_STATUS "+r.getProgramParameter(p,r.VALIDATE_STATUS)+` +`+g);let x=v+_+a,T=v+g+o,E=H1(r,r.VERTEX_SHADER,x),S=H1(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(L){if(n.debug.checkShaderErrors){let O=r.getProgramInfoLog(p)||"",V=r.getShaderInfoLog(E)||"",w=r.getShaderInfoLog(S)||"",N=O.trim(),U=V.trim(),H=w.trim(),ee=!0,q=!0;if(r.getProgramParameter(p,r.LINK_STATUS)===!1)if(ee=!1,typeof n.debug.onShaderError=="function")n.debug.onShaderError(r,p,E,S);else{let te=X1(r,E,"vertex"),z=X1(r,S,"fragment");Bt("THREE.WebGLProgram: Shader Error "+r.getError()+" - VALIDATE_STATUS "+r.getProgramParameter(p,r.VALIDATE_STATUS)+` Material Name: `+L.name+` Material Type: `+L.type+` Program Info Log: `+N+` `+te+` -`+z)}else N!==""?Ct("WebGLProgram: Program Info Log:",N):(U===""||H==="")&&(q=!1);q&&(L.diagnostics={runnable:ee,programLog:N,vertexShader:{log:U,prefix:_},fragmentShader:{log:H,prefix:g}})}r.deleteShader(E),r.deleteShader(S),I=new Lu(r,p),C=Cie(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,vie)),y},this.destroy=function(){i.releaseStatesOfProgram(this),r.deleteProgram(p),this.program=void 0},this.type=t.shaderType,this.name=t.shaderName,this.id=Eie++,this.cacheKey=e,this.usedTimes=1,this.program=p,this.vertexShader=E,this.fragmentShader=S,this}function Xie(n){return n===ef||n===b_||n===I_}function Yie(n,e,t,i,r,s){let a=new uu,o=new UI,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,L,O,V){let w=L.fog,N=O.geometry,U=I.isMeshStandardMaterial||I.isMeshLambertMaterial||I.isMeshPhongMaterial?L.environment:null,H=I.isMeshStandardMaterial||I.isMeshLambertMaterial&&!I.envMap||I.isMeshPhongMaterial&&!I.envMap,ee=e.get(I.envMap||U,H),q=ee&&ee.mapping===S_?ee.image.height:null,te=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=N.morphAttributes.position||N.morphAttributes.normal||N.morphAttributes.color,Y=z!==void 0?z.length:0,me=0;N.morphAttributes.position!==void 0&&(me=1),N.morphAttributes.normal!==void 0&&(me=2),N.morphAttributes.color!==void 0&&(me=3);let Re,Be,ae,ge;if(te){let Zt=Xo[te];Re=Zt.vertexShader,Be=Zt.fragmentShader}else Re=I.vertexShader,Be=I.fragmentShader,o.update(I),ae=o.getVertexShaderID(I),ge=o.getFragmentShaderID(I);let ne=n.getRenderTarget(),ue=n.state.buffers.depth.getReversed(),De=O.isInstancedMesh===!0,de=O.isBatchedMesh===!0,Ie=!!I.map,Ze=!!I.matcap,Tt=!!ee,Xe=!!I.aoMap,je=!!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,be=X&&!!I.iridescenceThicknessMap,ct=B&&!!I.sheenColorMap,St=B&&!!I.sheenRoughnessMap,nt=!!I.specularMap,Qe=!!I.specularColorMap,Ht=!!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=Ts;I.toneMapped&&(ne===null||ne.isXRRenderTarget===!0)&&(we=n.toneMapping);let At={shaderID:te,shaderType:I.type,shaderName:I.name,vertexShader:Re,fragmentShader:Be,defines:I.defines,customVertexShaderID:ae,customFragmentShaderID:ge,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:Ie,matcap:Ze,envMap:Tt,envMapMode:Tt&&ee.mapping,envMapCubeUVHeight:q,aoMap:Xe,lightMap:je,bumpMap:$t,normalMap:Dt,displacementMap:xi,emissiveMap:oe,normalMapObjectSpace:Dt&&I.normalMapType===u1,normalMapTangentSpace:Dt&&I.normalMapType===yu,packedNormalMap:Dt&&I.normalMapType===yu&&Xie(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:be,sheen:B,sheenColorMap:ct,sheenRoughnessMap:St,specularMap:nt,specularColorMap:Qe,specularIntensityMap:Ht,transmission:he,transmissionMap:qt,thicknessMap:re,gradientMap:K,opaque:I.transparent===!1&&I.blending===fh&&I.alphaToCoverage===!1,alphaMap:Pe,alphaTest:Ae,alphaHash:Ye,combine:I.combine,mapUv:Ie&&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: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:be&&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:Ht&&m(I.specularIntensityMap.channel),transmissionMapUv:qt&&m(I.transmissionMap.channel),thicknessMapUv:re&&m(I.thicknessMap.channel),alphaMapUv:Pe&&m(I.alphaMap.channel),vertexTangents:!!N.attributes.tangent&&(Dt||Fi),vertexNormals:!!N.attributes.normal,vertexColors:I.vertexColors,vertexAlphas:I.vertexColors===!0&&!!N.attributes.color&&N.attributes.color.itemSize===4,pointsUvs:O.isPoints===!0&&!!N.attributes.uv&&(Ie||Pe),fog:!!w,useFog:I.fog===!0,fogExp2:!!w&&w.isFogExp2,flatShading:I.wireframe===!1&&(I.flatShading===!0||N.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:N.morphAttributes.position!==void 0,morphNormals:N.morphAttributes.normal!==void 0,morphColors:N.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:Ie&&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===_a,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 L=Xo[C];y=I1.clone(L.uniforms)}else y=I.uniforms;return y}function T(I,C){let y=f.get(C);return y!==void 0?++y.usedTimes:(y=new Hie(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 Kie(){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 jie(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 Y1(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 K1(){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||jie),i.length>1&&i.sort(u||Y1),r.length>1&&r.sort(u||Y1)}function h(){for(let d=e,u=n.length;d=s.length?(a=new K1,s.push(a)):a=s[r],a}function t(){n=new WeakMap}return{get:e,dispose:t}}function Zie(){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 Qie(){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 Jie(n,e){return(e.castShadow?2:0)-(n.castShadow?2:0)+(e.map?1:0)-(n.map?1:0)}function ere(n){let e=new Zie,t=Qie(),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(Jie);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=$ie++)}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 j1(n),a.push(o)):o=a[s],o}function i(){e=new WeakMap}return{get:t,dispose:i}}function are(n,e,t){let i=new vu,r=new It,s=new It,a=new Ji,o=new yE,l=new PE,c={},f=t.maxTextureSize,h={[Ys]:_n,[_n]:Ys,[_a]:_a},d=new js({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new It},radius:{value:4}},vertexShader:ire,fragmentShader:rre}),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 Jt(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===WE&&(Ct("WebGLShadowMap: PCFSoftShadowMap has been deprecated. Using PCFShadowMap instead."),this.type=v_);let C=n.getRenderTarget(),y=n.getActiveCubeFace(),L=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(w){w.material&&(Array.isArray(w.material)?w.material.forEach(N=>N.needsUpdate=!0):w.material.needsUpdate=!0)});for(let w=0,N=S.length;wf||r.y>f)&&(r.x>f&&(s.x=Math.floor(f/ee.x),r.x=s.x*ee.x,H.mapSize.x=s.x),r.y>f&&(s.y=Math.floor(f/ee.y),r.y=s.y*ee.y,H.mapSize.y=s.y));let q=n.state.buffers.depth.getReversed();if(H.camera._reversedDepth=q,H.map===null||V===!0){if(H.map!==null&&(H.map.depthTexture!==null&&(H.map.depthTexture.dispose(),H.map.depthTexture=null),H.map.dispose()),this.type===Ru){if(U.isPointLight){Ct("WebGLShadowMap: VSM shadow maps are not supported for PointLights. Use PCF or BasicShadowMap instead.");continue}H.map=new Ks(r.x,r.y,{format:ef,type:Ho,minFilter:wr,magFilter:wr,generateMipmaps:!1}),H.map.texture.name=U.name+".shadowMap",H.map.depthTexture=new yl(r.x,r.y,qs),H.map.depthTexture.name=U.name+".shadowMapDepth",H.map.depthTexture.format=No,H.map.depthTexture.compareFunction=null,H.map.depthTexture.minFilter=Nr,H.map.depthTexture.magFilter=Nr}else U.isPointLight?(H.map=new wS(r.x),H.map.depthTexture=new ME(r.x,Ja)):(H.map=new Ks(r.x,r.y),H.map.depthTexture=new yl(r.x,r.y,Ja)),H.map.depthTexture.name=U.name+".shadowMap",H.map.depthTexture.format=No,this.type===v_?(H.map.depthTexture.compareFunction=q?LS:PS,H.map.depthTexture.minFilter=wr,H.map.depthTexture.magFilter=wr):(H.map.depthTexture.compareFunction=null,H.map.depthTexture.minFilter=Nr,H.map.depthTexture.magFilter=Nr);H.camera.updateProjectionMatrix()}let te=H.map.isWebGLCubeRenderTarget?6:1;for(let z=0;z0||R.map&&R.alphaTest>0||R.alphaToCoverage===!0){let O=y.uuid,V=R.uuid,w=c[O];w===void 0&&(w={},c[O]=w);let N=w[V];N===void 0&&(N=y.clone(),w[V]=N,R.addEventListener("dispose",E)),y=N}if(y.visible=R.visible,y.wireframe=R.wireframe,C===Ru?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===Ru)&&(!S.frustumCulled||i.intersectsObject(S))){S.modelViewMatrix.multiplyMatrices(I.matrixWorldInverse,S.matrixWorld);let V=e.update(S),w=S.material;if(Array.isArray(w)){let N=V.groups;for(let U=0,H=N.length;U=1):q.indexOf("OpenGL ES")!==-1&&(ee=parseFloat(/^OpenGL ES (\d)/.exec(q)[1]),H=ee>=2);let te=null,z={},Y=n.getParameter(n.SCISSOR_BOX),me=n.getParameter(n.VIEWPORT),Re=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 be=Je?Zp:oi.getTransfer(Ve);he===n.FLOAT&&(ye=n.RGBA32F),he===n.HALF_FLOAT&&(ye=n.RGBA16F),he===n.UNSIGNED_BYTE&&(ye=be===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===Ja||B===Mu?he=n.DEPTH24_STENCIL8:B===qs?he=n.DEPTH32F_STENCIL8:B===Iu&&(he=n.DEPTH24_STENCIL8,Ct("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):B===null||B===Ja||B===Mu?he=n.DEPTH_COMPONENT24:B===qs?he=n.DEPTH_COMPONENT32F:B===Iu&&(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),L(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 L(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 H(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 ee(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 q(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 te(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,[ma]:n.CLAMP_TO_EDGE,[lu]:n.MIRRORED_REPEAT},me={[Nr]:n.NEAREST,[XE]:n.NEAREST_MIPMAP_NEAREST,[xh]:n.NEAREST_MIPMAP_LINEAR,[wr]:n.LINEAR,[bu]:n.LINEAR_MIPMAP_NEAREST,[$a]:n.LINEAR_MIPMAP_LINEAR},Re={[m1]:n.NEVER,[E1]:n.ALWAYS,[p1]:n.LESS,[PS]:n.LEQUAL,[_1]:n.EQUAL,[LS]:n.GEQUAL,[g1]:n.GREATER,[v1]:n.NOTEQUAL};function Be(X,B){if(B.type===qs&&e.has("OES_texture_float_linear")===!1&&(B.magFilter===wr||B.magFilter===bu||B.magFilter===xh||B.magFilter===$a||B.minFilter===wr||B.minFilter===bu||B.minFilter===xh||B.minFilter===$a)&&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,Re[B.compareFunction])),e.has("EXT_texture_filter_anisotropic")===!0){if(B.magFilter===Nr||B.minFilter!==xh&&B.minFilter!==$a||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=H(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 ge(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,Ht[0].width,Ht[0].height);for(let Ae=0,Ye=Ht.length;Ae0){let Ke=SI(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,be.depth,ct,Qe.data)}else t.compressedTexImage3D(n.TEXTURE_2D_ARRAY,Ae,nt,Qe.width,Qe.height,be.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,be.depth,ct,St,Qe.data):t.texImage3D(n.TEXTURE_2D_ARRAY,Ae,nt,Qe.width,Qe.height,be.depth,0,ct,St,Qe.data)}else{qt&&re&&t.texStorage2D(n.TEXTURE_2D,Pe,nt,Ht[0].width,Ht[0].height);for(let Ae=0,Ye=Ht.length;Ae0){let Ae=SI(be.width,be.height,B.format,B.type);for(let Ye of B.layerUpdates){let Ke=be.data.subarray(Ye*Ae/be.data.BYTES_PER_ELEMENT,(Ye+1)*Ae/be.data.BYTES_PER_ELEMENT);t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,Ye,be.width,be.height,1,ct,St,Ke)}B.clearLayerUpdates()}else t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,0,be.width,be.height,be.depth,ct,St,be.data)}else t.texImage3D(n.TEXTURE_2D_ARRAY,0,nt,be.width,be.height,be.depth,0,ct,St,be.data);else if(B.isData3DTexture)qt?(re&&t.texStorage3D(n.TEXTURE_3D,Pe,nt,be.width,be.height,be.depth),K&&t.texSubImage3D(n.TEXTURE_3D,0,0,0,0,be.width,be.height,be.depth,ct,St,be.data)):t.texImage3D(n.TEXTURE_3D,0,nt,be.width,be.height,be.depth,0,ct,St,be.data);else if(B.isFramebufferTexture){if(re)if(qt)t.texStorage2D(n.TEXTURE_2D,Pe,nt,be.width,be.height);else{let Ae=be.width,Ye=be.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"),be.parentNode!==Ae){Ae.appendChild(be),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,be),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(Ht.length>0){if(qt&&re){let Ae=Li(Ht[0]);t.texStorage2D(n.TEXTURE_2D,Pe,nt,Ae.width,Ae.height)}for(let Ae=0,Ye=Ht.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,Ht,qt,nt[we].data):t.texImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+we,0,re,nt[we].width,nt[we].height,0,Ht,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,be,nt,Qe,B.depth,0,rt,ye,null):t.texImage2D(Ve,Je,be,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 Ie(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++)Ze(B.__webglFramebuffer[Le],X,Le);else{let Le=X.texture.mipmaps;Le&&Le.length>0?Ze(B.__webglFramebuffer[0],X,0):Ze(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(),Ie(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(),Ie(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 je(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 be=0;be0){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 be=0;be0)for(let be=0;be0){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!==qn&&he!==Nl&&(oi.getTransfer(he)===Yi?(Le!==Zs||Ve!==As)&&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=w,this.setTextureUnits=N,this.setTexture2D=ee,this.setTexture2DArray=q,this.setTexture3D=te,this.setTextureCube=z,this.rebindTextures=Xe,this.setupRenderTarget=je,this.updateRenderTargetMipmap=$t,this.updateMultisampleRenderTarget=oe,this.setupDepthRenderbuffer=Tt,this.setupFrameBufferTexture=de,this.useMultisampledRTT=ii,this.isReversedDepthBuffer=function(){return t.buffers.depth.getReversed()}}function cre(n,e){function t(i,r=Nl){let s,a=oi.getTransfer(r);if(i===As)return n.UNSIGNED_BYTE;if(i===KE)return n.UNSIGNED_SHORT_4_4_4_4;if(i===jE)return n.UNSIGNED_SHORT_5_5_5_1;if(i===fI)return n.UNSIGNED_INT_5_9_9_9_REV;if(i===hI)return n.UNSIGNED_INT_10F_11F_11F_REV;if(i===lI)return n.BYTE;if(i===cI)return n.SHORT;if(i===Iu)return n.UNSIGNED_SHORT;if(i===YE)return n.INT;if(i===Ja)return n.UNSIGNED_INT;if(i===qs)return n.FLOAT;if(i===Ho)return n.HALF_FLOAT;if(i===dI)return n.ALPHA;if(i===uI)return n.RGB;if(i===Zs)return n.RGBA;if(i===No)return n.DEPTH_COMPONENT;if(i===Jc)return n.DEPTH_STENCIL;if(i===qE)return n.RED;if(i===ZE)return n.RED_INTEGER;if(i===ef)return n.RG;if(i===QE)return n.RG_INTEGER;if(i===$E)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===JE||i===eS||i===tS||i===iS)if(s=e.get("WEBGL_compressed_texture_pvrtc"),s!==null){if(i===JE)return s.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(i===eS)return s.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(i===tS)return s.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(i===iS)return s.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(i===rS||i===nS||i===sS||i===aS||i===oS||i===b_||i===lS)if(s=e.get("WEBGL_compressed_texture_etc"),s!==null){if(i===rS||i===nS)return a===Yi?s.COMPRESSED_SRGB8_ETC2:s.COMPRESSED_RGB8_ETC2;if(i===sS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:s.COMPRESSED_RGBA8_ETC2_EAC;if(i===aS)return s.COMPRESSED_R11_EAC;if(i===oS)return s.COMPRESSED_SIGNED_R11_EAC;if(i===b_)return s.COMPRESSED_RG11_EAC;if(i===lS)return s.COMPRESSED_SIGNED_RG11_EAC}else return null;if(i===cS||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)if(s=e.get("WEBGL_compressed_texture_astc"),s!==null){if(i===cS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:s.COMPRESSED_RGBA_ASTC_4x4_KHR;if(i===fS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:s.COMPRESSED_RGBA_ASTC_5x4_KHR;if(i===hS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:s.COMPRESSED_RGBA_ASTC_5x5_KHR;if(i===dS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:s.COMPRESSED_RGBA_ASTC_6x5_KHR;if(i===uS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:s.COMPRESSED_RGBA_ASTC_6x6_KHR;if(i===mS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:s.COMPRESSED_RGBA_ASTC_8x5_KHR;if(i===pS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:s.COMPRESSED_RGBA_ASTC_8x6_KHR;if(i===_S)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:s.COMPRESSED_RGBA_ASTC_8x8_KHR;if(i===gS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:s.COMPRESSED_RGBA_ASTC_10x5_KHR;if(i===vS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:s.COMPRESSED_RGBA_ASTC_10x6_KHR;if(i===ES)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:s.COMPRESSED_RGBA_ASTC_10x8_KHR;if(i===SS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:s.COMPRESSED_RGBA_ASTC_10x10_KHR;if(i===TS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:s.COMPRESSED_RGBA_ASTC_12x10_KHR;if(i===AS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:s.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(i===xS||i===RS||i===bS)if(s=e.get("EXT_texture_compression_bptc"),s!==null){if(i===xS)return a===Yi?s.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:s.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(i===RS)return s.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(i===bS)return s.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(i===IS||i===MS||i===I_||i===CS)if(s=e.get("EXT_texture_compression_rgtc"),s!==null){if(i===IS)return s.COMPRESSED_RED_RGTC1_EXT;if(i===MS)return s.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(i===I_)return s.COMPRESSED_RED_GREEN_RGTC2_EXT;if(i===CS)return s.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return i===Mu?n.UNSIGNED_INT_24_8:n[i]!==void 0?n[i]:null}return{convert:t}}function ure(n,e){function t(_,g){_.matrixAutoUpdate===!0&&_.updateMatrix(),g.value.copy(_.matrix)}function i(_,g){g.color.getRGB(_.fogColor.value,gI(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(dre.makeRotationFromEuler(T)).transpose(),x.isCubeTexture&&x.isRenderTargetTexture===!1&&_.envMapRotation.value.premultiply(i3),_.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 mre(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 _re(){return zo===null&&(zo=new gu(pre,16,16,ef,Ho),zo.name="DFG_LUT",zo.minFilter=wr,zo.magFilter=wr,zo.wrapS=ma,zo.wrapT=ma,zo.generateMipmaps=!1,zo.needsUpdate=!0),zo}var 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,Qee,$ee,Jee,ete,tte,ite,rte,nte,ste,ate,ote,lte,cte,fte,hi,pt,Xo,OS,hte,Q1,tf,C1,bh,gte,y_,y1,MI,CI,yI,PI,vte,Du,wS,yte,$1,OI,J1,e3,t3,O1,N1,w1,F1,B1,NI,wI,FI,LI,Lu,vie,Eie,G1,xie,NS,yie,Pie,Die,Nie,Fie,Uie,Gie,zie,UI,VI,$ie,ire,rre,nre,sre,q1,P_,DI,fre,hre,GI,kI,dre,i3,pre,zo,FS,Qn=M(()=>{II();II();L$=`#ifdef USE_ALPHAHASH +`+z)}else N!==""?Ct("WebGLProgram: Program Info Log:",N):(U===""||H==="")&&(q=!1);q&&(L.diagnostics={runnable:ee,programLog:N,vertexShader:{log:U,prefix:_},fragmentShader:{log:H,prefix:g}})}r.deleteShader(E),r.deleteShader(S),I=new Ou(r,p),C=Lie(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,Tie)),y},this.destroy=function(){i.releaseStatesOfProgram(this),r.deleteProgram(p),this.program=void 0},this.type=t.shaderType,this.name=t.shaderName,this.id=Aie++,this.cacheKey=e,this.usedTimes=1,this.program=p,this.vertexShader=E,this.fragmentShader=S,this}function jie(n){return n===rf||n===I_||n===M_}function qie(n,e,t,i,r,s){let a=new pu,o=new HI,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,L,O,V){let w=L.fog,N=O.geometry,U=I.isMeshStandardMaterial||I.isMeshLambertMaterial||I.isMeshPhongMaterial?L.environment:null,H=I.isMeshStandardMaterial||I.isMeshLambertMaterial&&!I.envMap||I.isMeshPhongMaterial&&!I.envMap,ee=e.get(I.envMap||U,H),q=ee&&ee.mapping===T_?ee.image.height:null,te=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=N.morphAttributes.position||N.morphAttributes.normal||N.morphAttributes.color,Y=z!==void 0?z.length:0,me=0;N.morphAttributes.position!==void 0&&(me=1),N.morphAttributes.normal!==void 0&&(me=2),N.morphAttributes.color!==void 0&&(me=3);let Re,Be,ae,ge;if(te){let Zt=Yo[te];Re=Zt.vertexShader,Be=Zt.fragmentShader}else Re=I.vertexShader,Be=I.fragmentShader,o.update(I),ae=o.getVertexShaderID(I),ge=o.getFragmentShaderID(I);let ne=n.getRenderTarget(),ue=n.state.buffers.depth.getReversed(),De=O.isInstancedMesh===!0,de=O.isBatchedMesh===!0,Ie=!!I.map,Ze=!!I.matcap,Tt=!!ee,Xe=!!I.aoMap,je=!!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,be=X&&!!I.iridescenceThicknessMap,ct=B&&!!I.sheenColorMap,St=B&&!!I.sheenRoughnessMap,nt=!!I.specularMap,Qe=!!I.specularColorMap,Ht=!!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=Ts;I.toneMapped&&(ne===null||ne.isXRRenderTarget===!0)&&(we=n.toneMapping);let At={shaderID:te,shaderType:I.type,shaderName:I.name,vertexShader:Re,fragmentShader:Be,defines:I.defines,customVertexShaderID:ae,customFragmentShaderID:ge,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:Ie,matcap:Ze,envMap:Tt,envMapMode:Tt&&ee.mapping,envMapCubeUVHeight:q,aoMap:Xe,lightMap:je,bumpMap:$t,normalMap:Dt,displacementMap:xi,emissiveMap:oe,normalMapObjectSpace:Dt&&I.normalMapType===g1,normalMapTangentSpace:Dt&&I.normalMapType===Lu,packedNormalMap:Dt&&I.normalMapType===Lu&&jie(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:be,sheen:B,sheenColorMap:ct,sheenRoughnessMap:St,specularMap:nt,specularColorMap:Qe,specularIntensityMap:Ht,transmission:he,transmissionMap:qt,thicknessMap:re,gradientMap:K,opaque:I.transparent===!1&&I.blending===dh&&I.alphaToCoverage===!1,alphaMap:Pe,alphaTest:Ae,alphaHash:Ye,combine:I.combine,mapUv:Ie&&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: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:be&&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:Ht&&m(I.specularIntensityMap.channel),transmissionMapUv:qt&&m(I.transmissionMap.channel),thicknessMapUv:re&&m(I.thicknessMap.channel),alphaMapUv:Pe&&m(I.alphaMap.channel),vertexTangents:!!N.attributes.tangent&&(Dt||Fi),vertexNormals:!!N.attributes.normal,vertexColors:I.vertexColors,vertexAlphas:I.vertexColors===!0&&!!N.attributes.color&&N.attributes.color.itemSize===4,pointsUvs:O.isPoints===!0&&!!N.attributes.uv&&(Ie||Pe),fog:!!w,useFog:I.fog===!0,fogExp2:!!w&&w.isFogExp2,flatShading:I.wireframe===!1&&(I.flatShading===!0||N.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:N.morphAttributes.position!==void 0,morphNormals:N.morphAttributes.normal!==void 0,morphColors:N.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:Ie&&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===ga,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 L=Yo[C];y=P1.clone(L.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 Zie(){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 Qie(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 Z1(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 Q1(){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||Qie),i.length>1&&i.sort(u||Z1),r.length>1&&r.sort(u||Z1)}function h(){for(let d=e,u=n.length;d=s.length?(a=new Q1,s.push(a)):a=s[r],a}function t(){n=new WeakMap}return{get:e,dispose:t}}function Jie(){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 ere(){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 ire(n,e){return(e.castShadow?2:0)-(n.castShadow?2:0)+(e.map?1:0)-(n.map?1:0)}function rre(n){let e=new Jie,t=ere(),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(ire);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=tre++)}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 $1(n),a.push(o)):o=a[s],o}function i(){e=new WeakMap}return{get:t,dispose:i}}function cre(n,e,t){let i=new Su,r=new It,s=new It,a=new Ji,o=new OE,l=new NE,c={},f=t.maxTextureSize,h={[Ks]:_n,[_n]:Ks,[ga]:ga},d=new qs({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new It},radius:{value:4}},vertexShader:sre,fragmentShader:are}),u=d.clone();u.defines.HORIZONTAL_PASS=1;let m=new Hi;m.setAttribute("position",new dr(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=E_;let g=this.type;this.render=function(S,R,I){if(_.enabled===!1||_.autoUpdate===!1&&_.needsUpdate===!1||S.length===0)return;this.type===YE&&(Ct("WebGLShadowMap: PCFSoftShadowMap has been deprecated. Using PCFShadowMap instead."),this.type=E_);let C=n.getRenderTarget(),y=n.getActiveCubeFace(),L=n.getActiveMipmapLevel(),O=n.state;O.setBlending(Ho),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(w){w.material&&(Array.isArray(w.material)?w.material.forEach(N=>N.needsUpdate=!0):w.material.needsUpdate=!0)});for(let w=0,N=S.length;wf||r.y>f)&&(r.x>f&&(s.x=Math.floor(f/ee.x),r.x=s.x*ee.x,H.mapSize.x=s.x),r.y>f&&(s.y=Math.floor(f/ee.y),r.y=s.y*ee.y,H.mapSize.y=s.y));let q=n.state.buffers.depth.getReversed();if(H.camera._reversedDepth=q,H.map===null||V===!0){if(H.map!==null&&(H.map.depthTexture!==null&&(H.map.depthTexture.dispose(),H.map.depthTexture=null),H.map.dispose()),this.type===Iu){if(U.isPointLight){Ct("WebGLShadowMap: VSM shadow maps are not supported for PointLights. Use PCF or BasicShadowMap instead.");continue}H.map=new js(r.x,r.y,{format:rf,type:zo,minFilter:Fr,magFilter:Fr,generateMipmaps:!1}),H.map.texture.name=U.name+".shadowMap",H.map.depthTexture=new Ll(r.x,r.y,Zs),H.map.depthTexture.name=U.name+".shadowMapDepth",H.map.depthTexture.format=wo,H.map.depthTexture.compareFunction=null,H.map.depthTexture.minFilter=wr,H.map.depthTexture.magFilter=wr}else U.isPointLight?(H.map=new VS(r.x),H.map.depthTexture=new LE(r.x,Ja)):(H.map=new js(r.x,r.y),H.map.depthTexture=new Ll(r.x,r.y,Ja)),H.map.depthTexture.name=U.name+".shadowMap",H.map.depthTexture.format=wo,this.type===E_?(H.map.depthTexture.compareFunction=q?wS:NS,H.map.depthTexture.minFilter=Fr,H.map.depthTexture.magFilter=Fr):(H.map.depthTexture.compareFunction=null,H.map.depthTexture.minFilter=wr,H.map.depthTexture.magFilter=wr);H.camera.updateProjectionMatrix()}let te=H.map.isWebGLCubeRenderTarget?6:1;for(let z=0;z0||R.map&&R.alphaTest>0||R.alphaToCoverage===!0){let O=y.uuid,V=R.uuid,w=c[O];w===void 0&&(w={},c[O]=w);let N=w[V];N===void 0&&(N=y.clone(),w[V]=N,R.addEventListener("dispose",E)),y=N}if(y.visible=R.visible,y.wireframe=R.wireframe,C===Iu?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===Iu)&&(!S.frustumCulled||i.intersectsObject(S))){S.modelViewMatrix.multiplyMatrices(I.matrixWorldInverse,S.matrixWorld);let V=e.update(S),w=S.material;if(Array.isArray(w)){let N=V.groups;for(let U=0,H=N.length;U=1):q.indexOf("OpenGL ES")!==-1&&(ee=parseFloat(/^OpenGL ES (\d)/.exec(q)[1]),H=ee>=2);let te=null,z={},Y=n.getParameter(n.SCISSOR_BOX),me=n.getParameter(n.VIEWPORT),Re=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 be=Je?Qp:oi.getTransfer(Ve);he===n.FLOAT&&(ye=n.RGBA32F),he===n.HALF_FLOAT&&(ye=n.RGBA16F),he===n.UNSIGNED_BYTE&&(ye=be===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===Ja||B===yu?he=n.DEPTH24_STENCIL8:B===Zs?he=n.DEPTH32F_STENCIL8:B===Cu&&(he=n.DEPTH24_STENCIL8,Ct("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):B===null||B===Ja||B===yu?he=n.DEPTH_COMPONENT24:B===Zs?he=n.DEPTH_COMPONENT32F:B===Cu&&(he=n.DEPTH_COMPONENT16),he}function S(X,B){return g(X)===!0||X.isFramebufferTexture&&X.minFilter!==wr&&X.minFilter!==Fr?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),L(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 L(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 H(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 ee(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 q(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 te(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={[No]:n.REPEAT,[pa]:n.CLAMP_TO_EDGE,[fu]:n.MIRRORED_REPEAT},me={[wr]:n.NEAREST,[qE]:n.NEAREST_MIPMAP_NEAREST,[bh]:n.NEAREST_MIPMAP_LINEAR,[Fr]:n.LINEAR,[Mu]:n.LINEAR_MIPMAP_NEAREST,[$a]:n.LINEAR_MIPMAP_LINEAR},Re={[v1]:n.NEVER,[x1]:n.ALWAYS,[E1]:n.LESS,[NS]:n.LEQUAL,[S1]:n.EQUAL,[wS]:n.GEQUAL,[T1]:n.GREATER,[A1]:n.NOTEQUAL};function Be(X,B){if(B.type===Zs&&e.has("OES_texture_float_linear")===!1&&(B.magFilter===Fr||B.magFilter===Mu||B.magFilter===bh||B.magFilter===$a||B.minFilter===Fr||B.minFilter===Mu||B.minFilter===bh||B.minFilter===$a)&&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,Re[B.compareFunction])),e.has("EXT_texture_filter_anisotropic")===!0){if(B.magFilter===wr||B.minFilter!==bh&&B.minFilter!==$a||B.type===Zs&&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=H(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 ge(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,Ht[0].width,Ht[0].height);for(let Ae=0,Ye=Ht.length;Ae0){let Ke=bI(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,be.depth,ct,Qe.data)}else t.compressedTexImage3D(n.TEXTURE_2D_ARRAY,Ae,nt,Qe.width,Qe.height,be.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,be.depth,ct,St,Qe.data):t.texImage3D(n.TEXTURE_2D_ARRAY,Ae,nt,Qe.width,Qe.height,be.depth,0,ct,St,Qe.data)}else{qt&&re&&t.texStorage2D(n.TEXTURE_2D,Pe,nt,Ht[0].width,Ht[0].height);for(let Ae=0,Ye=Ht.length;Ae0){let Ae=bI(be.width,be.height,B.format,B.type);for(let Ye of B.layerUpdates){let Ke=be.data.subarray(Ye*Ae/be.data.BYTES_PER_ELEMENT,(Ye+1)*Ae/be.data.BYTES_PER_ELEMENT);t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,Ye,be.width,be.height,1,ct,St,Ke)}B.clearLayerUpdates()}else t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,0,be.width,be.height,be.depth,ct,St,be.data)}else t.texImage3D(n.TEXTURE_2D_ARRAY,0,nt,be.width,be.height,be.depth,0,ct,St,be.data);else if(B.isData3DTexture)qt?(re&&t.texStorage3D(n.TEXTURE_3D,Pe,nt,be.width,be.height,be.depth),K&&t.texSubImage3D(n.TEXTURE_3D,0,0,0,0,be.width,be.height,be.depth,ct,St,be.data)):t.texImage3D(n.TEXTURE_3D,0,nt,be.width,be.height,be.depth,0,ct,St,be.data);else if(B.isFramebufferTexture){if(re)if(qt)t.texStorage2D(n.TEXTURE_2D,Pe,nt,be.width,be.height);else{let Ae=be.width,Ye=be.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"),be.parentNode!==Ae){Ae.appendChild(be),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,be),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(Ht.length>0){if(qt&&re){let Ae=Li(Ht[0]);t.texStorage2D(n.TEXTURE_2D,Pe,nt,Ae.width,Ae.height)}for(let Ae=0,Ye=Ht.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,Ht,qt,nt[we].data):t.texImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+we,0,re,nt[we].width,nt[we].height,0,Ht,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,be,nt,Qe,B.depth,0,rt,ye,null):t.texImage2D(Ve,Je,be,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 Ie(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++)Ze(B.__webglFramebuffer[Le],X,Le);else{let Le=X.texture.mipmaps;Le&&Le.length>0?Ze(B.__webglFramebuffer[0],X,0):Ze(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(),Ie(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(),Ie(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 je(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 be=0;be0){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 be=0;be0)for(let be=0;be0){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!==Zn&&he!==Fl&&(oi.getTransfer(he)===Yi?(Le!==Qs||Ve!==As)&&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=w,this.setTextureUnits=N,this.setTexture2D=ee,this.setTexture2DArray=q,this.setTexture3D=te,this.setTextureCube=z,this.rebindTextures=Xe,this.setupRenderTarget=je,this.updateRenderTargetMipmap=$t,this.updateMultisampleRenderTarget=oe,this.setupDepthRenderbuffer=Tt,this.setupFrameBufferTexture=de,this.useMultisampledRTT=ii,this.isReversedDepthBuffer=function(){return t.buffers.depth.getReversed()}}function dre(n,e){function t(i,r=Fl){let s,a=oi.getTransfer(r);if(i===As)return n.UNSIGNED_BYTE;if(i===QE)return n.UNSIGNED_SHORT_4_4_4_4;if(i===$E)return n.UNSIGNED_SHORT_5_5_5_1;if(i===pI)return n.UNSIGNED_INT_5_9_9_9_REV;if(i===_I)return n.UNSIGNED_INT_10F_11F_11F_REV;if(i===uI)return n.BYTE;if(i===mI)return n.SHORT;if(i===Cu)return n.UNSIGNED_SHORT;if(i===ZE)return n.INT;if(i===Ja)return n.UNSIGNED_INT;if(i===Zs)return n.FLOAT;if(i===zo)return n.HALF_FLOAT;if(i===gI)return n.ALPHA;if(i===vI)return n.RGB;if(i===Qs)return n.RGBA;if(i===wo)return n.DEPTH_COMPONENT;if(i===tf)return n.DEPTH_STENCIL;if(i===JE)return n.RED;if(i===eS)return n.RED_INTEGER;if(i===rf)return n.RG;if(i===tS)return n.RG_INTEGER;if(i===iS)return n.RGBA_INTEGER;if(i===A_||i===x_||i===R_||i===b_)if(a===Yi)if(s=e.get("WEBGL_compressed_texture_s3tc_srgb"),s!==null){if(i===A_)return s.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(i===x_)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(i===R_)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(i===b_)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(s=e.get("WEBGL_compressed_texture_s3tc"),s!==null){if(i===A_)return s.COMPRESSED_RGB_S3TC_DXT1_EXT;if(i===x_)return s.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(i===R_)return s.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(i===b_)return s.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(i===rS||i===nS||i===sS||i===aS)if(s=e.get("WEBGL_compressed_texture_pvrtc"),s!==null){if(i===rS)return s.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(i===nS)return s.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(i===sS)return s.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(i===aS)return s.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(i===oS||i===lS||i===cS||i===fS||i===hS||i===I_||i===dS)if(s=e.get("WEBGL_compressed_texture_etc"),s!==null){if(i===oS||i===lS)return a===Yi?s.COMPRESSED_SRGB8_ETC2:s.COMPRESSED_RGB8_ETC2;if(i===cS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:s.COMPRESSED_RGBA8_ETC2_EAC;if(i===fS)return s.COMPRESSED_R11_EAC;if(i===hS)return s.COMPRESSED_SIGNED_R11_EAC;if(i===I_)return s.COMPRESSED_RG11_EAC;if(i===dS)return s.COMPRESSED_SIGNED_RG11_EAC}else return null;if(i===uS||i===mS||i===pS||i===_S||i===gS||i===vS||i===ES||i===SS||i===TS||i===AS||i===xS||i===RS||i===bS||i===IS)if(s=e.get("WEBGL_compressed_texture_astc"),s!==null){if(i===uS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:s.COMPRESSED_RGBA_ASTC_4x4_KHR;if(i===mS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:s.COMPRESSED_RGBA_ASTC_5x4_KHR;if(i===pS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:s.COMPRESSED_RGBA_ASTC_5x5_KHR;if(i===_S)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:s.COMPRESSED_RGBA_ASTC_6x5_KHR;if(i===gS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:s.COMPRESSED_RGBA_ASTC_6x6_KHR;if(i===vS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:s.COMPRESSED_RGBA_ASTC_8x5_KHR;if(i===ES)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:s.COMPRESSED_RGBA_ASTC_8x6_KHR;if(i===SS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:s.COMPRESSED_RGBA_ASTC_8x8_KHR;if(i===TS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:s.COMPRESSED_RGBA_ASTC_10x5_KHR;if(i===AS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:s.COMPRESSED_RGBA_ASTC_10x6_KHR;if(i===xS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:s.COMPRESSED_RGBA_ASTC_10x8_KHR;if(i===RS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:s.COMPRESSED_RGBA_ASTC_10x10_KHR;if(i===bS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:s.COMPRESSED_RGBA_ASTC_12x10_KHR;if(i===IS)return a===Yi?s.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:s.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(i===MS||i===CS||i===yS)if(s=e.get("EXT_texture_compression_bptc"),s!==null){if(i===MS)return a===Yi?s.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:s.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(i===CS)return s.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(i===yS)return s.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(i===PS||i===LS||i===M_||i===DS)if(s=e.get("EXT_texture_compression_rgtc"),s!==null){if(i===PS)return s.COMPRESSED_RED_RGTC1_EXT;if(i===LS)return s.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(i===M_)return s.COMPRESSED_RED_GREEN_RGTC2_EXT;if(i===DS)return s.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return i===yu?n.UNSIGNED_INT_24_8:n[i]!==void 0?n[i]:null}return{convert:t}}function _re(n,e){function t(_,g){_.matrixAutoUpdate===!0&&_.updateMatrix(),g.value.copy(_.matrix)}function i(_,g){g.color.getRGB(_.fogColor.value,AI(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(pre.makeRotationFromEuler(T)).transpose(),x.isCubeTexture&&x.isRenderTargetTexture===!1&&_.envMapRotation.value.premultiply(a3),_.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 gre(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 Ere(){return Xo===null&&(Xo=new Eu(vre,16,16,rf,zo),Xo.name="DFG_LUT",Xo.minFilter=Fr,Xo.magFilter=Fr,Xo.wrapS=pa,Xo.wrapT=pa,Xo.generateMipmaps=!1,Xo.needsUpdate=!0),Xo}var 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,Qee,$ee,Jee,ete,tte,ite,rte,nte,ste,ate,ote,lte,cte,fte,hte,dte,ute,hi,pt,Yo,BS,mte,t3,nf,D1,Mh,Ste,P_,O1,DI,OI,NI,wI,Tte,Nu,VS,Dte,i3,UI,r3,n3,s3,B1,U1,V1,G1,k1,VI,GI,kI,FI,Ou,Tie,Aie,z1,Iie,US,Die,Oie,wie,Bie,Vie,kie,Hie,Kie,HI,zI,tre,sre,are,ore,lre,J1,L_,BI,ure,mre,XI,YI,pre,a3,vre,Xo,GS,$n=M(()=>{LI();LI();N$=`#ifdef USE_ALPHAHASH if ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard; -#endif`,D$=`#ifdef USE_ALPHAHASH +#endif`,w$=`#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: `+N+` : cases.z; return clamp( threshold , 1.0e-6, 1.0 ); } -#endif`,O$=`#ifdef USE_ALPHAMAP +#endif`,F$=`#ifdef USE_ALPHAMAP diffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g; -#endif`,N$=`#ifdef USE_ALPHAMAP +#endif`,B$=`#ifdef USE_ALPHAMAP uniform sampler2D alphaMap; -#endif`,w$=`#ifdef USE_ALPHATEST +#endif`,U$=`#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`,F$=`#ifdef USE_ALPHATEST +#endif`,V$=`#ifdef USE_ALPHATEST uniform float alphaTest; -#endif`,B$=`#ifdef USE_AOMAP +#endif`,G$=`#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: `+N+` float dotNV = saturate( dot( geometryNormal, geometryViewDir ) ); reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness ); #endif -#endif`,U$=`#ifdef USE_AOMAP +#endif`,k$=`#ifdef USE_AOMAP uniform sampler2D aoMap; uniform float aoMapIntensity; -#endif`,V$=`#ifdef USE_BATCHING +#endif`,W$=`#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: `+N+` int y = j / size; return texelFetch( batchingColorTexture, ivec2( x, y ), 0 ); } -#endif`,G$=`#ifdef USE_BATCHING +#endif`,H$=`#ifdef USE_BATCHING mat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) ); -#endif`,k$=`vec3 transformed = vec3( position ); +#endif`,z$=`vec3 transformed = vec3( position ); #ifdef USE_ALPHAHASH vPosition = vec3( position ); -#endif`,W$=`vec3 objectNormal = vec3( normal ); +#endif`,X$=`vec3 objectNormal = vec3( normal ); #ifdef USE_TANGENT vec3 objectTangent = vec3( tangent.xyz ); -#endif`,H$=`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`,z$=`#ifdef USE_IRIDESCENCE +} // validated`,K$=`#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`,X$=`#ifdef USE_BUMPMAP +#endif`,j$=`#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`,Y$=`#if NUM_CLIPPING_PLANES > 0 +#endif`,q$=`#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`,K$=`#if NUM_CLIPPING_PLANES > 0 +#endif`,Z$=`#if NUM_CLIPPING_PLANES > 0 varying vec3 vClipPosition; uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ]; -#endif`,j$=`#if NUM_CLIPPING_PLANES > 0 +#endif`,Q$=`#if NUM_CLIPPING_PLANES > 0 varying vec3 vClipPosition; -#endif`,q$=`#if NUM_CLIPPING_PLANES > 0 +#endif`,$$=`#if NUM_CLIPPING_PLANES > 0 vClipPosition = - mvPosition.xyz; -#endif`,Z$=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) +#endif`,J$=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) diffuseColor *= vColor; -#endif`,Q$=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) +#endif`,eJ=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) varying vec4 vColor; -#endif`,$$=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) +#endif`,tJ=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) varying vec4 vColor; -#endif`,J$=`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) +#endif`,iJ=`#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`,eJ=`#define PI 3.141592653589793 +#endif`,rJ=`#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`,tJ=`#ifdef ENVMAP_TYPE_CUBE_UV +} // validated`,nJ=`#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`,iJ=`vec3 transformedNormal = objectNormal; +#endif`,sJ=`vec3 transformedNormal = objectNormal; #ifdef USE_TANGENT vec3 transformedTangent = objectTangent; #endif @@ -822,21 +822,21 @@ transformedNormal = normalMatrix * transformedNormal; #ifdef FLIP_SIDED transformedTangent = - transformedTangent; #endif -#endif`,rJ=`#ifdef USE_DISPLACEMENTMAP +#endif`,aJ=`#ifdef USE_DISPLACEMENTMAP uniform sampler2D displacementMap; uniform float displacementScale; uniform float displacementBias; -#endif`,nJ=`#ifdef USE_DISPLACEMENTMAP +#endif`,oJ=`#ifdef USE_DISPLACEMENTMAP transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias ); -#endif`,sJ=`#ifdef USE_EMISSIVEMAP +#endif`,lJ=`#ifdef USE_EMISSIVEMAP vec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv ); #ifdef DECODE_VIDEO_TEXTURE_EMISSIVE emissiveColor = sRGBTransferEOTF( emissiveColor ); #endif totalEmissiveRadiance *= emissiveColor.rgb; -#endif`,aJ=`#ifdef USE_EMISSIVEMAP +#endif`,cJ=`#ifdef USE_EMISSIVEMAP uniform sampler2D emissiveMap; -#endif`,oJ="gl_FragColor = linearToOutputTexel( gl_FragColor );",lJ=`vec4 LinearTransferOETF( in vec4 value ) { +#endif`,fJ="gl_FragColor = linearToOutputTexel( gl_FragColor );",hJ=`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 ); -}`,cJ=`#ifdef USE_ENVMAP +}`,dJ=`#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`,fJ=`#ifdef USE_ENVMAP +#endif`,uJ=`#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`,hJ=`#ifdef USE_ENVMAP +#endif`,mJ=`#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`,dJ=`#ifdef USE_ENVMAP +#endif`,pJ=`#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`,uJ=`#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`,mJ=`#ifdef USE_FOG +#endif`,gJ=`#ifdef USE_FOG vFogDepth = - mvPosition.z; -#endif`,pJ=`#ifdef USE_FOG +#endif`,vJ=`#ifdef USE_FOG varying float vFogDepth; -#endif`,_J=`#ifdef USE_FOG +#endif`,EJ=`#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`,gJ=`#ifdef USE_FOG +#endif`,SJ=`#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`,vJ=`#ifdef USE_GRADIENTMAP +#endif`,TJ=`#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 -}`,EJ=`#ifdef USE_LIGHTMAP +}`,AJ=`#ifdef USE_LIGHTMAP uniform sampler2D lightMap; uniform float lightMapIntensity; -#endif`,SJ=`LambertMaterial material; +#endif`,xJ=`LambertMaterial material; material.diffuseColor = diffuseColor.rgb; -material.specularStrength = specularStrength;`,TJ=`varying vec3 vViewPosition; +material.specularStrength = specularStrength;`,RJ=`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`,AJ=`uniform bool receiveShadow; +#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,bJ=`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 `,xJ=`#ifdef USE_ENVMAP +#include `,IJ=`#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`,RJ=`ToonMaterial material; -material.diffuseColor = diffuseColor.rgb;`,bJ=`varying vec3 vViewPosition; +#endif`,MJ=`ToonMaterial material; +material.diffuseColor = diffuseColor.rgb;`,CJ=`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`,IJ=`BlinnPhongMaterial material; +#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,yJ=`BlinnPhongMaterial material; material.diffuseColor = diffuseColor.rgb; material.specularColor = specular; material.specularShininess = shininess; -material.specularStrength = specularStrength;`,MJ=`varying vec3 vViewPosition; +material.specularStrength = specularStrength;`,PJ=`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`,CJ=`PhysicalMaterial material; +#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,LJ=`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`,yJ=`uniform sampler2D dfgLUT; +#endif`,DJ=`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 ); -}`,PJ=` +}`,OJ=` 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`,LJ=`#if defined( RE_IndirectDiffuse ) +#endif`,NJ=`#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`,DJ=`#if defined( RE_IndirectDiffuse ) +#endif`,wJ=`#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`,OJ=`#ifdef USE_LIGHT_PROBES_GRID +#endif`,FJ=`#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`,NJ=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) +#endif`,BJ=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) gl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5; -#endif`,wJ=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) +#endif`,UJ=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) uniform float logDepthBufFC; varying float vFragDepth; varying float vIsPerspective; -#endif`,FJ=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER +#endif`,VJ=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER varying float vFragDepth; varying float vIsPerspective; -#endif`,BJ=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER +#endif`,GJ=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER vFragDepth = 1.0 + gl_Position.w; vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) ); -#endif`,UJ=`#ifdef USE_MAP +#endif`,kJ=`#ifdef USE_MAP vec4 sampledDiffuseColor = texture2D( map, vMapUv ); #ifdef DECODE_VIDEO_TEXTURE sampledDiffuseColor = sRGBTransferEOTF( sampledDiffuseColor ); #endif diffuseColor *= sampledDiffuseColor; -#endif`,VJ=`#ifdef USE_MAP +#endif`,WJ=`#ifdef USE_MAP uniform sampler2D map; -#endif`,GJ=`#if defined( USE_MAP ) || defined( USE_ALPHAMAP ) +#endif`,HJ=`#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`,kJ=`#if defined( USE_POINTS_UV ) +#endif`,zJ=`#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`,WJ=`float metalnessFactor = metalness; +#endif`,XJ=`float metalnessFactor = metalness; #ifdef USE_METALNESSMAP vec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv ); metalnessFactor *= texelMetalness.b; -#endif`,HJ=`#ifdef USE_METALNESSMAP +#endif`,YJ=`#ifdef USE_METALNESSMAP uniform sampler2D metalnessMap; -#endif`,zJ=`#ifdef USE_INSTANCING_MORPH +#endif`,KJ=`#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`,XJ=`#if defined( USE_MORPHCOLORS ) +#endif`,jJ=`#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`,YJ=`#ifdef USE_MORPHNORMALS +#endif`,qJ=`#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`,KJ=`#ifdef USE_MORPHTARGETS +#endif`,ZJ=`#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`,jJ=`#ifdef USE_MORPHTARGETS +#endif`,QJ=`#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`,qJ=`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0; +#endif`,$J=`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;`,ZJ=`#ifdef USE_NORMALMAP_OBJECTSPACE +vec3 nonPerturbedNormal = normal;`,JJ=`#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;`,ZJ=`#ifdef USE_NORMALMAP_OBJECTSPACE normal = normalize( tbn * mapN ); #elif defined( USE_BUMPMAP ) normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection ); -#endif`,QJ=`#ifndef FLAT_SHADED +#endif`,eee=`#ifndef FLAT_SHADED varying vec3 vNormal; #ifdef USE_TANGENT varying vec3 vTangent; varying vec3 vBitangent; #endif -#endif`,$J=`#ifndef FLAT_SHADED +#endif`,tee=`#ifndef FLAT_SHADED varying vec3 vNormal; #ifdef USE_TANGENT varying vec3 vTangent; varying vec3 vBitangent; #endif -#endif`,JJ=`#ifndef FLAT_SHADED +#endif`,iee=`#ifndef FLAT_SHADED vNormal = normalize( transformedNormal ); #ifdef USE_TANGENT vTangent = normalize( transformedTangent ); vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w ); #endif -#endif`,eee=`#ifdef USE_NORMALMAP +#endif`,ree=`#ifdef USE_NORMALMAP uniform sampler2D normalMap; uniform vec2 normalScale; #endif @@ -1987,13 +1987,13 @@ vec3 nonPerturbedNormal = normal;`,ZJ=`#ifdef USE_NORMALMAP_OBJECTSPACE float scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det ); return mat3( T * scale, B * scale, N ); } -#endif`,tee=`#ifdef USE_CLEARCOAT +#endif`,nee=`#ifdef USE_CLEARCOAT vec3 clearcoatNormal = nonPerturbedNormal; -#endif`,iee=`#ifdef USE_CLEARCOAT_NORMALMAP +#endif`,see=`#ifdef USE_CLEARCOAT_NORMALMAP vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0; clearcoatMapN.xy *= clearcoatNormalScale; clearcoatNormal = normalize( tbn2 * clearcoatMapN ); -#endif`,ree=`#ifdef USE_CLEARCOATMAP +#endif`,aee=`#ifdef USE_CLEARCOATMAP uniform sampler2D clearcoatMap; #endif #ifdef USE_CLEARCOAT_NORMALMAP @@ -2002,18 +2002,18 @@ vec3 nonPerturbedNormal = normal;`,ZJ=`#ifdef USE_NORMALMAP_OBJECTSPACE #endif #ifdef USE_CLEARCOAT_ROUGHNESSMAP uniform sampler2D clearcoatRoughnessMap; -#endif`,nee=`#ifdef USE_IRIDESCENCEMAP +#endif`,oee=`#ifdef USE_IRIDESCENCEMAP uniform sampler2D iridescenceMap; #endif #ifdef USE_IRIDESCENCE_THICKNESSMAP uniform sampler2D iridescenceThicknessMap; -#endif`,see=`#ifdef OPAQUE +#endif`,lee=`#ifdef OPAQUE diffuseColor.a = 1.0; #endif #ifdef USE_TRANSMISSION diffuseColor.a *= material.transmissionAlpha; #endif -gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,aee=`vec3 packNormalToRGB( const in vec3 normal ) { +gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,cee=`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 -}`,oee=`#ifdef PREMULTIPLIED_ALPHA +}`,fee=`#ifdef PREMULTIPLIED_ALPHA gl_FragColor.rgb *= gl_FragColor.a; -#endif`,lee=`vec4 mvPosition = vec4( transformed, 1.0 ); +#endif`,hee=`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;`,cee=`#ifdef DITHERING +gl_Position = projectionMatrix * mvPosition;`,dee=`#ifdef DITHERING gl_FragColor.rgb = dithering( gl_FragColor.rgb ); -#endif`,fee=`#ifdef DITHERING +#endif`,uee=`#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`,hee=`float roughnessFactor = roughness; +#endif`,mee=`float roughnessFactor = roughness; #ifdef USE_ROUGHNESSMAP vec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv ); roughnessFactor *= texelRoughness.g; -#endif`,dee=`#ifdef USE_ROUGHNESSMAP +#endif`,pee=`#ifdef USE_ROUGHNESSMAP uniform sampler2D roughnessMap; -#endif`,uee=`#if NUM_SPOT_LIGHT_COORDS > 0 +#endif`,_ee=`#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;`,cee=`#ifdef DITHERING } #endif #endif -#endif`,mee=`#if NUM_SPOT_LIGHT_COORDS > 0 +#endif`,gee=`#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;`,cee=`#ifdef DITHERING }; uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; #endif -#endif`,pee=`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 ) +#endif`,vee=`#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;`,cee=`#ifdef DITHERING vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition; } #pragma unroll_loop_end -#endif`,_ee=`float getShadowMask() { +#endif`,Eee=`float getShadowMask() { float shadow = 1.0; #ifdef USE_SHADOWMAP #if NUM_DIR_LIGHT_SHADOWS > 0 @@ -2426,12 +2426,12 @@ gl_Position = projectionMatrix * mvPosition;`,cee=`#ifdef DITHERING #endif #endif return shadow; -}`,gee=`#ifdef USE_SKINNING +}`,See=`#ifdef USE_SKINNING mat4 boneMatX = getBoneMatrix( skinIndex.x ); mat4 boneMatY = getBoneMatrix( skinIndex.y ); mat4 boneMatZ = getBoneMatrix( skinIndex.z ); mat4 boneMatW = getBoneMatrix( skinIndex.w ); -#endif`,vee=`#ifdef USE_SKINNING +#endif`,Tee=`#ifdef USE_SKINNING uniform mat4 bindMatrix; uniform mat4 bindMatrixInverse; uniform highp sampler2D boneTexture; @@ -2446,7 +2446,7 @@ gl_Position = projectionMatrix * mvPosition;`,cee=`#ifdef DITHERING vec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 ); return mat4( v1, v2, v3, v4 ); } -#endif`,Eee=`#ifdef USE_SKINNING +#endif`,Aee=`#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;`,cee=`#ifdef DITHERING skinned += boneMatZ * skinVertex * skinWeight.z; skinned += boneMatW * skinVertex * skinWeight.w; transformed = ( bindMatrixInverse * skinned ).xyz; -#endif`,See=`#ifdef USE_SKINNING +#endif`,xee=`#ifdef USE_SKINNING mat4 skinMatrix = mat4( 0.0 ); skinMatrix += skinWeight.x * boneMatX; skinMatrix += skinWeight.y * boneMatY; @@ -2465,17 +2465,17 @@ gl_Position = projectionMatrix * mvPosition;`,cee=`#ifdef DITHERING #ifdef USE_TANGENT objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz; #endif -#endif`,Tee=`float specularStrength; +#endif`,Ree=`float specularStrength; #ifdef USE_SPECULARMAP vec4 texelSpecular = texture2D( specularMap, vSpecularMapUv ); specularStrength = texelSpecular.r; #else specularStrength = 1.0; -#endif`,Aee=`#ifdef USE_SPECULARMAP +#endif`,bee=`#ifdef USE_SPECULARMAP uniform sampler2D specularMap; -#endif`,xee=`#if defined( TONE_MAPPING ) +#endif`,Iee=`#if defined( TONE_MAPPING ) gl_FragColor.rgb = toneMapping( gl_FragColor.rgb ); -#endif`,Ree=`#ifndef saturate +#endif`,Mee=`#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; }`,bee=`#ifdef USE_TRANSMISSION +vec3 CustomToneMapping( vec3 color ) { return color; }`,Cee=`#ifdef USE_TRANSMISSION material.transmission = transmission; material.transmissionAlpha = 1.0; material.thickness = thickness; @@ -2593,7 +2593,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,bee=`#ifdef USE_TRANSMIS material.attenuationColor, material.attenuationDistance ); material.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission ); totalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission ); -#endif`,Iee=`#ifdef USE_TRANSMISSION +#endif`,yee=`#ifdef USE_TRANSMISSION uniform float transmission; uniform float thickness; uniform float attenuationDistance; @@ -2719,7 +2719,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,bee=`#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`,Mee=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) +#endif`,Pee=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) varying vec2 vUv; #endif #ifdef USE_MAP @@ -2789,7 +2789,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,bee=`#ifdef USE_TRANSMIS #ifdef USE_THICKNESSMAP uniform mat3 thicknessMapTransform; varying vec2 vThicknessMapUv; -#endif`,Cee=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) +#endif`,Lee=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) varying vec2 vUv; #endif #ifdef USE_MAP @@ -2883,7 +2883,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,bee=`#ifdef USE_TRANSMIS #ifdef USE_THICKNESSMAP uniform mat3 thicknessMapTransform; varying vec2 vThicknessMapUv; -#endif`,yee=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) +#endif`,Dee=`#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; }`,bee=`#ifdef USE_TRANSMIS #endif #ifdef USE_THICKNESSMAP vThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy; -#endif`,Pee=`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0 +#endif`,Oee=`#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; }`,bee=`#ifdef USE_TRANSMIS worldPosition = instanceMatrix * worldPosition; #endif worldPosition = modelMatrix * worldPosition; -#endif`,Lee=`varying vec2 vUv; +#endif`,Nee=`varying vec2 vUv; uniform mat3 uvTransform; void main() { vUv = ( uvTransform * vec3( uv, 1 ) ).xy; gl_Position = vec4( position.xy, 1.0, 1.0 ); -}`,Dee=`uniform sampler2D t2D; +}`,wee=`uniform sampler2D t2D; uniform float backgroundIntensity; varying vec2 vUv; void main() { @@ -2980,14 +2980,14 @@ void main() { gl_FragColor = texColor; #include #include -}`,Oee=`varying vec3 vWorldDirection; +}`,Fee=`varying vec3 vWorldDirection; #include void main() { vWorldDirection = transformDirection( position, modelMatrix ); #include #include gl_Position.z = gl_Position.w; -}`,Nee=`#ifdef ENVMAP_TYPE_CUBE +}`,Bee=`#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 -}`,wee=`varying vec3 vWorldDirection; +}`,Uee=`varying vec3 vWorldDirection; #include void main() { vWorldDirection = transformDirection( position, modelMatrix ); #include #include gl_Position.z = gl_Position.w; -}`,Fee=`uniform samplerCube tCube; +}`,Vee=`uniform samplerCube tCube; uniform float tFlip; uniform float opacity; varying vec3 vWorldDirection; @@ -3026,7 +3026,7 @@ void main() { gl_FragColor.a *= opacity; #include #include -}`,Bee=`#include +}`,Gee=`#include #include #include #include @@ -3053,7 +3053,7 @@ void main() { #include #include vHighPrecisionZW = gl_Position.zw; -}`,Uee=`#if DEPTH_PACKING == 3200 +}`,kee=`#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 -}`,Vee=`#define DISTANCE +}`,Wee=`#define DISTANCE varying vec3 vWorldPosition; #include #include @@ -3118,7 +3118,7 @@ void main() { #include #include vWorldPosition = worldPosition.xyz; -}`,Gee=`#define DISTANCE +}`,Hee=`#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 ); -}`,kee=`varying vec3 vWorldDirection; +}`,zee=`varying vec3 vWorldDirection; #include void main() { vWorldDirection = transformDirection( position, modelMatrix ); #include #include -}`,Wee=`uniform sampler2D tEquirect; +}`,Xee=`uniform sampler2D tEquirect; varying vec3 vWorldDirection; #include void main() { @@ -3156,7 +3156,7 @@ void main() { gl_FragColor = texture2D( tEquirect, sampleUV ); #include #include -}`,Hee=`uniform float scale; +}`,Yee=`uniform float scale; attribute float lineDistance; varying float vLineDistance; #include @@ -3178,7 +3178,7 @@ void main() { #include #include #include -}`,zee=`uniform vec3 diffuse; +}`,Kee=`uniform vec3 diffuse; uniform float opacity; uniform float dashSize; uniform float totalSize; @@ -3206,7 +3206,7 @@ void main() { #include #include #include -}`,Xee=`#include +}`,jee=`#include #include #include #include @@ -3238,7 +3238,7 @@ void main() { #include #include #include -}`,Yee=`uniform vec3 diffuse; +}`,qee=`uniform vec3 diffuse; uniform float opacity; #ifndef FLAT_SHADED varying vec3 vNormal; @@ -3286,7 +3286,7 @@ void main() { #include #include #include -}`,Kee=`#define LAMBERT +}`,Zee=`#define LAMBERT varying vec3 vViewPosition; #include #include @@ -3325,7 +3325,7 @@ void main() { #include #include #include -}`,jee=`#define LAMBERT +}`,Qee=`#define LAMBERT uniform vec3 diffuse; uniform vec3 emissive; uniform float opacity; @@ -3383,7 +3383,7 @@ void main() { #include #include #include -}`,qee=`#define MATCAP +}`,$ee=`#define MATCAP varying vec3 vViewPosition; #include #include @@ -3417,7 +3417,7 @@ void main() { #include #include vViewPosition = - mvPosition.xyz; -}`,Zee=`#define MATCAP +}`,Jee=`#define MATCAP uniform vec3 diffuse; uniform float opacity; uniform sampler2D matcap; @@ -3463,7 +3463,7 @@ void main() { #include #include #include -}`,Qee=`#define NORMAL +}`,ete=`#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 -}`,$ee=`#define NORMAL +}`,tte=`#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 -}`,Jee=`#define PHONG +}`,ite=`#define PHONG varying vec3 vViewPosition; #include #include @@ -3556,7 +3556,7 @@ void main() { #include #include #include -}`,ete=`#define PHONG +}`,rte=`#define PHONG uniform vec3 diffuse; uniform vec3 emissive; uniform vec3 specular; @@ -3616,7 +3616,7 @@ void main() { #include #include #include -}`,tte=`#define STANDARD +}`,nte=`#define STANDARD varying vec3 vViewPosition; #ifdef USE_TRANSMISSION varying vec3 vWorldPosition; @@ -3659,7 +3659,7 @@ void main() { #ifdef USE_TRANSMISSION vWorldPosition = worldPosition.xyz; #endif -}`,ite=`#define STANDARD +}`,ste=`#define STANDARD #ifdef PHYSICAL #define IOR #define USE_SPECULAR @@ -3784,7 +3784,7 @@ void main() { #include #include #include -}`,rte=`#define TOON +}`,ate=`#define TOON varying vec3 vViewPosition; #include #include @@ -3821,7 +3821,7 @@ void main() { #include #include #include -}`,nte=`#define TOON +}`,ote=`#define TOON uniform vec3 diffuse; uniform vec3 emissive; uniform float opacity; @@ -3873,7 +3873,7 @@ void main() { #include #include #include -}`,ste=`uniform float size; +}`,lte=`uniform float size; uniform float scale; #include #include @@ -3904,7 +3904,7 @@ void main() { #include #include #include -}`,ate=`uniform vec3 diffuse; +}`,cte=`uniform vec3 diffuse; uniform float opacity; #include #include @@ -3929,7 +3929,7 @@ void main() { #include #include #include -}`,ote=`#include +}`,fte=`#include #include #include #include @@ -3952,7 +3952,7 @@ void main() { #include #include #include -}`,lte=`uniform vec3 color; +}`,hte=`uniform vec3 color; uniform float opacity; #include #include @@ -3968,7 +3968,7 @@ void main() { #include #include #include -}`,cte=`uniform float rotation; +}`,dte=`uniform float rotation; uniform vec2 center; #include #include @@ -3992,7 +3992,7 @@ void main() { #include #include #include -}`,fte=`uniform vec3 diffuse; +}`,ute=`uniform vec3 diffuse; uniform float opacity; #include #include @@ -4017,7 +4017,7 @@ void main() { #include #include #include -}`,hi={alphahash_fragment:L$,alphahash_pars_fragment:D$,alphamap_fragment:O$,alphamap_pars_fragment:N$,alphatest_fragment:w$,alphatest_pars_fragment:F$,aomap_fragment:B$,aomap_pars_fragment:U$,batching_pars_vertex:V$,batching_vertex:G$,begin_vertex:k$,beginnormal_vertex:W$,bsdfs:H$,iridescence_fragment:z$,bumpmap_pars_fragment:X$,clipping_planes_fragment:Y$,clipping_planes_pars_fragment:K$,clipping_planes_pars_vertex:j$,clipping_planes_vertex:q$,color_fragment:Z$,color_pars_fragment:Q$,color_pars_vertex:$$,color_vertex:J$,common:eJ,cube_uv_reflection_fragment:tJ,defaultnormal_vertex:iJ,displacementmap_pars_vertex:rJ,displacementmap_vertex:nJ,emissivemap_fragment:sJ,emissivemap_pars_fragment:aJ,colorspace_fragment:oJ,colorspace_pars_fragment:lJ,envmap_fragment:cJ,envmap_common_pars_fragment:fJ,envmap_pars_fragment:hJ,envmap_pars_vertex:dJ,envmap_physical_pars_fragment:xJ,envmap_vertex:uJ,fog_vertex:mJ,fog_pars_vertex:pJ,fog_fragment:_J,fog_pars_fragment:gJ,gradientmap_pars_fragment:vJ,lightmap_pars_fragment:EJ,lights_lambert_fragment:SJ,lights_lambert_pars_fragment:TJ,lights_pars_begin:AJ,lights_toon_fragment:RJ,lights_toon_pars_fragment:bJ,lights_phong_fragment:IJ,lights_phong_pars_fragment:MJ,lights_physical_fragment:CJ,lights_physical_pars_fragment:yJ,lights_fragment_begin:PJ,lights_fragment_maps:LJ,lights_fragment_end:DJ,lightprobes_pars_fragment:OJ,logdepthbuf_fragment:NJ,logdepthbuf_pars_fragment:wJ,logdepthbuf_pars_vertex:FJ,logdepthbuf_vertex:BJ,map_fragment:UJ,map_pars_fragment:VJ,map_particle_fragment:GJ,map_particle_pars_fragment:kJ,metalnessmap_fragment:WJ,metalnessmap_pars_fragment:HJ,morphinstance_vertex:zJ,morphcolor_vertex:XJ,morphnormal_vertex:YJ,morphtarget_pars_vertex:KJ,morphtarget_vertex:jJ,normal_fragment_begin:qJ,normal_fragment_maps:ZJ,normal_pars_fragment:QJ,normal_pars_vertex:$J,normal_vertex:JJ,normalmap_pars_fragment:eee,clearcoat_normal_fragment_begin:tee,clearcoat_normal_fragment_maps:iee,clearcoat_pars_fragment:ree,iridescence_pars_fragment:nee,opaque_fragment:see,packing:aee,premultiplied_alpha_fragment:oee,project_vertex:lee,dithering_fragment:cee,dithering_pars_fragment:fee,roughnessmap_fragment:hee,roughnessmap_pars_fragment:dee,shadowmap_pars_fragment:uee,shadowmap_pars_vertex:mee,shadowmap_vertex:pee,shadowmask_pars_fragment:_ee,skinbase_vertex:gee,skinning_pars_vertex:vee,skinning_vertex:Eee,skinnormal_vertex:See,specularmap_fragment:Tee,specularmap_pars_fragment:Aee,tonemapping_fragment:xee,tonemapping_pars_fragment:Ree,transmission_fragment:bee,transmission_pars_fragment:Iee,uv_pars_fragment:Mee,uv_pars_vertex:Cee,uv_vertex:yee,worldpos_vertex:Pee,background_vert:Lee,background_frag:Dee,backgroundCube_vert:Oee,backgroundCube_frag:Nee,cube_vert:wee,cube_frag:Fee,depth_vert:Bee,depth_frag:Uee,distance_vert:Vee,distance_frag:Gee,equirect_vert:kee,equirect_frag:Wee,linedashed_vert:Hee,linedashed_frag:zee,meshbasic_vert:Xee,meshbasic_frag:Yee,meshlambert_vert:Kee,meshlambert_frag:jee,meshmatcap_vert:qee,meshmatcap_frag:Zee,meshnormal_vert:Qee,meshnormal_frag:$ee,meshphong_vert:Jee,meshphong_frag:ete,meshphysical_vert:tte,meshphysical_frag:ite,meshtoon_vert:rte,meshtoon_frag:nte,points_vert:ste,points_frag:ate,shadow_vert:ote,shadow_frag:lte,sprite_vert:cte,sprite_frag:fte},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:Ln([pt.common,pt.specularmap,pt.envmap,pt.aomap,pt.lightmap,pt.fog]),vertexShader:hi.meshbasic_vert,fragmentShader:hi.meshbasic_frag},lambert:{uniforms:Ln([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:Ln([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:Ln([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:Ln([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:Ln([pt.common,pt.bumpmap,pt.normalmap,pt.displacementmap,pt.fog,{matcap:{value:null}}]),vertexShader:hi.meshmatcap_vert,fragmentShader:hi.meshmatcap_frag},points:{uniforms:Ln([pt.points,pt.fog]),vertexShader:hi.points_vert,fragmentShader:hi.points_frag},dashed:{uniforms:Ln([pt.common,pt.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:hi.linedashed_vert,fragmentShader:hi.linedashed_frag},depth:{uniforms:Ln([pt.common,pt.displacementmap]),vertexShader:hi.depth_vert,fragmentShader:hi.depth_frag},normal:{uniforms:Ln([pt.common,pt.bumpmap,pt.normalmap,pt.displacementmap,{opacity:{value:1}}]),vertexShader:hi.meshnormal_vert,fragmentShader:hi.meshnormal_frag},sprite:{uniforms:Ln([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:Ln([pt.common,pt.displacementmap,{referencePosition:{value:new se},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:hi.distance_vert,fragmentShader:hi.distance_frag},shadow:{uniforms:Ln([pt.lights,pt.fog,{color:{value:new ft(0)},opacity:{value:1}}]),vertexShader:hi.shadow_vert,fragmentShader:hi.shadow_frag}};Xo.physical={uniforms:Ln([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};OS={r:0,b:0,g:0},hte=new li,Q1=new ri;Q1.set(-1,0,0,0,1,0,0,0,1);tf=4,C1=[.125,.215,.35,.446,.526,.582],bh=20,gte=256,y_=new Ss,y1=new ft,MI=null,CI=0,yI=0,PI=!1,vte=new se,Du=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=vte}=s;MI=this._renderer.getRenderTarget(),CI=this._renderer.getActiveCubeFace(),yI=this._renderer.getActiveMipmapLevel(),PI=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=D1(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=L1(),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===$c||e.mapping===Ah;r?(this._cubemapMaterial===null&&(this._cubemapMaterial=D1()),this._cubemapMaterial.uniforms.flipEnvMap.value=e.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=L1());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;Pu(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-tf?i-m+tf:0),g=4*(this._cubeSize-p);l.envMap.value=e.texture,l.roughness.value=u,l.mipInt.value=m-t,Pu(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,Pu(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*bh-1),p=s/m,_=isFinite(s)?1+Math.floor(f*p):bh;_>bh&&Ct(`sigmaRadians, ${s}, is too large and will clip, as it requested ${_} samples when the maximum is set to ${bh}`);let g=[],v=0;for(let R=0;Rx-tf?r-x+tf:0),S=4*(this._cubeSize-T);Pu(t,E,S,3*T,2*T),l.setRenderTarget(t),l.render(h,y_)}};wS=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:` +}`,hi={alphahash_fragment:N$,alphahash_pars_fragment:w$,alphamap_fragment:F$,alphamap_pars_fragment:B$,alphatest_fragment:U$,alphatest_pars_fragment:V$,aomap_fragment:G$,aomap_pars_fragment:k$,batching_pars_vertex:W$,batching_vertex:H$,begin_vertex:z$,beginnormal_vertex:X$,bsdfs:Y$,iridescence_fragment:K$,bumpmap_pars_fragment:j$,clipping_planes_fragment:q$,clipping_planes_pars_fragment:Z$,clipping_planes_pars_vertex:Q$,clipping_planes_vertex:$$,color_fragment:J$,color_pars_fragment:eJ,color_pars_vertex:tJ,color_vertex:iJ,common:rJ,cube_uv_reflection_fragment:nJ,defaultnormal_vertex:sJ,displacementmap_pars_vertex:aJ,displacementmap_vertex:oJ,emissivemap_fragment:lJ,emissivemap_pars_fragment:cJ,colorspace_fragment:fJ,colorspace_pars_fragment:hJ,envmap_fragment:dJ,envmap_common_pars_fragment:uJ,envmap_pars_fragment:mJ,envmap_pars_vertex:pJ,envmap_physical_pars_fragment:IJ,envmap_vertex:_J,fog_vertex:gJ,fog_pars_vertex:vJ,fog_fragment:EJ,fog_pars_fragment:SJ,gradientmap_pars_fragment:TJ,lightmap_pars_fragment:AJ,lights_lambert_fragment:xJ,lights_lambert_pars_fragment:RJ,lights_pars_begin:bJ,lights_toon_fragment:MJ,lights_toon_pars_fragment:CJ,lights_phong_fragment:yJ,lights_phong_pars_fragment:PJ,lights_physical_fragment:LJ,lights_physical_pars_fragment:DJ,lights_fragment_begin:OJ,lights_fragment_maps:NJ,lights_fragment_end:wJ,lightprobes_pars_fragment:FJ,logdepthbuf_fragment:BJ,logdepthbuf_pars_fragment:UJ,logdepthbuf_pars_vertex:VJ,logdepthbuf_vertex:GJ,map_fragment:kJ,map_pars_fragment:WJ,map_particle_fragment:HJ,map_particle_pars_fragment:zJ,metalnessmap_fragment:XJ,metalnessmap_pars_fragment:YJ,morphinstance_vertex:KJ,morphcolor_vertex:jJ,morphnormal_vertex:qJ,morphtarget_pars_vertex:ZJ,morphtarget_vertex:QJ,normal_fragment_begin:$J,normal_fragment_maps:JJ,normal_pars_fragment:eee,normal_pars_vertex:tee,normal_vertex:iee,normalmap_pars_fragment:ree,clearcoat_normal_fragment_begin:nee,clearcoat_normal_fragment_maps:see,clearcoat_pars_fragment:aee,iridescence_pars_fragment:oee,opaque_fragment:lee,packing:cee,premultiplied_alpha_fragment:fee,project_vertex:hee,dithering_fragment:dee,dithering_pars_fragment:uee,roughnessmap_fragment:mee,roughnessmap_pars_fragment:pee,shadowmap_pars_fragment:_ee,shadowmap_pars_vertex:gee,shadowmap_vertex:vee,shadowmask_pars_fragment:Eee,skinbase_vertex:See,skinning_pars_vertex:Tee,skinning_vertex:Aee,skinnormal_vertex:xee,specularmap_fragment:Ree,specularmap_pars_fragment:bee,tonemapping_fragment:Iee,tonemapping_pars_fragment:Mee,transmission_fragment:Cee,transmission_pars_fragment:yee,uv_pars_fragment:Pee,uv_pars_vertex:Lee,uv_vertex:Dee,worldpos_vertex:Oee,background_vert:Nee,background_frag:wee,backgroundCube_vert:Fee,backgroundCube_frag:Bee,cube_vert:Uee,cube_frag:Vee,depth_vert:Gee,depth_frag:kee,distance_vert:Wee,distance_frag:Hee,equirect_vert:zee,equirect_frag:Xee,linedashed_vert:Yee,linedashed_frag:Kee,meshbasic_vert:jee,meshbasic_frag:qee,meshlambert_vert:Zee,meshlambert_frag:Qee,meshmatcap_vert:$ee,meshmatcap_frag:Jee,meshnormal_vert:ete,meshnormal_frag:tte,meshphong_vert:ite,meshphong_frag:rte,meshphysical_vert:nte,meshphysical_frag:ste,meshtoon_vert:ate,meshtoon_frag:ote,points_vert:lte,points_frag:cte,shadow_vert:fte,shadow_frag:hte,sprite_vert:dte,sprite_frag:ute},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}}},Yo={basic:{uniforms:Dn([pt.common,pt.specularmap,pt.envmap,pt.aomap,pt.lightmap,pt.fog]),vertexShader:hi.meshbasic_vert,fragmentShader:hi.meshbasic_frag},lambert:{uniforms:Dn([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:Dn([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:Dn([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:Dn([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:Dn([pt.common,pt.bumpmap,pt.normalmap,pt.displacementmap,pt.fog,{matcap:{value:null}}]),vertexShader:hi.meshmatcap_vert,fragmentShader:hi.meshmatcap_frag},points:{uniforms:Dn([pt.points,pt.fog]),vertexShader:hi.points_vert,fragmentShader:hi.points_frag},dashed:{uniforms:Dn([pt.common,pt.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:hi.linedashed_vert,fragmentShader:hi.linedashed_frag},depth:{uniforms:Dn([pt.common,pt.displacementmap]),vertexShader:hi.depth_vert,fragmentShader:hi.depth_frag},normal:{uniforms:Dn([pt.common,pt.bumpmap,pt.normalmap,pt.displacementmap,{opacity:{value:1}}]),vertexShader:hi.meshnormal_vert,fragmentShader:hi.meshnormal_frag},sprite:{uniforms:Dn([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:Dn([pt.common,pt.displacementmap,{referencePosition:{value:new se},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:hi.distance_vert,fragmentShader:hi.distance_frag},shadow:{uniforms:Dn([pt.lights,pt.fog,{color:{value:new ft(0)},opacity:{value:1}}]),vertexShader:hi.shadow_vert,fragmentShader:hi.shadow_frag}};Yo.physical={uniforms:Dn([Yo.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};BS={r:0,b:0,g:0},mte=new li,t3=new ri;t3.set(-1,0,0,0,1,0,0,0,1);nf=4,D1=[.125,.215,.35,.446,.526,.582],Mh=20,Ste=256,P_=new Ss,O1=new ft,DI=null,OI=0,NI=0,wI=!1,Tte=new se,Nu=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=Tte}=s;DI=this._renderer.getRenderTarget(),OI=this._renderer.getActiveCubeFace(),NI=this._renderer.getActiveMipmapLevel(),wI=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=F1(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=w1(),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===ef||e.mapping===Rh;r?(this._cubemapMaterial===null&&(this._cubemapMaterial=F1()),this._cubemapMaterial.uniforms.flipEnvMap.value=e.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=w1());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;Du(t,0,0,3*l,2*l),i.setRenderTarget(t),i.render(a,P_)}_applyPMREM(e){let t=this._renderer,i=t.autoClear;t.autoClear=!1;let r=this._lodMeshes.length;for(let s=1;sm-nf?i-m+nf:0),g=4*(this._cubeSize-p);l.envMap.value=e.texture,l.roughness.value=u,l.mipInt.value=m-t,Du(s,_,g,3*p,2*p),r.setRenderTarget(s),r.render(o,P_),l.envMap.value=s.texture,l.roughness.value=0,l.mipInt.value=m-i,Du(e,_,g,3*p,2*p),r.setRenderTarget(e),r.render(o,P_)}_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*Mh-1),p=s/m,_=isFinite(s)?1+Math.floor(f*p):Mh;_>Mh&&Ct(`sigmaRadians, ${s}, is too large and will clip, as it requested ${_} samples when the maximum is set to ${Mh}`);let g=[],v=0;for(let R=0;Rx-nf?r-x+nf:0),S=4*(this._cubeSize-T);Du(t,E,S,3*T,2*T),l.setRenderTarget(t),l.render(h,P_)}};VS=class extends js{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 a_(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 Kc(5,5,5),s=new js({name:"CubemapFromEquirect",uniforms:Rh(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader,side:_n,blending:Wo});s.uniforms.tEquirect.value=t;let a=new Jt(r,s),o=t.minFilter;return t.minFilter===$a&&(t.minFilter=wr),new BE(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)}};yte={[eI]:"LINEAR_TONE_MAPPING",[tI]:"REINHARD_TONE_MAPPING",[iI]:"CINEON_TONE_MAPPING",[rI]:"ACES_FILMIC_TONE_MAPPING",[sI]:"AGX_TONE_MAPPING",[aI]:"NEUTRAL_TONE_MAPPING",[nI]:"CUSTOM_TONE_MAPPING"};$1=new Ar,OI=new yl(1,1),J1=new $p,e3=new RE,t3=new s_,O1=[],N1=[],w1=new Float32Array(16),F1=new Float32Array(9),B1=new Float32Array(4);NI=class{constructor(e,t,i){this.id=e,this.addr=i,this.cache=[],this.type=t.type,this.setValue=Zte(t.type)}},wI=class{constructor(e,t,i){this.id=e,this.addr=i,this.cache=[],this.type=t.type,this.size=t.size,this.setValue=_ie(t.type)}},FI=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)}}},LI=/(\w+)(\])?(\[|\.)?/g;Lu=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}};vie=37297,Eie=0;G1=new ri;xie={[eI]:"Linear",[tI]:"Reinhard",[iI]:"Cineon",[rI]:"ACESFilmic",[sI]:"AgX",[aI]:"Neutral",[nI]:"Custom"};NS=new se;yie=/^[ \t]*#include +<([\w\d./]+)>/gm;Pie=new Map;Die=/#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;Nie={[v_]:"SHADOWMAP_TYPE_PCF",[Ru]:"SHADOWMAP_TYPE_VSM"};Fie={[$c]:"ENVMAP_TYPE_CUBE",[Ah]:"ENVMAP_TYPE_CUBE",[S_]:"ENVMAP_TYPE_CUBE_UV"};Uie={[Ah]:"ENVMAP_MODE_REFRACTION"};Gie={[E_]:"ENVMAP_BLENDING_MULTIPLY",[s1]:"ENVMAP_BLENDING_MIX",[a1]:"ENVMAP_BLENDING_ADD"};zie=0,UI=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 VI(e),t.set(e,i)),i}},VI=class{constructor(e){this.id=zie++,this.code=e,this.usedTimes=0}};$ie=0;ire=`void main() { + `},r=new qc(5,5,5),s=new qs({name:"CubemapFromEquirect",uniforms:Ih(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader,side:_n,blending:Ho});s.uniforms.tEquirect.value=t;let a=new ti(r,s),o=t.minFilter;return t.minFilter===$a&&(t.minFilter=Fr),new kE(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)}};Dte={[sI]:"LINEAR_TONE_MAPPING",[aI]:"REINHARD_TONE_MAPPING",[oI]:"CINEON_TONE_MAPPING",[lI]:"ACES_FILMIC_TONE_MAPPING",[fI]:"AGX_TONE_MAPPING",[hI]:"NEUTRAL_TONE_MAPPING",[cI]:"CUSTOM_TONE_MAPPING"};i3=new xr,UI=new Ll(1,1),r3=new Jp,n3=new CE,s3=new a_,B1=[],U1=[],V1=new Float32Array(16),G1=new Float32Array(9),k1=new Float32Array(4);VI=class{constructor(e,t,i){this.id=e,this.addr=i,this.cache=[],this.type=t.type,this.setValue=Jte(t.type)}},GI=class{constructor(e,t,i){this.id=e,this.addr=i,this.cache=[],this.type=t.type,this.size=t.size,this.setValue=Eie(t.type)}},kI=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)}}},FI=/(\w+)(\])?(\[|\.)?/g;Ou=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}};Tie=37297,Aie=0;z1=new ri;Iie={[sI]:"Linear",[aI]:"Reinhard",[oI]:"Cineon",[lI]:"ACESFilmic",[fI]:"AgX",[hI]:"Neutral",[cI]:"Custom"};US=new se;Die=/^[ \t]*#include +<([\w\d./]+)>/gm;Oie=new Map;wie=/#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;Bie={[E_]:"SHADOWMAP_TYPE_PCF",[Iu]:"SHADOWMAP_TYPE_VSM"};Vie={[ef]:"ENVMAP_TYPE_CUBE",[Rh]:"ENVMAP_TYPE_CUBE",[T_]:"ENVMAP_TYPE_CUBE_UV"};kie={[Rh]:"ENVMAP_MODE_REFRACTION"};Hie={[S_]:"ENVMAP_BLENDING_MULTIPLY",[c1]:"ENVMAP_BLENDING_MIX",[f1]:"ENVMAP_BLENDING_ADD"};Kie=0,HI=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 zI(e),t.set(e,i)),i}},zI=class{constructor(e){this.id=Kie++,this.code=e,this.usedTimes=0}};tre=0;sre=`void main() { gl_Position = vec4( position, 1.0 ); -}`,rre=`uniform sampler2D shadow_pass; +}`,are=`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 ); -}`,nre=[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)],sre=[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)],q1=new li,P_=new se,DI=new se;fre=` +}`,ore=[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)],lre=[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)],J1=new li,L_=new se,BI=new se;ure=` void main() { gl_Position = vec4( position, 1.0 ); -}`,hre=` +}`,mre=` uniform sampler2DArray depthColor; uniform float depthWidth; uniform float depthHeight; @@ -4103,52 +4103,52 @@ void main() { } -}`,GI=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:fre,fragmentShader:hre,uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new Jt(new vh(20,20),i)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}},kI=class extends pa{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 GI,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 L=[C,y],O=new UE,V=null,w=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(ae){let ge=E[ae];return ge===void 0&&(ge=new mu,E[ae]=ge),ge.getTargetRaySpace()},this.getControllerGrip=function(ae){let ge=E[ae];return ge===void 0&&(ge=new mu,E[ae]=ge),ge.getGripSpace()},this.getHand=function(ae){let ge=E[ae];return ge===void 0&&(ge=new mu,E[ae]=ge),ge.getHandSpace()};function N(ae){let ge=S.indexOf(ae.inputSource);if(ge===-1)return;let ne=E[ge];ne!==void 0&&(ne.update(ae.inputSource,ae.frame,c||a),ne.dispatchEvent({type:ae.type,data:ae.inputSource}))}function U(){r.removeEventListener("select",N),r.removeEventListener("selectstart",N),r.removeEventListener("selectend",N),r.removeEventListener("squeeze",N),r.removeEventListener("squeezestart",N),r.removeEventListener("squeezeend",N),r.removeEventListener("end",U),r.removeEventListener("inputsourceschange",H);for(let ae=0;ae=0&&(S[ue]=null,E[ue].disconnect(ne))}for(let ge=0;ge=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 ee=new se,q=new se;function te(ae,ge,ne){ee.setFromMatrixPosition(ge.matrixWorld),q.setFromMatrixPosition(ne.matrixWorld);let ue=ee.distanceTo(q),De=ge.projectionMatrix.elements,de=ne.projectionMatrix.elements,Ie=De[14]/(De[10]-1),Ze=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=Ie*je,xi=Ie*$t,oe=ue/(-je+$t),Vi=oe*-je;if(ge.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(ge.projectionMatrix),ae.projectionMatrixInverse.copy(ge.projectionMatrixInverse);else{let ii=Ie+oe,Fi=Ze+oe,ot=Dt-Vi,Li=xi+(ue-Vi),X=Tt*Ze/Fi*ii,B=Xe*Ze/Fi*ii;ae.projectionMatrix.makePerspective(ot,Li,X,B,ii,Fi),ae.projectionMatrixInverse.copy(ae.projectionMatrix).invert()}}function z(ae,ge){ge===null?ae.matrixWorld.copy(ae.matrix):ae.matrixWorld.multiplyMatrices(ge.matrixWorld,ae.matrix),ae.matrixWorldInverse.copy(ae.matrixWorld).invert()}this.updateCamera=function(ae){if(r===null)return;let ge=ae.near,ne=ae.far;_.texture!==null&&(_.depthNear>0&&(ge=_.depthNear),_.depthFar>0&&(ne=_.depthFar)),O.near=y.near=C.near=ge,O.far=y.far=C.far=ne,(V!==O.near||w!==O.far)&&(r.updateRenderState({depthNear:O.near,depthFar:O.far}),V=O.near,w=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(W);return}setTimeout(Et,10)}ii.get("KHR_parallel_shader_compile")!==null?Et():setTimeout(Et,10)})};let Va=null;function Mp(W){Va&&Va(W)}function e0(){eh.stop()}function xv(){eh.start()}let eh=new Z1;eh.setAnimationLoop(Mp),typeof self!="undefined"&&eh.setContext(self),this.setAnimationLoop=function(W){Va=W,Ke.setAnimationLoop(W),W===null?eh.stop():eh.start()},Ke.addEventListener("sessionstart",e0),Ke.addEventListener("sessionend",xv),this.render=function(W,fe){if(fe!==void 0&&fe.isCamera!==!0){Bt("WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(L===!0)return;O!==null&&O.renderStart(W,fe);let xe=Ke.enabled===!0&&Ke.isPresenting===!0,Se=C!==null&&(N===null||xe)&&C.begin(y,N);if(W.matrixWorldAutoUpdate===!0&&W.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()),W.isScene===!0&&W.onBeforeRender(y,W,fe,N),S=ct.get(W,I.length),S.init(fe),S.state.textureUnits=B.getTextureUnits(),I.push(S),Tt.multiplyMatrices(fe.projectionMatrix,fe.matrixWorldInverse),de.setFromProjectionMatrix(Tt,Ya,fe.reversedDepth),Ze=this.localClippingEnabled,Ie=St.init(this.clippingPlanes,Ze),E=be.get(W,R.length),E.init(),R.push(E),Ke.enabled===!0&&Ke.isPresenting===!0){let Rt=y.xr.getDepthSensingMesh();Rt!==null&&t0(Rt,fe,-1/0,y.sortObjects)}t0(W,fe,0,y.sortObjects),E.finish(),y.sortObjects===!0&&E.sort(ae,ge),Dt=Ke.enabled===!1||Ke.isPresenting===!1||Ke.hasDepthSensing()===!1,Dt&&Qe.addToRenderList(E,W),this.info.render.frame++,Ie===!0&&St.beginShadows();let Te=S.state.shadowsArray;if(nt.render(Te,W,fe),Ie===!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&&Ew(Rt,_t,W,fe),Dt&&Qe.render(W),vw(E,W,fe)}N!==null&&w===0&&(B.updateMultisampleRenderTarget(N),B.updateRenderTargetMipmap(N)),Se&&C.end(y),W.isScene===!0&&W.onAfterRender(y,W,fe),Pe.resetDefaultState(),U=-1,H=null,I.pop(),I.length>0?(S=I[I.length-1],B.setTextureUnits(S.state.textureUnits),Ie===!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 t0(W,fe,xe,Se){if(W.visible===!1)return;if(W.layers.test(fe.layers)){if(W.isGroup)xe=W.renderOrder;else if(W.isLOD)W.autoUpdate===!0&&W.update(fe);else if(W.isLightProbeGrid)S.pushLightProbeGrid(W);else if(W.isLight)S.pushLight(W),W.castShadow&&S.pushShadow(W);else if(W.isSprite){if(!W.frustumCulled||de.intersectsSprite(W)){Se&&je.setFromMatrixPosition(W.matrixWorld).applyMatrix4(Tt);let Rt=Je.update(W),_t=W.material;_t.visible&&E.push(W,Rt,_t,xe,je.z,null)}}else if((W.isMesh||W.isLine||W.isPoints)&&(!W.frustumCulled||de.intersectsObject(W))){let Rt=Je.update(W),_t=W.material;if(Se&&(W.boundingSphere!==void 0?(W.boundingSphere===null&&W.computeBoundingSphere(),je.copy(W.boundingSphere.center)):(Rt.boundingSphere===null&&Rt.computeBoundingSphere(),je.copy(Rt.boundingSphere.center)),je.applyMatrix4(W.matrixWorld).applyMatrix4(Tt)),Array.isArray(_t)){let yt=Rt.groups;for(let Lt=0,ci=yt.length;Lt0&&Rv(Te,fe,xe),Et.length>0&&Rv(Et,fe,xe),Rt.length>0&&Rv(Rt,fe,xe),ot.buffers.depth.setTest(!0),ot.buffers.depth.setMask(!0),ot.buffers.color.setMask(!0),ot.setPolygonOffset(!1)}function Ew(W,fe,xe,Se){if((xe.isScene===!0?xe.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:As,minFilter:$a,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||ee;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(xe);let ci=y.toneMapping;y.toneMapping=Ts;let ui=Se.viewport;if(Se.viewport!==void 0&&(Se.viewport=void 0),S.setupLightsView(Se),Ie===!0&&St.setGlobalState(y.clippingPlanes,Se),Rv(W,xe,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 Tw(W){if(W.uniformsList===null){let fe=W.currentProgram.getUniforms();W.uniformsList=Lu.seqWithValue(fe.seq,W.uniforms)}return W.uniformsList}function Aw(W,fe){let xe=X.get(W);xe.outputColorSpace=fe.outputColorSpace,xe.batching=fe.batching,xe.batchingColor=fe.batchingColor,xe.instancing=fe.instancing,xe.instancingColor=fe.instancingColor,xe.instancingMorph=fe.instancingMorph,xe.skinning=fe.skinning,xe.morphTargets=fe.morphTargets,xe.morphNormals=fe.morphNormals,xe.morphColors=fe.morphColors,xe.morphTargetsCount=fe.morphTargetsCount,xe.numClippingPlanes=fe.numClippingPlanes,xe.numIntersection=fe.numClipIntersection,xe.vertexAlphas=fe.vertexAlphas,xe.vertexTangents=fe.vertexTangents,xe.toneMapping=fe.toneMapping}function XZ(W,fe){if(W.length===0)return null;if(W.length===1)return W[0].texture!==null?W[0]:null;T.setFromMatrixPosition(fe.matrixWorld);for(let xe=0,Se=W.length;xe0),Ot=!!xe.morphAttributes.position,Qi=!!xe.morphAttributes.normal,Dr=!!xe.morphAttributes.color,Cr=Ts;Se.toneMapped&&(N===null||N.isXRRenderTarget===!0)&&(Cr=y.toneMapping);let ir=xe.morphAttributes.position||xe.morphAttributes.normal||xe.morphAttributes.color,In=ir!==void 0?ir.length:0,xt=X.get(Se),Gs=S.state.lights;if(Ie===!0&&(Ze===!0||W!==H)){let lr=W===H&&Se.id===U;St.setState(Se,W,lr)}let Bi=!1;Se.version===xt.__version?(xt.needsLights&&xt.lightsStateVersion!==Gs.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 la=xt.currentProgram;Bi===!0&&(la=bv(Se,fe,Te),O&&Se.isNodeMaterial&&O.onUpdateProgram(Se,la,xt));let Mo=!1,Lc=!1,Md=!1,rr=la.getUniforms(),Or=xt.uniforms;if(ot.useProgram(la.program)&&(Mo=!0,Lc=!0,Md=!0),Se.id!==U&&(U=Se.id,Lc=!0),xt.needsLights){let lr=XZ(S.state.lightProbeGridArray,Te);xt.lightProbeGrid!==lr&&(xt.lightProbeGrid=lr,Lc=!0)}if(Mo||H!==W){ot.buffers.depth.getReversed()&&W.reversedDepth!==!0&&(W._reversedDepth=!0,W.updateProjectionMatrix()),rr.setValue(oe,"projectionMatrix",W.projectionMatrix),rr.setValue(oe,"viewMatrix",W.matrixWorldInverse);let Oc=rr.map.cameraPosition;Oc!==void 0&&Oc.setValue(oe,Xe.setFromMatrixPosition(W.matrixWorld)),Fi.logarithmicDepthBuffer&&rr.setValue(oe,"logDepthBufFC",2/(Math.log(W.far+1)/Math.LN2)),(Se.isMeshPhongMaterial||Se.isMeshToonMaterial||Se.isMeshLambertMaterial||Se.isMeshBasicMaterial||Se.isMeshStandardMaterial||Se.isShaderMaterial)&&rr.setValue(oe,"isOrthographic",W.isOrthographicCamera===!0),H!==W&&(H=W,Lc=!0,Md=!0)}if(xt.needsLights&&(Gs.state.directionalShadowMap.length>0&&rr.setValue(oe,"directionalShadowMap",Gs.state.directionalShadowMap,B),Gs.state.spotShadowMap.length>0&&rr.setValue(oe,"spotShadowMap",Gs.state.spotShadowMap,B),Gs.state.pointShadowMap.length>0&&rr.setValue(oe,"pointShadowMap",Gs.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 Dc=xe.morphAttributes;if((Dc.position!==void 0||Dc.normal!==void 0||Dc.color!==void 0)&&Ht.update(Te,xe,la),(Lc||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=_re()),Lc){if(rr.setValue(oe,"toneMappingExposure",y.toneMappingExposure),xt.needsLights&&KZ(Or,Md),Et&&Se.fog===!0&&ye.refreshFogUniforms(Or,Et),ye.refreshMaterialUniforms(Or,Se,Be,Re,S.state.transmissionRenderTarget[W.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)}Lu.upload(oe,Tw(xt),Or,B)}if(Se.isShaderMaterial&&Se.uniformsNeedUpdate===!0&&(Lu.upload(oe,Tw(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 Oc=0,Cd=lr.length;Oc0&&B.useMultisampledRTT(W)===!1?Se=X.get(W).__webglMultisampledFramebuffer:Array.isArray(Lt)?Se=Lt[xe]:Se=Lt,ee.copy(W.viewport),q.copy(W.scissor),te=W.scissorTest}else ee.copy(ne).multiplyScalar(Be).floor(),q.copy(ue).multiplyScalar(Be).floor(),te=De;if(xe!==0&&(Se=qZ),ot.bindFramebuffer(oe.FRAMEBUFFER,Se)&&ot.drawBuffers(W,Se),ot.viewport(ee),ot.scissor(q),ot.setScissorTest(te),Te){let _t=X.get(W.texture);oe.framebufferTexture2D(oe.FRAMEBUFFER,oe.COLOR_ATTACHMENT0,oe.TEXTURE_CUBE_MAP_POSITIVE_X+fe,_t.__webglTexture,xe)}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<=W.width-Se&&xe>=0&&xe<=W.height-Te&&oe.readPixels(fe,xe,Se,Te,K.convert(ci),K.convert(ui),Et)}finally{let Lt=N!==null?X.get(N).__webglFramebuffer:null;ot.bindFramebuffer(oe.FRAMEBUFFER,Lt)}}},this.readRenderTargetPixelsAsync=async function(W,fe,xe,Se,Te,Et,Rt,_t=0){if(!(W&&W.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let yt=X.get(W).__webglFramebuffer;if(W.isWebGLCubeRenderTarget&&Rt!==void 0&&(yt=yt[Rt]),yt)if(fe>=0&&fe<=W.width-Se&&xe>=0&&xe<=W.height-Te){ot.bindFramebuffer(oe.FRAMEBUFFER,yt);let Lt=W.textures[_t],ci=Lt.format,ui=Lt.type;if(W.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,xe,Se,Te,K.convert(ci),K.convert(ui),0);let Qi=N!==null?X.get(N).__webglFramebuffer:null;ot.bindFramebuffer(oe.FRAMEBUFFER,Qi);let Dr=oe.fenceSync(oe.SYNC_GPU_COMMANDS_COMPLETE,0);return oe.flush(),await A1(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(W,fe=null,xe=0){let Se=Math.pow(2,-xe),Te=Math.floor(W.image.width*Se),Et=Math.floor(W.image.height*Se),Rt=fe!==null?fe.x:0,_t=fe!==null?fe.y:0;B.setTexture2D(W,0),oe.copyTexSubImage2D(oe.TEXTURE_2D,xe,0,0,Rt,_t,Te,Et),ot.unbindTexture()};let ZZ=oe.createFramebuffer(),QZ=oe.createFramebuffer();this.copyTextureToTexture=function(W,fe,xe=null,Se=null,Te=0,Et=0){let Rt,_t,yt,Lt,ci,ui,Ot,Qi,Dr,Cr=W.isCompressedTexture?W.mipmaps[Et]:W.image;if(xe!==null)Rt=xe.max.x-xe.min.x,_t=xe.max.y-xe.min.y,yt=xe.isBox3?xe.max.z-xe.min.z:1,Lt=xe.min.x,ci=xe.min.y,ui=xe.isBox3?xe.min.z:0;else{let Or=Math.pow(2,-Te);Rt=Math.floor(Cr.width*Or),_t=Math.floor(Cr.height*Or),W.isDataArrayTexture?yt=Cr.depth:W.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 Gs=ot.getParameter(oe.UNPACK_ROW_LENGTH),Bi=ot.getParameter(oe.UNPACK_IMAGE_HEIGHT),la=ot.getParameter(oe.UNPACK_SKIP_PIXELS),Mo=ot.getParameter(oe.UNPACK_SKIP_ROWS),Lc=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 Md=W.isDataArrayTexture||W.isData3DTexture,rr=fe.isDataArrayTexture||fe.isData3DTexture;if(W.isDepthTexture){let Or=X.get(W),Dc=X.get(fe),lr=X.get(Or.__renderTarget),Oc=X.get(Dc.__renderTarget);ot.bindFramebuffer(oe.READ_FRAMEBUFFER,lr.__webglFramebuffer),ot.bindFramebuffer(oe.DRAW_FRAMEBUFFER,Oc.__webglFramebuffer);for(let Cd=0;Cd{Qn();r3={type:"change"},HI={type:"start"},s3={type:"end"},VS=new wo,n3=new ua,gre=Math.cos(70*C_.DEG2RAD),en=new se,xs=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},WI=1e-6,GS=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:Zc.ROTATE,MIDDLE:Zc.DOLLY,RIGHT:Zc.PAN},this.touches={ONE:Qc.ROTATE,TWO:Qc.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 Au,this._sphericalDelta=new Au,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=Ere.bind(this),this._onPointerDown=vre.bind(this),this._onPointerUp=Sre.bind(this),this._onContextMenu=Mre.bind(this),this._onMouseWheel=xre.bind(this),this._onKeyDown=Rre.bind(this),this._onTouchStart=bre.bind(this),this._onTouchMove=Ire.bind(this),this._onMouseDown=Tre.bind(this),this._onMouseMove=Are.bind(this),this._interceptControlDown=Cre.bind(this),this._interceptControlUp=yre.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(r3),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+=xs:i>Math.PI&&(i-=xs),r<-Math.PI?r+=xs:r>Math.PI&&(r-=xs),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):(VS.origin.copy(this.object.position),VS.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(VS.direction))WI||8*(1-this._lastQuaternion.dot(this.object.quaternion))>WI||this._lastTargetPosition.distanceToSquared(this.target)>WI?(this.dispatchEvent(r3),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e!==null?xs/60*this.autoRotateSpeed*e:xs/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(xs*this._rotateDelta.x/t.clientHeight),this._rotateUp(xs*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(xs*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(-xs*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(xs*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(-xs*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(xs*this._rotateDelta.x/t.clientHeight),this._rotateUp(xs*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{Qn();kS=class extends ph{constructor(){super(),this.name="RoomEnvironment",this.position.y=-3.5;let e=new Kc;e.deleteAttribute("uv");let t=new pn({side:_n}),i=new pn,r=new Za(16777215,900,28,2);r.position.set(.418,16.199,.3),this.add(r);let s=new Jt(e,t);s.position.set(-.757,13.219,.717),s.scale.set(31.713,28.305,28.591),this.add(s);let a=new gh(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 Jt(e,Nu(50));l.position.set(-16.116,14.37,8.208),l.scale.set(.1,2.428,2.739),this.add(l);let c=new Jt(e,Nu(50));c.position.set(-16.109,18.021,-8.207),c.scale.set(.1,2.425,2.751),this.add(c);let f=new Jt(e,Nu(17));f.position.set(14.904,12.198,-1.832),f.scale.set(.15,4.265,6.331),this.add(f);let h=new Jt(e,Nu(43));h.position.set(-.462,8.89,14.52),h.scale.set(4.38,5.441,.088),this.add(h);let d=new Jt(e,Nu(20));d.position.set(3.235,11.486,-12.541),d.scale.set(2.5,2,.1),this.add(d);let u=new Jt(e,Nu(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 WS,zI,l3=M(()=>{Qn();WS=class extends fn{constructor(e){super(e)}load(e,t,i,r){let s=this,a=this.path===""?Qa.extractUrlBase(e):this.path,o=new Es(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 zI(this.resourcePath||t,this.materialOptions);return o.setCrossOrigin(this.crossOrigin),o.setManager(this.manager),o.setMaterials(a),o}},zI=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 Eh(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:DS,o=a.getHandler(e);o===null&&(o=new Th(a)),o.setCrossOrigin&&o.setCrossOrigin(this.crossOrigin);let l=o.load(e,i,r,s);return t!==void 0&&(l.mapping=t),l}}});function Nre(){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;f3.fromArray(r,e),XI.fromArray(r,t),h3.fromArray(r,i),ga.subVectors(h3,XI),d3.subVectors(f3,XI),ga.cross(d3),ga.normalize(),s.push(ga.x,ga.y,ga.z),s.push(ga.x,ga.y,ga.z),s.push(ga.x,ga.y,ga.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{Qn();Pre=/^[og]\s*(.+)?/,Lre=/^mtllib /,Dre=/^usemtl /,Ore=/^usemap /,c3=/\s+/,f3=new se,XI=new se,h3=new se,d3=new se,ga=new se,HS=new ft;zS=class extends fn{constructor(e){super(e),this.materials=null}load(e,t,i,r){let s=this,a=new Es(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 Nre;e.indexOf(`\r +}`,XI=class{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(e,t){if(this.texture===null){let i=new l_(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 qs({vertexShader:ure,fragmentShader:mre,uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new ti(new Sh(20,20),i)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}},YI=class extends _a{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 XI,g={},v=t.getContextAttributes(),x=null,T=null,E=[],S=[],R=new It,I=null,C=new hr;C.viewport=new Ji;let y=new hr;y.viewport=new Ji;let L=[C,y],O=new WE,V=null,w=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(ae){let ge=E[ae];return ge===void 0&&(ge=new _u,E[ae]=ge),ge.getTargetRaySpace()},this.getControllerGrip=function(ae){let ge=E[ae];return ge===void 0&&(ge=new _u,E[ae]=ge),ge.getGripSpace()},this.getHand=function(ae){let ge=E[ae];return ge===void 0&&(ge=new _u,E[ae]=ge),ge.getHandSpace()};function N(ae){let ge=S.indexOf(ae.inputSource);if(ge===-1)return;let ne=E[ge];ne!==void 0&&(ne.update(ae.inputSource,ae.frame,c||a),ne.dispatchEvent({type:ae.type,data:ae.inputSource}))}function U(){r.removeEventListener("select",N),r.removeEventListener("selectstart",N),r.removeEventListener("selectend",N),r.removeEventListener("squeeze",N),r.removeEventListener("squeezestart",N),r.removeEventListener("squeezeend",N),r.removeEventListener("end",U),r.removeEventListener("inputsourceschange",H);for(let ae=0;ae=0&&(S[ue]=null,E[ue].disconnect(ne))}for(let ge=0;ge=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 ee=new se,q=new se;function te(ae,ge,ne){ee.setFromMatrixPosition(ge.matrixWorld),q.setFromMatrixPosition(ne.matrixWorld);let ue=ee.distanceTo(q),De=ge.projectionMatrix.elements,de=ne.projectionMatrix.elements,Ie=De[14]/(De[10]-1),Ze=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=Ie*je,xi=Ie*$t,oe=ue/(-je+$t),Vi=oe*-je;if(ge.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(ge.projectionMatrix),ae.projectionMatrixInverse.copy(ge.projectionMatrixInverse);else{let ii=Ie+oe,Fi=Ze+oe,ot=Dt-Vi,Li=xi+(ue-Vi),X=Tt*Ze/Fi*ii,B=Xe*Ze/Fi*ii;ae.projectionMatrix.makePerspective(ot,Li,X,B,ii,Fi),ae.projectionMatrixInverse.copy(ae.projectionMatrix).invert()}}function z(ae,ge){ge===null?ae.matrixWorld.copy(ae.matrix):ae.matrixWorld.multiplyMatrices(ge.matrixWorld,ae.matrix),ae.matrixWorldInverse.copy(ae.matrixWorld).invert()}this.updateCamera=function(ae){if(r===null)return;let ge=ae.near,ne=ae.far;_.texture!==null&&(_.depthNear>0&&(ge=_.depthNear),_.depthFar>0&&(ne=_.depthFar)),O.near=y.near=C.near=ge,O.far=y.far=C.far=ne,(V!==O.near||w!==O.far)&&(r.updateRenderState({depthNear:O.near,depthFar:O.far}),V=O.near,w=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(W);return}setTimeout(Et,10)}ii.get("KHR_parallel_shader_compile")!==null?Et():setTimeout(Et,10)})};let Va=null;function Cp(W){Va&&Va(W)}function s0(){ih.stop()}function Mv(){ih.start()}let ih=new e3;ih.setAnimationLoop(Cp),typeof self!="undefined"&&ih.setContext(self),this.setAnimationLoop=function(W){Va=W,Ke.setAnimationLoop(W),W===null?ih.stop():ih.start()},Ke.addEventListener("sessionstart",s0),Ke.addEventListener("sessionend",Mv),this.render=function(W,fe){if(fe!==void 0&&fe.isCamera!==!0){Bt("WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(L===!0)return;O!==null&&O.renderStart(W,fe);let xe=Ke.enabled===!0&&Ke.isPresenting===!0,Se=C!==null&&(N===null||xe)&&C.begin(y,N);if(W.matrixWorldAutoUpdate===!0&&W.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()),W.isScene===!0&&W.onBeforeRender(y,W,fe,N),S=ct.get(W,I.length),S.init(fe),S.state.textureUnits=B.getTextureUnits(),I.push(S),Tt.multiplyMatrices(fe.projectionMatrix,fe.matrixWorldInverse),de.setFromProjectionMatrix(Tt,Ya,fe.reversedDepth),Ze=this.localClippingEnabled,Ie=St.init(this.clippingPlanes,Ze),E=be.get(W,R.length),E.init(),R.push(E),Ke.enabled===!0&&Ke.isPresenting===!0){let Rt=y.xr.getDepthSensingMesh();Rt!==null&&a0(Rt,fe,-1/0,y.sortObjects)}a0(W,fe,0,y.sortObjects),E.finish(),y.sortObjects===!0&&E.sort(ae,ge),Dt=Ke.enabled===!1||Ke.isPresenting===!1||Ke.hasDepthSensing()===!1,Dt&&Qe.addToRenderList(E,W),this.info.render.frame++,Ie===!0&&St.beginShadows();let Te=S.state.shadowsArray;if(nt.render(Te,W,fe),Ie===!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&&xw(Rt,_t,W,fe),Dt&&Qe.render(W),Aw(E,W,fe)}N!==null&&w===0&&(B.updateMultisampleRenderTarget(N),B.updateRenderTargetMipmap(N)),Se&&C.end(y),W.isScene===!0&&W.onAfterRender(y,W,fe),Pe.resetDefaultState(),U=-1,H=null,I.pop(),I.length>0?(S=I[I.length-1],B.setTextureUnits(S.state.textureUnits),Ie===!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 a0(W,fe,xe,Se){if(W.visible===!1)return;if(W.layers.test(fe.layers)){if(W.isGroup)xe=W.renderOrder;else if(W.isLOD)W.autoUpdate===!0&&W.update(fe);else if(W.isLightProbeGrid)S.pushLightProbeGrid(W);else if(W.isLight)S.pushLight(W),W.castShadow&&S.pushShadow(W);else if(W.isSprite){if(!W.frustumCulled||de.intersectsSprite(W)){Se&&je.setFromMatrixPosition(W.matrixWorld).applyMatrix4(Tt);let Rt=Je.update(W),_t=W.material;_t.visible&&E.push(W,Rt,_t,xe,je.z,null)}}else if((W.isMesh||W.isLine||W.isPoints)&&(!W.frustumCulled||de.intersectsObject(W))){let Rt=Je.update(W),_t=W.material;if(Se&&(W.boundingSphere!==void 0?(W.boundingSphere===null&&W.computeBoundingSphere(),je.copy(W.boundingSphere.center)):(Rt.boundingSphere===null&&Rt.computeBoundingSphere(),je.copy(Rt.boundingSphere.center)),je.applyMatrix4(W.matrixWorld).applyMatrix4(Tt)),Array.isArray(_t)){let yt=Rt.groups;for(let Lt=0,ci=yt.length;Lt0&&Cv(Te,fe,xe),Et.length>0&&Cv(Et,fe,xe),Rt.length>0&&Cv(Rt,fe,xe),ot.buffers.depth.setTest(!0),ot.buffers.depth.setMask(!0),ot.buffers.color.setMask(!0),ot.setPolygonOffset(!1)}function xw(W,fe,xe,Se){if((xe.isScene===!0?xe.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 js(1,1,{generateMipmaps:!0,type:Ot?zo:As,minFilter:$a,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||ee;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(xe);let ci=y.toneMapping;y.toneMapping=Ts;let ui=Se.viewport;if(Se.viewport!==void 0&&(Se.viewport=void 0),S.setupLightsView(Se),Ie===!0&&St.setGlobalState(y.clippingPlanes,Se),Cv(W,xe,Se),B.updateMultisampleRenderTarget(Et),B.updateRenderTargetMipmap(Et),ii.has("WEBGL_multisampled_render_to_texture")===!1){let Ot=!1;for(let Qi=0,Or=fe.length;Qi0,Se.currentProgram=ui,Se.uniformsList=null,ui}function bw(W){if(W.uniformsList===null){let fe=W.currentProgram.getUniforms();W.uniformsList=Ou.seqWithValue(fe.seq,W.uniforms)}return W.uniformsList}function Iw(W,fe){let xe=X.get(W);xe.outputColorSpace=fe.outputColorSpace,xe.batching=fe.batching,xe.batchingColor=fe.batchingColor,xe.instancing=fe.instancing,xe.instancingColor=fe.instancingColor,xe.instancingMorph=fe.instancingMorph,xe.skinning=fe.skinning,xe.morphTargets=fe.morphTargets,xe.morphNormals=fe.morphNormals,xe.morphColors=fe.morphColors,xe.morphTargetsCount=fe.morphTargetsCount,xe.numClippingPlanes=fe.numClippingPlanes,xe.numIntersection=fe.numClipIntersection,xe.vertexAlphas=fe.vertexAlphas,xe.vertexTangents=fe.vertexTangents,xe.toneMapping=fe.toneMapping}function KZ(W,fe){if(W.length===0)return null;if(W.length===1)return W[0].texture!==null?W[0]:null;T.setFromMatrixPosition(fe.matrixWorld);for(let xe=0,Se=W.length;xe0),Ot=!!xe.morphAttributes.position,Qi=!!xe.morphAttributes.normal,Or=!!xe.morphAttributes.color,Cr=Ts;Se.toneMapped&&(N===null||N.isXRRenderTarget===!0)&&(Cr=y.toneMapping);let ir=xe.morphAttributes.position||xe.morphAttributes.normal||xe.morphAttributes.color,In=ir!==void 0?ir.length:0,xt=X.get(Se),ks=S.state.lights;if(Ie===!0&&(Ze===!0||W!==H)){let cr=W===H&&Se.id===U;St.setState(Se,W,cr)}let Bi=!1;Se.version===xt.__version?(xt.needsLights&&xt.lightsStateVersion!==ks.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!==Or||xt.toneMapping!==Cr||xt.morphTargetsCount!==In||!!xt.lightProbeGrid!=S.state.lightProbeGridArray.length>0)&&(Bi=!0):(Bi=!0,xt.__version=Se.version);let ca=xt.currentProgram;Bi===!0&&(ca=yv(Se,fe,Te),O&&Se.isNodeMaterial&&O.onUpdateProgram(Se,ca,xt));let Co=!1,Oc=!1,yd=!1,rr=ca.getUniforms(),Nr=xt.uniforms;if(ot.useProgram(ca.program)&&(Co=!0,Oc=!0,yd=!0),Se.id!==U&&(U=Se.id,Oc=!0),xt.needsLights){let cr=KZ(S.state.lightProbeGridArray,Te);xt.lightProbeGrid!==cr&&(xt.lightProbeGrid=cr,Oc=!0)}if(Co||H!==W){ot.buffers.depth.getReversed()&&W.reversedDepth!==!0&&(W._reversedDepth=!0,W.updateProjectionMatrix()),rr.setValue(oe,"projectionMatrix",W.projectionMatrix),rr.setValue(oe,"viewMatrix",W.matrixWorldInverse);let wc=rr.map.cameraPosition;wc!==void 0&&wc.setValue(oe,Xe.setFromMatrixPosition(W.matrixWorld)),Fi.logarithmicDepthBuffer&&rr.setValue(oe,"logDepthBufFC",2/(Math.log(W.far+1)/Math.LN2)),(Se.isMeshPhongMaterial||Se.isMeshToonMaterial||Se.isMeshLambertMaterial||Se.isMeshBasicMaterial||Se.isMeshStandardMaterial||Se.isShaderMaterial)&&rr.setValue(oe,"isOrthographic",W.isOrthographicCamera===!0),H!==W&&(H=W,Oc=!0,yd=!0)}if(xt.needsLights&&(ks.state.directionalShadowMap.length>0&&rr.setValue(oe,"directionalShadowMap",ks.state.directionalShadowMap,B),ks.state.spotShadowMap.length>0&&rr.setValue(oe,"spotShadowMap",ks.state.spotShadowMap,B),ks.state.pointShadowMap.length>0&&rr.setValue(oe,"pointShadowMap",ks.state.pointShadowMap,B)),Te.isSkinnedMesh){rr.setOptional(oe,Te,"bindMatrix"),rr.setOptional(oe,Te,"bindMatrixInverse");let cr=Te.skeleton;cr&&(cr.boneTexture===null&&cr.computeBoneTexture(),rr.setValue(oe,"boneTexture",cr.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 Nc=xe.morphAttributes;if((Nc.position!==void 0||Nc.normal!==void 0||Nc.color!==void 0)&&Ht.update(Te,xe,ca),(Oc||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&&(Nr.envMapIntensity.value=fe.environmentIntensity),Nr.dfgLUT!==void 0&&(Nr.dfgLUT.value=Ere()),Oc){if(rr.setValue(oe,"toneMappingExposure",y.toneMappingExposure),xt.needsLights&&qZ(Nr,yd),Et&&Se.fog===!0&&ye.refreshFogUniforms(Nr,Et),ye.refreshMaterialUniforms(Nr,Se,Be,Re,S.state.transmissionRenderTarget[W.id]),xt.needsLights&&xt.lightProbeGrid){let cr=xt.lightProbeGrid;Nr.probesSH.value=cr.texture,Nr.probesMin.value.copy(cr.boundingBox.min),Nr.probesMax.value.copy(cr.boundingBox.max),Nr.probesResolution.value.copy(cr.resolution)}Ou.upload(oe,bw(xt),Nr,B)}if(Se.isShaderMaterial&&Se.uniformsNeedUpdate===!0&&(Ou.upload(oe,bw(xt),Nr,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 cr=Se.uniformsGroups;for(let wc=0,Pd=cr.length;wc0&&B.useMultisampledRTT(W)===!1?Se=X.get(W).__webglMultisampledFramebuffer:Array.isArray(Lt)?Se=Lt[xe]:Se=Lt,ee.copy(W.viewport),q.copy(W.scissor),te=W.scissorTest}else ee.copy(ne).multiplyScalar(Be).floor(),q.copy(ue).multiplyScalar(Be).floor(),te=De;if(xe!==0&&(Se=QZ),ot.bindFramebuffer(oe.FRAMEBUFFER,Se)&&ot.drawBuffers(W,Se),ot.viewport(ee),ot.scissor(q),ot.setScissorTest(te),Te){let _t=X.get(W.texture);oe.framebufferTexture2D(oe.FRAMEBUFFER,oe.COLOR_ATTACHMENT0,oe.TEXTURE_CUBE_MAP_POSITIVE_X+fe,_t.__webglTexture,xe)}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<=W.width-Se&&xe>=0&&xe<=W.height-Te&&oe.readPixels(fe,xe,Se,Te,K.convert(ci),K.convert(ui),Et)}finally{let Lt=N!==null?X.get(N).__webglFramebuffer:null;ot.bindFramebuffer(oe.FRAMEBUFFER,Lt)}}},this.readRenderTargetPixelsAsync=async function(W,fe,xe,Se,Te,Et,Rt,_t=0){if(!(W&&W.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let yt=X.get(W).__webglFramebuffer;if(W.isWebGLCubeRenderTarget&&Rt!==void 0&&(yt=yt[Rt]),yt)if(fe>=0&&fe<=W.width-Se&&xe>=0&&xe<=W.height-Te){ot.bindFramebuffer(oe.FRAMEBUFFER,yt);let Lt=W.textures[_t],ci=Lt.format,ui=Lt.type;if(W.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,xe,Se,Te,K.convert(ci),K.convert(ui),0);let Qi=N!==null?X.get(N).__webglFramebuffer:null;ot.bindFramebuffer(oe.FRAMEBUFFER,Qi);let Or=oe.fenceSync(oe.SYNC_GPU_COMMANDS_COMPLETE,0);return oe.flush(),await I1(oe,Or,4),oe.bindBuffer(oe.PIXEL_PACK_BUFFER,Ot),oe.getBufferSubData(oe.PIXEL_PACK_BUFFER,0,Et),oe.deleteBuffer(Ot),oe.deleteSync(Or),Et}else throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")},this.copyFramebufferToTexture=function(W,fe=null,xe=0){let Se=Math.pow(2,-xe),Te=Math.floor(W.image.width*Se),Et=Math.floor(W.image.height*Se),Rt=fe!==null?fe.x:0,_t=fe!==null?fe.y:0;B.setTexture2D(W,0),oe.copyTexSubImage2D(oe.TEXTURE_2D,xe,0,0,Rt,_t,Te,Et),ot.unbindTexture()};let $Z=oe.createFramebuffer(),JZ=oe.createFramebuffer();this.copyTextureToTexture=function(W,fe,xe=null,Se=null,Te=0,Et=0){let Rt,_t,yt,Lt,ci,ui,Ot,Qi,Or,Cr=W.isCompressedTexture?W.mipmaps[Et]:W.image;if(xe!==null)Rt=xe.max.x-xe.min.x,_t=xe.max.y-xe.min.y,yt=xe.isBox3?xe.max.z-xe.min.z:1,Lt=xe.min.x,ci=xe.min.y,ui=xe.isBox3?xe.min.z:0;else{let Nr=Math.pow(2,-Te);Rt=Math.floor(Cr.width*Nr),_t=Math.floor(Cr.height*Nr),W.isDataArrayTexture?yt=Cr.depth:W.isData3DTexture?yt=Math.floor(Cr.depth*Nr):yt=1,Lt=0,ci=0,ui=0}Se!==null?(Ot=Se.x,Qi=Se.y,Or=Se.z):(Ot=0,Qi=0,Or=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 ks=ot.getParameter(oe.UNPACK_ROW_LENGTH),Bi=ot.getParameter(oe.UNPACK_IMAGE_HEIGHT),ca=ot.getParameter(oe.UNPACK_SKIP_PIXELS),Co=ot.getParameter(oe.UNPACK_SKIP_ROWS),Oc=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 yd=W.isDataArrayTexture||W.isData3DTexture,rr=fe.isDataArrayTexture||fe.isData3DTexture;if(W.isDepthTexture){let Nr=X.get(W),Nc=X.get(fe),cr=X.get(Nr.__renderTarget),wc=X.get(Nc.__renderTarget);ot.bindFramebuffer(oe.READ_FRAMEBUFFER,cr.__webglFramebuffer),ot.bindFramebuffer(oe.DRAW_FRAMEBUFFER,wc.__webglFramebuffer);for(let Pd=0;Pd{$n();o3={type:"change"},jI={type:"start"},c3={type:"end"},HS=new Fo,l3=new ma,Sre=Math.cos(70*y_.DEG2RAD),tn=new se,xs=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},KI=1e-6,zS=class extends v_{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:$c.ROTATE,MIDDLE:$c.DOLLY,RIGHT:$c.PAN},this.touches={ONE:Jc.ROTATE,TWO:Jc.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 $r,this._lastTargetPosition=new se,this._quat=new $r().setFromUnitVectors(e.up,new se(0,1,0)),this._quatInverse=this._quat.clone().invert(),this._spherical=new Ru,this._sphericalDelta=new Ru,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=Are.bind(this),this._onPointerDown=Tre.bind(this),this._onPointerUp=xre.bind(this),this._onContextMenu=Pre.bind(this),this._onMouseWheel=Ire.bind(this),this._onKeyDown=Mre.bind(this),this._onTouchStart=Cre.bind(this),this._onTouchMove=yre.bind(this),this._onMouseDown=Rre.bind(this),this._onMouseMove=bre.bind(this),this._interceptControlDown=Lre.bind(this),this._interceptControlUp=Dre.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(o3),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;tn.copy(t).sub(this.target),tn.applyQuaternion(this._quat),this._spherical.setFromVector3(tn),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+=xs:i>Math.PI&&(i-=xs),r<-Math.PI?r+=xs:r>Math.PI&&(r-=xs),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(tn.setFromSpherical(this._spherical),tn.applyQuaternion(this._quatInverse),t.copy(this.target).add(tn),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=tn.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=tn.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):(HS.origin.copy(this.object.position),HS.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(HS.direction))KI||8*(1-this._lastQuaternion.dot(this.object.quaternion))>KI||this._lastTargetPosition.distanceToSquared(this.target)>KI?(this.dispatchEvent(o3),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e!==null?xs/60*this.autoRotateSpeed*e:xs/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){tn.setFromMatrixColumn(t,0),tn.multiplyScalar(-e),this._panOffset.add(tn)}_panUp(e,t){this.screenSpacePanning===!0?tn.setFromMatrixColumn(t,1):(tn.setFromMatrixColumn(t,0),tn.crossVectors(this.object.up,tn)),tn.multiplyScalar(e),this._panOffset.add(tn)}_pan(e,t){let i=this.domElement;if(this.object.isPerspectiveCamera){let r=this.object.position;tn.copy(r).sub(this.target);let s=tn.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(xs*this._rotateDelta.x/t.clientHeight),this._rotateUp(xs*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(xs*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(-xs*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(xs*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(-xs*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(xs*this._rotateDelta.x/t.clientHeight),this._rotateUp(xs*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{$n();XS=class extends gh{constructor(){super(),this.name="RoomEnvironment",this.position.y=-3.5;let e=new qc;e.deleteAttribute("uv");let t=new pn({side:_n}),i=new pn,r=new Za(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 Eh(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,Fu(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,Fu(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,Fu(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,Fu(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,Fu(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,Fu(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 YS,qI,d3=M(()=>{$n();YS=class extends fn{constructor(e){super(e)}load(e,t,i,r){let s=this,a=this.path===""?Qa.extractUrlBase(e):this.path,o=new Es(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 qI(this.resourcePath||t,this.materialOptions);return o.setCrossOrigin(this.crossOrigin),o.setManager(this.manager),o.setMaterials(a),o}},qI=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:Ks,this.wrap=this.options.wrap!==void 0?this.options.wrap:No}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 Th(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:FS,o=a.getHandler(e);o===null&&(o=new xh(a)),o.setCrossOrigin&&o.setCrossOrigin(this.crossOrigin);let l=o.load(e,i,r,s);return t!==void 0&&(l.mapping=t),l}}});function Bre(){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;m3.fromArray(r,e),ZI.fromArray(r,t),p3.fromArray(r,i),va.subVectors(p3,ZI),_3.subVectors(m3,ZI),va.cross(_3),va.normalize(),s.push(va.x,va.y,va.z),s.push(va.x,va.y,va.z),s.push(va.x,va.y,va.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{$n();Ore=/^[og]\s*(.+)?/,Nre=/^mtllib /,wre=/^usemtl /,Fre=/^usemap /,u3=/\s+/,m3=new se,ZI=new se,p3=new se,_3=new se,va=new se,KS=new ft;jS=class extends fn{constructor(e){super(e),this.materials=null}load(e,t,i,r){let s=this,a=new Es(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 Bre;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?(HS.setRGB(parseFloat(h[4]),parseFloat(h[5]),parseFloat(h[6]),Ii),t.colors.push(HS.r,HS.g,HS.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(c3),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 ps({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 _s(l,o);s.add(c)}return s}}});var Rs,XS,YI,m3=M(()=>{Qn();Rs=new ft,XS=class extends fn{constructor(e){super(e),this.propertyNameMapping={},this.customPropertyMapping={}}load(e,t,i,r){let s=this,a=new Es(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 L={type:C[0]};return L.type==="list"?(L.name=C[3],L.countType=C[1],L.itemType=C[2]):L.name=C[1],L.name in y&&(L.name=y[L.name]),L}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&&(Rs.setRGB(v[x.attrR]/255,v[x.attrG]/255,v[x.attrB]/255,Ii),_.colors.push(Rs.r,Rs.g,Rs.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&&(Rs.setRGB(v[x.attrR]/255,v[x.attrG]/255,v[x.attrB]/255,Ii),_.faceVertexColors.push(Rs.r,Rs.g,Rs.b),_.faceVertexColors.push(Rs.r,Rs.g,Rs.b),_.faceVertexColors.push(Rs.r,Rs.g,Rs.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 YS,p3=M(()=>{Qn();YS=class extends fn{constructor(e){super(e)}load(e,t,i,r){let s=this,a=new Es(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 H=O+U*12,ee=L*3*3+(U-1)*3;I[ee]=f.getFloat32(H,!0),I[ee+1]=f.getFloat32(H+4,!0),I[ee+2]=f.getFloat32(H+8,!0),C[ee]=V,C[ee+1]=w,C[ee+2]=N,p&&(y.setRGB(d,u,m,Ii),_[ee]=y.r,_[ee+1]=y.g,_[ee+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],L=(S=u.exec(y))!==null?S[1]:"";for(T.push(L);(S=d.exec(y))!==null;){let w=0,N=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]),N++;for(;(S=_.exec(U))!==null;)v.push(parseFloat(S[1]),parseFloat(S[2]),parseFloat(S[3])),x.push(E.x,E.y,E.z),w++,C++;N!==1&&console.error("THREE.STLLoader: Something isn't right with the normal of face number "+m),w!==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{Qn()});function g3(n){let e=new Map,t=new Map,i=n.clone();return v3(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 v3(n,e,t){t(n,e);for(let i=0;i{});function wre(){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 Ure(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 Ih(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 Vre(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 zre(n,e,t){let i=e.attributes,r=new pr;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=SM(wu[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{Qn();_3();E3();KS=class extends fn{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(t){return new eM(t)}),this.register(function(t){return new tM(t)}),this.register(function(t){return new fM(t)}),this.register(function(t){return new hM(t)}),this.register(function(t){return new dM(t)}),this.register(function(t){return new rM(t)}),this.register(function(t){return new nM(t)}),this.register(function(t){return new sM(t)}),this.register(function(t){return new aM(t)}),this.register(function(t){return new JI(t)}),this.register(function(t){return new oM(t)}),this.register(function(t){return new iM(t)}),this.register(function(t){return new cM(t)}),this.register(function(t){return new lM(t)}),this.register(function(t){return new QI(t)}),this.register(function(t){return new jS(t,Ei.EXT_MESHOPT_COMPRESSION)}),this.register(function(t){return new jS(t,Ei.KHR_MESHOPT_COMPRESSION)}),this.register(function(t){return new uM(t)})}load(e,t,i,r){let s=this,a;if(this.resourcePath!=="")a=this.resourcePath;else if(this.path!==""){let c=Qa.extractUrlBase(e);a=Qa.resolveURL(c,this.path)}else a=Qa.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 Es(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))===R3){try{a[Ei.KHR_BINARY_GLTF]=new mM(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 TM(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)}},hM=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)}},dM=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)}},jS=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}},uM=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!==va.TRIANGLES&&c.mode!==va.TRIANGLE_STRIP&&c.mode!==va.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 gh(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 Th(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 Es(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 Ih(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=T3[d.magFilter]||wr,f.minFilter=T3[d.minFilter]||$a,f.wrapS=A3[d.wrapS]||Oo,f.wrapT=A3[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 Ar(p);_.needsUpdate=!0,d(_)}),t.load(Qa.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||Wre(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 ps,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 Pn,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],qn),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=_a);let f=s.alphaMode||qI.OPAQUE;if(f===qI.BLEND?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,f===qI.MASK&&(o.alphaTest=s.alphaCutoff!==void 0?s.alphaCutoff:.5)),s.normalTexture!==void 0&&a!==Zn&&(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!==Zn&&(c.push(t.assignTexture(o,"aoMap",s.occlusionTexture)),s.occlusionTexture.strength!==void 0&&(o.aoMapIntensity=s.occlusionTexture.strength)),s.emissiveFactor!==void 0&&a!==Zn){let h=s.emissiveFactor;o.emissive=new ft().setRGB(h[0],h[1],h[2],qn)}return s.emissiveTexture!==void 0&&a!==Zn&&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&&Ih(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 x3(l,o,t)})}let a=[];for(let o=0,l=e.length;o0&&Gre(g,s),g.name=t.createUniqueName(s.name||"mesh_"+e),Yo(g,s),_.extensions&&Ih(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 _u: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&&Ih(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 Ar)&&h.set(d,u);return f.traverse(d=>{let u=r.associations.get(d);u!=null&&h.set(d,u)}),h};return r.associations=c(s),s})}_createAnimationTracks(e,t,i,r,s){let a=[],o=e.name?e.name:e.uuid,l=[];function c(u){u.morphTargetInfluences&&l.push(u.name?u.name:u.uuid)}rf[s.path]===rf.weights?(c(e),e.isGroup&&e.children.forEach(c)):l.push(o);let f;switch(rf[s.path]){case rf.weights:f=Uo;break;case rf.rotation:f=Vo;break;case rf.translation:case rf.scale:f=Go;break;default:i.itemSize===1?f=Uo:f=Go;break}let h=r.interpolation!==void 0?Bre[r.interpolation]:uh,d=this._getArrayFromAccessor(i);for(let u=0,m=l.length;u{"use strict"});function Yre(n){return Xre.has(n)}function QS(n,e){let t=n,i={textureCount:0,colorTextureCount:0,srgbColorTextureCount:0};for(let[r,s]of Object.entries(t))s instanceof Ar&&(i.textureCount++,s.anisotropy=Math.max(s.anisotropy,e),Yre(r)&&(i.colorTextureCount++,s.colorSpace=Ii,i.srgbColorTextureCount++),s.needsUpdate=!0);return n.needsUpdate=!0,i}function AM(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 Xre,xM=M(()=>{"use strict";Qn();Xre=new Set(["map","emissiveMap","specularMap","specularColorMap","sheenColorMap","clearcoatColorMap"])});function C3(n){var t,i,r;let e=(i=(t=n.split(".").pop())==null?void 0:t.toLowerCase())!=null?i:"png";return(r=Kre[e])!=null?r:`image/${e}`}function qre(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 Zre(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 M3(n,e,t){let i=ks(e,t);try{return{data:await n(i),path:i}}catch(r){throw new Error(`Missing external model resource: ${i}`)}}function Qre(n,e,t){let i=ds(e),r=i.replace(/\.[^.]+$/,""),s=qr(t),a=[ks(n,e),ks(n,i)];if(s)for(let o of I3)a.push(ks(n,`${s}.${o}`));for(let o of I3){let l=`${r}.${o}`;l!==i&&a.push(ks(n,l))}return a}async function y3(n,e,t,i){var l,c;let r=new KS,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 M3(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 M3(t,d,g.uri);g.uri=`data:${C3(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 P3(n){let t=new YS().parse(n),i=t.hasAttribute("color")?new pn({color:16777215,vertexColors:!0}):new pn({color:13421772}),r=new Jt(t,i);return r.name=ds("")||"stl-model",r}async function L3(n){let t=new XS().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 Jt(t,a)}let s=new ps({size:AM(t),vertexColors:!0});return new _s(t,s)}if(i){t.hasAttribute("normal")||t.computeVertexNormals();let s=new pn({color:13421772});return new Jt(t,s)}let r=new ps({size:AM(t),color:13421772});return new _s(t,r)}function $re(n){return n?Array.isArray(n)?n:[n]:[]}function Jre(n){n.traverse(e=>{if(!(e instanceof Jt))return;let t=e;for(let i of $re(t.material))QS(i,1)})}async function D3(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=qre(a[1]),f=Op(t),h=ks(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 WS().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 zS;s&&o.setMaterials(s);let l=o.parse(i);return Jre(l),{object:l,warnings:r}}var Kre,I3,jre,O3=M(()=>{"use strict";l3();u3();m3();p3();b3();Qn();Ws();ZS();xM();Kre={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"},I3=["jpg","jpeg","png","bmp","tga","webp","tif","tiff"],jre=/^\s*(map_Kd|map_Ka|map_Ks|map_Ns|map_d|map_bump|bump|disp|decal)\s+(.+)/i});function _r(){return N3.Platform.isMobile}var N3,Qs=M(()=>{"use strict";N3=require("obsidian")});function O_(n,e){return{min:Zr(n),max:Zr(e)}}function w3(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 xr(n){return Ud(n.max,n.min)}function tn(n){return ih(n.min,Np(xr(n),.5))}function F3(n){return Hw(n.min,n.max)}function N_(n){return F3(n)/2}function B3(n){let e=xr(n);return Math.max(e.x,e.y,e.z)}function RM(n){let e=xr(n),t=F3(n);return{center:ih(n.min,Np(e,.5)),size:e,diagonalLength:t,radius:t/2,maxSpan:Math.max(e.x,e.y,e.z)}}var Fl=M(()=>{"use strict";us()});function bM(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 $S(n,e={}){let t=RM(n);return bM(t.center,t.radius,e)}function U3(n,e={}){var o,l,c,f,h,d;let t=RM(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:ih(t.center,{x:r,y:r*((d=e.elevationFactor)!=null?d:.65),z:r}),near:s,far:a}}var JS=M(()=>{"use strict";Fl();us()});function Di(n){return n.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}var eT=M(()=>{"use strict"});function tT(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=ene({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:tne(r,{triangleCount:t,splatCount:n.splatCount,materialCount:e.size}),resourceWarnings:n.resourceWarnings?[...n.resourceWarnings]:void 0,boundingSize:Zr(n.boundingSize),rootName:n.rootName}}function ene(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 tne(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 Fu(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 V3(n){return n.splatCount!==void 0?"Splats":"Triangles"}function G3(n){var e;return(e=n.splatCount)!=null?e:n.triangleCount}var iT=M(()=>{"use strict";us()});function Bu(n,e="-"){if(typeof n!="string")return e;let t=n.trim();return t.length>0?t:e}function k3(n,e={}){var r,s;let t=(r=e.countLabel)!=null?r:V3(n),i=(s=e.decimals)!=null?s:3;return[`| Meshes | ${n.meshCount} |`,`| ${t} | ${G3(n).toLocaleString()} |`,`| Vertices | ${n.vertexCount.toLocaleString()} |`,`| Materials | ${n.materialCount} |`,...n.performanceTier?[`| Performance Tier | ${n.performanceTier} |`]:[],`| Bounding Size | ${IM(n.boundingSize,{decimals:i})} |`]}function rT(n){return Di(n).replace(/\|/g,"\\|").replace(/\r?\n/g," ")}function IM(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 W3(n,e={}){return["| Metric | Value |","|--------|-------|",...k3(n,e)]}function ine(n,e,t={}){return["| Property | Value |","|----------|-------|",`| Format | ${n} |`,...k3(e,t)]}function nT(n){var r,s;let e=[];e.push(`## ${n.title} - Model Info`),e.push(""),e.push(...ine(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 | ${IM(n.boundingSize)} |`),i.push(`| Center | ${IM(n.center,{separator:", "})} |`),i.push(""),i.join(` -`)}var aT=M(()=>{"use strict";eT();iT()});function oT(n){return{canvas:n.canvas,observeRender:n.observeRender,getCameraStateKey:n.getCameraStateKey,projectWorldPoint:n.projectWorldPoint,isWorldPointOccluded:n.isWorldPointOccluded}}function lT(n){return n.map(e=>e.value.toFixed(e.digits)).join("_")}function H3(n){return Number.isFinite(n.x)&&Number.isFinite(n.y)&&Number.isFinite(n.z)}function z3(n,e,t){return!H3(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 X3(n,e,t,i,r){return!H3(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 MM=M(()=>{"use strict"});function cT(n){var e;return n.size===0?null:n.size===1?(e=Array.from(n)[0])!=null?e:null:`${n.size} materials`}function fT(n){var e;return{summary:n.summary,parts:rne(n),materialNames:nne(n.renderableMeshes,n.getMeshMaterialNames),resourceWarnings:n.resourceWarnings?[...n.resourceWarnings]:[],capturedAt:(e=n.capturedAt)!=null?e:new Date().toISOString()}}function rne(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 nne(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 w_=M(()=>{"use strict"});function hT(n){switch(n){case"\xB5m":case"\u03BCm":return"um";case"um":case"mm":case"cm":case"m":return n;default:return"mm"}}function U_(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 dT(n,e,t,i){let r=U_(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 B_(n,e){return n.toFixed(e).replace(/\.?0+$/,"")}function ane(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 K3(n){return n==="um"?"um":sne[n]}function F_(n,e,t=!0){let i=t?ane(n,e):e,r=n*yM[e]/yM[i],s=Math.abs(r),a=s>=100?1:s>=10?2:3;return`${B_(r,a)} ${K3(i)}`}function CM(n){let e=Math.abs(n),t=e>=100?1:e>=10?2:3;return B_(e,t)}function Uu(n){return{primary:F_(n.distance,n.unit),secondary:[`X ${CM(n.absDelta.x)}`,`Y ${CM(n.absDelta.y)}`,`Z ${CM(n.absDelta.z)}`,K3(n.unit)].join(" ")}}function uT(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=Y3(t.start),s=Y3(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 Y3(n){return`${B_(n.x,3)}, ${B_(n.y,3)}, ${B_(n.z,3)}`}var yM,sne,PM=M(()=>{"use strict";yM={um:1e-6,mm:.001,cm:.01,m:1},sne={um:"\u03BCm",mm:"mm",cm:"cm",m:"m"}});function pT(n){return new LM(n)}var mT,LM,DM=M(()=>{"use strict";mT=class mT{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";Qn();us();DM();j3=new ft(4890367),one=new ft(1722990),OM=class{constructor(e,t,i,r,s,a){this.raycaster=new qc;this.pointer=new It;this.tempBox=new pr;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,j3),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=Vd(Gt(i),Gt(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=Fc(Gt(r),Gt(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&&wc(o.distance,s.distance,s.epsilon);l!==this.lastOccluded&&(this.lastOccluded=l,this.selectionHelper&&(this.selectionHelper.material.color.set(l?one:j3),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=Lv({startPosition:Gt(e.startPosition),pivot:Gt(e.pivot),startRotationQuaternion:Pv(e.startQuaternion),yawAxis:Gt(a),pitchAxis:Gt(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 Jt?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=Vd(Gt(r),Gt(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=yv({origin:Gt(this.raycaster.ray.origin),direction:Gt(this.raycaster.ray.direction)},t);return a?new se(a.x,a.y,a.z):null}}});function Q3(n){return Zr(n)}function lne(n,e){return{originalPosition:Q3(n),originalCenter:Q3(e)}}function _T(n,e,t){let i=n.getRootCenter();for(let r of n.getParts()){let s=n.getPartState(r);s||(s=lne(n.getPartPosition(r),n.getPartCenter(r)),n.setPartState(r,s));let a=(s.originalCenter[t]-i[t])*e;n.setPartPosition(r,zw(s.originalPosition,t,a))}}function gT(n){for(let e of n.getParts()){let t=n.getPartState(e);t&&n.setPartPosition(e,t.originalPosition)}}var NM=M(()=>{"use strict";us()});function vT(n){return Zr(n)}function cne(n){return n instanceof Jt}function fne(n){let e=[];return n.traverse(t=>{cne(t)&&t.geometry&&e.push(t)}),e}function $3(n,e,t){_T(new ET(n),e,t)}function wM(n){gT(new ET(n))}var ET,J3=M(()=>{"use strict";Qn();us();Fl();NM();ET=class{constructor(e){this.root=e}getParts(){return fne(this.root)}getRootCenter(){let e=new pr().setFromObject(this.root);return tn({min:Gt(e.min),max:Gt(e.max)})}getPartPosition(e){return Gt(e.position)}getPartCenter(e){let i=new pr().setFromObject(e).getCenter(new se);return Gt(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:vT(t._previewExplodeState.originalPosition),originalCenter:vT(t._previewExplodeState.originalCenter)}:null}setPartState(e,t){e.userData._previewExplodeState={originalPosition:vT(t.originalPosition),originalCenter:vT(t.originalCenter)}}}});function e2(n){return n.cameraMoved||n.animating||n.renderDirty||n.renderObserverCount>0&&n.renderObserverSettleFrames>0}var ST,t2=M(()=>{"use strict";ST=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}}}});function gne(n){return!!n&&typeof n=="object"&&!Array.isArray(n)}function TT(n){return n.toLowerCase().replace(/[^a-z0-9]+/g,"")}function vne(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 i2(n,e=0){if(!gne(n)||e>2)return[];let t=[];for(let i of _ne)for(let[r,s]of Object.entries(n))TT(r)===TT(i)&&t.push(...i2(s,e+1));return t.push(n),t}function V_(n,e){let t=new Set(e.map(TT));for(let i of n)for(let[r,s]of Object.entries(i)){if(!t.has(TT(r)))continue;let a=vne(s);if(a)return a}}function nf(n,e={}){var c,f;let t=i2(n),i=V_(t,hne),r=V_(t,dne),s=V_(t,une),a=(c=V_(t,pne))!=null?c:e.path,o=(f=V_(t,mne))!=null?f:e.name;return{componentId:i,occurrenceId:r,partNumber:s,componentPath:a,displayName:o,hasExplicitIdentity:!!(i||r||s)}}var hne,dne,une,mne,pne,_ne,FM=M(()=>{"use strict";hne=["ai3dPartId","partId","componentId","componentIdentifier","cadId","persistentId","externalId","id"],dne=["ai3dOccurrenceId","occurrenceId","instanceId","occurrencePath","assemblyPath","pathId"],une=["ai3dPartNumber","partNumber","partNo","partNum","swPartNumber","solidworksPartNumber","part_number"],mne=["displayName","partName","componentName","cadName","name"],pne=["componentPath","cadPath","assemblyPath","occurrencePath"],_ne=["ai3d","cad","solidworks","sw","metadata","properties","extras","gltf","userData"]});function sf(n){return n instanceof Jt}function $s(n){return n?Array.isArray(n)?n:[n]:[]}function AT(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 xT(n){var e,t;return(t=(e=n.geometry.getAttribute("position"))==null?void 0:e.count)!=null?t:0}function RT(n){return n?n.name||n.type||`material-${n.uuid}`:null}function Mh(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 BM(n,e){let t=[],i=e;for(;i&&i!==n;)t.push(Mh(i,i.type||`object-${i.id}`)),i=i.parent;return t.reverse().join("/")}function Ea(n){let e=new pr().setFromObject(n);return O_(Gt(e.min),Gt(e.max))}function r2(n){return $s(n.material).map(e=>RT(e))}function n2(n){return{name:Mh(n,`mesh-${n.id}`),triangleCount:AT(n),vertexCount:xT(n),materialName:RT($s(n.material)[0])}}function UM(n,e){n.updateWorldMatrix(!0,!1);let t=Ea(n),i=Mh(n,`mesh-${n.id}`),r=nf(n.userData,{name:i,path:e?BM(e,n):i});return Fu({name:a2(r,i),triangleCount:AT(n),vertexCount:xT(n),materialName:RT($s(n.material)[0]),boundingSize:xr(t),center:tn(t),source:r.hasExplicitIdentity?"component":"mesh",meshNames:[i],childCount:1,componentId:r.componentId,occurrenceId:r.occurrenceId,partNumber:r.partNumber,componentPath:r.componentPath})}function s2(n,e){let t=new Set(e),i=[],r=new Set,s=[];return n.updateWorldMatrix(!0,!0),n.traverse(a=>{if(a===n||sf(a))return;let o=[];if(a.traverse(c=>{sf(c)&&t.has(c)&&o.push(c)}),o.length<2||o.length===e.length){let c=nf(a.userData,{name:Mh(a,`component-${a.id}`),path:BM(n,a)});if(!c.hasExplicitIdentity||o.length<1||o.length===e.length)return;s.push({object:a,childMeshes:o,identity:c});return}let l=nf(a.userData,{name:Mh(a,`group-${a.id}`),path:BM(n,a)});!l.hasExplicitIdentity&&!a.name.trim()||s.push({object:a,childMeshes:o,identity:l})}),s.sort((a,o)=>a.childMeshes.length-o.childMeshes.length).forEach(({object:a,childMeshes:o,identity:l})=>{let c=o.filter(m=>!r.has(m));if(c.length<1||!l.hasExplicitIdentity&&c.length<2)return;for(let m of c)r.add(m);let f=new pr;for(let m of c)m.updateWorldMatrix(!0,!1),f.union(new pr().setFromObject(m));let h=new Set,d=0,u=0;for(let m of c){d+=AT(m),u+=xT(m);for(let p of $s(m.material)){let _=RT(p);_&&h.add(_)}}i.push(Fu({name:a2(l,Mh(a,`group-${a.id}`)),triangleCount:d,vertexCount:u,materialName:cT(h),boundingSize:xr({min:Gt(f.min),max:Gt(f.max)}),center:tn({min:Gt(f.min),max:Gt(f.max)}),source:l.hasExplicitIdentity?"component":"group",meshNames:c.map(m=>Mh(m,`mesh-${m.id}`)),childCount:c.length,componentId:l.componentId,occurrenceId:l.occurrenceId,partNumber:l.partNumber,componentPath:l.componentPath}))}),{parts:i,groupedMeshes:r}}function bT(n,e,t=[]){return tT({rootName:n.name||"__root__",boundingSize:xr(Ea(n)),meshes:e.map(i=>({triangleCount:AT(i),vertexCount:xT(i),materialKeys:$s(i.material).map(r=>r.uuid)})),resourceWarnings:t})}function a2(n,e){var t;return((t=n.displayName)==null?void 0:t.trim())||n.partNumber||n.componentId||e}var o2=M(()=>{"use strict";Qn();Fl();FM();w_();us();iT()});var u2={};tt(u2,{ThreeModelPreview:()=>MT,createThreeModelPreview:()=>Bne});function f2(){return{textureCount:0,colorTextureCount:0,srgbColorTextureCount:0}}function Nne(n,e){n.textureCount+=e.textureCount,n.colorTextureCount+=e.colorTextureCount,n.srgbColorTextureCount+=e.srgbColorTextureCount}function h2(n){return n instanceof ko||n instanceof Za||n instanceof Dl}function d2(n){let e=n.clone();return e.transparent=!0,e.opacity=Math.max(0,Math.min(1,n.opacity))*Ene,e.depthWrite=!1,e.needsUpdate=!0,e}function wne(n){return Array.isArray(n)?n.map(d2):d2(n)}function Fne(n){for(let e of $s(n))e.dispose()}function Bne(n){return new MT(n)}var IT,Ene,Sne,Tne,Ane,xne,Rne,l2,bne,c2,Ine,Mne,Cne,yne,Pne,Lne,Dne,One,MT,m2=M(()=>{"use strict";Qn();a3();o3();O3();Qs();Fl();JS();aT();MM();us();w_();PM();Z3();J3();Ws();xM();t2();o2();IT=new ft("#20242e"),Ene=.242,Sne=.28,Tne=2.5,Ane=1.5,xne=1.15,Rne=260,l2=30,bne=8,c2=28,Ine=18,Mne=2,Cne=28,yne=.86,Pne=1.08,Lne=.62,Dne=.86,One=4;MT=class{constructor(e){this.raycaster=new qc;this.occlusionRaycaster=new qc;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=f2();this.renderHandle=0;this.contextLost=!1;this.quality="high";this.renderScale=1;this.interactivePixelRatioActive=!1;this.interactionPixelRatioDeadline=0;this.renderObserverSettleFrames=0;this.frameBudgetPixelRatioScale=1;this.frameBudgetSlowStreak=0;this.frameBudgetFastStreak=0;this.frameBudgetObserverStride=1;this.frameBudgetObserverCursor=0;this.frameBudgetShadowDeferred=!1;this.lastFrameDurationMs=0;this.smoothness=new ST;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 FS({canvas:e,antialias:!0,alpha:!0,preserveDrawingBuffer:!0,powerPreference:"high-performance"}),this.renderer.outputColorSpace=Ii,this.renderer.toneMapping=Ts,this.renderer.toneMappingExposure=1,this.renderer.shadowMap.enabled=!0,this.renderer.shadowMap.type=WE,this.renderer.shadowMap.autoUpdate=!1,this.renderer.shadowMap.needsUpdate=!0,this.renderer.setClearColor(IT,1),this.scene=new ph,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 GS(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=f2();let s,a=[];if(this.loadedExt==="glb"||this.loadedExt==="gltf"){let c=await y3(e,this.loadedExt,i,r);s=c.scene,a=c.animations,this.resourceWarnings=c.warnings}else if(this.loadedExt==="stl")s=await P3(e),this.stlMaterial=sf(s)?s.material:null;else if(this.loadedExt==="ply")s=await L3(e);else if(this.loadedExt==="obj"){let c=await D3(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=bT(s,this.getRenderableMeshes(s),this.resourceWarnings);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 oT({canvas:e,observeRender:t=>(this.renderObservers.add(t),this.setRenderObserverSettleFrames(),this.markDirty(),{remove:()=>{this.renderObservers.delete(t),this.renderObservers.size===0&&this.setRenderObserverSettleFrames(0)}}),getCameraStateKey:()=>this.getAnnotationCameraStateKey(),projectWorldPoint:(t,i)=>this.projectAnnotationWorldPoint(t,i),isWorldPointOccluded:t=>this.isAnnotationWorldPointOccluded(t)})}exportModelInfo(e){if(!this.rootObject)return"";let t=this.getRenderableMeshes(this.rootObject),i=bT(this.rootObject,t,this.resourceWarnings),r=e&&ds(e)||i.rootName;return nT({title:r,format:this.loadedExt.toUpperCase(),summary:i,meshBreakdown:t.map(n2)})}getModelEvidence(){if(!this.rootObject)return null;let e=this.getRenderableMeshes(this.rootObject),t=s2(this.rootObject,e);return fT({summary:bT(this.rootObject,e,this.resourceWarnings),renderableMeshes:e,groupedPartCandidates:t,createMeshPart:i=>UM(i,this.rootObject),getMeshMaterialNames:r2,resourceWarnings:this.resourceWarnings})}getSelectedPartInfo(){var t;let e=(t=this.focusedMesh)!=null?t:sf(this._lastPickResult.mesh)?this._lastPickResult.mesh:null;return e?UM(e,this.rootObject):null}exportSelectedPartInfo(){let e=this.getSelectedPartInfo();return e?sT(e):""}getPickWorldPoint(e){return e.pickedPoint&&typeof e.pickedPoint=="object"?Gt(e.pickedPoint):e.mesh instanceof Jt?tn(Ea(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 Jt&&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=$s(t.material).map(s=>{if(s instanceof pn){let a=new Zn({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 xu(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=U_(e),this.updateMeasurementLabels()}getMeasurementScale(){return{...this.measurementScale}}setMeasurementUnit(e){this.measurementUnit=hT(e),this.updateMeasurementLabels()}getMeasurementUnit(){return this.measurementUnit}getMeasurementBounds(){if(!this.rootObject)return null;let e=Ea(this.rootObject);return xr(e)}getMeasurementRecords(){return this.createMeasurementRecords()}exportMeasurements(){return uT(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===Ts?"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&&($3(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=q3(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}let t=this.renderNow(performance.now());this.renderHandle=t?window.requestAnimationFrame(e):0};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!1;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)return this.smoothness.recordIdleFrameSkip(),this.renderObserverSettleFrames>0&&(this.renderObserverSettleFrames--,this.notifyRenderObservers()),this.shouldContinueRenderLoop(r,s);this.renderDirty=!1,this.setRenderObserverSettleFrames(),(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;return this.smoothness.recordRenderedFrame(o,c2),this.updateFrameBudget(o),this.notifyRenderObservers(),this.shouldContinueRenderLoop(r,s)}shouldContinueRenderLoop(e,t){return e2({cameraMoved:e,animating:t,renderDirty:this.renderDirty,renderObserverCount:this.renderObservers.size,renderObserverSettleFrames:this.renderObserverSettleFrames})}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+Rne,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=c2?(this.frameBudgetSlowStreak++,this.frameBudgetFastStreak=0):e<=Ine?(this.frameBudgetFastStreak++,this.frameBudgetSlowStreak=0):(this.frameBudgetSlowStreak=0,this.frameBudgetFastStreak=0),this.frameBudgetSlowStreak>=Mne){this.frameBudgetSlowStreak=0;let t=Math.max(Lne,this.frameBudgetPixelRatioScale*yne);t=Cne&&this.frameBudgetPixelRatioScale<1&&(this.frameBudgetFastStreak=0,this.frameBudgetPixelRatioScale=Math.min(1,this.frameBudgetPixelRatioScale*Pne),this.frameBudgetObserverStride=Math.max(1,this.frameBudgetObserverStride-1),this.setRenderObserverSettleFrames(),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.setRenderObserverSettleFrames(),e&&this.markDirty()}setRenderObserverSettleFrames(e=l2){this.renderObserverSettleFrames=this.renderObservers.size>0?e:0}shouldDeferShadowRefresh(){return this.interactivePixelRatioActive&&this.frameBudgetPixelRatioScale<=Dne}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 Ss?this.updateOrthographicFrustum(t/i):this.camera.aspect=t/i,this.camera.updateProjectionMatrix(),this.markDirty()}computeOrthographicViewSpan(){if(!this.rootObject)return 2;let e=Ea(this.rootObject),t=xr(e);return Math.max(t.x,t.y,t.z,1)*1.2}updateOrthographicFrustum(e){if(!(this.camera instanceof Ss))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 Ss))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 Ss(-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(IT,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=IT,this.renderer.setClearColor(IT,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 Tu(16777215,.96);e.name="default-global-ambient";let t=new Su(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 Du(this.renderer),t=new kS;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 Tu(t,i);case"hemisphere":{let h=e.groundColor?new ft(e.groundColor):new ft(4473924);return new Su(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 Za(t,i),d=(o=e.position)!=null?o:[0,5,0];return h.position.set(...d),h.castShadow=!!e.castShadow,typeof e.decay=="number"&&(h.decay=e.decay),h}case"spot":{let h=new 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 Za(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(sf(i)){i.castShadow=!0,i.receiveShadow=!0;for(let r of $s(i.material))this.prepareMaterialForQuality(r,t)}})}prepareMaterialForQuality(e,t){Nne(this.textureAudit,QS(e,t))}applyShadowQuality(){let e=this.shadowMapSize();for(let t of this.allLights())!h2(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 pr().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(!(!h2(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 Ss){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 xu(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=Ea(this.rootObject),t=tn(e),i=xr(e),r=Math.max(i.x,i.z,1)*3,s=e.min.y-Math.max(r*.002,.002),a=new Jt(new vh(r,r),new l_({color:0,opacity:Sne,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 $s(this.groundShadowMesh.material))e.dispose();this.groundShadowMesh=null}}createGrid(){if(!this.rootObject||this.gridHelper)return;let e=Ea(this.rootObject),t=tn(e),i=xr(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 $s(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 $s(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 Jt?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++,!sf(l))return;a++;let c=l.geometry;c&&!i.has(c.uuid)&&(c.dispose(),i.add(c.uuid));for(let f of $s(l.material))this.disposeMaterialWithTextures(f,r,s)}),{reason:t,meshCount:a,geometryCount:i.size,materialCount:r.size,textureCount:s.size,objectCount:o,timestamp:performance.now()}}disposeMaterialWithTextures(e,t,i){let r=e;for(let s of Object.values(r))if(s instanceof Ar&&!i.has(s.uuid))s.dispose(),i.add(s.uuid);else if(Array.isArray(s))for(let a of s)a instanceof Ar&&!i.has(a.uuid)&&(a.dispose(),i.add(a.uuid));t.has(e.uuid)||(e.dispose(),t.add(e.uuid))}fitCameraToObject(e){let t=Ea(e),i=U3(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=xr(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 lT([{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),z3(this.annotationProjection,i,t))}isAnnotationWorldPointOccluded(e){if(!this.rootObject)return!1;let t=Fc(Gt(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&&wc(i.distance,t.distance,t.epsilon)}getRenderableMeshes(e){if(this.cachedMeshes&&this.cachedMeshRoot===e)return this.cachedMeshes;let t=[];return e.traverse(i=>{sf(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=xr(Ea(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=xr(Ea(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 _s&&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=wne(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())Fne(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=Ea(this.rootObject),t=xr(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 Eu(r,16,16),a=new Zn({color:16739179,depthTest:!1}),o=new Jt(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 Eu(r,16,16),a=new Zn({color:16739179,depthTest:!1}),o=new Jt(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 Pn({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 pu({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 Pn({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 dT(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}}}});var Une,VM,GM,ie,di=M(()=>{Une=typeof WeakRef!="undefined",VM=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}},GM=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 VM(0),e&&(this._onObserverAdded=e)}add(e,t=-1,i=!1,r=null,s=!1){if(!e)return null;let a=new GM(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=Une?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 CT,p2=M(()=>{CT=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 _2,Oi,bs=M(()=>{di();p2();(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"})(_2||(_2={}));Oi=class n extends CT{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 J,Pt=M(()=>{J=class n{static _CheckLimit(e,t){let i=n._LogLimitOutputs[e];return i?i.current++:(i={limit:t,current:1},n._LogLimitOutputs[e]=i),i.current<=i.limit}static _GenerateLimitMessage(e,t=1){var s;let i=n._LogLimitOutputs[e];if(!i||!n.MessageLimitReached)return;let r=this._Levels[t];i.current===i.limit&&n[r.name](n.MessageLimitReached.replace(/%LIMIT%/g,""+i.limit).replace(/%TYPE%/g,(s=r.name)!=null?s:""))}static _AddLogEntry(e){n._LogCache=e+n._LogCache,n.OnNewCacheEntry&&n.OnNewCacheEntry(e)}static _FormatMessage(e){let t=r=>r<10?"0"+r:""+r,i=new Date;return"["+t(i.getHours())+":"+t(i.getMinutes())+":"+t(i.getSeconds())+"]: "+e}static _LogDisabled(e,t){}static _LogEnabled(e=1,t,i){let r=Array.isArray(t)?t[0]:t;if(i!==void 0&&!n._CheckLimit(r,i))return;let s=n._FormatMessage(r),a=this._Levels[e],o=Array.isArray(t)?t.slice(1):[];a.logFunc&&a.logFunc("BJS - "+s,...o);let l=`
${s}

`;n._AddLogEntry(l),n._GenerateLimitMessage(r,e)}static get LogCache(){return n._LogCache}static ClearLogCache(){n._LogCache="",n._LogLimitOutputs={},n.errorsCount=0}static set LogLevels(e){n.Log=n._LogDisabled,n.Warn=n._LogDisabled,n.Error=n._LogDisabled;let t=[n.MessageLogLevel,n.WarningLogLevel,n.ErrorLogLevel];for(let i of t)if((e&i)===i){let r=this._Levels[i];n[r.name]=n._LogEnabled.bind(n,i)}}};J.NoneLogLevel=0;J.MessageLogLevel=1;J.WarningLogLevel=2;J.ErrorLogLevel=4;J.AllLogLevel=7;J.MessageLimitReached="Too many %TYPE%s (%LIMIT%), no more %TYPE%s will be reported for this message.";J._LogCache="";J._LogLimitOutputs={};J._Levels=[{},{color:"white",logFunc:console.log,name:"Log"},{color:"orange",logFunc:console.warn,name:"Warn"},{},{color:"red",logFunc:console.error,name:"Error"}];J.errorsCount=0;J.Log=J._LogEnabled.bind(J,J.MessageLogLevel);J.Warn=J._LogEnabled.bind(J,J.WarningLogLevel);J.Error=J._LogEnabled.bind(J,J.ErrorLogLevel)});var 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 Bl(){return typeof navigator!="undefined"}function af(){return typeof document!="undefined"}function yT(n){let e="",t=n.firstChild;for(;t;)t.nodeType===3&&(e+=t.textContent),t=t.nextSibling;return e}var Sa=M(()=>{});var PT,g2=M(()=>{PT=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 qe(n,e=!1){if(!(e&&v2[n]))return v2[n]=!0,`${n} needs to be imported before as it contains a side-effect required by your code.`}var v2,hn=M(()=>{v2={}});function LT(n,e,t=""){return t+(e?e+` -`:"")+n}function DT(n,e,t,i,r,s,a){let o=a||Vu.loadFile;if(o)return o(n,e,t,i,r,s);throw qe("FileTools")}function OT(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?(KS.setRGB(parseFloat(h[4]),parseFloat(h[5]),parseFloat(h[6]),Ii),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(u3),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 Ys;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 _s({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 Ln(l,o);s.add(c)}return s}}});var Rs,qS,QI,v3=M(()=>{$n();Rs=new ft,qS=class extends fn{constructor(e){super(e),this.propertyNameMapping={},this.customPropertyMapping={}}load(e,t,i,r){let s=this,a=new Es(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 L={type:C[0]};return L.type==="list"?(L.name=C[3],L.countType=C[1],L.itemType=C[2]):L.name=C[1],L.name in y&&(L.name=y[L.name]),L}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&&(Rs.setRGB(v[x.attrR]/255,v[x.attrG]/255,v[x.attrB]/255,Ii),_.colors.push(Rs.r,Rs.g,Rs.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&&(Rs.setRGB(v[x.attrR]/255,v[x.attrG]/255,v[x.attrB]/255,Ii),_.faceVertexColors.push(Rs.r,Rs.g,Rs.b),_.faceVertexColors.push(Rs.r,Rs.g,Rs.b),_.faceVertexColors.push(Rs.r,Rs.g,Rs.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 ZS,E3=M(()=>{$n();ZS=class extends fn{constructor(e){super(e)}load(e,t,i,r){let s=this,a=new Es(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 H=O+U*12,ee=L*3*3+(U-1)*3;I[ee]=f.getFloat32(H,!0),I[ee+1]=f.getFloat32(H+4,!0),I[ee+2]=f.getFloat32(H+8,!0),C[ee]=V,C[ee+1]=w,C[ee+2]=N,p&&(y.setRGB(d,u,m,Ii),_[ee]=y.r,_[ee+1]=y.g,_[ee+2]=y.b)}}return R.setAttribute("position",new dr(I,3)),R.setAttribute("normal",new dr(C,3)),p&&(R.setAttribute("color",new dr(_,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],L=(S=u.exec(y))!==null?S[1]:"";for(T.push(L);(S=d.exec(y))!==null;){let w=0,N=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]),N++;for(;(S=_.exec(U))!==null;)v.push(parseFloat(S[1]),parseFloat(S[2]),parseFloat(S[3])),x.push(E.x,E.y,E.z),w++,C++;N!==1&&console.error("THREE.STLLoader: Something isn't right with the normal of face number "+m),w!==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{$n()});function T3(n){let e=new Map,t=new Map,i=n.clone();return A3(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 A3(n,e,t){t(n,e);for(let i=0;i{});function Ure(){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 Ur(n,e,t){let i=n.json.materials[e];return i.extensions&&i.extensions[t]?i.extensions[t]:null}function kre(n){return n.DefaultMaterial===void 0&&(n.DefaultMaterial=new pn({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:Ks})),n.DefaultMaterial}function Ch(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 Ko(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 Wre(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 Kre(n,e,t){let i=e.attributes,r=new _r;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=bM(Bu[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{$n();S3();x3();QS=class extends fn{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(t){return new sM(t)}),this.register(function(t){return new aM(t)}),this.register(function(t){return new pM(t)}),this.register(function(t){return new _M(t)}),this.register(function(t){return new gM(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 hM(t)}),this.register(function(t){return new nM(t)}),this.register(function(t){return new dM(t)}),this.register(function(t){return new oM(t)}),this.register(function(t){return new mM(t)}),this.register(function(t){return new uM(t)}),this.register(function(t){return new iM(t)}),this.register(function(t){return new $S(t,Ei.EXT_MESHOPT_COMPRESSION)}),this.register(function(t){return new $S(t,Ei.KHR_MESHOPT_COMPRESSION)}),this.register(function(t){return new vM(t)})}load(e,t,i,r){let s=this,a;if(this.resourcePath!=="")a=this.resourcePath;else if(this.path!==""){let c=Qa.extractUrlBase(e);a=Qa.resolveURL(c,this.path)}else a=Qa.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 Es(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))===C3){try{a[Ei.KHR_BINARY_GLTF]=new EM(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 IM(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"},iM=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)}},_M=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)}},gM=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)}},$S=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}},vM=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!==Ea.TRIANGLES&&c.mode!==Ea.TRIANGLE_STRIP&&c.mode!==Ea.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 $r,v=new se(1,1,1),x=new Eh(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 xh(this.options.manager):this.textureLoader=new p_(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new Es(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 Ch(s,o,r),Ko(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=b3[d.magFilter]||Fr,f.minFilter=b3[d.minFilter]||$a,f.wrapS=I3[d.wrapS]||No,f.wrapT=I3[d.wrapT]||No,f.generateMipmaps=!f.isCompressedTexture&&f.minFilter!==wr&&f.minFilter!==Fr,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(Qa.resolveURL(h,s.path),m,void 0,u)})}).then(function(h){return c===!0&&o.revokeObjectURL(l),Ko(h,a),h.userData.mimeType=a.mimeType||Xre(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 _s,Br.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 Pn,Br.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],Zn),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=ga);let f=s.alphaMode||eM.OPAQUE;if(f===eM.BLEND?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,f===eM.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],Zn)}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),Ko(h,s),t.associations.set(h,{materials:e}),s.extensions&&Ch(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 M3(l,o,t)})}let a=[];for(let o=0,l=e.length;o0&&Hre(g,s),g.name=t.createUniqueName(s.name||"mesh_"+e),Ko(g,s),_.extensions&&Ch(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 vu:c.length>1?f=new Ys: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 Ys;i.name&&(s.name=r.createUniqueName(i.name)),Ko(s,i),i.extensions&&Ch(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 Br||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)}sf[s.path]===sf.weights?(c(e),e.isGroup&&e.children.forEach(c)):l.push(o);let f;switch(sf[s.path]){case sf.weights:f=Vo;break;case sf.rotation:f=Go;break;case sf.translation:case sf.scale:f=ko;break;default:i.itemSize===1?f=Vo:f=ko;break}let h=r.interpolation!==void 0?Gre[r.interpolation]:ph,d=this._getArrayFromAccessor(i);for(let u=0,m=l.length;u{"use strict"});function qre(n){return jre.has(n)}function tT(n,e){let t=n,i={textureCount:0,colorTextureCount:0,srgbColorTextureCount:0};for(let[r,s]of Object.entries(t))s instanceof xr&&(i.textureCount++,s.anisotropy=Math.max(s.anisotropy,e),qre(r)&&(i.colorTextureCount++,s.colorSpace=Ii,i.srgbColorTextureCount++),s.needsUpdate=!0);return n.needsUpdate=!0,i}function MM(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 jre,CM=M(()=>{"use strict";$n();jre=new Set(["map","emissiveMap","specularMap","specularColorMap","sheenColorMap","clearcoatColorMap"])});function D3(n){var t,i,r;let e=(i=(t=n.split(".").pop())==null?void 0:t.toLowerCase())!=null?i:"png";return(r=Zre[e])!=null?r:`image/${e}`}function $re(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 Jre(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 L3(n,e,t){let i=Ws(e,t);try{return{data:await n(i),path:i}}catch(r){throw new Error(`Missing external model resource: ${i}`)}}function ene(n,e,t){let i=us(e),r=i.replace(/\.[^.]+$/,""),s=Zr(t),a=[Ws(n,e),Ws(n,i)];if(s)for(let o of P3)a.push(Ws(n,`${s}.${o}`));for(let o of P3){let l=`${r}.${o}`;l!==i&&a.push(Ws(n,l))}return a}async function O3(n,e,t,i){var l,c;let r=new QS,s=[];if(e==="gltf"&&t&&i){let f=new TextDecoder().decode(new Uint8Array(n)),h=JSON.parse(f),d=Np(i);if(h.buffers){for(let g of h.buffers)if(g.uri&&!g.uri.startsWith("data:")){let v=await L3(t,d,g.uri);g.uri=`data:application/octet-stream;base64,${Bl(v.data)}`}}if(h.images){for(let g of h.images)if(g.uri&&!g.uri.startsWith("data:")){let v=await L3(t,d,g.uri);g.uri=`data:${D3(v.path)};base64,${Bl(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 N3(n){let t=new ZS().parse(n),i=t.hasAttribute("color")?new pn({color:16777215,vertexColors:!0}):new pn({color:13421772}),r=new ti(t,i);return r.name=us("")||"stl-model",r}async function w3(n){let t=new qS().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 _s({size:MM(t),vertexColors:!0});return new Ln(t,s)}if(i){t.hasAttribute("normal")||t.computeVertexNormals();let s=new pn({color:13421772});return new ti(t,s)}let r=new _s({size:MM(t),color:13421772});return new Ln(t,r)}function tne(n){return n?Array.isArray(n)?n:[n]:[]}function ine(n){n.traverse(e=>{if(!(e instanceof ti))return;let t=e;for(let i of tne(t.material))tT(i,1)})}async function F3(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=$re(a[1]),f=Np(t),h=Ws(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 YS().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 jS;s&&o.setMaterials(s);let l=o.parse(i);return ine(l),{object:l,warnings:r}}var Zre,P3,Qre,B3=M(()=>{"use strict";d3();g3();v3();E3();y3();$n();Hs();eT();CM();Zre={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"],Qre=/^\s*(map_Kd|map_Ka|map_Ks|map_Ns|map_d|map_bump|bump|disp|decal)\s+(.+)/i});function gr(){return U3.Platform.isMobile}var U3,$s=M(()=>{"use strict";U3=require("obsidian")});function N_(n,e){return{min:Qr(n),max:Qr(e)}}function iT(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)}}:N_(e.min,e.max)}function sr(n){return Gd(n.max,n.min)}function yr(n){return nh(n.min,wp(sr(n),.5))}function V3(n){return Kw(n.min,n.max)}function w_(n){return V3(n)/2}function G3(n){let e=sr(n);return Math.max(e.x,e.y,e.z)}function yM(n){let e=sr(n),t=V3(n);return{center:nh(n.min,wp(e,.5)),size:e,diagonalLength:t,radius:t/2,maxSpan:Math.max(e.x,e.y,e.z)}}var jo=M(()=>{"use strict";ms()});function PM(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:Qr(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 rT(n,e={}){let t=yM(n);return PM(t.center,t.radius,e)}function k3(n,e={}){var o,l,c,f,h,d;let t=yM(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:Qr(t.center),position:nh(t.center,{x:r,y:r*((d=e.elevationFactor)!=null?d:.65),z:r}),near:s,far:a}}var nT=M(()=>{"use strict";jo();ms()});function Di(n){return n.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}var sT=M(()=>{"use strict"});function aT(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=rne({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:nne(r,{triangleCount:t,splatCount:n.splatCount,materialCount:e.size}),resourceWarnings:n.resourceWarnings?[...n.resourceWarnings]:void 0,boundingSize:Qr(n.boundingSize),rootName:n.rootName}}function rne(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 nne(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 yh(n){var e;return{name:n.name,triangleCount:n.triangleCount,vertexCount:n.vertexCount,materialName:(e=n.materialName)!=null?e:null,boundingSize:Qr(n.boundingSize),center:Qr(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 W3(n){return n.splatCount!==void 0?"Splats":"Triangles"}function H3(n){var e;return(e=n.splatCount)!=null?e:n.triangleCount}var oT=M(()=>{"use strict";ms()});function Uu(n,e="-"){if(typeof n!="string")return e;let t=n.trim();return t.length>0?t:e}function z3(n,e={}){var r,s;let t=(r=e.countLabel)!=null?r:W3(n),i=(s=e.decimals)!=null?s:3;return[`| Meshes | ${n.meshCount} |`,`| ${t} | ${H3(n).toLocaleString()} |`,`| Vertices | ${n.vertexCount.toLocaleString()} |`,`| Materials | ${n.materialCount} |`,...n.performanceTier?[`| Performance Tier | ${n.performanceTier} |`]:[],`| Bounding Size | ${LM(n.boundingSize,{decimals:i})} |`]}function lT(n){return Di(n).replace(/\|/g,"\\|").replace(/\r?\n/g," ")}function LM(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 X3(n,e={}){return["| Metric | Value |","|--------|-------|",...z3(n,e)]}function sne(n,e,t={}){return["| Property | Value |","|----------|-------|",`| Format | ${n} |`,...z3(e,t)]}function cT(n){var r,s;let e=[];e.push(`## ${n.title} - Model Info`),e.push(""),e.push(...sne(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} | ${lT(Uu(a.name,`mesh-${o+1}`))} | ${l} | ${a.vertexCount.toLocaleString()} | ${lT(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(`- ${Di(o)}`);e.push("")}return e.join(` +`)}function fT(n,e={}){var r;let t=Di(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 | ${lT(Uu(n.name))} |`),i.push(`| Triangles | ${n.triangleCount.toLocaleString()} |`),i.push(`| Vertices | ${n.vertexCount.toLocaleString()} |`),i.push(`| Material | ${lT(Uu(n.materialName))} |`),i.push(`| Bounding Size | ${LM(n.boundingSize)} |`),i.push(`| Center | ${LM(n.center,{separator:", "})} |`),i.push(""),i.join(` +`)}var hT=M(()=>{"use strict";sT();oT()});function dT(n){return{canvas:n.canvas,observeRender:n.observeRender,getCameraStateKey:n.getCameraStateKey,projectWorldPoint:n.projectWorldPoint,isWorldPointOccluded:n.isWorldPointOccluded}}function uT(n){return n.map(e=>e.value.toFixed(e.digits)).join("_")}function Y3(n){return Number.isFinite(n.x)&&Number.isFinite(n.y)&&Number.isFinite(n.z)}function K3(n,e,t){return!Y3(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 j3(n,e,t,i,r){return!Y3(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 DM=M(()=>{"use strict"});function F_(n){var e;return n.size===0?null:n.size===1?(e=Array.from(n)[0])!=null?e:null:`${n.size} materials`}function ane(n){return Math.max(n.boundingSize.x,n.boundingSize.y,n.boundingSize.z)}function one(n){return Math.max(n.boundingSize.x,n.boundingSize.y,n.boundingSize.z)}function lne(n){let e=n.trim().toLowerCase();return/^(mesh|node|object|primitive|points|pointcloud|geometry)[-_\s.]?\d+$/i.test(e)||/^(mesh|node|object|primitive|points|pointcloud|geometry)$/i.test(e)}function cne(n){let e={x:n.boundingSize.x/2,y:n.boundingSize.y/2,z:n.boundingSize.z/2};return{min:{x:n.center.x-e.x,y:n.center.y-e.y,z:n.center.z-e.z},max:{x:n.center.x+e.x,y:n.center.y+e.y,z:n.center.z+e.z}}}function fne(n,e){if(n.source&&n.source!=="mesh"||!Number.isFinite(e)||e<=0||!lne(n.name))return!1;let t=ane(n);return Number.isFinite(t)&&t>0&&t<=e*.04}function hne(n){var o;let e=null,t=0,i=0,r=new Set,s=[];for(let l of n)e=iT(e,cne(l)),t+=l.triangleCount,i+=l.vertexCount,l.materialName&&r.add(l.materialName),s.push(...(o=l.meshNames)!=null&&o.length?l.meshNames:[l.name]);let a=e!=null?e:{min:{x:0,y:0,z:0},max:{x:0,y:0,z:0}};return{name:"Small detail cluster",triangleCount:t,vertexCount:i,materialName:F_(r),boundingSize:sr(a),center:yr(a),source:"detail-cluster",meshNames:s,childCount:n.length}}function dne(n,e,t){let i=one(n),r=t.filter(o=>fne(o,i));if(r.length<2)return e.length>0?[...e,...t]:[...t];let s=new Set(r),a=t.filter(o=>!s.has(o));return[...e,hne(r),...a]}function mT(n){var e;return{summary:n.summary,parts:une(n),materialNames:mne(n.renderableMeshes,n.getMeshMaterialNames),resourceWarnings:n.resourceWarnings?[...n.resourceWarnings]:[],capturedAt:(e=n.capturedAt)!=null?e:new Date().toISOString()}}function une(n){let e=n.renderableMeshes.filter(t=>!n.groupedPartCandidates.groupedMeshes.has(t)).map(t=>n.createMeshPart(t));return dne(n.summary,n.groupedPartCandidates.parts,e)}function mne(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 B_=M(()=>{"use strict";jo()});function pT(n){switch(n){case"\xB5m":case"\u03BCm":return"um";case"um":case"mm":case"cm":case"m":return n;default:return"mm"}}function G_(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 _T(n,e,t,i){let r=G_(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 V_(n,e){return n.toFixed(e).replace(/\.?0+$/,"")}function _ne(n,e){if(n===0)return e;let t=Math.abs(n)*NM[e];return t<.001?"um":t<.1?"mm":t<1?"cm":"m"}function Z3(n){return n==="um"?"um":pne[n]}function U_(n,e,t=!0){let i=t?_ne(n,e):e,r=n*NM[e]/NM[i],s=Math.abs(r),a=s>=100?1:s>=10?2:3;return`${V_(r,a)} ${Z3(i)}`}function OM(n){let e=Math.abs(n),t=e>=100?1:e>=10?2:3;return V_(e,t)}function Vu(n){return{primary:U_(n.distance,n.unit),secondary:[`X ${OM(n.absDelta.x)}`,`Y ${OM(n.absDelta.y)}`,`Z ${OM(n.absDelta.z)}`,Z3(n.unit)].join(" ")}}function gT(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=q3(t.start),s=q3(t.end);e.push([t.index,U_(t.reading.distance,i),U_(t.reading.absDelta.x,i,!1),U_(t.reading.absDelta.y,i,!1),U_(t.reading.absDelta.z,i,!1),r,s].join(" | ").replace(/^/,"| ").replace(/$/," |"))}return e.join(` +`)}function q3(n){return`${V_(n.x,3)}, ${V_(n.y,3)}, ${V_(n.z,3)}`}var NM,pne,wM=M(()=>{"use strict";NM={um:1e-6,mm:.001,cm:.01,m:1},pne={um:"\u03BCm",mm:"mm",cm:"cm",m:"m"}});function ET(n){return new FM(n)}var vT,FM,BM=M(()=>{"use strict";vT=class vT{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";$n();ms();BM();Q3=new ft(4890367),gne=new ft(1722990),UM=class{constructor(e,t,i,r,s,a){this.raycaster=new Qc;this.pointer=new It;this.tempBox=new _r;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 wl(e,Q3),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=kd(Gt(i),Gt(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=Uc(Gt(r),Gt(i));if(!s)return;let a=this.tempDirection.set(s.direction.x,s.direction.y,s.direction.z);this.raycaster.set(r,a),this.raycaster.far=s.distance;let o=this.raycaster.intersectObjects(this.meshes,!1)[0],l=!!o&&Bc(o.distance,s.distance,s.epsilon);l!==this.lastOccluded&&(this.lastOccluded=l,this.selectionHelper&&(this.selectionHelper.material.color.set(l?gne:Q3),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=wv({startPosition:Gt(e.startPosition),pivot:Gt(e.pivot),startRotationQuaternion:Nv(e.startQuaternion),yawAxis:Gt(a),pitchAxis:Gt(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=kd(Gt(r),Gt(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=Ov({origin:Gt(this.raycaster.ray.origin),direction:Gt(this.raycaster.ray.direction)},t);return a?new se(a.x,a.y,a.z):null}}});function e2(n){return Qr(n)}function vne(n,e){return{originalPosition:e2(n),originalCenter:e2(e)}}function ST(n,e,t){let i=n.getRootCenter();for(let r of n.getParts()){let s=n.getPartState(r);s||(s=vne(n.getPartPosition(r),n.getPartCenter(r)),n.setPartState(r,s));let a=(s.originalCenter[t]-i[t])*e;n.setPartPosition(r,jw(s.originalPosition,t,a))}}function TT(n){for(let e of n.getParts()){let t=n.getPartState(e);t&&n.setPartPosition(e,t.originalPosition)}}var VM=M(()=>{"use strict";ms()});function AT(n){return Qr(n)}function Ene(n){return n instanceof ti}function Sne(n){let e=[];return n.traverse(t=>{Ene(t)&&t.geometry&&e.push(t)}),e}function t2(n,e,t){ST(new xT(n),e,t)}function GM(n){TT(new xT(n))}var xT,i2=M(()=>{"use strict";$n();ms();jo();VM();xT=class{constructor(e){this.root=e}getParts(){return Sne(this.root)}getRootCenter(){let e=new _r().setFromObject(this.root);return yr({min:Gt(e.min),max:Gt(e.max)})}getPartPosition(e){return Gt(e.position)}getPartCenter(e){let i=new _r().setFromObject(e).getCenter(new se);return Gt(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:AT(t._previewExplodeState.originalPosition),originalCenter:AT(t._previewExplodeState.originalCenter)}:null}setPartState(e,t){e.userData._previewExplodeState={originalPosition:AT(t.originalPosition),originalCenter:AT(t.originalCenter)}}}});function r2(n){return n.cameraMoved||n.animating||n.renderDirty||n.renderObserverCount>0&&n.renderObserverSettleFrames>0}var RT,n2=M(()=>{"use strict";RT=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}}}});function Mne(n){return!!n&&typeof n=="object"&&!Array.isArray(n)}function bT(n){return n.toLowerCase().replace(/[^a-z0-9]+/g,"")}function Cne(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 s2(n,e=0){if(!Mne(n)||e>2)return[];let t=[];for(let i of Ine)for(let[r,s]of Object.entries(n))bT(r)===bT(i)&&t.push(...s2(s,e+1));return t.push(n),t}function k_(n,e){let t=new Set(e.map(bT));for(let i of n)for(let[r,s]of Object.entries(i)){if(!t.has(bT(r)))continue;let a=Cne(s);if(a)return a}}function Ul(n,e={}){var c,f;let t=s2(n),i=k_(t,Tne),r=k_(t,Ane),s=k_(t,xne),a=(c=k_(t,bne))!=null?c:e.path,o=(f=k_(t,Rne))!=null?f:e.name;return{componentId:i,occurrenceId:r,partNumber:s,componentPath:a,displayName:o,hasExplicitIdentity:!!(i||r||s)}}var Tne,Ane,xne,Rne,bne,Ine,kM=M(()=>{"use strict";Tne=["ai3dPartId","partId","componentId","componentIdentifier","cadId","persistentId","externalId","id"],Ane=["ai3dOccurrenceId","occurrenceId","instanceId","occurrencePath","assemblyPath","pathId"],xne=["ai3dPartNumber","partNumber","partNo","partNum","swPartNumber","solidworksPartNumber","part_number"],Rne=["displayName","partName","componentName","cadName","name"],bne=["componentPath","cadPath","assemblyPath","occurrencePath"],Ine=["ai3d","cad","solidworks","sw","metadata","properties","extras","gltf","userData"]});function eo(n){return n instanceof ti}function IT(n){return n instanceof Ln}function Ph(n){return eo(n)||IT(n)}function bs(n){return n?Array.isArray(n)?n:[n]:[]}function CT(n){var r,s,a,o;if(IT(n))return 0;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 W_(n){var e,t;return(t=(e=n.geometry.getAttribute("position"))==null?void 0:e.count)!=null?t:0}function H_(n){return n?n.name||n.type||`material-${n.uuid}`:null}function af(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 MT(n,e){let t=[],i=e;for(;i&&i!==n;)t.push(af(i,i.type||`object-${i.id}`)),i=i.parent;return t.reverse().join("/")}function Js(n){let e=new _r().setFromObject(n);return N_(Gt(e.min),Gt(e.max))}function a2(n){return bs(n.material).map(e=>H_(e))}function o2(n){return{name:af(n,IT(n)?`points-${n.id}`:`mesh-${n.id}`),triangleCount:IT(n)?null:CT(n),vertexCount:W_(n),materialName:H_(bs(n.material)[0])}}function yne(n,e){n.updateWorldMatrix(!0,!1);let t=Js(n),i=af(n,`mesh-${n.id}`),r=Ul(n.userData,{name:i,path:e?MT(e,n):i});return yh({name:WM(r,i),triangleCount:CT(n),vertexCount:W_(n),materialName:H_(bs(n.material)[0]),boundingSize:sr(t),center:yr(t),source:r.hasExplicitIdentity?"component":"mesh",meshNames:[i],childCount:1,componentId:r.componentId,occurrenceId:r.occurrenceId,partNumber:r.partNumber,componentPath:r.componentPath})}function yT(n,e){if(eo(n))return yne(n,e);n.updateWorldMatrix(!0,!1);let t=Js(n),i=af(n,`points-${n.id}`),r=Ul(n.userData,{name:i,path:e?MT(e,n):i});return yh({name:WM(r,i),triangleCount:0,vertexCount:W_(n),materialName:H_(bs(n.material)[0]),boundingSize:sr(t),center:yr(t),source:r.hasExplicitIdentity?"component":"mesh",meshNames:[i],childCount:1,componentId:r.componentId,occurrenceId:r.occurrenceId,partNumber:r.partNumber,componentPath:r.componentPath})}function l2(n,e){let t=new Set(e),i=[],r=new Set,s=[];return n.updateWorldMatrix(!0,!0),n.traverse(a=>{if(a===n||eo(a))return;let o=[];if(a.traverse(c=>{eo(c)&&t.has(c)&&o.push(c)}),o.length<2||o.length===e.length){let c=Ul(a.userData,{name:af(a,`component-${a.id}`),path:MT(n,a)});if(!c.hasExplicitIdentity||o.length<1||o.length===e.length)return;s.push({object:a,childMeshes:o,identity:c});return}let l=Ul(a.userData,{name:af(a,`group-${a.id}`),path:MT(n,a)});!l.hasExplicitIdentity&&!a.name.trim()||s.push({object:a,childMeshes:o,identity:l})}),s.sort((a,o)=>a.childMeshes.length-o.childMeshes.length).forEach(({object:a,childMeshes:o,identity:l})=>{let c=o.filter(m=>!r.has(m));if(c.length<1||!l.hasExplicitIdentity&&c.length<2)return;for(let m of c)r.add(m);let f=new _r;for(let m of c)m.updateWorldMatrix(!0,!1),f.union(new _r().setFromObject(m));let h=new Set,d=0,u=0;for(let m of c){d+=CT(m),u+=W_(m);for(let p of bs(m.material)){let _=H_(p);_&&h.add(_)}}i.push(yh({name:WM(l,af(a,`group-${a.id}`)),triangleCount:d,vertexCount:u,materialName:F_(h),boundingSize:sr({min:Gt(f.min),max:Gt(f.max)}),center:yr({min:Gt(f.min),max:Gt(f.max)}),source:l.hasExplicitIdentity?"component":"group",meshNames:c.map(m=>af(m,`mesh-${m.id}`)),childCount:c.length,componentId:l.componentId,occurrenceId:l.occurrenceId,partNumber:l.partNumber,componentPath:l.componentPath}))}),{parts:i,groupedMeshes:r}}function PT(n,e,t=[]){return aT({rootName:n.name||"__root__",boundingSize:sr(Js(n)),meshes:e.map(i=>({triangleCount:CT(i),vertexCount:W_(i),materialKeys:bs(i.material).map(r=>r.uuid)})),resourceWarnings:t})}function WM(n,e){var t;return((t=n.displayName)==null?void 0:t.trim())||n.partNumber||n.componentId||e}var c2=M(()=>{"use strict";$n();jo();kM();B_();ms();oT()});var p2={};tt(p2,{ThreeModelPreview:()=>DT,createThreeModelPreview:()=>jne});function d2(){return{textureCount:0,colorTextureCount:0,srgbColorTextureCount:0}}function Xne(n,e){n.textureCount+=e.textureCount,n.colorTextureCount+=e.colorTextureCount,n.srgbColorTextureCount+=e.srgbColorTextureCount}function u2(n){return n instanceof Wo||n instanceof Za||n instanceof Nl}function m2(n){let e=n.clone();return e.transparent=!0,e.opacity=Math.max(0,Math.min(1,n.opacity))*Pne,e.depthWrite=!1,e.needsUpdate=!0,e}function Yne(n){return Array.isArray(n)?n.map(m2):m2(n)}function Kne(n){for(let e of bs(n))e.dispose()}function jne(n){return new DT(n)}var LT,Pne,Lne,Dne,One,Nne,wne,f2,Fne,h2,Bne,Une,Vne,Gne,kne,Wne,Hne,zne,DT,_2=M(()=>{"use strict";$n();f3();h3();B3();$s();jo();nT();hT();DM();ms();B_();wM();J3();i2();Hs();CM();n2();c2();LT=new ft("#20242e"),Pne=.242,Lne=.28,Dne=2.5,One=1.5,Nne=1.15,wne=260,f2=30,Fne=8,h2=28,Bne=18,Une=2,Vne=28,Gne=.86,kne=1.08,Wne=.62,Hne=.86,zne=4;DT=class{constructor(e){this.raycaster=new Qc;this.occlusionRaycaster=new Qc;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=d2();this.renderHandle=0;this.contextLost=!1;this.quality="high";this.renderScale=1;this.interactivePixelRatioActive=!1;this.interactionPixelRatioDeadline=0;this.renderObserverSettleFrames=0;this.frameBudgetPixelRatioScale=1;this.frameBudgetSlowStreak=0;this.frameBudgetFastStreak=0;this.frameBudgetObserverStride=1;this.frameBudgetObserverCursor=0;this.frameBudgetShadowDeferred=!1;this.lastFrameDurationMs=0;this.smoothness=new RT;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.cachedRenderables=null;this.cachedRenderableRoot=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 GS({canvas:e,antialias:!0,alpha:!0,preserveDrawingBuffer:!0,powerPreference:"high-performance"}),this.renderer.outputColorSpace=Ii,this.renderer.toneMapping=Ts,this.renderer.toneMappingExposure=1,this.renderer.shadowMap.enabled=!0,this.renderer.shadowMap.type=YE,this.renderer.shadowMap.autoUpdate=!1,this.renderer.shadowMap.needsUpdate=!0,this.renderer.setClearColor(LT,1),this.scene=new gh,this.installGlobalEnvironment(),this.camera=new hr(this.initialFov,1,.01,2e3),this.camera.position.copy(this.initialPosition),this.camera.lookAt(this.initialTarget),this.scene.add(this.camera),this.controls=new zS(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=d2();let s,a=[];if(this.loadedExt==="glb"||this.loadedExt==="gltf"){let c=await O3(e,this.loadedExt,i,r);s=c.scene,a=c.animations,this.resourceWarnings=c.warnings}else if(this.loadedExt==="stl")s=await N3(e),this.stlMaterial=eo(s)?s.material:null;else if(this.loadedExt==="ply")s=await w3(e);else if(this.loadedExt==="obj"){let c=await F3(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 __(s);for(let c of a)this.mixer.clipAction(c).play();this.animationPlaying=!0}let o=PT(s,this.getRenderableObjects(s),this.resourceWarnings);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 dT({canvas:e,observeRender:t=>(this.renderObservers.add(t),this.setRenderObserverSettleFrames(),this.markDirty(),{remove:()=>{this.renderObservers.delete(t),this.renderObservers.size===0&&this.setRenderObserverSettleFrames(0)}}),getCameraStateKey:()=>this.getAnnotationCameraStateKey(),projectWorldPoint:(t,i)=>this.projectAnnotationWorldPoint(t,i),isWorldPointOccluded:t=>this.isAnnotationWorldPointOccluded(t)})}exportModelInfo(e){if(!this.rootObject)return"";let t=this.getRenderableObjects(this.rootObject),i=PT(this.rootObject,t,this.resourceWarnings),r=e&&us(e)||i.rootName;return cT({title:r,format:this.loadedExt.toUpperCase(),summary:i,meshBreakdown:t.map(o2)})}getModelEvidence(){if(!this.rootObject)return null;let e=this.getRenderableObjects(this.rootObject),t=this.getRenderableMeshes(this.rootObject),i=l2(this.rootObject,t),r={parts:i.parts,groupedMeshes:new Set(i.groupedMeshes)};return mT({summary:PT(this.rootObject,e,this.resourceWarnings),renderableMeshes:e,groupedPartCandidates:r,createMeshPart:s=>yT(s,this.rootObject),getMeshMaterialNames:a2,resourceWarnings:this.resourceWarnings})}getSelectedPartInfo(){var i;let e=(i=this.focusedMesh)!=null?i:eo(this._lastPickResult.mesh)?this._lastPickResult.mesh:null;if(e)return yT(e,this.rootObject);let t=Ph(this._lastPickResult.mesh)?this._lastPickResult.mesh:null;return t?yT(t,this.rootObject):null}exportSelectedPartInfo(){let e=this.getSelectedPartInfo();return e?fT(e):""}getPickWorldPoint(e){return e.pickedPoint&&typeof e.pickedPoint=="object"?Gt(e.pickedPoint):Ph(e.mesh)?yr(Js(e.mesh)):null}onPick(e){return this._onPickCallbacks.push(e),()=>{this._onPickCallbacks=this._onPickCallbacks.filter(t=>t!==e)}}resetView(){this.rootObject&&GM(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 hr&&(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=bs(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 bu(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=G_(e),this.updateMeasurementLabels()}getMeasurementScale(){return{...this.measurementScale}}setMeasurementUnit(e){this.measurementUnit=pT(e),this.updateMeasurementLabels()}getMeasurementUnit(){return this.measurementUnit}getMeasurementBounds(){if(!this.rootObject)return null;let e=Js(this.rootObject);return sr(e)}getMeasurementRecords(){return this.createMeasurementRecords()}exportMeasurements(){return gT(this.createMeasurementRecords())}updateMeasurementLabels(){var t;if(this.measurementSegments.length===0)return;let e=this.getMeasurementMarkerSize()*4;for(let i of this.measurementSegments){let r=Vu(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.getRenderableObjects(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===Ts?"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&&(t2(this.rootObject,e,t),this.markShadowDirty(),this.markDirty())}resetExplode(){this.rootObject&&(GM(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=$3(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}let t=this.renderNow(performance.now());this.renderHandle=t?window.requestAnimationFrame(e):0};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!1;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)return this.smoothness.recordIdleFrameSkip(),this.renderObserverSettleFrames>0&&(this.renderObserverSettleFrames--,this.notifyRenderObservers()),this.shouldContinueRenderLoop(r,s);this.renderDirty=!1,this.setRenderObserverSettleFrames(),(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;return this.smoothness.recordRenderedFrame(o,h2),this.updateFrameBudget(o),this.notifyRenderObservers(),this.shouldContinueRenderLoop(r,s)}shouldContinueRenderLoop(e,t){return r2({cameraMoved:e,animating:t,renderDirty:this.renderDirty,renderObserverCount:this.renderObservers.size,renderObserverSettleFrames:this.renderObserverSettleFrames})}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+wne,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=h2?(this.frameBudgetSlowStreak++,this.frameBudgetFastStreak=0):e<=Bne?(this.frameBudgetFastStreak++,this.frameBudgetSlowStreak=0):(this.frameBudgetSlowStreak=0,this.frameBudgetFastStreak=0),this.frameBudgetSlowStreak>=Une){this.frameBudgetSlowStreak=0;let t=Math.max(Wne,this.frameBudgetPixelRatioScale*Gne);t=Vne&&this.frameBudgetPixelRatioScale<1&&(this.frameBudgetFastStreak=0,this.frameBudgetPixelRatioScale=Math.min(1,this.frameBudgetPixelRatioScale*kne),this.frameBudgetObserverStride=Math.max(1,this.frameBudgetObserverStride-1),this.setRenderObserverSettleFrames(),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.setRenderObserverSettleFrames(),e&&this.markDirty()}setRenderObserverSettleFrames(e=f2){this.renderObserverSettleFrames=this.renderObservers.size>0?e:0}shouldDeferShadowRefresh(){return this.interactivePixelRatioActive&&this.frameBudgetPixelRatioScale<=Hne}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 Ss?this.updateOrthographicFrustum(t/i):this.camera.aspect=t/i,this.camera.updateProjectionMatrix(),this.markDirty()}computeOrthographicViewSpan(){if(!this.rootObject)return 2;let e=Js(this.rootObject),t=sr(e);return Math.max(Math.max(t.x,t.y,t.z,Number.EPSILON)*1.2,.001)}updateOrthographicFrustum(e){if(!(this.camera instanceof Ss))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 hr||e==="orthographic"&&this.camera instanceof Ss))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 Ss(-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 hr(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 hr&&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(LT,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=LT,this.renderer.setClearColor(LT,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 xu(16777215,.96);e.name="default-global-ambient";let t=new Au(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 Nu(this.renderer),t=new XS;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 xu(t,i);case"hemisphere":{let h=e.groundColor?new ft(e.groundColor):new ft(4473924);return new Au(t,h,i)}case"directional":{let h=new Wo(t,i),d=(s=e.position)!=null?s:[-1,2,1],u=(a=e.target)!=null?a:[0,0,0];return h.position.set(...d),h.target.position.set(...u),this.scene.add(h.target),h.castShadow=!!e.castShadow,h}case"point":{let h=new Za(t,i),d=(o=e.position)!=null?o:[0,5,0];return h.position.set(...d),h.castShadow=!!e.castShadow,typeof e.decay=="number"&&(h.decay=e.decay),h}case"spot":{let h=new Nl(t,i),d=(l=e.position)!=null?l:[0,5,0],u=(c=e.target)!=null?c:[0,0,0];return h.position.set(...d),h.target.position.set(...u),this.scene.add(h.target),h.angle=e.angle?e.angle*Math.PI/180:Math.PI/4,h.penumbra=(f=e.penumbra)!=null?f:.5,typeof e.decay=="number"&&(h.decay=e.decay),h.castShadow=!!e.castShadow,h}case"attachToCam":{let h=new Za(t,i);return this.camera.add(h),h}default:return null}}disposeConfiguredLight(e){(e instanceof Wo||e instanceof Nl)&&e.target.removeFromParent(),e.removeFromParent(),e.dispose()}prepareModelForQuality(e){let t=this.renderer.capabilities.getMaxAnisotropy();e.traverse(i=>{if(Ph(i)){eo(i)&&(i.castShadow=!0,i.receiveShadow=!0);for(let r of bs(i.material))this.prepareMaterialForQuality(r,t)}})}prepareMaterialForQuality(e,t){Xne(this.textureAudit,tT(e,t))}applyShadowQuality(){let e=this.shadowMapSize();for(let t of this.allLights())!u2(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 _r().setFromObject(this.rootObject),t=e.getCenter(new se),i=e.getSize(new se),r=Math.max(i.x,i.y,i.z,Number.EPSILON),s=Math.max(r*1.8,.001);for(let a of this.allLights())if(!(!u2(a)||!a.castShadow)){if(a.shadow.mapSize.set(this.shadowMapSize(),this.shadowMapSize()),a.shadow.bias=-12e-5,a.shadow.normalBias=.018,a instanceof Wo){let o=a.position.clone().sub(a.target.position);if(o.lengthSq()<.001&&o.set(4,7,5),a.target.position.copy(t),a.target.parent||this.scene.add(a.target),a.position.copy(t).add(o.normalize().multiplyScalar(s*2.4)),a.shadow.camera instanceof Ss){let l=a.shadow.camera;l.left=-s,l.right=s,l.top=s,l.bottom=-s,l.near=.1,l.far=s*5,l.updateProjectionMatrix()}}a.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 bu(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=Js(this.rootObject),t=yr(e),i=sr(e),r=Math.max(i.x,i.z,Number.EPSILON),s=Math.max(r*3,.001),a=e.min.y-Math.max(s*.002,1e-5),o=new ti(new Sh(s,s),new c_({color:0,opacity:Lne,transparent:!0}));o.name="ai3d-ground-shadow",o.rotation.x=-Math.PI/2,o.position.set(t.x,a,t.z),o.receiveShadow=!0,o.renderOrder=-1,this.scene.add(o),this.groundShadowMesh=o}removeGroundShadow(){if(this.groundShadowMesh){this.groundShadowMesh.removeFromParent(),this.groundShadowMesh.geometry.dispose();for(let e of bs(this.groundShadowMesh.material))e.dispose();this.groundShadowMesh=null}}createGrid(){if(!this.rootObject||this.gridHelper)return;let e=Js(this.rootObject),t=yr(e),i=sr(e),r=Math.max(i.x,i.z,Number.EPSILON),s=Math.max(r*2,.001),a=new g_(s,20,7305093,3423046);a.name="ai3d-grid",a.position.set(t.x,e.min.y-Math.max(s*.003,1e-5),t.z);for(let o of bs(a.material))o.transparent=!0,o.opacity=.42;this.scene.add(a),this.gridHelper=a}removeGrid(){if(this.gridHelper){this.gridHelper.removeFromParent(),this.gridHelper.geometry.dispose();for(let e of bs(this.gridHelper.material))e.dispose();this.gridHelper=null}}dispatchPick(e){var o,l,c;if(!this.rootObject||(o=this.disassembly)!=null&&o.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.getRenderableObjects(this.rootObject),!1)[0],r=Ph(i==null?void 0:i.object)?i.object:null,s=r instanceof ti?r:null,a={mesh:r,pickedPoint:(c=(l=i==null?void 0:i.point)==null?void 0:l.clone())!=null?c:null,screenX:e.clientX,screenY:e.clientY};if(this._lastPickResult=a,this.measurementActive&&(i!=null&&i.point)){this.addMeasurementPoint(i.point.clone());return}this.focusSelectionEnabled&&s?(this.clearSelectionHighlight(),this.focusedMesh!==s&&this.setFocusedMesh(s)):this.focusSelectionEnabled?this.clearSelectionHighlight():this.updateSelectionHighlight(s),this._onPickCallbacks.forEach(f=>f(a))}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++,!Ph(l))return;eo(l)&&a++;let c=l.geometry;c&&!i.has(c.uuid)&&(c.dispose(),i.add(c.uuid));for(let f of bs(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=Js(e),i=k3(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=sr(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 uT([{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 hr?this.camera.fov:this.camera.zoom,digits:this.camera instanceof hr?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),K3(this.annotationProjection,i,t))}isAnnotationWorldPointOccluded(e){if(!this.rootObject)return!1;let t=Uc(Gt(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.getRenderableObjects(this.rootObject),!1)[0];return!!i&&Bc(i.distance,t.distance,t.epsilon)}getRenderableMeshes(e){if(this.cachedMeshes&&this.cachedMeshRoot===e)return this.cachedMeshes;let t=[];return e.traverse(i=>{eo(i)&&i.geometry&&t.push(i)}),this.cachedMeshes=t,this.cachedMeshRoot=e,t}getRenderableObjects(e){if(this.cachedRenderables&&this.cachedRenderableRoot===e)return this.cachedRenderables;let t=[];return e.traverse(i=>{Ph(i)&&i.geometry&&t.push(i)}),this.cachedRenderables=t,this.cachedRenderableRoot=e,t}getGeometryQualityStats(){if(!this.rootObject)return{meshCount:0,pointCloudCount:0,smallPartCount:0,smallestPartSpan:null,modelSpan:null};let e=sr(Js(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.getRenderableObjects(this.rootObject)){o instanceof Ln&&r++;let l=sr(Js(o)),c=Math.max(l.x,l.y,l.z);Number.isFinite(c)&&c>0&&(a=Math.min(a,c),eo(o)&&c<=i&&c0?Number(t.toPrecision(6)):null}}invalidateMeshCache(){this.cachedMeshes=null,this.cachedMeshRoot=null,this.cachedRenderables=null,this.cachedRenderableRoot=null}ensureBoundingBoxHelper(){var e;this.rootObject&&((e=this.bboxHelper)==null||e.removeFromParent(),this.bboxHelper=new wl(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 wl(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=Yne(o);this.focusDimMaterials.set(a.id,l),a.material=l}(s=this.focusHelper)==null||s.removeFromParent(),this.focusHelper=new wl(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())Kne(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=Js(this.rootObject),t=sr(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 Tu(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 Tu(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 Bo(i,new Pn({color:16739179,depthTest:!1}));r.renderOrder=998,this.scene.add(r);let s=Vu(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 o_(r),o=new gu({map:a,depthTest:!1}),l=new i_(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 Bo(e,new Pn({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.getRenderableObjects(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 _T(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}}}});var qne,HM,zM,ie,di=M(()=>{qne=typeof WeakRef!="undefined",HM=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}},zM=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 HM(0),e&&(this._onObserverAdded=e)}add(e,t=-1,i=!1,r=null,s=!1){if(!e)return null;let a=new zM(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=qne?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 OT,g2=M(()=>{OT=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 v2,Oi,Is=M(()=>{di();g2();(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"})(v2||(v2={}));Oi=class n extends OT{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 J,Pt=M(()=>{J=class n{static _CheckLimit(e,t){let i=n._LogLimitOutputs[e];return i?i.current++:(i={limit:t,current:1},n._LogLimitOutputs[e]=i),i.current<=i.limit}static _GenerateLimitMessage(e,t=1){var s;let i=n._LogLimitOutputs[e];if(!i||!n.MessageLimitReached)return;let r=this._Levels[t];i.current===i.limit&&n[r.name](n.MessageLimitReached.replace(/%LIMIT%/g,""+i.limit).replace(/%TYPE%/g,(s=r.name)!=null?s:""))}static _AddLogEntry(e){n._LogCache=e+n._LogCache,n.OnNewCacheEntry&&n.OnNewCacheEntry(e)}static _FormatMessage(e){let t=r=>r<10?"0"+r:""+r,i=new Date;return"["+t(i.getHours())+":"+t(i.getMinutes())+":"+t(i.getSeconds())+"]: "+e}static _LogDisabled(e,t){}static _LogEnabled(e=1,t,i){let r=Array.isArray(t)?t[0]:t;if(i!==void 0&&!n._CheckLimit(r,i))return;let s=n._FormatMessage(r),a=this._Levels[e],o=Array.isArray(t)?t.slice(1):[];a.logFunc&&a.logFunc("BJS - "+s,...o);let l=`
${s}

`;n._AddLogEntry(l),n._GenerateLimitMessage(r,e)}static get LogCache(){return n._LogCache}static ClearLogCache(){n._LogCache="",n._LogLimitOutputs={},n.errorsCount=0}static set LogLevels(e){n.Log=n._LogDisabled,n.Warn=n._LogDisabled,n.Error=n._LogDisabled;let t=[n.MessageLogLevel,n.WarningLogLevel,n.ErrorLogLevel];for(let i of t)if((e&i)===i){let r=this._Levels[i];n[r.name]=n._LogEnabled.bind(n,i)}}};J.NoneLogLevel=0;J.MessageLogLevel=1;J.WarningLogLevel=2;J.ErrorLogLevel=4;J.AllLogLevel=7;J.MessageLimitReached="Too many %TYPE%s (%LIMIT%), no more %TYPE%s will be reported for this message.";J._LogCache="";J._LogLimitOutputs={};J._Levels=[{},{color:"white",logFunc:console.log,name:"Log"},{color:"orange",logFunc:console.warn,name:"Warn"},{},{color:"red",logFunc:console.error,name:"Error"}];J.errorsCount=0;J.Log=J._LogEnabled.bind(J,J.MessageLogLevel);J.Warn=J._LogEnabled.bind(J,J.WarningLogLevel);J.Error=J._LogEnabled.bind(J,J.ErrorLogLevel)});var 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 ur(){return typeof window!="undefined"}function Vl(){return typeof navigator!="undefined"}function of(){return typeof document!="undefined"}function NT(n){let e="",t=n.firstChild;for(;t;)t.nodeType===3&&(e+=t.textContent),t=t.nextSibling;return e}var Sa=M(()=>{});var wT,E2=M(()=>{wT=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 qe(n,e=!1){if(!(e&&S2[n]))return S2[n]=!0,`${n} needs to be imported before as it contains a side-effect required by your code.`}var S2,hn=M(()=>{S2={}});function FT(n,e,t=""){return t+(e?e+` +`:"")+n}function BT(n,e,t,i,r,s,a){let o=a||Gu.loadFile;if(o)return o(n,e,t,i,r,s);throw qe("FileTools")}function UT(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 E2(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,of=M(()=>{hn();Sa();Vu={}});function Dn(n){let e=kM.get(n);if(!e){if(!n)return Vne;e={_webGLVersion:n.TEXTURE_BINDING_3D?2:1,_context:n,parallelShaderCompile:n.getExtension("KHR_parallel_shader_compile")||void 0,cachedPipelines:{}},kM.set(n,e)}return e}function NT(n){kM.delete(n)}function HM(n,e,t,i,r,s){var c;let a=Dn(i);s||(s=(c=a._createShaderProgramInjection)!=null?c:wT);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 zM(n,e,t,i,r,s=null,a){var h;let o=Dn(r);a||(a=(h=o._createShaderProgramInjection)!=null?h:wT);let l=o._webGLVersion>1?`#version 300 es +`),r+="#define USE_EXACT_SRGB_CONVERSIONS"),r}}function T2(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 Gu,lf=M(()=>{hn();Sa();Gu={}});function On(n){let e=XM.get(n);if(!e){if(!n)return Zne;e={_webGLVersion:n.TEXTURE_BINDING_3D?2:1,_context:n,parallelShaderCompile:n.getExtension("KHR_parallel_shader_compile")||void 0,cachedPipelines:{}},XM.set(n,e)}return e}function VT(n){XM.delete(n)}function KM(n,e,t,i,r,s){var c;let a=On(i);s||(s=(c=a._createShaderProgramInjection)!=null?c:GT);let o=YM(e,"vertex",i,a._contextWasLost),l=YM(t,"fragment",i,a._contextWasLost);return s(n,o,l,i,r,a.validateShaderPrograms)}function jM(n,e,t,i,r,s=null,a){var h;let o=On(r);a||(a=(h=o._createShaderProgramInjection)!=null?h:GT);let l=o._webGLVersion>1?`#version 300 es #define WEBGL2 -`:"",c=S2(e,"vertex",i,l,r,o._contextWasLost),f=S2(t,"fragment",i,l,r,o._contextWasLost);return a(n,c,f,r,s,o.validateShaderPrograms)}function T2(n,e){let t=new PT,i=Dn(n);return i.parallelShaderCompile&&!i.disableParallelShaderCompile&&(t.isParallelCompiled=!0),t.context=i._context,t}function wT(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||FT(n,i,s),a}function A2(n,e,t){let i=n;if(i._isDisposed)return!1;let r=Dn(e);return r&&r.parallelShaderCompile&&r.parallelShaderCompile.COMPLETION_STATUS_KHR&&i.program&&e.getProgramParameter(i.program,r.parallelShaderCompile.COMPLETION_STATUS_KHR)?(FT(i,e,t),!0):!1}function FT(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 x2(n,e,t,i,r,s,a,o,l,c="",f,h,d){var p,_;let u=Dn(n.context);h||(h=(p=u.createRawShaderProgramInjection)!=null?p:HM),d||(d=(_=u.createShaderProgramInjection)!=null?_:zM);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 S2(n,e,t,i,r,s){return WM(LT(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 R2(n,e){e.useProgram(n)}function b2(n,e){let t=n;if(!t.isParallelCompiled){e(n);return}let i=t.onCompiled;t.onCompiled=()=>{i==null||i(),e(n)}}var kM,Vne,XM=M(()=>{g2();of();kM=new WeakMap,Vne={_webGLVersion:2,cachedPipelines:{}}});var Gne,kne,Ko,BT=M(()=>{Gne="attribute",kne="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:Gne,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:kne;!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 UT,I2=M(()=>{UT=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{BT();Gu=class extends Ko{process(e,t,i){for(let r=0;r{BT();VT=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();Ch=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 GT,P2=M(()=>{ku();GT=class extends gn{isTrue(e){return this.leftOperand.isTrue(e)||this.rightOperand.isTrue(e)}}});var kT,L2=M(()=>{ku();kT=class extends gn{isTrue(e){return this.leftOperand.isTrue(e)&&this.rightOperand.isTrue(e)}}});var WT,D2=M(()=>{ku();WT=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 w2(n){n.processor&&n.processor.initializeShaders&&n.processor.initializeShaders(n.processingContext)}function ZM(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=Zne(s,e,i);t(a,s)})}function F2(n,e,t){return!t.processor||!t.processor.finalizeShaders?{vertexCode:n,fragmentCode:e}:t.processor.finalizeShaders(n,e,t.processingContext)}function Yne(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=A2(e,"vertex",i,l,r,o._contextWasLost),f=A2(t,"fragment",i,l,r,o._contextWasLost);return a(n,c,f,r,s,o.validateShaderPrograms)}function x2(n,e){let t=new wT,i=On(n);return i.parallelShaderCompile&&!i.disableParallelShaderCompile&&(t.isParallelCompiled=!0),t.context=i._context,t}function GT(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||kT(n,i,s),a}function R2(n,e,t){let i=n;if(i._isDisposed)return!1;let r=On(e);return r&&r.parallelShaderCompile&&r.parallelShaderCompile.COMPLETION_STATUS_KHR&&i.program&&e.getProgramParameter(i.program,r.parallelShaderCompile.COMPLETION_STATUS_KHR)?(kT(i,e,t),!0):!1}function kT(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 b2(n,e,t,i,r,s,a,o,l,c="",f,h,d){var p,_;let u=On(n.context);h||(h=(p=u.createRawShaderProgramInjection)!=null?p:KM),d||(d=(_=u.createShaderProgramInjection)!=null?_:jM);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 A2(n,e,t,i,r,s){return YM(FT(n,t,i),e,r,s)}function YM(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 I2(n,e){e.useProgram(n)}function M2(n,e){let t=n;if(!t.isParallelCompiled){e(n);return}let i=t.onCompiled;t.onCompiled=()=>{i==null||i(),e(n)}}var XM,Zne,qM=M(()=>{E2();lf();XM=new WeakMap,Zne={_webGLVersion:2,cachedPipelines:{}}});var Qne,$ne,qo,WT=M(()=>{Qne="attribute",$ne="varying",qo=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:Qne,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:$ne;!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 HT,C2=M(()=>{HT=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{WT();ku=class extends qo{process(e,t,i){for(let r=0;r{WT();zT=class extends qo{isValid(e){return this.testExpression.isTrue(e)}}});var gn,Wu=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{Wu();Lh=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 XT,D2=M(()=>{Wu();XT=class extends gn{isTrue(e){return this.leftOperand.isTrue(e)||this.rightOperand.isTrue(e)}}});var YT,O2=M(()=>{Wu();YT=class extends gn{isTrue(e){return this.leftOperand.isTrue(e)&&this.rightOperand.isTrue(e)}}});var KT,N2=M(()=>{Wu();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 B2(n){n.processor&&n.processor.initializeShaders&&n.processor.initializeShaders(n.processingContext)}function eC(n,e,t,i){var r;(r=e.processor)!=null&&r.preProcessShaderCode&&(n=e.processor.preProcessShaderCode(n,e.isFragment)),z_(n,e,s=>{e.processCodeAfterIncludes&&(s=e.processCodeAfterIncludes(e.isFragment?"fragment":"vertex",s,e.defines));let a=ose(s,e,i);t(a,s)})}function U2(n,e,t){return!t.processor||!t.processor.finalizeShaders?{vertexCode:n,fragmentCode:e}:t.processor.finalizeShaders(n,e,t.processingContext)}function rse(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 KM(n){let t=/defined\((.+)\)/.exec(n);if(t&&t.length)return new Ch(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 Ch(n);let a=n.substring(0,s).trim(),o=n.substring(s+r.length).trim();return new WT(a,r,o)}function Kne(n){n=n.replace(Wne,"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 kT:new GT;typeof s=="string"&&(s=s.replace(YM,"defined($1)")),typeof a=="string"&&(a=a.replace(YM,"defined($1)")),o.leftOperand=typeof a=="string"?KM(a):a,o.rightOperand=typeof s=="string"?KM(s):s,t.push(o)}let i=t[t.length-1];return typeof i=="string"&&(i=i.replace(YM,"defined($1)")),typeof i=="string"?KM(i):i}function zT(n,e){let t=new VT,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 Ch(r):i==="#ifndef"?t.testExpression=new Ch(r,!0):t.testExpression=Kne(r),t}function jM(n,e,t,i){let r;for(;qM(n,t,i);){r=n.currentLine;let s=r.substring(0,5).toLowerCase();if(s==="#else"){let a=new Ko;e.children.push(a),qM(n,a,i);return}else if(s==="#elif"){let a=zT(r,5);e.children.push(a),t=a}}}function qM(n,e,t){for(;n.canRead;){n.lineIndex++;let i=n.currentLine;if(i.indexOf("#")>=0){let s=Xne.exec(i);if(s&&s.length){switch(s[0]){case"#ifdef":{let o=new Gu;e.children.push(o);let l=zT(i,6);o.children.push(l),jM(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=zT(i,7);o.children.push(l),jM(n,o,l,t);break}case"#if":{let o=new Gu,l=zT(i,3);e.children.push(o),o.children.push(l),jM(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 jne(n,e,t,i){let r=new Ko,s=new UT;return s.lineIndex=-1,s.lines=n.split(` -`),qM(s,r,i),r.process(e,t,i)}function qne(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",OT(i,e==null?void 0:e.isNDCHalfZRange,e==null?void 0:e.useReverseDepthBuffer,e==null?void 0:e.useExactSrgbConversions),i}function Zne(n,e,t){let i=Yne(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=qne(e,t);e.processor.preProcessor&&(i=e.processor.preProcessor(i,r,s,e.isFragment,e.processingContext));let a={};return i=jne(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){HT.length=0;let i;for(;(i=Hne.exec(n))!==null;)HT.push(i);let r=[n],s=!1;for(let o of HT){let l=o[1];if(l.indexOf("__decl__")!==-1&&(l=l.replace(zne,""),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(N2,_.toString())+` -`}else e.supportsUniformBuffers||(c=c.replace(O2,(d,u)=>u+"{X}")),c=c.replace(N2,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,G_(r.join(""),e,t)});return}}HT.length=0;let a=r.join("");s?G_(a.toString(),e,t):t(a)}var Wne,YM,Hne,zne,O2,N2,HT,Xne,QM,XT=M(()=>{BT();I2();M2();C2();y2();P2();L2();ku();D2();hn();of();Wne=/defined\s*?\((.+?)\)/g,YM=/defined\s*?\[(.+?)\]/g,Hne=/#include\s?<(.+)>(\((.*)\))*(\[(.*)\])*/g,zne=/__decl__/,O2=/light\{X\}.(\w*)/g,N2=/\{X\}/g,HT=[],Xne=/(#ifdef)|(#else)|(#elif)|(#endif)|(#ifndef)|(#if)/;QM={loadFile:(n,e,t,i,r,s)=>{throw qe("FileTools")}}});function U2(n,e){return Dn(e).cachedPipelines[n]}function YT(n){let e=n._name,t=n.context;if(e&&t){let i=Dn(t),r=i.cachedPipelines[e];r==null||r.dispose(),delete i.cachedPipelines[e]}}function V2(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;w2(n),ZM(d,n,(m,p)=>{a&&(a._vertexSourceCodeBeforeMigration=p),t&&(m=t("vertex",m)),n.isFragment=!0,ZM(u,n,(_,g)=>{a&&(a._fragmentSourceCodeBeforeMigration=g),t&&(_=t("fragment",_));let v=F2(m,_,n);n=null;let x=Qne(v.vertexCode,v.fragmentCode,e,r);i==null||i(x.vertexSourceCode,x.fragmentSourceCode)},s)},s)}};B2(o,"Vertex","",d=>{a&&(a._rawVertexSourceCode=d),f[0]=d,h()},r),B2(l,"Fragment","Pixel",d=>{a&&(a._rawFragmentSourceCode=d),f[1]=d,h()},r)}function B2(n,e,t,i,r,s){if(typeof HTMLElement!="undefined"&&n instanceof HTMLElement){let l=yT(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||DT,!s)throw new Error("loadFileInjection is not defined");s(o+"."+e.toLowerCase()+".fx",i)}function Qne(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 QM(n){let t=/defined\((.+)\)/.exec(n);if(t&&t.length)return new Lh(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 Lh(n);let a=n.substring(0,s).trim(),o=n.substring(s+r.length).trim();return new KT(a,r,o)}function nse(n){n=n.replace(Jne,"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 YT:new XT;typeof s=="string"&&(s=s.replace(ZM,"defined($1)")),typeof a=="string"&&(a=a.replace(ZM,"defined($1)")),o.leftOperand=typeof a=="string"?QM(a):a,o.rightOperand=typeof s=="string"?QM(s):s,t.push(o)}let i=t[t.length-1];return typeof i=="string"&&(i=i.replace(ZM,"defined($1)")),typeof i=="string"?QM(i):i}function qT(n,e){let t=new zT,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 Lh(r):i==="#ifndef"?t.testExpression=new Lh(r,!0):t.testExpression=nse(r),t}function $M(n,e,t,i){let r;for(;JM(n,t,i);){r=n.currentLine;let s=r.substring(0,5).toLowerCase();if(s==="#else"){let a=new qo;e.children.push(a),JM(n,a,i);return}else if(s==="#elif"){let a=qT(r,5);e.children.push(a),t=a}}}function JM(n,e,t){for(;n.canRead;){n.lineIndex++;let i=n.currentLine;if(i.indexOf("#")>=0){let s=ise.exec(i);if(s&&s.length){switch(s[0]){case"#ifdef":{let o=new ku;e.children.push(o);let l=qT(i,6);o.children.push(l),$M(n,o,l,t);break}case"#else":case"#elif":return!0;case"#endif":return!1;case"#ifndef":{let o=new ku;e.children.push(o);let l=qT(i,7);o.children.push(l),$M(n,o,l,t);break}case"#if":{let o=new ku,l=qT(i,3);e.children.push(o),o.children.push(l),$M(n,o,l,t);break}}continue}}let r=new qo;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 sse(n,e,t,i){let r=new qo,s=new HT;return s.lineIndex=-1,s.lines=n.split(` +`),JM(s,r,i),r.process(e,t,i)}function ase(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",UT(i,e==null?void 0:e.isNDCHalfZRange,e==null?void 0:e.useReverseDepthBuffer,e==null?void 0:e.useExactSrgbConversions),i}function ose(n,e,t){let i=rse(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=ase(e,t);e.processor.preProcessor&&(i=e.processor.preProcessor(i,r,s,e.isFragment,e.processingContext));let a={};return i=sse(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 z_(n,e,t){jT.length=0;let i;for(;(i=ese.exec(n))!==null;)jT.push(i);let r=[n],s=!1;for(let o of jT){let l=o[1];if(l.indexOf("__decl__")!==-1&&(l=l.replace(tse,""),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(F2,_.toString())+` +`}else e.supportsUniformBuffers||(c=c.replace(w2,(d,u)=>u+"{X}")),c=c.replace(F2,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";tC.loadFile(c,f=>{e.includesShadersStore[l]=f,z_(r.join(""),e,t)});return}}jT.length=0;let a=r.join("");s?z_(a.toString(),e,t):t(a)}var Jne,ZM,ese,tse,w2,F2,jT,ise,tC,ZT=M(()=>{WT();C2();y2();P2();L2();D2();O2();Wu();N2();hn();lf();Jne=/defined\s*?\((.+?)\)/g,ZM=/defined\s*?\[(.+?)\]/g,ese=/#include\s?<(.+)>(\((.*)\))*(\[(.*)\])*/g,tse=/__decl__/,w2=/light\{X\}.(\w*)/g,F2=/\{X\}/g,jT=[],ise=/(#ifdef)|(#else)|(#elif)|(#endif)|(#ifndef)|(#if)/;tC={loadFile:(n,e,t,i,r,s)=>{throw qe("FileTools")}}});function G2(n,e){return On(e).cachedPipelines[n]}function QT(n){let e=n._name,t=n.context;if(e&&t){let i=On(t),r=i.cachedPipelines[e];r==null||r.dispose(),delete i.cachedPipelines[e]}}function k2(n,e,t,i,r,s,a){let o,l,c=ur()?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;B2(n),eC(d,n,(m,p)=>{a&&(a._vertexSourceCodeBeforeMigration=p),t&&(m=t("vertex",m)),n.isFragment=!0,eC(u,n,(_,g)=>{a&&(a._fragmentSourceCodeBeforeMigration=g),t&&(_=t("fragment",_));let v=U2(m,_,n);n=null;let x=lse(v.vertexCode,v.fragmentCode,e,r);i==null||i(x.vertexSourceCode,x.fragmentSourceCode)},s)},s)}};V2(o,"Vertex","",d=>{a&&(a._rawVertexSourceCode=d),f[0]=d,h()},r),V2(l,"Fragment","Pixel",d=>{a&&(a._rawFragmentSourceCode=d),f[1]=d,h()},r)}function V2(n,e,t,i,r,s){if(typeof HTMLElement!="undefined"&&n instanceof HTMLElement){let l=NT(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||BT,!s)throw new Error("loadFileInjection is not defined");s(o+"."+e.toLowerCase()+".fx",i)}function lse(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 G2,$M=M(()=>{Sa();XM();G();Pt();XT();of();G2=(n,e,t,i)=>{try{let r=n.context?Dn(n.context):null;r&&(r.disableParallelShaderCompile=n.disableParallelCompilation);let s=n.existingPipelineContext||e(n.shaderProcessingContext);return s._name=n.name,n.name&&r&&(r.cachedPipelines[n.name]=s),t(s,n.vertex,n.fragment,!!n.createAsRaw,"","",n.rebuildRebind,n.defines,n.transformFeedbackVaryings,"",()=>{i(s,()=>{var a;(a=n.onRenderingStateCompiled)==null||a.call(n,s)})}),s}catch(r){throw J.Error("Error compiling effect"),r}}});function k2(n,e,t){try{if(n())return e(),!0}catch(i){return t==null||t(i),!0}return!1}var KT,eo,jo,qo=M(()=>{KT=[],eo=class{static SetImmediate(e){KT.length===0&&setTimeout(()=>{let t=KT;KT=[];for(let i of t)i()},1),KT.push(e)}};jo=(n,e,t,i=16,r=3e4,s=!0,a)=>{if(s&&k2(n,e,t))return null;let o=!1,l=null,c=()=>{if(!o&&!k2(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,yh=M(()=>{di();Pt();G();$M();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};V2(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(` +`+e}}else return{vertexSourceCode:n,fragmentSourceCode:e}}var W2,iC=M(()=>{Sa();qM();G();Pt();ZT();lf();W2=(n,e,t,i)=>{try{let r=n.context?On(n.context):null;r&&(r.disableParallelShaderCompile=n.disableParallelCompilation);let s=n.existingPipelineContext||e(n.shaderProcessingContext);return s._name=n.name,n.name&&r&&(r.cachedPipelines[n.name]=s),t(s,n.vertex,n.fragment,!!n.createAsRaw,"","",n.rebuildRebind,n.defines,n.transformFeedbackVaryings,"",()=>{i(s,()=>{var a;(a=n.onRenderingStateCompiled)==null||a.call(n,s)})}),s}catch(r){throw J.Error("Error compiling effect"),r}}});function H2(n,e,t){try{if(n())return e(),!0}catch(i){return t==null||t(i),!0}return!1}var $T,to,Zo,Qo=M(()=>{$T=[],to=class{static SetImmediate(e){$T.length===0&&setTimeout(()=>{let t=$T;$T=[];for(let i of t)i()},1),$T.push(e)}};Zo=(n,e,t,i=16,r=3e4,s=!0,a)=>{if(s&&H2(n,e,t))return null;let o=!1,l=null,c=()=>{if(!o&&!H2(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 ar,Dh=M(()=>{di();Pt();G();iC();Qo();ar=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};k2(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){Zo(()=>this._isReadyInternal()||this._isDisposed,()=>{},t=>{this._processCompilationErrors(t,e)},16,12e4,!0,` - Effect: ${typeof this.name=="string"?this.name:this.key}`)}get vertexSourceCode(){var e,t;return this._vertexSourceCodeOverride&&this._fragmentSourceCodeOverride?this._vertexSourceCodeOverride:(t=(e=this._pipelineContext)==null?void 0:e._getVertexShaderCode())!=null?t:this._vertexSourceCode}get fragmentSourceCode(){var e,t;return this._vertexSourceCodeOverride&&this._fragmentSourceCodeOverride?this._fragmentSourceCodeOverride:(t=(e=this._pipelineContext)==null?void 0:e._getFragmentShaderCode())!=null?t:this._fragmentSourceCode}get vertexSourceCodeBeforeMigration(){return this._vertexSourceCodeBeforeMigration}get fragmentSourceCodeBeforeMigration(){return this._fragmentSourceCodeBeforeMigration}get rawVertexSourceCode(){return this._rawVertexSourceCode}get rawFragmentSourceCode(){return this._rawFragmentSourceCode}getPipelineGenerationOptions(){return{platformName:this._engine.shaderPlatformName,shaderLanguage:this._shaderLanguage,shaderNameOrContent:this.name,key:this._key,defines:this.defines.split(` +`),addGlobalDefines:!1,extendedProcessingOptions:{indexParameters:this._indexParameters,isNDCHalfZRange:this._engine.isNDCHalfZRange,useReverseDepthBuffer:this._engine.useReverseDepthBuffer,supportsUniformBuffers:this._engine.supportsUniformBuffers},extendedCreatePipelineOptions:{transformFeedbackVaryings:this._transformFeedbackVaryings,createAsRaw:!!(this._vertexSourceCodeOverride&&this._fragmentSourceCodeOverride)}}}_rebuildProgram(e,t,i,r){this._isReady=!1,this._vertexSourceCodeOverride=e,this._fragmentSourceCodeOverride=t,this.onError=(s,a)=>{r&&r(a)},this.onCompiled=()=>{var a,o;let s=this.getEngine().scenes;if(s)for(let l=0;lthis._rebuildProgram(l,c,f,h),defines:r,transformFeedbackVaryings:this._transformFeedbackVaryings,name:this._key.replace(/\r/g,"").replace(/\n/g,"|"),createAsRaw:i,disableParallelCompilation:this._disableParallelShaderCompilation,shaderProcessingContext:this._processingContext,onRenderingStateCompiled:l=>{t&&!e&&this._engine._deletePipelineContext(t),l&&this._onRenderingStateCompiled(l)}},this._engine.createPipelineContext.bind(this._engine),this._engine._preparePipelineContextAsync.bind(this._engine),this._engine._executeWhenRenderingStateIsCompiled.bind(this._engine)),this._pipelineContext.isAsync&&this._checkIsReady(t)}catch(i){this._processCompilationErrors(i,t)}}_getShaderCodeAndErrorLine(e,t,i){let r=i?/FRAGMENT SHADER ERROR: 0:(\d+?):/:/VERTEX SHADER ERROR: 0:(\d+?):/,s=null;if(t&&e){let a=t.match(r);if(a&&a.length===2){let o=parseInt(a[1]),l=e.split(` `,-1);l.length>=o&&(s=`Offending line [${o}] in ${i?"fragment":"vertex"} code: ${l[o-1]}`)}}return[e,s]}_processCompilationErrors(e,t=null){var a,o,l;this._compilationError=e.message;let i=this._attributesNames,r=this._fallbacks;if(J.Error("Unable to compile effect:"),J.Error(`Uniforms: ${this._uniformsNames.join(" ")}`),J.Error(`Attributes: ${i.join(" ")}`),J.Error(`Defines: -`+this.defines),n.LogShaderCodeOnCompilationError){let c=null,f=null,h;(a=this._pipelineContext)!=null&&a._getVertexShaderCode()&&([h,c]=this._getShaderCodeAndErrorLine(this._pipelineContext._getVertexShaderCode(),this._compilationError,!1),h&&(J.Error("Vertex code:"),J.Error(h))),(o=this._pipelineContext)!=null&&o._getFragmentShaderCode()&&([h,f]=this._getShaderCodeAndErrorLine((l=this._pipelineContext)==null?void 0:l._getFragmentShaderCode(),this._compilationError,!0),h&&(J.Error("Fragment code:"),J.Error(h))),c&&J.Error(c),f&&J.Error(f)}J.Error("Error: "+this._compilationError);let s=()=>{this.onError&&this.onError(this,this._compilationError),this.onErrorObservable.notifyObservers(this),this._engine.onEffectErrorObservable.notifyObservers({effect:this,errors:this._compilationError})};t&&(this._pipelineContext=t,this._isReady=!0,s()),r?(this._pipelineContext=null,r.hasMoreFallbacks?(this._allFallbacksProcessed=!1,J.Error("Trying next fallback."),this.defines=r.reduce(this.defines,this),this._prepareEffect()):(this._allFallbacksProcessed=!0,s(),this.onErrorObservable.clear(),this._fallbacks&&this._fallbacks.unBindMesh())):(this._allFallbacksProcessed=!0,t||s())}get isSupported(){return this._compilationError===""}_bindTexture(e,t){this._engine._bindTexture(this._samplers[e],t,e)}setTexture(e,t){this._engine.setTexture(this._samplers[e],this._uniforms[e],t,e)}setTextureArray(e,t){let i=e+"Ex";if(this._samplerList.indexOf(i+"0")===-1){let r=this._samplerList.indexOf(e);for(let a=1;a0||this._isDisposed||(this._onReleaseEffectsObserver&&(this._engine.onReleaseEffectsObservable.remove(this._onReleaseEffectsObserver),this._onReleaseEffectsObserver=null),this._pipelineContext&&YT(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 $n,JM=M(()=>{$n=class n{static SetMatrixPrecision(e){if(n.MatrixTrackPrecisionChange=!1,e&&!n.MatrixUse64Bits&&n.MatrixTrackedMatrices)for(let t=0;t{Sa();gr=class{static get Now(){return dr()&&window.performance&&window.performance.now?window.performance.now():Date.now()}}});var jT,W2=M(()=>{jT=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 qT,H2=M(()=>{qT=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 Ph,z2=M(()=>{Ph=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}};Ph.ALWAYS=519;Ph.KEEP=7680;Ph.REPLACE=7681});var Wu,eC=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();yh();Ni();Pt();JM();Ul();W2();H2();z2();eC();hn();bs();Sa();of();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&&(J.Error("Vertex code:"),J.Error(h))),(o=this._pipelineContext)!=null&&o._getFragmentShaderCode()&&([h,f]=this._getShaderCodeAndErrorLine((l=this._pipelineContext)==null?void 0:l._getFragmentShaderCode(),this._compilationError,!0),h&&(J.Error("Fragment code:"),J.Error(h))),c&&J.Error(c),f&&J.Error(f)}J.Error("Error: "+this._compilationError);let s=()=>{this.onError&&this.onError(this,this._compilationError),this.onErrorObservable.notifyObservers(this),this._engine.onEffectErrorObservable.notifyObservers({effect:this,errors:this._compilationError})};t&&(this._pipelineContext=t,this._isReady=!0,s()),r?(this._pipelineContext=null,r.hasMoreFallbacks?(this._allFallbacksProcessed=!1,J.Error("Trying next fallback."),this.defines=r.reduce(this.defines,this),this._prepareEffect()):(this._allFallbacksProcessed=!0,s(),this.onErrorObservable.clear(),this._fallbacks&&this._fallbacks.unBindMesh())):(this._allFallbacksProcessed=!0,t||s())}get isSupported(){return this._compilationError===""}_bindTexture(e,t){this._engine._bindTexture(this._samplers[e],t,e)}setTexture(e,t){this._engine.setTexture(this._samplers[e],this._uniforms[e],t,e)}setTextureArray(e,t){let i=e+"Ex";if(this._samplerList.indexOf(i+"0")===-1){let r=this._samplerList.indexOf(e);for(let a=1;a0||this._isDisposed||(this._onReleaseEffectsObserver&&(this._engine.onReleaseEffectsObservable.remove(this._onReleaseEffectsObserver),this._onReleaseEffectsObserver=null),this._pipelineContext&&QT(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={}}};ar.LogShaderCodeOnCompilationError=!0;ar.PersistentMode=!1;ar.AutomaticallyClearCodeCache=!1;ar._UniqueIdSeed=0;ar._BaseCache={};ar.ShadersStore=A.ShadersStore;ar.IncludesShadersStore=A.IncludesShadersStore});var Jn,rC=M(()=>{Jn=class n{static SetMatrixPrecision(e){if(n.MatrixTrackPrecisionChange=!1,e&&!n.MatrixUse64Bits&&n.MatrixTrackedMatrices)for(let t=0;t{Sa();vr=class{static get Now(){return ur()&&window.performance&&window.performance.now?window.performance.now():Date.now()}}});var JT,z2=M(()=>{JT=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 eA,X2=M(()=>{eA=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 Oh,Y2=M(()=>{Oh=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}};Oh.ALWAYS=519;Oh.KEEP=7680;Oh.REPLACE=7681});var Hu,nC=M(()=>{Hu=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();Dh();Ni();Pt();rC();Gl();z2();X2();Y2();nC();hn();Is();Sa();lf();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(){J.Warn(this.name+" context successfully restored."),this.onContextRestoredObservable.notifyObservers(this),this._contextWasLost=!1}_restoreEngineAfterContextLost(e){setTimeout(()=>{this._clearEmptyResources();let t=this._depthCullingState.depthTest,i=this._depthCullingState.depthFunc,r=this._depthCullingState.depthMask,s=this._stencilState.stencilTest;e(),this._rebuildGraphicsResources(),this._depthCullingState.depthTest=t,this._depthCullingState.depthFunc=i,this._depthCullingState.depthMask=r,this._stencilState.stencilTest=s,this._flagContextRestored()},0)}get isDisposed(){return this._isDisposed}get snapshotRendering(){return!1}set snapshotRendering(e){}get snapshotRenderingMode(){return 0}set snapshotRenderingMode(e){}getClassName(){return"AbstractEngine"}get emptyTexture(){return this._emptyTexture||(this._emptyTexture=this.createRawTexture(new Uint8Array(4),1,1,5,!1,!1,1)),this._emptyTexture}get emptyTexture3D(){return this._emptyTexture3D||(this._emptyTexture3D=this.createRawTexture3D(new Uint8Array(4),1,1,1,5,!1,!1,1)),this._emptyTexture3D}get emptyTexture2DArray(){return this._emptyTexture2DArray||(this._emptyTexture2DArray=this.createRawTexture2DArray(new Uint8Array(4),1,1,1,5,!1,!1,1)),this._emptyTexture2DArray}get emptyCubeTexture(){if(!this._emptyCubeTexture){let e=new Uint8Array(4),t=[e,e,e,e,e,e];this._emptyCubeTexture=this.createRawCubeTexture(t,1,5,0,!1,!1,1)}return this._emptyCubeTexture}get activeRenderLoops(){return this._activeRenderLoops}stopRenderLoop(e){if(!e){this._activeRenderLoops.length=0,this._cancelFrame();return}let t=this._activeRenderLoops.indexOf(e);t>=0&&(this._activeRenderLoops.splice(t,1),this._activeRenderLoops.length==0&&this._cancelFrame())}_cancelFrame(){if(this._frameHandler!==0){let e=this._frameHandler;if(this._frameHandler=0,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 L=(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)):(J.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,(N,U,H,ee,q,te)=>{te?L("TextureLoader failed to load data"):l(T,R,r,{width:N,height:U},T.invertY,!H,ee,()=>(q(),!1),s)},p)};if(!f)this._loadFile(e,async V=>{try{await O(new Uint8Array(V))}catch(w){L("Failed to parse texture data",w)}},void 0,r?r.offlineProvider:void 0,!0,(V,w)=>{L("Unable to load "+(V&&V.responseURL,w))});else{let V=async w=>{try{await O(w)}catch(N){L("Failed to parse texture data",N)}};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,L,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,L,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:af()?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 jT,this._stencilStateComposer=new qT,this._stencilState=new Ph,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=gr.Now,this._stencilStateComposer.stencilGlobal=this._stencilState,$n.SetMatrixPrecision(!!t.useLargeWorldRendering||!!t.useHighPrecisionMatrix),Bl()&&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()&&af())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&&af()&&"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 qe("FileTools")}_loadFile(e,t,i,r,s,a){let o=DT(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 qe("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 qe("LoadingScreen")}static MarkAllMaterialsAsDirty(e,t){for(let i=0;i{});var QT,Y2=M(()=>{QT=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 $ne,$T,K2=M(()=>{$ne=/(flat\s)?\s*varying\s*.*/,$T=class{constructor(){this.shaderLanguage=0}attributeProcessor(e){return e.replace("attribute","in")}varyingCheck(e,t){return $ne.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()}ar.ResetCache()}_rebuildGraphicsResources(){var e;this.wipeCaches(!0),this._rebuildEffects(),(e=this._rebuildComputeEffects)==null||e.call(this),this._rebuildBuffers(),this._rebuildInternalTextures(),this._rebuildTextures(),this._rebuildRenderTargetWrappers(),this.wipeCaches(!0)}_flagContextRestored(){J.Warn(this.name+" context successfully restored."),this.onContextRestoredObservable.notifyObservers(this),this._contextWasLost=!1}_restoreEngineAfterContextLost(e){setTimeout(()=>{this._clearEmptyResources();let t=this._depthCullingState.depthTest,i=this._depthCullingState.depthFunc,r=this._depthCullingState.depthMask,s=this._stencilState.stencilTest;e(),this._rebuildGraphicsResources(),this._depthCullingState.depthTest=t,this._depthCullingState.depthFunc=i,this._depthCullingState.depthMask=r,this._stencilState.stencilTest=s,this._flagContextRestored()},0)}get isDisposed(){return this._isDisposed}get snapshotRendering(){return!1}set snapshotRendering(e){}get snapshotRenderingMode(){return 0}set snapshotRenderingMode(e){}getClassName(){return"AbstractEngine"}get emptyTexture(){return this._emptyTexture||(this._emptyTexture=this.createRawTexture(new Uint8Array(4),1,1,5,!1,!1,1)),this._emptyTexture}get emptyTexture3D(){return this._emptyTexture3D||(this._emptyTexture3D=this.createRawTexture3D(new Uint8Array(4),1,1,1,5,!1,!1,1)),this._emptyTexture3D}get emptyTexture2DArray(){return this._emptyTexture2DArray||(this._emptyTexture2DArray=this.createRawTexture2DArray(new Uint8Array(4),1,1,1,5,!1,!1,1)),this._emptyTexture2DArray}get emptyCubeTexture(){if(!this._emptyCubeTexture){let e=new Uint8Array(4),t=[e,e,e,e,e,e];this._emptyCubeTexture=this.createRawCubeTexture(t,1,5,0,!1,!1,1)}return this._emptyCubeTexture}get activeRenderLoops(){return this._activeRenderLoops}stopRenderLoop(e){if(!e){this._activeRenderLoops.length=0,this._cancelFrame();return}let t=this._activeRenderLoops.indexOf(e);t>=0&&(this._activeRenderLoops.splice(t,1),this._activeRenderLoops.length==0&&this._cancelFrame())}_cancelFrame(){if(this._frameHandler!==0){let e=this._frameHandler;if(this._frameHandler=0,ur()){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 L=(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)):(J.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,(N,U,H,ee,q,te)=>{te?L("TextureLoader failed to load data"):l(T,R,r,{width:N,height:U},T.invertY,!H,ee,()=>(q(),!1),s)},p)};if(!f)this._loadFile(e,async V=>{try{await O(new Uint8Array(V))}catch(w){L("Failed to parse texture data",w)}},void 0,r?r.offlineProvider:void 0,!0,(V,w)=>{L("Unable to load "+(V&&V.responseURL,w))});else{let V=async w=>{try{await O(w)}catch(N){L("Failed to parse texture data",N)}};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,L,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,L,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:of()?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 JT,this._stencilStateComposer=new eA,this._stencilState=new Oh,this._alphaState=new Hu(!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=vr.Now,this._stencilStateComposer.stencilGlobal=this._stencilState,Jn.SetMatrixPrecision(!!t.useLargeWorldRendering||!!t.useHighPrecisionMatrix),Vl()&&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=ur()&&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=ur()&&window.devicePixelRatio||1,o=this._lastDevicePixelRatio/a;this._lastDevicePixelRatio=a,this._hardwareScalingLevel*=o}if(ur()&&of())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&&of()&&"ontouchend"in document},this._checkForMobile(),ur()&&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 qe("FileTools")}_loadFile(e,t,i,r,s,a){let o=BT(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(Gu.loadFile)return Gu.loadFile(e,t,i,r,s,a);throw qe("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),ar.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(),ur()&&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 qe("LoadingScreen")}static MarkAllMaterialsAsDirty(e,t){for(let i=0;i{});var iA,j2=M(()=>{iA=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 cse,rA,q2=M(()=>{cse=/(flat\s)?\s*varying\s*.*/,rA=class{constructor(){this.shaderLanguage=0}attributeProcessor(e){return e.replace("attribute","in")}varyingCheck(e,t){return cse.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 Lh,iC=M(()=>{Lh=class n{get underlyingResource(){return null}constructor(){this.references=0,this.capacity=0,this.is32Bits=!1,this.uniqueId=n._Counter++}};Lh._Counter=0});var Zo,JT=M(()=>{iC();Zo=class extends Lh{constructor(e){super(),this._buffer=e}get underlyingResource(){return this._buffer}}});function Dh(n){let e=1;do e*=2;while(en-t?t:e}function j2(n){return n--,n|=n>>1,n|=n>>2,n|=n>>4,n|=n>>8,n|=n>>16,n++,n}function eA(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=eA(n);break;case 2:i=rC(n);break;default:i=j2(n);break}return Math.min(i,e)}var to=M(()=>{});var Hu,nC=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 sC(n){return n===13||n===14||n===15||n===16||n===17||n===18||n===19}function Vl(n){return n===13||n===17||n===18||n===19}var W_=M(()=>{});var q2={};tt(q2,{ThinEngine:()=>bt});var aC,bt,Jn=M(()=>{yh();XM();Ur();tC();Pt();Sa();Y2();K2();JT();to();nC();bs();of();$M();W_();eC();aC=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=()=>{NT(this._gl)}:(this._onContextLost=l=>{l.preventDefault(),this._contextWasLost=!0,NT(this._gl),J.Warn("WebGL context lost."),this.onContextLostObservable.notifyObservers(this)},this._onContextRestored=()=>{this._restoreEngineAfterContextLost(()=>this._initGLContext())},s.addEventListener("webglcontextrestored",this._onContextRestored,!1),i.powerPreference=i.powerPreference||"high-performance"),s.addEventListener("webglcontextlost",this._onContextLost,!1),this._badDesktopOS&&(i.xrCompatible=!1),!i.disableWebGL2Support)try{this._gl=s.getContext("webgl2",i)||s.getContext("experimental-webgl2",i),this._gl&&(this._webGLVersion=2,this._shaderPlatformName="WEBGL2",this._gl.deleteQuery||(this._webGLVersion=1,this._shaderPlatformName="WEBGL1"))}catch(l){}if(!this._gl){if(!s)throw new Error("The provided canvas is null or undefined.");try{this._gl=s.getContext("webgl",i)||s.getContext("experimental-webgl",i)}catch(l){throw new Error("WebGL not supported",{cause:l})}}if(!this._gl)throw new Error("WebGL not supported")}else{this._gl=e,s=this._gl.canvas,this._gl.renderbufferStorageMultisample?(this._webGLVersion=2,this._shaderPlatformName="WEBGL2"):this._shaderPlatformName="WEBGL1";let l=this._gl.getContextAttributes();l&&(i.stencil=l.stencil)}this._sharedInit(s),this._gl.pixelStorei(this._gl.UNPACK_COLORSPACE_CONVERSION_WEBGL,this._gl.NONE),i.useHighPrecisionFloats!==void 0&&(this._highPrecisionShadersAllowed=i.useHighPrecisionFloats),this.resize(),this._initGLContext(),this._initFeatures();for(let l=0;l1?new $T:new QT;let a=`Babylon.js v${n.Version}`;J.Log(a+` - ${this.description}`),this._renderingCanvas&&this._renderingCanvas.setAttribute&&this._renderingCanvas.setAttribute("data-engine",a);let o=Dn(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,J.Warn("Float textures are not supported. Type forced to TEXTURETYPE_UNSIGNED_BYTE"));let _=sC(c),g=Vl(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),L=_?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,L,O,null);else if(S!==0)x.is3D=!0,v.texImage3D(C,0,y,T,E,S,0,L,O,null);else if(p){x.isCube=!0;for(let w=0;w<6;w++)v.texImage2D(v.TEXTURE_CUBE_MAP_POSITIVE_X+w,0,y,T,E,0,L,O,null)}else v.texImage2D(C,0,y,T,E,0,L,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 w;if(sC(x.format)?w=this._setupFramebufferDepthAttachments(Vl(x.format),x.format!==19,x.width,x.height,h,x.format,!0):w=this._createRenderBuffer(x.width,x.height,h,-1,this._getRGBABufferInternalSizedFormat(x.type,x.format,x._useSRGBBuffer),-1),!w)throw new Error("Unable to create render buffer");x._autoMSAAManagement=!0;let N=x._hardwareTexture;N||(N=x._hardwareTexture=this._createHardwareTexture()),N.addMSAARenderBuffer(w)}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&&(R2(e,this._gl),this._currentProgram=e)}bindSamplers(e){let t=e.getPipelineContext();this._setProgram(t.program);let i=e.getSamplers();for(let r=0;r-1;if(i&&a&&(this._activeChannel=t._associatedChannel),this._boundTexturesCache[this._activeChannel]!==t||r){if(this._activateCurrentTexture(),t&&t.isMultiview)throw J.Error(["_bindTextureDirectly called with a multiview texture!",e,t]),"_bindTextureDirectly called with a multiview texture!";this._gl.bindTexture(e,(c=(l=t==null?void 0:t._hardwareTexture)==null?void 0:l.underlyingResource)!=null?c:null),this._boundTexturesCache[this._activeChannel]=t,t&&(t._associatedChannel=this._activeChannel)}else i&&(s=!0,this._activateCurrentTexture());return a&&!i&&this._bindSamplerUniformToChannel(t._associatedChannel,this._activeChannel),s}_bindTexture(e,t,i){if(e===void 0)return;t&&(t._associatedChannel=e),this._activeChannel=e;let r=t?this._getTextureTarget(t):this._gl.TEXTURE_2D;this._bindTextureDirectly(r,t)}unbindAllTextures(){for(let e=0;e1&&(this._bindTextureDirectly(this._gl.TEXTURE_3D,null),this._bindTextureDirectly(this._gl.TEXTURE_2D_ARRAY,null))}setTexture(e,t,i,r){e!==void 0&&(t&&(this._boundUniforms[e]=t),this._setTexture(e,i))}_bindSamplerUniformToChannel(e,t){let i=this._boundUniforms[e];!i||i._currentState===t||(this._gl.uniform1i(i,t),i._currentState=t)}_getTextureWrapMode(e){switch(e){case 1:return this._gl.REPEAT;case 0:return this._gl.CLAMP_TO_EDGE;case 2:return this._gl.MIRRORED_REPEAT}return this._gl.REPEAT}_setTexture(e,t,i=!1,r=!1,s=""){if(!t)return this._boundTexturesCache[e]!=null&&(this._activeChannel=e,this._bindTextureDirectly(this._gl.TEXTURE_2D,null),this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP,null),this.webGLVersion>1&&(this._bindTextureDirectly(this._gl.TEXTURE_3D,null),this._bindTextureDirectly(this._gl.TEXTURE_2D_ARRAY,null))),!1;if(t.video){this._activeChannel=e;let c=t.getInternalTexture();c&&(c._associatedChannel=e),t.update()}else if(t.delayLoadState===4)return t.delayLoad(),!1;let a;r?a=t.depthStencilTexture:t.isReady()?a=t.getInternalTexture():t.isCube?a=this.emptyCubeTexture:t.is3D?a=this.emptyTexture3D:t.is2DArray?a=this.emptyTexture2DArray:a=this.emptyTexture,!i&&a&&(a._associatedChannel=e);let o=!0;this._boundTexturesCache[e]===a&&(i||this._bindSamplerUniformToChannel(a._associatedChannel,e),o=!1),this._activeChannel=e;let l=this._getTextureTarget(a);if(o&&this._bindTextureDirectly(l,a,i),a&&!a.isMultiview){if(a.isCube&&a._cachedCoordinatesMode!==t.coordinatesMode){a._cachedCoordinatesMode=t.coordinatesMode;let c=t.coordinatesMode!==3&&t.coordinatesMode!==5?1:0;t.wrapU=c,t.wrapV=c}a._cachedWrapU!==t.wrapU&&(a._cachedWrapU=t.wrapU,this._setTextureParameterInteger(l,this._gl.TEXTURE_WRAP_S,this._getTextureWrapMode(t.wrapU),a)),a._cachedWrapV!==t.wrapV&&(a._cachedWrapV=t.wrapV,this._setTextureParameterInteger(l,this._gl.TEXTURE_WRAP_T,this._getTextureWrapMode(t.wrapV),a)),a.is3D&&a._cachedWrapR!==t.wrapR&&(a._cachedWrapR=t.wrapR,this._setTextureParameterInteger(l,this._gl.TEXTURE_WRAP_R,this._getTextureWrapMode(t.wrapR),a)),this._setAnisotropicLevel(l,a,t.anisotropicFilteringLevel)}return!0}setTextureArray(e,t,i,r){if(!(e===void 0||!t)){(!this._textureUnits||this._textureUnits.length!==i.length)&&(this._textureUnits=new Int32Array(i.length));for(let s=0;s=this._caps.maxVertexAttribs||!this._vertexAttribArraysEnabled[e]||this.disableAttributeByIndex(e)}releaseEffects(){this._compiledEffects={},this.onReleaseEffectsObservable.notifyObservers(this)}dispose(){var e;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()),NT(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();tA=class{constructor(e=30){this._enabled=!0,this._rollingFrameTime=new oC(e)}sampleFrame(e=gr.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()}},oC=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 Q2=M(()=>{Jn();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 $2(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{bs();Pt();Jn();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,J.Warn("Float texture filtering is not supported. Mipmap generation and sampling mode are forced to false and TEXTURE_NEAREST_SAMPLINGMODE, respectively.")):f===this._gl.HALF_FLOAT_OES&&!this._caps.textureHalfFloatLinearFiltering?(r=!1,a=1,J.Warn("Half float texture filtering is not supported. Mipmap generation and sampling mode are forced to false and TEXTURE_NEAREST_SAMPLINGMODE, respectively.")):f===l.FLOAT&&!this._caps.textureFloatRender?(r=!1,J.Warn("Render to float textures is not supported. Mipmap generation forced to false.")):f===l.HALF_FLOAT&&!this._caps.colorBufferFloat&&(r=!1,J.Warn("Render to half float textures is not supported. Mipmap generation forced to false."));let d=e,u=d;if(c.width=d,c.height=u,c.invertY=s,c._compression=o,!this.needPOTTextures||Dh(c.width)&&Dh(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=$2(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||Dh(n.width)&&Dh(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 L=0;L<6;L++){let O=I[C][L];R&&(O=$2(O,y,y,r)),d.texImage2D(L,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=J2(!1);bt.prototype.createRawTexture3D=J2(!0);bt.prototype.updateRawTexture2DArray=eB(!1);bt.prototype.updateRawTexture3D=eB(!0)});var iB=M(()=>{Jn();of();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=E2(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 rB=M(()=>{Jn();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 nB=M(()=>{Jn();bs();Pt();to();bt.prototype._createDepthStencilCubeTexture=function(n,e){let t=new Oi(this,12);if(t.isCube=!0,this.webGLVersion===1)return J.Error("Depth cube texture is not supported by WebGL 1."),t;let i={bilinearFiltering:!1,comparisonFunction:0,generateStencil:!1,...e},r=this._gl;this._bindTextureDirectly(r.TEXTURE_CUBE_MAP,t,!0),this._setupDepthStencilTexture(t,n,i.bilinearFiltering,i.comparisonFunction);for(let s=0;s<6;s++)i.generateStencil?r.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+s,0,r.DEPTH24_STENCIL8,n,n,0,r.DEPTH_STENCIL,r.UNSIGNED_INT_24_8,null):r.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+s,0,r.DEPTH_COMPONENT24,n,n,0,r.DEPTH_COMPONENT,r.UNSIGNED_INT,null);return this._bindTextureDirectly(r.TEXTURE_CUBE_MAP,null),this._internalTexturesCache.push(t),t};bt.prototype._setCubeMapTextureParams=function(n,e,t){let i=this._gl;i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_MIN_FILTER,e?i.LINEAR_MIPMAP_LINEAR:i.LINEAR),i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),n.samplingMode=e?3:2,e&&this.getCaps().textureMaxLevel&&t!==void 0&&t>0&&(i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_MAX_LEVEL,t),n._maxLodLevel=t),this._bindTextureDirectly(i.TEXTURE_CUBE_MAP,null)};bt.prototype.createCubeTexture=function(n,e,t,i,r=null,s=null,a,o=null,l=!1,c=0,f=0,h=null,d,u=!1,m=null){let 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{W_();iA=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=Vl(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{sB();W_();rA=class extends iA{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,Vl(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 oB=M(()=>{bs();Pt();Jn();aB();W_();lC();bt.prototype._createHardwareRenderTargetWrapper=function(n,e,t){let i=new rA(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 J.Error("Depth texture is not supported by your browser or hardware."),o;let l={bilinearFiltering:!1,comparisonFunction:0,generateStencil:!1,...e};if(this._bindTextureDirectly(a,o,!0),this._setupDepthStencilTexture(o,n,l.comparisonFunction===0?!1:l.bilinearFiltering,l.comparisonFunction,l.samples),l.depthTextureFormat!==void 0){if(l.depthTextureFormat!==15&&l.depthTextureFormat!==16&&l.depthTextureFormat!==17&&l.depthTextureFormat!==13&&l.depthTextureFormat!==14&&l.depthTextureFormat!==18)return J.Error(`Depth texture ${l.depthTextureFormat} format is not supported.`),o;o.format=l.depthTextureFormat}else o.format=l.generateStencil?13:16;let c=Vl(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 lB=M(()=>{Jn();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 cB=M(()=>{bs();Pt();Jn();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,J.Warn("Float textures are not supported. Cube render target forced to TEXTURETYPE_UNESIGNED_BYTE type")),r.texParameteri(r.TEXTURE_CUBE_MAP,r.TEXTURE_MAG_FILTER,a.mag),r.texParameteri(r.TEXTURE_CUBE_MAP,r.TEXTURE_MIN_FILTER,a.min),r.texParameteri(r.TEXTURE_CUBE_MAP,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_CUBE_MAP,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE);for(let l=0;l<6;l++)r.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+l,0,this._getRGBABufferInternalSizedFormat(i.type,i.format),n,n,0,this._getInternalFormat(i.format),this._getWebGLTextureType(i.type),null);let o=r.createFramebuffer();return this._bindUnboundFramebuffer(o),t._depthStencilBuffer=this._setupFramebufferDepthAttachments(i.generateStencilBuffer,i.generateDepthBuffer,n,n),i.generateMipMaps&&r.generateMipmap(r.TEXTURE_CUBE_MAP),this._bindTextureDirectly(r.TEXTURE_CUBE_MAP,null),this._bindUnboundFramebuffer(null),t._framebuffer=o,t._generateDepthBuffer=i.generateDepthBuffer,t._generateStencilBuffer=i.generateStencilBuffer,s.width=n,s.height=n,s.isReady=!0,s.isCube=!0,s.samples=1,s.generateMipMaps=i.generateMipMaps,s.samplingMode=i.samplingMode,s.type=i.type,s.format=i.format,this._internalTexturesCache.push(s),t.setTextures(s),t}});var fB,zu,vr,Nt,On=M(()=>{fB=.45454545454545453,zu=2.2,vr=(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 nA(n,e){let t=ese.map(i=>Jne(n,i,e));return()=>{for(let i of t)i==null||i()}}var ese,Qo=M(()=>{ese=["push","splice","pop","shift","unshift"]});function Ft(n,e){hB[n]=e}function En(n){return hB[n]}var hB,zi=M(()=>{hB={}});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 dB(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 uB(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 mB(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 sA(n,e){let t=n%e;return t===0?e:sA(e,t)}var Nn=M(()=>{});function pB(n){n.updateFlag=Xu._UpdateFlagSeed++}function cC(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],L=s[5],O=s[6],V=s[7],w=s[8],N=s[9],U=s[10],H=s[11],ee=s[12],q=s[13],te=s[14],z=s[15];t[i]=a*S+o*y+l*w+c*ee,t[i+1]=a*R+o*L+l*N+c*q,t[i+2]=a*I+o*O+l*U+c*te,t[i+3]=a*C+o*V+l*H+c*z,t[i+4]=f*S+h*y+d*w+u*ee,t[i+5]=f*R+h*L+d*N+u*q,t[i+6]=f*I+h*O+d*U+u*te,t[i+7]=f*C+h*V+d*H+u*z,t[i+8]=m*S+p*y+_*w+g*ee,t[i+9]=m*R+p*L+_*N+g*q,t[i+10]=m*I+p*O+_*U+g*te,t[i+11]=m*C+p*V+_*H+g*z,t[i+12]=v*S+x*y+T*w+E*ee,t[i+13]=v*R+x*L+T*N+E*q,t[i+14]=v*I+x*O+T*U+E*te,t[i+15]=v*C+x*V+T*H+E*z}function Oh(n,e,t,i=0){cC(n,e,t.asArray(),i),pB(t)}function _B(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=fC(n,e.asArray());return t&&pB(e),t}function fC(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),L=+(o*T-l*S+f*I),O=-(o*E-l*R+c*I),V=i*C+r*y+s*L+a*O;if(V===0)return!1;let w=1/V,N=c*v-g*f,U=l*v-_*f,H=l*g-_*c,ee=o*v-p*f,q=o*g-p*c,te=o*_-p*l,z=c*m-u*f,Y=l*m-d*f,me=l*u-d*c,Re=o*m-h*f,Be=o*u-h*c,ae=o*d-h*l,ge=-(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*N-s*U+a*H),Ie=-(i*N-s*ee+a*q),Ze=+(i*U-r*ee+a*te),Tt=-(i*H-r*q+s*te),Xe=-(r*z-s*Y+a*me),je=+(i*z-s*Re+a*Be),$t=-(i*Y-r*Re+a*ae),Dt=+(i*me-r*Be+s*ae);return e[0]=C*w,e[1]=ge*w,e[2]=de*w,e[3]=Xe*w,e[4]=y*w,e[5]=ne*w,e[6]=Ie*w,e[7]=je*w,e[8]=L*w,e[9]=ue*w,e[10]=Ze*w,e[11]=$t*w,e[12]=O*w,e[13]=De*w,e[14]=Tt*w,e[15]=Dt*w,!0}var Xu,hC=M(()=>{Xu=class{};Xu._UpdateFlagSeed=0});var es,Fe,b,Mi,ze,j,He,$,Nh,Ge=M(()=>{On();Qo();zi();JM();Ni();Nn();hC();es=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=es(this.x),t=es(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=es(this._x),t=es(this._y),i=es(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 uB(c)}static PitchYawRollToMoveBetweenPointsToRef(e,t,i){let r=$.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,w=i):y>0&&L<0?(O.copyFrom(l),V=i,w=r):(O.copyFrom(o).scaleInPlace(-1),V=r,w=t);let N=He.Vector3[9],U=He.Vector3[4];if(V.subtractToRef(v,S),w.subtractToRef(v,N),n.CrossToRef(S,N,U),!(n.Dot(U,c)<0))return s.copyFrom(v),Math.abs(p*_);let ee=He.Vector3[5];n.CrossToRef(O,U,ee),ee.normalize();let q=He.Vector3[9];q.copyFrom(V).subtractInPlace(v);let te=q.length();if(tethis._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=es(this._x),t=es(this._y),i=es(this._z),r=es(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,$.Vector3[0]),i.set($.Vector3[0].x,$.Vector3[0].y,$.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 $n.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,$n.MatrixTrackPrecisionChange&&$n.MatrixTrackedMatrices.push(this),this._m=new $n.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),L=-(a*T-o*S+l*R);return t*I+i*C+r*y+s*L}toString(){return`{${this.m[0]}, ${this.m[1]}, ${this.m[2]}, ${this.m[3]} +`+e;return e}}});var Nh,aC=M(()=>{Nh=class n{get underlyingResource(){return null}constructor(){this.references=0,this.capacity=0,this.is32Bits=!1,this.uniqueId=n._Counter++}};Nh._Counter=0});var $o,nA=M(()=>{aC();$o=class extends Nh{constructor(e){super(),this._buffer=e}get underlyingResource(){return this._buffer}}});function wh(n){let e=1;do e*=2;while(en-t?t:e}function Z2(n){return n--,n|=n>>1,n|=n>>2,n|=n>>4,n|=n>>8,n|=n>>16,n++,n}function sA(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=sA(n);break;case 2:i=oC(n);break;default:i=Z2(n);break}return Math.min(i,e)}var io=M(()=>{});var zu,lC=M(()=>{zu=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 cC(n){return n===13||n===14||n===15||n===16||n===17||n===18||n===19}function kl(n){return n===13||n===17||n===18||n===19}var Y_=M(()=>{});var Q2={};tt(Q2,{ThinEngine:()=>bt});var fC,bt,es=M(()=>{Dh();qM();Vr();sC();Pt();Sa();j2();q2();nA();io();lC();Is();lf();iC();Y_();nC();fC=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 ar.ShadersRepository}static set ShadersRepository(e){ar.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=()=>{VT(this._gl)}:(this._onContextLost=l=>{l.preventDefault(),this._contextWasLost=!0,VT(this._gl),J.Warn("WebGL context lost."),this.onContextLostObservable.notifyObservers(this)},this._onContextRestored=()=>{this._restoreEngineAfterContextLost(()=>this._initGLContext())},s.addEventListener("webglcontextrestored",this._onContextRestored,!1),i.powerPreference=i.powerPreference||"high-performance"),s.addEventListener("webglcontextlost",this._onContextLost,!1),this._badDesktopOS&&(i.xrCompatible=!1),!i.disableWebGL2Support)try{this._gl=s.getContext("webgl2",i)||s.getContext("experimental-webgl2",i),this._gl&&(this._webGLVersion=2,this._shaderPlatformName="WEBGL2",this._gl.deleteQuery||(this._webGLVersion=1,this._shaderPlatformName="WEBGL1"))}catch(l){}if(!this._gl){if(!s)throw new Error("The provided canvas is null or undefined.");try{this._gl=s.getContext("webgl",i)||s.getContext("experimental-webgl",i)}catch(l){throw new Error("WebGL not supported",{cause:l})}}if(!this._gl)throw new Error("WebGL not supported")}else{this._gl=e,s=this._gl.canvas,this._gl.renderbufferStorageMultisample?(this._webGLVersion=2,this._shaderPlatformName="WEBGL2"):this._shaderPlatformName="WEBGL1";let l=this._gl.getContextAttributes();l&&(i.stencil=l.stencil)}this._sharedInit(s),this._gl.pixelStorei(this._gl.UNPACK_COLORSPACE_CONVERSION_WEBGL,this._gl.NONE),i.useHighPrecisionFloats!==void 0&&(this._highPrecisionShadersAllowed=i.useHighPrecisionFloats),this.resize(),this._initGLContext(),this._initFeatures();for(let l=0;l1?new rA:new iA;let a=`Babylon.js v${n.Version}`;J.Log(a+` - ${this.description}`),this._renderingCanvas&&this._renderingCanvas.setAttribute&&this._renderingCanvas.setAttribute("data-engine",a);let o=On(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 Hu(this._caps.blendParametersPerTarget),t&&(this._gl.blendEquationSeparateIndexed=t.blendEquationSeparateiOES.bind(t),this._gl.blendEquationIndexed=t.blendEquationiOES.bind(t),this._gl.blendFuncSeparateIndexed=t.blendFuncSeparateiOES.bind(t),this._gl.blendFuncIndexed=t.blendFunciOES.bind(t),this._gl.colorMaskIndexed=t.colorMaskiOES.bind(t),this._gl.disableIndexed=t.disableiOES.bind(t),this._gl.enableIndexed=t.enableiOES.bind(t)),this._caps.dualSourceBlending=!!this._gl.getExtension("WEBGL_blend_func_extended"),this._caps.astc&&(this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,this._gl.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR=this._caps.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR),this._caps.bptc&&(this._gl.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT=this._caps.bptc.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT),this._caps.s3tc_srgb&&(this._gl.COMPRESSED_SRGB_S3TC_DXT1_EXT=this._caps.s3tc_srgb.COMPRESSED_SRGB_S3TC_DXT1_EXT,this._gl.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT=this._caps.s3tc_srgb.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,this._gl.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT=this._caps.s3tc_srgb.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT),this._caps.etc2&&(this._gl.COMPRESSED_SRGB8_ETC2=this._caps.etc2.COMPRESSED_SRGB8_ETC2,this._gl.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC=this._caps.etc2.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC),this._webGLVersion>1&&this._gl.HALF_FLOAT_OES!==5131&&(this._gl.HALF_FLOAT_OES=5131),this._caps.textureHalfFloatRender=this._caps.textureHalfFloat&&this._canRenderToHalfFloatFramebuffer(),this._webGLVersion>1)this._caps.drawBuffersExtension=!0,this._caps.maxMSAASamples=this._maxMSAASamplesOverride!==null?this._maxMSAASamplesOverride:this._gl.getParameter(this._gl.MAX_SAMPLES),this._caps.maxDrawBuffers=this._gl.getParameter(this._gl.MAX_DRAW_BUFFERS);else{let r=this._gl.getExtension("WEBGL_draw_buffers");if(r!==null){this._caps.drawBuffersExtension=!0,this._gl.drawBuffers=r.drawBuffersWEBGL.bind(r),this._caps.maxDrawBuffers=this._gl.getParameter(r.MAX_DRAW_BUFFERS_WEBGL),this._gl.DRAW_FRAMEBUFFER=this._gl.FRAMEBUFFER;for(let s=0;s<16;s++)this._gl["COLOR_ATTACHMENT"+s+"_WEBGL"]=r["COLOR_ATTACHMENT"+s+"_WEBGL"]}}if(this._webGLVersion>1)this._caps.depthTextureExtension=!0;else{let r=this._gl.getExtension("WEBGL_depth_texture");r!=null&&(this._caps.depthTextureExtension=!0,this._gl.UNSIGNED_INT_24_8=r.UNSIGNED_INT_24_8_WEBGL)}if(this.disableVertexArrayObjects)this._caps.vertexArrayObject=!1;else if(this._webGLVersion>1)this._caps.vertexArrayObject=!0;else{let r=this._gl.getExtension("OES_vertex_array_object");r!=null&&(this._caps.vertexArrayObject=!0,this._gl.createVertexArray=r.createVertexArrayOES.bind(r),this._gl.bindVertexArray=r.bindVertexArrayOES.bind(r),this._gl.deleteVertexArray=r.deleteVertexArrayOES.bind(r))}if(this._webGLVersion>1)this._caps.instancedArrays=!0;else{let r=this._gl.getExtension("ANGLE_instanced_arrays");r!=null?(this._caps.instancedArrays=!0,this._gl.drawArraysInstanced=r.drawArraysInstancedANGLE.bind(r),this._gl.drawElementsInstanced=r.drawElementsInstancedANGLE.bind(r),this._gl.vertexAttribDivisor=r.vertexAttribDivisorANGLE.bind(r)):this._caps.instancedArrays=!1}if(this._gl.getShaderPrecisionFormat){let r=this._gl.getShaderPrecisionFormat(this._gl.VERTEX_SHADER,this._gl.HIGH_FLOAT),s=this._gl.getShaderPrecisionFormat(this._gl.FRAGMENT_SHADER,this._gl.HIGH_FLOAT);if(r&&s&&(this._caps.highPrecisionShaderSupported=r.precision!==0&&s.precision!==0,this._caps.shaderFloatPrecision=Math.min(r.precision,s.precision)),!this._shouldUseHighPrecisionShader){let a=this._gl.getShaderPrecisionFormat(this._gl.VERTEX_SHADER,this._gl.MEDIUM_FLOAT),o=this._gl.getShaderPrecisionFormat(this._gl.FRAGMENT_SHADER,this._gl.MEDIUM_FLOAT);a&&o&&(this._caps.shaderFloatPrecision=Math.min(a.precision,o.precision))}this._caps.shaderFloatPrecision<10&&(this._caps.shaderFloatPrecision=10)}if(this._webGLVersion>1)this._caps.blendMinMax=!0;else{let r=this._gl.getExtension("EXT_blend_minmax");r!=null&&(this._caps.blendMinMax=!0,this._gl.MAX=r.MAX_EXT,this._gl.MIN=r.MIN_EXT)}if(!this._caps.supportSRGBBuffers){if(this._webGLVersion>1)this._caps.supportSRGBBuffers=!0,this._glSRGBExtensionValues={SRGB:WebGL2RenderingContext.SRGB,SRGB8:WebGL2RenderingContext.SRGB8,SRGB8_ALPHA8:WebGL2RenderingContext.SRGB8_ALPHA8};else{let r=this._gl.getExtension("EXT_sRGB");r!=null&&(this._caps.supportSRGBBuffers=!0,this._glSRGBExtensionValues={SRGB:r.SRGB_EXT,SRGB8:r.SRGB_ALPHA_EXT,SRGB8_ALPHA8:r.SRGB_ALPHA_EXT})}if(this._creationOptions){let r=this._creationOptions.forceSRGBBufferSupportState;r!==void 0&&(this._caps.supportSRGBBuffers=this._caps.supportSRGBBuffers&&r)}}this._depthCullingState.depthTest=!0,this._depthCullingState.depthFunc=this._gl.LEQUAL,this._depthCullingState.depthMask=!0,this._maxSimultaneousTextures=this._caps.maxCombinedTexturesImageUnits;for(let r=0;r=65535)return new Uint32Array(e);return new Uint16Array(e)}return new Uint16Array(e)}bindArrayBuffer(e){this._vaoRecordInProgress||this._unbindVertexArrayObject(),this._bindBuffer(e,this._gl.ARRAY_BUFFER)}bindUniformBlock(e,t,i){let r=e.program,s=this._gl.getUniformBlockIndex(r,t);this._gl.uniformBlockBinding(r,s,i)}bindIndexBuffer(e){this._vaoRecordInProgress||this._unbindVertexArrayObject(),this._bindBuffer(e,this._gl.ELEMENT_ARRAY_BUFFER)}_bindBuffer(e,t){(this._vaoRecordInProgress||this._currentBoundBuffer[t]!==e)&&(this._gl.bindBuffer(t,e?e.underlyingResource:null),this._currentBoundBuffer[t]=e)}updateArrayBuffer(e){this._gl.bufferSubData(this._gl.ARRAY_BUFFER,0,e)}_vertexAttribPointer(e,t,i,r,s,a,o){let l=this._currentBufferPointers[t];if(!l)return;let c=!1;l.active?(l.buffer!==e&&(l.buffer=e,c=!0),l.size!==i&&(l.size=i,c=!0),l.type!==r&&(l.type=r,c=!0),l.normalized!==s&&(l.normalized=s,c=!0),l.stride!==a&&(l.stride=a,c=!0),l.offset!==o&&(l.offset=o,c=!0)):(c=!0,l.active=!0,l.index=t,l.size=i,l.type=r,l.normalized=s,l.stride=a,l.offset=o,l.buffer=e),(c||this._vaoRecordInProgress)&&(this.bindArrayBuffer(e),r===this._gl.UNSIGNED_INT||r===this._gl.INT?this._gl.vertexAttribIPointer(t,i,r,a,o):this._gl.vertexAttribPointer(t,i,r,s,a,o))}_bindIndexBufferWithCache(e){e!=null&&this._cachedIndexBuffer!==e&&(this._cachedIndexBuffer=e,this.bindIndexBuffer(e),this._uintIndicesCurrentlySet=e.is32Bits)}_bindVertexBuffersAttributes(e,t,i){let r=t.getAttributesNames();this._vaoRecordInProgress||this._unbindVertexArrayObject(),this.unbindAllAttributes();for(let s=0;s=0){let o=r[s],l=null;if(i&&(l=i[o]),l||(l=e[o]),!l)continue;this._gl.enableVertexAttribArray(a),this._vaoRecordInProgress||(this._vertexAttribArraysEnabled[a]=!0);let c=l.getBuffer();c&&(this._vertexAttribPointer(c,a,l.getSize(),l.type,l.normalized,l.byteStride,l.byteOffset),l.getIsInstanced()&&(this._gl.vertexAttribDivisor(a,l.getInstanceDivisor()),this._vaoRecordInProgress||(this._currentInstanceLocations.push(a),this._currentInstanceBuffers.push(c))))}}}recordVertexArrayObject(e,t,i,r){let s=this._gl.createVertexArray();if(!s)throw new Error("Unable to create VAO");return this._vaoRecordInProgress=!0,this._gl.bindVertexArray(s),this._mustWipeVertexAttributes=!0,this._bindVertexBuffersAttributes(e,i,r),this.bindIndexBuffer(t),this._vaoRecordInProgress=!1,this._gl.bindVertexArray(null),s}bindVertexArrayObject(e,t){this._cachedVertexArrayObject!==e&&(this._cachedVertexArrayObject=e,this._gl.bindVertexArray(e),this._cachedVertexBuffers=null,this._cachedIndexBuffer=null,this._uintIndicesCurrentlySet=t!=null&&t.is32Bits,this._mustWipeVertexAttributes=!0)}bindBuffersDirectly(e,t,i,r,s){if(this._cachedVertexBuffers!==e||this._cachedEffectForVertexBuffers!==s){this._cachedVertexBuffers=e,this._cachedEffectForVertexBuffers=s;let a=s.getAttributesCount();this._unbindVertexArrayObject(),this.unbindAllAttributes();let o=0;for(let l=0;l=0&&(this._gl.enableVertexAttribArray(c),this._vertexAttribArraysEnabled[c]=!0,this._vertexAttribPointer(e,c,i[l],this._gl.FLOAT,!1,r,o)),o+=i[l]*4}}this._bindIndexBufferWithCache(t)}_unbindVertexArrayObject(){this._cachedVertexArrayObject&&(this._cachedVertexArrayObject=null,this._gl.bindVertexArray(null))}bindBuffers(e,t,i,r){(this._cachedVertexBuffers!==e||this._cachedEffectForVertexBuffers!==i)&&(this._cachedVertexBuffers=e,this._cachedEffectForVertexBuffers=i,this._bindVertexBuffersAttributes(e,i,r)),this._bindIndexBufferWithCache(t)}unbindInstanceAttributes(){let e;for(let t=0,i=this._currentInstanceLocations.length;t1||this.isWebGPU)),(o===1&&!this._caps.textureFloatLinearFiltering||o===2&&!this._caps.textureHalfFloatLinearFiltering)&&(l=1),o===1&&!this._caps.textureFloat&&(o=0,J.Warn("Float textures are not supported. Type forced to TEXTURETYPE_UNSIGNED_BYTE"));let _=cC(c),g=kl(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),L=_?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,L,O,null);else if(S!==0)x.is3D=!0,v.texImage3D(C,0,y,T,E,S,0,L,O,null);else if(p){x.isCube=!0;for(let w=0;w<6;w++)v.texImage2D(v.TEXTURE_CUBE_MAP_POSITIVE_X+w,0,y,T,E,0,L,O,null)}else v.texImage2D(C,0,y,T,E,0,L,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 w;if(cC(x.format)?w=this._setupFramebufferDepthAttachments(kl(x.format),x.format!==19,x.width,x.height,h,x.format,!0):w=this._createRenderBuffer(x.width,x.height,h,-1,this._getRGBABufferInternalSizedFormat(x.type,x.format,x._useSRGBBuffer),-1),!w)throw new Error("Unable to create render buffer");x._autoMSAAManagement=!0;let N=x._hardwareTexture;N||(N=x._hardwareTexture=this._createHardwareTexture()),N.addMSAARenderBuffer(w)}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&&(I2(e,this._gl),this._currentProgram=e)}bindSamplers(e){let t=e.getPipelineContext();this._setProgram(t.program);let i=e.getSamplers();for(let r=0;r-1;if(i&&a&&(this._activeChannel=t._associatedChannel),this._boundTexturesCache[this._activeChannel]!==t||r){if(this._activateCurrentTexture(),t&&t.isMultiview)throw J.Error(["_bindTextureDirectly called with a multiview texture!",e,t]),"_bindTextureDirectly called with a multiview texture!";this._gl.bindTexture(e,(c=(l=t==null?void 0:t._hardwareTexture)==null?void 0:l.underlyingResource)!=null?c:null),this._boundTexturesCache[this._activeChannel]=t,t&&(t._associatedChannel=this._activeChannel)}else i&&(s=!0,this._activateCurrentTexture());return a&&!i&&this._bindSamplerUniformToChannel(t._associatedChannel,this._activeChannel),s}_bindTexture(e,t,i){if(e===void 0)return;t&&(t._associatedChannel=e),this._activeChannel=e;let r=t?this._getTextureTarget(t):this._gl.TEXTURE_2D;this._bindTextureDirectly(r,t)}unbindAllTextures(){for(let e=0;e1&&(this._bindTextureDirectly(this._gl.TEXTURE_3D,null),this._bindTextureDirectly(this._gl.TEXTURE_2D_ARRAY,null))}setTexture(e,t,i,r){e!==void 0&&(t&&(this._boundUniforms[e]=t),this._setTexture(e,i))}_bindSamplerUniformToChannel(e,t){let i=this._boundUniforms[e];!i||i._currentState===t||(this._gl.uniform1i(i,t),i._currentState=t)}_getTextureWrapMode(e){switch(e){case 1:return this._gl.REPEAT;case 0:return this._gl.CLAMP_TO_EDGE;case 2:return this._gl.MIRRORED_REPEAT}return this._gl.REPEAT}_setTexture(e,t,i=!1,r=!1,s=""){if(!t)return this._boundTexturesCache[e]!=null&&(this._activeChannel=e,this._bindTextureDirectly(this._gl.TEXTURE_2D,null),this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP,null),this.webGLVersion>1&&(this._bindTextureDirectly(this._gl.TEXTURE_3D,null),this._bindTextureDirectly(this._gl.TEXTURE_2D_ARRAY,null))),!1;if(t.video){this._activeChannel=e;let c=t.getInternalTexture();c&&(c._associatedChannel=e),t.update()}else if(t.delayLoadState===4)return t.delayLoad(),!1;let a;r?a=t.depthStencilTexture:t.isReady()?a=t.getInternalTexture():t.isCube?a=this.emptyCubeTexture:t.is3D?a=this.emptyTexture3D:t.is2DArray?a=this.emptyTexture2DArray:a=this.emptyTexture,!i&&a&&(a._associatedChannel=e);let o=!0;this._boundTexturesCache[e]===a&&(i||this._bindSamplerUniformToChannel(a._associatedChannel,e),o=!1),this._activeChannel=e;let l=this._getTextureTarget(a);if(o&&this._bindTextureDirectly(l,a,i),a&&!a.isMultiview){if(a.isCube&&a._cachedCoordinatesMode!==t.coordinatesMode){a._cachedCoordinatesMode=t.coordinatesMode;let c=t.coordinatesMode!==3&&t.coordinatesMode!==5?1:0;t.wrapU=c,t.wrapV=c}a._cachedWrapU!==t.wrapU&&(a._cachedWrapU=t.wrapU,this._setTextureParameterInteger(l,this._gl.TEXTURE_WRAP_S,this._getTextureWrapMode(t.wrapU),a)),a._cachedWrapV!==t.wrapV&&(a._cachedWrapV=t.wrapV,this._setTextureParameterInteger(l,this._gl.TEXTURE_WRAP_T,this._getTextureWrapMode(t.wrapV),a)),a.is3D&&a._cachedWrapR!==t.wrapR&&(a._cachedWrapR=t.wrapR,this._setTextureParameterInteger(l,this._gl.TEXTURE_WRAP_R,this._getTextureWrapMode(t.wrapR),a)),this._setAnisotropicLevel(l,a,t.anisotropicFilteringLevel)}return!0}setTextureArray(e,t,i,r){if(!(e===void 0||!t)){(!this._textureUnits||this._textureUnits.length!==i.length)&&(this._textureUnits=new Int32Array(i.length));for(let s=0;s=this._caps.maxVertexAttribs||!this._vertexAttribArraysEnabled[e]||this.disableAttributeByIndex(e)}releaseEffects(){this._compiledEffects={},this.onReleaseEffectsObservable.notifyObservers(this)}dispose(){var e;ur()&&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()),VT(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{Gl();aA=class{constructor(e=30){this._enabled=!0,this._rollingFrameTime=new hC(e)}sampleFrame(e=vr.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()}},hC=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 J2=M(()=>{es();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 eB(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{Is();Pt();es();io();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,J.Warn("Float texture filtering is not supported. Mipmap generation and sampling mode are forced to false and TEXTURE_NEAREST_SAMPLINGMODE, respectively.")):f===this._gl.HALF_FLOAT_OES&&!this._caps.textureHalfFloatLinearFiltering?(r=!1,a=1,J.Warn("Half float texture filtering is not supported. Mipmap generation and sampling mode are forced to false and TEXTURE_NEAREST_SAMPLINGMODE, respectively.")):f===l.FLOAT&&!this._caps.textureFloatRender?(r=!1,J.Warn("Render to float textures is not supported. Mipmap generation forced to false.")):f===l.HALF_FLOAT&&!this._caps.colorBufferFloat&&(r=!1,J.Warn("Render to half float textures is not supported. Mipmap generation forced to false."));let d=e,u=d;if(c.width=d,c.height=u,c.invertY=s,c._compression=o,!this.needPOTTextures||wh(c.width)&&wh(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=eB(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||wh(n.width)&&wh(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 L=0;L<6;L++){let O=I[C][L];R&&(O=eB(O,y,y,r)),d.texImage2D(L,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=tB(!1);bt.prototype.createRawTexture3D=tB(!0);bt.prototype.updateRawTexture2DArray=iB(!1);bt.prototype.updateRawTexture3D=iB(!0)});var nB=M(()=>{es();lf();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=T2(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 sB=M(()=>{es();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 aB=M(()=>{es();Is();Pt();io();bt.prototype._createDepthStencilCubeTexture=function(n,e){let t=new Oi(this,12);if(t.isCube=!0,this.webGLVersion===1)return J.Error("Depth cube texture is not supported by WebGL 1."),t;let i={bilinearFiltering:!1,comparisonFunction:0,generateStencil:!1,...e},r=this._gl;this._bindTextureDirectly(r.TEXTURE_CUBE_MAP,t,!0),this._setupDepthStencilTexture(t,n,i.bilinearFiltering,i.comparisonFunction);for(let s=0;s<6;s++)i.generateStencil?r.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+s,0,r.DEPTH24_STENCIL8,n,n,0,r.DEPTH_STENCIL,r.UNSIGNED_INT_24_8,null):r.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+s,0,r.DEPTH_COMPONENT24,n,n,0,r.DEPTH_COMPONENT,r.UNSIGNED_INT,null);return this._bindTextureDirectly(r.TEXTURE_CUBE_MAP,null),this._internalTexturesCache.push(t),t};bt.prototype._setCubeMapTextureParams=function(n,e,t){let i=this._gl;i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_MIN_FILTER,e?i.LINEAR_MIPMAP_LINEAR:i.LINEAR),i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),n.samplingMode=e?3:2,e&&this.getCaps().textureMaxLevel&&t!==void 0&&t>0&&(i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_MAX_LEVEL,t),n._maxLodLevel=t),this._bindTextureDirectly(i.TEXTURE_CUBE_MAP,null)};bt.prototype.createCubeTexture=function(n,e,t,i,r=null,s=null,a,o=null,l=!1,c=0,f=0,h=null,d,u=!1,m=null){let 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{Y_();oA=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=kl(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{oB();Y_();lA=class extends oA{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,kl(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{Vr();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 cB=M(()=>{Is();Pt();es();lB();Y_();dC();bt.prototype._createHardwareRenderTargetWrapper=function(n,e,t){let i=new lA(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 J.Error("Depth texture is not supported by your browser or hardware."),o;let l={bilinearFiltering:!1,comparisonFunction:0,generateStencil:!1,...e};if(this._bindTextureDirectly(a,o,!0),this._setupDepthStencilTexture(o,n,l.comparisonFunction===0?!1:l.bilinearFiltering,l.comparisonFunction,l.samples),l.depthTextureFormat!==void 0){if(l.depthTextureFormat!==15&&l.depthTextureFormat!==16&&l.depthTextureFormat!==17&&l.depthTextureFormat!==13&&l.depthTextureFormat!==14&&l.depthTextureFormat!==18)return J.Error(`Depth texture ${l.depthTextureFormat} format is not supported.`),o;o.format=l.depthTextureFormat}else o.format=l.generateStencil?13:16;let c=kl(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 fB=M(()=>{es();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 hB=M(()=>{Is();Pt();es();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,J.Warn("Float textures are not supported. Cube render target forced to TEXTURETYPE_UNESIGNED_BYTE type")),r.texParameteri(r.TEXTURE_CUBE_MAP,r.TEXTURE_MAG_FILTER,a.mag),r.texParameteri(r.TEXTURE_CUBE_MAP,r.TEXTURE_MIN_FILTER,a.min),r.texParameteri(r.TEXTURE_CUBE_MAP,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_CUBE_MAP,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE);for(let l=0;l<6;l++)r.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+l,0,this._getRGBABufferInternalSizedFormat(i.type,i.format),n,n,0,this._getInternalFormat(i.format),this._getWebGLTextureType(i.type),null);let o=r.createFramebuffer();return this._bindUnboundFramebuffer(o),t._depthStencilBuffer=this._setupFramebufferDepthAttachments(i.generateStencilBuffer,i.generateDepthBuffer,n,n),i.generateMipMaps&&r.generateMipmap(r.TEXTURE_CUBE_MAP),this._bindTextureDirectly(r.TEXTURE_CUBE_MAP,null),this._bindUnboundFramebuffer(null),t._framebuffer=o,t._generateDepthBuffer=i.generateDepthBuffer,t._generateStencilBuffer=i.generateStencilBuffer,s.width=n,s.height=n,s.isReady=!0,s.isCube=!0,s.samples=1,s.generateMipMaps=i.generateMipMaps,s.samplingMode=i.samplingMode,s.type=i.type,s.format=i.format,this._internalTexturesCache.push(s),t.setTextures(s),t}});var dB,Xu,Er,Nt,Nn=M(()=>{dB=.45454545454545453,Xu=2.2,Er=(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 cA(n,e){let t=hse.map(i=>fse(n,i,e));return()=>{for(let i of t)i==null||i()}}var hse,Jo=M(()=>{hse=["push","splice","pop","shift","unshift"]});function Ft(n,e){uB[n]=e}function En(n){return uB[n]}var uB,zi=M(()=>{uB={}});function Si(n,e,t=1401298e-51){return Math.abs(n-e)<=t}function or(n,e){return n===e?n:Math.random()*(e-n)+n}function ro(n,e,t){return n+(e-n)*t}function mB(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 pB(n){return n-=Math.PI*2*Math.floor((n+Math.PI)/(Math.PI*2)),n}function no(n){let e=n.toString(16);return n<=15?("0"+e).toUpperCase():e.toUpperCase()}function _B(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 fA(n,e){let t=n%e;return t===0?e:fA(e,t)}var wn=M(()=>{});function gB(n){n.updateFlag=Yu._UpdateFlagSeed++}function uC(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],L=s[5],O=s[6],V=s[7],w=s[8],N=s[9],U=s[10],H=s[11],ee=s[12],q=s[13],te=s[14],z=s[15];t[i]=a*S+o*y+l*w+c*ee,t[i+1]=a*R+o*L+l*N+c*q,t[i+2]=a*I+o*O+l*U+c*te,t[i+3]=a*C+o*V+l*H+c*z,t[i+4]=f*S+h*y+d*w+u*ee,t[i+5]=f*R+h*L+d*N+u*q,t[i+6]=f*I+h*O+d*U+u*te,t[i+7]=f*C+h*V+d*H+u*z,t[i+8]=m*S+p*y+_*w+g*ee,t[i+9]=m*R+p*L+_*N+g*q,t[i+10]=m*I+p*O+_*U+g*te,t[i+11]=m*C+p*V+_*H+g*z,t[i+12]=v*S+x*y+T*w+E*ee,t[i+13]=v*R+x*L+T*N+E*q,t[i+14]=v*I+x*O+T*U+E*te,t[i+15]=v*C+x*V+T*H+E*z}function Fh(n,e,t,i=0){uC(n,e,t.asArray(),i),gB(t)}function vB(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 K_(n,e){let t=mC(n,e.asArray());return t&&gB(e),t}function mC(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),L=+(o*T-l*S+f*I),O=-(o*E-l*R+c*I),V=i*C+r*y+s*L+a*O;if(V===0)return!1;let w=1/V,N=c*v-g*f,U=l*v-_*f,H=l*g-_*c,ee=o*v-p*f,q=o*g-p*c,te=o*_-p*l,z=c*m-u*f,Y=l*m-d*f,me=l*u-d*c,Re=o*m-h*f,Be=o*u-h*c,ae=o*d-h*l,ge=-(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*N-s*U+a*H),Ie=-(i*N-s*ee+a*q),Ze=+(i*U-r*ee+a*te),Tt=-(i*H-r*q+s*te),Xe=-(r*z-s*Y+a*me),je=+(i*z-s*Re+a*Be),$t=-(i*Y-r*Re+a*ae),Dt=+(i*me-r*Be+s*ae);return e[0]=C*w,e[1]=ge*w,e[2]=de*w,e[3]=Xe*w,e[4]=y*w,e[5]=ne*w,e[6]=Ie*w,e[7]=je*w,e[8]=L*w,e[9]=ue*w,e[10]=Ze*w,e[11]=$t*w,e[12]=O*w,e[13]=De*w,e[14]=Tt*w,e[15]=Dt*w,!0}var Yu,pC=M(()=>{Yu=class{};Yu._UpdateFlagSeed=0});var ts,Fe,b,Mi,ze,j,He,$,Bh,Ge=M(()=>{Nn();Jo();zi();rC();Ni();wn();pC();ts=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=ts(this.x),t=ts(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(or(e,t),or(e,t))}static RandomToRef(e=0,t=1,i){return i.copyFromFloats(or(e,t),or(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=ts(this._x),t=ts(this._y),i=ts(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 pB(c)}static PitchYawRollToMoveBetweenPointsToRef(e,t,i){let r=$.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(ro(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(or(e,t),or(e,t),or(e,t))}static RandomToRef(e=0,t=1,i){return i.copyFromFloats(or(e,t),or(e,t),or(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,w=i):y>0&&L<0?(O.copyFrom(l),V=i,w=r):(O.copyFrom(o).scaleInPlace(-1),V=r,w=t);let N=He.Vector3[9],U=He.Vector3[4];if(V.subtractToRef(v,S),w.subtractToRef(v,N),n.CrossToRef(S,N,U),!(n.Dot(U,c)<0))return s.copyFrom(v),Math.abs(p*_);let ee=He.Vector3[5];n.CrossToRef(O,U,ee),ee.normalize();let q=He.Vector3[9];q.copyFrom(V).subtractInPlace(v);let te=q.length();if(tethis._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(or(e,t),or(e,t),or(e,t),or(e,t))}static RandomToRef(e=0,t=1,i){return i.x=or(e,t),i.y=or(e,t),i.z=or(e,t),i.w=or(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=ts(this._x),t=ts(this._y),i=ts(this._z),r=ts(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,$.Vector3[0]),i.set($.Vector3[0].x,$.Vector3[0].y,$.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(or(e,t),or(e,t),or(e,t),or(e,t))}static RandomToRef(e=0,t=1,i){return i.copyFromFloats(or(e,t),or(e,t),or(e,t),or(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 Jn.MatrixUse64Bits}get m(){return this._m}markAsUpdated(){this.updateFlag=Yu._UpdateFlagSeed++,this._isIdentity=!1,this._isIdentity3x2=!1,this._isIdentityDirty=!0,this._isIdentity3x2Dirty=!0}_updateIdentityStatus(e,t=!1,i=!1,r=!0){this._isIdentity=e,this._isIdentity3x2=e||i,this._isIdentityDirty=this._isIdentity?!1:t,this._isIdentity3x2Dirty=this._isIdentity3x2?!1:r}constructor(){this._isIdentity=!1,this._isIdentityDirty=!0,this._isIdentity3x2=!0,this._isIdentity3x2Dirty=!0,this.updateFlag=-1,Jn.MatrixTrackPrecisionChange&&Jn.MatrixTrackedMatrices.push(this),this._m=new Jn.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),L=-(a*T-o*S+l*R);return t*I+i*C+r*y+s*L}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):(fC(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 _B(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 cC(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=es(this._m[0]);for(let t=1;t<16;t++)e=e*397^es(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(Nh,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(Nh,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(Nh,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(Nh,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(Nh,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(Nh,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(Nh,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 $n.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 $n.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=Gl(11,b.Zero);He.Matrix=Gl(2,j.Identity);He.Quaternion=Gl(3,ze.Zero);$=class{};$.Vector2=Gl(3,Fe.Zero);$.Vector3=Gl(13,b.Zero);$.Vector4=Gl(3,Mi.Zero);$.Quaternion=Gl(3,ze.Zero);$.Matrix=Gl(8,j.Identity);Ft("BABYLON.Vector2",Fe);Ft("BABYLON.Vector3",b);Ft("BABYLON.Vector4",Mi);Ft("BABYLON.Matrix",j);Nh=j.FromValues(1,0,0,0,0,1,0,0,0,0,.5,0,0,0,.5,1)});var gB,Is,vB,Yu=M(()=>{Ge();(function(n){n[n.LOCAL=0]="LOCAL",n[n.WORLD=1]="WORLD",n[n.BONE=2]="BONE"})(gB||(gB={}));Is=class{};Is.X=new b(1,0,0);Is.Y=new b(0,1,0);Is.Z=new b(0,0,1);(function(n){n[n.X=0]="X",n[n.Y=1]="Y",n[n.Z=2]="Z"})(vB||(vB={}))});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,fB)}function Zu(n){return n<=.0031308?12.92*n:1.055*Math.pow(n,.41666)-.055}var pe,lt,Sn,zt=M(()=>{Qo();zi();On();Nn();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 lf,aA=M(()=>{Qu();lf=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 EB,$u,dC,Ju,wh,Fh=M(()=>{Nn();Ge();On();(function(n){n[n.CW=0]="CW",n[n.CCW=1]="CCW"})(EB||(EB={}));$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)}},dC=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 dC(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)}},wh=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 kl,oA=M(()=>{kl=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 SB=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 TB=M(()=>{Yu();zt();On();aA();Fh();Qu();oA();Ge();SB();em()});var $o,tse,Wl,Hl,z_,Jo,X_=M(()=>{Ge();TB();$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))],tse=[()=>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],Wl=(n,e)=>$o[n]*tse[n](e),Hl=[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){$.Vector3[0].set(t.r,t.g,t.b);let r=$.Vector3[0],s=$.Vector3[1];r.scaleToRef(i,s),s.scaleToRef(Wl(0,e),$.Vector3[2]),this.l00.addInPlace($.Vector3[2]),s.scaleToRef(Wl(1,e),$.Vector3[2]),this.l1_1.addInPlace($.Vector3[2]),s.scaleToRef(Wl(2,e),$.Vector3[2]),this.l10.addInPlace($.Vector3[2]),s.scaleToRef(Wl(3,e),$.Vector3[2]),this.l11.addInPlace($.Vector3[2]),s.scaleToRef(Wl(4,e),$.Vector3[2]),this.l2_2.addInPlace($.Vector3[2]),s.scaleToRef(Wl(5,e),$.Vector3[2]),this.l2_1.addInPlace($.Vector3[2]),s.scaleToRef(Wl(6,e),$.Vector3[2]),this.l20.addInPlace($.Vector3[2]),s.scaleToRef(Wl(7,e),$.Vector3[2]),this.l21.addInPlace($.Vector3[2]),s.scaleToRef(Wl(8,e),$.Vector3[2]),this.l22.addInPlace($.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(Hl[0]),this.l1_1.scaleInPlace(Hl[1]),this.l10.scaleInPlace(Hl[2]),this.l11.scaleInPlace(Hl[3]),this.l2_2.scaleInPlace(Hl[4]),this.l2_1.scaleInPlace(Hl[5]),this.l20.scaleInPlace(Hl[6]),this.l21.scaleInPlace(Hl[7]),this.l22.scaleInPlace(Hl[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=z_.FromPolynomial(this)),this._harmonics.preScaled||this._harmonics.preScaleForRendering(),this._harmonics}addAmbient(e){$.Vector3[0].copyFromFloats(e.r,e.g,e.b);let t=$.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),$.Vector3[0].copyFrom(e.l20).scaleInPlace(.247708),$.Vector3[1].copyFrom(e.l22).scaleInPlace(.429043),this.xx.scaleInPlace(.886277).subtractInPlace($.Vector3[0]).addInPlace($.Vector3[1]),this.yy.copyFrom(e.l00),this.yy.scaleInPlace(.886277).subtractInPlace($.Vector3[0]).subtractInPlace($.Vector3[1]),this.zz.copyFrom(e.l00),$.Vector3[0].copyFrom(e.l20).scaleInPlace(.495417),this.zz.scaleInPlace(.886277).addInPlace($.Vector3[0]),this.yz.copyFrom(e.l2_1),this.yz.scaleInPlace(.858086).scaleInPlace(-1),this.zx.copyFrom(e.l21),this.zx.scaleInPlace(.858086).scaleInPlace(-1),this.xy.copyFrom(e.l2_2),this.xy.scaleInPlace(.858086),this.scaleInPlace(1/Math.PI),this}static FromHarmonics(e){return new n().updateFromHarmonics(e)}static FromArray(e){let t=new n;return b.FromArrayToRef(e[0],0,t.x),b.FromArrayToRef(e[1],0,t.y),b.FromArrayToRef(e[2],0,t.z),b.FromArrayToRef(e[3],0,t.xx),b.FromArrayToRef(e[4],0,t.yy),b.FromArrayToRef(e[5],0,t.zz),b.FromArrayToRef(e[6],0,t.yz),b.FromArrayToRef(e[7],0,t.zx),b.FromArrayToRef(e[8],0,t.xy),t}}});function P(n,e,t,i){var r=arguments.length,s=r<3?e:i===null?i=Object.getOwnPropertyDescriptor(e,t):i,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(n,e,t,i);else for(var o=n.length-1;o>=0;o--)(a=n[o])&&(s=(r<3?a(s):r>3?a(e,t,s):a(e,t))||s);return r>3&&s&&Object.defineProperty(e,t,s),s}var kt=M(()=>{});function AB(n){let e=n.getClassName();return cA[e]||(cA[e]={}),cA[e]}function fA(n){let e=n.getClassName();if(lA[e])return lA[e];lA[e]={};let t=lA[e],i=n,r=e;for(;r;){let s=cA[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 lA,cA,uC=M(()=>{lA={},cA={}});function Ta(n,e){return(t,i)=>{let r=AB(t);r[i]||(r[i]={type:n,sourceName:e})}}function ise(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 ise(n,e)}function F(n){return Ta(0,n)}function Ut(n){return Ta(1,n)}function Er(n){return Ta(2,n)}function tm(n){return Ta(3,n)}function im(n){return Ta(4,n)}function zr(n){return Ta(5,n)}function hA(n){return Ta(6,n)}function xB(n){return Ta(7,n)}function rm(n){return Ta(8,n)}function RB(n){return Ta(9,n)}function bB(n){return Ta(10,n)}function IB(n){return Ta(11,n)}function Ms(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(()=>{uC();Ms.filter=function(n){return(e,t,i)=>Ms(e,t,i,n)}});function cf(){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 rse(){return typeof _native!="undefined"&&_native.XMLHttpRequest?new _native.XMLHttpRequest:new XMLHttpRequest}var yr,Bh=M(()=>{yr=class n{constructor(){this._xhr=rse(),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 ff,MB=M(()=>{ff=class{};ff.FilesToLoad={}});var dA,CB=M(()=>{dA=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 zl,Aa,Cs,K_=M(()=>{zl=class extends Error{};zl._setPrototypeOf=Object.setPrototypeOf||((n,e)=>(n.__proto__=e,n));Aa={MeshInvalidPositionsError:0,UnsupportedTextureError:1e3,GLTFLoaderUnexpectedMagicError:2e3,SceneLoaderError:3e3,LoadFileError:4e3,RequestFileError:4001,ReadFileError:4002},Cs=class n extends zl{constructor(e,t,i){super(e),this.errorCode=t,this.innerError=i,this.name="RuntimeError",zl._setPrototypeOf(this,n.prototype)}}});function nse(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 sse(n){let e=mC(n),t=e.length,i=new Uint8Array(new ArrayBuffer(t));for(let r=0;r{yB=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():nse(e)},mC=n=>atob(n),PB=n=>typeof Uint8Array.fromBase64=="function"?Uint8Array.fromBase64(n).buffer:sse(n)});function ase(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 ose(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 pC(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 Uh(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 df(n){return PB(n.split(",")[1])}var NB,am,mA,gC,lse,Gi,pA,OB,om,Vh,tl,_A,wB,FB,hf,BB,UB,cse,q_,fse,Xl=M(()=>{Bh();Sa();di();MB();CB();K_();j_();XT();Ni();Pt();qo();of();Ur();sm();NB=new RegExp(/^data:([^,]+\/[^,]+)?;base64,/i),am=class n extends Cs{constructor(e,t){super(e,Aa.LoadFileError),this.name="LoadFileError",zl._setPrototypeOf(this,n.prototype),t instanceof yr?this.request=t:this.file=t}},mA=class n extends Cs{constructor(e,t){super(e,Aa.RequestFileError),this.request=t,this.name="RequestFileError",zl._setPrototypeOf(this,n.prototype)}},gC=class n extends Cs{constructor(e,t){super(e,Aa.ReadFileError),this.file=t,this.name="ReadFileError",zl._setPrototypeOf(this,n.prototype)}},lse=n=>(n=n.replace(/#/gm,"%23"),n),Gi={DefaultRetryStrategy:dA.ExponentialBackoff(),BaseUrl:"",CorsBehavior:"anonymous",PreprocessUrl:n=>n,ScriptBaseUrl:"",ScriptPreprocessUrl:n=>n,CleanUrl:lse},pA=(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)}},OB={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=uA(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(OB.getRequiredSize){let E=OB.getRequiredSize(n);E.width&&(f.width=E.width),E.height&&(f.height=E.height)}pA(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(ff.FilesToLoad[E]&&typeof URL!="undefined"){try{let S;try{S=URL.createObjectURL(ff.FilesToLoad[E])}catch(R){S=URL.createObjectURL(ff.FilesToLoad[E])}f.src=S,l=!0}catch(S){f.src=""}return f}}x()}return f},Vh=(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 gC(`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 Vh(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=ff.FilesToLoad[f];if(h)return Vh(h,e,t,r,s?d=>s(void 0,new am(d.message,d.file)):void 0)}let{match:l,type:c}=BB(o);if(l){let f={onCompleteObservable:new ie,abort:()=>()=>{}};try{let h=r?df(o):UB(o);e(h,void 0,c)}catch(h){s?s(void 0,h):J.Error(h.message||"Failed to parse the Data URL")}return eo.SetImmediate(()=>{f.onCompleteObservable.notifyObservers(f)}),f}return _A(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)},_A=(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 mA(T,d)):J.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()||FB())){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 mA("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},wB=n=>{let{match:e,type:t}=BB(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}},FB=()=>typeof location!="undefined"&&location.protocol==="file:",hf=n=>NB.test(n),BB=n=>{let e=NB.exec(n);return e===null||e.length===0?{match:!1,type:""}:{match:!0,type:e[0].replace("data:","").replace(";base64,","")}};UB=n=>mC(n.split(",")[1]),cse=()=>{Me._FileToolsLoadImage=om,Vu.loadFile=tl,QM.loadFile=tl};cse();fse=(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}})};fse(df,UB,Gi,hf,FB,tl,om,Vh,_A,pA)});var gA,VB=M(()=>{oA();gA=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=kl.Zero(),this._cachedBaseSize=kl.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 vA,GB=M(()=>{vA=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,uf=M(()=>{GB();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):vA.Eval(t,i=>n.HasTags(e)&&e._tags[i])}}});var kB,it,Rr=M(()=>{hn();uf();zt();Ge();uC();kB=function(n,e,t,i={}){let r=n();Qt&&Qt.HasTags(e)&&Qt.AddTagsTo(r,Qt.GetTags(e,!0));let s=fA(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 qe("ImageProcessingConfiguration")};it._FresnelParametersParser=n=>{throw qe("FresnelParameters")};it._ColorCurvesParser=n=>{throw qe("ColorCurves")};it._TextureParser=(n,e,t)=>{throw qe("Texture")}});var pi,Z_=M(()=>{kt();Vt();di();Ge();Ni();Y_();Xl();VB();Rr();pi=class n extends gA{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=cf()),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 mf,Yl,vC=M(()=>{Ge();Nn();X_();On();zt();mf=class{constructor(e,t,i,r){this.name=e,this.worldAxisForNormal=t,this.worldAxisForFileX=i,this.worldAxisForFileY=r}},Yl=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 L=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),L=r);let O={size:L,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 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;xL){let w=L/V;I*=w,C*=w,y*=w}}else I=wt(I,0,L),C=wt(C,0,L),y=wt(y,0,L);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)}};Yl._FileFaces=[new mf("right",new b(1,0,0),new b(0,0,-1),new b(0,-1,0)),new mf("left",new b(-1,0,0),new b(0,0,1),new b(0,-1,0)),new mf("up",new b(0,1,0),new b(1,0,0),new b(0,0,1)),new mf("down",new b(0,-1,0),new b(1,0,0),new b(0,0,-1)),new mf("front",new b(0,0,1),new b(1,0,0),new b(0,-1,0)),new mf("back",new b(0,0,-1),new b(-1,0,0),new b(0,-1,0))];Yl.MAX_HDRI_VALUE=4096;Yl.PRESERVE_CLAMPED_COLORS=!1});var Kl,EC=M(()=>{Pt();zi();Kl=class{static Instantiate(e){if(this.RegisteredExternalClasses&&this.RegisteredExternalClasses[e])return this.RegisteredExternalClasses[e];let t=En(e);if(t)return t;J.Warn(e+" not found, you may have missed an import.");let i=e.split("."),r=window||this;for(let s=0,a=i.length;s=0;){let h=n[c];h<0?h=0:h>1&&(h=1),f[c]=h*255}n=f}let s=document.createElement("canvas");s.width=i,s.height=r;let a=s.getContext("2d");if(!a)return null;let o=a.createImageData(i,r);if(o.data.set(n),a.putImageData(o,0,0),t){let c=document.createElement("canvas");c.width=i,c.height=r;let f=c.getContext("2d");return f?(f.translate(0,r),f.scale(1,-1),f.drawImage(s,0,0),c.toDataURL("image/png")):null}return s.toDataURL("image/png")}function HB(n,e=0,t=0){let i=n.getInternalTexture();if(!i)return null;let r=n._readPixelsSync(e,t);return r?WB(r,n.getSize(),i.invertY):null}async function zB(n,e=0,t=0){let i=n.getInternalTexture();if(!i)return null;let r=await n.readPixels(e,t);return r?WB(r,n.getSize(),i.invertY):null}var XB=M(()=>{});var Mt,rn=M(()=>{Mt=!1});var ve,Vr=M(()=>{kt();Vt();di();Ge();Z_();zi();hn();qo();EC();Qu();j_();XB();rn();Rr();ve=class n extends pi{static _CreateVideoTexture(e,t,i,r=!1,s=!1,a=n.TRILINEAR_SAMPLINGMODE,o={},l,c=5){throw qe("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,L,O,V,w,N,U,H;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=(L=i.onError)!=null?L: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,_=(w=i.useSRGBBuffer)!=null?w:!1,g=(N=i.internalTexture)!=null?N:null,v=(U=i.gammaSpace)!=null?U:v,m=(H=i.forcedExtension)!=null?H: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=(ee,q)=>{this._loadingError=!0,this._errorObject={message:ee,exception:q},o&&o(ee,q),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 ee=this._texture.onLoadedObservable.add(E);this._texture.onErrorObservable.add(q=>{var te;S(q.message,q.exception),(te=this._texture)==null||te.onLoadedObservable.remove(ee)})}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(ee){throw S("error loading",ee),ee}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,$.Matrix[0]),j.TranslationToRef(this._cachedURotationCenter,this._cachedVRotationCenter,this._cachedWRotationCenter,$.Matrix[1]),j.ScalingToRef(this._cachedUScale,this._cachedVScale,0,$.Matrix[2]),j.TranslationToRef(this._cachedUOffset,this._cachedVOffset,0,$.Matrix[3]),$.Matrix[0].multiplyToRef(this._rowGenerationMatrix,this._cachedTextureMatrix),this._cachedTextureMatrix.multiplyToRef($.Matrix[1],this._cachedTextureMatrix),this._cachedTextureMatrix.multiplyToRef($.Matrix[2],this._cachedTextureMatrix),this._cachedTextureMatrix.multiplyToRef($.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?HB(this):zB(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=Kl.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)}};ve.SerializeBuffers=!0;ve.ForceSerializeBuffers=!1;ve.OnTextureLoadErrorObservable=new ie;ve._SerializeInternalTextureUniqueId=!1;ve._CubeTextureParser=(n,e,t)=>{throw qe("CubeTexture")};ve._CreateMirror=(n,e,t,i)=>{throw qe("MirrorTexture")};ve._CreateRenderTargetTexture=(n,e,t,i,r)=>{throw qe("RenderTargetTexture")};ve.NEAREST_SAMPLINGMODE=1;ve.NEAREST_NEAREST_MIPLINEAR=8;ve.BILINEAR_SAMPLINGMODE=2;ve.LINEAR_LINEAR_MIPNEAREST=11;ve.TRILINEAR_SAMPLINGMODE=3;ve.LINEAR_LINEAR_MIPLINEAR=3;ve.NEAREST_NEAREST_MIPNEAREST=4;ve.NEAREST_LINEAR_MIPNEAREST=5;ve.NEAREST_LINEAR_MIPLINEAR=6;ve.NEAREST_LINEAR=7;ve.NEAREST_NEAREST=1;ve.LINEAR_NEAREST_MIPNEAREST=9;ve.LINEAR_NEAREST_MIPLINEAR=10;ve.LINEAR_LINEAR=2;ve.LINEAR_NEAREST=12;ve.EXPLICIT_MODE=0;ve.SPHERICAL_MODE=1;ve.PLANAR_MODE=2;ve.CUBIC_MODE=3;ve.PROJECTION_MODE=4;ve.SKYBOX_MODE=5;ve.INVCUBIC_MODE=6;ve.EQUIRECTANGULAR_MODE=7;ve.FIXED_EQUIRECTANGULAR_MODE=8;ve.FIXED_EQUIRECTANGULAR_MIRRORED_MODE=9;ve.CLAMP_ADDRESSMODE=0;ve.WRAP_ADDRESSMODE=1;ve.MIRROR_ADDRESSMODE=2;ve.UseSerializedUrlIfAny=!1;P([F()],ve.prototype,"url",void 0);P([F()],ve.prototype,"uOffset",void 0);P([F()],ve.prototype,"vOffset",void 0);P([F()],ve.prototype,"uScale",void 0);P([F()],ve.prototype,"vScale",void 0);P([F()],ve.prototype,"uAng",void 0);P([F()],ve.prototype,"vAng",void 0);P([F()],ve.prototype,"wAng",void 0);P([F()],ve.prototype,"uRotationCenter",void 0);P([F()],ve.prototype,"vRotationCenter",void 0);P([F()],ve.prototype,"wRotationCenter",void 0);P([F()],ve.prototype,"homogeneousRotationInUVTransform",void 0);P([F()],ve.prototype,"isBlocking",null);Ft("BABYLON.Texture",ve);it._TextureParser=ve.Parse});var ao,D,ki=M(()=>{iC();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 Lh?(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 D(this._engine,this,e,this._updatable,!0,c,s===void 0?this._instanced:s,l,i,void 0,void 0,!0,this._divisor||o)}isUpdatable(){return this._updatable}getData(){return this._data}getBuffer(){return this._buffer}getStrideSize(){return this.byteStride/Float32Array.BYTES_PER_ELEMENT}create(e=null){!e&&this._buffer||(e=e||this._data,e&&(this._buffer?this._updatable&&(this._engine.updateDynamicVertexBuffer(this._buffer,e),this._data=e):this._updatable?(this._buffer=this._engine.createDynamicVertexBuffer(e,this._label),this._data=e):this._buffer=this._engine.createVertexBuffer(e,void 0,this._label)))}_rebuild(){if(this._data)this._buffer=null,this.create(this._data);else{if(!this._buffer)return;if(this._buffer.capacity>0){this._updatable?this._buffer=this._engine.createDynamicVertexBuffer(this._buffer.capacity,this._label):this._buffer=this._engine.createVertexBuffer(this._buffer.capacity,void 0,this._label);return}J.Warn(`Missing data for buffer "${this._label}" ${this._buffer?"(uniqueId: "+this._buffer.uniqueId+")":""}. Buffer reconstruction failed.`),this._buffer=null}}update(e){this.create(e)}updateDirectly(e,t,i,r=!1){this._buffer&&this._updatable&&(this._engine.updateDynamicVertexBuffer(this._buffer,e,r?t:t*Float32Array.BYTES_PER_ELEMENT,i?i*this.byteStride:void 0),t===0&&i===void 0?this._data=e:this._data=null)}_increaseReferences(){if(this._buffer){if(!this._isAlreadyOwned){this._isAlreadyOwned=!0;return}this._buffer.references++}}dispose(){this._buffer&&this._engine._releaseBuffer(this._buffer)&&(this._isDisposed=!0,this._data=null,this._buffer=null)}},D=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?_C(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){Uh(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();jl=class{constructor(e){this._vertexBuffers={},this._activePostProcesses=[],this.onBeforeRenderObservable=new ie,this._scene=e}_prepareBuffers(){if(this._vertexBuffers[D.PositionKind])return;let e=[];e.push(1,1),e.push(-1,1),e.push(-1,-1),e.push(1,-1),this._vertexBuffers[D.PositionKind]=new D(this._scene.getEngine(),e,D.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();YB=(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=hse(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();Sa();Pt();Q_();Ul();hn();Bh();Ni();Xl();qo();EC();Y_();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 Vh(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 qe("ScreenshotTools")}static async CreateScreenshotAsync(e,t,i,r="image/png",s){throw qe("ScreenshotTools")}static CreateScreenshotUsingRenderTarget(e,t,i,r,s="image/png",a=1,o=!1,l,c=!1,f=!1,h=!0,d,u){throw qe("ScreenshotTools")}static async CreateScreenshotUsingRenderTargetAsync(e,t,i,r="image/png",s=1,a=!1,o,l=!1,c=!1,f=!0,h,d){throw qe("ScreenshotTools")}static RandomId(){return cf()}static IsBase64(e){return hf(e)}static DecodeBase64(e){return df(e)}static get errorsCount(){return J.errorsCount}static Log(e){J.Log(e)}static Warn(e){J.Warn(e)}static Error(e){J.Error(e)}static get LogCache(){return J.LogCache}static ClearLogCache(){J.ClearLogCache()}static set LogLevels(e){J.LogLevels=e}static set PerformanceLogLevel(e){var t;if((e>.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 gr.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 Bl()?/^((?!chrome|android).)*safari/i.test(navigator.userAgent):!1}};gt=_e;_e.AssetBaseUrl="";_e.UseCustomRequestHeaders=!1;_e.CustomRequestHeaders=yr.CustomRequestHeaders;_e.GetDOMTextContent=yT;_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=J.NoneLogLevel;_e.MessageLogLevel=J.MessageLogLevel;_e.WarningLogLevel=J.WarningLogLevel;_e.ErrorLogLevel=J.ErrorLogLevel;_e.AllLogLevel=J.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;SA=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=k_;_e.IsExponentOfTwo=Dh;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,pf=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){J.Error("Cannot add an uniform after UBO has been created. uniformName="+e);return}this.addUniform(e,i),r=this._uniformLocations[e]}if(this._buffer||this.create(),this._dynamic)for(let s=0;s1&&this._buffers[t][1]&&this._bufferData.set(this._buffers[t][1]),this._valueCache={},this._currentFrameId=this._engine.frameId,!0;return!1}has(e){return this._uniformLocations[e]!==void 0}dispose(){if(this._noUBO)return;let e=this._engine._uniformBuffers,t=e.indexOf(this);if(t!==-1&&(e[t]=e[e.length-1],e.pop()),this._trackUBOsInFrame&&this._buffers)for(let i=0;i{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();$_=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{KB();SC=class{},xa=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 SC,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 Ra,TC=M(()=>{pf();di();TA();Qo();qo();Pt();lo();J_();Ra=class n{get renderList(){return this._renderList}set renderList(e){this._renderList!==e&&(this._unObserveRenderList&&(this._unObserveRenderList(),this._unObserveRenderList=null),e&&(this._unObserveRenderList=nA(e,this._renderListHasChanged)),this._renderList=e)}get disableImageProcessing(){return this._disableImageProcessing}set disableImageProcessing(e){e!==this._disableImageProcessing&&(this._disableImageProcessing=e,this._scene.markAllMaterialsAsDirty(64))}get disableDepthPrePass(){return this._disableDepthPrePass}set disableDepthPrePass(e){this._disableDepthPrePass=e,this._renderingManager.disableDepthPrePass=e}get name(){return this._name}set name(e){if(this._name!==e){if(this._name=e,this._sceneUBOs)for(let t=0;tthis._checkReadiness(),()=>{if(this._freezeActiveMeshesCancel=null,e)for(let t=0;t{this._freezeActiveMeshesCancel=null,i?(J.Error("ObjectRenderer: Timeout while waiting for the renderer to be ready."),t&&J.Error(t)):(J.Error("ObjectRenderer: An unexpected error occurred while waiting for the renderer to be ready."),t&&(J.Error(t),t.stack&&J.Error(t.stack)))})}_unfreezeActiveMeshes(){var e;(e=this._freezeActiveMeshesCancel)==null||e.call(this),this._freezeActiveMeshesCancel=null;for(let t=0;t{let a=this._renderList?this._renderList.length:0;if(s===0&&a>0||a===0)for(let o of this._scene.meshes)o._markSubMeshesAsLightDirty()},this.particleSystemList=null,this.getCustomRenderList=null,this.renderMeshes=!0,this.renderDepthOnlyMeshes=!0,this.renderOpaqueMeshes=!0,this.renderAlphaTestMeshes=!0,this.renderTransparentMeshes=!0,this.renderParticles=!0,this.renderSprites=!1,this.forceLayerMaskCheck=!1,this.enableBoundingBoxRendering=!1,this.enableOutlineRendering=!0,this._disableImageProcessing=!1,this.dontSetTransformationMatrix=!1,this._disableDepthPrePass=!1,this.onBeforeRenderObservable=new 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 xa(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();ts=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 qB={};tt(qB,{postprocessVertexShader:()=>dse});var AC,jB,dse,xC=M(()=>{G();AC="postprocessVertexShader",jB=`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):(mC(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 vB(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 uC(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=ts(this._m[0]);for(let t=1;t<16;t++)e=e*397^ts(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(Bh,s),s._updateIdentityStatus(c===1&&f===1&&h===1&&d===0),s}static OrthoOffCenterLH(e,t,i,r,s,a,o){let l=new n;return n.OrthoOffCenterLHToRef(e,t,i,r,s,a,l,o),l}static OrthoOffCenterLHToRef(e,t,i,r,s,a,o,l){let c=s,f=a,h=2/(t-e),d=2/(r-i),u=2/(f-c),m=-(f+c)/(f-c),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(Bh,o),o.markAsUpdated(),o}static ObliqueOffCenterLHToRef(e,t,i,r,s,a,o,l,c,f,h){let d=-o*Math.cos(l),u=-o*Math.sin(l);return n.TranslationToRef(0,0,-c,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(Bh,o),o._updateIdentityStatus(!1),o}static PerspectiveFovLH(e,t,i,r,s,a=0,o=!1){let l=new n;return n.PerspectiveFovLHToRef(e,t,i,r,l,!0,s,a,o),l}static PerspectiveFovLHToRef(e,t,i,r,s,a=!0,o,l=0,c=!1){let f=i,h=r,d=1/Math.tan(e*.5),u=a?d/t:d,m=a?d:d*t,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(Bh,s),s._updateIdentityStatus(!1),s}static PerspectiveFovReverseLHToRef(e,t,i,r,s,a=!0,o,l=0){let c=1/Math.tan(e*.5),f=a?c/t:c,h=a?c:c*t,d=Math.tan(l);return n.FromValuesToRef(f,0,0,0,0,h,0,d,0,0,-i,1,0,0,1,0,s),o&&s.multiplyToRef(Bh,s),s._updateIdentityStatus(!1),s}static PerspectiveFovRH(e,t,i,r,s,a=0,o=!1){let l=new n;return n.PerspectiveFovRHToRef(e,t,i,r,l,!0,s,a,o),l}static PerspectiveFovRHToRef(e,t,i,r,s,a=!0,o,l=0,c=!1){let f=i,h=r,d=1/Math.tan(e*.5),u=a?d/t:d,m=a?d:d*t,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(Bh,s),s._updateIdentityStatus(!1),s}static PerspectiveFovReverseRHToRef(e,t,i,r,s,a=!0,o,l=0){let c=1/Math.tan(e*.5),f=a?c/t:c,h=a?c:c*t,d=Math.tan(l);return n.FromValuesToRef(f,0,0,0,0,h,0,d,0,0,-i,-1,0,0,-1,0,s),o&&s.multiplyToRef(Bh,s),s._updateIdentityStatus(!1),s}static GetFinalMatrix(e,t,i,r,s,a){let o=e.width,l=e.height,c=e.x,f=e.y,h=n.FromValues(o/2,0,0,0,0,-l/2,0,0,0,0,a-s,0,c+o/2,l/2+f,s,1),d=new n;return t.multiplyToRef(i,d),d.multiplyToRef(r,d),d.multiplyToRef(h,d)}static GetAsMatrix2x2(e){let t=e.m,i=[t[0],t[1],t[4],t[5]];return Jn.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 Jn.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=Wl(11,b.Zero);He.Matrix=Wl(2,j.Identity);He.Quaternion=Wl(3,ze.Zero);$=class{};$.Vector2=Wl(3,Fe.Zero);$.Vector3=Wl(13,b.Zero);$.Vector4=Wl(3,Mi.Zero);$.Quaternion=Wl(3,ze.Zero);$.Matrix=Wl(8,j.Identity);Ft("BABYLON.Vector2",Fe);Ft("BABYLON.Vector3",b);Ft("BABYLON.Vector4",Mi);Ft("BABYLON.Matrix",j);Bh=j.FromValues(1,0,0,0,0,1,0,0,0,0,.5,0,0,0,.5,1)});var EB,Ms,SB,Ku=M(()=>{Ge();(function(n){n[n.LOCAL=0]="LOCAL",n[n.WORLD=1]="WORLD",n[n.BONE=2]="BONE"})(EB||(EB={}));Ms=class{};Ms.X=new b(1,0,0);Ms.Y=new b(0,1,0);Ms.Z=new b(0,0,1);(function(n){n[n.X=0]="X",n[n.Y=1]="Y",n[n.Z=2]="Z"})(SB||(SB={}))});function ju(n){return Math.pow(n,Xu)}function qu(n){return n<=.04045?.0773993808*n:Math.pow(.947867299*(n+.055),2.4)}function Zu(n){return Math.pow(n,dB)}function Qu(n){return n<=.0031308?12.92*n:1.055*Math.pow(n,.41666)-.055}var pe,lt,Sn,zt=M(()=>{Jo();zi();Nn();wn();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"#"+no(e)+no(t)+no(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"#"+no(t)+no(i)+no(r);let s=Math.round(this.a*255);return"#"+no(t)+no(i)+no(r)+no(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=qu(this.r),e.g=qu(this.g),e.b=qu(this.b)):(e.r=ju(this.r),e.g=ju(this.g),e.b=ju(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=Qu(this.r),e.g=Qu(this.g),e.b=Qu(this.b)):(e.r=Zu(this.r),e.g=Zu(this.g),e.b=Zu(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 so,$u=M(()=>{Ge();so=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}};so._TmpMatrix=j.Identity()});var cf,hA=M(()=>{$u();cf=class n{static GetPlanes(e){let t=[];for(let i=0;i<6;i++)t.push(new so(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 TB,Ju,_C,em,Uh,Vh=M(()=>{wn();Ge();Nn();(function(n){n[n.CW=0]="CW",n[n.CCW=1]="CCW"})(TB||(TB={}));Ju=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)}},_C=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=Ju.BetweenTwoPoints(this.centerPoint,this.startPoint);let l=this.startAngle.degrees(),c=Ju.BetweenTwoPoints(this.centerPoint,this.midPoint).degrees(),f=Ju.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=Ju.FromDegrees(this.orientation===0?l-f:f-l)}},em=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 _C(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)}},Uh=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 Hl,dA=M(()=>{Hl=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 AB=M(()=>{Ge()});var ao,tm=M(()=>{ao=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 xB=M(()=>{Ku();zt();Nn();hA();Vh();$u();dA();Ge();AB();tm()});var el,dse,zl,Xl,j_,tl,q_=M(()=>{Ge();xB();el=[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))],dse=[()=>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],zl=(n,e)=>el[n]*dse[n](e),Xl=[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],j_=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){$.Vector3[0].set(t.r,t.g,t.b);let r=$.Vector3[0],s=$.Vector3[1];r.scaleToRef(i,s),s.scaleToRef(zl(0,e),$.Vector3[2]),this.l00.addInPlace($.Vector3[2]),s.scaleToRef(zl(1,e),$.Vector3[2]),this.l1_1.addInPlace($.Vector3[2]),s.scaleToRef(zl(2,e),$.Vector3[2]),this.l10.addInPlace($.Vector3[2]),s.scaleToRef(zl(3,e),$.Vector3[2]),this.l11.addInPlace($.Vector3[2]),s.scaleToRef(zl(4,e),$.Vector3[2]),this.l2_2.addInPlace($.Vector3[2]),s.scaleToRef(zl(5,e),$.Vector3[2]),this.l2_1.addInPlace($.Vector3[2]),s.scaleToRef(zl(6,e),$.Vector3[2]),this.l20.addInPlace($.Vector3[2]),s.scaleToRef(zl(7,e),$.Vector3[2]),this.l21.addInPlace($.Vector3[2]),s.scaleToRef(zl(8,e),$.Vector3[2]),this.l22.addInPlace($.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(Xl[0]),this.l1_1.scaleInPlace(Xl[1]),this.l10.scaleInPlace(Xl[2]),this.l11.scaleInPlace(Xl[3]),this.l2_2.scaleInPlace(Xl[4]),this.l2_1.scaleInPlace(Xl[5]),this.l20.scaleInPlace(Xl[6]),this.l21.scaleInPlace(Xl[7]),this.l22.scaleInPlace(Xl[8])}convertIrradianceToLambertianRadiance(){this.scaleInPlace(1/Math.PI)}preScaleForRendering(){this.preScaled=!0,this.l00.scaleInPlace(el[0]),this.l1_1.scaleInPlace(el[1]),this.l10.scaleInPlace(el[2]),this.l11.scaleInPlace(el[3]),this.l2_2.scaleInPlace(el[4]),this.l2_1.scaleInPlace(el[5]),this.l20.scaleInPlace(el[6]),this.l21.scaleInPlace(el[7]),this.l22.scaleInPlace(el[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}},tl=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=j_.FromPolynomial(this)),this._harmonics.preScaled||this._harmonics.preScaleForRendering(),this._harmonics}addAmbient(e){$.Vector3[0].copyFromFloats(e.r,e.g,e.b);let t=$.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),$.Vector3[0].copyFrom(e.l20).scaleInPlace(.247708),$.Vector3[1].copyFrom(e.l22).scaleInPlace(.429043),this.xx.scaleInPlace(.886277).subtractInPlace($.Vector3[0]).addInPlace($.Vector3[1]),this.yy.copyFrom(e.l00),this.yy.scaleInPlace(.886277).subtractInPlace($.Vector3[0]).subtractInPlace($.Vector3[1]),this.zz.copyFrom(e.l00),$.Vector3[0].copyFrom(e.l20).scaleInPlace(.495417),this.zz.scaleInPlace(.886277).addInPlace($.Vector3[0]),this.yz.copyFrom(e.l2_1),this.yz.scaleInPlace(.858086).scaleInPlace(-1),this.zx.copyFrom(e.l21),this.zx.scaleInPlace(.858086).scaleInPlace(-1),this.xy.copyFrom(e.l2_2),this.xy.scaleInPlace(.858086),this.scaleInPlace(1/Math.PI),this}static FromHarmonics(e){return new n().updateFromHarmonics(e)}static FromArray(e){let t=new n;return b.FromArrayToRef(e[0],0,t.x),b.FromArrayToRef(e[1],0,t.y),b.FromArrayToRef(e[2],0,t.z),b.FromArrayToRef(e[3],0,t.xx),b.FromArrayToRef(e[4],0,t.yy),b.FromArrayToRef(e[5],0,t.zz),b.FromArrayToRef(e[6],0,t.yz),b.FromArrayToRef(e[7],0,t.zx),b.FromArrayToRef(e[8],0,t.xy),t}}});function P(n,e,t,i){var r=arguments.length,s=r<3?e:i===null?i=Object.getOwnPropertyDescriptor(e,t):i,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(n,e,t,i);else for(var o=n.length-1;o>=0;o--)(a=n[o])&&(s=(r<3?a(s):r>3?a(e,t,s):a(e,t))||s);return r>3&&s&&Object.defineProperty(e,t,s),s}var kt=M(()=>{});function RB(n){let e=n.getClassName();return mA[e]||(mA[e]={}),mA[e]}function pA(n){let e=n.getClassName();if(uA[e])return uA[e];uA[e]={};let t=uA[e],i=n,r=e;for(;r;){let s=mA[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 uA,mA,gC=M(()=>{uA={},mA={}});function Ta(n,e){return(t,i)=>{let r=RB(t);r[i]||(r[i]={type:n,sourceName:e})}}function use(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 use(n,e)}function F(n){return Ta(0,n)}function Ut(n){return Ta(1,n)}function Sr(n){return Ta(2,n)}function im(n){return Ta(3,n)}function rm(n){return Ta(4,n)}function Xr(n){return Ta(5,n)}function _A(n){return Ta(6,n)}function bB(n){return Ta(7,n)}function nm(n){return Ta(8,n)}function IB(n){return Ta(9,n)}function MB(n){return Ta(10,n)}function CB(n){return Ta(11,n)}function Cs(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(()=>{gC();Cs.filter=function(n){return(e,t,i)=>Cs(e,t,i,n)}});function ff(){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 Z_=M(()=>{});function mse(){return typeof _native!="undefined"&&_native.XMLHttpRequest?new _native.XMLHttpRequest:new XMLHttpRequest}var Pr,Gh=M(()=>{Pr=class n{constructor(){this._xhr=mse(),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)}};Pr.CustomRequestHeaders={};Pr.CustomRequestModifiers=new Array;Pr.SkipRequestModificationForBabylonCDN=!0});var hf,yB=M(()=>{hf=class{};hf.FilesToLoad={}});var gA,PB=M(()=>{gA=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 Yl,Aa,ys,Q_=M(()=>{Yl=class extends Error{};Yl._setPrototypeOf=Object.setPrototypeOf||((n,e)=>(n.__proto__=e,n));Aa={MeshInvalidPositionsError:0,UnsupportedTextureError:1e3,GLTFLoaderUnexpectedMagicError:2e3,SceneLoaderError:3e3,LoadFileError:4e3,RequestFileError:4001,ReadFileError:4002},ys=class n extends Yl{constructor(e,t,i){super(e),this.errorCode=t,this.innerError=i,this.name="RuntimeError",Yl._setPrototypeOf(this,n.prototype)}}});function pse(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 _se(n){let e=vC(n),t=e.length,i=new Uint8Array(new ArrayBuffer(t));for(let r=0;r{LB=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():pse(e)},vC=n=>atob(n),DB=n=>typeof Uint8Array.fromBase64=="function"?Uint8Array.fromBase64(n).buffer:_se(n)});function gse(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 vse(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 il(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 EC(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 kh(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 uf(n){return DB(n.split(",")[1])}var FB,om,EA,TC,Ese,Gi,SA,wB,lm,Wh,rl,TA,BB,UB,df,VB,GB,Sse,J_,Tse,Kl=M(()=>{Gh();Sa();di();yB();PB();Q_();$_();ZT();Ni();Pt();Qo();lf();Vr();am();FB=new RegExp(/^data:([^,]+\/[^,]+)?;base64,/i),om=class n extends ys{constructor(e,t){super(e,Aa.LoadFileError),this.name="LoadFileError",Yl._setPrototypeOf(this,n.prototype),t instanceof Pr?this.request=t:this.file=t}},EA=class n extends ys{constructor(e,t){super(e,Aa.RequestFileError),this.request=t,this.name="RequestFileError",Yl._setPrototypeOf(this,n.prototype)}},TC=class n extends ys{constructor(e,t){super(e,Aa.ReadFileError),this.file=t,this.name="ReadFileError",Yl._setPrototypeOf(this,n.prototype)}},Ese=n=>(n=n.replace(/#/gm,"%23"),n),Gi={DefaultRetryStrategy:gA.ExponentialBackoff(),BaseUrl:"",CorsBehavior:"anonymous",PreprocessUrl:n=>n,ScriptBaseUrl:"",ScriptPreprocessUrl:n=>n,CleanUrl:Ese},SA=(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)}},wB={getRequiredSize:null},lm=(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=vA(n),o=URL.createObjectURL(new Blob([E],{type:r})),l=!0}else o=`data:${r};base64,`+sm(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 rl(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(wB.getRequiredSize){let E=wB.getRequiredSize(n);E.width&&(f.width=E.width),E.height&&(f.height=E.height)}SA(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||!Pr.IsCustomRequestAvailable?f.src=o:rl(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(hf.FilesToLoad[E]&&typeof URL!="undefined"){try{let S;try{S=URL.createObjectURL(hf.FilesToLoad[E])}catch(R){S=URL.createObjectURL(hf.FilesToLoad[E])}f.src=S,l=!0}catch(S){f.src=""}return f}}x()}return f},Wh=(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 TC(`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},rl=(n,e,t,i,r,s,a)=>{if(n.name)return Wh(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=hf.FilesToLoad[f];if(h)return Wh(h,e,t,r,s?d=>s(void 0,new om(d.message,d.file)):void 0)}let{match:l,type:c}=VB(o);if(l){let f={onCompleteObservable:new ie,abort:()=>()=>{}};try{let h=r?uf(o):GB(o);e(h,void 0,c)}catch(h){s?s(void 0,h):J.Error(h.message||"Failed to parse the Data URL")}return to.SetImmediate(()=>{f.onCompleteObservable.notifyObservers(f)}),f}return TA(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 om(f.message,f.request))}:void 0,a)},TA=(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 Pr,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 EA(T,d)):J.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&&(!ur()||UB())){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 Pr,u=setTimeout(()=>v(x+1),S);return}}let E=new EA("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},BB=n=>{let{match:e,type:t}=VB(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}},UB=()=>typeof location!="undefined"&&location.protocol==="file:",df=n=>FB.test(n),VB=n=>{let e=FB.exec(n);return e===null||e.length===0?{match:!1,type:""}:{match:!0,type:e[0].replace("data:","").replace(";base64,","")}};GB=n=>vC(n.split(",")[1]),Sse=()=>{Me._FileToolsLoadImage=lm,Gu.loadFile=rl,tC.loadFile=rl};Sse();Tse=(n,e,t,i,r,s,a,o,l,c)=>{J_={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(J_,"DefaultRetryStrategy",{get:function(){return t.DefaultRetryStrategy},set:function(f){t.DefaultRetryStrategy=f}}),Object.defineProperty(J_,"BaseUrl",{get:function(){return t.BaseUrl},set:function(f){t.BaseUrl=f}}),Object.defineProperty(J_,"PreprocessUrl",{get:function(){return t.PreprocessUrl},set:function(f){t.PreprocessUrl=f}}),Object.defineProperty(J_,"CorsBehavior",{get:function(){return t.CorsBehavior},set:function(f){t.CorsBehavior=f}})};Tse(uf,GB,Gi,df,UB,rl,lm,Wh,TA,SA)});var AA,kB=M(()=>{dA();AA=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=Hl.Zero(),this._cachedBaseSize=Hl.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 xA,WB=M(()=>{xA=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,mf=M(()=>{WB();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):xA.Eval(t,i=>n.HasTags(e)&&e._tags[i])}}});var HB,it,Rr=M(()=>{hn();mf();zt();Ge();gC();HB=function(n,e,t,i={}){let r=n();Qt&&Qt.HasTags(e)&&Qt.AddTagsTo(r,Qt.GetTags(e,!0));let s=pA(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 qe("ImageProcessingConfiguration")};it._FresnelParametersParser=n=>{throw qe("FresnelParameters")};it._ColorCurvesParser=n=>{throw qe("ColorCurves")};it._TextureParser=(n,e,t)=>{throw qe("Texture")}});var pi,eg=M(()=>{kt();Vt();di();Ge();Ni();Z_();Kl();kB();Rr();pi=class n extends AA{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=ff()),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 pf,jl,AC=M(()=>{Ge();wn();q_();Nn();zt();pf=class{constructor(e,t,i,r){this.name=e,this.worldAxisForNormal=t,this.worldAxisForFileX=i,this.worldAxisForFileY=r}},jl=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 L=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),L=r);let O={size:L,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 j_,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;xL){let w=L/V;I*=w,C*=w,y*=w}}else I=wt(I,0,L),C=wt(C,0,L),y=wt(y,0,L);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(),tl.FromHarmonics(r)}};jl._FileFaces=[new pf("right",new b(1,0,0),new b(0,0,-1),new b(0,-1,0)),new pf("left",new b(-1,0,0),new b(0,0,1),new b(0,-1,0)),new pf("up",new b(0,1,0),new b(1,0,0),new b(0,0,1)),new pf("down",new b(0,-1,0),new b(1,0,0),new b(0,0,-1)),new pf("front",new b(0,0,1),new b(1,0,0),new b(0,-1,0)),new pf("back",new b(0,0,-1),new b(-1,0,0),new b(0,-1,0))];jl.MAX_HDRI_VALUE=4096;jl.PRESERVE_CLAMPED_COLORS=!1});var ql,xC=M(()=>{Pt();zi();ql=class{static Instantiate(e){if(this.RegisteredExternalClasses&&this.RegisteredExternalClasses[e])return this.RegisteredExternalClasses[e];let t=En(e);if(t)return t;J.Warn(e+" not found, you may have missed an import.");let i=e.split("."),r=window||this;for(let s=0,a=i.length;s=0;){let h=n[c];h<0?h=0:h>1&&(h=1),f[c]=h*255}n=f}let s=document.createElement("canvas");s.width=i,s.height=r;let a=s.getContext("2d");if(!a)return null;let o=a.createImageData(i,r);if(o.data.set(n),a.putImageData(o,0,0),t){let c=document.createElement("canvas");c.width=i,c.height=r;let f=c.getContext("2d");return f?(f.translate(0,r),f.scale(1,-1),f.drawImage(s,0,0),c.toDataURL("image/png")):null}return s.toDataURL("image/png")}function XB(n,e=0,t=0){let i=n.getInternalTexture();if(!i)return null;let r=n._readPixelsSync(e,t);return r?zB(r,n.getSize(),i.invertY):null}async function YB(n,e=0,t=0){let i=n.getInternalTexture();if(!i)return null;let r=await n.readPixels(e,t);return r?zB(r,n.getSize(),i.invertY):null}var KB=M(()=>{});var Mt,rn=M(()=>{Mt=!1});var ve,Gr=M(()=>{kt();Vt();di();Ge();eg();zi();hn();Qo();xC();$u();$_();KB();rn();Rr();ve=class n extends pi{static _CreateVideoTexture(e,t,i,r=!1,s=!1,a=n.TRILINEAR_SAMPLINGMODE,o={},l,c=5){throw qe("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,L,O,V,w,N,U,H;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=(L=i.onError)!=null?L: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,_=(w=i.useSRGBBuffer)!=null?w:!1,g=(N=i.internalTexture)!=null?N:null,v=(U=i.gammaSpace)!=null?U:v,m=(H=i.forcedExtension)!=null?H: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=(ee,q)=>{this._loadingError=!0,this._errorObject={message:ee,exception:q},o&&o(ee,q),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)to.SetImmediate(()=>E());else{let ee=this._texture.onLoadedObservable.add(E);this._texture.onErrorObservable.add(q=>{var te;S(q.message,q.exception),(te=this._texture)==null||te.onLoadedObservable.remove(ee)})}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(ee){throw S("error loading",ee),ee}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?to.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,$.Matrix[0]),j.TranslationToRef(this._cachedURotationCenter,this._cachedVRotationCenter,this._cachedWRotationCenter,$.Matrix[1]),j.ScalingToRef(this._cachedUScale,this._cachedVScale,0,$.Matrix[2]),j.TranslationToRef(this._cachedUOffset,this._cachedVOffset,0,$.Matrix[3]),$.Matrix[0].multiplyToRef(this._rowGenerationMatrix,this._cachedTextureMatrix),this._cachedTextureMatrix.multiplyToRef($.Matrix[1],this._cachedTextureMatrix),this._cachedTextureMatrix.multiplyToRef($.Matrix[2],this._cachedTextureMatrix),this._cachedTextureMatrix.multiplyToRef($.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,${sm(this._buffer)}`}else(n.ForceSerializeBuffers||this.url&&this.url.startsWith("blob:")||this._forceSerialize)&&(t.base64String=!this._engine||this._engine._features.supportSyncTextureRead?XB(this):YB(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=ql.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=so.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)}};ve.SerializeBuffers=!0;ve.ForceSerializeBuffers=!1;ve.OnTextureLoadErrorObservable=new ie;ve._SerializeInternalTextureUniqueId=!1;ve._CubeTextureParser=(n,e,t)=>{throw qe("CubeTexture")};ve._CreateMirror=(n,e,t,i)=>{throw qe("MirrorTexture")};ve._CreateRenderTargetTexture=(n,e,t,i,r)=>{throw qe("RenderTargetTexture")};ve.NEAREST_SAMPLINGMODE=1;ve.NEAREST_NEAREST_MIPLINEAR=8;ve.BILINEAR_SAMPLINGMODE=2;ve.LINEAR_LINEAR_MIPNEAREST=11;ve.TRILINEAR_SAMPLINGMODE=3;ve.LINEAR_LINEAR_MIPLINEAR=3;ve.NEAREST_NEAREST_MIPNEAREST=4;ve.NEAREST_LINEAR_MIPNEAREST=5;ve.NEAREST_LINEAR_MIPLINEAR=6;ve.NEAREST_LINEAR=7;ve.NEAREST_NEAREST=1;ve.LINEAR_NEAREST_MIPNEAREST=9;ve.LINEAR_NEAREST_MIPLINEAR=10;ve.LINEAR_LINEAR=2;ve.LINEAR_NEAREST=12;ve.EXPLICIT_MODE=0;ve.SPHERICAL_MODE=1;ve.PLANAR_MODE=2;ve.CUBIC_MODE=3;ve.PROJECTION_MODE=4;ve.SKYBOX_MODE=5;ve.INVCUBIC_MODE=6;ve.EQUIRECTANGULAR_MODE=7;ve.FIXED_EQUIRECTANGULAR_MODE=8;ve.FIXED_EQUIRECTANGULAR_MIRRORED_MODE=9;ve.CLAMP_ADDRESSMODE=0;ve.WRAP_ADDRESSMODE=1;ve.MIRROR_ADDRESSMODE=2;ve.UseSerializedUrlIfAny=!1;P([F()],ve.prototype,"url",void 0);P([F()],ve.prototype,"uOffset",void 0);P([F()],ve.prototype,"vOffset",void 0);P([F()],ve.prototype,"uScale",void 0);P([F()],ve.prototype,"vScale",void 0);P([F()],ve.prototype,"uAng",void 0);P([F()],ve.prototype,"vAng",void 0);P([F()],ve.prototype,"wAng",void 0);P([F()],ve.prototype,"uRotationCenter",void 0);P([F()],ve.prototype,"vRotationCenter",void 0);P([F()],ve.prototype,"wRotationCenter",void 0);P([F()],ve.prototype,"homogeneousRotationInUVTransform",void 0);P([F()],ve.prototype,"isBlocking",null);Ft("BABYLON.Texture",ve);it._TextureParser=ve.Parse});var oo,D,ki=M(()=>{aC();Pt();am();oo=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 Nh?(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 D(this._engine,this,e,this._updatable,!0,c,s===void 0?this._instanced:s,l,i,void 0,void 0,!0,this._divisor||o)}isUpdatable(){return this._updatable}getData(){return this._data}getBuffer(){return this._buffer}getStrideSize(){return this.byteStride/Float32Array.BYTES_PER_ELEMENT}create(e=null){!e&&this._buffer||(e=e||this._data,e&&(this._buffer?this._updatable&&(this._engine.updateDynamicVertexBuffer(this._buffer,e),this._data=e):this._updatable?(this._buffer=this._engine.createDynamicVertexBuffer(e,this._label),this._data=e):this._buffer=this._engine.createVertexBuffer(e,void 0,this._label)))}_rebuild(){if(this._data)this._buffer=null,this.create(this._data);else{if(!this._buffer)return;if(this._buffer.capacity>0){this._updatable?this._buffer=this._engine.createDynamicVertexBuffer(this._buffer.capacity,this._label):this._buffer=this._engine.createVertexBuffer(this._buffer.capacity,void 0,this._label);return}J.Warn(`Missing data for buffer "${this._label}" ${this._buffer?"(uniqueId: "+this._buffer.uniqueId+")":""}. Buffer reconstruction failed.`),this._buffer=null}}update(e){this.create(e)}updateDirectly(e,t,i,r=!1){this._buffer&&this._updatable&&(this._engine.updateDynamicVertexBuffer(this._buffer,e,r?t:t*Float32Array.BYTES_PER_ELEMENT,i?i*this.byteStride:void 0),t===0&&i===void 0?this._data=e:this._data=null)}_increaseReferences(){if(this._buffer){if(!this._isAlreadyOwned){this._isAlreadyOwned=!0;return}this._buffer.references++}}dispose(){this._buffer&&this._engine._releaseBuffer(this._buffer)&&(this._isDisposed=!0,this._data=null,this._buffer=null)}},D=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 oo?(this._buffer=t,this._ownsBuffer=m):(this._buffer=new oo(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 _=il(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?SC(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/il(this.type)}getOffset(){return this.byteOffset/il(this.type)}getSize(e=!1){return e?this._size*il(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){kh(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();Zl=class{constructor(e){this._vertexBuffers={},this._activePostProcesses=[],this.onBeforeRenderObservable=new ie,this._scene=e}_prepareBuffers(){if(this._vertexBuffers[D.PositionKind])return;let e=[];e.push(1,1),e.push(-1,1),e.push(-1,-1),e.push(1,-1),this._vertexBuffers[D.PositionKind]=new D(this._scene.getEngine(),e,D.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();jB=(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;nl=class{static DeepCopy(e,t,i,r,s=!1){let a=Ase(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();Sa();Pt();tg();Gl();hn();Gh();Ni();Kl();Qo();xC();Z_();io();_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("://"){rl(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 Wh(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){nl.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 qe("ScreenshotTools")}static async CreateScreenshotAsync(e,t,i,r="image/png",s){throw qe("ScreenshotTools")}static CreateScreenshotUsingRenderTarget(e,t,i,r,s="image/png",a=1,o=!1,l,c=!1,f=!1,h=!0,d,u){throw qe("ScreenshotTools")}static async CreateScreenshotUsingRenderTargetAsync(e,t,i,r="image/png",s=1,a=!1,o,l=!1,c=!1,f=!0,h,d){throw qe("ScreenshotTools")}static RandomId(){return ff()}static IsBase64(e){return df(e)}static DecodeBase64(e){return uf(e)}static get errorsCount(){return J.errorsCount}static Log(e){J.Log(e)}static Warn(e){J.Warn(e)}static Error(e){J.Error(e)}static get LogCache(){return J.LogCache}static ClearLogCache(){J.ClearLogCache()}static set LogLevels(e){J.LogLevels=e}static set PerformanceLogLevel(e){var t;if((e>.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(!ur())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 vr.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 Vl()?/^((?!chrome|android).)*safari/i.test(navigator.userAgent):!1}};gt=_e;_e.AssetBaseUrl="";_e.UseCustomRequestHeaders=!1;_e.CustomRequestHeaders=Pr.CustomRequestHeaders;_e.GetDOMTextContent=NT;_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=J.NoneLogLevel;_e.MessageLogLevel=J.MessageLogLevel;_e.WarningLogLevel=J.WarningLogLevel;_e.ErrorLogLevel=J.ErrorLogLevel;_e.AllLogLevel=J.AllLogLevel;_e.IsWindowObjectExist=ur;_e.PerformanceNoneLogLevel=0;_e.PerformanceUserMarkLogLevel=1;_e.PerformanceConsoleLogLevel=2;_e._NativePerformanceCounterHandles=new Map;_e.StartPerformanceCounter=gt._StartPerformanceCounterDisabled;_e.EndPerformanceCounter=gt._EndPerformanceCounterDisabled;bA=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=X_;_e.IsExponentOfTwo=wh;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 mr,_f=M(()=>{Pt();Ci();mr=class n{constructor(e,t,i=!1,r,s=!1,a){this._uniformNames=[],this._valueCache={},this._engine=e,this._noUBO=!e.supportsUniformBuffers||s,this._dynamic=i,this._name=r!=null?r:"no-name",this._data=t||[],this._uniformLocations={},this._uniformSizes={},this._uniformArraySizes={},this._uniformLocationPointer=0,this._needSync=!1,this._trackUBOsInFrame=!1,(a===void 0&&this._engine._features.trackUbosInFrame||a===!0)&&(this._buffers=[],this._bufferIndex=-1,this._bufferUpdatedLastFrame=!1,this._createBufferOnWrite=!1,this._currentFrameId=0,this._trackUBOsInFrame=!0),this._noUBO?(this.updateMatrix3x3=this._updateMatrix3x3ForEffect,this.updateMatrix2x2=this._updateMatrix2x2ForEffect,this.updateFloat=this._updateFloatForEffect,this.updateFloat2=this._updateFloat2ForEffect,this.updateFloat3=this._updateFloat3ForEffect,this.updateFloat4=this._updateFloat4ForEffect,this.updateFloatArray=this._updateFloatArrayForEffect,this.updateArray=this._updateArrayForEffect,this.updateIntArray=this._updateIntArrayForEffect,this.updateUIntArray=this._updateUIntArrayForEffect,this.updateMatrix=this._updateMatrixForEffect,this.updateMatrices=this._updateMatricesForEffect,this.updateVector3=this._updateVector3ForEffect,this.updateVector4=this._updateVector4ForEffect,this.updateColor3=this._updateColor3ForEffect,this.updateColor4=this._updateColor4ForEffect,this.updateDirectColor4=this._updateDirectColor4ForEffect,this.updateInt=this._updateIntForEffect,this.updateInt2=this._updateInt2ForEffect,this.updateInt3=this._updateInt3ForEffect,this.updateInt4=this._updateInt4ForEffect,this.updateUInt=this._updateUIntForEffect,this.updateUInt2=this._updateUInt2ForEffect,this.updateUInt3=this._updateUInt3ForEffect,this.updateUInt4=this._updateUInt4ForEffect):(this._engine._uniformBuffers.push(this),this.updateMatrix3x3=this._updateMatrix3x3ForUniform,this.updateMatrix2x2=this._updateMatrix2x2ForUniform,this.updateFloat=this._updateFloatForUniform,this.updateFloat2=this._updateFloat2ForUniform,this.updateFloat3=this._updateFloat3ForUniform,this.updateFloat4=this._updateFloat4ForUniform,this.updateFloatArray=this._updateFloatArrayForUniform,this.updateArray=this._updateArrayForUniform,this.updateIntArray=this._updateIntArrayForUniform,this.updateUIntArray=this._updateUIntArrayForUniform,this.updateMatrix=this._updateMatrixForUniform,this.updateMatrices=this._updateMatricesForUniform,this.updateVector3=this._updateVector3ForUniform,this.updateVector4=this._updateVector4ForUniform,this.updateColor3=this._updateColor3ForUniform,this.updateColor4=this._updateColor4ForUniform,this.updateDirectColor4=this._updateDirectColor4ForUniform,this.updateInt=this._updateIntForUniform,this.updateInt2=this._updateInt2ForUniform,this.updateInt3=this._updateInt3ForUniform,this.updateInt4=this._updateInt4ForUniform,this.updateUInt=this._updateUIntForUniform,this.updateUInt2=this._updateUInt2ForUniform,this.updateUInt3=this._updateUInt3ForUniform,this.updateUInt4=this._updateUInt4ForUniform)}get useUbo(){return!this._noUBO}get isSync(){return!this._needSync}isDynamic(){return this._dynamic}getData(){return this._bufferData}getBuffer(){return this._buffer}getUniformNames(){return this._uniformNames}_fillAlignment(e){let t;if(e<=2?t=e:t=4,this._uniformLocationPointer%t!==0){let i=this._uniformLocationPointer;this._uniformLocationPointer+=t-this._uniformLocationPointer%t;let r=this._uniformLocationPointer-i;for(let s=0;s0&&typeof t=="number"&&(this._uniformArraySizes[e]={strideSize:t,arraySize:i}),this._uniformLocations[e]!==void 0||(this._uniformNames.push(e),this._noUBO))return;let r;if(i>0){if(t instanceof Array)throw"addUniform should not be use with Array in UBO: "+e;if(this._fillAlignment(4),t==16)t=t*i;else{let a=(4-t)*i;t=t*i+a}r=[];for(let s=0;s1&&this._buffers[this._bufferIndex][1])if(this._buffersEqual(this._bufferData,this._buffers[this._bufferIndex][1])){this._needSync=!1,this._createBufferOnWrite=this._trackUBOsInFrame;return}else this._copyBuffer(this._bufferData,this._buffers[this._bufferIndex][1]);this._bufferUpdatedLastFrame=!0,this._engine.updateUniformBuffer(this._buffer,this._bufferData),this._needSync=!1,this._createBufferOnWrite=this._trackUBOsInFrame}}_createNewBuffer(){this._bufferIndex+10?(this._buffers.length===1?this._needSync=!this._bufferUpdatedLastFrame:this._needSync=this._bufferIndex!==0,this._bufferIndex=0,this._buffer=this._buffers[this._bufferIndex][0]):this._bufferIndex=-1)}updateUniform(e,t,i){this._checkNewFrame();let r=this._uniformLocations[e];if(r===void 0){if(this._buffer){J.Error("Cannot add an uniform after UBO has been created. uniformName="+e);return}this.addUniform(e,i),r=this._uniformLocations[e]}if(this._buffer||this.create(),this._dynamic)for(let s=0;s1&&this._buffers[t][1]&&this._bufferData.set(this._buffers[t][1]),this._valueCache={},this._currentFrameId=this._engine.frameId,!0;return!1}has(e){return this._uniformLocations[e]!==void 0}dispose(){if(this._noUBO)return;let e=this._engine._uniformBuffers,t=e.indexOf(this);if(t!==-1&&(e[t]=e[e.length-1],e.pop()),this._trackUBOsInFrame&&this._buffers)for(let i=0;i{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;lo=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{co();Ge();ig=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 lo(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{qB();RC=class{},xa=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 RC,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 Ra,bC=M(()=>{_f();di();IA();Jo();Qo();Pt();co();rg();Ra=class n{get renderList(){return this._renderList}set renderList(e){this._renderList!==e&&(this._unObserveRenderList&&(this._unObserveRenderList(),this._unObserveRenderList=null),e&&(this._unObserveRenderList=cA(e,this._renderListHasChanged)),this._renderList=e)}get disableImageProcessing(){return this._disableImageProcessing}set disableImageProcessing(e){e!==this._disableImageProcessing&&(this._disableImageProcessing=e,this._scene.markAllMaterialsAsDirty(64))}get disableDepthPrePass(){return this._disableDepthPrePass}set disableDepthPrePass(e){this._disableDepthPrePass=e,this._renderingManager.disableDepthPrePass=e}get name(){return this._name}set name(e){if(this._name!==e){if(this._name=e,this._sceneUBOs)for(let t=0;tthis._checkReadiness(),()=>{if(this._freezeActiveMeshesCancel=null,e)for(let t=0;t{this._freezeActiveMeshesCancel=null,i?(J.Error("ObjectRenderer: Timeout while waiting for the renderer to be ready."),t&&J.Error(t)):(J.Error("ObjectRenderer: An unexpected error occurred while waiting for the renderer to be ready."),t&&(J.Error(t),t.stack&&J.Error(t.stack)))})}_unfreezeActiveMeshes(){var e;(e=this._freezeActiveMeshesCancel)==null||e.call(this),this._freezeActiveMeshesCancel=null;for(let t=0;t{let a=this._renderList?this._renderList.length:0;if(s===0&&a>0||a===0)for(let o of this._scene.meshes)o._markSubMeshesAsLightDirty()},this.particleSystemList=null,this.getCustomRenderList=null,this.renderMeshes=!0,this.renderDepthOnlyMeshes=!0,this.renderOpaqueMeshes=!0,this.renderAlphaTestMeshes=!0,this.renderTransparentMeshes=!0,this.renderParticles=!0,this.renderSprites=!1,this.forceLayerMaskCheck=!1,this.enableBoundingBoxRendering=!1,this.enableOutlineRendering=!0,this._disableImageProcessing=!1,this.dontSetTransformationMatrix=!1,this._disableDepthPrePass=!1,this.onBeforeRenderObservable=new 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 xa(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();is=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():to.SetImmediate(()=>{i.getEngine().onEndFrameObservable.addOnce(()=>{i.dispose()})}),this.effect=null}(t=this.drawContext)==null||t.dispose()}}});var QB={};tt(QB,{postprocessVertexShader:()=>xse});var IC,ZB,xse,MC=M(()=>{G();IC="postprocessVertexShader",ZB=`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 -}`;A.ShadersStore[AC]||(A.ShadersStore[AC]=jB);dse={name:AC,shader:jB}});var QB={};tt(QB,{postprocessVertexShaderWGSL:()=>use});var RC,ZB,use,bC=M(()=>{G();RC="postprocessVertexShader",ZB=`attribute position: vec2;uniform scale: vec2;varying vUV: vec2;const madd=vec2(0.5,0.5); +}`;A.ShadersStore[IC]||(A.ShadersStore[IC]=ZB);xse={name:IC,shader:ZB}});var JB={};tt(JB,{postprocessVertexShaderWGSL:()=>Rse});var CC,$B,Rse,yC=M(()=>{G();CC="postprocessVertexShader",$B=`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 } -`;A.ShadersStoreWGSL[RC]||(A.ShadersStoreWGSL[RC]=ZB);use={name:RC,shader:ZB}});var IC,AA,Xr,kh=M(()=>{ki();em();di();yh();Gh();xC();bC();IC={positions:[1,1,-1,1,-1,-1,1,-1],indices:[0,1,2,0,2,3]},AA=class{constructor(e,t=IC){var s,a;this._fullscreenViewport=new so(0,0,1,1);let i=(s=t.positions)!=null?s:IC.positions,r=(a=t.indices)!=null?a:IC.indices;this.engine=e,this._vertexBuffers={[D.PositionKind]:new D(e,i,D.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[D.PositionKind];e&&(e.dispose(),delete this._vertexBuffers[D.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 ts(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 CC={};tt(CC,{passPixelShader:()=>mse});var MC,$B,mse,yC=M(()=>{G();MC="passPixelShader",$B=`varying vec2 vUV;uniform sampler2D textureSampler; +`;A.ShadersStoreWGSL[CC]||(A.ShadersStoreWGSL[CC]=$B);Rse={name:CC,shader:$B}});var PC,MA,Yr,zh=M(()=>{ki();tm();di();Dh();Hh();MC();yC();PC={positions:[1,1,-1,1,-1,-1,1,-1],indices:[0,1,2,0,2,3]},MA=class{constructor(e,t=PC){var s,a;this._fullscreenViewport=new ao(0,0,1,1);let i=(s=t.positions)!=null?s:PC.positions,r=(a=t.indices)!=null?a:PC.indices;this.engine=e,this._vertexBuffers={[D.PositionKind]:new D(e,i,D.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[D.PositionKind];e&&(e.dispose(),delete this._vertexBuffers[D.PositionKind]),this._indexBuffer&&this.engine._releaseBuffer(this._indexBuffer),this._onContextRestoredObserver&&(this.engine.onContextRestoredObservable.remove(this._onContextRestoredObserver),this._onContextRestoredObserver=null)}},Yr=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 is(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 ar(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)}};Yr.ForceGLSL=!1;Yr._CustomShaderCodeProcessing={}});var DC={};tt(DC,{passPixelShader:()=>bse});var LC,eU,bse,OC=M(()=>{G();LC="passPixelShader",eU=`varying vec2 vUV;uniform sampler2D textureSampler; #define CUSTOM_FRAGMENT_DEFINITIONS void main(void) -{gl_FragColor=texture2D(textureSampler,vUV);}`;A.ShadersStore[MC]||(A.ShadersStore[MC]=$B);mse={name:MC,shader:$B}});var JB={};tt(JB,{Dispose:()=>LC,DumpData:()=>xA,DumpDataAsync:()=>tg,DumpFramebuffer:()=>PC,DumpTools:()=>vse,EncodeImageAsync:()=>gse});async function pse(){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&&J.Warn("DumpData: OffscreenCanvas will be used for dumping data. This may result in lossy alpha values.");let{ThinEngine:e}=await Promise.resolve().then(()=>(Jn(),q2));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&&LC()}),i.getCaps().parallelShaderCompile=void 0;let r=new AA(i),{passPixelShader:s}=await Promise.resolve().then(()=>(yC(),CC)),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 _se(){return _f||(_f=pse()),await _f}async function PC(n,e,t,i,r="image/png",s,a){let o=await t.readPixels(0,0,n,e),l=new Uint8Array(o.buffer);xA(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&&_e.DownloadBlob(l,r),l.type!==i&&J.Warn(`DumpData: The requested mimeType '${i}' is not supported. The result has mimeType '${l.type}' instead.`);let c=await l.arrayBuffer();return a?c:`data:${i};base64,${nm(c)}`}function xA(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 LC(){_f&&(_f==null||_f.then(n=>{n.canvas instanceof HTMLCanvasElement&&n.canvas.remove(),n.dumpEngine&&(n.dumpEngine.engine.dispose(),n.dumpEngine.renderer.dispose(),n.dumpEngine.wrapper.dispose())}),_f=null)}var _f,eg,gse,vse,Ese,DC=M(()=>{kt();kh();Ci();Nn();Ni();Pt();j_();Vt();_f=null;eg=class{static async EncodeImageAsync(e,t,i,r,s,a){let o=await _se(),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([Ms],eg,"EncodeImageAsync",null);gse=eg.EncodeImageAsync;vse={DumpData:xA,DumpDataAsync:tg,DumpFramebuffer:PC,Dispose:LC},Ese=()=>{_e.DumpData=xA,_e.DumpDataAsync=tg,_e.DumpFramebuffer=PC};Ese()});var Gr,gf=M(()=>{di();Ge();Vr();EA();to();yh();Pt();TC();sr.prototype.setDepthStencilTexture=function(n,e){this._engine.setDepthStencilTexture(this._samplers[n],this._uniforms[n],e,n)};Gr=class n extends ve{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=ve.TRILINEAR_SAMPLINGMODE,c=!0,f=!1,h=!1,d=5,u=!1,m,p,_=!1,g=!1){var R,I,C,y,L,O,V;let v,x=!0,T,E=!1;if(typeof r=="object"){let w=r;r=!!w.generateMipMaps,s=(R=w.doNotChangeAspectRatio)!=null?R:!0,a=(I=w.type)!=null?I:0,o=!!w.isCube,l=(C=w.samplingMode)!=null?C:ve.TRILINEAR_SAMPLINGMODE,c=(y=w.generateDepthBuffer)!=null?y:!0,f=!!w.generateStencilBuffer,h=!!w.isMulti,d=(L=w.format)!=null?L:5,u=!!w.delayAllocation,m=w.samples,p=w.creationFlags,_=!!w.noColorAttachment,g=!!w.useSRGBBuffer,v=w.colorAttachment,x=(O=w.gammaSpace)!=null?O:x,T=w.existingObjectRenderer,E=!!w.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=ve.PROJECTION_MODE,this.name=e,this.isRenderTarget=!0,this._initialSizeParameter=t,this._dontDisposeObjectRenderer=!!T,this._processSizeParameter(t),this._objectRenderer=T!=null?T:new Ra(e,i,{numPasses:o?6:this.getRenderLayers()||1,doNotChangeAspectRatio:s,enableClusteredLights:E}),this._onBeforeRenderingManagerRenderObserver=this._objectRenderer.onBeforeRenderingManagerRenderObservable.add(()=>{var N;let w=this._scene;if(!this._disableEngineStages)for(let U of w._beforeRenderTargetClearStage)U.action(this,this._currentFaceIndex,this._currentLayer);if(this.onClearObservable.hasObservers()?this.onClearObservable.notifyObservers(S):this.skipInitialClear||S.clear((N=this.clearColor)!=null?N:w.clearColor,!0,!0,!0),this._doNotChangeAspectRatio||w.updateTransformMatrix(!0),!this._disableEngineStages)for(let U of w._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 N,U,H,ee;if(S._debugPopGroup&&S._debugPopGroup(),!this._disableEngineStages)for(let q of this._scene._afterRenderTargetDrawStage)q.action(this,this._currentFaceIndex,this._currentLayer);let w=(U=(N=this._texture)==null?void 0:N.generateMipMaps)!=null?U:!1;if(this._texture&&(this._texture.generateMipMaps=!1),this._postProcessManager?this._postProcessManager._finalizeFrame(!1,(H=this._renderTarget)!=null?H:void 0,this._currentFaceIndex,this._postProcesses,this.ignoreCameraViewport):this._currentUseCameraPostProcess&&this._scene.postProcessManager._finalizeFrame(!1,(ee=this._renderTarget)!=null?ee:void 0,this._currentFaceIndex),!this._disableEngineStages)for(let q of this._scene._afterRenderTargetPostProcessStage)q.action(this,this._currentFaceIndex,this._currentLayer);this._texture&&(this._texture.generateMipMaps=w),this._doNotChangeAspectRatio||this._scene.updateTransformMatrix(!0),this._currentDumpForDebug&&(this._dumpTools?this._dumpTools.DumpFramebuffer(this.getRenderWidth(),this.getRenderHeight(),S):J.Error("dumpTools module is still being loaded. To speed up the process import dump tools directly in your project"))}),this._onFastPathRenderObserver=this._objectRenderer.onFastPathRenderObservable.add(()=>{this.onClearObservable.hasObservers()?this.onClearObservable.notifyObservers(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===ve.NEAREST_SAMPLINGMODE&&(this.wrapU=ve.CLAMP_ADDRESSMODE,this.wrapV=ve.CLAMP_ADDRESSMODE),u||(o?(this._renderTarget=i.getEngine().createRenderTargetCubeTexture(this.getRenderSize(),this._renderTargetOptions),this.coordinatesMode=ve.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 jl(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(()=>(DC(),JB)).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=Ra.REFRESHRATE_RENDER_ONCE;Gr.REFRESHRATE_RENDER_ONEVERYFRAME=Ra.REFRESHRATE_RENDER_ONEVERYFRAME;Gr.REFRESHRATE_RENDER_ONEVERYTWOFRAMES=Ra.REFRESHRATE_RENDER_ONEVERYTWOFRAMES;ve._CreateRenderTargetTexture=(n,e,t,i,r)=>new Gr(n,e,t,i)});var Ri,ql=M(()=>{kt();lo();di();Ge();yh();Vt();Rr();zi();Ur();to();kh();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,L,O,V,w,N,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 H=i;i=(E=H.uniforms)!=null?E:null,r=(S=H.samplers)!=null?S:null,v=(R=H.size)!=null?R:1,a=(I=H.camera)!=null?I:null,o=(C=H.samplingMode)!=null?C:1,l=H.engine,c=H.reusable,f=Array.isArray(H.defines)?H.defines.join(` -`):(y=H.defines)!=null?y:null,h=(L=H.textureType)!=null?L:0,d=(O=H.vertexUrl)!=null?O:"postprocess",u=H.indexParameters,m=(V=H.blockCompilation)!=null?V:!1,p=(w=H.textureFormat)!=null?w:5,_=(N=H.shaderLanguage)!=null?N:0,x=(U=H.uniformBuffers)!=null?U:null,g=H.extraInitializations,T=H.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 H=[];this._gatherImports(this._engine.isWebGPU&&!n.ForceGLSL,H),this._effectWrapper._webGPUReady=this._webGPUReady,this._effectWrapper._postConstructor(m,f,g,H)}}_gatherImports(e=!1,t){e&&this._webGPUReady?t.push(Promise.all([Promise.resolve().then(()=>(bC(),QB))])):t.push(Promise.all([Promise.resolve().then(()=>(xC(),qB))]))}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 tU={};tt(tU,{passPixelShaderWGSL:()=>Sse});var OC,eU,Sse,iU=M(()=>{G();OC="passPixelShader",eU=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_2d; +{gl_FragColor=texture2D(textureSampler,vUV);}`;A.ShadersStore[LC]||(A.ShadersStore[LC]=eU);bse={name:LC,shader:eU}});var tU={};tt(tU,{Dispose:()=>wC,DumpData:()=>CA,DumpDataAsync:()=>sg,DumpFramebuffer:()=>NC,DumpTools:()=>yse,EncodeImageAsync:()=>Cse});async function Ise(){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&&J.Warn("DumpData: OffscreenCanvas will be used for dumping data. This may result in lossy alpha values.");let{ThinEngine:e}=await Promise.resolve().then(()=>(es(),Q2));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&&wC()}),i.getCaps().parallelShaderCompile=void 0;let r=new MA(i),{passPixelShader:s}=await Promise.resolve().then(()=>(OC(),DC)),a=new Yr({engine:i,name:s.name,fragmentShader:s.shader,samplerNames:["textureSampler"]});return{canvas:n,dumpEngine:{engine:i,renderer:r,wrapper:a}}}async function Mse(){return gf||(gf=Ise()),await gf}async function NC(n,e,t,i,r="image/png",s,a){let o=await t.readPixels(0,0,n,e),l=new Uint8Array(o.buffer);CA(n,e,l,i,r,s,!0,void 0,a)}async function sg(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 ng.EncodeImageAsync(t,n,e,i,s,o);r!==void 0&&_e.DownloadBlob(l,r),l.type!==i&&J.Warn(`DumpData: The requested mimeType '${i}' is not supported. The result has mimeType '${l.type}' instead.`);let c=await l.arrayBuffer();return a?c:`data:${i};base64,${sm(c)}`}function CA(n,e,t,i,r="image/png",s,a=!1,o=!1,l){s===void 0&&!i&&(s=""),sg(n,e,t,r,s,a,o,l).then(c=>{i&&i(c)})}function wC(){gf&&(gf==null||gf.then(n=>{n.canvas instanceof HTMLCanvasElement&&n.canvas.remove(),n.dumpEngine&&(n.dumpEngine.engine.dispose(),n.dumpEngine.renderer.dispose(),n.dumpEngine.wrapper.dispose())}),gf=null)}var gf,ng,Cse,yse,Pse,FC=M(()=>{kt();zh();Ci();wn();Ni();Pt();$_();Vt();gf=null;ng=class{static async EncodeImageAsync(e,t,i,r,s,a){let o=await Mse(),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([Cs],ng,"EncodeImageAsync",null);Cse=ng.EncodeImageAsync;yse={DumpData:CA,DumpDataAsync:sg,DumpFramebuffer:NC,Dispose:wC},Pse=()=>{_e.DumpData=CA,_e.DumpDataAsync=sg,_e.DumpFramebuffer=NC};Pse()});var kr,vf=M(()=>{di();Ge();Gr();RA();io();Dh();Pt();bC();ar.prototype.setDepthStencilTexture=function(n,e){this._engine.setDepthStencilTexture(this._samplers[n],this._uniforms[n],e,n)};kr=class n extends ve{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=ve.TRILINEAR_SAMPLINGMODE,c=!0,f=!1,h=!1,d=5,u=!1,m,p,_=!1,g=!1){var R,I,C,y,L,O,V;let v,x=!0,T,E=!1;if(typeof r=="object"){let w=r;r=!!w.generateMipMaps,s=(R=w.doNotChangeAspectRatio)!=null?R:!0,a=(I=w.type)!=null?I:0,o=!!w.isCube,l=(C=w.samplingMode)!=null?C:ve.TRILINEAR_SAMPLINGMODE,c=(y=w.generateDepthBuffer)!=null?y:!0,f=!!w.generateStencilBuffer,h=!!w.isMulti,d=(L=w.format)!=null?L:5,u=!!w.delayAllocation,m=w.samples,p=w.creationFlags,_=!!w.noColorAttachment,g=!!w.useSRGBBuffer,v=w.colorAttachment,x=(O=w.gammaSpace)!=null?O:x,T=w.existingObjectRenderer,E=!!w.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=ve.PROJECTION_MODE,this.name=e,this.isRenderTarget=!0,this._initialSizeParameter=t,this._dontDisposeObjectRenderer=!!T,this._processSizeParameter(t),this._objectRenderer=T!=null?T:new Ra(e,i,{numPasses:o?6:this.getRenderLayers()||1,doNotChangeAspectRatio:s,enableClusteredLights:E}),this._onBeforeRenderingManagerRenderObserver=this._objectRenderer.onBeforeRenderingManagerRenderObservable.add(()=>{var N;let w=this._scene;if(!this._disableEngineStages)for(let U of w._beforeRenderTargetClearStage)U.action(this,this._currentFaceIndex,this._currentLayer);if(this.onClearObservable.hasObservers()?this.onClearObservable.notifyObservers(S):this.skipInitialClear||S.clear((N=this.clearColor)!=null?N:w.clearColor,!0,!0,!0),this._doNotChangeAspectRatio||w.updateTransformMatrix(!0),!this._disableEngineStages)for(let U of w._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 N,U,H,ee;if(S._debugPopGroup&&S._debugPopGroup(),!this._disableEngineStages)for(let q of this._scene._afterRenderTargetDrawStage)q.action(this,this._currentFaceIndex,this._currentLayer);let w=(U=(N=this._texture)==null?void 0:N.generateMipMaps)!=null?U:!1;if(this._texture&&(this._texture.generateMipMaps=!1),this._postProcessManager?this._postProcessManager._finalizeFrame(!1,(H=this._renderTarget)!=null?H:void 0,this._currentFaceIndex,this._postProcesses,this.ignoreCameraViewport):this._currentUseCameraPostProcess&&this._scene.postProcessManager._finalizeFrame(!1,(ee=this._renderTarget)!=null?ee:void 0,this._currentFaceIndex),!this._disableEngineStages)for(let q of this._scene._afterRenderTargetPostProcessStage)q.action(this,this._currentFaceIndex,this._currentLayer);this._texture&&(this._texture.generateMipMaps=w),this._doNotChangeAspectRatio||this._scene.updateTransformMatrix(!0),this._currentDumpForDebug&&(this._dumpTools?this._dumpTools.DumpFramebuffer(this.getRenderWidth(),this.getRenderHeight(),S):J.Error("dumpTools module is still being loaded. To speed up the process import dump tools directly in your project"))}),this._onFastPathRenderObserver=this._objectRenderer.onFastPathRenderObservable.add(()=>{this.onClearObservable.hasObservers()?this.onClearObservable.notifyObservers(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===ve.NEAREST_SAMPLINGMODE&&(this.wrapU=ve.CLAMP_ADDRESSMODE,this.wrapV=ve.CLAMP_ADDRESSMODE),u||(o?(this._renderTarget=i.getEngine().createRenderTargetCubeTexture(this.getRenderSize(),this._renderTargetOptions),this.coordinatesMode=ve.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 Zl(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(()=>(FC(),tU)).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}};kr.REFRESHRATE_RENDER_ONCE=Ra.REFRESHRATE_RENDER_ONCE;kr.REFRESHRATE_RENDER_ONEVERYFRAME=Ra.REFRESHRATE_RENDER_ONEVERYFRAME;kr.REFRESHRATE_RENDER_ONEVERYTWOFRAMES=Ra.REFRESHRATE_RENDER_ONEVERYTWOFRAMES;ve._CreateRenderTargetTexture=(n,e,t,i,r)=>new kr(n,e,t,i)});var Ri,Ql=M(()=>{kt();co();di();Ge();Dh();Vt();Rr();zi();Vr();io();zh();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)};ar.prototype.setTextureFromPostProcess=function(n,e){this._engine.setTextureFromPostProcess(this._samplers[n],e,n)};ar.prototype.setTextureFromPostProcessOutput=function(n,e){this._engine.setTextureFromPostProcessOutput(this._samplers[n],e,n)};Ri=class n{static get ForceGLSL(){return Yr.ForceGLSL}static set ForceGLSL(e){Yr.ForceGLSL=e}static RegisterShaderCodeProcessing(e,t){Yr.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,L,O,V,w,N,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 H=i;i=(E=H.uniforms)!=null?E:null,r=(S=H.samplers)!=null?S:null,v=(R=H.size)!=null?R:1,a=(I=H.camera)!=null?I:null,o=(C=H.samplingMode)!=null?C:1,l=H.engine,c=H.reusable,f=Array.isArray(H.defines)?H.defines.join(` +`):(y=H.defines)!=null?y:null,h=(L=H.textureType)!=null?L:0,d=(O=H.vertexUrl)!=null?O:"postprocess",u=H.indexParameters,m=(V=H.blockCompilation)!=null?V:!1,p=(w=H.textureFormat)!=null?w:5,_=(N=H.shaderLanguage)!=null?N:0,x=(U=H.uniformBuffers)!=null?U:null,g=H.extraInitializations,T=H.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 Yr({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 H=[];this._gatherImports(this._engine.isWebGPU&&!n.ForceGLSL,H),this._effectWrapper._webGPUReady=this._webGPUReady,this._effectWrapper._postConstructor(m,f,g,H)}}_gatherImports(e=!1,t){e&&this._webGPUReady?t.push(Promise.all([Promise.resolve().then(()=>(yC(),JB))])):t.push(Promise.all([Promise.resolve().then(()=>(MC(),QB))]))}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([nm()],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 rU={};tt(rU,{passPixelShaderWGSL:()=>Lse});var BC,iU,Lse,nU=M(()=>{G();BC="passPixelShader",iU=`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);}`;A.ShadersStoreWGSL[OC]||(A.ShadersStoreWGSL[OC]=eU);Sse={name:OC,shader:eU}});var nU={};tt(nU,{passCubePixelShaderWGSL:()=>Tse});var NC,rU,Tse,sU=M(()=>{G();NC="passCubePixelShader",rU=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_cube; +fn main(input: FragmentInputs)->FragmentOutputs {fragmentOutputs.color=textureSample(textureSampler,textureSamplerSampler,input.vUV);}`;A.ShadersStoreWGSL[BC]||(A.ShadersStoreWGSL[BC]=iU);Lse={name:BC,shader:iU}});var aU={};tt(aU,{passCubePixelShaderWGSL:()=>Dse});var UC,sU,Dse,oU=M(()=>{G();UC="passCubePixelShader",sU=`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 -}`;A.ShadersStoreWGSL[NC]||(A.ShadersStoreWGSL[NC]=rU);Tse={name:NC,shader:rU}});var oU={};tt(oU,{passCubePixelShader:()=>Ase});var wC,aU,Ase,lU=M(()=>{G();wC="passCubePixelShader",aU=`varying vec2 vUV;uniform samplerCube textureSampler; +}`;A.ShadersStoreWGSL[UC]||(A.ShadersStoreWGSL[UC]=sU);Dse={name:UC,shader:sU}});var cU={};tt(cU,{passCubePixelShader:()=>Ose});var VC,lU,Ose,fU=M(()=>{G();VC="passCubePixelShader",lU=`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 -}`;A.ShadersStore[wC]||(A.ShadersStore[wC]=aU);Ase={name:wC,shader:aU}});var Zl,ig,FC=M(()=>{kh();Ni();Zl=class n extends Xr{_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.all([Promise.resolve().then(()=>(iU(),tU))]))):t.push(Promise.all([Promise.resolve().then(()=>(yC(),CC))])),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)}};Zl.FragmentUrl="pass";ig=class n extends Xr{_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.all([Promise.resolve().then(()=>(sU(),nU))]))):t.push(Promise.all([Promise.resolve().then(()=>(lU(),oU))])),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 Wh,BC,UC=M(()=>{kt();ql();Ur();zi();Rr();FC();Vt();Wh=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,Zl.FragmentUrl,{effectWrapper:typeof t=="number"||!t.effectWrapper?new Zl(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",Wh);BC=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,Zl.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()],BC.prototype,"face",null);Me._RescalePostProcessFactory=n=>new Wh("rescale",1,null,2,n,!1,0)});function fU(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 Hh(n){RA||(RA=new Float32Array(1),cU=new Int32Array(RA.buffer)),RA[0]=n;let e=cU[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 Ql(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 RA,cU,VC=M(()=>{Vr();gf();UC();ql();Nn()});function kC(n){return n.split(" ").filter(e=>e!=="").map(e=>parseFloat(e))}function GC(n,e,t){for(;t.length!==e;){let i=kC(n.lines[n.index++]);t.push(...i)}}function xse(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=kC(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=kC(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]=xse(r,_,p)}return{width:c/2,height:1,data:h}}var dU=M(()=>{Nn()});var uU={};tt(uU,{_IESTextureLoader:()=>WC});var WC,mU=M(()=>{dU();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=hU(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 pU={};tt(pU,{_DDSTextureLoader:()=>HC});var HC,_U=M(()=>{X_();zC();HC=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 gU(){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 vU(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 EU=M(()=>{Ci()});var $l,vf,Rse,XC,zh,bse,Ise,Mse,IA,bA,MA,YC,SU=M(()=>{Ci();Vr();bs();EU();(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"})($l||($l={}));vf={JSModuleURL:`${_e._DefaultCdnUrl}/basisTranscoder/1/basis_transcoder.js`,WasmModuleURL:`${_e._DefaultCdnUrl}/basisTranscoder/1/basis_transcoder.wasm`},Rse=(n,e)=>{let t;switch(n){case $l.cTFETC1:t=36196;break;case $l.cTFBC1:t=33776;break;case $l.cTFBC4:t=33779;break;case $l.cTFASTC_4x4:t=37808;break;case $l.cTFETC2:t=37496;break;case $l.cTFBC7:t=36492;break}if(t===void 0)throw"The chosen Basis transcoder format is not currently supported";return t},XC=null,zh=null,bse=0,Ise=!1,Mse=async()=>(XC||(XC=new Promise((n,e)=>{zh?n(zh):_e.LoadFileAsync(_e.GetBabylonScriptURL(vf.WasmModuleURL)).then(t=>{if(typeof URL!="function")return e("Basis transcoder requires an environment with a URL constructor");let i=URL.createObjectURL(new Blob([`(${gU})()`],{type:"application/javascript"}));zh=new Worker(i),vU(zh,t,vf.JSModuleURL).then(n,e)}).catch(e)})),await XC),IA=async(n,e)=>{let t=n instanceof ArrayBuffer?new Uint8Array(n):n;return await new Promise((i,r)=>{Mse().then(()=>{let s=bse++,a=l=>{l.data.action==="transcode"&&l.data.id===s&&(zh.removeEventListener("message",a),l.data.success?i(l.data):r("Transcode is not supported on this device"))};zh.addEventListener("message",a);let o=new Uint8Array(t.byteLength);o.set(new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),zh.postMessage({action:"transcode",id:s,imageData:o,config:e,ignoreSupportedFormats:Ise},[o.buffer])},s=>{r(s)})})},bA=(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)},MA=(n,e)=>{let t=n.getEngine();for(let i=0;i{t._releaseTexture(s),bA(n,t)})}else n._invertVScale=!n.invertY,n.width=r.width+3&-4,n.height=r.height+3&-4,n.samplingMode=2,bA(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=YC.GetInternalFormatFromBasisFormat(e.format,t);n.format=s,bA(n,t);let a=e.fileInfo.images[i].levels;for(let o=0;oKC});var KC,AU=M(()=>{SU();Ci();KC=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}};IA(e,o).then(l=>{let c=l.fileInfo.images[0].levels.length>1&&t.generateMipMaps;MA(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}};IA(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,()=>{MA(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 rg,xU=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 CA(n){n.push("vCameraColorCurveNeutral","vCameraColorCurvePositive","vCameraColorCurveNegative")}var jC=M(()=>{});var nn,RU=M(()=>{kt();Vt();zt();Rr();jC();nn=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)}};nn.PrepareUniforms=CA;P([F()],nn.prototype,"_globalHue",void 0);P([F()],nn.prototype,"_globalDensity",void 0);P([F()],nn.prototype,"_globalSaturation",void 0);P([F()],nn.prototype,"_globalExposure",void 0);P([F()],nn.prototype,"_highlightsHue",void 0);P([F()],nn.prototype,"_highlightsDensity",void 0);P([F()],nn.prototype,"_highlightsSaturation",void 0);P([F()],nn.prototype,"_highlightsExposure",void 0);P([F()],nn.prototype,"_midtonesHue",void 0);P([F()],nn.prototype,"_midtonesDensity",void 0);P([F()],nn.prototype,"_midtonesSaturation",void 0);P([F()],nn.prototype,"_midtonesExposure",void 0);it._ColorCurvesParser=nn.Parse});function bU(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&&CA(n),e.DITHER&&n.push("ditherIntensity")}function IU(n,e){e.COLORGRADING&&n.push("txColorTransform")}var MU=M(()=>{jC()});var Wt,ng=M(()=>{kt();Vt();di();zt();RU();to();Rr();MU();zi();Wt=class n{constructor(){this.colorCurves=new nn,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&&nn.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}};Wt.TONEMAPPING_STANDARD=0;Wt.TONEMAPPING_ACES=1;Wt.TONEMAPPING_KHR_PBR_NEUTRAL=2;Wt.PrepareUniforms=bU;Wt.PrepareSamplers=IU;Wt._VIGNETTEMODE_MULTIPLY=0;Wt._VIGNETTEMODE_OPAQUE=1;P([xB()],Wt.prototype,"colorCurves",void 0);P([F()],Wt.prototype,"_colorCurvesEnabled",void 0);P([Ut("colorGradingTexture")],Wt.prototype,"_colorGradingTexture",void 0);P([F()],Wt.prototype,"_colorGradingEnabled",void 0);P([F()],Wt.prototype,"_colorGradingWithGreenDepth",void 0);P([F()],Wt.prototype,"_colorGradingBGR",void 0);P([F()],Wt.prototype,"_exposure",void 0);P([F()],Wt.prototype,"_toneMappingEnabled",void 0);P([F()],Wt.prototype,"_toneMappingType",void 0);P([F()],Wt.prototype,"_contrast",void 0);P([F()],Wt.prototype,"vignetteStretch",void 0);P([F()],Wt.prototype,"vignetteCenterX",void 0);P([F()],Wt.prototype,"vignetteCenterY",void 0);P([F()],Wt.prototype,"vignetteWeight",void 0);P([rm()],Wt.prototype,"vignetteColor",void 0);P([F()],Wt.prototype,"vignetteCameraFov",void 0);P([F()],Wt.prototype,"_vignetteBlendMode",void 0);P([F()],Wt.prototype,"_vignetteEnabled",void 0);P([F()],Wt.prototype,"_ditheringEnabled",void 0);P([F()],Wt.prototype,"_ditheringIntensity",void 0);P([F()],Wt.prototype,"_skipFinalColorClamp",void 0);P([F()],Wt.prototype,"_applyByPostProcess",void 0);P([F()],Wt.prototype,"_isEnabled",void 0);P([F()],Wt.prototype,"outputTextureWidth",void 0);P([F()],Wt.prototype,"outputTextureHeight",void 0);it._ImageProcessingConfigurationParser=Wt.Parse;Ft("BABYLON.ImageProcessingConfiguration",Wt)});var is,sg=M(()=>{Ge();ki();is=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(D.NormalKind))return null;let i=this.pickedMesh.getIndices();(i==null?void 0:i.length)===0&&(i=null);let r,s=$.Vector3[0],a=$.Vector3[1],o=$.Vector3[2];if(t){let c=this.pickedMesh.getVerticesData(D.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(D.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=$.Matrix[0];j.FromArrayToRef(d,u,m),b.TransformNormalToRef(f,m,f)}}let h=c.getWorldMatrix();c.nonUniformScaling&&($.Matrix[0].copyFrom(h),h=$.Matrix[0],h.setTranslationFromFloats(0,0,0),h.invert(),h.transposeToRef($.Matrix[1]),h=$.Matrix[1]),b.TransformNormalToRef(f,h,f)};if(e&&l(this.pickedMesh,r),this.ray){let c=$.Vector3[0].copyFrom(r);e||l(this.pickedMesh,c),b.Dot(c,this.ray.direction)>0&&r.negateInPlace()}return r.normalize(),r}getTextureCoordinates(e=D.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 sn,qC=M(()=>{sn=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 LU(n,e,t){return H_(e,Ia),ag(n,Ia,Ma),H_(Ma,t),t}function yA(n,e,t){if(!Ca.eyeAtCamera)return LU(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 ZC(n,e,t,i){return Oh(yA(n,e,i),t,i),i}function DU(n,e,t,i,r){for(let s=0;s{yh();Ge();hC();pf();ba=new j,Ia=new j,Ma=new j,Ca={getScene:()=>{},eyeAtCamera:!0};og=ur,QC=sr,OU=og.prototype._updateMatrixForUniform,NU=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;PA=class{constructor(e,t){this.type=e,this.event=t}},LA=class extends PA{constructor(e,t,i,r){super(e,t),this.ray=null,this.originalPickingInfo=null,this.skipOnPointerObservable=!1,this.localPosition=new Fe(i,r)}},ya=class extends PA{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 Jl,BU=M(()=>{Jl=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}};Jl.Triggers={}});var ho,cm,cg,DA=M(()=>{ho=class{};ho.KEYDOWN=1;ho.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,UU,VU,GU,kU,WU,Xh=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"})(UU||(UU={}));(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"})(VU||(VU={}));(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"})(GU||(GU={}));(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"})(kU||(kU={}));(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"})(WU||(WU={}))});var HU,uo,OA=M(()=>{(function(n){n[n.PointerMove=0]="PointerMove",n[n.PointerDown=1]="PointerDown",n[n.PointerUp=2]="PointerUp"})(HU||(HU={}));uo=class{};uo.DOM_DELTA_PIXEL=0;uo.DOM_DELTA_LINE=1;uo.DOM_DELTA_PAGE=2});var mo,JC=M(()=>{OA();Xh();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 NA,zU=M(()=>{JC();Xh();NA=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 XU,YU,wA,KU=M(()=>{Sa();Ci();JC();Xh();XU=255,YU=Object.keys(vt).length/2,wA=class{constructor(e,t,i,r){this._inputs=[],this._keyboardActive=!1,this._pointerActive=!1,this._usingSafari=_e.IsSafari(),this._usingMacOs=Bl()&&/(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=Bl()&&navigator.userAgent&&navigator.userAgent.indexOf("Firefox")!==-1,this._isUsingChromium=Bl()&&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,XU));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,XU));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,YU));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,jU=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 FA,qU=M(()=>{Xh();zU();KU();jU();FA=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 NA(i,r,s):this._deviceInputSystem=new wA(e,i,r,s)}dispose(){this._deviceInputSystem.dispose()}}});var BA,ZU=M(()=>{Xh();di();qU();BA=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 FA(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{Yh=class{};Yh._IsPickingAvailable=!1});var UA,wn,QU=M(()=>{fo();BU();sg();Ge();qC();DA();Xh();ZU();Ni();ey();UA=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}},wn=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 ya(a,t,e),this._setRayOnPointerInfo(e,t)):(o=new ya(a,t,null,this),this._movePointerInfo=o),i.onPointerObservable.hasObservers()&&i.onPointerObservable.notifyObservers(o,a)}_setRayOnPointerInfo(e,t){let i=this._scene;e&&Yh._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 LA(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 sn(e.pickedMesh,i.pointerX,i.pointerY,e.pickedMesh,t,e)),t.button){case 0:a.processTrigger(2,new sn(e.pickedMesh,i.pointerX,i.pointerY,e.pickedMesh,t,e));break;case 1:a.processTrigger(4,new sn(e.pickedMesh,i.pointerX,i.pointerY,e.pickedMesh,t,e));break;case 2:a.processTrigger(3,new sn(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,sn.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 ya(s,t,e),this._setRayOnPointerInfo(e,t)):r=new ya(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 UA;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 ya(a,t,e);this._setRayOnPointerInfo(e,t),r.onPointerObservable.notifyObservers(o,a)}let s=e.pickedMesh._getActionManagerForTrigger();if(s&&!i.ignore){s.processTrigger(7,sn.CreateNew(e.pickedMesh,t,e)),!i.hasSwiped&&i.singleClick&&s.processTrigger(1,sn.CreateNew(e.pickedMesh,t,e));let a=e.pickedMesh._getActionManagerForTrigger(6);i.doubleClick&&a&&a.processTrigger(6,sn.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,sn.CreateNew(this._pickedDownMesh,t))}if(!i.ignore){let s=new ya(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 ya(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 BA(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 ya(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 UA;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&&Jl&&(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&&!Jl.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&&Jl.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 is,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 is: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&&(Jl&&Jl.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 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,sn.CreateNewFromScene(s,o))},this._onKeyUp=o=>{let l=ho.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,sn.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 sn(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 sn(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]}};wn.DragMovementThreshold=10;wn.LongPressDelay=500;wn.DoubleClickDelay=300;wn.ExclusiveDoubleClickMode=!1});var rl,ty=M(()=>{Ul();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=gr.Now)}endMonitoring(e=!0){if(!n.Enabled)return;e&&this.fetchNewFrame();let t=gr.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=gr.Now;e-this._lastSecTime>1e3&&(this._lastSecAverage=this._lastSecAccumulated/this._lastSecValueCount,this._lastSecTime=e,this._lastSecAccumulated=0,this._lastSecValueCount=0)}};rl.Enabled=!0});var ec,VA=M(()=>{ec=class{static get UniqueId(){let e=this._UniqueIdCounter;return this._UniqueIdCounter++,e}};ec._UniqueIdCounter=1});var GA,$U=M(()=>{GA=class{constructor(){this.pointerDownFastCheck=!1,this.pointerUpFastCheck=!1,this.pointerMoveFastCheck=!1,this.skipPointerMovePicking=!1,this.skipPointerDownPicking=!1,this.skipPointerUpPicking=!1}}});var Cse,yse,JU,ei,ys=M(()=>{Ci();Ul();di();lo();xU();uf();Ge();ng();pf();sg();qC();EA();lg();TA();lm();Sa();Ni();hn();QU();ty();zt();aA();VA();Xl();J_();Qo();$U();Pt();zi();qo();Cse=new Mi,yse=new Mi;(function(n){n[n.BackwardCompatible=0]="BackwardCompatible",n[n.Intermediate=1]="Intermediate",n[n.Aggressive=2]="Aggressive"})(JU||(JU={}));ei=class n{static DefaultMaterialFactory(e){throw qe("StandardMaterial")}static CollisionCoordinatorFactory(){throw qe("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 wn.DragMovementThreshold}static set DragMovementThreshold(e){wn.DragMovementThreshold=e}static get LongPressDelay(){return wn.LongPressDelay}static set LongPressDelay(e){wn.LongPressDelay=e}static get DoubleClickDelay(){return wn.DoubleClickDelay}static set DoubleClickDelay(e){wn.DoubleClickDelay=e}static get ExclusiveDoubleClickMode(){return wn.ExclusiveDoubleClickMode}static set ExclusiveDoubleClickMode(e){wn.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=Cse.set(r.x,r.y,r.z,s?-1:1),l=o.subtractFromFloatsToRef(a.x,a.y,a.z,0,yse);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=nA(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 wn(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 GA,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)&&(FU(),this._floatingOriginScene=this,Ca.getScene=this._getFloatingOriginScene),this._uid=null,this._renderingManager=new xa(this),jl&&(this.postProcessManager=new jl(this)),dr()&&this.attachControl(),this._createUbo(),Wt&&(this._imageProcessingConfiguration=new Wt),this.setDefaultCandidateProviders(),i.useGeometryUniqueIdsMap&&(this._geometriesByUniqueId={}),this.useMaterialMeshMap=i.useMaterialMeshMap,this.useClonedMeshMap=i.useClonedMeshMap,(!t||!t.virtual)&&e.onNewSceneAddedObservable.notifyObservers(this)}getClassName(){return"Scene"}_getDefaultMeshCandidates(){return this._defaultMeshCandidates.data=this.meshes,this._defaultMeshCandidates.length=this.meshes.length,this._defaultMeshCandidates}_getDefaultSubMeshCandidates(e){return this._defaultSubMeshCandidates.data=e.subMeshes,this._defaultSubMeshCandidates.length=e.subMeshes.length,this._defaultSubMeshCandidates}setDefaultCandidateProviders(){this.getActiveMeshCandidates=()=>this._getDefaultMeshCandidates(),this.getActiveSubMeshCandidates=e=>this._getDefaultSubMeshCandidates(e),this.getIntersectingSubMeshCandidates=(e,t)=>this._getDefaultSubMeshCandidates(e),this.getCollidingSubMeshCandidates=(e,t)=>this._getDefaultSubMeshCandidates(e)}get meshUnderPointer(){return this._inputManager.meshUnderPointer}get pointerX(){return this._inputManager.pointerX}set pointerX(e){this._inputManager.pointerX=e}get pointerY(){return this._inputManager.pointerY}set pointerY(e){this._inputManager.pointerY=e}getCachedMaterial(){return this._cachedMaterial}getCachedEffect(){return this._cachedEffect}getCachedVisibility(){return this._cachedVisibility}isCachedMaterialInvalid(e,t,i=1){return this._cachedEffect!==t||this._cachedMaterial!==e||this._cachedVisibility!==i}getEngine(){return this._engine}getTotalVertices(){return this._totalVertices.current}get totalVerticesPerfCounter(){return this._totalVertices}getActiveIndices(){return this._activeIndices.current}get totalActiveIndicesPerfCounter(){return this._activeIndices}getActiveParticles(){return this._activeParticles.current}get activeParticlesPerfCounter(){return this._activeParticles}getActiveBones(){return this._activeBones.current}get activeBonesPerfCounter(){return this._activeBones}getActiveMeshes(){return this._activeMeshes}getAnimationRatio(){return this._animationRatio!==void 0?this._animationRatio:1}getRenderId(){return this._renderId}getFrameId(){return this._frameId}incrementRenderId(){this._renderId++}_createUbo(){this.setSceneUniformBuffer(this.createSceneUniformBuffer())}simulatePointerMove(e,t){return this._inputManager.simulatePointerMove(e,t),this}simulatePointerDown(e,t){return this._inputManager.simulatePointerDown(e,t),this}simulatePointerUp(e,t,i){return this._inputManager.simulatePointerUp(e,t,i),this}isPointerCaptured(e=0){return this._inputManager.isPointerCaptured(e)}attachControl(e=!0,t=!0,i=!0){this._inputManager.attachControl(e,t,i)}detachControl(){this._inputManager.detachControl()}isReady(e=!0){var a,o,l;if(this._isDisposed)return!1;let t,i=this.getEngine(),r=i.currentRenderPassId;i.currentRenderPassId=(o=(a=this.activeCamera)==null?void 0:a.renderPassId)!=null?o:r;let s=!0;for(this._pendingData.length>0&&(s=!1),(l=this.prePassRenderer)==null||l.update(),this.useOrderIndependentTransparency&&this.depthPeelingRenderer&&s&&(s=this.depthPeelingRenderer.isReady()),e&&(this._processedMaterials.reset(),this._materialsRenderTargets.reset()),t=0;t0;for(let d of this._isReadyForMeshStage)d.action(c,f)||(s=!1);if(!e)continue;let h=c.material||this.defaultMaterial;if(h)if(h._storeEffectOnSubMeshes)for(let d of c.subMeshes){let u=d.getMaterial();u&&u.hasRenderTargetTextures&&u.getRenderTargetTextures!=null&&this._processedMaterials.indexOf(u)===-1&&(this._processedMaterials.push(u),this._materialsRenderTargets.concatWithNoDuplicate(u.getRenderTargetTextures()))}else h.hasRenderTargetTextures&&h.getRenderTargetTextures!=null&&this._processedMaterials.indexOf(h)===-1&&(this._processedMaterials.push(h),this._materialsRenderTargets.concatWithNoDuplicate(h.getRenderTargetTextures()))}if(e){for(t=0;t0)for(let c of this.activeCameras)c.isReady(!0)||(s=!1);else this.activeCamera&&(this.activeCamera.isReady(!0)||(s=!1));for(let c of this.particleSystems)c.isReady()||(s=!1);if(this.proceduralTexturesEnabled)for(let c of this.proceduralTextures)c.isReady()||(s=!1);if(this.layers)for(let c of this.layers)c.isReady()||(s=!1);if(this.effectLayers)for(let c of this.effectLayers)c.isLayerReady()||(s=!1);for(let c of this._isReadyChecks)c.isReady()||(s=!1);return i.areAllEffectsReady()||(s=!1),i.currentRenderPassId=r,s}resetCachedMaterial(){this._cachedMaterial=null,this._cachedEffect=null,this._cachedVisibility=null}registerBeforeRender(e){this.onBeforeRenderObservable.add(e)}unregisterBeforeRender(e){this.onBeforeRenderObservable.removeCallback(e)}registerAfterRender(e){this.onAfterRenderObservable.add(e)}unregisterAfterRender(e){this.onAfterRenderObservable.removeCallback(e)}_executeOnceBeforeRender(e){let t=()=>{e(),setTimeout(()=>{this.unregisterBeforeRender(t)})};this.registerBeforeRender(t)}executeOnceBeforeRender(e,t){t!==void 0?setTimeout(()=>{this._executeOnceBeforeRender(e)},t):this._executeOnceBeforeRender(e)}addPendingData(e){this._pendingData.push(e)}removePendingData(e){let t=this.isLoading,i=this._pendingData.indexOf(e);i!==-1&&this._pendingData.splice(i,1),t&&!this.isLoading&&this.onDataLoadedObservable.notifyObservers(this)}getWaitingItemsCount(){return this._pendingData.length}get isLoading(){return this._pendingData.length>0}addIsReadyCheck(e){this._isReadyChecks.indexOf(e)===-1&&this._isReadyChecks.push(e)}removeIsReadyCheck(e){let t=this._isReadyChecks.indexOf(e);t!==-1&&this._isReadyChecks.splice(t,1)}executeWhenReady(e,t=!1){this.onReadyObservable.addOnce(e),this._executeWhenReadyTimeoutId===null&&this._checkIsReady(t)}async whenReadyAsync(e=!1){return await new Promise(t=>{this.executeWhenReady(()=>{t()},e)})}_clearReadynessChecksData(){this._timeoutChecksStartTime=0,this.onReadyTimeoutObservable.clear(),this.onReadyObservable.clear(),this._executeWhenReadyTimeoutId=null}_checkIsReady(e=!1){if(this._registerTransientComponents(),this._timeoutChecksStartTime===0)this._timeoutChecksStartTime=gr.Now;else if(this.onReadyTimeoutDuration>0&&gr.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=gr.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?lf.GetPlanesToRef(this._transformMatrix,this._frustumPlanes):this._frustumPlanes=lf.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 ec.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):(J.Error(c),o&&J.Error(o))}else{let c="Scene: An unexpected error occurred while trying to freeze active meshes.";i?i(c):(J.Error(c),o&&(J.Error(o),o.stack&&J.Error(o.stack)))}}),this}return this.executeWhenReady(()=>{if(!this.activeCamera){i&&i("No active camera found");return}if(this._frustumPlanes||this.updateTransformMatrix(),this._evaluateActiveMeshes(),this._activeMeshesFrozen=!0,this._activeMeshesFrozenButKeepClipping=s,this._skipEvaluateActiveMeshesCompletely=e,r)for(let a=0;ae.dispose())}_evaluateActiveMeshes(){var i;if(this._engine.snapshotRendering&&this._engine.snapshotRenderingMode===1){this._activeMeshes.length>0&&((i=this.activeCamera)==null||i._activeMeshes.reset(),this._activeMeshes.reset(),this._renderingManager.reset(),this._processedMaterials.reset(),this._activeParticleSystems.reset(),this._activeSkeletons.reset(),this._softwareSkinnedMeshes.reset());return}if(this._activeMeshesFrozen&&this._activeMeshes.length){if(!this._skipEvaluateActiveMeshesCompletely){let r=this._activeMeshes.length;for(let s=0;s0&&(s.layerMask&this.activeCamera.layerMask)!==0&&(this._skipFrustumClipping||s.alwaysSelectAsActiveMesh||s.isInFrustum(this._frustumPlanes)))){this._activeMeshes.push(s),this.activeCamera._activeMeshes.push(s),o!==s&&o._activate(this._renderId,!1);for(let l of this._preActiveMeshStage)l.action(s);s._activate(this._renderId,!1)&&(s.isAnInstance?s._internalAbstractMeshDataInfo._actAsRegularMesh&&(o=s):o._internalAbstractMeshDataInfo._onlyForInstances=!1,o._internalAbstractMeshDataInfo._isActive=!0,this._activeMesh(s,o)),s._postActivate()}}if(this.onAfterActiveMeshesEvaluationObservable.notifyObservers(this),this.particlesEnabled){this.onBeforeParticlesRenderingObservable.notifyObservers(this);for(let r=0;r0){let r=this.getActiveSubMeshCandidates(t),s=r.length;i=i||s===1;for(let a=0;a0&&this._renderTargets.concatWithNoDuplicate(e.customRenderTargets),t&&t.customRenderTargets&&t.customRenderTargets.length>0&&this._renderTargets.concatWithNoDuplicate(t.customRenderTargets),this.environmentTexture&&this.environmentTexture.isRenderTarget&&this._renderTargets.pushNoDuplicate(this.environmentTexture);for(let d of this._gatherActiveCameraRenderTargetsStage)d.action(this._renderTargets);let s=!1;if(this.renderTargetsEnabled){this._intermediateRendering=!0;let d;if(this._renderTargets.length>0){_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(sn.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&&wU(),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 qe("Ray")}createPickingRayToRef(e,t,i,r,s,a=!1,o=!1){throw qe("Ray")}createPickingRayInCameraSpace(e,t,i){throw qe("Ray")}createPickingRayInCameraSpaceToRef(e,t,i,r){throw qe("Ray")}pick(e,t,i,r,s,a){let o=qe("Ray",!0);return o&&J.Warn(o),new is}pickWithBoundingInfo(e,t,i,r,s){let a=qe("Ray",!0);return a&&J.Warn(a),new is}pickWithRay(e,t,i,r){throw qe("Ray")}multiPick(e,t,i,r,s){throw qe("Ray")}multiPickWithRay(e,t,i){throw qe("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=_A(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=Vh(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 qe("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)}};ei.FOGMODE_NONE=0;ei.FOGMODE_EXP=1;ei.FOGMODE_EXP2=2;ei.FOGMODE_LINEAR=3;ei.MinDeltaTime=1;ei.MaxDeltaTime=1e3;ei._OriginalDefaultMaterialFactory=ei.DefaultMaterialFactory;Ft("BABYLON.Scene",ei)});var eV,Pse,Pa=M(()=>{G();eV="helperFunctions",Pse=`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[VC]||(A.ShadersStore[VC]=lU);Ose={name:VC,shader:lU}});var $l,ag,GC=M(()=>{zh();Ni();$l=class n extends Yr{_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.all([Promise.resolve().then(()=>(nU(),rU))]))):t.push(Promise.all([Promise.resolve().then(()=>(OC(),DC))])),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)}};$l.FragmentUrl="pass";ag=class n extends Yr{_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.all([Promise.resolve().then(()=>(oU(),aU))]))):t.push(Promise.all([Promise.resolve().then(()=>(fU(),cU))])),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}}};ag.FragmentUrl="passCube"});var Xh,kC,WC=M(()=>{kt();Ql();Vr();zi();Rr();GC();Vt();Xh=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,$l.FragmentUrl,{effectWrapper:typeof t=="number"||!t.effectWrapper?new $l(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",Xh);kC=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,$l.FragmentUrl,{effectWrapper:typeof t=="number"||!t.effectWrapper?new ag(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()],kC.prototype,"face",null);Me._RescalePostProcessFactory=n=>new Xh("rescale",1,null,2,n,!1,0)});function dU(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 Yh(n){yA||(yA=new Float32Array(1),hU=new Int32Array(yA.buffer)),yA[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 Jl(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 yA,hU,HC=M(()=>{Gr();vf();WC();Ql();wn()});function XC(n){return n.split(" ").filter(e=>e!=="").map(e=>parseFloat(e))}function zC(n,e,t){for(;t.length!==e;){let i=XC(n.lines[n.index++]);t.push(...i)}}function Nse(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=XC(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=XC(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]=Nse(r,_,p)}return{width:c/2,height:1,data:h}}var mU=M(()=>{wn()});var pU={};tt(pU,{_IESTextureLoader:()=>YC});var YC,_U=M(()=>{mU();YC=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=uU(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 gU={};tt(gU,{_DDSTextureLoader:()=>KC});var KC,vU=M(()=>{q_();jC();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),fo.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=fo.GetDDSInfo(c),t.width=a.width,t.height=a.height,i&&(a.sphericalPolynomial=new tl),o=(a.isRGB||a.isLuminance||a.mipmapCount>1)&&t.generateMipMaps,s._unpackFlipY(a.isCompressed),fo.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=fo.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,()=>{fo.UploadDDSLevels(t.getEngine(),t,e,r,s,1)})}}});function EU(){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 SU(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 TU=M(()=>{Ci()});var ec,Ef,wse,qC,Kh,Fse,Bse,Use,LA,PA,DA,ZC,AU=M(()=>{Ci();Gr();Is();TU();(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"})(ec||(ec={}));Ef={JSModuleURL:`${_e._DefaultCdnUrl}/basisTranscoder/1/basis_transcoder.js`,WasmModuleURL:`${_e._DefaultCdnUrl}/basisTranscoder/1/basis_transcoder.wasm`},wse=(n,e)=>{let t;switch(n){case ec.cTFETC1:t=36196;break;case ec.cTFBC1:t=33776;break;case ec.cTFBC4:t=33779;break;case ec.cTFASTC_4x4:t=37808;break;case ec.cTFETC2:t=37496;break;case ec.cTFBC7:t=36492;break}if(t===void 0)throw"The chosen Basis transcoder format is not currently supported";return t},qC=null,Kh=null,Fse=0,Bse=!1,Use=async()=>(qC||(qC=new Promise((n,e)=>{Kh?n(Kh):_e.LoadFileAsync(_e.GetBabylonScriptURL(Ef.WasmModuleURL)).then(t=>{if(typeof URL!="function")return e("Basis transcoder requires an environment with a URL constructor");let i=URL.createObjectURL(new Blob([`(${EU})()`],{type:"application/javascript"}));Kh=new Worker(i),SU(Kh,t,Ef.JSModuleURL).then(n,e)}).catch(e)})),await qC),LA=async(n,e)=>{let t=n instanceof ArrayBuffer?new Uint8Array(n):n;return await new Promise((i,r)=>{Use().then(()=>{let s=Fse++,a=l=>{l.data.action==="transcode"&&l.data.id===s&&(Kh.removeEventListener("message",a),l.data.success?i(l.data):r("Transcode is not supported on this device"))};Kh.addEventListener("message",a);let o=new Uint8Array(t.byteLength);o.set(new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),Kh.postMessage({action:"transcode",id:s,imageData:o,config:e,ignoreSupportedFormats:Bse},[o.buffer])},s=>{r(s)})})},PA=(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)},DA=(n,e)=>{let t=n.getEngine();for(let i=0;i{t._releaseTexture(s),PA(n,t)})}else n._invertVScale=!n.invertY,n.width=r.width+3&-4,n.height=r.height+3&-4,n.samplingMode=2,PA(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,PA(n,t);let a=e.fileInfo.images[i].levels;for(let o=0;oQC});var QC,RU=M(()=>{AU();Ci();QC=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}};LA(e,o).then(l=>{let c=l.fileInfo.images[0].levels.length>1&&t.generateMipMaps;DA(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}};LA(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,()=>{DA(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 og,bU=M(()=>{og=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 OA(n){n.push("vCameraColorCurveNeutral","vCameraColorCurvePositive","vCameraColorCurveNegative")}var $C=M(()=>{});var nn,IU=M(()=>{kt();Vt();zt();Rr();$C();nn=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)}};nn.PrepareUniforms=OA;P([F()],nn.prototype,"_globalHue",void 0);P([F()],nn.prototype,"_globalDensity",void 0);P([F()],nn.prototype,"_globalSaturation",void 0);P([F()],nn.prototype,"_globalExposure",void 0);P([F()],nn.prototype,"_highlightsHue",void 0);P([F()],nn.prototype,"_highlightsDensity",void 0);P([F()],nn.prototype,"_highlightsSaturation",void 0);P([F()],nn.prototype,"_highlightsExposure",void 0);P([F()],nn.prototype,"_midtonesHue",void 0);P([F()],nn.prototype,"_midtonesDensity",void 0);P([F()],nn.prototype,"_midtonesSaturation",void 0);P([F()],nn.prototype,"_midtonesExposure",void 0);it._ColorCurvesParser=nn.Parse});function MU(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&&OA(n),e.DITHER&&n.push("ditherIntensity")}function CU(n,e){e.COLORGRADING&&n.push("txColorTransform")}var yU=M(()=>{$C()});var Wt,lg=M(()=>{kt();Vt();di();zt();IU();io();Rr();yU();zi();Wt=class n{constructor(){this.colorCurves=new nn,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&&nn.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=X_(o,l,this.vignetteStretch),a=X_(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}};Wt.TONEMAPPING_STANDARD=0;Wt.TONEMAPPING_ACES=1;Wt.TONEMAPPING_KHR_PBR_NEUTRAL=2;Wt.PrepareUniforms=MU;Wt.PrepareSamplers=CU;Wt._VIGNETTEMODE_MULTIPLY=0;Wt._VIGNETTEMODE_OPAQUE=1;P([bB()],Wt.prototype,"colorCurves",void 0);P([F()],Wt.prototype,"_colorCurvesEnabled",void 0);P([Ut("colorGradingTexture")],Wt.prototype,"_colorGradingTexture",void 0);P([F()],Wt.prototype,"_colorGradingEnabled",void 0);P([F()],Wt.prototype,"_colorGradingWithGreenDepth",void 0);P([F()],Wt.prototype,"_colorGradingBGR",void 0);P([F()],Wt.prototype,"_exposure",void 0);P([F()],Wt.prototype,"_toneMappingEnabled",void 0);P([F()],Wt.prototype,"_toneMappingType",void 0);P([F()],Wt.prototype,"_contrast",void 0);P([F()],Wt.prototype,"vignetteStretch",void 0);P([F()],Wt.prototype,"vignetteCenterX",void 0);P([F()],Wt.prototype,"vignetteCenterY",void 0);P([F()],Wt.prototype,"vignetteWeight",void 0);P([nm()],Wt.prototype,"vignetteColor",void 0);P([F()],Wt.prototype,"vignetteCameraFov",void 0);P([F()],Wt.prototype,"_vignetteBlendMode",void 0);P([F()],Wt.prototype,"_vignetteEnabled",void 0);P([F()],Wt.prototype,"_ditheringEnabled",void 0);P([F()],Wt.prototype,"_ditheringIntensity",void 0);P([F()],Wt.prototype,"_skipFinalColorClamp",void 0);P([F()],Wt.prototype,"_applyByPostProcess",void 0);P([F()],Wt.prototype,"_isEnabled",void 0);P([F()],Wt.prototype,"outputTextureWidth",void 0);P([F()],Wt.prototype,"outputTextureHeight",void 0);it._ImageProcessingConfigurationParser=Wt.Parse;Ft("BABYLON.ImageProcessingConfiguration",Wt)});var rs,cg=M(()=>{Ge();ki();rs=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(D.NormalKind))return null;let i=this.pickedMesh.getIndices();(i==null?void 0:i.length)===0&&(i=null);let r,s=$.Vector3[0],a=$.Vector3[1],o=$.Vector3[2];if(t){let c=this.pickedMesh.getVerticesData(D.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(D.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=$.Matrix[0];j.FromArrayToRef(d,u,m),b.TransformNormalToRef(f,m,f)}}let h=c.getWorldMatrix();c.nonUniformScaling&&($.Matrix[0].copyFrom(h),h=$.Matrix[0],h.setTranslationFromFloats(0,0,0),h.invert(),h.transposeToRef($.Matrix[1]),h=$.Matrix[1]),b.TransformNormalToRef(f,h,f)};if(e&&l(this.pickedMesh,r),this.ray){let c=$.Vector3[0].copyFrom(r);e||l(this.pickedMesh,c),b.Dot(c,this.ray.direction)>0&&r.negateInPlace()}return r.normalize(),r}getTextureCoordinates(e=D.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 sn,JC=M(()=>{sn=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 fg(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 OU(n,e,t){return K_(e,Ia),fg(n,Ia,Ma),K_(Ma,t),t}function NA(n,e,t){if(!Ca.eyeAtCamera)return OU(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 ey(n,e,t,i){return Fh(NA(n,e,i),t,i),i}function NU(n,e,t,i,r){for(let s=0;s{Dh();Ge();pC();_f();ba=new j,Ia=new j,Ma=new j,Ca={getScene:()=>{},eyeAtCamera:!0};hg=mr,ty=ar,wU=hg.prototype._updateMatrixForUniform,FU=ar.prototype.setMatrix});var et,lr,cm=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;lr=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;wA=class{constructor(e,t){this.type=e,this.event=t}},FA=class extends wA{constructor(e,t,i,r){super(e,t),this.ray=null,this.originalPickingInfo=null,this.skipOnPointerObservable=!1,this.localPosition=new Fe(i,r)}},ya=class extends wA{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 tc,VU=M(()=>{tc=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}};tc.Triggers={}});var uo,fm,ug,BA=M(()=>{uo=class{};uo.KEYDOWN=1;uo.KEYUP=2;fm=class{constructor(e,t){this.type=e,this.event=t}},ug=class extends fm{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,GU,kU,WU,HU,zU,jh=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"})(GU||(GU={}));(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"})(kU||(kU={}));(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"})(WU||(WU={}));(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"})(HU||(HU={}));(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"})(zU||(zU={}))});var XU,mo,UA=M(()=>{(function(n){n[n.PointerMove=0]="PointerMove",n[n.PointerDown=1]="PointerDown",n[n.PointerUp=2]="PointerUp"})(XU||(XU={}));mo=class{};mo.DOM_DELTA_PIXEL=0;mo.DOM_DELTA_LINE=1;mo.DOM_DELTA_PAGE=2});var po,ry=M(()=>{UA();jh();po=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=mo.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 VA,YU=M(()=>{ry();jh();VA=class{constructor(e,t,i){this._nativeInput=_native.DeviceInputSystem?new _native.DeviceInputSystem(e,t,(r,s,a,o)=>{let l=po.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 KU,jU,GA,qU=M(()=>{Sa();Ci();ry();jh();KU=255,jU=Object.keys(vt).length/2,GA=class{constructor(e,t,i,r){this._inputs=[],this._keyboardActive=!1,this._pointerActive=!1,this._usingSafari=_e.IsSafari(),this._usingMacOs=Vl()&&/(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=Vl()&&navigator.userAgent&&navigator.userAgent.indexOf("Firefox")!==-1,this._isUsingChromium=Vl()&&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,KU));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,KU));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=po.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=po.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=po.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=po.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,jU));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 mg,ZU=M(()=>{di();mg=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 kA,QU=M(()=>{jh();YU();qU();ZU();kA=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 mg(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 VA(i,r,s):this._deviceInputSystem=new GA(e,i,r,s)}dispose(){this._deviceInputSystem.dispose()}}});var WA,$U=M(()=>{jh();di();QU();WA=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 kA(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{qh=class{};qh._IsPickingAvailable=!1});var HA,Fn,JU=M(()=>{ho();VU();cg();Ge();JC();BA();jh();$U();Ni();ny();HA=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}},Fn=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 ya(a,t,e),this._setRayOnPointerInfo(e,t)):(o=new ya(a,t,null,this),this._movePointerInfo=o),i.onPointerObservable.hasObservers()&&i.onPointerObservable.notifyObservers(o,a)}_setRayOnPointerInfo(e,t){let i=this._scene;e&&qh._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 FA(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 sn(e.pickedMesh,i.pointerX,i.pointerY,e.pickedMesh,t,e)),t.button){case 0:a.processTrigger(2,new sn(e.pickedMesh,i.pointerX,i.pointerY,e.pickedMesh,t,e));break;case 1:a.processTrigger(4,new sn(e.pickedMesh,i.pointerX,i.pointerY,e.pickedMesh,t,e));break;case 2:a.processTrigger(3,new sn(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,sn.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 ya(s,t,e),this._setRayOnPointerInfo(e,t)):r=new ya(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 HA;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 ya(a,t,e);this._setRayOnPointerInfo(e,t),r.onPointerObservable.notifyObservers(o,a)}let s=e.pickedMesh._getActionManagerForTrigger();if(s&&!i.ignore){s.processTrigger(7,sn.CreateNew(e.pickedMesh,t,e)),!i.hasSwiped&&i.singleClick&&s.processTrigger(1,sn.CreateNew(e.pickedMesh,t,e));let a=e.pickedMesh._getActionManagerForTrigger(6);i.doubleClick&&a&&a.processTrigger(6,sn.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,sn.CreateNew(this._pickedDownMesh,t))}if(!i.ignore){let s=new ya(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 ya(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 WA(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 ya(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 HA;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&&tc&&(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&&!tc.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&&tc.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 rs,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 rs: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&&(tc&&tc.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=uo.KEYDOWN;if(s.onPreKeyboardObservable.hasObservers()){let c=new ug(l,o);if(s.onPreKeyboardObservable.notifyObservers(c,l),c.skipOnKeyboardObservable)return}if(s.onKeyboardObservable.hasObservers()){let c=new fm(l,o);s.onKeyboardObservable.notifyObservers(c,l)}s.actionManager&&s.actionManager.processTrigger(14,sn.CreateNewFromScene(s,o))},this._onKeyUp=o=>{let l=uo.KEYUP;if(s.onPreKeyboardObservable.hasObservers()){let c=new ug(l,o);if(s.onPreKeyboardObservable.notifyObservers(c,l),c.skipOnKeyboardObservable)return}if(s.onKeyboardObservable.hasObservers()){let c=new fm(l,o);s.onKeyboardObservable.notifyObservers(c,l)}s.actionManager&&s.actionManager.processTrigger(15,sn.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 sn(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 sn(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]}};Fn.DragMovementThreshold=10;Fn.LongPressDelay=500;Fn.DoubleClickDelay=300;Fn.ExclusiveDoubleClickMode=!1});var sl,sy=M(()=>{Gl();sl=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=vr.Now)}endMonitoring(e=!0){if(!n.Enabled)return;e&&this.fetchNewFrame();let t=vr.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=vr.Now;e-this._lastSecTime>1e3&&(this._lastSecAverage=this._lastSecAccumulated/this._lastSecValueCount,this._lastSecTime=e,this._lastSecAccumulated=0,this._lastSecValueCount=0)}};sl.Enabled=!0});var ic,zA=M(()=>{ic=class{static get UniqueId(){let e=this._UniqueIdCounter;return this._UniqueIdCounter++,e}};ic._UniqueIdCounter=1});var XA,eV=M(()=>{XA=class{constructor(){this.pointerDownFastCheck=!1,this.pointerUpFastCheck=!1,this.pointerMoveFastCheck=!1,this.skipPointerMovePicking=!1,this.skipPointerDownPicking=!1,this.skipPointerUpPicking=!1}}});var Vse,Gse,tV,Jt,Ps=M(()=>{Ci();Gl();di();co();bU();mf();Ge();lg();_f();cg();JC();RA();dg();IA();cm();Sa();Ni();hn();JU();sy();zt();hA();zA();Kl();rg();Jo();eV();Pt();zi();Qo();Vse=new Mi,Gse=new Mi;(function(n){n[n.BackwardCompatible=0]="BackwardCompatible",n[n.Intermediate=1]="Intermediate",n[n.Aggressive=2]="Aggressive"})(tV||(tV={}));Jt=class n{static DefaultMaterialFactory(e){throw qe("StandardMaterial")}static CollisionCoordinatorFactory(){throw qe("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 Fn.DragMovementThreshold}static set DragMovementThreshold(e){Fn.DragMovementThreshold=e}static get LongPressDelay(){return Fn.LongPressDelay}static set LongPressDelay(e){Fn.LongPressDelay=e}static get DoubleClickDelay(){return Fn.DoubleClickDelay}static set DoubleClickDelay(e){Fn.DoubleClickDelay=e}static get ExclusiveDoubleClickMode(){return Fn.ExclusiveDoubleClickMode}static set ExclusiveDoubleClickMode(e){Fn.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=Vse.set(r.x,r.y,r.z,s?-1:1),l=o.subtractFromFloatsToRef(a.x,a.y,a.z,0,Gse);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=cA(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 Fn(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 lo(256),this._pointerPickingConfiguration=new XA,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 lo(256),this.proceduralTexturesEnabled=!0,this._totalVertices=new sl,this._activeIndices=new sl,this._activeParticles=new sl,this._activeBones=new sl,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 lo(256),this._materialsRenderTargets=new lo(256),this._activeParticleSystems=new Ui(256),this._activeSkeletons=new lo(32),this._softwareSkinnedMeshes=new lo(32),this._activeAnimatables=new Array,this._transformMatrix=j.Zero(),this.requireLightSorting=!1,this._components=[],this._serializableComponents=[],this._transientComponents=[],this._beforeCameraUpdateStage=lr.Create(),this._beforeClearStage=lr.Create(),this._beforeRenderTargetClearStage=lr.Create(),this._gatherRenderTargetsStage=lr.Create(),this._gatherActiveCameraRenderTargetsStage=lr.Create(),this._isReadyForMeshStage=lr.Create(),this._beforeEvaluateActiveMeshStage=lr.Create(),this._evaluateSubMeshStage=lr.Create(),this._preActiveMeshStage=lr.Create(),this._cameraDrawRenderTargetStage=lr.Create(),this._beforeCameraDrawStage=lr.Create(),this._beforeRenderTargetDrawStage=lr.Create(),this._beforeRenderingGroupDrawStage=lr.Create(),this._beforeRenderingMeshStage=lr.Create(),this._afterRenderingMeshStage=lr.Create(),this._afterRenderingGroupDrawStage=lr.Create(),this._afterCameraDrawStage=lr.Create(),this._afterCameraPostProcessStage=lr.Create(),this._afterRenderTargetDrawStage=lr.Create(),this._afterRenderTargetPostProcessStage=lr.Create(),this._afterRenderStage=lr.Create(),this._pointerMoveStage=lr.Create(),this._pointerDownStage=lr.Create(),this._pointerUpStage=lr.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)&&(UU(),this._floatingOriginScene=this,Ca.getScene=this._getFloatingOriginScene),this._uid=null,this._renderingManager=new xa(this),Zl&&(this.postProcessManager=new Zl(this)),ur()&&this.attachControl(),this._createUbo(),Wt&&(this._imageProcessingConfiguration=new Wt),this.setDefaultCandidateProviders(),i.useGeometryUniqueIdsMap&&(this._geometriesByUniqueId={}),this.useMaterialMeshMap=i.useMaterialMeshMap,this.useClonedMeshMap=i.useClonedMeshMap,(!t||!t.virtual)&&e.onNewSceneAddedObservable.notifyObservers(this)}getClassName(){return"Scene"}_getDefaultMeshCandidates(){return this._defaultMeshCandidates.data=this.meshes,this._defaultMeshCandidates.length=this.meshes.length,this._defaultMeshCandidates}_getDefaultSubMeshCandidates(e){return this._defaultSubMeshCandidates.data=e.subMeshes,this._defaultSubMeshCandidates.length=e.subMeshes.length,this._defaultSubMeshCandidates}setDefaultCandidateProviders(){this.getActiveMeshCandidates=()=>this._getDefaultMeshCandidates(),this.getActiveSubMeshCandidates=e=>this._getDefaultSubMeshCandidates(e),this.getIntersectingSubMeshCandidates=(e,t)=>this._getDefaultSubMeshCandidates(e),this.getCollidingSubMeshCandidates=(e,t)=>this._getDefaultSubMeshCandidates(e)}get meshUnderPointer(){return this._inputManager.meshUnderPointer}get pointerX(){return this._inputManager.pointerX}set pointerX(e){this._inputManager.pointerX=e}get pointerY(){return this._inputManager.pointerY}set pointerY(e){this._inputManager.pointerY=e}getCachedMaterial(){return this._cachedMaterial}getCachedEffect(){return this._cachedEffect}getCachedVisibility(){return this._cachedVisibility}isCachedMaterialInvalid(e,t,i=1){return this._cachedEffect!==t||this._cachedMaterial!==e||this._cachedVisibility!==i}getEngine(){return this._engine}getTotalVertices(){return this._totalVertices.current}get totalVerticesPerfCounter(){return this._totalVertices}getActiveIndices(){return this._activeIndices.current}get totalActiveIndicesPerfCounter(){return this._activeIndices}getActiveParticles(){return this._activeParticles.current}get activeParticlesPerfCounter(){return this._activeParticles}getActiveBones(){return this._activeBones.current}get activeBonesPerfCounter(){return this._activeBones}getActiveMeshes(){return this._activeMeshes}getAnimationRatio(){return this._animationRatio!==void 0?this._animationRatio:1}getRenderId(){return this._renderId}getFrameId(){return this._frameId}incrementRenderId(){this._renderId++}_createUbo(){this.setSceneUniformBuffer(this.createSceneUniformBuffer())}simulatePointerMove(e,t){return this._inputManager.simulatePointerMove(e,t),this}simulatePointerDown(e,t){return this._inputManager.simulatePointerDown(e,t),this}simulatePointerUp(e,t,i){return this._inputManager.simulatePointerUp(e,t,i),this}isPointerCaptured(e=0){return this._inputManager.isPointerCaptured(e)}attachControl(e=!0,t=!0,i=!0){this._inputManager.attachControl(e,t,i)}detachControl(){this._inputManager.detachControl()}isReady(e=!0){var a,o,l;if(this._isDisposed)return!1;let t,i=this.getEngine(),r=i.currentRenderPassId;i.currentRenderPassId=(o=(a=this.activeCamera)==null?void 0:a.renderPassId)!=null?o:r;let s=!0;for(this._pendingData.length>0&&(s=!1),(l=this.prePassRenderer)==null||l.update(),this.useOrderIndependentTransparency&&this.depthPeelingRenderer&&s&&(s=this.depthPeelingRenderer.isReady()),e&&(this._processedMaterials.reset(),this._materialsRenderTargets.reset()),t=0;t0;for(let d of this._isReadyForMeshStage)d.action(c,f)||(s=!1);if(!e)continue;let h=c.material||this.defaultMaterial;if(h)if(h._storeEffectOnSubMeshes)for(let d of c.subMeshes){let u=d.getMaterial();u&&u.hasRenderTargetTextures&&u.getRenderTargetTextures!=null&&this._processedMaterials.indexOf(u)===-1&&(this._processedMaterials.push(u),this._materialsRenderTargets.concatWithNoDuplicate(u.getRenderTargetTextures()))}else h.hasRenderTargetTextures&&h.getRenderTargetTextures!=null&&this._processedMaterials.indexOf(h)===-1&&(this._processedMaterials.push(h),this._materialsRenderTargets.concatWithNoDuplicate(h.getRenderTargetTextures()))}if(e){for(t=0;t0)for(let c of this.activeCameras)c.isReady(!0)||(s=!1);else this.activeCamera&&(this.activeCamera.isReady(!0)||(s=!1));for(let c of this.particleSystems)c.isReady()||(s=!1);if(this.proceduralTexturesEnabled)for(let c of this.proceduralTextures)c.isReady()||(s=!1);if(this.layers)for(let c of this.layers)c.isReady()||(s=!1);if(this.effectLayers)for(let c of this.effectLayers)c.isLayerReady()||(s=!1);for(let c of this._isReadyChecks)c.isReady()||(s=!1);return i.areAllEffectsReady()||(s=!1),i.currentRenderPassId=r,s}resetCachedMaterial(){this._cachedMaterial=null,this._cachedEffect=null,this._cachedVisibility=null}registerBeforeRender(e){this.onBeforeRenderObservable.add(e)}unregisterBeforeRender(e){this.onBeforeRenderObservable.removeCallback(e)}registerAfterRender(e){this.onAfterRenderObservable.add(e)}unregisterAfterRender(e){this.onAfterRenderObservable.removeCallback(e)}_executeOnceBeforeRender(e){let t=()=>{e(),setTimeout(()=>{this.unregisterBeforeRender(t)})};this.registerBeforeRender(t)}executeOnceBeforeRender(e,t){t!==void 0?setTimeout(()=>{this._executeOnceBeforeRender(e)},t):this._executeOnceBeforeRender(e)}addPendingData(e){this._pendingData.push(e)}removePendingData(e){let t=this.isLoading,i=this._pendingData.indexOf(e);i!==-1&&this._pendingData.splice(i,1),t&&!this.isLoading&&this.onDataLoadedObservable.notifyObservers(this)}getWaitingItemsCount(){return this._pendingData.length}get isLoading(){return this._pendingData.length>0}addIsReadyCheck(e){this._isReadyChecks.indexOf(e)===-1&&this._isReadyChecks.push(e)}removeIsReadyCheck(e){let t=this._isReadyChecks.indexOf(e);t!==-1&&this._isReadyChecks.splice(t,1)}executeWhenReady(e,t=!1){this.onReadyObservable.addOnce(e),this._executeWhenReadyTimeoutId===null&&this._checkIsReady(t)}async whenReadyAsync(e=!1){return await new Promise(t=>{this.executeWhenReady(()=>{t()},e)})}_clearReadynessChecksData(){this._timeoutChecksStartTime=0,this.onReadyTimeoutObservable.clear(),this.onReadyObservable.clear(),this._executeWhenReadyTimeoutId=null}_checkIsReady(e=!1){if(this._registerTransientComponents(),this._timeoutChecksStartTime===0)this._timeoutChecksStartTime=vr.Now;else if(this.onReadyTimeoutDuration>0&&vr.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=vr.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?cf.GetPlanesToRef(this._transformMatrix,this._frustumPlanes):this._frustumPlanes=cf.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 mr(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 ic.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):(J.Error(c),o&&J.Error(o))}else{let c="Scene: An unexpected error occurred while trying to freeze active meshes.";i?i(c):(J.Error(c),o&&(J.Error(o),o.stack&&J.Error(o.stack)))}}),this}return this.executeWhenReady(()=>{if(!this.activeCamera){i&&i("No active camera found");return}if(this._frustumPlanes||this.updateTransformMatrix(),this._evaluateActiveMeshes(),this._activeMeshesFrozen=!0,this._activeMeshesFrozenButKeepClipping=s,this._skipEvaluateActiveMeshesCompletely=e,r)for(let a=0;ae.dispose())}_evaluateActiveMeshes(){var i;if(this._engine.snapshotRendering&&this._engine.snapshotRenderingMode===1){this._activeMeshes.length>0&&((i=this.activeCamera)==null||i._activeMeshes.reset(),this._activeMeshes.reset(),this._renderingManager.reset(),this._processedMaterials.reset(),this._activeParticleSystems.reset(),this._activeSkeletons.reset(),this._softwareSkinnedMeshes.reset());return}if(this._activeMeshesFrozen&&this._activeMeshes.length){if(!this._skipEvaluateActiveMeshesCompletely){let r=this._activeMeshes.length;for(let s=0;s0&&(s.layerMask&this.activeCamera.layerMask)!==0&&(this._skipFrustumClipping||s.alwaysSelectAsActiveMesh||s.isInFrustum(this._frustumPlanes)))){this._activeMeshes.push(s),this.activeCamera._activeMeshes.push(s),o!==s&&o._activate(this._renderId,!1);for(let l of this._preActiveMeshStage)l.action(s);s._activate(this._renderId,!1)&&(s.isAnInstance?s._internalAbstractMeshDataInfo._actAsRegularMesh&&(o=s):o._internalAbstractMeshDataInfo._onlyForInstances=!1,o._internalAbstractMeshDataInfo._isActive=!0,this._activeMesh(s,o)),s._postActivate()}}if(this.onAfterActiveMeshesEvaluationObservable.notifyObservers(this),this.particlesEnabled){this.onBeforeParticlesRenderingObservable.notifyObservers(this);for(let r=0;r0){let r=this.getActiveSubMeshCandidates(t),s=r.length;i=i||s===1;for(let a=0;a0&&this._renderTargets.concatWithNoDuplicate(e.customRenderTargets),t&&t.customRenderTargets&&t.customRenderTargets.length>0&&this._renderTargets.concatWithNoDuplicate(t.customRenderTargets),this.environmentTexture&&this.environmentTexture.isRenderTarget&&this._renderTargets.pushNoDuplicate(this.environmentTexture);for(let d of this._gatherActiveCameraRenderTargetsStage)d.action(this._renderTargets);let s=!1;if(this.renderTargetsEnabled){this._intermediateRendering=!0;let d;if(this._renderTargets.length>0){_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(sn.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&&BU(),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 qe("Ray")}createPickingRayToRef(e,t,i,r,s,a=!1,o=!1){throw qe("Ray")}createPickingRayInCameraSpace(e,t,i){throw qe("Ray")}createPickingRayInCameraSpaceToRef(e,t,i,r){throw qe("Ray")}pick(e,t,i,r,s,a){let o=qe("Ray",!0);return o&&J.Warn(o),new rs}pickWithBoundingInfo(e,t,i,r,s){let a=qe("Ray",!0);return a&&J.Warn(a),new rs}pickWithRay(e,t,i,r){throw qe("Ray")}multiPick(e,t,i,r,s){throw qe("Ray")}multiPickWithRay(e,t,i){throw qe("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=rl(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=TA(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=Wh(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 qe("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 iV,kse,Pa=M(()=>{G();iV="helperFunctions",kse=`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));} -`;A.IncludesShadersStoreWGSL[eV]||(A.IncludesShadersStoreWGSL[eV]=Pse)});var ry={};tt(ry,{rgbdDecodePixelShaderWGSL:()=>Lse});var iy,tV,Lse,ny=M(()=>{G();Pa();iy="rgbdDecodePixelShader",tV=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_2d; +`;A.IncludesShadersStoreWGSL[iV]||(A.IncludesShadersStoreWGSL[iV]=kse)});var oy={};tt(oy,{rgbdDecodePixelShaderWGSL:()=>Wse});var ay,rV,Wse,ly=M(()=>{G();Pa();ay="rgbdDecodePixelShader",rV=`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);}`;A.ShadersStoreWGSL[iy]||(A.ShadersStoreWGSL[iy]=tV);Lse={name:iy,shader:tV}});var iV,Dse,La=M(()=>{G();iV="helperFunctions",Dse=`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[ay]||(A.ShadersStoreWGSL[ay]=rV);Wse={name:ay,shader:rV}});var nV,Hse,La=M(()=>{G();nV="helperFunctions",Hse=`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 -`;A.IncludesShadersStore[iV]||(A.IncludesShadersStore[iV]=Dse)});var ay={};tt(ay,{rgbdDecodePixelShader:()=>Ose});var sy,rV,Ose,oy=M(()=>{G();La();sy="rgbdDecodePixelShader",rV=`varying vec2 vUV;uniform sampler2D textureSampler; +`;A.IncludesShadersStore[nV]||(A.IncludesShadersStore[nV]=Hse)});var fy={};tt(fy,{rgbdDecodePixelShader:()=>zse});var cy,sV,zse,hy=M(()=>{G();La();cy="rgbdDecodePixelShader",sV=`varying vec2 vUV;uniform sampler2D textureSampler; #include #define CUSTOM_FRAGMENT_DEFINITIONS void main(void) -{gl_FragColor=vec4(fromRGBD(texture2D(textureSampler,vUV)),1.0);}`;A.ShadersStore[sy]||(A.ShadersStore[sy]=rV);Ose={name:sy,shader:rV}});var sV={};tt(sV,{rgbdEncodePixelShader:()=>Nse});var ly,nV,Nse,aV=M(()=>{G();La();ly="rgbdEncodePixelShader",nV=`varying vec2 vUV;uniform sampler2D textureSampler; +{gl_FragColor=vec4(fromRGBD(texture2D(textureSampler,vUV)),1.0);}`;A.ShadersStore[cy]||(A.ShadersStore[cy]=sV);zse={name:cy,shader:sV}});var oV={};tt(oV,{rgbdEncodePixelShader:()=>Xse});var dy,aV,Xse,lV=M(()=>{G();La();dy="rgbdEncodePixelShader",aV=`varying vec2 vUV;uniform sampler2D textureSampler; #include #define CUSTOM_FRAGMENT_DEFINITIONS void main(void) -{gl_FragColor=toRGBD(texture2D(textureSampler,vUV).rgb);}`;A.ShadersStore[ly]||(A.ShadersStore[ly]=nV);Nse={name:ly,shader:nV}});var lV={};tt(lV,{rgbdEncodePixelShaderWGSL:()=>wse});var cy,oV,wse,cV=M(()=>{G();Pa();cy="rgbdEncodePixelShader",oV=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_2d; +{gl_FragColor=toRGBD(texture2D(textureSampler,vUV).rgb);}`;A.ShadersStore[dy]||(A.ShadersStore[dy]=aV);Xse={name:dy,shader:aV}});var fV={};tt(fV,{rgbdEncodePixelShaderWGSL:()=>Yse});var uy,cV,Yse,hV=M(()=>{G();Pa();uy="rgbdEncodePixelShader",cV=`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);}`;A.ShadersStoreWGSL[cy]||(A.ShadersStoreWGSL[cy]=oV);wse={name:cy,shader:oV}});var fm,fy=M(()=>{ql();VC();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(()=>(ny(),ry)):await Promise.resolve().then(()=>(oy(),ay));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(()=>(cV(),lV)):await Promise.resolve().then(()=>(aV(),sV)),await fU("rgbdEncode",e,t,i,1,5)}}});var hy=M(()=>{vC();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=Yl.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 uV(n){let e=new DataView(n.buffer,n.byteOffset,n.byteLength),t=0;for(let a=0;afV)throw new Error(`Unsupported babylon environment map version "${n.version}". Latest supported version is "${fV}".`);return n.version===2||(n={...n,version:2,imageType:kA}),n}function Fse(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 Use(n,e,t=kA){let i=n.getEngine();n.format=5,n.type=0,n.generateMipMaps=!0,n._cachedAnisotropicFilteringLevel=null,i.updateTextureSamplingMode(3,n),await pV(n,e,!0,t),n.isReady=!0}async function Vse(n,e,t,i=kA,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 pV(a,[e],!1,i),s.generateMipMapsForCubemap(a),a.isReady=!0}async function pV(n,e,t,i=kA){if(!_e.IsExponentOfTwo(n.width))throw new Error("Texture size must be a power of two");let r=mB(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(()=>(ny(),ry))):await Promise.resolve().then(()=>(oy(),ay)),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 dV(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=()=>{dV(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();Nn();X_();bs();Z_();ys();ql();Pt();fy();DC();hy();sm();kA="image/png",fV=2,hV=[134,22,135,150,246,214,150,54]});var vV={};tt(vV,{_ENVTextureLoader:()=>dy});var dy,EV=M(()=>{gV();dy=class{constructor(){this.supportCascades=!1}loadCubeData(e,t,i,r,s){if(Array.isArray(e))return;let a=uV(e);if(a){t.width=a.width,t.height=a.width;try{_V(t,a),mV(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 tc,SV=M(()=>{Ge();tc=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:_}}};tc.FACE_LEFT=[new b(-1,-1,-1),new b(1,-1,-1),new b(-1,1,-1),new b(1,1,-1)];tc.FACE_RIGHT=[new b(1,-1,1),new b(-1,-1,1),new b(1,1,1),new b(-1,1,1)];tc.FACE_FRONT=[new b(1,-1,-1),new b(1,-1,1),new b(1,1,-1),new b(1,1,1)];tc.FACE_BACK=[new b(-1,-1,1),new b(-1,-1,-1),new b(-1,1,1),new b(-1,1,-1)];tc.FACE_DOWN=[new b(1,1,-1),new b(1,1,1),new b(-1,1,-1),new b(-1,1,1)];tc.FACE_UP=[new b(-1,-1,-1),new b(-1,-1,1),new b(1,-1,-1),new b(1,-1,1)]});function Gse(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=Gse(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 uy(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 xV(n,e){return kse(n,e)}function kse(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 Wse(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{SV()});var bV={};tt(bV,{_HDRTextureLoader:()=>my});var my,IV=M(()=>{RV();my=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=AV(r),a=xV(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,MV=M(()=>{Pt();po=class n{constructor(e,t){if(this.data=e,this.isInvalid=!1,!n.IsValid(e)){this.isInvalid=!0,J.Error("texture missing KTX identifier");return}let i=Uint32Array.BYTES_PER_ELEMENT,r=new DataView(this.data.buffer,this.data.byteOffset+12,13*i),a=r.getUint32(0,!0)===67305985;if(this.glType=r.getUint32(1*i,a),this.glTypeSize=r.getUint32(2*i,a),this.glFormat=r.getUint32(3*i,a),this.glInternalFormat=r.getUint32(4*i,a),this.glBaseInternalFormat=r.getUint32(5*i,a),this.pixelWidth=r.getUint32(6*i,a),this.pixelHeight=r.getUint32(7*i,a),this.pixelDepth=r.getUint32(8*i,a),this.numberOfArrayElements=r.getUint32(9*i,a),this.numberOfFaces=r.getUint32(10*i,a),this.numberOfMipmapLevels=r.getUint32(11*i,a),this.bytesOfKeyValueData=r.getUint32(12*i,a),this.glType!==0){J.Error("only compressed formats currently supported"),this.isInvalid=!0;return}else this.numberOfMipmapLevels=Math.max(1,this.numberOfMipmapLevels);if(this.pixelHeight===0||this.pixelDepth!==0){J.Error("only 2D textures currently supported"),this.isInvalid=!0;return}if(this.numberOfArrayElements!==0){J.Error("texture arrays not currently supported"),this.isInvalid=!0;return}if(this.numberOfFaces!==t){J.Error("number of faces expected"+t+", but found "+this.numberOfFaces),this.isInvalid=!0;return}this.loadType=n.COMPRESSED_2D}uploadLevels(e,t){switch(this.loadType){case n.COMPRESSED_2D:this._upload2DCompressedLevels(e,t);break;case n.TEX_2D:case n.COMPRESSED_3D:case n.TEX_3D:}}_upload2DCompressedLevels(e,t){let i=n.HEADER_LEN+this.bytesOfKeyValueData,r=this.pixelWidth,s=this.pixelHeight,a=t?this.numberOfMipmapLevels:1;for(let o=0;o=12){let t=new Uint8Array(e.buffer,e.byteOffset,12);if(t[0]===171&&t[1]===75&&t[2]===84&&t[3]===88&&t[4]===32&&t[5]===49&&t[6]===49&&t[7]===187&&t[8]===13&&t[9]===10&&t[10]===26&&t[11]===10)return!0}return!1}};po.HEADER_LEN=64;po.COMPRESSED_2D=0;po.COMPRESSED_3D=1;po.TEX_2D=2;po.TEX_3D=3});var py,dg,CV=M(()=>{py=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 py{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 yV,hm,PV,LV=M(()=>{(function(n){n[n.ETC1S=0]="ETC1S",n[n.UASTC4x4=1]="UASTC4x4"})(yV||(yV={}));(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"})(PV||(PV={}))});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 OV(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 NV=M(()=>{});var _y,ic,wV=M(()=>{CV();Ci();LV();NV();_y=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}},ic=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=`${ug}(${DV})()`,s=URL.createObjectURL(new Blob([r],{type:"application/javascript"}));i(new dg(e,async()=>await OV(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,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}};ic.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};ic.DefaultNumWorkers=ic.GetDefaultNumWorkers();ic.DefaultDecoderOptions=new _y});var vy={};tt(vy,{_KTXTextureLoader:()=>gy});function Hse(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 gy,Ey=M(()=>{MV();wV();Pt();gy=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=Hse(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 ic.IsValid(e)?new ic(t.getEngine())._uploadAsync(e,t,r).then(()=>{i(t.width,t.height,t.generateMipMaps,!0,()=>{},!1)},a=>{J.Warn(`Failed to load KTX2 texture data: ${a.message}`),i(0,0,!1,!1,()=>{},!0)}):(J.Error("texture missing KTX identifier"),i(0,0,!1,!1,()=>{},!0))}}});function WA(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 Sy(n,e){if(e.length<19){J.Error("Unable to load TGA file - Not enough data to contain header");return}let t=18,i=WA(e);if(i.id_length+t>e.length){J.Error("Unable to load TGA file - Not enough data");return}t+=i.id_length;let r=!1,s=!1,a=!1;switch(i.image_type){case Kse:r=!0;case zse:s=!0;break;case jse:r=!0;case Xse:break;case qse:r=!0;case Yse: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>Qse){default:case eae:h=0,u=1,_=i.width,d=0,m=1,p=i.height;break;case $se:h=0,u=1,_=i.width,d=i.height-1,m=-1,p=-1;break;case tae:h=i.width-1,u=-1,_=-1,d=0,m=1,p=i.height;break;case Jse: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=lae[g](i,f,o,d,m,p,h,u,_);n.getEngine()._uploadDataToTextureDirectly(n,v)}function iae(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 rae(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 nae(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 sae(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 aae(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 oae(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 zse,Xse,Yse,Kse,jse,qse,Zse,Qse,$se,Jse,eae,tae,lae,FV=M(()=>{Pt();zse=1,Xse=2,Yse=3,Kse=9,jse=10,qse=11,Zse=48,Qse=4,$se=0,Jse=1,eae=2,tae=3;lae={GetTGAHeader:WA,UploadContent:Sy,_getImageData8bits:iae,_getImageData16bits:rae,_getImageData24bits:nae,_getImageData32bits:sae,_getImageDataGrey8bits:aae,_getImageDataGrey16bits:oae}});var BV={};tt(BV,{_TGATextureLoader:()=>Ty});var Ty,UV=M(()=>{FV();Ty=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=WA(r);i(s.width,s.height,t.generateMipMaps,!1,()=>{Sy(t,r)})}}});var mg=M(()=>{});function fae(){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 XA(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 Js(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 xy(n,e){let t=n[e.value];return e.value+=1,t}function kV(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 WV(n,e){return hae(dm(n,e))}function hae(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 dae(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),HA.floatView[0]=n;let e=HA.uint32View[0],t=e>>23&511;return HA.baseTable[t]+((e&8388607)>>HA.shiftTable[t])}function HV(n,e){return dae(Tn(n,e))}function uae(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 mae(n,e){let t=_o(n,e),i=Js(n,e);return[t,i]}function pae(n,e){let t=Js(n,e),i=Js(n,e);return[t,i]}function _ae(n,e){let t=Tn(n,e),i=Tn(n,e);return[t,i]}function gae(n,e){let t=Tn(n,e),i=Tn(n,e),r=Tn(n,e);return[t,i,r]}function vae(n,e,t){let i=e.value,r=[];for(;e.values||(e[r++]=n[t++],r>s));)e[r++]=n[i++]}var nl,Ay,HA,_g=M(()=>{Nn();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"})(nl||(nl={}));(function(n){n[n.INCREASING_Y=0]="INCREASING_Y",n[n.DECREASING_Y=1]="DECREASING_Y"})(Ay||(Ay={}));HA=fae()});function Iy(n,e){if(n.getUint32(0,!0)!=xae)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=XA(n.buffer,e);if(!o)a=!1;else{let l=XA(n.buffer,e),c=Js(n,e),f=zV(n,e,l,c);f===void 0?J.Warn(`Unknown header attribute type ${l}'.`):s[o]=f}}if((i&-5)!=0)throw new Error("Unsupported file format");return{version:t,spec:r,...s}}var xae,XV=M(()=>{Pt();_g();xae=20000630});function JV(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 Mae(n){for(let e=0;e<16384;e++)n[e]={},n[e].len=0,n[e].lit=0,n[e].p=null}function qV(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 yae(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=qV(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=qV(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--}}Cae(s)}function eG(n){return n&63}function tG(n){return n>>6}function Pae(n,e,t,i){for(;e<=t;e++){let r=tG(n[e]),s=eG(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 Lae(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=My(_.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=eG(n[_.p[g]]);for(;f=v&&tG(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=My(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 iG(n,e,t,i,r,s){let a={value:0},o=t.value,l=Js(e,t),c=Js(e,t);t.value+=4;let f=Js(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);Mae(d);let u=i-(t.value-o);if(yae(n,t,u,l,c,h),f>8*(i-(t.value-o)))throw new Error("Wrong hufUncompress");Pae(h,l,c,d),Lae(h,d,n,t,f,c,s,r,a)}function yy(n){return n&65535}function ZV(n){let e=yy(n);return e>32767?e-65536:e}function um(n,e){let t=ZV(n),r=ZV(e),s=t+(r&1)+(r>>1),a=s,o=s-r;return{a,b:o}}function mm(n,e){let t=yy(n),i=yy(e),r=t-(i>>1)&jV;return{a:i+r-Iae&jV,b:r}}function rG(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 nG(n,e,t){for(let i=0;i{_g();mg();$V=16,Iae=1<<$V-1,jV=(1<<$V)-1;gg=new Array(59)});function aG(n){let e=n.byteLength,t=[],i=0,r=new DataView(n);for(;e>0;){let s=r.getInt8(i++);if(s<0){let a=-s;e-=a+1;for(let o=0;o{});function Py(n){return new DataView(n.array.buffer,n.offset.value,n.size)}function cG(n){let e=n.viewer.buffer.slice(n.offset.value,n.offset.value+n.size),t=new Uint8Array(aG(e)),i=new Uint8Array(t.length);return Ry(t),by(t,i),new DataView(i.buffer)}function Ly(n){let e=n.array.slice(n.offset.value,n.offset.value+n.size),t=fflate.unzlibSync(e),i=new Uint8Array(t.length);return Ry(t),by(t,i),new DataView(i.buffer)}function fG(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{sG();oG();_g();mg()});var Da,sl,Dy=M(()=>{(function(n){n[n.Float=0]="Float",n[n.HalfFloat=1]="HalfFloat"})(Da||(Da={}));sl=class{};sl.DefaultOutputType=Da.HalfFloat;sl.FFLATEUrl="https://unpkg.com/fflate@0.8.2"});async function Oy(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=Py;break;case nl.RLE_COMPRESSION:r.lines=1,r.uncompress=cG;break;case nl.ZIPS_COMPRESSION:r.lines=1,r.uncompress=Ly,await _e.LoadScriptAsync(sl.FFLATEUrl);break;case nl.ZIP_COMPRESSION:r.lines=16,r.uncompress=Ly,await _e.LoadScriptAsync(sl.FFLATEUrl);break;case nl.PIZ_COMPRESSION:r.lines=32,r.uncompress=hG;break;case nl.PXR24_COMPRESSION:r.lines=16,r.uncompress=fG,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 Da.Float:r.getter=WV,r.inputSize=2;break;case Da.HalfFloat:r.getter=dm,r.inputSize=2;break}else if(r.type===2)switch(i){case Da.Float:r.getter=Tn,r.inputSize=4;break;case Da.HalfFloat:r.getter=HV,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 Ny(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();dG();mg();Ci();Dy()});var mG={};tt(mG,{ReadExrDataAsync:()=>Dae,_ExrTextureLoader:()=>wy});async function Dae(n){let e=new DataView(n),t={value:0},i=Iy(e,t);try{let r=await Oy(i,e,t,Da.Float);return Ny(r,i,e,t),r.byteArray?{width:i.dataWindow.xMax-i.dataWindow.xMin+1,height:i.dataWindow.yMax-i.dataWindow.yMin+1,data:new Float32Array(r.byteArray)}:(J.Error("Failed to decode EXR data: No byte array available."),{width:0,height:0,data:null})}catch(r){J.Error("Failed to load EXR data: ",r)}return{width:0,height:0,data:null}}var wy,pG=M(()=>{XV();uG();Dy();Pt();wy=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=Iy(r,s);Oy(a,r,s,sl.DefaultOutputType).then(o=>{Ny(o,a,r,s);let l=a.dataWindow.xMax-a.dataWindow.xMin+1,c=a.dataWindow.yMax-a.dataWindow.yMin+1;i(l,c,t.generateMipMaps,!1,()=>{let f=t.getEngine();t.format=a.format,t.type=o.textureType,t.invertY=!1,t._gammaSpace=!a.linearSpace,o.byteArray&&f._uploadDataToTextureDirectly(t,o.byteArray,0,0,void 0,!0)})}).catch(o=>{J.Error("Failed to load EXR texture: ",o)})}}});function rc(n,e){Oae(n)&&J.Warn(`Extension with the name '${n}' already exists`),KA.set(n,e)}function Oae(n){return KA.delete(n)}function jA(n,e){(e==="image/ktx"||e==="image/ktx2")&&(n=".ktx"),KA.has(n)||(n.endsWith(".ies")&&rc(".ies",async()=>await Promise.resolve().then(()=>(mU(),uU)).then(i=>new i._IESTextureLoader)),n.endsWith(".dds")&&rc(".dds",async()=>await Promise.resolve().then(()=>(_U(),pU)).then(i=>new i._DDSTextureLoader)),n.endsWith(".basis")&&rc(".basis",async()=>await Promise.resolve().then(()=>(AU(),TU)).then(i=>new i._BasisTextureLoader)),n.endsWith(".env")&&rc(".env",async()=>await Promise.resolve().then(()=>(EV(),vV)).then(i=>new i._ENVTextureLoader)),n.endsWith(".hdr")&&rc(".hdr",async()=>await Promise.resolve().then(()=>(IV(),bV)).then(i=>new i._HDRTextureLoader)),(n.endsWith(".ktx")||n.endsWith(".ktx2"))&&(rc(".ktx",async()=>await Promise.resolve().then(()=>(Ey(),vy)).then(i=>new i._KTXTextureLoader)),rc(".ktx2",async()=>await Promise.resolve().then(()=>(Ey(),vy)).then(i=>new i._KTXTextureLoader))),n.endsWith(".tga")&&rc(".tga",async()=>await Promise.resolve().then(()=>(UV(),BV)).then(i=>new i._TGATextureLoader)),n.endsWith(".exr")&&rc(".exr",async()=>await Promise.resolve().then(()=>(pG(),mG)).then(i=>new i._ExrTextureLoader)));let t=KA.get(n);return t?Promise.resolve(t(e)):null}var KA,Fy=M(()=>{Pt();KA=new Map});function _G(n){let e=n.split("?")[0],t=e.lastIndexOf(".");return t>-1?e.substring(t).toLowerCase():""}var gG=M(()=>{});var vG=M(()=>{bs();Pt();Xl();Y_();Ur();Fy();gG();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=cf();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:_G(n),x=jA(v),T=(S,R)=>{_.dispose(),s?s(S,R):S&&J.Warn(S)},E=(S,R)=>{n===g?S&&T(S.status+" "+S.statusText,R):(J.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 wG={};tt(wG,{DDSTools:()=>co});function qA(n){return n.charCodeAt(0)+(n.charCodeAt(1)<<8)+(n.charCodeAt(2)<<16)+(n.charCodeAt(3)<<24)}function wae(n){return String.fromCharCode(n&255,n>>8&255,n>>16&255,n>>24&255)}var Nae,EG,SG,TG,AG,xG,RG,bG,IG,By,MG,CG,yG,PG,Fae,Uy,Bae,Uae,LG,DG,Vy,OG,Gy,NG,Vae,Gae,kae,Wae,Hae,zae,Xae,co,zC=M(()=>{Nn();Pt();vC();VC();vG();Nae=542327876,EG=131072,SG=512,TG=4,AG=64,xG=131072;RG=qA("DXT1"),bG=qA("DXT3"),IG=qA("DXT5"),By=qA("DX10"),MG=113,CG=116,yG=2,PG=10,Fae=88,Uy=31,Bae=0,Uae=1,LG=2,DG=3,Vy=4,OG=7,Gy=20,NG=21,Vae=22,Gae=23,kae=24,Wae=25,Hae=26,zae=28,Xae=32,co=class n{static GetDDSInfo(e){let t=new Int32Array(e.buffer,e.byteOffset,Uy),i=new Int32Array(e.buffer,e.byteOffset,Uy+4),r=1;t[LG]&EG&&(r=Math.max(1,t[OG]));let s=t[NG],a=s===By?i[Xae]:0,o=0;switch(s){case MG:o=2;break;case CG:o=1;break;case By:if(a===PG){o=2;break}if(a===yG){o=1;break}}return{width:t[Vy],height:t[DG],mipmapCount:r,isFourCC:(t[Gy]&TG)===TG,isRGB:(t[Gy]&AG)===AG,isLuminance:(t[Gy]&xG)===xG,isCube:(t[zae]&SG)===SG,isCompressed:s===RG||s===bG||s===IG,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=Yl.ConvertCubeMapToSphericalPolynomial({size:d[Vy],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 FG=M(()=>{Jn();bs();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 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(()=>(zC(),wG)),_=[];for(let v=0;v{Jn();JT();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 UG=M(()=>{Sa();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 VG=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 ky=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 GG=M(()=>{Ur();ky();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 kG=M(()=>{Ur();ky();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 WG=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 zG=M(()=>{Fy();Ur();Me.GetCompatibleTextureLoader=jA});function Yae(n){!n||!n.setAttribute||(n.setAttribute("touch-action","none"),n.style.touchAction="none",n.style.webkitTapHighlightColor="transparent")}function XG(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||Yae(e),!Me.audioEngine&&t.audioEngine&&Me.AudioEngineFactory&&(Me.audioEngine=Me.AudioEngineFactory(n.getRenderingCanvas(),n.getAudioContext(),n.getAudioDestination())),af()&&(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 YG(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)),af()&&(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 KG(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 jG(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 qG(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 ZG(n){let e=n.requestFullscreen||n.webkitRequestFullscreen;e&&e.call(n)}function QG(){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 $G(){document.exitPointerLock&&document.exitPointerLock()}var JG=M(()=>{Sa();Ur();Ni()});var Ue,Hy=M(()=>{bs();Ni();Jn();Z2();JT();Pt();nC();Q2();tB();iB();rB();nB();oB();lB();cB();FG();BG();UG();VG();GG();kG();WG();lC();HG();zG();Ur();JG();ty();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 tA,this._drawCalls=new rl,e&&(this._features.supportRenderPasses=!0)}_initGLContext(){super._initGLContext(),this._rescalePostProcess=null}_sharedInit(e){super._sharedInit(e),XG(this,e,this._creationOptions)}resizeImageBitmap(e,t,i){return qG(this,e,t,i)}async _createImageBitmapFromSource(e,t){return await jG(this,e,t)}switchFullscreen(e){this.isFullscreen?this.exitFullscreen():this.enterFullscreen(e)}enterFullscreen(e){this.isFullscreen||(this._pointerLockRequested=e,this._renderingCanvas&&ZG(this._renderingCanvas))}exitFullscreen(){this.isFullscreen&&QG()}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 KG(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(){$G()}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){J.Error("WebGL 1 does not support texture comparison.");return}let i=this._gl;e.isCube?(this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP,e,!0),t===0?(i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_COMPARE_FUNC,515),i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_COMPARE_MODE,i.NONE)):(i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_COMPARE_FUNC,t),i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_COMPARE_MODE,i.COMPARE_REF_TO_TEXTURE)),this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP,null)):(this._bindTextureDirectly(this._gl.TEXTURE_2D,e,!0),t===0?(i.texParameteri(i.TEXTURE_2D,i.TEXTURE_COMPARE_FUNC,515),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_COMPARE_MODE,i.NONE)):(i.texParameteri(i.TEXTURE_2D,i.TEXTURE_COMPARE_FUNC,t),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_COMPARE_MODE,i.COMPARE_REF_TO_TEXTURE)),this._bindTextureDirectly(this._gl.TEXTURE_2D,null)),e._comparisonFunction=t}createInstancesBuffer(e){let t=this._gl.createBuffer();if(!t)throw new Error("Unable to create instance buffer");let i=new 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(),YG(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 zy,_i,ea=M(()=>{kt();Ge();Vt();di();Ni();hn();Rr();zy=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 zy,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 qe("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 Xy(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 ek(n=25){let e;return(t,i,r)=>{let s=performance.now();e===void 0||s-e>n?(e=s,setTimeout(()=>{Xy(t,i,r)},0)):Xy(t,i,r)}}function tk(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 tk(n,Xy,i=>t=i,i=>{throw i},e),t}async function ik(n,e,t){return await new Promise((i,r)=>{tk(n,e,i,r,t)})}function rk(n,e){return(...t)=>Eg(n(...t),e)}var Yy=M(()=>{});var mt,al=M(()=>{kt();Vt();lo();Ci();di();Ge();ea();Pt();zi();hn();em();aA();Rr();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?(J.Error("You're trying to reuse a post process not defined as reusable."),0):(t==null||t<0?this._postProcesses.push(e):this._postProcesses[t]===null?this._postProcesses[t]=e:this._postProcesses.splice(t,0,e),this._cascadePostProcessesToRigCams(),this._scene.prePassRenderer&&this._scene.prePassRenderer.markAsDirty(),this._postProcesses.indexOf(e))}detachPostProcess(e){let t=this._postProcesses.indexOf(e);t!==-1&&(this._postProcesses[t]=null),this._scene.prePassRenderer&&this._scene.prePassRenderer.markAsDirty(),this._cascadePostProcessesToRigCams()}getWorldMatrix(){return this._isSynchronizedViewMatrix()?this._worldMatrix:(this.getViewMatrix(),this._worldMatrix)}_getViewMatrix(){return 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?lf.GetPlanesToRef(this._transformMatrix,this._frustumPlanes):this._frustumPlanes=lf.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 qe("Ray")}getForwardRayToRef(e,t=100,i,r){throw qe("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 qe("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 jh,Ky=M(()=>{jh=class{constructor(e,t,i){this.bu=e,this.bv=t,this.distance=i,this.faceId=0,this.subMeshId=0,this._internalSubMeshId=0}}});var Sf,jy=M(()=>{Qo();Ge();On();Sf=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}};Sf._TmpVector3=dn(3,b.Zero)});var pm,nk=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();jy();nk();qy={min:0,max:0},Zy={min:0,max:0},sk=(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},rs=(n,e,t)=>(sk(n,e,qy),sk(n,t,Zy),!(qy.min>Zy.max||Zy.min>qy.max)),un=class n{constructor(e,t,i){this._isLocked=!1,this.boundingBox=new Sf(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=$.Matrix[0];this.boundingBox.getWorldMatrix().invertToRef(t);let i=$.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)||!Sf.Intersects(this.boundingBox,e.boundingBox))return!1;if(!t)return!0;let i=this.boundingBox,r=e.boundingBox;return!(!rs(i.directions[0],i,r)||!rs(i.directions[1],i,r)||!rs(i.directions[2],i,r)||!rs(r.directions[0],i,r)||!rs(r.directions[1],i,r)||!rs(r.directions[2],i,r)||!rs(b.Cross(i.directions[0],r.directions[0]),i,r)||!rs(b.Cross(i.directions[0],r.directions[1]),i,r)||!rs(b.Cross(i.directions[0],r.directions[2]),i,r)||!rs(b.Cross(i.directions[1],r.directions[0]),i,r)||!rs(b.Cross(i.directions[1],r.directions[1]),i,r)||!rs(b.Cross(i.directions[1],r.directions[2]),i,r)||!rs(b.Cross(i.directions[2],r.directions[0]),i,r)||!rs(b.Cross(i.directions[2],r.directions[1]),i,r)||!rs(b.Cross(i.directions[2],r.directions[2]),i,r))}};un._TmpVector3=dn(2,b.Zero)});function ak(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,QA=M(()=>{kt();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([Ms.filter((...n)=>!Array.isArray(n[0]))],gm,"extractMinAndMax",null)});var Ps,Sg=M(()=>{ki();Ky();_m();QA();Gh();Ps=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 ts(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(D.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=ak(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(()=>{kt();Ge();ki();hn();zt();Pt();Vt();Yy();K_();Sg();Tg=class{},Ce=class n{constructor(){this.uniqueId=0,this.metadata={},this._applyTo=rk(this._applyToCoroutine.bind(this)),this.uniqueId=n._UniqueIdGenerator,n._UniqueIdGenerator++}set(e,t){switch(e.length||J.Warn(`Setting vertex data kind '${t}' with an empty array`),t){case D.PositionKind:this.positions=e;break;case D.NormalKind:this.normals=e;break;case D.TangentKind:this.tangents=e;break;case D.UVKind:this.uvs=e;break;case D.UV2Kind:this.uvs2=e;break;case D.UV3Kind:this.uvs3=e;break;case D.UV4Kind:this.uvs4=e;break;case D.UV5Kind:this.uvs5=e;break;case D.UV6Kind:this.uvs6=e;break;case D.ColorKind:this.colors=e;break;case D.MatricesIndicesKind:this.matricesIndices=e;break;case D.MatricesWeightsKind:this.matricesWeights=e;break;case D.MatricesIndicesExtraKind:this.matricesIndicesExtra=e;break;case D.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(D.PositionKind,this.positions,t),i&&(yield)),this.normals&&(e.setVerticesData(D.NormalKind,this.normals,t),i&&(yield)),this.tangents&&(e.setVerticesData(D.TangentKind,this.tangents,t),i&&(yield)),this.uvs&&(e.setVerticesData(D.UVKind,this.uvs,t),i&&(yield)),this.uvs2&&(e.setVerticesData(D.UV2Kind,this.uvs2,t),i&&(yield)),this.uvs3&&(e.setVerticesData(D.UV3Kind,this.uvs3,t),i&&(yield)),this.uvs4&&(e.setVerticesData(D.UV4Kind,this.uvs4,t),i&&(yield)),this.uvs5&&(e.setVerticesData(D.UV5Kind,this.uvs5,t),i&&(yield)),this.uvs6&&(e.setVerticesData(D.UV6Kind,this.uvs6,t),i&&(yield)),this.colors){let r=this.positions&&this.colors.length===this.positions.length?3:4;e.setVerticesData(D.ColorKind,this.colors,t,r),this.hasVertexAlpha&&e.hasVertexAlpha!==void 0&&(e.hasVertexAlpha=!0),i&&(yield)}if(this.matricesIndices&&(e.setVerticesData(D.MatricesIndicesKind,this.matricesIndices,t),i&&(yield)),this.matricesWeights&&(e.setVerticesData(D.MatricesWeightsKind,this.matricesWeights,t),i&&(yield)),this.matricesIndicesExtra&&(e.setVerticesData(D.MatricesIndicesExtraKind,this.matricesIndicesExtra,t),i&&(yield)),this.matricesWeightsExtra&&(e.setVerticesData(D.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 Ps(s.materialIndex,s.verticesStart,s.verticesCount,s.indexStart,s.indexCount,r)}return this}_update(e,t,i){return this.positions&&e.updateVerticesData(D.PositionKind,this.positions,t,i),this.normals&&e.updateVerticesData(D.NormalKind,this.normals,t,i),this.tangents&&e.updateVerticesData(D.TangentKind,this.tangents,t,i),this.uvs&&e.updateVerticesData(D.UVKind,this.uvs,t,i),this.uvs2&&e.updateVerticesData(D.UV2Kind,this.uvs2,t,i),this.uvs3&&e.updateVerticesData(D.UV3Kind,this.uvs3,t,i),this.uvs4&&e.updateVerticesData(D.UV4Kind,this.uvs4,t,i),this.uvs5&&e.updateVerticesData(D.UV5Kind,this.uvs5,t,i),this.uvs6&&e.updateVerticesData(D.UV6Kind,this.uvs6,t,i),this.colors&&e.updateVerticesData(D.ColorKind,this.colors,t,i),this.matricesIndices&&e.updateVerticesData(D.MatricesIndicesKind,this.matricesIndices,t,i),this.matricesWeights&&e.updateVerticesData(D.MatricesWeightsKind,this.matricesWeights,t,i),this.matricesIndicesExtra&&e.updateVerticesData(D.MatricesIndicesExtraKind,this.matricesIndicesExtra,t,i),this.matricesWeightsExtra&&e.updateVerticesData(D.MatricesWeightsExtraKind,this.matricesWeightsExtra,t,i),this.indices&&e.setIndices(this.indices,null),this}static _TransformVector3Coordinates(e,t,i=0,r=e.length){let s=$.Vector3[0],a=$.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,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,L=C.vertexData.materialInfos?C.vertexData.materialInfos[0].materialIndex:0;return y>L?1:y===L?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,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(D.NormalKind,c.normals,e,t.map(g=>[g.vertexData.normals,g.transform])),r&&(yield)),c.tangents&&(this.tangents=n._MergeElement(D.TangentKind,c.tangents,e,t.map(g=>[g.vertexData.tangents,g.transform])),r&&(yield)),c.uvs&&(this.uvs=n._MergeElement(D.UVKind,c.uvs,e,t.map(g=>[g.vertexData.uvs,g.transform])),r&&(yield)),c.uvs2&&(this.uvs2=n._MergeElement(D.UV2Kind,c.uvs2,e,t.map(g=>[g.vertexData.uvs2,g.transform])),r&&(yield)),c.uvs3&&(this.uvs3=n._MergeElement(D.UV3Kind,c.uvs3,e,t.map(g=>[g.vertexData.uvs3,g.transform])),r&&(yield)),c.uvs4&&(this.uvs4=n._MergeElement(D.UV4Kind,c.uvs4,e,t.map(g=>[g.vertexData.uvs4,g.transform])),r&&(yield)),c.uvs5&&(this.uvs5=n._MergeElement(D.UV5Kind,c.uvs5,e,t.map(g=>[g.vertexData.uvs5,g.transform])),r&&(yield)),c.uvs6&&(this.uvs6=n._MergeElement(D.UV6Kind,c.uvs6,e,t.map(g=>[g.vertexData.uvs6,g.transform])),r&&(yield)),c.colors&&(this.colors=n._MergeElement(D.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(D.MatricesIndicesKind,c.matricesIndices,e,t.map(g=>[g.vertexData.matricesIndices,g.transform])),r&&(yield)),c.matricesWeights&&(this.matricesWeights=n._MergeElement(D.MatricesWeightsKind,c.matricesWeights,e,t.map(g=>[g.vertexData.matricesWeights,g.transform])),r&&(yield)),c.matricesIndicesExtra&&(this.matricesIndicesExtra=n._MergeElement(D.MatricesIndicesExtraKind,c.matricesIndicesExtra,e,t.map(g=>[g.vertexData.matricesIndicesExtra,g.transform])),r&&(yield)),c.matricesWeightsExtra&&(this.matricesWeightsExtra=n._MergeElement(D.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===D.PositionKind?n._TransformVector3Coordinates:e===D.NormalKind?n._TransformVector3Normals:e===D.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=D.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(D.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(D.NormalKind,this.normals),this.tangents&&i(D.TangentKind,this.tangents),this.uvs&&i(D.UVKind,this.uvs),this.uvs2&&i(D.UV2Kind,this.uvs2),this.uvs3&&i(D.UV3Kind,this.uvs3),this.uvs4&&i(D.UV4Kind,this.uvs4),this.uvs5&&i(D.UV5Kind,this.uvs5),this.uvs6&&i(D.UV6Kind,this.uvs6),this.colors&&i(D.ColorKind,this.colors),this.matricesIndices&&i(D.MatricesIndicesKind,this.matricesIndices),this.matricesWeights&&i(D.MatricesWeightsKind,this.matricesWeights),this.matricesIndicesExtra&&i(D.MatricesIndicesExtraKind,this.matricesIndicesExtra),this.matricesWeightsExtra&&i(D.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(D.PositionKind)&&(r.positions=e.getVerticesData(D.PositionKind,t,i)),e.isVerticesDataPresent(D.NormalKind)&&(r.normals=e.getVerticesData(D.NormalKind,t,i)),e.isVerticesDataPresent(D.TangentKind)&&(r.tangents=e.getVerticesData(D.TangentKind,t,i)),e.isVerticesDataPresent(D.UVKind)&&(r.uvs=e.getVerticesData(D.UVKind,t,i)),e.isVerticesDataPresent(D.UV2Kind)&&(r.uvs2=e.getVerticesData(D.UV2Kind,t,i)),e.isVerticesDataPresent(D.UV3Kind)&&(r.uvs3=e.getVerticesData(D.UV3Kind,t,i)),e.isVerticesDataPresent(D.UV4Kind)&&(r.uvs4=e.getVerticesData(D.UV4Kind,t,i)),e.isVerticesDataPresent(D.UV5Kind)&&(r.uvs5=e.getVerticesData(D.UV5Kind,t,i)),e.isVerticesDataPresent(D.UV6Kind)&&(r.uvs6=e.getVerticesData(D.UV6Kind,t,i)),e.isVerticesDataPresent(D.ColorKind)){let s=e.geometry||e,a=s.getVertexBuffer(D.ColorKind),o=s.getVerticesData(D.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([Ms.filter((...n)=>!Array.isArray(n[0]))],Ce,"_TransformVector3Normals",null);P([Ms.filter((...n)=>!Array.isArray(n[0]))],Ce,"_TransformVector4Normals",null);P([Ms.filter((...n)=>!Array.isArray(n[0]))],Ce,"_FlipFaces",null)});var Yr,$A=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,JA=M(()=>{Ge();zt();mr();ki();Sg();$A();_m();Ci();uf();QA();Ni();rn();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 D(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===D.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(D.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===D.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=LB(o,c,f,h,d,m,!0),_=new D(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(D.PositionKind)&&(e.positions=this._toNumberArray(this.getVerticesData(D.PositionKind)),this.isVertexBufferUpdatable(D.PositionKind)&&(e.positionsUpdatable=!0)),this.isVerticesDataPresent(D.NormalKind)&&(e.normals=this._toNumberArray(this.getVerticesData(D.NormalKind)),this.isVertexBufferUpdatable(D.NormalKind)&&(e.normalsUpdatable=!0)),this.isVerticesDataPresent(D.TangentKind)&&(e.tangents=this._toNumberArray(this.getVerticesData(D.TangentKind)),this.isVertexBufferUpdatable(D.TangentKind)&&(e.tangentsUpdatable=!0)),this.isVerticesDataPresent(D.UVKind)&&(e.uvs=this._toNumberArray(this.getVerticesData(D.UVKind)),this.isVertexBufferUpdatable(D.UVKind)&&(e.uvsUpdatable=!0)),this.isVerticesDataPresent(D.UV2Kind)&&(e.uvs2=this._toNumberArray(this.getVerticesData(D.UV2Kind)),this.isVertexBufferUpdatable(D.UV2Kind)&&(e.uvs2Updatable=!0)),this.isVerticesDataPresent(D.UV3Kind)&&(e.uvs3=this._toNumberArray(this.getVerticesData(D.UV3Kind)),this.isVertexBufferUpdatable(D.UV3Kind)&&(e.uvs3Updatable=!0)),this.isVerticesDataPresent(D.UV4Kind)&&(e.uvs4=this._toNumberArray(this.getVerticesData(D.UV4Kind)),this.isVertexBufferUpdatable(D.UV4Kind)&&(e.uvs4Updatable=!0)),this.isVerticesDataPresent(D.UV5Kind)&&(e.uvs5=this._toNumberArray(this.getVerticesData(D.UV5Kind)),this.isVertexBufferUpdatable(D.UV5Kind)&&(e.uvs5Updatable=!0)),this.isVerticesDataPresent(D.UV6Kind)&&(e.uvs6=this._toNumberArray(this.getVerticesData(D.UV6Kind)),this.isVertexBufferUpdatable(D.UV6Kind)&&(e.uvs6Updatable=!0)),this.isVerticesDataPresent(D.ColorKind)&&(e.colors=this._toNumberArray(this.getVerticesData(D.ColorKind)),this.isVertexBufferUpdatable(D.ColorKind)&&(e.colorsUpdatable=!0)),this.isVerticesDataPresent(D.MatricesIndicesKind)&&(e.matricesIndices=this._toNumberArray(this.getVerticesData(D.MatricesIndicesKind)),e.matricesIndicesExpanded=!0,this.isVertexBufferUpdatable(D.MatricesIndicesKind)&&(e.matricesIndicesUpdatable=!0)),this.isVerticesDataPresent(D.MatricesWeightsKind)&&(e.matricesWeights=this._toNumberArray(this.getVerticesData(D.MatricesWeightsKind)),this.isVertexBufferUpdatable(D.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(D.PositionKind,o,!1)}if(a.normalsAttrDesc&&a.normalsAttrDesc.count>0){let o=new Float32Array(e,a.normalsAttrDesc.offset,a.normalsAttrDesc.count);t.setVerticesData(D.NormalKind,o,!1)}if(a.tangetsAttrDesc&&a.tangetsAttrDesc.count>0){let o=new Float32Array(e,a.tangetsAttrDesc.offset,a.tangetsAttrDesc.count);t.setVerticesData(D.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(D.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(D.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(D.MatricesIndicesExtraKind,l,!1)}if(a.matricesWeightsAttrDesc&&a.matricesWeightsAttrDesc.count>0){let o=new Float32Array(e,a.matricesWeightsAttrDesc.offset,a.matricesWeightsAttrDesc.count);t.setVerticesData(D.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(D.MatricesIndicesKind,a,e.matricesIndices._updatable||e.matricesIndicesUpdatable)}else delete e.matricesIndices._isExpanded,delete e.matricesIndicesExpanded,t.setVerticesData(D.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(D.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(D.MatricesIndicesExtraKind,a,e.matricesIndicesExtra._updatable||e.matricesIndicesExtraUpdatable)}e.matricesWeights&&(n._CleanMatricesWeights(e,t),t.setVerticesData(D.MatricesWeightsKind,e.matricesWeights,e.matricesWeights._updatable)),e.matricesWeightsExtra&&t.setVerticesData(D.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(D.MatricesIndicesKind),a=t.getVerticesData(D.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(D.MatricesIndicesKind,s),e.matricesWeightsExtra&&t.setVerticesData(D.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(D.UVKind),e.hasUVs2&&r._delayInfo.push(D.UV2Kind),e.hasUVs3&&r._delayInfo.push(D.UV3Kind),e.hasUVs4&&r._delayInfo.push(D.UV4Kind),e.hasUVs5&&r._delayInfo.push(D.UV5Kind),e.hasUVs6&&r._delayInfo.push(D.UV6Kind),e.hasColors&&r._delayInfo.push(D.ColorKind),e.hasMatricesIndices&&r._delayInfo.push(D.MatricesIndicesKind),e.hasMatricesWeights&&r._delayInfo.push(D.MatricesWeightsKind),r._delayLoadingFunction=Ce.ImportVertexData):Ce.ImportVertexData(e,r),t.pushGeometry(r,!0),r}}});var ti,qh=M(()=>{kt();Vt();Rr();di();Ge();ea();zi();ti=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=$.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=$.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=$.Matrix[0];this.rotationQuaternion.toRotationMatrix(l);let c=$.Matrix[1];this.parent.getWorldMatrix().getRotationMatrixToRef(c),c.invert(),l.multiplyToRef(c,l),this.rotationQuaternion.fromRotationMatrix(l)}else{let l=$.Quaternion[0];ze.FromEulerVectorToRef(this.rotation,l);let c=$.Matrix[0];l.toRotationMatrix(c);let f=$.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=$.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=$.Quaternion[0],s=$.Vector3[0],a=$.Vector3[1],o=$.Matrix[1];j.IdentityToRef(o);let l=$.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=$.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=$.Vector3[0],s=$.Vector3[1],a=$.Vector3[2],o=$.Quaternion[0],l=$.Matrix[0],c=$.Matrix[1],f=$.Matrix[2],h=$.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=$.Quaternion[1],ze.RotationYawPitchRollToRef(this.rotation.y,this.rotation.x,this.rotation.z,r));let s=$.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=$.Matrix[1];j.ScalingToRef(a.x,a.y,a.z,c);let f=$.Matrix[0];l.toRotationMatrix(f),this._pivotMatrix.multiplyToRef(c,$.Matrix[4]),$.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(),$.Matrix[7])}else $.Matrix[7].copyFrom(s.getWorldMatrix());let c=$.Vector3[5],f=$.Vector3[6],h=$.Quaternion[0];$.Matrix[7].decompose(f,h,c),j.ScalingToRef(f.x,f.y,f.z,$.Matrix[7]),$.Matrix[7].setTranslation(c),n.BillboardUseParentOrientation&&(this._position.applyRotationQuaternionToRef(h,c),this._localMatrix.setTranslation(c)),this._localMatrix.multiplyToRef($.Matrix[7],this._worldMatrix)}else if(this._transformToBoneReferal){let c=this.parent;c.getSkeleton().prepare(),this._localMatrix.multiplyToRef(c.getFinalMatrix(),$.Matrix[6]),$.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=$.Vector3[0];this._worldMatrix.getTranslationToRef(c);let f=t.globalPosition;this._worldMatrix.invertToRef($.Matrix[1]);let h=$.Vector3[1];b.TransformCoordinatesToRef(f,$.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,$.Quaternion[0]),(this.billboardMode&n.BILLBOARDMODE_ALL)!==n.BILLBOARDMODE_ALL){let p=$.Vector3[1];$.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,$.Matrix[0])}else j.FromQuaternionToRef($.Quaternion[0],$.Matrix[0]);this._worldMatrix.setTranslationFromFloats(0,0,0),this._worldMatrix.multiplyToRef($.Matrix[0],this._worldMatrix),this._worldMatrix.setTranslation($.Vector3[0])}else{let c=$.Vector3[0];this._worldMatrix.getTranslationToRef(c),$.Matrix[1].copyFrom(t.getViewMatrix());let f=this.getScene().useRightHandedSystem;if(f&&$.Matrix[1].multiplyToRef(n._TmpRHRestore,$.Matrix[1]),$.Matrix[1].setTranslationFromFloats(0,0,0),$.Matrix[1].invertToRef($.Matrix[0]),(this.billboardMode&n.BILLBOARDMODE_ALL)!==n.BILLBOARDMODE_ALL){$.Matrix[0].decompose(void 0,$.Quaternion[0],void 0);let h=$.Vector3[1];$.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,$.Matrix[0])}this._worldMatrix.setTranslationFromFloats(0,0,0),this._worldMatrix.multiplyToRef($.Matrix[0],this._worldMatrix),this._worldMatrix.setTranslation($.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)}};ti.BILLBOARDMODE_NONE=0;ti.BILLBOARDMODE_X=1;ti.BILLBOARDMODE_Y=2;ti.BILLBOARDMODE_Z=4;ti.BILLBOARDMODE_ALL=7;ti.BILLBOARDMODE_USE_POSITION=128;ti.BillboardUseParentOrientation=!1;ti._TmpRotation=ze.Zero();ti._TmpScaling=b.Zero();ti._TmpTranslation=b.Zero();ti._TmpRHRestore=j.Scaling(1,1,-1);ti._LookAtVectorCache=new b(0,0,0);ti._RotationAxisCache=new ze;P([zr("position")],ti.prototype,"_position",void 0);P([zr("rotation")],ti.prototype,"_rotation",void 0);P([bB("rotationQuaternion")],ti.prototype,"_rotationQuaternion",void 0);P([zr("scaling")],ti.prototype,"_scaling",void 0);P([F("billboardMode")],ti.prototype,"_billboardMode",void 0);P([F()],ti.prototype,"scalingDeterminant",void 0);P([F("infiniteDistance")],ti.prototype,"_infiniteDistance",void 0);P([F()],ti.prototype,"ignoreNonUniformScaling",void 0);P([F()],ti.prototype,"reIntegrateRotationIntoRotationQuaternion",void 0)});var ex,ok=M(()=>{Ge();ex=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 lk(n){return Math.floor(n/8)}function ck(n){return 1<{tx=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=lk(e),i=ck(e);return(this._byteArray[t]&i)!==0}set(e,t){if(e>=this.size)throw new RangeError("Bit index out of range");let i=lk(e),r=ck(e);t?this._byteArray[i]|=r:this._byteArray[i]&=~r}}});var hk={};tt(hk,{OptimizeIndices:()=>Kae});function Kae(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{fk()});function jae(n,e,t){let i;switch(e){case D.PositionKind:i=r=>r.getPositions();break;case D.NormalKind:i=r=>r.getNormals();break;case D.TangentKind:i=r=>r.getTangents();break;case D.UVKind:i=r=>r.getUVs();break;case D.UV2Kind:i=r=>r.getUV2s();break;case D.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,$y,Sr,vm=M(()=>{kt();di();Ge();ki();mr();qh();sg();_m();pf();ok();hn();QA();zt();On();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}},$y=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 ex,this._enableDistantPicking=!1,this._rawBoundingInfo=null,this._sideOrientationHint=!1,this._wasActiveLastFrame=!1}},Sr=class n extends ti{static get BILLBOARDMODE_NONE(){return ti.BILLBOARDMODE_NONE}static get BILLBOARDMODE_X(){return ti.BILLBOARDMODE_X}static get BILLBOARDMODE_Y(){return ti.BILLBOARDMODE_Y}static get BILLBOARDMODE_Z(){return ti.BILLBOARDMODE_Z}static get BILLBOARDMODE_ALL(){return ti.BILLBOARDMODE_ALL}static get BILLBOARDMODE_USE_POSITION(){return ti.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 $y,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!==ti.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(D.MatricesIndicesKind)&&this.isVerticesDataPresent(D.MatricesWeightsKind)}_preActivate(){}_preActivateForIntermediateRendering(e){}_activate(e,t){return this._renderId=e,!0}_postActivate(){}_freeze(){}_unFreeze(){}getWorldMatrix(){return this._masterMesh&&this.billboardMode===ti.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&&jae(t,i,this.morphTargetManager),e.applySkeleton&&this.skeleton){let a=s(D.MatricesIndicesKind),o=s(D.MatricesWeightsKind);if(o&&a){let l=this.numBoneInfluencers>4,c=l?s(D.MatricesIndicesExtraKind):null,f=l?s(D.MatricesWeightsExtraKind):null,h=this.skeleton.getTransformMatrices(this);n._ApplySkeleton(t,i,h,a,o,c,f)}}if(e.updatePositionsArray!==!1&&i===D.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=$.Matrix[0],i=$.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 is,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=$.Matrix[5];o.invertToRef(l);let c=$.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(dk(),hk));return t(e),this.setIndices(e,this.getTotalVertices()),this}alignWithNormal(e,t){t||(t=Is.Y);let i=$.Vector3[0],r=$.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 qe("EdgesRenderer")}enableEdgesRendering(e,t,i){throw qe("EdgesRenderer")}getConnectedParticleSystems(){return this._scene.particleSystems.filter(e=>e.emitter===this)}};Sr.OCCLUSION_TYPE_NONE=0;Sr.OCCLUSION_TYPE_OPTIMISTIC=1;Sr.OCCLUSION_TYPE_STRICT=2;Sr.OCCLUSION_ALGORITHM_TYPE_ACCURATE=0;Sr.OCCLUSION_ALGORITHM_TYPE_CONSERVATIVE=1;Sr.CULLINGSTRATEGY_STANDARD=0;Sr.CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY=1;Sr.CULLINGSTRATEGY_OPTIMISTIC_INCLUSION=2;Sr.CULLINGSTRATEGY_OPTIMISTIC_INCLUSION_THEN_BSPHERE_ONLY=3;Sr.DefaultIsPickable=!0;P([Ms.filter((...n)=>!Array.isArray(n[0])&&!Array.isArray(n[3])&&!Array.isArray(n[4])&&!Array.isArray(n[5])&&!Array.isArray(n[6]))],Sr,"_ApplySkeleton",null);Ft("BABYLON.AbstractMesh",Sr)});var Fn,uk=M(()=>{kt();Rr();Vt();Fn=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()],Fn.prototype,"func",null);P([F()],Fn.prototype,"backFunc",null);P([F()],Fn.prototype,"funcRef",null);P([F()],Fn.prototype,"funcMask",null);P([F()],Fn.prototype,"opStencilFail",null);P([F()],Fn.prototype,"opDepthFail",null);P([F()],Fn.prototype,"opStencilDepthPass",null);P([F()],Fn.prototype,"backOpStencilFail",null);P([F()],Fn.prototype,"backOpDepthFail",null);P([F()],Fn.prototype,"backOpStencilDepthPass",null);P([F()],Fn.prototype,"mask",null);P([F()],Fn.prototype,"enabled",null)});function Bn(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 mk(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 Un(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=Ca.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(()=>{lg();Ge()});var ce,Oa=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 Tf(n,e,t){if(!n||n.LOGARITHMICDEPTH||n.indexOf&&n.indexOf("LOGARITHMICDEPTH")>=0){let i=t.activeCamera;i.mode===1&&J.Error("Logarithmic depth is not compatible with orthographic cameras!",20),e.setFloat("logarithmicDepthConstant",2/(Math.log(i.maxZ+1)/Math.LN2))}}var pk=M(()=>{Pt()});function Af(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(_k,n.getEngine().useExactSrgbConversions),t.setColor3("vFogColor",_k)):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"),Zh.NUM_MORPH_INFLUENCERS=f,Zh.NORMAL=s,Zh.TANGENT=a,Zh.UV=o,Zh.UV2=l,Zh.COLOR=c,Qh(t,i,Zh,r),f)}function Qh(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&&J.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 Vn(n,e){let t=n.morphTargetManager;!n||!t||e.setFloatArray("morphTargetInfluences",t.influences)}function xf(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 ix(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 Zae(n,e){return e.set(n),e}function Ls(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]),Zae(r,t.previousBones[n.uniqueId])))}}}function Qae(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 $ae(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&&$ae(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===ve.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 ve.EXPLICIT_MODE:t.REFLECTIONMAP_EXPLICIT=!0;break;case ve.PLANAR_MODE:t.REFLECTIONMAP_PLANAR=!0;break;case ve.PROJECTION_MODE:t.REFLECTIONMAP_PROJECTION=!0;break;case ve.SKYBOX_MODE:t.REFLECTIONMAP_SKYBOX=!0;break;case ve.SPHERICAL_MODE:t.REFLECTIONMAP_SPHERICAL=!0;break;case ve.EQUIRECTANGULAR_MODE:t.REFLECTIONMAP_EQUIRECTANGULAR=!0;break;case ve.FIXED_EQUIRECTANGULAR_MODE:t.REFLECTIONMAP_EQUIRECTANGULAR_FIXED=!0;break;case ve.FIXED_EQUIRECTANGULAR_MIRRORED_MODE:t.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED=!0;break;case ve.CUBIC_MODE:case ve.INVCUBIC_MODE:default:t.REFLECTIONMAP_CUBIC=!0,t.USE_LOCAL_REFLECTIONMAP_CUBIC=!!e.boundingBoxSize;break}e.coordinatesMode!==ve.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 Jae(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=roe(n,i);s!==!1&&(o=mk(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 eoe(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 toe(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 ioe(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&&eoe(n,e),r&&toe(n,e),a&&ioe(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();J_();ll();Oa();Vr();pk();_k={r:0,g:0,b:0},Zh={NUM_MORPH_INFLUENCERS:0,NORMAL:!1,TANGENT:!1,UV:!1,UV2:!1,COLOR:!1}});var Ee,kn=M(()=>{kt();Vt();Ci();di();Ni();Sg();pf();Pt();Qu();Gh();uk();Gn();Rr();tC();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&&J.Warn("Logarithmic depth has been requested for a material on a device that doesn't support it."),this._useLogarithmicDepth=e&&t,this._markAllSubMeshesAsMiscDirty()}get isVertexOutputInvariant(){return this._isVertexOutputInvariant}set isVertexOutputInvariant(e){this._isVertexOutputInvariant!==e&&(this._isVertexOutputInvariant=e,this._markAllSubMeshesAsMiscDirty())}_getDrawWrapper(){return this._drawWrapper}_setDrawWrapper(e){this._drawWrapper=e}constructor(e,t,i,r=!1){this.shadowDepthWrapper=null,this.allowShaderHotSwapping=!0,this._shaderLanguage=0,this._forceGLSL=!1,this._useVertexPulling=!1,this.metadata=null,this.reservedDataStore=null,this.checkReadyOnEveryCall=!1,this.checkReadyOnlyOnce=!1,this.state="",this._alpha=1,this._backFaceCulling=!0,this._cullBackFaces=!0,this._blockDirtyMechanism=!1,this.sideOrientation=null,this.onCompiled=null,this.onError=null,this.getRenderTargetTextures=null,this.doNotSerialize=!1,this._storeEffectOnSubMeshes=!1,this.animations=null,this.onDisposeObservable=new 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 Fn,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 ts(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,xf(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 Ps(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,gk=M(()=>{kn();uf();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 rx,vk=M(()=>{rx=class{constructor(e,t){this.distanceOrScreenCoverage=e,this.mesh=t}}});var Bm,nx,Jy,sx,eP,tP,fl,Z,yi=M(()=>{di();Ci();Q_();uf();Yy();al();Ge();zt();ea();ki();mr();JA();vm();Sg();kn();gk();$A();Rr();Pt();zi();hn();lm();vk();Bm=class{},nx=class{constructor(){this.batchCache=new sx(this),this.batchCacheReplacementModeInFrozenMode=new sx(this),this.instancesBufferSize=512*4}},Jy=class{constructor(){this.renderPasses={}}},sx=class{constructor(e){this.parent=e,this.mustReturn=!1,this.visibleInstances=new Array,this.renderSelf=[],this.hardwareInstancedRendering=[]}},eP=class{constructor(){this.instancesCount=0,this.matrixBuffer=null,this.previousMatrixBuffer=null,this.matrixBufferSize=512,this.matrixData=null,this.boundingVectors=[],this.worldMatrices=null}},tP=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},Z=class n extends Sr{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(D.PositionKind,this._internalMeshDataInfo._sourcePositions,!0),this._internalMeshDataInfo._sourceNormals&&this.setVerticesData(D.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 J.Warn("You cannot use a mesh as LOD level twice"),this;let i=new rx(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 Ps(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++)Ps.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(D.PositionKind);if(!i)return this;if(e(i),this.updateVerticesData(D.PositionKind,i,!1,!1),t){let r=this.getIndices(),s=this.getVerticesData(D.NormalKind);if(!s)return this;Ce.ComputeNormals(i,r,s),this.updateVerticesData(D.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(D.MatricesIndicesKind),u=this.getVerticesData(D.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[uy]||(A.ShadersStoreWGSL[uy]=cV);Yse={name:uy,shader:cV}});var hm,my=M(()=>{Ql();HC();hm=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(()=>(ly(),oy)):await Promise.resolve().then(()=>(hy(),fy));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(()=>(hV(),fV)):await Promise.resolve().then(()=>(lV(),oV)),await dU("rgbdEncode",e,t,i,1,5)}}});var py=M(()=>{AC();eg();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=jl.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 pV(n){let e=new DataView(n.buffer,n.byteOffset,n.byteLength),t=0;for(let a=0;adV)throw new Error(`Unsupported babylon environment map version "${n.version}". Latest supported version is "${dV}".`);return n.version===2||(n={...n,version:2,imageType:YA}),n}function Kse(n,e){e=pg(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 qse(n,e,t=YA){let i=n.getEngine();n.format=5,n.type=0,n.generateMipMaps=!0,n._cachedAnisotropicFilteringLevel=null,i.updateTextureSamplingMode(3,n),await gV(n,e,!0,t),n.isReady=!0}async function Zse(n,e,t,i=YA,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 gV(a,[e],!1,i),s.generateMipMapsForCubemap(a),a.isReady=!0}async function gV(n,e,t,i=YA){if(!_e.IsExponentOfTwo(n.width))throw new Error("Texture size must be a power of two");let r=_B(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(()=>(ly(),oy))):await Promise.resolve().then(()=>(hy(),fy)),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 mV(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=()=>{mV(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();wn();q_();Is();eg();Ps();Ql();Pt();my();FC();py();am();YA="image/png",dV=2,uV=[134,22,135,150,246,214,150,54]});var SV={};tt(SV,{_ENVTextureLoader:()=>_y});var _y,TV=M(()=>{EV();_y=class{constructor(){this.supportCascades=!1}loadCubeData(e,t,i,r,s){if(Array.isArray(e))return;let a=pV(e);if(a){t.width=a.width,t.height=a.width;try{vV(t,a),_V(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 rc,AV=M(()=>{Ge();rc=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:_}}};rc.FACE_LEFT=[new b(-1,-1,-1),new b(1,-1,-1),new b(-1,1,-1),new b(1,1,-1)];rc.FACE_RIGHT=[new b(1,-1,1),new b(-1,-1,1),new b(1,1,1),new b(-1,1,1)];rc.FACE_FRONT=[new b(1,-1,-1),new b(1,-1,1),new b(1,1,-1),new b(1,1,1)];rc.FACE_BACK=[new b(-1,-1,1),new b(-1,-1,-1),new b(-1,1,1),new b(-1,1,-1)];rc.FACE_DOWN=[new b(1,1,-1),new b(1,1,1),new b(-1,1,-1),new b(-1,1,1)];rc.FACE_UP=[new b(-1,-1,-1),new b(-1,-1,1),new b(1,-1,-1),new b(1,-1,1)]});function Qse(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 xV(n,e,t,i,r,s){r>0?(r=Qse(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 gy(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 bV(n,e){return $se(n,e)}function $se(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 Jse(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{AV()});var MV={};tt(MV,{_HDRTextureLoader:()=>vy});var vy,CV=M(()=>{IV();vy=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=RV(r),a=bV(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 _o,yV=M(()=>{Pt();_o=class n{constructor(e,t){if(this.data=e,this.isInvalid=!1,!n.IsValid(e)){this.isInvalid=!0,J.Error("texture missing KTX identifier");return}let i=Uint32Array.BYTES_PER_ELEMENT,r=new DataView(this.data.buffer,this.data.byteOffset+12,13*i),a=r.getUint32(0,!0)===67305985;if(this.glType=r.getUint32(1*i,a),this.glTypeSize=r.getUint32(2*i,a),this.glFormat=r.getUint32(3*i,a),this.glInternalFormat=r.getUint32(4*i,a),this.glBaseInternalFormat=r.getUint32(5*i,a),this.pixelWidth=r.getUint32(6*i,a),this.pixelHeight=r.getUint32(7*i,a),this.pixelDepth=r.getUint32(8*i,a),this.numberOfArrayElements=r.getUint32(9*i,a),this.numberOfFaces=r.getUint32(10*i,a),this.numberOfMipmapLevels=r.getUint32(11*i,a),this.bytesOfKeyValueData=r.getUint32(12*i,a),this.glType!==0){J.Error("only compressed formats currently supported"),this.isInvalid=!0;return}else this.numberOfMipmapLevels=Math.max(1,this.numberOfMipmapLevels);if(this.pixelHeight===0||this.pixelDepth!==0){J.Error("only 2D textures currently supported"),this.isInvalid=!0;return}if(this.numberOfArrayElements!==0){J.Error("texture arrays not currently supported"),this.isInvalid=!0;return}if(this.numberOfFaces!==t){J.Error("number of faces expected"+t+", but found "+this.numberOfFaces),this.isInvalid=!0;return}this.loadType=n.COMPRESSED_2D}uploadLevels(e,t){switch(this.loadType){case n.COMPRESSED_2D:this._upload2DCompressedLevels(e,t);break;case n.TEX_2D:case n.COMPRESSED_3D:case n.TEX_3D:}}_upload2DCompressedLevels(e,t){let i=n.HEADER_LEN+this.bytesOfKeyValueData,r=this.pixelWidth,s=this.pixelHeight,a=t?this.numberOfMipmapLevels:1;for(let o=0;o=12){let t=new Uint8Array(e.buffer,e.byteOffset,12);if(t[0]===171&&t[1]===75&&t[2]===84&&t[3]===88&&t[4]===32&&t[5]===49&&t[6]===49&&t[7]===187&&t[8]===13&&t[9]===10&&t[10]===26&&t[11]===10)return!0}return!1}};_o.HEADER_LEN=64;_o.COMPRESSED_2D=0;_o.COMPRESSED_3D=1;_o.TEX_2D=2;_o.TEX_3D=3});var Ey,_g,PV=M(()=>{Ey=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})})}},_g=class n extends Ey{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))})})}};_g.DefaultOptions={idleTimeElapsedBeforeRelease:1e3}});var LV,dm,DV,OV=M(()=>{(function(n){n[n.ETC1S=0]="ETC1S",n[n.UASTC4x4=1]="UASTC4x4"})(LV||(LV={}));(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"})(dm||(dm={}));(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"})(DV||(DV={}))});function gg(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 NV(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),gg(i)),t.data.wasmBinaries&&gg(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 wV(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 FV=M(()=>{});var Sy,nc,BV=M(()=>{PV();Ci();OV();FV();Sy=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:[dm.BC1_RGB,dm.BC3_RGBA],yes:{transcodeFormat:dm.RGBA32,engineFormat:32856,roundToMultiple4:!1}}}),this._ktx2DecoderOptions=e,e}},nc=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=`${gg}(${NV})()`,s=URL.createObjectURL(new Blob([r],{type:"application/javascript"}));i(new _g(e,async()=>await wV(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,gg(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}};nc.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};nc.DefaultNumWorkers=nc.GetDefaultNumWorkers();nc.DefaultDecoderOptions=new Sy});var Ay={};tt(Ay,{_KTXTextureLoader:()=>Ty});function eae(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 Ty,xy=M(()=>{yV();BV();Pt();Ty=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 _o(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(_o.IsValid(e)){t._invertVScale=!t.invertY;let s=new _o(e,1),a=eae(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 nc.IsValid(e)?new nc(t.getEngine())._uploadAsync(e,t,r).then(()=>{i(t.width,t.height,t.generateMipMaps,!0,()=>{},!1)},a=>{J.Warn(`Failed to load KTX2 texture data: ${a.message}`),i(0,0,!1,!1,()=>{},!0)}):(J.Error("texture missing KTX identifier"),i(0,0,!1,!1,()=>{},!0))}}});function 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 Ry(n,e){if(e.length<19){J.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){J.Error("Unable to load TGA file - Not enough data");return}t+=i.id_length;let r=!1,s=!1,a=!1;switch(i.image_type){case nae:r=!0;case tae:s=!0;break;case sae:r=!0;case iae:break;case aae:r=!0;case rae: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>lae){default:case hae:h=0,u=1,_=i.width,d=0,m=1,p=i.height;break;case cae:h=0,u=1,_=i.width,d=i.height-1,m=-1,p=-1;break;case dae:h=i.width-1,u=-1,_=-1,d=0,m=1,p=i.height;break;case fae: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=Eae[g](i,f,o,d,m,p,h,u,_);n.getEngine()._uploadDataToTextureDirectly(n,v)}function uae(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 mae(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 pae(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 _ae(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 gae(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 vae(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 tae,iae,rae,nae,sae,aae,oae,lae,cae,fae,hae,dae,Eae,UV=M(()=>{Pt();tae=1,iae=2,rae=3,nae=9,sae=10,aae=11,oae=48,lae=4,cae=0,fae=1,hae=2,dae=3;Eae={GetTGAHeader:KA,UploadContent:Ry,_getImageData8bits:uae,_getImageData16bits:mae,_getImageData24bits:pae,_getImageData32bits:_ae,_getImageDataGrey8bits:gae,_getImageDataGrey16bits:vae}});var VV={};tt(VV,{_TGATextureLoader:()=>by});var by,GV=M(()=>{UV();by=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,()=>{Ry(t,r)})}}});var vg=M(()=>{});function Tae(){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 go(n,e){let t=n.getInt32(e.value,!0);return e.value+=4,t}function ea(n,e){let t=n.getUint32(e.value,!0);return e.value+=4,t}function Eg(n,e){let t=n.getUint8(e.value);return e.value+=1,t}function um(n,e){let t=n.getUint16(e.value,!0);return e.value+=2,t}function My(n,e){let t=n[e.value];return e.value+=1,t}function HV(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 zV(n,e){return Aae(um(n,e))}function Aae(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 xae(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),jA.floatView[0]=n;let e=jA.uint32View[0],t=e>>23&511;return jA.baseTable[t]+((e&8388607)>>jA.shiftTable[t])}function XV(n,e){return xae(Tn(n,e))}function Rae(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 bae(n,e){let t=go(n,e),i=ea(n,e);return[t,i]}function Iae(n,e){let t=ea(n,e),i=ea(n,e);return[t,i]}function Mae(n,e){let t=Tn(n,e),i=Tn(n,e);return[t,i]}function Cae(n,e){let t=Tn(n,e),i=Tn(n,e),r=Tn(n,e);return[t,i,r]}function yae(n,e,t){let i=e.value,r=[];for(;e.values||(e[r++]=n[t++],r>s));)e[r++]=n[i++]}var al,Iy,jA,Sg=M(()=>{wn();vg();(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"})(al||(al={}));(function(n){n[n.INCREASING_Y=0]="INCREASING_Y",n[n.DECREASING_Y=1]="DECREASING_Y"})(Iy||(Iy={}));jA=Tae()});function Py(n,e){if(n.getUint32(0,!0)!=Nae)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=ea(n,e),f=YV(n,e,l,c);f===void 0?J.Warn(`Unknown header attribute type ${l}'.`):s[o]=f}}if((i&-5)!=0)throw new Error("Unsupported file format");return{version:t,spec:r,...s}}var Nae,KV=M(()=>{Pt();Sg();Nae=20000630});function tG(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 QV(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+Tg[t]>>1;Tg[t]=e,e=i}for(let t=0;t<65537;++t){let i=n[t];i>0&&(n[t]=i|Tg[i]++<<6)}}function Gae(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=QV(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=QV(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--}}Vae(s)}function iG(n){return n&63}function rG(n){return n>>6}function kae(n,e,t,i){for(;e<=t;e++){let r=rG(n[e]),s=iG(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 Wae(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=Ly(_.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=iG(n[_.p[g]]);for(;f=v&&rG(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=Ly(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 nG(n,e,t,i,r,s){let a={value:0},o=t.value,l=ea(e,t),c=ea(e,t);t.value+=4;let f=ea(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(Gae(n,t,u,l,c,h),f>8*(i-(t.value-o)))throw new Error("Wrong hufUncompress");kae(h,l,c,d),Wae(h,d,n,t,f,c,s,r,a)}function Oy(n){return n&65535}function $V(n){let e=Oy(n);return e>32767?e-65536:e}function mm(n,e){let t=$V(n),r=$V(e),s=t+(r&1)+(r>>1),a=s,o=s-r;return{a,b:o}}function pm(n,e){let t=Oy(n),i=Oy(e),r=t-(i>>1)&ZV;return{a:i+r-Bae&ZV,b:r}}function sG(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=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}else{let y=pm(n[E+e],n[I+e]);g=y.a,x=y.b,y=pm(n[R+e],n[C+e]),v=y.a,T=y.b,y=pm(g,v),n[E+e]=y.a,n[R+e]=y.b,y=pm(x,T),n[I+e]=y.a,n[C+e]=y.b}}if(t&c){let R=E+u,I;o?I=mm(n[E+e],n[R+e]):I=pm(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=mm(n[E+e],n[R+e]):I=pm(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 aG(n,e,t){for(let i=0;i{Sg();vg();eG=16,Bae=1<0;){let s=r.getInt8(i++);if(s<0){let a=-s;e-=a+1;for(let o=0;o{});function Ny(n){return new DataView(n.array.buffer,n.offset.value,n.size)}function hG(n){let e=n.viewer.buffer.slice(n.offset.value,n.offset.value+n.size),t=new Uint8Array(lG(e)),i=new Uint8Array(t.length);return Cy(t),yy(t,i),new DataView(i.buffer)}function wy(n){let e=n.array.slice(n.offset.value,n.offset.value+n.size),t=fflate.unzlibSync(e),i=new Uint8Array(t.length);return Cy(t),yy(t,i),new DataView(i.buffer)}function dG(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{oG();cG();Sg();vg()});var Da,ol,Fy=M(()=>{(function(n){n[n.Float=0]="Float",n[n.HalfFloat=1]="HalfFloat"})(Da||(Da={}));ol=class{};ol.DefaultOutputType=Da.HalfFloat;ol.FFLATEUrl="https://unpkg.com/fflate@0.8.2"});async function By(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 al.NO_COMPRESSION:r.lines=1,r.uncompress=Ny;break;case al.RLE_COMPRESSION:r.lines=1,r.uncompress=hG;break;case al.ZIPS_COMPRESSION:r.lines=1,r.uncompress=wy,await _e.LoadScriptAsync(ol.FFLATEUrl);break;case al.ZIP_COMPRESSION:r.lines=16,r.uncompress=wy,await _e.LoadScriptAsync(ol.FFLATEUrl);break;case al.PIZ_COMPRESSION:r.lines=32,r.uncompress=uG;break;case al.PXR24_COMPRESSION:r.lines=16,r.uncompress=dG,await _e.LoadScriptAsync(ol.FFLATEUrl);break;default:throw new Error(al[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 Da.Float:r.getter=zV,r.inputSize=2;break;case Da.HalfFloat:r.getter=um,r.inputSize=2;break}else if(r.type===2)switch(i){case Da.Float:r.getter=Tn,r.inputSize=4;break;case Da.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 Uy(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{Sg();mG();vg();Ci();Fy()});var _G={};tt(_G,{ReadExrDataAsync:()=>Hae,_ExrTextureLoader:()=>Vy});async function Hae(n){let e=new DataView(n),t={value:0},i=Py(e,t);try{let r=await By(i,e,t,Da.Float);return Uy(r,i,e,t),r.byteArray?{width:i.dataWindow.xMax-i.dataWindow.xMin+1,height:i.dataWindow.yMax-i.dataWindow.yMin+1,data:new Float32Array(r.byteArray)}:(J.Error("Failed to decode EXR data: No byte array available."),{width:0,height:0,data:null})}catch(r){J.Error("Failed to load EXR data: ",r)}return{width:0,height:0,data:null}}var Vy,gG=M(()=>{KV();pG();Fy();Pt();Vy=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=Py(r,s);By(a,r,s,ol.DefaultOutputType).then(o=>{Uy(o,a,r,s);let l=a.dataWindow.xMax-a.dataWindow.xMin+1,c=a.dataWindow.yMax-a.dataWindow.yMin+1;i(l,c,t.generateMipMaps,!1,()=>{let f=t.getEngine();t.format=a.format,t.type=o.textureType,t.invertY=!1,t._gammaSpace=!a.linearSpace,o.byteArray&&f._uploadDataToTextureDirectly(t,o.byteArray,0,0,void 0,!0)})}).catch(o=>{J.Error("Failed to load EXR texture: ",o)})}}});function sc(n,e){zae(n)&&J.Warn(`Extension with the name '${n}' already exists`),$A.set(n,e)}function zae(n){return $A.delete(n)}function JA(n,e){(e==="image/ktx"||e==="image/ktx2")&&(n=".ktx"),$A.has(n)||(n.endsWith(".ies")&&sc(".ies",async()=>await Promise.resolve().then(()=>(_U(),pU)).then(i=>new i._IESTextureLoader)),n.endsWith(".dds")&&sc(".dds",async()=>await Promise.resolve().then(()=>(vU(),gU)).then(i=>new i._DDSTextureLoader)),n.endsWith(".basis")&&sc(".basis",async()=>await Promise.resolve().then(()=>(RU(),xU)).then(i=>new i._BasisTextureLoader)),n.endsWith(".env")&&sc(".env",async()=>await Promise.resolve().then(()=>(TV(),SV)).then(i=>new i._ENVTextureLoader)),n.endsWith(".hdr")&&sc(".hdr",async()=>await Promise.resolve().then(()=>(CV(),MV)).then(i=>new i._HDRTextureLoader)),(n.endsWith(".ktx")||n.endsWith(".ktx2"))&&(sc(".ktx",async()=>await Promise.resolve().then(()=>(xy(),Ay)).then(i=>new i._KTXTextureLoader)),sc(".ktx2",async()=>await Promise.resolve().then(()=>(xy(),Ay)).then(i=>new i._KTXTextureLoader))),n.endsWith(".tga")&&sc(".tga",async()=>await Promise.resolve().then(()=>(GV(),VV)).then(i=>new i._TGATextureLoader)),n.endsWith(".exr")&&sc(".exr",async()=>await Promise.resolve().then(()=>(gG(),_G)).then(i=>new i._ExrTextureLoader)));let t=$A.get(n);return t?Promise.resolve(t(e)):null}var $A,Gy=M(()=>{Pt();$A=new Map});function vG(n){let e=n.split("?")[0],t=e.lastIndexOf(".");return t>-1?e.substring(t).toLowerCase():""}var EG=M(()=>{});var SG=M(()=>{Is();Pt();Kl();Z_();Vr();Gy();EG();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=ff();lm(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:vG(n),x=JA(v),T=(S,R)=>{_.dispose(),s?s(S,R):S&&J.Warn(S)},E=(S,R)=>{n===g?S&&T(S.status+" "+S.statusText,R):(J.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 BG={};tt(BG,{DDSTools:()=>fo});function ex(n){return n.charCodeAt(0)+(n.charCodeAt(1)<<8)+(n.charCodeAt(2)<<16)+(n.charCodeAt(3)<<24)}function Yae(n){return String.fromCharCode(n&255,n>>8&255,n>>16&255,n>>24&255)}var Xae,TG,AG,xG,RG,bG,IG,MG,CG,ky,yG,PG,LG,DG,Kae,Wy,jae,qae,OG,NG,Hy,wG,zy,FG,Zae,Qae,$ae,Jae,eoe,toe,ioe,fo,jC=M(()=>{wn();Pt();AC();HC();SG();Xae=542327876,TG=131072,AG=512,xG=4,RG=64,bG=131072;IG=ex("DXT1"),MG=ex("DXT3"),CG=ex("DXT5"),ky=ex("DX10"),yG=113,PG=116,LG=2,DG=10,Kae=88,Wy=31,jae=0,qae=1,OG=2,NG=3,Hy=4,wG=7,zy=20,FG=21,Zae=22,Qae=23,$ae=24,Jae=25,eoe=26,toe=28,ioe=32,fo=class n{static GetDDSInfo(e){let t=new Int32Array(e.buffer,e.byteOffset,Wy),i=new Int32Array(e.buffer,e.byteOffset,Wy+4),r=1;t[OG]&TG&&(r=Math.max(1,t[wG]));let s=t[FG],a=s===ky?i[ioe]:0,o=0;switch(s){case yG:o=2;break;case PG:o=1;break;case ky:if(a===DG){o=2;break}if(a===LG){o=1;break}}return{width:t[Hy],height:t[NG],mipmapCount:r,isFourCC:(t[zy]&xG)===xG,isRGB:(t[zy]&RG)===RG,isLuminance:(t[zy]&bG)===bG,isCube:(t[toe]&AG)===AG,isCompressed:s===IG||s===MG||s===CG,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=jl.ConvertCubeMapToSphericalPolynomial({size:d[Hy],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}};fo.StoreLODInAlphaChannel=!1});var UG=M(()=>{es();Is();Pt();q_();eg();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 tl,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(()=>(jC(),BG)),_=[];for(let v=0;v{es();nA();bt.prototype.createUniformBuffer=function(n,e){let t=this._gl.createBuffer();if(!t)throw new Error("Unable to create uniform buffer");let i=new $o(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 $o(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 GG=M(()=>{Sa();Vr();Me.prototype.displayLoadingUI=function(){if(!ur())return;let n=this.loadingScreen;n&&n.displayLoadingUI()};Me.prototype.hideLoadingUI=function(){if(!ur())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 kG=M(()=>{Vr();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 Xy=M(()=>{Vr();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 WG=M(()=>{Vr();Xy();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 HG=M(()=>{Vr();Xy();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 zG=M(()=>{Vr();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{Vr();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 YG=M(()=>{Gy();Vr();Me.GetCompatibleTextureLoader=JA});function roe(n){!n||!n.setAttribute||(n.setAttribute("touch-action","none"),n.style.touchAction="none",n.style.webkitTapHighlightColor="transparent")}function KG(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||roe(e),!Me.audioEngine&&t.audioEngine&&Me.AudioEngineFactory&&(Me.audioEngine=Me.AudioEngineFactory(n.getRenderingCanvas(),n.getAudioContext(),n.getAudioDestination())),of()&&(n._onFullscreenChange=()=>{n.isFullscreen=!!document.fullscreenElement,n.isFullscreen&&n._pointerLockRequested&&e&&Yy(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 jG(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)),of()&&(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 qG(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 ZG(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 QG(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 $G(n){let e=n.requestFullscreen||n.webkitRequestFullscreen;e&&e.call(n)}function JG(){let n=document;document.exitFullscreen?document.exitFullscreen():n.webkitCancelFullScreen&&n.webkitCancelFullScreen()}function Yy(n){if(n.requestPointerLock){let e=n.requestPointerLock();e instanceof Promise?e.then(()=>{n.focus()}).catch(()=>{}):n.focus()}}function ek(){document.exitPointerLock&&document.exitPointerLock()}var tk=M(()=>{Sa();Vr();Ni()});var Ue,Ky=M(()=>{Is();Ni();es();$2();nA();Pt();lC();J2();rB();nB();sB();aB();cB();fB();hB();UG();VG();GG();kG();WG();HG();zG();dC();XG();YG();Vr();tk();sy();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 aA,this._drawCalls=new sl,e&&(this._features.supportRenderPasses=!0)}_initGLContext(){super._initGLContext(),this._rescalePostProcess=null}_sharedInit(e){super._sharedInit(e),KG(this,e,this._creationOptions)}resizeImageBitmap(e,t,i){return QG(this,e,t,i)}async _createImageBitmapFromSource(e,t){return await ZG(this,e,t)}switchFullscreen(e){this.isFullscreen?this.exitFullscreen():this.enterFullscreen(e)}enterFullscreen(e){this.isFullscreen||(this._pointerLockRequested=e,this._renderingCanvas&&$G(this._renderingCanvas))}exitFullscreen(){this.isFullscreen&&JG()}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 qG(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&&Yy(this._renderingCanvas)}exitPointerlock(){ek()}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 zu(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){J.Error("WebGL 1 does not support texture comparison.");return}let i=this._gl;e.isCube?(this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP,e,!0),t===0?(i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_COMPARE_FUNC,515),i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_COMPARE_MODE,i.NONE)):(i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_COMPARE_FUNC,t),i.texParameteri(i.TEXTURE_CUBE_MAP,i.TEXTURE_COMPARE_MODE,i.COMPARE_REF_TO_TEXTURE)),this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP,null)):(this._bindTextureDirectly(this._gl.TEXTURE_2D,e,!0),t===0?(i.texParameteri(i.TEXTURE_2D,i.TEXTURE_COMPARE_FUNC,515),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_COMPARE_MODE,i.NONE)):(i.texParameteri(i.TEXTURE_2D,i.TEXTURE_COMPARE_FUNC,t),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_COMPARE_MODE,i.COMPARE_REF_TO_TEXTURE)),this._bindTextureDirectly(this._gl.TEXTURE_2D,null)),e._comparisonFunction=t}createInstancesBuffer(e){let t=this._gl.createBuffer();if(!t)throw new Error("Unable to create instance buffer");let i=new $o(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)=>{Zo(()=>{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(),jG(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 jy,_i,ta=M(()=>{kt();Ge();Vt();di();Ni();hn();Rr();jy=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 jy,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 qe("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 qy(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 ik(n=25){let e;return(t,i,r)=>{let s=performance.now();e===void 0||s-e>n?(e=s,setTimeout(()=>{qy(t,i,r)},0)):qy(t,i,r)}}function rk(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 xg(n,e){let t;return rk(n,qy,i=>t=i,i=>{throw i},e),t}async function nk(n,e,t){return await new Promise((i,r)=>{rk(n,e,i,r,t)})}function sk(n,e){return(...t)=>xg(n(...t),e)}var Zy=M(()=>{});var mt,ll=M(()=>{kt();Vt();co();Ci();di();Ge();ta();Pt();zi();hn();tm();hA();Rr();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 ao(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?(J.Error("You're trying to reuse a post process not defined as reusable."),0):(t==null||t<0?this._postProcesses.push(e):this._postProcesses[t]===null?this._postProcesses[t]=e:this._postProcesses.splice(t,0,e),this._cascadePostProcessesToRigCams(),this._scene.prePassRenderer&&this._scene.prePassRenderer.markAsDirty(),this._postProcesses.indexOf(e))}detachPostProcess(e){let t=this._postProcesses.indexOf(e);t!==-1&&(this._postProcesses[t]=null),this._scene.prePassRenderer&&this._scene.prePassRenderer.markAsDirty(),this._cascadePostProcessesToRigCams()}getWorldMatrix(){return this._isSynchronizedViewMatrix()?this._worldMatrix:(this.getViewMatrix(),this._worldMatrix)}_getViewMatrix(){return 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?cf.GetPlanesToRef(this._transformMatrix,this._frustumPlanes):this._frustumPlanes=cf.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 qe("Ray")}getForwardRayToRef(e,t=100,i,r){throw qe("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 qe("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([Xr("position")],mt.prototype,"_position",void 0);P([Xr("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,Qy=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 Tf,$y=M(()=>{Jo();Ge();Nn();Tf=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}};Tf._TmpVector3=dn(3,b.Zero)});var _m,ak=M(()=>{Jo();Ge();_m=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{Jo();Ge();$y();ak();Jy={min:0,max:0},eP={min:0,max:0},ok=(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},ns=(n,e,t)=>(ok(n,e,Jy),ok(n,t,eP),!(Jy.min>eP.max||eP.min>Jy.max)),un=class n{constructor(e,t,i){this._isLocked=!1,this.boundingBox=new Tf(e,t,i),this.boundingSphere=new _m(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=$.Matrix[0];this.boundingBox.getWorldMatrix().invertToRef(t);let i=$.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(!_m.Intersects(this.boundingSphere,e.boundingSphere)||!Tf.Intersects(this.boundingBox,e.boundingBox))return!1;if(!t)return!0;let i=this.boundingBox,r=e.boundingBox;return!(!ns(i.directions[0],i,r)||!ns(i.directions[1],i,r)||!ns(i.directions[2],i,r)||!ns(r.directions[0],i,r)||!ns(r.directions[1],i,r)||!ns(r.directions[2],i,r)||!ns(b.Cross(i.directions[0],r.directions[0]),i,r)||!ns(b.Cross(i.directions[0],r.directions[1]),i,r)||!ns(b.Cross(i.directions[0],r.directions[2]),i,r)||!ns(b.Cross(i.directions[1],r.directions[0]),i,r)||!ns(b.Cross(i.directions[1],r.directions[1]),i,r)||!ns(b.Cross(i.directions[1],r.directions[2]),i,r)||!ns(b.Cross(i.directions[2],r.directions[0]),i,r)||!ns(b.Cross(i.directions[2],r.directions[1]),i,r)||!ns(b.Cross(i.directions[2],r.directions[2]),i,r))}};un._TmpVector3=dn(2,b.Zero)});function lk(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 vm.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 tx(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),vm.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 vm,ix=M(()=>{kt();Ge();Vt();vm=class{static extractMinAndMaxIndexed(e,t,i,r,s,a){for(let o=i;o!Array.isArray(n[0])&&!Array.isArray(n[1]))],vm,"extractMinAndMaxIndexed",null);P([Cs.filter((...n)=>!Array.isArray(n[0]))],vm,"extractMinAndMax",null)});var Ls,Rg=M(()=>{ki();Qy();gm();ix();Hh();Ls=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 is(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(D.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=lk(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 bg,Ce,pr=M(()=>{kt();Ge();ki();hn();zt();Pt();Vt();Zy();Q_();Rg();bg=class{},Ce=class n{constructor(){this.uniqueId=0,this.metadata={},this._applyTo=sk(this._applyToCoroutine.bind(this)),this.uniqueId=n._UniqueIdGenerator,n._UniqueIdGenerator++}set(e,t){switch(e.length||J.Warn(`Setting vertex data kind '${t}' with an empty array`),t){case D.PositionKind:this.positions=e;break;case D.NormalKind:this.normals=e;break;case D.TangentKind:this.tangents=e;break;case D.UVKind:this.uvs=e;break;case D.UV2Kind:this.uvs2=e;break;case D.UV3Kind:this.uvs3=e;break;case D.UV4Kind:this.uvs4=e;break;case D.UV5Kind:this.uvs5=e;break;case D.UV6Kind:this.uvs6=e;break;case D.ColorKind:this.colors=e;break;case D.MatricesIndicesKind:this.matricesIndices=e;break;case D.MatricesWeightsKind:this.matricesWeights=e;break;case D.MatricesIndicesExtraKind:this.matricesIndicesExtra=e;break;case D.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(D.PositionKind,this.positions,t),i&&(yield)),this.normals&&(e.setVerticesData(D.NormalKind,this.normals,t),i&&(yield)),this.tangents&&(e.setVerticesData(D.TangentKind,this.tangents,t),i&&(yield)),this.uvs&&(e.setVerticesData(D.UVKind,this.uvs,t),i&&(yield)),this.uvs2&&(e.setVerticesData(D.UV2Kind,this.uvs2,t),i&&(yield)),this.uvs3&&(e.setVerticesData(D.UV3Kind,this.uvs3,t),i&&(yield)),this.uvs4&&(e.setVerticesData(D.UV4Kind,this.uvs4,t),i&&(yield)),this.uvs5&&(e.setVerticesData(D.UV5Kind,this.uvs5,t),i&&(yield)),this.uvs6&&(e.setVerticesData(D.UV6Kind,this.uvs6,t),i&&(yield)),this.colors){let r=this.positions&&this.colors.length===this.positions.length?3:4;e.setVerticesData(D.ColorKind,this.colors,t,r),this.hasVertexAlpha&&e.hasVertexAlpha!==void 0&&(e.hasVertexAlpha=!0),i&&(yield)}if(this.matricesIndices&&(e.setVerticesData(D.MatricesIndicesKind,this.matricesIndices,t),i&&(yield)),this.matricesWeights&&(e.setVerticesData(D.MatricesWeightsKind,this.matricesWeights,t),i&&(yield)),this.matricesIndicesExtra&&(e.setVerticesData(D.MatricesIndicesExtraKind,this.matricesIndicesExtra,t),i&&(yield)),this.matricesWeightsExtra&&(e.setVerticesData(D.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 Ls(s.materialIndex,s.verticesStart,s.verticesCount,s.indexStart,s.indexCount,r)}return this}_update(e,t,i){return this.positions&&e.updateVerticesData(D.PositionKind,this.positions,t,i),this.normals&&e.updateVerticesData(D.NormalKind,this.normals,t,i),this.tangents&&e.updateVerticesData(D.TangentKind,this.tangents,t,i),this.uvs&&e.updateVerticesData(D.UVKind,this.uvs,t,i),this.uvs2&&e.updateVerticesData(D.UV2Kind,this.uvs2,t,i),this.uvs3&&e.updateVerticesData(D.UV3Kind,this.uvs3,t,i),this.uvs4&&e.updateVerticesData(D.UV4Kind,this.uvs4,t,i),this.uvs5&&e.updateVerticesData(D.UV5Kind,this.uvs5,t,i),this.uvs6&&e.updateVerticesData(D.UV6Kind,this.uvs6,t,i),this.colors&&e.updateVerticesData(D.ColorKind,this.colors,t,i),this.matricesIndices&&e.updateVerticesData(D.MatricesIndicesKind,this.matricesIndices,t,i),this.matricesWeights&&e.updateVerticesData(D.MatricesWeightsKind,this.matricesWeights,t,i),this.matricesIndicesExtra&&e.updateVerticesData(D.MatricesIndicesExtraKind,this.matricesIndicesExtra,t,i),this.matricesWeightsExtra&&e.updateVerticesData(D.MatricesWeightsExtraKind,this.matricesWeightsExtra,t,i),this.indices&&e.setIndices(this.indices,null),this}static _TransformVector3Coordinates(e,t,i=0,r=e.length){let s=$.Vector3[0],a=$.Vector3[1];for(let o=i;o({vertexData:o})):[{vertexData:e}];return xg(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,L=C.vertexData.materialInfos?C.vertexData.materialInfos[0].materialIndex:0;return y>L?1:y===L?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 bg;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(D.NormalKind,c.normals,e,t.map(g=>[g.vertexData.normals,g.transform])),r&&(yield)),c.tangents&&(this.tangents=n._MergeElement(D.TangentKind,c.tangents,e,t.map(g=>[g.vertexData.tangents,g.transform])),r&&(yield)),c.uvs&&(this.uvs=n._MergeElement(D.UVKind,c.uvs,e,t.map(g=>[g.vertexData.uvs,g.transform])),r&&(yield)),c.uvs2&&(this.uvs2=n._MergeElement(D.UV2Kind,c.uvs2,e,t.map(g=>[g.vertexData.uvs2,g.transform])),r&&(yield)),c.uvs3&&(this.uvs3=n._MergeElement(D.UV3Kind,c.uvs3,e,t.map(g=>[g.vertexData.uvs3,g.transform])),r&&(yield)),c.uvs4&&(this.uvs4=n._MergeElement(D.UV4Kind,c.uvs4,e,t.map(g=>[g.vertexData.uvs4,g.transform])),r&&(yield)),c.uvs5&&(this.uvs5=n._MergeElement(D.UV5Kind,c.uvs5,e,t.map(g=>[g.vertexData.uvs5,g.transform])),r&&(yield)),c.uvs6&&(this.uvs6=n._MergeElement(D.UV6Kind,c.uvs6,e,t.map(g=>[g.vertexData.uvs6,g.transform])),r&&(yield)),c.colors&&(this.colors=n._MergeElement(D.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(D.MatricesIndicesKind,c.matricesIndices,e,t.map(g=>[g.vertexData.matricesIndices,g.transform])),r&&(yield)),c.matricesWeights&&(this.matricesWeights=n._MergeElement(D.MatricesWeightsKind,c.matricesWeights,e,t.map(g=>[g.vertexData.matricesWeights,g.transform])),r&&(yield)),c.matricesIndicesExtra&&(this.matricesIndicesExtra=n._MergeElement(D.MatricesIndicesExtraKind,c.matricesIndicesExtra,e,t.map(g=>[g.vertexData.matricesIndicesExtra,g.transform])),r&&(yield)),c.matricesWeightsExtra&&(this.matricesWeightsExtra=n._MergeElement(D.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===D.PositionKind?n._TransformVector3Coordinates:e===D.NormalKind?n._TransformVector3Normals:e===D.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=D.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(D.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(D.NormalKind,this.normals),this.tangents&&i(D.TangentKind,this.tangents),this.uvs&&i(D.UVKind,this.uvs),this.uvs2&&i(D.UV2Kind,this.uvs2),this.uvs3&&i(D.UV3Kind,this.uvs3),this.uvs4&&i(D.UV4Kind,this.uvs4),this.uvs5&&i(D.UV5Kind,this.uvs5),this.uvs6&&i(D.UV6Kind,this.uvs6),this.colors&&i(D.ColorKind,this.colors),this.matricesIndices&&i(D.MatricesIndicesKind,this.matricesIndices),this.matricesWeights&&i(D.MatricesWeightsKind,this.matricesWeights),this.matricesIndicesExtra&&i(D.MatricesIndicesExtraKind,this.matricesIndicesExtra),this.matricesWeightsExtra&&i(D.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(D.PositionKind)&&(r.positions=e.getVerticesData(D.PositionKind,t,i)),e.isVerticesDataPresent(D.NormalKind)&&(r.normals=e.getVerticesData(D.NormalKind,t,i)),e.isVerticesDataPresent(D.TangentKind)&&(r.tangents=e.getVerticesData(D.TangentKind,t,i)),e.isVerticesDataPresent(D.UVKind)&&(r.uvs=e.getVerticesData(D.UVKind,t,i)),e.isVerticesDataPresent(D.UV2Kind)&&(r.uvs2=e.getVerticesData(D.UV2Kind,t,i)),e.isVerticesDataPresent(D.UV3Kind)&&(r.uvs3=e.getVerticesData(D.UV3Kind,t,i)),e.isVerticesDataPresent(D.UV4Kind)&&(r.uvs4=e.getVerticesData(D.UV4Kind,t,i)),e.isVerticesDataPresent(D.UV5Kind)&&(r.uvs5=e.getVerticesData(D.UV5Kind,t,i)),e.isVerticesDataPresent(D.UV6Kind)&&(r.uvs6=e.getVerticesData(D.UV6Kind,t,i)),e.isVerticesDataPresent(D.ColorKind)){let s=e.geometry||e,a=s.getVertexBuffer(D.ColorKind),o=s.getVerticesData(D.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([Cs.filter((...n)=>!Array.isArray(n[0]))],Ce,"_TransformVector3Normals",null);P([Cs.filter((...n)=>!Array.isArray(n[0]))],Ce,"_TransformVector4Normals",null);P([Cs.filter((...n)=>!Array.isArray(n[0]))],Ce,"_FlipFaces",null)});var Kr,rx=M(()=>{Kr=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}};Kr._ForceFullSceneLoadingForIncremental=!1;Kr._ShowLoadingScreen=!0;Kr._CleanBoneMatrixWeights=!1;Kr._LoggingLevel=0});var mn,nx=M(()=>{Ge();zt();pr();ki();Rg();rx();gm();Ci();mf();ix();Ni();rn();am();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 D(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===D.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(D.PositionKind),!e))return;this._extend=tx(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===D.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=OB(o,c,f,h,d,m,!0),_=new D(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(D.PositionKind)&&(e.positions=this._toNumberArray(this.getVerticesData(D.PositionKind)),this.isVertexBufferUpdatable(D.PositionKind)&&(e.positionsUpdatable=!0)),this.isVerticesDataPresent(D.NormalKind)&&(e.normals=this._toNumberArray(this.getVerticesData(D.NormalKind)),this.isVertexBufferUpdatable(D.NormalKind)&&(e.normalsUpdatable=!0)),this.isVerticesDataPresent(D.TangentKind)&&(e.tangents=this._toNumberArray(this.getVerticesData(D.TangentKind)),this.isVertexBufferUpdatable(D.TangentKind)&&(e.tangentsUpdatable=!0)),this.isVerticesDataPresent(D.UVKind)&&(e.uvs=this._toNumberArray(this.getVerticesData(D.UVKind)),this.isVertexBufferUpdatable(D.UVKind)&&(e.uvsUpdatable=!0)),this.isVerticesDataPresent(D.UV2Kind)&&(e.uvs2=this._toNumberArray(this.getVerticesData(D.UV2Kind)),this.isVertexBufferUpdatable(D.UV2Kind)&&(e.uvs2Updatable=!0)),this.isVerticesDataPresent(D.UV3Kind)&&(e.uvs3=this._toNumberArray(this.getVerticesData(D.UV3Kind)),this.isVertexBufferUpdatable(D.UV3Kind)&&(e.uvs3Updatable=!0)),this.isVerticesDataPresent(D.UV4Kind)&&(e.uvs4=this._toNumberArray(this.getVerticesData(D.UV4Kind)),this.isVertexBufferUpdatable(D.UV4Kind)&&(e.uvs4Updatable=!0)),this.isVerticesDataPresent(D.UV5Kind)&&(e.uvs5=this._toNumberArray(this.getVerticesData(D.UV5Kind)),this.isVertexBufferUpdatable(D.UV5Kind)&&(e.uvs5Updatable=!0)),this.isVerticesDataPresent(D.UV6Kind)&&(e.uvs6=this._toNumberArray(this.getVerticesData(D.UV6Kind)),this.isVertexBufferUpdatable(D.UV6Kind)&&(e.uvs6Updatable=!0)),this.isVerticesDataPresent(D.ColorKind)&&(e.colors=this._toNumberArray(this.getVerticesData(D.ColorKind)),this.isVertexBufferUpdatable(D.ColorKind)&&(e.colorsUpdatable=!0)),this.isVerticesDataPresent(D.MatricesIndicesKind)&&(e.matricesIndices=this._toNumberArray(this.getVerticesData(D.MatricesIndicesKind)),e.matricesIndicesExpanded=!0,this.isVertexBufferUpdatable(D.MatricesIndicesKind)&&(e.matricesIndicesUpdatable=!0)),this.isVerticesDataPresent(D.MatricesWeightsKind)&&(e.matricesWeights=this._toNumberArray(this.getVerticesData(D.MatricesWeightsKind)),this.isVertexBufferUpdatable(D.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(D.PositionKind,o,!1)}if(a.normalsAttrDesc&&a.normalsAttrDesc.count>0){let o=new Float32Array(e,a.normalsAttrDesc.offset,a.normalsAttrDesc.count);t.setVerticesData(D.NormalKind,o,!1)}if(a.tangetsAttrDesc&&a.tangetsAttrDesc.count>0){let o=new Float32Array(e,a.tangetsAttrDesc.offset,a.tangetsAttrDesc.count);t.setVerticesData(D.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(D.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(D.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(D.MatricesIndicesExtraKind,l,!1)}if(a.matricesWeightsAttrDesc&&a.matricesWeightsAttrDesc.count>0){let o=new Float32Array(e,a.matricesWeightsAttrDesc.offset,a.matricesWeightsAttrDesc.count);t.setVerticesData(D.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(D.MatricesIndicesKind,a,e.matricesIndices._updatable||e.matricesIndicesUpdatable)}else delete e.matricesIndices._isExpanded,delete e.matricesIndicesExpanded,t.setVerticesData(D.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(D.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(D.MatricesIndicesExtraKind,a,e.matricesIndicesExtra._updatable||e.matricesIndicesExtraUpdatable)}e.matricesWeights&&(n._CleanMatricesWeights(e,t),t.setVerticesData(D.MatricesWeightsKind,e.matricesWeights,e.matricesWeights._updatable)),e.matricesWeightsExtra&&t.setVerticesData(D.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(D.MatricesIndicesKind),a=t.getVerticesData(D.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(D.MatricesIndicesKind,s),e.matricesWeightsExtra&&t.setVerticesData(D.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(D.UVKind),e.hasUVs2&&r._delayInfo.push(D.UV2Kind),e.hasUVs3&&r._delayInfo.push(D.UV3Kind),e.hasUVs4&&r._delayInfo.push(D.UV4Kind),e.hasUVs5&&r._delayInfo.push(D.UV5Kind),e.hasUVs6&&r._delayInfo.push(D.UV6Kind),e.hasColors&&r._delayInfo.push(D.ColorKind),e.hasMatricesIndices&&r._delayInfo.push(D.MatricesIndicesKind),e.hasMatricesWeights&&r._delayInfo.push(D.MatricesWeightsKind),r._delayLoadingFunction=Ce.ImportVertexData):Ce.ImportVertexData(e,r),t.pushGeometry(r,!0),r}}});var ei,$h=M(()=>{kt();Vt();Rr();di();Ge();ta();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=$.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=$.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=$.Matrix[0];this.rotationQuaternion.toRotationMatrix(l);let c=$.Matrix[1];this.parent.getWorldMatrix().getRotationMatrixToRef(c),c.invert(),l.multiplyToRef(c,l),this.rotationQuaternion.fromRotationMatrix(l)}else{let l=$.Quaternion[0];ze.FromEulerVectorToRef(this.rotation,l);let c=$.Matrix[0];l.toRotationMatrix(c);let f=$.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=$.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=$.Quaternion[0],s=$.Vector3[0],a=$.Vector3[1],o=$.Matrix[1];j.IdentityToRef(o);let l=$.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=$.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=$.Vector3[0],s=$.Vector3[1],a=$.Vector3[2],o=$.Quaternion[0],l=$.Matrix[0],c=$.Matrix[1],f=$.Matrix[2],h=$.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=$.Quaternion[1],ze.RotationYawPitchRollToRef(this.rotation.y,this.rotation.x,this.rotation.z,r));let s=$.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=$.Matrix[1];j.ScalingToRef(a.x,a.y,a.z,c);let f=$.Matrix[0];l.toRotationMatrix(f),this._pivotMatrix.multiplyToRef(c,$.Matrix[4]),$.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(),$.Matrix[7])}else $.Matrix[7].copyFrom(s.getWorldMatrix());let c=$.Vector3[5],f=$.Vector3[6],h=$.Quaternion[0];$.Matrix[7].decompose(f,h,c),j.ScalingToRef(f.x,f.y,f.z,$.Matrix[7]),$.Matrix[7].setTranslation(c),n.BillboardUseParentOrientation&&(this._position.applyRotationQuaternionToRef(h,c),this._localMatrix.setTranslation(c)),this._localMatrix.multiplyToRef($.Matrix[7],this._worldMatrix)}else if(this._transformToBoneReferal){let c=this.parent;c.getSkeleton().prepare(),this._localMatrix.multiplyToRef(c.getFinalMatrix(),$.Matrix[6]),$.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=$.Vector3[0];this._worldMatrix.getTranslationToRef(c);let f=t.globalPosition;this._worldMatrix.invertToRef($.Matrix[1]);let h=$.Vector3[1];b.TransformCoordinatesToRef(f,$.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,$.Quaternion[0]),(this.billboardMode&n.BILLBOARDMODE_ALL)!==n.BILLBOARDMODE_ALL){let p=$.Vector3[1];$.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,$.Matrix[0])}else j.FromQuaternionToRef($.Quaternion[0],$.Matrix[0]);this._worldMatrix.setTranslationFromFloats(0,0,0),this._worldMatrix.multiplyToRef($.Matrix[0],this._worldMatrix),this._worldMatrix.setTranslation($.Vector3[0])}else{let c=$.Vector3[0];this._worldMatrix.getTranslationToRef(c),$.Matrix[1].copyFrom(t.getViewMatrix());let f=this.getScene().useRightHandedSystem;if(f&&$.Matrix[1].multiplyToRef(n._TmpRHRestore,$.Matrix[1]),$.Matrix[1].setTranslationFromFloats(0,0,0),$.Matrix[1].invertToRef($.Matrix[0]),(this.billboardMode&n.BILLBOARDMODE_ALL)!==n.BILLBOARDMODE_ALL){$.Matrix[0].decompose(void 0,$.Quaternion[0],void 0);let h=$.Vector3[1];$.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,$.Matrix[0])}this._worldMatrix.setTranslationFromFloats(0,0,0),this._worldMatrix.multiplyToRef($.Matrix[0],this._worldMatrix),this._worldMatrix.setTranslation($.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([Xr("position")],ei.prototype,"_position",void 0);P([Xr("rotation")],ei.prototype,"_rotation",void 0);P([MB("rotationQuaternion")],ei.prototype,"_rotationQuaternion",void 0);P([Xr("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 sx,ck=M(()=>{Ge();sx=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 fk(n){return Math.floor(n/8)}function hk(n){return 1<{ax=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=fk(e),i=hk(e);return(this._byteArray[t]&i)!==0}set(e,t){if(e>=this.size)throw new RangeError("Bit index out of range");let i=fk(e),r=hk(e);t?this._byteArray[i]|=r:this._byteArray[i]&=~r}}});var uk={};tt(uk,{OptimizeIndices:()=>noe});function noe(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{dk()});function soe(n,e,t){let i;switch(e){case D.PositionKind:i=r=>r.getPositions();break;case D.NormalKind:i=r=>r.getNormals();break;case D.TangentKind:i=r=>r.getTangents();break;case D.UVKind:i=r=>r.getUVs();break;case D.UV2Kind:i=r=>r.getUV2s();break;case D.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 tP,iP,Tr,Em=M(()=>{kt();di();Ge();ki();pr();$h();cg();gm();_f();ck();hn();ix();zt();Nn();Ku();zi();Vt();Vr();tP=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}},iP=class{constructor(){this._hasVertexAlpha=!1,this._useVertexColors=!0,this._numBoneInfluencers=4,this._applyFog=!0,this._receiveShadows=!1,this._facetData=new tP,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 sx,this._enableDistantPicking=!1,this._rawBoundingInfo=null,this._sideOrientationHint=!1,this._wasActiveLastFrame=!1}},Tr=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 iP,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 mr(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(D.MatricesIndicesKind)&&this.isVerticesDataPresent(D.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=tx(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&&soe(t,i,this.morphTargetManager),e.applySkeleton&&this.skeleton){let a=s(D.MatricesIndicesKind),o=s(D.MatricesWeightsKind);if(o&&a){let l=this.numBoneInfluencers>4,c=l?s(D.MatricesIndicesExtraKind):null,f=l?s(D.MatricesWeightsExtraKind):null,h=this.skeleton.getTransformMatrices(this);n._ApplySkeleton(t,i,h,a,o,c,f)}}if(e.updatePositionsArray!==!1&&i===D.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=$.Matrix[0],i=$.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 rs,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=$.Matrix[5];o.invertToRef(l);let c=$.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(mk(),uk));return t(e),this.setIndices(e,this.getTotalVertices()),this}alignWithNormal(e,t){t||(t=Ms.Y);let i=$.Vector3[0],r=$.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 qe("EdgesRenderer")}enableEdgesRendering(e,t,i){throw qe("EdgesRenderer")}getConnectedParticleSystems(){return this._scene.particleSystems.filter(e=>e.emitter===this)}};Tr.OCCLUSION_TYPE_NONE=0;Tr.OCCLUSION_TYPE_OPTIMISTIC=1;Tr.OCCLUSION_TYPE_STRICT=2;Tr.OCCLUSION_ALGORITHM_TYPE_ACCURATE=0;Tr.OCCLUSION_ALGORITHM_TYPE_CONSERVATIVE=1;Tr.CULLINGSTRATEGY_STANDARD=0;Tr.CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY=1;Tr.CULLINGSTRATEGY_OPTIMISTIC_INCLUSION=2;Tr.CULLINGSTRATEGY_OPTIMISTIC_INCLUSION_THEN_BSPHERE_ONLY=3;Tr.DefaultIsPickable=!0;P([Cs.filter((...n)=>!Array.isArray(n[0])&&!Array.isArray(n[3])&&!Array.isArray(n[4])&&!Array.isArray(n[5])&&!Array.isArray(n[6]))],Tr,"_ApplySkeleton",null);Ft("BABYLON.AbstractMesh",Tr)});var Bn,pk=M(()=>{kt();Rr();Vt();Bn=class{constructor(){this.reset()}reset(){this.enabled=!1,this.mask=255,this.funcRef=1,this.funcMask=255,this.func=519,this.opStencilFail=7680,this.opDepthFail=7680,this.opStencilDepthPass=7681,this.backFunc=519,this.backOpStencilFail=7680,this.backOpDepthFail=7680,this.backOpStencilDepthPass=7681}get func(){return this._func}set func(e){this._func=e}get backFunc(){return this._backFunc}set backFunc(e){this._backFunc=e}get funcRef(){return this._funcRef}set funcRef(e){this._funcRef=e}get funcMask(){return this._funcMask}set funcMask(e){this._funcMask=e}get opStencilFail(){return this._opStencilFail}set opStencilFail(e){this._opStencilFail=e}get opDepthFail(){return this._opDepthFail}set opDepthFail(e){this._opDepthFail=e}get opStencilDepthPass(){return this._opStencilDepthPass}set opStencilDepthPass(e){this._opStencilDepthPass=e}get backOpStencilFail(){return this._backOpStencilFail}set backOpStencilFail(e){this._backOpStencilFail=e}get backOpDepthFail(){return this._backOpDepthFail}set backOpDepthFail(e){this._backOpDepthFail=e}get backOpStencilDepthPass(){return this._backOpStencilDepthPass}set backOpStencilDepthPass(e){this._backOpStencilDepthPass=e}get mask(){return this._mask}set mask(e){this._mask=e}get enabled(){return this._enabled}set enabled(e){this._enabled=e}getClassName(){return"MaterialStencilState"}copyTo(e){it.Clone(()=>e,this)}serialize(){return it.Serialize(this)}parse(e,t,i){it.Parse(()=>this,e,t,i)}};P([F()],Bn.prototype,"func",null);P([F()],Bn.prototype,"backFunc",null);P([F()],Bn.prototype,"funcRef",null);P([F()],Bn.prototype,"funcMask",null);P([F()],Bn.prototype,"opStencilFail",null);P([F()],Bn.prototype,"opDepthFail",null);P([F()],Bn.prototype,"opStencilDepthPass",null);P([F()],Bn.prototype,"backOpStencilFail",null);P([F()],Bn.prototype,"backOpDepthFail",null);P([F()],Bn.prototype,"backOpStencilDepthPass",null);P([F()],Bn.prototype,"mask",null);P([F()],Bn.prototype,"enabled",null)});function Un(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 cl(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 _k(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 Vn(n,e,t){var r,s,a,o,l,c;let i=(r=e.clipPlane)!=null?r:t.clipPlane;Sm(n,"vClipPlane",i),i=(s=e.clipPlane2)!=null?s:t.clipPlane2,Sm(n,"vClipPlane2",i),i=(a=e.clipPlane3)!=null?a:t.clipPlane3,Sm(n,"vClipPlane3",i),i=(o=e.clipPlane4)!=null?o:t.clipPlane4,Sm(n,"vClipPlane4",i),i=(l=e.clipPlane5)!=null?l:t.clipPlane5,Sm(n,"vClipPlane5",i),i=(c=e.clipPlane6)!=null?c:t.clipPlane6,Sm(n,"vClipPlane6",i)}function Sm(n,e,t){var i;if(t){let r=((i=Ca.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 fl=M(()=>{dg();Ge()});var ce,Oa=M(()=>{Vr();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 Af(n,e,t){if(!n||n.LOGARITHMICDEPTH||n.indexOf&&n.indexOf("LOGARITHMICDEPTH")>=0){let i=t.activeCamera;i.mode===1&&J.Error("Logarithmic depth is not compatible with orthographic cameras!",20),e.setFloat("logarithmicDepthConstant",2/(Math.log(i.maxZ+1)/Math.LN2))}}var gk=M(()=>{Pt()});function xf(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(vk,n.getEngine().useExactSrgbConversions),t.setColor3("vFogColor",vk)):t.setColor3("vFogColor",n.fogColor))}function hl(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"),Jh.NUM_MORPH_INFLUENCERS=f,Jh.NORMAL=s,Jh.TANGENT=a,Jh.UV=o,Jh.UV2=l,Jh.COLOR=c,ed(t,i,Jh,r),f)}function ed(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&&J.Error("Cannot add more vertex attributes for mesh "+e.name)}}function vo(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 Gn(n,e){let t=n.morphTargetManager;!n||!t||e.setFloatArray("morphTargetInfluences",t.influences)}function Rf(n,e){e.bindToEffect(n,"Scene")}function Tm(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 ox(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 Am(n,e,t){t.BAKED_VERTEX_ANIMATION_TEXTURE&&t.INSTANCES&&n.push("bakedVertexAnimationSettingsInstanced")}function ooe(n,e){return e.set(n),e}function Ds(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]),ooe(r,t.previousBones[n.uniqueId])))}}}function loe(n,e,t,i,r,s=!0){n._bindLight(e,t,i,r,s)}function xm(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 bm(n,e){(e.INSTANCES||e.THIN_INSTANCES)&&vo(n,!!e.PREPASS_VELOCITY),e.INSTANCESCOLOR&&n.push("instanceColor")}function Im(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 coe(n,e){return e.fogEnabled&&n.applyFog&&e.fogMode!==0}function Mm(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&&coe(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 Cm(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===ve.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 ve.EXPLICIT_MODE:t.REFLECTIONMAP_EXPLICIT=!0;break;case ve.PLANAR_MODE:t.REFLECTIONMAP_PLANAR=!0;break;case ve.PROJECTION_MODE:t.REFLECTIONMAP_PROJECTION=!0;break;case ve.SKYBOX_MODE:t.REFLECTIONMAP_SKYBOX=!0;break;case ve.SPHERICAL_MODE:t.REFLECTIONMAP_SPHERICAL=!0;break;case ve.EQUIRECTANGULAR_MODE:t.REFLECTIONMAP_EQUIRECTANGULAR=!0;break;case ve.FIXED_EQUIRECTANGULAR_MODE:t.REFLECTIONMAP_EQUIRECTANGULAR_FIXED=!0;break;case ve.FIXED_EQUIRECTANGULAR_MIRRORED_MODE:t.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED=!0;break;case ve.CUBIC_MODE:case ve.INVCUBIC_MODE:default:t.REFLECTIONMAP_CUBIC=!0,t.USE_LOCAL_REFLECTIONMAP_CUBIC=!!e.boundingBoxSize;break}e.coordinatesMode!==ve.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 foe(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 Pm(n,e,t,i,r,s=null,a=!1){let o=moe(n,i);s!==!1&&(o=_k(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 hoe(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 doe(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 uoe(n,e){let t=n.bakedVertexAnimationManager;e.BAKED_VERTEX_ANIMATION_TEXTURE=!!(t&&t.isEnabled)}function Lm(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&&hoe(n,e),r&&doe(n,e),a&&uoe(n,e),!0}function Dm(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 Om(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 Nm(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();rg();fl();Oa();Gr();gk();vk={r:0,g:0,b:0},Jh={NUM_MORPH_INFLUENCERS:0,NORMAL:!1,TANGENT:!1,UV:!1,UV2:!1,COLOR:!1}});var Ee,Wn=M(()=>{kt();Vt();Ci();di();Ni();Rg();_f();Pt();$u();Hh();pk();kn();Rr();sC();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&&J.Warn("Logarithmic depth has been requested for a material on a device that doesn't support it."),this._useLogarithmicDepth=e&&t,this._markAllSubMeshesAsMiscDirty()}get isVertexOutputInvariant(){return this._isVertexOutputInvariant}set isVertexOutputInvariant(e){this._isVertexOutputInvariant!==e&&(this._isVertexOutputInvariant=e,this._markAllSubMeshesAsMiscDirty())}_getDrawWrapper(){return this._drawWrapper}_setDrawWrapper(e){this._drawWrapper=e}constructor(e,t,i,r=!1){this.shadowDepthWrapper=null,this.allowShaderHotSwapping=!0,this._shaderLanguage=0,this._forceGLSL=!1,this._useVertexPulling=!1,this.metadata=null,this.reservedDataStore=null,this.checkReadyOnEveryCall=!1,this.checkReadyOnlyOnce=!1,this.state="",this._alpha=1,this._backFaceCulling=!0,this._cullBackFaces=!0,this._blockDirtyMechanism=!1,this.sideOrientation=null,this.onCompiled=null,this.onError=null,this.getRenderTargetTextures=null,this.doNotSerialize=!1,this._storeEffectOnSubMeshes=!1,this.animations=null,this.onDisposeObservable=new 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 Bn,this._isVertexOutputInvariant=n.ForceVertexOutputInvariant,this._useUBO=!1,this._fillMode=n.TriangleFillMode,this._cachedDepthWriteState=!1,this._cachedColorWriteState=!1,this._cachedDepthFunctionState=0,this._indexInSceneMaterialArray=-1,this.meshMap=null,this._parentContainer=null,this._uniformBufferLayoutBuilt=!1,this._eventInfo={},this._callbackPluginEventGeneric=()=>{},this._callbackPluginEventIsReadyForSubMesh=()=>{},this._callbackPluginEventPrepareDefines=()=>{},this._callbackPluginEventPrepareDefinesBeforeAttributes=()=>{},this._callbackPluginEventHardBindForSubMesh=()=>{},this._callbackPluginEventBindForSubMesh=()=>{},this._callbackPluginEventHasRenderTargetTextures=()=>{},this._callbackPluginEventFillRenderTargetTextures=()=>{},this._transparencyMode=null,this.name=e;let s=t||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 is(this._scene.getEngine(),!1),this._drawWrapper.materialContext=this._materialContext,this._uniformBuffer=new mr(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 mr(e,void 0,void 0,this.name,!0),this._shaderLanguage=1):this._uniformBuffer=new mr(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 tA(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,Rf(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 so(0,0,0,1)),this._storeEffectOnSubMeshes){let f=!0,h=null;if(e.subMeshes){let d=new Ls(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 Bm,Ek=M(()=>{Wn();mf();zi();Bm=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",Bm)});var lx,Sk=M(()=>{lx=class{constructor(e,t){this.distanceOrScreenCoverage=e,this.mesh=t}}});var Um,cx,rP,fx,nP,sP,dl,Z,yi=M(()=>{di();Ci();tg();mf();Zy();ll();Ge();zt();ta();ki();pr();nx();Em();Rg();Wn();Ek();rx();Rr();Pt();zi();hn();cm();Sk();Um=class{},cx=class{constructor(){this.batchCache=new fx(this),this.batchCacheReplacementModeInFrozenMode=new fx(this),this.instancesBufferSize=512*4}},rP=class{constructor(){this.renderPasses={}}},fx=class{constructor(e){this.parent=e,this.mustReturn=!1,this.visibleInstances=new Array,this.renderSelf=[],this.hardwareInstancedRendering=[]}},nP=class{constructor(){this.instancesCount=0,this.matrixBuffer=null,this.previousMatrixBuffer=null,this.matrixBufferSize=512,this.matrixData=null,this.boundingVectors=[],this.worldMatrices=null}},sP=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}},dl={source:null,parent:null,doNotCloneChildren:!1,clonePhysicsImpostor:!0,cloneThinInstances:!1},Z=class n extends Tr{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(D.PositionKind,this._internalMeshDataInfo._sourcePositions,!0),this._internalMeshDataInfo._sourceNormals&&this.setVerticesData(D.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),nl.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 J.Warn("You cannot use a mesh as LOD level twice"),this;let i=new lx(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 Ls(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++)Ls.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(D.PositionKind);if(!i)return this;if(e(i),this.updateVerticesData(D.PositionKind,i,!1,!1),t){let r=this.getIndices(),s=this.getVerticesData(D.NormalKind);if(!s)return this;Ce.ComputeNormals(i,r,s),this.updateVerticesData(D.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(D.MatricesIndicesKind),u=this.getVerticesData(D.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 _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(D.PositionKind))return this;let t=this.subMeshes.splice(0);this._resetPointsArrayCache();let i=this.getVerticesData(D.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(D.PositionKind)||!this.isVerticesDataPresent(D.NormalKind)||!this.isVerticesDataPresent(D.UVKind))return J.Warn("Cannot call applyDisplacementMap: Given mesh is not complete. Position, Normal or UV are missing"),this;let c=this.getVerticesData(D.PositionKind,!0,!0),f=this.getVerticesData(D.NormalKind),h=this.getVerticesData(D.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(D.MatricesIndicesExtraKind):null,f=l?this.getVerticesData(D.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(D.PositionKind,r),t&&this.updateVerticesData(D.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 ik(n._MergeMeshesCoroutine(e,t,i,r,s,a,!0),ek())}static*_MergeMeshesCoroutine(e,t=!0,i,r,s,a,o){if(e=e.filter(Boolean),e.length===0)return null;let l;if(!i){let R=0;for(l=0;l=65536)return J.Warn("Cannot merge meshes because resulting mesh will have more than 65536 vertices. Please use allow32BitsIndices = true to use 32 bits indices"),null}let c=e[0];a&&(s=!1,e.sort((R,I)=>{var C,y,L,O;return((y=(C=R.material)==null?void 0:C.uniqueId)!=null?y:-1)-((O=(L=I.material)==null?void 0:L.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 qe("GroundMesh")};Z._GoldbergMeshParser=(n,e)=>{throw qe("GoldbergMesh")};Z._LinesMeshParser=(n,e)=>{throw qe("LinesMesh")};Z._GreasedLineMeshParser=(n,e)=>{throw qe("GreasedLineMesh")};Z._GreasedLineRibbonMeshParser=(n,e)=>{throw qe("GreasedLineRibbonMesh")};Z._TrailMeshParser=(n,e)=>{throw qe("TrailMesh")};Z._GaussianSplattingMeshParser=(n,e)=>{throw qe("GaussianSplattingMesh")};Z._GaussianSplattingPartProxyMeshParser=(n,e)=>{throw qe("GaussianSplattingPartProxyMesh")};Z._GaussianSplattingCompoundMeshParser=(n,e)=>{throw qe("GaussianSplattingCompoundMesh")};Ft("BABYLON.Mesh",Z)});var Um,iP=M(()=>{fo();Ul();On();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=gr.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:gr.Now}_reachTargetAlpha(){return this._attachedCamera&&this.targetAlpha?Math.abs(this._attachedCamera.alpha-this.targetAlpha){Fh();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;ax=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)}},ox=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 If,nP=M(()=>{If=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 sP,aP,oP,lP,cP,fP,Eo,ht,Mf=M(()=>{Ge();zt();Nn();zi();nP();ea();oA();Bh();Rr();sP=Object.freeze(new ze(0,0,0,0)),aP=Object.freeze(b.Zero()),oP=Object.freeze(Fe.Zero()),lP=Object.freeze(kl.Zero()),cP=Object.freeze(pe.Black()),fP=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 kl&&(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:$.Vector3[0],referenceQuaternion:$.Quaternion[0],referenceScaling:$.Vector3[1],keyPosition:$.Vector3[2],keyQuaternion:$.Quaternion[1],keyScaling:$.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||sP).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||aP).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||oP).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||lP).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||cP).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||fP).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 If(n,e,t)});var Vm,Ek=M(()=>{rP();Mf();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 ax(.3);Vm.EasingMode=vo.EASINGMODE_EASEOUT});var Cf,Sk=M(()=>{rP();di();fo();Ul();Ge();Mf();Cf=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=gr.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=gr.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}};Cf.EasingFunction=new ox;Cf.EasingMode=vo.EASINGMODE_EASEINOUT;Cf.IgnoreBoundsSizeMode=0;Cf.FitFrustumSidesMode=1});var lx,hP,Ds,dP=M(()=>{kt();Vt();al();Ge();On();Yu();ea();_i.AddNodeConstructor("TargetCamera",(n,e)=>()=>new Ds(n,b.Zero(),e));lx=j.Zero(),hP=ze.Identity(),Ds=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=$.Vector3[0],i=$.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,lx):j.LookAtLHToRef(this.position,e,b.UpReadOnly,lx),lx.invert();let t=this.rotationQuaternion||hP;ze.FromRotationMatrixToRef(lx,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($.Matrix[0]),b.TransformNormalToRef(this.cameraDirection,$.Matrix[0],$.Vector3[0]),this._deferredPositionUpdate.addInPlace($.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();Rr();al();Wn={},Gm=class{constructor(e){this.attachedToElement=!1,this.attached={},this.camera=e,this.checkInputs=()=>{}}add(e){let t=e.getSimpleName();if(this.attached[t]){J.Warn("camera input of type "+t+" already exists on camera");return}this.attached[t]=e,e.camera=this.camera,e.checkInputs&&(this.checkInputs=this._addCheckInputs(e.checkInputs.bind(e))),this.attachedToElement&&e.attachControl(this.noPreventDefault)}remove(e){for(let t in this.attached){let i=this.attached[t];if(i===e){i.detachControl(),i.camera=null,delete this.attached[t],this.rebuildInputCheck();return}}}removeByType(e){for(let t in this.attached){let i=this.attached[t];i.getClassName()===e&&(i.detachControl(),i.camera=null,delete this.attached[t],this.rebuildInputCheck())}}_addCheckInputs(e){let t=this.checkInputs;return()=>{t(),e()}}attachInput(e){this.attachedToElement&&e.attachControl(this.noPreventDefault)}attachElement(e=!1){if(!this.attachedToElement){e=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=Wn[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=Wn[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(()=>{kt();Vt();Ci();fo();Ag=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()],Ag.prototype,"buttons",void 0)});var $h,Ak=M(()=>{kt();Vt();Tk();$h=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()],$h.prototype,"pinchZoom",void 0);P([F()],$h.prototype,"multiTouchPanning",void 0);P([F()],$h.prototype,"multiTouchPanAndZoom",void 0)});var ta,xk=M(()=>{kt();Vt();hl();Ak();ta=class n extends $h{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()}};ta.MinimumRadiusForPinch=.001;P([F()],ta.prototype,"buttons",void 0);P([F()],ta.prototype,"angularSensibilityX",void 0);P([F()],ta.prototype,"angularSensibilityY",void 0);P([F()],ta.prototype,"pinchPrecision",void 0);P([F()],ta.prototype,"pinchDeltaPercentage",void 0);P([F()],ta.prototype,"useNaturalPinchZoom",void 0);P([F()],ta.prototype,"panningSensibility",void 0);Wn.ArcRotateCameraPointersInput=ta});var Os,Rk=M(()=>{kt();Vt();hl();DA();Ci();Os=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{kt();Vt();hl();fo();Qu();Ge();On();OA();Nn();Ci();soe=40,yf=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?soe: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=$.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){xk();Rk();bk();hl();cx=class extends Gm{constructor(e){super(e)}addMouseWheel(){return this.add(new yf),this}addPointers(){return this.add(new ta),this}addKeyboard(){return this.add(new Os),this}}});function aoe(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 ooe(n,e){return Math.acos(n/e)}function Hn(n,e){return isNaN(n)?e:n}var gi,fx=M(()=>{kt();Vt();di();Ge();Nn();ea();yi();iP();Ek();Sk();al();dP();Ik();On();Ci();zi();_i.AddNodeConstructor("ArcRotateCamera",(n,e)=>()=>new gi(n,0,0,1,b.Zero(),e));gi=class n extends Ds{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 Cf,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 cx(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=Hn(e,this._goalAlpha),this._goalBeta=Hn(t,this._goalBeta),this._goalRadius=Hn(i,this._goalRadius),this._goalTarget.set(Hn(r.x,this._goalTarget.x),Hn(r.y,this._goalTarget.y),Hn(r.z,this._goalTarget.z)),this._goalTargetScreenOffset.set(Hn(s.x,this._goalTargetScreenOffset.x),Hn(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=aoe(this._computationVector),this.beta=ooe(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=Z.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=Z.MinMax(s),r=b.Distance(i.min,i.max)}else{let s=e;i=s,r=s.distance}this._target=Z.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([hA("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,Pf=M(()=>{kt();Vt();Ge();zt();ea();pf();zi();J_();Rr();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([Er()],Xt.prototype,"diffuse",void 0);P([Er()],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 ia,hx=M(()=>{kt();Vt();Ge();zt();ea();Pf();zi();_i.AddNodeConstructor("Light_Type_3",(n,e)=>()=>new ia(n,b.Zero(),e));ia=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([Er()],ia.prototype,"groundColor",void 0);P([zr()],ia.prototype,"direction",void 0);Ft("BABYLON.HemisphericLight",ia)});var Na,dx=M(()=>{kt();Vt();Ge();Pf();Yu();Na=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,Is.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=$.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=$.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()],Na.prototype,"position",null);P([zr()],Na.prototype,"direction",null);P([F()],Na.prototype,"shadowMinZ",null);P([F()],Na.prototype,"shadowMaxZ",null)});var Ns,Mk=M(()=>{kt();Vt();Ge();ea();Pf();dx();zi();_i.AddNodeConstructor("Light_Type_1",(n,e)=>()=>new Ns(n,b.Zero(),e));Ns=class extends Na{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()],Ns.prototype,"shadowFrustumSize",null);P([F()],Ns.prototype,"shadowOrthoScale",null);P([F()],Ns.prototype,"autoUpdateExtends",void 0);P([F()],Ns.prototype,"autoCalcShadowZBounds",void 0);P([F("orthoLeft")],Ns.prototype,"_orthoLeft",void 0);P([F("orthoRight")],Ns.prototype,"_orthoRight",void 0);P([F("orthoTop")],Ns.prototype,"_orthoTop",void 0);P([F("orthoBottom")],Ns.prototype,"_orthoBottom",void 0);Ft("BABYLON.DirectionalLight",Ns)});var Lf,Ck=M(()=>{kt();Vt();Ge();ea();Pf();dx();zi();_i.AddNodeConstructor("Light_Type_0",(n,e)=>()=>new Lf(n,b.Zero(),e));Lf=class extends Na{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()],Lf.prototype,"shadowAngle",null);Ft("BABYLON.PointLight",Lf)});var kr,uP=M(()=>{kt();Vt();Ge();ea();Pf();dx();Vr();zi();_i.AddNodeConstructor("Light_Type_2",(n,e)=>()=>new kr(n,b.Zero(),b.Zero(),0,0,e));kr=class n extends Na{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 ve){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 yk(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 Ie=[],Ze=[];for(S=0;S0&&(V=L[R].subtract(L[R-1]).length(),w=V+_[E],m[E].push(w),_[E]=w),R++;i&&(R--,f.push(L[0].x,L[0].y,L[0].z),V=L[R].subtract(L[0]).length(),w=V+_[E],m[E].push(w),_[E]=w),x[E]=O+C,T[E]=I,I+=O+C}let N,U,H,ee;for(S=0;S{let m=i[0].length,p=o,_=0,g=p._originalBuilderSideOrientation===Z.DOUBLESIDE?2:1;for(let v=1;v<=g;++v)for(let x=0;x{Ge();yi();ki();mr();rn();Ce.CreateRibbon=yk;Z.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 Pk(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();rn();Ce.CreateDisc=Pk;Z.CreateDisc=(n,e,t,i=null,r,s)=>mP(n,{radius:e,tessellation:t,sideOrientation:s,updatable:r},i)});var km,Dk=M(()=>{Ge();ki();yi();Z._GroundMeshParser=(n,e)=>km.Parse(n,e);km=class n extends Z{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=$.Matrix[5];i.invertToRef(r);let s=$.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=$.Matrix[5];r.invertToRef(s);let a=$.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 _P(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,pP(e).applyToMesh(i,e.updatable),i._setReady(!0),i}function gP(n,e,t=null){let i=new Z(n,t);return Ok(e).applyToMesh(i,e.updatable),i}function vP(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)=>{Nk({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 EP=M(()=>{Ge();zt();yi();mr();Dk();Ci();Ni();On();rn();Ce.CreateGround=pP;Ce.CreateTiledGround=Ok;Ce.CreateGroundFromHeightMap=Nk;Z.CreateGround=(n,e,t,i,r,s)=>_P(n,{width:e,height:t,subdivisions:i,updatable:s},r);Z.CreateTiledGround=(n,e,t,i,r,s,a,o,l)=>gP(n,{xmin:e,zmin:t,xmax:i,zmax:r,subdivisions:s,precision:a,updatable:l},o);Z.CreateGroundFromHeightMap=(n,e,t,i,r,s,a,o,l,c,f)=>vP(n,e,{width:t,height:i,subdivisions:r,minHeight:s,maxHeight:a,updatable:l,onReady:c,alphaFilter:f},o)});function ux(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 SP(n,e={},t=null){let i=new Z(n,t);return e.sideOrientation=Z._GetDefaultSideOrientation(e.sideOrientation),i._originalBuilderSideOrientation=e.sideOrientation,ux(e).applyToMesh(i,e.updatable),i}var TP=M(()=>{Ge();zt();yi();mr();rn();EP();Ce.CreateBox=ux;Z.CreateBox=(n,e,t=null,i,r)=>SP(n,{size:e,sideOrientation:r,updatable:i},t)});function Wm(n){let e=n.pattern||Z.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 Z.CENTER:l/=2,_-=l,v+=l;break;case Z.LEFT:v+=l,m=-l/2;break;case Z.RIGHT:_-=l,m=l/2;break}switch(s){case Z.CENTER:h/=2,g-=h,x+=h;break;case Z.BOTTOM:x+=h,p=-h/2;break;case Z.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===Z.ROTATE_TILE||e===Z.ROTATE_ROW)&&(S[1]=[1,1,0,1,0,0,1,0]),(e===Z.FLIP_TILE||e===Z.FLIP_ROW)&&(S[1]=[1,0,0,0,0,1,1,1]),(e===Z.FLIP_N_ROTATE_TILE||e===Z.FLIP_N_ROTATE_ROW)&&(S[1]=[0,1,1,1,1,0,0,0]);let R=[],I=[],C=[],y=0;for(let w=0;w0||h>0){let w=h>0&&(s===Z.CENTER||s===Z.TOP),N=h>0&&(s===Z.CENTER||s===Z.BOTTOM),U=l>0&&(r===Z.CENTER||r===Z.RIGHT),H=l>0&&(r===Z.CENTER||r===Z.LEFT),ee,q,te,z,Y;if(w&&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,q=1-l/t,te=1-h/i,z=1,Y=1,ee=[q,te,z,te,z,Y,q,Y],e===Z.ROTATE_ROW&&(ee=[1-q,1-te,1-z,1-te,1-z,1-Y,1-q,1-Y]),e===Z.FLIP_ROW&&(ee=[1-q,te,1-z,te,1-z,Y,1-q,Y]),e===Z.FLIP_N_ROTATE_ROW&&(ee=[q,1-te,z,1-te,z,1-Y,q,1-Y]),R=R.concat(ee),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&&H&&(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,q=0,te=1-h/i,z=l/t,Y=1,ee=[q,te,z,te,z,Y,q,Y],(e===Z.ROTATE_ROW||e===Z.ROTATE_TILE&&o%2===0)&&(ee=[1-q,1-te,1-z,1-te,1-z,1-Y,1-q,1-Y]),(e===Z.FLIP_ROW||e===Z.FLIP_TILE&&o%2===0)&&(ee=[1-q,te,1-z,te,1-z,Y,1-q,Y]),(e===Z.FLIP_N_ROTATE_ROW||e===Z.FLIP_N_ROTATE_TILE&&o%2===0)&&(ee=[q,1-te,z,1-te,z,1-Y,q,1-Y]),R=R.concat(ee),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&&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,q=1-l/t,te=0,z=1,Y=h/i,ee=[q,te,z,te,z,Y,q,Y],(e===Z.ROTATE_ROW&&f%2===1||e===Z.ROTATE_TILE&&f%1===0)&&(ee=[1-q,1-te,1-z,1-te,1-z,1-Y,1-q,1-Y]),(e===Z.FLIP_ROW&&f%2===1||e===Z.FLIP_TILE&&f%2===0)&&(ee=[1-q,te,1-z,te,1-z,Y,1-q,Y]),(e===Z.FLIP_N_ROTATE_ROW&&f%2===1||e===Z.FLIP_N_ROTATE_TILE&&f%2===0)&&(ee=[q,1-te,z,1-te,z,1-Y,q,1-Y]),R=R.concat(ee),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&&H&&(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,q=0,te=0,z=l/t,Y=h/i,ee=[q,te,z,te,z,Y,q,Y],(e===Z.ROTATE_ROW&&f%2===1||e===Z.ROTATE_TILE&&(f+o)%2===1)&&(ee=[1-q,1-te,1-z,1-te,1-z,1-Y,1-q,1-Y]),(e===Z.FLIP_ROW&&f%2===1||e===Z.FLIP_TILE&&(f+o)%2===1)&&(ee=[1-q,te,1-z,te,1-z,Y,1-q,Y]),(e===Z.FLIP_N_ROTATE_ROW&&f%2===1||e===Z.FLIP_N_ROTATE_TILE&&(f+o)%2===1)&&(ee=[q,1-te,z,1-te,z,1-Y,q,1-Y]),R=R.concat(ee),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){let me=[];q=0,te=1-h/i,z=1,Y=1,me[0]=[q,te,z,te,z,Y,q,Y],me[1]=[q,te,z,te,z,Y,q,Y],(e===Z.ROTATE_TILE||e===Z.ROTATE_ROW)&&(me[1]=[1-q,1-te,1-z,1-te,1-z,1-Y,1-q,1-Y]),(e===Z.FLIP_TILE||e===Z.FLIP_ROW)&&(me[1]=[1-q,te,1-z,te,1-z,Y,1-q,Y]),(e===Z.FLIP_N_ROTATE_TILE||e===Z.FLIP_N_ROTATE_ROW)&&(me[1]=[q,1-te,z,1-te,z,1-Y,q,1-Y]);for(let Re=0;Re{yi();mr();Ce.CreateTiledPlane=Wm});function Fk(n){let t=n.faceUV||new Array(6),i=n.faceColors,r=n.pattern||Z.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 w=0;w<6;w++)t[w]===void 0&&(t[w]=new Mi(0,0,1,1)),i&&i[w]===void 0&&(i[w]=new lt(1,1,1,1));let u=s/2,m=a/2,p=o/2,_=[];for(let w=0;w<2;w++)_[w]=Wm({pattern:r,tileWidth:l,tileHeight:c,width:s,height:a,alignVertical:h,alignHorizontal:f,sideOrientation:d});for(let w=2;w<4;w++)_[w]=Wm({pattern:r,tileWidth:l,tileHeight:c,width:o,height:a,alignVertical:h,alignHorizontal:f,sideOrientation:d});let g=h;h===Z.BOTTOM?g=Z.TOP:h===Z.TOP&&(g=Z.BOTTOM);for(let w=4;w<6;w++)_[w]=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,L=0;for(let w=0;w<6;w++){let N=_[w].positions.length;R[w]=[],I[w]=[];for(let U=0;UU+L)),L+=R[w].length,i){let U=i[w];for(let H=0;H{Ge();zt();yi();mr();AP();rn();mx=1,xP=-1;Ce.CreateTiledBox=Fk});function Vk(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),L=y.multiply(c),O=y.divide(c).normalize();u.push(L.x,L.y,L.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();rn();Ce.CreateSphere=Vk;Z.CreateSphere=(n,e,t,i,r,s)=>RP(n,{segments:e,diameterX:t,diameterY:t,diameterZ:t,sideOrientation:s,updatable:r},i)});function kk(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||Z.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=ge?t/2:i/2;if(ne===0)return;let ue,De,de,Ie=ge?h[p-1]:h[0],Ze=null;d&&(Ze=ge?d[p-1]:d[0]);let Tt=v.length/3,Xe=ge?e/2:-e/2,je=new b(0,Xe,0);v.push(je.x,je.y,je.z),x.push(0,ge?1:-1,0);let $t=Ie.y+(Ie.w-Ie.y)*.5;T.push(Ie.x+(Ie.z-Ie.x)*.5,Mt?1-$t:$t),Ze&&E.push(Ze.r,Ze.g,Ze.b,Ze.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,ge?1:-1,0);let ii=Ie.y+(Ie.w-Ie.y)*Vi.y;T.push(Ie.x+(Ie.z-Ie.x)*Vi.x,Mt?1-ii:ii),Ze&&E.push(Ze.r,Ze.g,Ze.b,Ze.a)}for(de=0;de{Ge();zt();yi();mr();ys();Yu();rn();Ce.CreateCylinder=kk;Z.CreateCylinder=(n,e,t,i,r,s,a,o,l)=>((a===void 0||!(a instanceof ei))&&(a!==void 0&&(l=o||Z.DEFAULTSIDE,o=a),a=s,s=1),bP(n,{height:e,diameterTop:t,diameterBottom:i,tessellation:r,subdivisions:s,sideOrientation:l,updatable:o},a))});function Hk(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 IP(n,e={},t){let i=new Z(n,t);return e.sideOrientation=Z._GetDefaultSideOrientation(e.sideOrientation),i._originalBuilderSideOrientation=e.sideOrientation,Hk(e).applyToMesh(i,e.updatable),i}var zk=M(()=>{Ge();yi();mr();rn();Ce.CreateTorus=Hk;Z.CreateTorus=(n,e,t,i,r,s,a)=>IP(n,{diameter:e,thickness:t,tessellation:i,sideOrientation:a,updatable:s},r)});function Xk(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();rn();Ce.CreateTorusKnot=Xk;Z.CreateTorusKnot=(n,e,t,i,r,s,a,o,l,c)=>MP(n,{radius:e,tube:t,radialSegments:i,tubularSegments:r,p:s,q:a,sideOrientation:c,updatable:l},o)});var nc,CP=M(()=>{Ge();Pt();vm();yi();Q_();qh();ki();Ci();zi();Z._instancedMeshFactory=(n,e)=>{let t=new nc(n,e);if(e.instancedBuffers){t.instancedBuffers={};for(let i in e.instancedBuffers)t.instancedBuffers[i]=e.instancedBuffers[i]}return t};nc=class extends Sr{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||J.Warn("Note - setting renderingGroupId of an instanced mesh has no effect on the scene")}getTotalVertices(){return this._sourceMesh?this._sourceMesh.getTotalVertices():0}getTotalIndices(){return this._sourceMesh.getTotalIndices()}get sourceMesh(){return this._sourceMesh}get geometry(){return this._sourceMesh._geometry}createInstance(e){return this._sourceMesh.createInstance(e)}isReady(e=!1){return this._sourceMesh.isReady(e,!0)}getVerticesData(e,t,i){return this._sourceMesh.getVerticesData(e,t,i)}copyVerticesData(e,t){this._sourceMesh.copyVerticesData(e,t)}getVertexBuffer(e,t){return this._sourceMesh.getVertexBuffer(e,t)}setVerticesData(e,t,i,r){return this.sourceMesh&&this.sourceMesh.setVerticesData(e,t,i,r),this.sourceMesh}updateVerticesData(e,t,i,r){return this.sourceMesh&&this.sourceMesh.updateVerticesData(e,t,i,r),this.sourceMesh}setIndices(e,t=null){return this.sourceMesh&&this.sourceMesh.setIndices(e,t),this.sourceMesh}isVerticesDataPresent(e){return this._sourceMesh.isVerticesDataPresent(e)}getIndices(){return this._sourceMesh.getIndices()}get _positions(){return this._sourceMesh._positions}refreshBoundingInfo(e=!1,t=!1){if(this.hasBoundingInfo&&this.getBoundingInfo().isLocked)return this;let i;typeof e=="object"?i=e:i={applySkeleton:e,applyMorph:t};let r=this._sourceMesh.geometry?this._sourceMesh.geometry.boundingBias:null;return this._refreshBoundingInfo(this._sourceMesh._getData(i,null,D.PositionKind),r),this}_preActivate(){return this._currentLOD&&this._currentLOD._preActivate(),this}_activate(e,t){if(super._activate(e,t),this._sourceMesh.subMeshes||J.Warn("Instances should only be created for meshes with geometry."),this._currentLOD){if(this._currentLOD._getWorldMatrixDeterminant()>=0!=this._getWorldMatrixDeterminant()>=0)return this._internalAbstractMeshDataInfo._actAsRegularMesh=!0,!0;if(this._internalAbstractMeshDataInfo._actAsRegularMesh=!1,this._currentLOD._registerInstanceForRenderId(this,e),t){if(!this._currentLOD._internalAbstractMeshDataInfo._isActiveIntermediate)return this._currentLOD._internalAbstractMeshDataInfo._onlyForInstancesIntermediate=!0,!0}else if(!this._currentLOD._internalAbstractMeshDataInfo._isActive)return this._currentLOD._internalAbstractMeshDataInfo._onlyForInstances=!0,!0}return!1}_postActivate(){this._sourceMesh.edgesShareWithInstances&&this._sourceMesh._edgesRenderer&&this._sourceMesh._edgesRenderer.isEnabled&&this._sourceMesh._renderingGroup?(this._sourceMesh._renderingGroup._edgesRenderers.pushNoDuplicate(this._sourceMesh._edgesRenderer),this._sourceMesh._edgesRenderer.customInstances.push(this.getWorldMatrix())):this._edgesRenderer&&this._edgesRenderer.isEnabled&&this._sourceMesh._renderingGroup&&this._sourceMesh._renderingGroup._edgesRenderers.push(this._edgesRenderer)}getWorldMatrix(){if(this._currentLOD&&this._currentLOD!==this._sourceMesh&&this._currentLOD.billboardMode!==ti.BILLBOARDMODE_NONE&&this._currentLOD._masterMesh!==this){this._billboardWorldMatrix||(this._billboardWorldMatrix=new j);let e=this._currentLOD._masterMesh;return this._currentLOD._masterMesh=this,$.Vector3[7].copyFrom(this._currentLOD.position),this._currentLOD.position.set(0,0,0),this._billboardWorldMatrix.copyFrom(this._currentLOD.computeWorldMatrix(!0)),this._currentLOD.position.copyFrom($.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{zn=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();kn();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 Of(n){let e=n.getVertexBuffers();if(!e)return null;let t=Kk.get(n);if(!t)t=new Map,Kk.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 Nf(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 Kk,bg=M(()=>{Kk=new WeakMap});var yP,To,PP=M(()=>{Rr();ys();Ge();ki();Vr();zi();Df();Bh();Rg();Ni();ll();Gn();bg();yP={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(D.MatricesIndicesExtraKind),l.push(D.MatricesWeightsExtraKind));let y=e.skeleton;o.push("#define NUM_BONE_INFLUENCERS "+e.numBoneInfluencers),c=new zn,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,L=o.indexOf("#define UV2")!==-1,O=o.indexOf("#define TANGENT")!==-1,V=o.indexOf("#define NORMAL")!==-1,w=o.indexOf("#define VERTEXCOLOR")!==-1;m=cl(p,o,l,e,!0,V,O,y,L,w),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&&(Bn(h),ol(this,s,o)),s.fogEnabled&&(e!=null&&e.applyFog)&&s.fogMode!==ei.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=Of(y),this._vertexPullingMetadata&&this._vertexPullingMetadata.forEach((O,V)=>{h.push(`vp_${V}_info`)})),o.push("#define USE_VERTEX_PULLING");let L=(S=_.geometry)==null?void 0:S.getIndexBuffer();L&&!_.isUnIndexed&&(o.push("#define VERTEX_PULLING_USE_INDEX_BUFFER"),L.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&&(yP.effect=E,yP.subMesh=(C=i!=null?i:e==null?void 0:e.subMeshes[0])!=null?C:null,this._onEffectCreatedObservable.notifyObservers(yP))),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,ve.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 jk,loe,sc=M(()=>{G();jk="bonesDeclaration",loe=`#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(D.PositionKind))return this;let t=this.subMeshes.splice(0);this._resetPointsArrayCache();let i=this.getVerticesData(D.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(D.PositionKind)||!this.isVerticesDataPresent(D.NormalKind)||!this.isVerticesDataPresent(D.UVKind))return J.Warn("Cannot call applyDisplacementMap: Given mesh is not complete. Position, Normal or UV are missing"),this;let c=this.getVerticesData(D.PositionKind,!0,!0),f=this.getVerticesData(D.NormalKind),h=this.getVerticesData(D.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(D.MatricesIndicesExtraKind):null,f=l?this.getVerticesData(D.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(D.PositionKind,r),t&&this.updateVerticesData(D.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 xg(n._MergeMeshesCoroutine(e,t,i,r,s,a,!1))}static async MergeMeshesAsync(e,t=!0,i,r,s,a){return await nk(n._MergeMeshesCoroutine(e,t,i,r,s,a,!0),ik())}static*_MergeMeshesCoroutine(e,t=!0,i,r,s,a,o){if(e=e.filter(Boolean),e.length===0)return null;let l;if(!i){let R=0;for(l=0;l=65536)return J.Warn("Cannot merge meshes because resulting mesh will have more than 65536 vertices. Please use allow32BitsIndices = true to use 32 bits indices"),null}let c=e[0];a&&(s=!1,e.sort((R,I)=>{var C,y,L,O;return((y=(C=R.material)==null?void 0:C.uniqueId)!=null?y:-1)-((O=(L=I.material)==null?void 0:L.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 Bm){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 qe("GroundMesh")};Z._GoldbergMeshParser=(n,e)=>{throw qe("GoldbergMesh")};Z._LinesMeshParser=(n,e)=>{throw qe("LinesMesh")};Z._GreasedLineMeshParser=(n,e)=>{throw qe("GreasedLineMesh")};Z._GreasedLineRibbonMeshParser=(n,e)=>{throw qe("GreasedLineRibbonMesh")};Z._TrailMeshParser=(n,e)=>{throw qe("TrailMesh")};Z._GaussianSplattingMeshParser=(n,e)=>{throw qe("GaussianSplattingMesh")};Z._GaussianSplattingPartProxyMeshParser=(n,e)=>{throw qe("GaussianSplattingPartProxyMesh")};Z._GaussianSplattingCompoundMeshParser=(n,e)=>{throw qe("GaussianSplattingCompoundMesh")};Ft("BABYLON.Mesh",Z)});var Vm,aP=M(()=>{ho();Gl();Nn();Vm=class{constructor(){this._zoomStopsAnimation=!1,this._idleRotationSpeed=.05,this._idleRotationWaitTime=2e3,this._idleRotationSpinupTime=2e3,this.targetAlpha=null,this._attachedCamera=null,this._isPointerDown=!1,this._lastFrameTime=null,this._lastInteractionTime=-1/0,this._cameraRotationSpeed=0,this._lastFrameRadius=0}get name(){return"AutoRotation"}set zoomStopsAnimation(e){this._zoomStopsAnimation=e}get zoomStopsAnimation(){return this._zoomStopsAnimation}set idleRotationSpeed(e){this._idleRotationSpeed=e}get idleRotationSpeed(){return this._idleRotationSpeed}set idleRotationWaitTime(e){this._idleRotationWaitTime=e}get idleRotationWaitTime(){return this._idleRotationWaitTime}set idleRotationSpinupTime(e){this._idleRotationSpinupTime=e}get idleRotationSpinupTime(){return this._idleRotationSpinupTime}get rotationInProgress(){return Math.abs(this._cameraRotationSpeed)>0}get attachedNode(){return this._attachedCamera}init(){}attach(e){this._attachedCamera=e;let t=this._attachedCamera.getScene();this._onPrePointerObservableObserver=t.onPrePointerObservable.add(i=>{if(i.type===st.POINTERDOWN){this._isPointerDown=!0;return}i.type===st.POINTERUP&&(this._isPointerDown=!1)}),this._onAfterCheckInputsObserver=e.onAfterCheckInputsObservable.add(()=>{if(this._reachTargetAlpha())return;let i=vr.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:vr.Now}_reachTargetAlpha(){return this._attachedCamera&&this.targetAlpha?Math.abs(this._attachedCamera.alpha-this.targetAlpha){Vh();Eo=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}};Eo.EASINGMODE_EASEIN=0;Eo.EASINGMODE_EASEOUT=1;Eo.EASINGMODE_EASEINOUT=2;hx=class extends Eo{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)}},dx=class extends Eo{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 Mf,lP=M(()=>{Mf=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 cP,fP,hP,dP,uP,mP,So,ht,Cf=M(()=>{Ge();zt();wn();zi();lP();ta();dA();Gh();Rr();cP=Object.freeze(new ze(0,0,0,0)),fP=Object.freeze(b.Zero()),hP=Object.freeze(Fe.Zero()),dP=Object.freeze(Hl.Zero()),uP=Object.freeze(pe.Black()),mP=Object.freeze(new lt(0,0,0,0)),So={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 Hl&&(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:$.Vector3[0],referenceQuaternion:$.Quaternion[0],referenceScaling:$.Vector3[1],keyPosition:$.Vector3[2],keyQuaternion:$.Quaternion[1],keyScaling:$.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{So.key=0;let T=o._interpolate(l,So);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||cP).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||fP).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||hP).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||dP).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||uP).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||mP).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 Pr;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 Pr;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 Mf(n,e,t)});var Gm,Tk=M(()=>{oP();Cf();Gm=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()}};Gm.EasingFunction=new hx(.3);Gm.EasingMode=Eo.EASINGMODE_EASEOUT});var yf,Ak=M(()=>{oP();di();ho();Gl();Ge();Cf();yf=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=vr.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=vr.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}};yf.EasingFunction=new dx;yf.EasingMode=Eo.EASINGMODE_EASEINOUT;yf.IgnoreBoundsSizeMode=0;yf.FitFrustumSidesMode=1});var ux,pP,Os,_P=M(()=>{kt();Vt();ll();Ge();Nn();Ku();ta();_i.AddNodeConstructor("TargetCamera",(n,e)=>()=>new Os(n,b.Zero(),e));ux=j.Zero(),pP=ze.Identity(),Os=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=$.Vector3[0],i=$.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,ux):j.LookAtLHToRef(this.position,e,b.UpReadOnly,ux),ux.invert();let t=this.rotationQuaternion||pP;ze.FromRotationMatrixToRef(ux,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($.Matrix[0]),b.TransformNormalToRef(this.cameraDirection,$.Matrix[0],$.Vector3[0]),this._deferredPositionUpdate.addInPlace($.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();Rr();ll();Hn={},km=class{constructor(e){this.attachedToElement=!1,this.attached={},this.camera=e,this.checkInputs=()=>{}}add(e){let t=e.getSimpleName();if(this.attached[t]){J.Warn("camera input of type "+t+" already exists on camera");return}this.attached[t]=e,e.camera=this.camera,e.checkInputs&&(this.checkInputs=this._addCheckInputs(e.checkInputs.bind(e))),this.attachedToElement&&e.attachControl(this.noPreventDefault)}remove(e){for(let t in this.attached){let i=this.attached[t];if(i===e){i.detachControl(),i.camera=null,delete this.attached[t],this.rebuildInputCheck();return}}}removeByType(e){for(let t in this.attached){let i=this.attached[t];i.getClassName()===e&&(i.detachControl(),i.camera=null,delete this.attached[t],this.rebuildInputCheck())}}_addCheckInputs(e){let t=this.checkInputs;return()=>{t(),e()}}attachInput(e){this.attachedToElement&&e.attachControl(this.noPreventDefault)}attachElement(e=!1){if(!this.attachedToElement){e=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=Hn[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=Hn[this.attached[i].getClassName()];if(r){let s=it.Parse(()=>new r,e,null);this.remove(this.attached[i]),this.add(s)}}}}});var Ig,xk=M(()=>{kt();Vt();Ci();ho();Ig=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()],Ig.prototype,"buttons",void 0)});var td,Rk=M(()=>{kt();Vt();xk();td=class extends Ig{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()],td.prototype,"pinchZoom",void 0);P([F()],td.prototype,"multiTouchPanning",void 0);P([F()],td.prototype,"multiTouchPanAndZoom",void 0)});var ia,bk=M(()=>{kt();Vt();ul();Rk();ia=class n extends td{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()}};ia.MinimumRadiusForPinch=.001;P([F()],ia.prototype,"buttons",void 0);P([F()],ia.prototype,"angularSensibilityX",void 0);P([F()],ia.prototype,"angularSensibilityY",void 0);P([F()],ia.prototype,"pinchPrecision",void 0);P([F()],ia.prototype,"pinchDeltaPercentage",void 0);P([F()],ia.prototype,"useNaturalPinchZoom",void 0);P([F()],ia.prototype,"panningSensibility",void 0);Hn.ArcRotateCameraPointersInput=ia});var Ns,Ik=M(()=>{kt();Vt();ul();BA();Ci();Ns=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===uo.KEYDOWN)this._ctrlPressed=i.ctrlKey,this._altPressed=i.altKey,(this.keysUp.indexOf(i.keyCode)!==-1||this.keysDown.indexOf(i.keyCode)!==-1||this.keysLeft.indexOf(i.keyCode)!==-1||this.keysRight.indexOf(i.keyCode)!==-1||this.keysReset.indexOf(i.keyCode)!==-1)&&(this._keys.indexOf(i.keyCode)===-1&&this._keys.push(i.keyCode),i.preventDefault&&(e||i.preventDefault()));else if(this.keysUp.indexOf(i.keyCode)!==-1||this.keysDown.indexOf(i.keyCode)!==-1||this.keysLeft.indexOf(i.keyCode)!==-1||this.keysRight.indexOf(i.keyCode)!==-1||this.keysReset.indexOf(i.keyCode)!==-1){let r=this._keys.indexOf(i.keyCode);r>=0&&this._keys.splice(r,1),i.preventDefault&&(e||i.preventDefault())}}}))}detachControl(){this._scene&&(this._onKeyboardObserver&&this._scene.onKeyboardObservable.remove(this._onKeyboardObserver),this._onCanvasBlurObserver&&this._engine.onCanvasBlurObservable.remove(this._onCanvasBlurObserver),this._onKeyboardObserver=null,this._onCanvasBlurObserver=null),this._keys.length=0}checkInputs(){if(this._onKeyboardObserver){let e=this.camera;for(let t=0;t{kt();Vt();ul();ho();$u();Ge();Nn();UA();wn();Ci();_oe=40,Pf=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===mo.DOM_DELTA_LINE?_oe: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=so.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=$.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){bk();Ik();Mk();ul();mx=class extends km{constructor(e){super(e)}addMouseWheel(){return this.add(new Pf),this}addPointers(){return this.add(new ia),this}addKeyboard(){return this.add(new Ns),this}}});function goe(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 voe(n,e){return Math.acos(n/e)}function zn(n,e){return isNaN(n)?e:n}var gi,px=M(()=>{kt();Vt();di();Ge();wn();ta();yi();aP();Tk();Ak();ll();_P();Ck();Nn();Ci();zi();_i.AddNodeConstructor("ArcRotateCamera",(n,e)=>()=>new gi(n,0,0,1,b.Zero(),e));gi=class n extends Os{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 Gm,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 yf,this.addBehavior(this._framingBehavior)):this._framingBehavior&&(this.removeBehavior(this._framingBehavior),this._framingBehavior=null))}get autoRotationBehavior(){return this._autoRotationBehavior}get useAutoRotationBehavior(){return this._autoRotationBehavior!=null}set useAutoRotationBehavior(e){e!==this.useAutoRotationBehavior&&(e?(this._autoRotationBehavior=new Vm,this.addBehavior(this._autoRotationBehavior)):this._autoRotationBehavior&&(this.removeBehavior(this._autoRotationBehavior),this._autoRotationBehavior=null))}constructor(e,t,i,r,s,a,o=!0){super(e,b.Zero(),a,o),this.inertialAlphaOffset=0,this.inertialBetaOffset=0,this.inertialRadiusOffset=0,this.lowerAlphaLimit=null,this.upperAlphaLimit=null,this.lowerBetaLimit=.01,this.upperBetaLimit=Math.PI-.01,this.lowerRadiusLimit=null,this.upperRadiusLimit=null,this.lowerTargetYLimit=-1/0,this.inertialPanningX=0,this.inertialPanningY=0,this.pinchToPanMaxDistance=20,this.panningDistanceLimit=null,this.panningOriginTarget=b.Zero(),this.panningInertia=.9,this.zoomOnFactor=1,this.targetScreenOffset=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 mx(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=zn(e,this._goalAlpha),this._goalBeta=zn(t,this._goalBeta),this._goalRadius=zn(i,this._goalRadius),this._goalTarget.set(zn(r.x,this._goalTarget.x),zn(r.y,this._goalTarget.y),zn(r.z,this._goalTarget.z)),this._goalTargetScreenOffset.set(zn(s.x,this._goalTargetScreenOffset.x),zn(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=goe(this._computationVector),this.beta=voe(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=Z.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=Z.MinMax(s),r=b.Distance(i.min,i.max)}else{let s=e;i=s,r=s.distance}this._target=Z.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([Xr("target")],gi.prototype,"_target",void 0);P([_A("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([Xr()],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([rm()],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,Lf=M(()=>{kt();Vt();Ge();zt();ta();_f();zi();rg();Rr();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 mr(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([Sr()],Xt.prototype,"diffuse",void 0);P([Sr()],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 ra,_x=M(()=>{kt();Vt();Ge();zt();ta();Lf();zi();_i.AddNodeConstructor("Light_Type_3",(n,e)=>()=>new ra(n,b.Zero(),e));ra=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([Sr()],ra.prototype,"groundColor",void 0);P([Xr()],ra.prototype,"direction",void 0);Ft("BABYLON.HemisphericLight",ra)});var Na,gx=M(()=>{kt();Vt();Ge();Lf();Ku();Na=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,Ms.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=$.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=$.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([Xr()],Na.prototype,"position",null);P([Xr()],Na.prototype,"direction",null);P([F()],Na.prototype,"shadowMinZ",null);P([F()],Na.prototype,"shadowMaxZ",null)});var ws,yk=M(()=>{kt();Vt();Ge();ta();Lf();gx();zi();_i.AddNodeConstructor("Light_Type_1",(n,e)=>()=>new ws(n,b.Zero(),e));ws=class extends Na{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()],ws.prototype,"shadowFrustumSize",null);P([F()],ws.prototype,"shadowOrthoScale",null);P([F()],ws.prototype,"autoUpdateExtends",void 0);P([F()],ws.prototype,"autoCalcShadowZBounds",void 0);P([F("orthoLeft")],ws.prototype,"_orthoLeft",void 0);P([F("orthoRight")],ws.prototype,"_orthoRight",void 0);P([F("orthoTop")],ws.prototype,"_orthoTop",void 0);P([F("orthoBottom")],ws.prototype,"_orthoBottom",void 0);Ft("BABYLON.DirectionalLight",ws)});var Df,Pk=M(()=>{kt();Vt();Ge();ta();Lf();gx();zi();_i.AddNodeConstructor("Light_Type_0",(n,e)=>()=>new Df(n,b.Zero(),e));Df=class extends Na{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()],Df.prototype,"shadowAngle",null);Ft("BABYLON.PointLight",Df)});var Wr,gP=M(()=>{kt();Vt();Ge();ta();Lf();gx();Gr();zi();_i.AddNodeConstructor("Light_Type_2",(n,e)=>()=>new Wr(n,b.Zero(),b.Zero(),0,0,e));Wr=class n extends Na{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 ve){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()],Wr.prototype,"angle",null);P([F()],Wr.prototype,"innerAngle",null);P([F()],Wr.prototype,"shadowAngleScale",null);P([F()],Wr.prototype,"exponent",void 0);P([F()],Wr.prototype,"projectionTextureLightNear",null);P([F()],Wr.prototype,"projectionTextureLightFar",null);P([F()],Wr.prototype,"projectionTextureUpDirection",null);P([Ut("projectedLightTexture")],Wr.prototype,"_projectionTexture",void 0);Ft("BABYLON.SpotLight",Wr)});function Lk(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 Ie=[],Ze=[];for(S=0;S0&&(V=L[R].subtract(L[R-1]).length(),w=V+_[E],m[E].push(w),_[E]=w),R++;i&&(R--,f.push(L[0].x,L[0].y,L[0].z),V=L[R].subtract(L[0]).length(),w=V+_[E],m[E].push(w),_[E]=w),x[E]=O+C,T[E]=I,I+=O+C}let N,U,H,ee;for(S=0;S{let m=i[0].length,p=o,_=0,g=p._originalBuilderSideOrientation===Z.DOUBLESIDE?2:1;for(let v=1;v<=g;++v)for(let x=0;x{Ge();yi();ki();pr();rn();Ce.CreateRibbon=Lk;Z.CreateRibbon=(n,e,t=!1,i,r,s,a=!1,o,l)=>To(n,{pathArray:e,closeArray:t,closePath:i,offset:r,updatable:a,sideOrientation:o,instance:l},s)});function Dk(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();pr();rn();Ce.CreateDisc=Dk;Z.CreateDisc=(n,e,t,i=null,r,s)=>vP(n,{radius:e,tessellation:t,sideOrientation:s,updatable:r},i)});var Wm,Nk=M(()=>{Ge();ki();yi();Z._GroundMeshParser=(n,e)=>Wm.Parse(n,e);Wm=class n extends Z{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=$.Matrix[5];i.invertToRef(r);let s=$.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=$.Matrix[5];r.invertToRef(s);let a=$.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 SP(n,e={},t){let i=new Wm(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,EP(e).applyToMesh(i,e.updatable),i._setReady(!0),i}function TP(n,e,t=null){let i=new Z(n,t);return wk(e).applyToMesh(i,e.updatable),i}function AP(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 Wm(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)=>{Fk({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 xP=M(()=>{Ge();zt();yi();pr();Nk();Ci();Ni();Nn();rn();Ce.CreateGround=EP;Ce.CreateTiledGround=wk;Ce.CreateGroundFromHeightMap=Fk;Z.CreateGround=(n,e,t,i,r,s)=>SP(n,{width:e,height:t,subdivisions:i,updatable:s},r);Z.CreateTiledGround=(n,e,t,i,r,s,a,o,l)=>TP(n,{xmin:e,zmin:t,xmax:i,zmax:r,subdivisions:s,precision:a,updatable:l},o);Z.CreateGroundFromHeightMap=(n,e,t,i,r,s,a,o,l,c,f)=>AP(n,e,{width:t,height:i,subdivisions:r,minHeight:s,maxHeight:a,updatable:l,onReady:c,alphaFilter:f},o)});function vx(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 RP(n,e={},t=null){let i=new Z(n,t);return e.sideOrientation=Z._GetDefaultSideOrientation(e.sideOrientation),i._originalBuilderSideOrientation=e.sideOrientation,vx(e).applyToMesh(i,e.updatable),i}var bP=M(()=>{Ge();zt();yi();pr();rn();xP();Ce.CreateBox=vx;Z.CreateBox=(n,e,t=null,i,r)=>RP(n,{size:e,sideOrientation:r,updatable:i},t)});function Hm(n){let e=n.pattern||Z.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 Z.CENTER:l/=2,_-=l,v+=l;break;case Z.LEFT:v+=l,m=-l/2;break;case Z.RIGHT:_-=l,m=l/2;break}switch(s){case Z.CENTER:h/=2,g-=h,x+=h;break;case Z.BOTTOM:x+=h,p=-h/2;break;case Z.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===Z.ROTATE_TILE||e===Z.ROTATE_ROW)&&(S[1]=[1,1,0,1,0,0,1,0]),(e===Z.FLIP_TILE||e===Z.FLIP_ROW)&&(S[1]=[1,0,0,0,0,1,1,1]),(e===Z.FLIP_N_ROTATE_TILE||e===Z.FLIP_N_ROTATE_ROW)&&(S[1]=[0,1,1,1,1,0,0,0]);let R=[],I=[],C=[],y=0;for(let w=0;w0||h>0){let w=h>0&&(s===Z.CENTER||s===Z.TOP),N=h>0&&(s===Z.CENTER||s===Z.BOTTOM),U=l>0&&(r===Z.CENTER||r===Z.RIGHT),H=l>0&&(r===Z.CENTER||r===Z.LEFT),ee,q,te,z,Y;if(w&&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,q=1-l/t,te=1-h/i,z=1,Y=1,ee=[q,te,z,te,z,Y,q,Y],e===Z.ROTATE_ROW&&(ee=[1-q,1-te,1-z,1-te,1-z,1-Y,1-q,1-Y]),e===Z.FLIP_ROW&&(ee=[1-q,te,1-z,te,1-z,Y,1-q,Y]),e===Z.FLIP_N_ROTATE_ROW&&(ee=[q,1-te,z,1-te,z,1-Y,q,1-Y]),R=R.concat(ee),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&&H&&(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,q=0,te=1-h/i,z=l/t,Y=1,ee=[q,te,z,te,z,Y,q,Y],(e===Z.ROTATE_ROW||e===Z.ROTATE_TILE&&o%2===0)&&(ee=[1-q,1-te,1-z,1-te,1-z,1-Y,1-q,1-Y]),(e===Z.FLIP_ROW||e===Z.FLIP_TILE&&o%2===0)&&(ee=[1-q,te,1-z,te,1-z,Y,1-q,Y]),(e===Z.FLIP_N_ROTATE_ROW||e===Z.FLIP_N_ROTATE_TILE&&o%2===0)&&(ee=[q,1-te,z,1-te,z,1-Y,q,1-Y]),R=R.concat(ee),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&&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,q=1-l/t,te=0,z=1,Y=h/i,ee=[q,te,z,te,z,Y,q,Y],(e===Z.ROTATE_ROW&&f%2===1||e===Z.ROTATE_TILE&&f%1===0)&&(ee=[1-q,1-te,1-z,1-te,1-z,1-Y,1-q,1-Y]),(e===Z.FLIP_ROW&&f%2===1||e===Z.FLIP_TILE&&f%2===0)&&(ee=[1-q,te,1-z,te,1-z,Y,1-q,Y]),(e===Z.FLIP_N_ROTATE_ROW&&f%2===1||e===Z.FLIP_N_ROTATE_TILE&&f%2===0)&&(ee=[q,1-te,z,1-te,z,1-Y,q,1-Y]),R=R.concat(ee),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&&H&&(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,q=0,te=0,z=l/t,Y=h/i,ee=[q,te,z,te,z,Y,q,Y],(e===Z.ROTATE_ROW&&f%2===1||e===Z.ROTATE_TILE&&(f+o)%2===1)&&(ee=[1-q,1-te,1-z,1-te,1-z,1-Y,1-q,1-Y]),(e===Z.FLIP_ROW&&f%2===1||e===Z.FLIP_TILE&&(f+o)%2===1)&&(ee=[1-q,te,1-z,te,1-z,Y,1-q,Y]),(e===Z.FLIP_N_ROTATE_ROW&&f%2===1||e===Z.FLIP_N_ROTATE_TILE&&(f+o)%2===1)&&(ee=[q,1-te,z,1-te,z,1-Y,q,1-Y]),R=R.concat(ee),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){let me=[];q=0,te=1-h/i,z=1,Y=1,me[0]=[q,te,z,te,z,Y,q,Y],me[1]=[q,te,z,te,z,Y,q,Y],(e===Z.ROTATE_TILE||e===Z.ROTATE_ROW)&&(me[1]=[1-q,1-te,1-z,1-te,1-z,1-Y,1-q,1-Y]),(e===Z.FLIP_TILE||e===Z.FLIP_ROW)&&(me[1]=[1-q,te,1-z,te,1-z,Y,1-q,Y]),(e===Z.FLIP_N_ROTATE_TILE||e===Z.FLIP_N_ROTATE_ROW)&&(me[1]=[q,1-te,z,1-te,z,1-Y,q,1-Y]);for(let Re=0;Re{yi();pr();Ce.CreateTiledPlane=Hm});function Uk(n){let t=n.faceUV||new Array(6),i=n.faceColors,r=n.pattern||Z.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 w=0;w<6;w++)t[w]===void 0&&(t[w]=new Mi(0,0,1,1)),i&&i[w]===void 0&&(i[w]=new lt(1,1,1,1));let u=s/2,m=a/2,p=o/2,_=[];for(let w=0;w<2;w++)_[w]=Hm({pattern:r,tileWidth:l,tileHeight:c,width:s,height:a,alignVertical:h,alignHorizontal:f,sideOrientation:d});for(let w=2;w<4;w++)_[w]=Hm({pattern:r,tileWidth:l,tileHeight:c,width:o,height:a,alignVertical:h,alignHorizontal:f,sideOrientation:d});let g=h;h===Z.BOTTOM?g=Z.TOP:h===Z.TOP&&(g=Z.BOTTOM);for(let w=4;w<6;w++)_[w]=Hm({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,L=0;for(let w=0;w<6;w++){let N=_[w].positions.length;R[w]=[],I[w]=[];for(let U=0;UU+L)),L+=R[w].length,i){let U=i[w];for(let H=0;H{Ge();zt();yi();pr();IP();rn();Ex=1,MP=-1;Ce.CreateTiledBox=Uk});function kk(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),L=y.multiply(c),O=y.divide(c).normalize();u.push(L.x,L.y,L.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();pr();rn();Ce.CreateSphere=kk;Z.CreateSphere=(n,e,t,i,r,s)=>CP(n,{segments:e,diameterX:t,diameterY:t,diameterZ:t,sideOrientation:s,updatable:r},i)});function Hk(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||Z.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=ge?t/2:i/2;if(ne===0)return;let ue,De,de,Ie=ge?h[p-1]:h[0],Ze=null;d&&(Ze=ge?d[p-1]:d[0]);let Tt=v.length/3,Xe=ge?e/2:-e/2,je=new b(0,Xe,0);v.push(je.x,je.y,je.z),x.push(0,ge?1:-1,0);let $t=Ie.y+(Ie.w-Ie.y)*.5;T.push(Ie.x+(Ie.z-Ie.x)*.5,Mt?1-$t:$t),Ze&&E.push(Ze.r,Ze.g,Ze.b,Ze.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,ge?1:-1,0);let ii=Ie.y+(Ie.w-Ie.y)*Vi.y;T.push(Ie.x+(Ie.z-Ie.x)*Vi.x,Mt?1-ii:ii),Ze&&E.push(Ze.r,Ze.g,Ze.b,Ze.a)}for(de=0;de{Ge();zt();yi();pr();Ps();Ku();rn();Ce.CreateCylinder=Hk;Z.CreateCylinder=(n,e,t,i,r,s,a,o,l)=>((a===void 0||!(a instanceof Jt))&&(a!==void 0&&(l=o||Z.DEFAULTSIDE,o=a),a=s,s=1),yP(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),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 PP(n,e={},t){let i=new Z(n,t);return e.sideOrientation=Z._GetDefaultSideOrientation(e.sideOrientation),i._originalBuilderSideOrientation=e.sideOrientation,Xk(e).applyToMesh(i,e.updatable),i}var Yk=M(()=>{Ge();yi();pr();rn();Ce.CreateTorus=Xk;Z.CreateTorus=(n,e,t,i,r,s,a)=>PP(n,{diameter:e,thickness:t,tessellation:i,sideOrientation:a,updatable:s},r)});function Kk(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();pr();rn();Ce.CreateTorusKnot=Kk;Z.CreateTorusKnot=(n,e,t,i,r,s,a,o,l,c)=>LP(n,{radius:e,tube:t,radialSegments:i,tubularSegments:r,p:s,q:a,sideOrientation:c,updatable:l},o)});var ac,DP=M(()=>{Ge();Pt();Em();yi();tg();$h();ki();Ci();zi();Z._instancedMeshFactory=(n,e)=>{let t=new ac(n,e);if(e.instancedBuffers){t.instancedBuffers={};for(let i in e.instancedBuffers)t.instancedBuffers[i]=e.instancedBuffers[i]}return t};ac=class extends Tr{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||J.Warn("Note - setting renderingGroupId of an instanced mesh has no effect on the scene")}getTotalVertices(){return this._sourceMesh?this._sourceMesh.getTotalVertices():0}getTotalIndices(){return this._sourceMesh.getTotalIndices()}get sourceMesh(){return this._sourceMesh}get geometry(){return this._sourceMesh._geometry}createInstance(e){return this._sourceMesh.createInstance(e)}isReady(e=!1){return this._sourceMesh.isReady(e,!0)}getVerticesData(e,t,i){return this._sourceMesh.getVerticesData(e,t,i)}copyVerticesData(e,t){this._sourceMesh.copyVerticesData(e,t)}getVertexBuffer(e,t){return this._sourceMesh.getVertexBuffer(e,t)}setVerticesData(e,t,i,r){return this.sourceMesh&&this.sourceMesh.setVerticesData(e,t,i,r),this.sourceMesh}updateVerticesData(e,t,i,r){return this.sourceMesh&&this.sourceMesh.updateVerticesData(e,t,i,r),this.sourceMesh}setIndices(e,t=null){return this.sourceMesh&&this.sourceMesh.setIndices(e,t),this.sourceMesh}isVerticesDataPresent(e){return this._sourceMesh.isVerticesDataPresent(e)}getIndices(){return this._sourceMesh.getIndices()}get _positions(){return this._sourceMesh._positions}refreshBoundingInfo(e=!1,t=!1){if(this.hasBoundingInfo&&this.getBoundingInfo().isLocked)return this;let i;typeof e=="object"?i=e:i={applySkeleton:e,applyMorph:t};let r=this._sourceMesh.geometry?this._sourceMesh.geometry.boundingBias:null;return this._refreshBoundingInfo(this._sourceMesh._getData(i,null,D.PositionKind),r),this}_preActivate(){return this._currentLOD&&this._currentLOD._preActivate(),this}_activate(e,t){if(super._activate(e,t),this._sourceMesh.subMeshes||J.Warn("Instances should only be created for meshes with geometry."),this._currentLOD){if(this._currentLOD._getWorldMatrixDeterminant()>=0!=this._getWorldMatrixDeterminant()>=0)return this._internalAbstractMeshDataInfo._actAsRegularMesh=!0,!0;if(this._internalAbstractMeshDataInfo._actAsRegularMesh=!1,this._currentLOD._registerInstanceForRenderId(this,e),t){if(!this._currentLOD._internalAbstractMeshDataInfo._isActiveIntermediate)return this._currentLOD._internalAbstractMeshDataInfo._onlyForInstancesIntermediate=!0,!0}else if(!this._currentLOD._internalAbstractMeshDataInfo._isActive)return this._currentLOD._internalAbstractMeshDataInfo._onlyForInstances=!0,!0}return!1}_postActivate(){this._sourceMesh.edgesShareWithInstances&&this._sourceMesh._edgesRenderer&&this._sourceMesh._edgesRenderer.isEnabled&&this._sourceMesh._renderingGroup?(this._sourceMesh._renderingGroup._edgesRenderers.pushNoDuplicate(this._sourceMesh._edgesRenderer),this._sourceMesh._edgesRenderer.customInstances.push(this.getWorldMatrix())):this._edgesRenderer&&this._edgesRenderer.isEnabled&&this._sourceMesh._renderingGroup&&this._sourceMesh._renderingGroup._edgesRenderers.push(this._edgesRenderer)}getWorldMatrix(){if(this._currentLOD&&this._currentLOD!==this._sourceMesh&&this._currentLOD.billboardMode!==ei.BILLBOARDMODE_NONE&&this._currentLOD._masterMesh!==this){this._billboardWorldMatrix||(this._billboardWorldMatrix=new j);let e=this._currentLOD._masterMesh;return this._currentLOD._masterMesh=this,$.Vector3[7].copyFrom(this._currentLOD.position),this._currentLOD.position.set(0,0,0),this._billboardWorldMatrix.copyFrom(this._currentLOD.computeWorldMatrix(!0)),this._currentLOD.position.copyFrom($.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{Xn=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();Wn();ml=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 Nf(n){let e=n.getVertexBuffers();if(!e)return null;let t=qk.get(n);if(!t)t=new Map,qk.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 wf(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 qk,yg=M(()=>{qk=new WeakMap});var OP,Ao,NP=M(()=>{Rr();Ps();Ge();ki();Gr();zi();Of();Gh();Cg();Ni();fl();kn();yg();OP={effect:null,subMesh:null},Ao=class n extends ml{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(D.MatricesIndicesExtraKind),l.push(D.MatricesWeightsExtraKind));let y=e.skeleton;o.push("#define NUM_BONE_INFLUENCERS "+e.numBoneInfluencers),c=new Xn,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,L=o.indexOf("#define UV2")!==-1,O=o.indexOf("#define TANGENT")!==-1,V=o.indexOf("#define NORMAL")!==-1,w=o.indexOf("#define VERTEXCOLOR")!==-1;m=hl(p,o,l,e,!0,V,O,y,L,w),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&&(Un(h),cl(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=Nf(y),this._vertexPullingMetadata&&this._vertexPullingMetadata.forEach((O,V)=>{h.push(`vp_${V}_info`)})),o.push("#define USE_VERTEX_PULLING");let L=(S=_.geometry)==null?void 0:S.getIndexBuffer();L&&!_.isUnIndexed&&(o.push("#define VERTEX_PULLING_USE_INDEX_BUFFER"),L.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&&(OP.effect=E,OP.subMesh=(C=i!=null?i:e==null?void 0:e.subMeshes[0])!=null?C:null,this._onEffectCreatedObservable.notifyObservers(OP))),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,ve.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 Pr;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 Pr;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()})}};Ao.SnippetUrl="https://snippet.babylonjs.com";Ao.CreateFromSnippetAsync=Ao.ParseFromSnippetAsync;Ft("BABYLON.ShaderMaterial",Ao)});var Zk,Eoe,oc=M(()=>{G();Zk="bonesDeclaration",Eoe=`#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 -`;A.IncludesShadersStoreWGSL[jk]||(A.IncludesShadersStoreWGSL[jk]=loe)});var qk,coe,ac=M(()=>{G();qk="bakedVertexAnimationDeclaration",coe=`#ifdef BAKED_VERTEX_ANIMATION_TEXTURE +`;A.IncludesShadersStoreWGSL[Zk]||(A.IncludesShadersStoreWGSL[Zk]=Eoe)});var Qk,Soe,lc=M(()=>{G();Qk="bakedVertexAnimationDeclaration",Soe=`#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 -`;A.IncludesShadersStoreWGSL[qk]||(A.IncludesShadersStoreWGSL[qk]=coe)});var Zk,foe,oc=M(()=>{G();Zk="clipPlaneVertexDeclaration",foe=`#ifdef CLIPPLANE +`;A.IncludesShadersStoreWGSL[Qk]||(A.IncludesShadersStoreWGSL[Qk]=Soe)});var $k,Toe,cc=M(()=>{G();$k="clipPlaneVertexDeclaration",Toe=`#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 -`;A.IncludesShadersStoreWGSL[Zk]||(A.IncludesShadersStoreWGSL[Zk]=foe)});var Qk,hoe,Ig=M(()=>{G();Qk="fogVertexDeclaration",hoe=`#ifdef FOG +`;A.IncludesShadersStoreWGSL[$k]||(A.IncludesShadersStoreWGSL[$k]=Toe)});var Jk,Aoe,Pg=M(()=>{G();Jk="fogVertexDeclaration",Aoe=`#ifdef FOG varying vFogDistance: vec3f; #endif -`;A.IncludesShadersStoreWGSL[Qk]||(A.IncludesShadersStoreWGSL[Qk]=hoe)});var $k,doe,wf=M(()=>{G();$k="instancesDeclaration",doe=`#ifdef INSTANCES +`;A.IncludesShadersStoreWGSL[Jk]||(A.IncludesShadersStoreWGSL[Jk]=Aoe)});var eW,xoe,Ff=M(()=>{G();eW="instancesDeclaration",xoe=`#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 -`;A.IncludesShadersStoreWGSL[$k]||(A.IncludesShadersStoreWGSL[$k]=doe)});var Jk,uoe,lc=M(()=>{G();Jk="instancesVertex",uoe=`#ifdef INSTANCES +`;A.IncludesShadersStoreWGSL[eW]||(A.IncludesShadersStoreWGSL[eW]=xoe)});var tW,Roe,fc=M(()=>{G();tW="instancesVertex",Roe=`#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 -`;A.IncludesShadersStoreWGSL[Jk]||(A.IncludesShadersStoreWGSL[Jk]=uoe)});var eW,moe,cc=M(()=>{G();eW="bonesVertex",moe=`#ifndef BAKED_VERTEX_ANIMATION_TEXTURE +`;A.IncludesShadersStoreWGSL[tW]||(A.IncludesShadersStoreWGSL[tW]=Roe)});var iW,boe,hc=M(()=>{G();iW="bonesVertex",boe=`#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 -`;A.IncludesShadersStoreWGSL[eW]||(A.IncludesShadersStoreWGSL[eW]=moe)});var tW,poe,fc=M(()=>{G();tW="bakedVertexAnimation",poe=`#ifdef BAKED_VERTEX_ANIMATION_TEXTURE +`;A.IncludesShadersStoreWGSL[iW]||(A.IncludesShadersStoreWGSL[iW]=boe)});var rW,Ioe,dc=M(()=>{G();rW="bakedVertexAnimation",Ioe=`#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 -`;A.IncludesShadersStoreWGSL[tW]||(A.IncludesShadersStoreWGSL[tW]=poe)});var iW,_oe,hc=M(()=>{G();iW="clipPlaneVertex",_oe=`#ifdef CLIPPLANE +`;A.IncludesShadersStoreWGSL[rW]||(A.IncludesShadersStoreWGSL[rW]=Ioe)});var nW,Moe,uc=M(()=>{G();nW="clipPlaneVertex",Moe=`#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 -`;A.IncludesShadersStoreWGSL[iW]||(A.IncludesShadersStoreWGSL[iW]=_oe)});var rW,goe,Mg=M(()=>{G();rW="fogVertex",goe=`#ifdef FOG +`;A.IncludesShadersStoreWGSL[nW]||(A.IncludesShadersStoreWGSL[nW]=Moe)});var sW,Coe,Lg=M(()=>{G();sW="fogVertex",Coe=`#ifdef FOG #ifdef SCENE_UBO vertexOutputs.vFogDistance=(scene.view*worldPos).xyz; #else vertexOutputs.vFogDistance=(uniforms.view*worldPos).xyz; #endif #endif -`;A.IncludesShadersStoreWGSL[rW]||(A.IncludesShadersStoreWGSL[rW]=goe)});var nW,voe,Cg=M(()=>{G();nW="vertexColorMixing",voe=`#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES) +`;A.IncludesShadersStoreWGSL[sW]||(A.IncludesShadersStoreWGSL[sW]=Coe)});var aW,yoe,Dg=M(()=>{G();aW="vertexColorMixing",yoe=`#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 -`;A.IncludesShadersStoreWGSL[nW]||(A.IncludesShadersStoreWGSL[nW]=voe)});var aW={};tt(aW,{colorVertexShaderWGSL:()=>Eoe});var LP,sW,Eoe,oW=M(()=>{G();sc();ac();oc();Ig();wf();lc();cc();fc();hc();Mg();Cg();LP="colorVertexShader",sW=`attribute position: vec3f; +`;A.IncludesShadersStoreWGSL[aW]||(A.IncludesShadersStoreWGSL[aW]=yoe)});var lW={};tt(lW,{colorVertexShaderWGSL:()=>Poe});var wP,oW,Poe,cW=M(()=>{G();oc();lc();cc();Pg();Ff();fc();hc();dc();uc();Lg();Dg();wP="colorVertexShader",oW=`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 -}`;A.ShadersStoreWGSL[LP]||(A.ShadersStoreWGSL[LP]=sW);Eoe={name:LP,shader:sW}});var lW,Soe,dc=M(()=>{G();lW="clipPlaneFragmentDeclaration",Soe=`#ifdef CLIPPLANE +}`;A.ShadersStoreWGSL[wP]||(A.ShadersStoreWGSL[wP]=oW);Poe={name:wP,shader:oW}});var fW,Loe,mc=M(()=>{G();fW="clipPlaneFragmentDeclaration",Loe=`#ifdef CLIPPLANE varying fClipDistance: f32; #endif #ifdef CLIPPLANE2 @@ -4711,7 +4711,7 @@ varying fClipDistance5: f32; #ifdef CLIPPLANE6 varying fClipDistance6: f32; #endif -`;A.IncludesShadersStoreWGSL[lW]||(A.IncludesShadersStoreWGSL[lW]=Soe)});var cW,Toe,yg=M(()=>{G();cW="fogFragmentDeclaration",Toe=`#ifdef FOG +`;A.IncludesShadersStoreWGSL[fW]||(A.IncludesShadersStoreWGSL[fW]=Loe)});var hW,Doe,Og=M(()=>{G();hW="fogFragmentDeclaration",Doe=`#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 -`;A.IncludesShadersStoreWGSL[cW]||(A.IncludesShadersStoreWGSL[cW]=Toe)});var fW,Aoe,uc=M(()=>{G();fW="clipPlaneFragment",Aoe=`#if defined(CLIPPLANE) || defined(CLIPPLANE2) || defined(CLIPPLANE3) || defined(CLIPPLANE4) || defined(CLIPPLANE5) || defined(CLIPPLANE6) +`;A.IncludesShadersStoreWGSL[hW]||(A.IncludesShadersStoreWGSL[hW]=Doe)});var dW,Ooe,pc=M(()=>{G();dW="clipPlaneFragment",Ooe=`#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 -`;A.IncludesShadersStoreWGSL[fW]||(A.IncludesShadersStoreWGSL[fW]=Aoe)});var hW,xoe,Pg=M(()=>{G();hW="fogFragment",xoe=`#ifdef FOG +`;A.IncludesShadersStoreWGSL[dW]||(A.IncludesShadersStoreWGSL[dW]=Ooe)});var uW,Noe,Ng=M(()=>{G();uW="fogFragment",Noe=`#ifdef FOG var fog: f32=CalcFogFactor(); #ifdef PBR fog=toLinearSpace(fog); #endif color= vec4f(mix(uniforms.vFogColor,color.rgb,fog),color.a); #endif -`;A.IncludesShadersStoreWGSL[hW]||(A.IncludesShadersStoreWGSL[hW]=xoe)});var uW={};tt(uW,{colorPixelShaderWGSL:()=>Roe});var DP,dW,Roe,mW=M(()=>{G();dc();yg();uc();Pg();DP="colorPixelShader",dW=`#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES) +`;A.IncludesShadersStoreWGSL[uW]||(A.IncludesShadersStoreWGSL[uW]=Noe)});var pW={};tt(pW,{colorPixelShaderWGSL:()=>woe});var FP,mW,woe,_W=M(()=>{G();mc();Og();pc();Ng();FP="colorPixelShader",mW=`#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 -}`;A.ShadersStoreWGSL[DP]||(A.ShadersStoreWGSL[DP]=dW);Roe={name:DP,shader:dW}});var pW,boe,mc=M(()=>{G();pW="bonesDeclaration",boe=`#if NUM_BONE_INFLUENCERS>0 +}`;A.ShadersStoreWGSL[FP]||(A.ShadersStoreWGSL[FP]=mW);woe={name:FP,shader:mW}});var gW,Foe,_c=M(()=>{G();gW="bonesDeclaration",Foe=`#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 -`;A.IncludesShadersStore[pW]||(A.IncludesShadersStore[pW]=boe)});var _W,Ioe,pc=M(()=>{G();_W="bakedVertexAnimationDeclaration",Ioe=`#ifdef BAKED_VERTEX_ANIMATION_TEXTURE +`;A.IncludesShadersStore[gW]||(A.IncludesShadersStore[gW]=Foe)});var vW,Boe,gc=M(()=>{G();vW="bakedVertexAnimationDeclaration",Boe=`#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 -`;A.IncludesShadersStore[_W]||(A.IncludesShadersStore[_W]=Ioe)});var gW,Moe,_c=M(()=>{G();gW="clipPlaneVertexDeclaration",Moe=`#ifdef CLIPPLANE +`;A.IncludesShadersStore[vW]||(A.IncludesShadersStore[vW]=Boe)});var EW,Uoe,vc=M(()=>{G();EW="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 -`;A.IncludesShadersStore[gW]||(A.IncludesShadersStore[gW]=Moe)});var vW,Coe,Lg=M(()=>{G();vW="fogVertexDeclaration",Coe=`#ifdef FOG +`;A.IncludesShadersStore[EW]||(A.IncludesShadersStore[EW]=Uoe)});var SW,Voe,wg=M(()=>{G();SW="fogVertexDeclaration",Voe=`#ifdef FOG varying vec3 vFogDistance; #endif -`;A.IncludesShadersStore[vW]||(A.IncludesShadersStore[vW]=Coe)});var EW,yoe,Ff=M(()=>{G();EW="instancesDeclaration",yoe=`#ifdef INSTANCES +`;A.IncludesShadersStore[SW]||(A.IncludesShadersStore[SW]=Voe)});var TW,Goe,Bf=M(()=>{G();TW="instancesDeclaration",Goe=`#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 -`;A.IncludesShadersStore[EW]||(A.IncludesShadersStore[EW]=yoe)});var SW,Poe,gc=M(()=>{G();SW="instancesVertex",Poe=`#ifdef INSTANCES +`;A.IncludesShadersStore[TW]||(A.IncludesShadersStore[TW]=Goe)});var AW,koe,Ec=M(()=>{G();AW="instancesVertex",koe=`#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 -`;A.IncludesShadersStore[SW]||(A.IncludesShadersStore[SW]=Poe)});var TW,Loe,vc=M(()=>{G();TW="bonesVertex",Loe=`#ifndef BAKED_VERTEX_ANIMATION_TEXTURE +`;A.IncludesShadersStore[AW]||(A.IncludesShadersStore[AW]=koe)});var xW,Woe,Sc=M(()=>{G();xW="bonesVertex",Woe=`#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 -`;A.IncludesShadersStore[TW]||(A.IncludesShadersStore[TW]=Loe)});var AW,Doe,Ec=M(()=>{G();AW="bakedVertexAnimation",Doe=`#ifdef BAKED_VERTEX_ANIMATION_TEXTURE +`;A.IncludesShadersStore[xW]||(A.IncludesShadersStore[xW]=Woe)});var RW,Hoe,Tc=M(()=>{G();RW="bakedVertexAnimation",Hoe=`#ifdef BAKED_VERTEX_ANIMATION_TEXTURE { #ifdef INSTANCES #define BVASNAME bakedVertexAnimationSettingsInstanced @@ -4972,7 +4972,7 @@ VATInfluence+=readMatrixFromRawSamplerVAT(bakedVertexAnimationTexture,matricesIn #endif finalWorld=finalWorld*VATInfluence;} #endif -`;A.IncludesShadersStore[AW]||(A.IncludesShadersStore[AW]=Doe)});var xW,Ooe,Sc=M(()=>{G();xW="clipPlaneVertex",Ooe=`#ifdef CLIPPLANE +`;A.IncludesShadersStore[RW]||(A.IncludesShadersStore[RW]=Hoe)});var bW,zoe,Ac=M(()=>{G();bW="clipPlaneVertex",zoe=`#ifdef CLIPPLANE fClipDistance=dot(worldPos,vClipPlane); #endif #ifdef CLIPPLANE2 @@ -4990,10 +4990,10 @@ fClipDistance5=dot(worldPos,vClipPlane5); #ifdef CLIPPLANE6 fClipDistance6=dot(worldPos,vClipPlane6); #endif -`;A.IncludesShadersStore[xW]||(A.IncludesShadersStore[xW]=Ooe)});var RW,Noe,Dg=M(()=>{G();RW="fogVertex",Noe=`#ifdef FOG +`;A.IncludesShadersStore[bW]||(A.IncludesShadersStore[bW]=zoe)});var IW,Xoe,Fg=M(()=>{G();IW="fogVertex",Xoe=`#ifdef FOG vFogDistance=(view*worldPos).xyz; #endif -`;A.IncludesShadersStore[RW]||(A.IncludesShadersStore[RW]=Noe)});var bW,woe,Og=M(()=>{G();bW="vertexColorMixing",woe=`#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES) +`;A.IncludesShadersStore[IW]||(A.IncludesShadersStore[IW]=Xoe)});var MW,Yoe,Bg=M(()=>{G();MW="vertexColorMixing",Yoe=`#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 -`;A.IncludesShadersStore[bW]||(A.IncludesShadersStore[bW]=woe)});var MW={};tt(MW,{colorVertexShader:()=>Foe});var OP,IW,Foe,CW=M(()=>{G();mc();pc();_c();Lg();Ff();gc();vc();Ec();Sc();Dg();Og();OP="colorVertexShader",IW=`attribute vec3 position; +`;A.IncludesShadersStore[MW]||(A.IncludesShadersStore[MW]=Yoe)});var yW={};tt(yW,{colorVertexShader:()=>Koe});var BP,CW,Koe,PW=M(()=>{G();_c();gc();vc();wg();Bf();Ec();Sc();Tc();Ac();Fg();Bg();BP="colorVertexShader",CW=`attribute vec3 position; #ifdef VERTEXCOLOR attribute vec4 color; #endif @@ -5044,7 +5044,7 @@ gl_Position=viewProjection*worldPos; #include #include #define CUSTOM_VERTEX_MAIN_END -}`;A.ShadersStore[OP]||(A.ShadersStore[OP]=IW);Foe={name:OP,shader:IW}});var yW,Boe,Tc=M(()=>{G();yW="clipPlaneFragmentDeclaration",Boe=`#ifdef CLIPPLANE +}`;A.ShadersStore[BP]||(A.ShadersStore[BP]=CW);Koe={name:BP,shader:CW}});var LW,joe,xc=M(()=>{G();LW="clipPlaneFragmentDeclaration",joe=`#ifdef CLIPPLANE varying float fClipDistance; #endif #ifdef CLIPPLANE2 @@ -5062,7 +5062,7 @@ varying float fClipDistance5; #ifdef CLIPPLANE6 varying float fClipDistance6; #endif -`;A.IncludesShadersStore[yW]||(A.IncludesShadersStore[yW]=Boe)});var PW,Uoe,Ng=M(()=>{G();PW="fogFragmentDeclaration",Uoe=`#ifdef FOG +`;A.IncludesShadersStore[LW]||(A.IncludesShadersStore[LW]=joe)});var DW,qoe,Ug=M(()=>{G();DW="fogFragmentDeclaration",qoe=`#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 -`;A.IncludesShadersStore[PW]||(A.IncludesShadersStore[PW]=Uoe)});var LW,Voe,Ac=M(()=>{G();LW="clipPlaneFragment",Voe=`#if defined(CLIPPLANE) || defined(CLIPPLANE2) || defined(CLIPPLANE3) || defined(CLIPPLANE4) || defined(CLIPPLANE5) || defined(CLIPPLANE6) +`;A.IncludesShadersStore[DW]||(A.IncludesShadersStore[DW]=qoe)});var OW,Zoe,Rc=M(()=>{G();OW="clipPlaneFragment",Zoe=`#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 -`;A.IncludesShadersStore[LW]||(A.IncludesShadersStore[LW]=Voe)});var DW,Goe,wg=M(()=>{G();DW="fogFragment",Goe=`#ifdef FOG +`;A.IncludesShadersStore[OW]||(A.IncludesShadersStore[OW]=Zoe)});var NW,Qoe,Vg=M(()=>{G();NW="fogFragment",Qoe=`#ifdef FOG float fog=CalcFogFactor(); #ifdef PBR fog=toLinearSpace(fog); #endif color.rgb=mix(vFogColor,color.rgb,fog); #endif -`;A.IncludesShadersStore[DW]||(A.IncludesShadersStore[DW]=Goe)});var NW={};tt(NW,{colorPixelShader:()=>koe});var NP,OW,koe,wW=M(()=>{G();Tc();Ng();Ac();wg();NP="colorPixelShader",OW=`#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES) +`;A.IncludesShadersStore[NW]||(A.IncludesShadersStore[NW]=Qoe)});var FW={};tt(FW,{colorPixelShader:()=>$oe});var UP,wW,$oe,BW=M(()=>{G();xc();Ug();Rc();Vg();UP="colorPixelShader",wW=`#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 -}`;A.ShadersStore[NP]||(A.ShadersStore[NP]=OW);koe={name:NP,shader:OW}});var Jh,wP,FW=M(()=>{zt();ki();yi();CP();kn();PP();Z._LinesMeshParser=(n,e)=>Jh.Parse(n,e);Jh=class n extends Z{_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:[D.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(D.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(()=>(oW(),aW)),Promise.resolve().then(()=>(mW(),uW))]):await Promise.all([Promise.resolve().then(()=>(CW(),MW)),Promise.resolve().then(()=>(wW(),NW))])};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 wP(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}};Jh.ForceGLSL=!1;wP=class extends nc{constructor(e,t){super(e,t),this.intersectionThreshold=t.intersectionThreshold}getClassName(){return"InstancedLinesMesh"}}});function BW(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 UW(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();FW();ki();Pt();Ce.CreateLineSystem=BW;Ce.CreateDashedLines=UW;Z.CreateLines=(n,e,t=null,i=!1,r=null)=>BP(n,{points:e,updatable:i,instance:r},t);Z.CreateDashedLines=(n,e,t,i,r,s=null,a,o)=>UP(n,{points:e,dashSize:t,gapSize:i,dashNb:r,updatable:a,instance:o},s)});var VP,Fg,px,GW=M(()=>{Pt();Ge();ki();yi();mr();Fh();On();Ni();VP=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 VP(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}}},px=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"&&J.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 Z(this._name,this._scene),s=this.buildVertexData(t,i);return r.setVerticesData(D.PositionKind,s.positions,e),r.setVerticesData(D.NormalKind,s.normals,e),r.setVerticesData(D.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();GW();ki();Ni();rn();Ce.CreatePolygon=kW;Z.CreatePolygon=(n,e,t,i,r,s,a=earcut)=>_x(n,{shape:e,holes:i,updatable:r,sideOrientation:s},t,a);Z.ExtrudePolygon=(n,e,t,i,r,s,a,o=earcut)=>Bg(n,{shape:e,holes:r,depth:t,updatable:s,sideOrientation:a},i,o)});function kP(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||Z.NO_CAP,l=e.updatable,c=Z._GetDefaultSideOrientation(e.sideOrientation),f=e.instance||null,h=e.invertUV||!1,d=e.closeShape||!1,u=e.closePath||!1,m=e.capFunction||null;return WW(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,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||Z.NO_CAP,h=e.updatable,d=e.firstNormal||null,u=e.adjustFrame||!1,m=Z._GetDefaultSideOrientation(e.sideOrientation),p=e.instance,_=e.invertUV||!1,g=e.capFunction||null;return WW(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 WW(n,e,t,i,r,s,a,o,l,c,f,h,d,u,m,p,_,g,v,x,T){let E=(L,O,V,w,N,U,H,ee,q,te,z)=>{let Y=V.getTangents(),me=V.getNormals(),Re=V.getBinormals(),Be=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=Re[Xe-1],b.Dot(je,Re[Xe])<0&&Re[Xe].scaleInPlace(-1)}}let ae=0,ge=()=>N!==null?N:b.OneReadOnly,ue=te&&ee?ee:()=>U!==null?U:0,De=te&&H?H:ge,de=q===Z.NO_CAP||q===Z.CAP_END?0:2,Ie=$.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=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 HW=M(()=>{Ge();yi();xg();Fh();Z.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||Z.NO_CAP,sideOrientation:l,instance:c,updatable:o};return kP(n,f,a)};Z.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||Z.NO_CAP,sideOrientation:f,instance:h,updatable:c};return WP(n,d,l)}});function HP(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=Z._GetDefaultSideOrientation(e.sideOrientation),h=e.cap||Z.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==Z.CAP_START||h==Z.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();xg();Z.CreateLathe=(n,e,t,i,r,s,a)=>HP(n,{shape:e,radius:t,tessellation:i,sideOrientation:a,updatable:s},r)});function XW(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 zP(n,e={},t=null){let i=new Z(n,t);return e.sideOrientation=Z._GetDefaultSideOrientation(e.sideOrientation),i._originalBuilderSideOrientation=e.sideOrientation,XW(e).applyToMesh(i,e.updatable),e.sourcePlane&&(i.translate(e.sourcePlane.normal,-e.sourcePlane.d),i.setDirection(e.sourcePlane.normal.scale(-1))),i}var YW=M(()=>{yi();mr();rn();Ce.CreatePlane=XW;Z.CreatePlane=(n,e,t,i,r)=>zP(n,{size:e,width:e,height:e,sideOrientation:r,updatable:i},t)});function XP(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||Z.NO_CAP,c=e.invertUV||!1,f=e.updatable,h=Z._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(),L=v.getDistances(),V=Math.PI*2/E*I,N=S||(()=>T),U,H,ee,q,te=$.Matrix[0],z=R===Z.NO_CAP||R===Z.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 KW=M(()=>{Ge();yi();xg();Fh();Z.CreateTube=(n,e,t,i,r,s,a,o,l,c)=>XP(n,{path:e,radius:t,tessellation:i,radiusFunction:r,arc:1,cap:s,updatable:o,sideOrientation:l,instance:c},a)});function jW(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,L,O;if(h)for(S=0;S{Ge();zt();yi();mr();rn();Ce.CreatePolyhedron=jW;Z.CreatePolyhedron=(n,e,t)=>Ug(n,e,t)});function qW(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),L;for(L=0;L<3;L++)C[L]=b.Zero(),y[L]=Fe.Zero();for(let V=0;V<20;V++){for(L=0;L<3;L++){let N=f[3*V+L];C[L].copyFromFloats(c[3*h[N]],c[3*h[N]+1],c[3*h[N]+2]),C[L].normalize(),y[L].copyFromFloats(d[2*N]*u+p+x[V]*g,d[2*N+1]*m+_+x[V]*v)}let w=(N,U,H,ee)=>{let q=b.Lerp(C[0],C[2],U/r),te=b.Lerp(C[1],C[2],U/r),z=r===U?C[2]:b.Lerp(q,te,N/(r-U));z.normalize();let Y;if(i){let ae=b.Lerp(C[0],C[2],ee/r),ge=b.Lerp(C[1],C[2],ee/r);Y=b.Lerp(ae,ge,H/(r-ee))}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),Re=Fe.Lerp(y[1],y[2],U/r),Be=r===U?y[2]:Fe.Lerp(me,Re,N/(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 N=0;N{Ge();yi();mr();rn();Ce.CreateIcoSphere=qW;Z.CreateIcoSphere=(n,e,t)=>KP(n,e,t)});function jP(n,e,t){var H,ee,q,te,z;let i=!!e.skeleton,r=!!((H=e.morphTargetManager)!=null&&H.numTargets),s=t.localMode||i,a=e.getIndices(),o=i||r?e.getPositionData(!0,!0):e.getVerticesData(D.PositionKind),l=i||r?e.getNormalsData(!0,!0):e.getVerticesData(D.NormalKind),c=s?i?e.getVerticesData(D.PositionKind):o:null,f=s?i?e.getVerticesData(D.NormalKind):l:null,h=e.getVerticesData(D.UVKind),d=i?e.getVerticesData(D.MatricesIndicesKind):null,u=i?e.getVerticesData(D.MatricesWeightsKind):null,m=i?e.getVerticesData(D.MatricesIndicesExtraKind):null,p=i?e.getVerticesData(D.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,Re=b.TransformCoordinates(Y,me.getWorldMatrix());g=me.globalPosition.subtract(Re)}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 Re=new gx;if(!a||!o||!l)return Re;let Be=a[Y];if(Re.vertexIdx=Be*3,Re.vertexIdxForBones=Be*4,Re.position=new b(o[Be*3],o[Be*3+1],o[Be*3+2]),b.TransformCoordinatesToRef(Re.position,me,Re.position),Re.normal=new b(l[Be*3],l[Be*3+1],l[Be*3+2]),b.TransformNormalToRef(Re.normal,me,Re.normal),t.captureUVS&&h){let ae=h[Be*2+1];Re.uv=new Fe(h[Be*2],Mt?1-ae:ae)}return Re},y=[0,0,0,0],L=(Y,me)=>{if(Y.length===0)return Y;let Re=.5*Math.abs(b.Dot(v,me)),Be=(ne,ue,De,de)=>{for(let Ie=0;Ie{var Le,Ve,Je,rt,ye,be,ct,St,nt,Qe,Ht,qt,re,K,Pe,Ae;let De=b.GetClipFactor(ne.position,ue.position,me,Re),de=y,Ie=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],Ie=[0,0,0,0];let vi=0;for(let Zi=0;Zi<4;++Zi)if(we[Ye+Zi]>0){let Va=Be(Zt,Ke[Ye+Zi],At,4);de[vi]=Ke[Ye+Zi],Ie[vi]=io(we[Ye+Zi],Va>=0?tr[Va]:0,De),vi++}for(let Zi=0;Zi<4&&vi<4;++Zi){let Va=Zt[At+Zi];Be(Ke,Va,Ye,4)===-1&&(de[vi]=Va,Ie[vi]=io(0,tr[At+Zi],De),vi++)}let bn=Ie[0]+Ie[1]+Ie[2]+Ie[3];Ie[0]/=bn,Ie[1]/=bn,Ie[2]/=bn,Ie[3]/=bn}let Ze=ne.localPositionOverride?ne.localPositionOverride[0]:(ye=c==null?void 0:c[ne.vertexIdx])!=null?ye:0,Tt=ne.localPositionOverride?ne.localPositionOverride[1]:(be=c==null?void 0:c[ne.vertexIdx+1])!=null?be: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]:(Ht=f==null?void 0:f[ne.vertexIdx])!=null?Ht: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 gx(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?[Ze+(je-Ze)*De,Tt+($t-Tt)*De,Xe+(Dt-Xe)*De]:null,f?[Li/he,X/he,B/he]:null,de,Ie)},ge=null;Y.length>3&&(ge=[]);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?(ge.push(Y[ne]),ge.push(Y[ne+1]),ge.push(Y[ne+2])):ge=Y;break;case 1:if(ge=ge!=null?ge:new Array,je&&(ue=Y[ne+1],De=Y[ne+2],de=ae(Y[ne],ue),Ie=ae(Y[ne],De)),$t){ue=Y[ne],De=Y[ne+2],de=ae(Y[ne+1],ue),Ie=ae(Y[ne+1],De),ge.push(de),ge.push(De.clone()),ge.push(ue.clone()),ge.push(De.clone()),ge.push(de.clone()),ge.push(Ie);break}Dt&&(ue=Y[ne],De=Y[ne+1],de=ae(Y[ne+2],ue),Ie=ae(Y[ne+2],De)),ue&&De&&de&&Ie&&(ge.push(ue.clone()),ge.push(De.clone()),ge.push(de),ge.push(Ie),ge.push(de.clone()),ge.push(De.clone()));break;case 2:ge=ge!=null?ge:new Array,je||(ue=Y[ne].clone(),De=ae(ue,Y[ne+1]),de=ae(ue,Y[ne+2]),ge.push(ue),ge.push(De),ge.push(de)),$t||(ue=Y[ne+1].clone(),De=ae(ue,Y[ne+2]),de=ae(ue,Y[ne]),ge.push(ue),ge.push(De),ge.push(de)),Dt||(ue=Y[ne+2].clone(),De=ae(ue,Y[ne]),de=ae(ue,Y[ne+1]),ge.push(ue),ge.push(De),ge.push(de));break;case 3:break}}return ge},O=e instanceof Z?e:null,V=O==null?void 0:O._thinInstanceDataStorage.matrixData,w=(O==null?void 0:O.thinInstanceCount)||1,N=$.Matrix[0];N.copyFrom(j.IdentityReadOnly);for(let Y=0;Y{Ge();Nn();yi();ki();mr();rn();Woe=new b(1,0,0),Hoe=new b(-1,0,0),zoe=new b(0,1,0),Xoe=new b(0,-1,0),Yoe=new b(0,0,1),Koe=new b(0,0,-1),gx=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())}};Z.CreateDecal=(n,e,t,i,r,s)=>jP(n,e,{position:t,normal:i,size:r,angle:s})});function $W(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(),L=b.Zero(),O=Math.cos(p),V=Math.sin(p),w=new Fe(l*V,S+l*O).subtract(new Fe(c*V,-S+c*O)).length(),N=l*p+w+c*(R-p),U=0;for(C=0;C<=u;C++){let te=[],z=R-p*(C/u);U+=l*p/u;let Y=Math.cos(z),me=Math.sin(z),Re=Y*l;for(I=0;I<=a;I++){let Be=I/a,ae=Be*d+h,ge=Math.sin(ae),ne=Math.cos(ae);L.x=Re*ge,L.y=S+me*l,L.z=Re*ne,g.push(L.x,L.y,L.z),y.set(Y*ge,me,Y*ne),v.push(y.x,y.y,y.z),x.push(Be,Mt?U/N:1-U/N),te.push(T),T++}E.push(te)}let H=i-l-c+O*l-O*c,ee=V*(c-l)/H;for(C=1;C<=o;C++){let te=[];U+=w/o;let z=V*(C*(c-l)/o+l);for(I=0;I<=a;I++){let Y=I/a,me=Y*d+h,Re=Math.sin(me),Be=Math.cos(me);L.x=z*Re,L.y=S+O*l-C*H/o,L.z=z*Be,g.push(L.x,L.y,L.z),y.set(Re,ee,Be).normalize(),v.push(y.x,y.y,y.z),x.push(Y,Mt?U/N:1-U/N),te.push(T),T++}E.push(te)}for(C=1;C<=m;C++){let te=[],z=R-p-(Math.PI-p)*(C/m);U+=c*p/m;let Y=Math.cos(z),me=Math.sin(z),Re=Y*c;for(I=0;I<=a;I++){let Be=I/a,ae=Be*d+h,ge=Math.sin(ae),ne=Math.cos(ae);L.x=Re*ge,L.y=-S+me*c,L.z=Re*ne,g.push(L.x,L.y,L.z),y.set(Y*ge,me,Y*ne),v.push(y.x,y.y,y.z),x.push(Be,Mt?U/N:1-U/N),te.push(T),T++}E.push(te)}for(I=0;I{mr();Ge();yi();rn();Z.CreateCapsule=(n,e,t)=>qP(n,e,t);Ce.CreateCapsule=$W});var qi,eH=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),J.Warn("x is not an integer, floor(x) used")),t!==Math.floor(t)&&(t=Math.floor(t),J.Warn("y is not an integer, floor(y) used"))}clone(){return new n(this.x,this.y)}rotate60About(e){let t=this.x;return this.x=e.x+e.y-this.y,this.y=t+this.y-e.x,this}rotateNeg60About(e){let t=this.x;return this.x=t+this.y-e.y,this.y=e.x+e.y-t,this}rotate120(e,t){e!==Math.floor(e)&&(e=Math.floor(e),J.Warn("m not an integer only floor(m) used")),t!==Math.floor(t)&&(t=Math.floor(t),J.Warn("n not an integer only floor(n) used"));let i=this.x;return this.x=e-i-this.y,this.y=t+i,this}rotateNeg120(e,t){e!==Math.floor(e)&&(e=Math.floor(e),J.Warn("m is not an integer, floor(m) used")),t!==Math.floor(t)&&(t=Math.floor(t),J.Warn("n is not an integer, floor(n) used"));let i=this.x;return this.x=this.y-t,this.y=e+t-i-this.y,this}toCartesianOrigin(e,t){let i=b.Zero();return i.x=e.x+2*this.x*t+this.y*t,i.y=e.y+Math.sqrt(3)*this.y*t,i}static Zero(){return new n(0,0)}}});var Hm,Vg,zm,ZP=M(()=>{Ge();Nn();On();eH();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,vr,-1],[-vr,1,0],[-1,0,-vr],[1,0,-vr],[vr,1,0],[0,vr,1],[-1,0,vr],[-vr,-1,0],[0,-vr,-1],[vr,-1,0],[1,0,vr],[0,-vr,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=sA(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=(L,O,V,w)=>{T=L+"|"+V,E=O+"|"+w,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 L=0;L<20;L++){if(x=this.IDATA.face[L],f=x[2],h=x[1],d=x[0],S=u.x+"|"+u.y,T=L+"|"+S,T in t||(t[T]=f,I[f]=[x[C[S][0]],C[S][1]]),S=m.x+"|"+m.y,T=L+"|"+S,T in t||(t[T]=h,I[h]=[x[C[S][0]],C[S][1]]),S=p.x+"|"+p.y,T=L+"|"+S,T in t||(t[T]=d,I[d]=[x[C[S][0]],C[S][1]]),l=this.IDATA.edgematch[L][0],c=this.IDATA.edgematch[L][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=sA(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 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,J.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 Ug(n,o,t)}var iH=M(()=>{YP();Pt();ZP()});var Gg,rH=M(()=>{Ge();ki();yi();zt();Pt();Z._GoldbergMeshParser=(n,e)=>Gg.Parse(n,e);Gg=class n extends Z{constructor(){super(...arguments),this.goldbergData={faceColors:[],faceCenters:[],faceZaxis:[],faceXaxis:[],faceYaxis:[],nbSharedFaces:0,nbUnsharedFaces:0,nbFaces:0,nbFacesAtPole:0,adjacentFaces:[]}}relatedGoldbergFace(e,t){return t===void 0?(e>this.goldbergData.nbUnsharedFaces-1&&(J.Warn("Maximum number of unshared faces used"),e=this.goldbergData.nbUnsharedFaces-1),this.goldbergData.nbUnsharedFaces+e):(e>11&&(J.Warn("Last pole used"),e=11),t>this.goldbergData.nbFacesAtPole-1&&(J.Warn("Maximum number of faces at a pole used"),t=this.goldbergData.nbFacesAtPole-1),12+e*this.goldbergData.nbFacesAtPole+t)}_changeGoldbergFaceColors(e){for(let i=0;i1&&(h=1),c.push(h,d);for(let u=0;u<6;u++)h=a.x+o*Math.cos(l+u*Math.PI/3),d=a.y+o*Math.sin(l+u*Math.PI/3),h<0&&(h=0),h>1&&(h=1),f.push(h,d);for(let u=r;ult.FromArray(s)),i.faceCenters=i.faceCenters.map(s=>b.FromArray(s)),i.faceZaxis=i.faceZaxis.map(s=>b.FromArray(s)),i.faceXaxis=i.faceXaxis.map(s=>b.FromArray(s)),i.faceYaxis=i.faceYaxis.map(s=>b.FromArray(s));let r=new n(e.name,t);return r.goldbergData=i,r}}});function joe(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,J.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=Z._GetDefaultSideOrientation(e.sideOrientation),d._originalBuilderSideOrientation=e.sideOrientation,joe(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();ZP();rH();rn()});function qoe(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{Fh();Ge();yi();qh();GP();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 ns,$P=M(()=>{xg();Lk();TP();Uk();Gk();Wk();zk();Yk();VW();GP();HW();zW();YW();AP();EP();KW();YP();ZW();QW();JW();iH();sH();oH();ns={CreateBox:SP,CreateTiledBox:Bk,CreateSphere:RP,CreateDisc:mP,CreateIcoSphere:KP,CreateRibbon:So,CreateCylinder:bP,CreateTorus:IP,CreateTorusKnot:MP,CreateLineSystem:FP,CreateLines:BP,CreateDashedLines:UP,ExtrudeShape:kP,ExtrudeShapeCustom:WP,CreateLathe:HP,CreateTiledPlane:wk,CreatePlane:zP,CreateGround:_P,CreateTiledGround:gP,CreateGroundFromHeightMap:vP,CreatePolygon:_x,ExtrudePolygon:Bg,CreateTube:XP,CreatePolyhedron:Ug,CreateGeodesic:tH,CreateGoldberg:nH,CreateDecal:jP,CreateCapsule:qP,CreateText:aH}});var ws,vx=M(()=>{ws=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,wa=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{zt();ki();yi();DP();Wn();NP();Z._LinesMeshParser=(n,e)=>id.Parse(n,e);id=class n extends Z{_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:[D.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(D.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(()=>(cW(),lW)),Promise.resolve().then(()=>(_W(),pW))]):await Promise.all([Promise.resolve().then(()=>(PW(),yW)),Promise.resolve().then(()=>(BW(),FW))])};let d=new Ao("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 VP(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}};id.ForceGLSL=!1;VP=class extends ac{constructor(e,t){super(e,t),this.intersectionThreshold=t.intersectionThreshold}getClassName(){return"InstancedLinesMesh"}}});function VW(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 GW(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();pr();UW();ki();Pt();Ce.CreateLineSystem=VW;Ce.CreateDashedLines=GW;Z.CreateLines=(n,e,t=null,i=!1,r=null)=>kP(n,{points:e,updatable:i,instance:r},t);Z.CreateDashedLines=(n,e,t,i,r,s=null,a,o)=>WP(n,{points:e,dashSize:t,gapSize:i,dashNb:r,updatable:a,instance:o},s)});var HP,Gg,Sx,WW=M(()=>{Pt();Ge();ki();yi();pr();Vh();Nn();Ni();HP=class extends Fe{constructor(e,t){super(e.x,e.y),this.index=t}},Gg=class{constructor(){this.elements=[]}add(e){let t=[];for(let i of e){let r=new HP(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}}},Sx=class{_addToepoint(e){for(let t of e)this._epoints.push(t.x,t.y)}constructor(e,t,i,r=earcut){this._points=new Gg,this._outlinepoints=new Gg,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 em?s=t.getPoints():s=t,this._addToepoint(s),this._points.add(s),this._outlinepoints.add(s),typeof this.bjsEarcut=="undefined"&&J.Warn("Earcut was not found, the polygon will not be built.")}addHole(e){this._points.add(e);let t=new Gg;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 Z(this._name,this._scene),s=this.buildVertexData(t,i);return r.setVerticesData(D.PositionKind,s.positions,e),r.setVerticesData(D.NormalKind,s.normals,e),r.setVerticesData(D.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();pr();WW();ki();Ni();rn();Ce.CreatePolygon=HW;Z.CreatePolygon=(n,e,t,i,r,s,a=earcut)=>Tx(n,{shape:e,holes:i,updatable:r,sideOrientation:s},t,a);Z.ExtrudePolygon=(n,e,t,i,r,s,a,o=earcut)=>kg(n,{shape:e,holes:r,depth:t,updatable:s,sideOrientation:a},i,o)});function XP(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||Z.NO_CAP,l=e.updatable,c=Z._GetDefaultSideOrientation(e.sideOrientation),f=e.instance||null,h=e.invertUV||!1,d=e.closeShape||!1,u=e.closePath||!1,m=e.capFunction||null;return zW(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 YP(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||Z.NO_CAP,h=e.updatable,d=e.firstNormal||null,u=e.adjustFrame||!1,m=Z._GetDefaultSideOrientation(e.sideOrientation),p=e.instance,_=e.invertUV||!1,g=e.capFunction||null;return zW(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 zW(n,e,t,i,r,s,a,o,l,c,f,h,d,u,m,p,_,g,v,x,T){let E=(L,O,V,w,N,U,H,ee,q,te,z)=>{let Y=V.getTangents(),me=V.getNormals(),Re=V.getBinormals(),Be=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=Re[Xe-1],b.Dot(je,Re[Xe])<0&&Re[Xe].scaleInPlace(-1)}}let ae=0,ge=()=>N!==null?N:b.OneReadOnly,ue=te&&ee?ee:()=>U!==null?U:0,De=te&&H?H:ge,de=q===Z.NO_CAP||q===Z.CAP_END?0:2,Ie=$.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=To(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();yi();Mg();Vh();Z.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||Z.NO_CAP,sideOrientation:l,instance:c,updatable:o};return XP(n,f,a)};Z.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||Z.NO_CAP,sideOrientation:f,instance:h,updatable:c};return YP(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=Z._GetDefaultSideOrientation(e.sideOrientation),h=e.cap||Z.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==Z.CAP_START||h==Z.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();Mg();Z.CreateLathe=(n,e,t,i,r,s,a)=>KP(n,{shape:e,radius:t,tessellation:i,sideOrientation:a,updatable:s},r)});function KW(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 jP(n,e={},t=null){let i=new Z(n,t);return e.sideOrientation=Z._GetDefaultSideOrientation(e.sideOrientation),i._originalBuilderSideOrientation=e.sideOrientation,KW(e).applyToMesh(i,e.updatable),e.sourcePlane&&(i.translate(e.sourcePlane.normal,-e.sourcePlane.d),i.setDirection(e.sourcePlane.normal.scale(-1))),i}var jW=M(()=>{yi();pr();rn();Ce.CreatePlane=KW;Z.CreatePlane=(n,e,t,i,r)=>jP(n,{size:e,width:e,height:e,sideOrientation:r,updatable:i},t)});function qP(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||Z.NO_CAP,c=e.invertUV||!1,f=e.updatable,h=Z._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(),L=v.getDistances(),V=Math.PI*2/E*I,N=S||(()=>T),U,H,ee,q,te=$.Matrix[0],z=R===Z.NO_CAP||R===Z.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 _=To(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 qW=M(()=>{Ge();yi();Mg();Vh();Z.CreateTube=(n,e,t,i,r,s,a,o,l,c)=>qP(n,{path:e,radius:t,tessellation:i,radiusFunction:r,arc:1,cap:s,updatable:o,sideOrientation:l,instance:c},a)});function ZW(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,L,O;if(h)for(S=0;S{Ge();zt();yi();pr();rn();Ce.CreatePolyhedron=ZW;Z.CreatePolyhedron=(n,e,t)=>Wg(n,e,t)});function QW(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),L;for(L=0;L<3;L++)C[L]=b.Zero(),y[L]=Fe.Zero();for(let V=0;V<20;V++){for(L=0;L<3;L++){let N=f[3*V+L];C[L].copyFromFloats(c[3*h[N]],c[3*h[N]+1],c[3*h[N]+2]),C[L].normalize(),y[L].copyFromFloats(d[2*N]*u+p+x[V]*g,d[2*N+1]*m+_+x[V]*v)}let w=(N,U,H,ee)=>{let q=b.Lerp(C[0],C[2],U/r),te=b.Lerp(C[1],C[2],U/r),z=r===U?C[2]:b.Lerp(q,te,N/(r-U));z.normalize();let Y;if(i){let ae=b.Lerp(C[0],C[2],ee/r),ge=b.Lerp(C[1],C[2],ee/r);Y=b.Lerp(ae,ge,H/(r-ee))}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),Re=Fe.Lerp(y[1],y[2],U/r),Be=r===U?y[2]:Fe.Lerp(me,Re,N/(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 N=0;N{Ge();yi();pr();rn();Ce.CreateIcoSphere=QW;Z.CreateIcoSphere=(n,e,t)=>QP(n,e,t)});function $P(n,e,t){var H,ee,q,te,z;let i=!!e.skeleton,r=!!((H=e.morphTargetManager)!=null&&H.numTargets),s=t.localMode||i,a=e.getIndices(),o=i||r?e.getPositionData(!0,!0):e.getVerticesData(D.PositionKind),l=i||r?e.getNormalsData(!0,!0):e.getVerticesData(D.NormalKind),c=s?i?e.getVerticesData(D.PositionKind):o:null,f=s?i?e.getVerticesData(D.NormalKind):l:null,h=e.getVerticesData(D.UVKind),d=i?e.getVerticesData(D.MatricesIndicesKind):null,u=i?e.getVerticesData(D.MatricesWeightsKind):null,m=i?e.getVerticesData(D.MatricesIndicesExtraKind):null,p=i?e.getVerticesData(D.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,Re=b.TransformCoordinates(Y,me.getWorldMatrix());g=me.globalPosition.subtract(Re)}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 Re=new Ax;if(!a||!o||!l)return Re;let Be=a[Y];if(Re.vertexIdx=Be*3,Re.vertexIdxForBones=Be*4,Re.position=new b(o[Be*3],o[Be*3+1],o[Be*3+2]),b.TransformCoordinatesToRef(Re.position,me,Re.position),Re.normal=new b(l[Be*3],l[Be*3+1],l[Be*3+2]),b.TransformNormalToRef(Re.normal,me,Re.normal),t.captureUVS&&h){let ae=h[Be*2+1];Re.uv=new Fe(h[Be*2],Mt?1-ae:ae)}return Re},y=[0,0,0,0],L=(Y,me)=>{if(Y.length===0)return Y;let Re=.5*Math.abs(b.Dot(v,me)),Be=(ne,ue,De,de)=>{for(let Ie=0;Ie{var Le,Ve,Je,rt,ye,be,ct,St,nt,Qe,Ht,qt,re,K,Pe,Ae;let De=b.GetClipFactor(ne.position,ue.position,me,Re),de=y,Ie=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],Ie=[0,0,0,0];let vi=0;for(let Zi=0;Zi<4;++Zi)if(we[Ye+Zi]>0){let Va=Be(Zt,Ke[Ye+Zi],At,4);de[vi]=Ke[Ye+Zi],Ie[vi]=ro(we[Ye+Zi],Va>=0?tr[Va]:0,De),vi++}for(let Zi=0;Zi<4&&vi<4;++Zi){let Va=Zt[At+Zi];Be(Ke,Va,Ye,4)===-1&&(de[vi]=Va,Ie[vi]=ro(0,tr[At+Zi],De),vi++)}let bn=Ie[0]+Ie[1]+Ie[2]+Ie[3];Ie[0]/=bn,Ie[1]/=bn,Ie[2]/=bn,Ie[3]/=bn}let Ze=ne.localPositionOverride?ne.localPositionOverride[0]:(ye=c==null?void 0:c[ne.vertexIdx])!=null?ye:0,Tt=ne.localPositionOverride?ne.localPositionOverride[1]:(be=c==null?void 0:c[ne.vertexIdx+1])!=null?be: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]:(Ht=f==null?void 0:f[ne.vertexIdx])!=null?Ht: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 Ax(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?[Ze+(je-Ze)*De,Tt+($t-Tt)*De,Xe+(Dt-Xe)*De]:null,f?[Li/he,X/he,B/he]:null,de,Ie)},ge=null;Y.length>3&&(ge=[]);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?(ge.push(Y[ne]),ge.push(Y[ne+1]),ge.push(Y[ne+2])):ge=Y;break;case 1:if(ge=ge!=null?ge:new Array,je&&(ue=Y[ne+1],De=Y[ne+2],de=ae(Y[ne],ue),Ie=ae(Y[ne],De)),$t){ue=Y[ne],De=Y[ne+2],de=ae(Y[ne+1],ue),Ie=ae(Y[ne+1],De),ge.push(de),ge.push(De.clone()),ge.push(ue.clone()),ge.push(De.clone()),ge.push(de.clone()),ge.push(Ie);break}Dt&&(ue=Y[ne],De=Y[ne+1],de=ae(Y[ne+2],ue),Ie=ae(Y[ne+2],De)),ue&&De&&de&&Ie&&(ge.push(ue.clone()),ge.push(De.clone()),ge.push(de),ge.push(Ie),ge.push(de.clone()),ge.push(De.clone()));break;case 2:ge=ge!=null?ge:new Array,je||(ue=Y[ne].clone(),De=ae(ue,Y[ne+1]),de=ae(ue,Y[ne+2]),ge.push(ue),ge.push(De),ge.push(de)),$t||(ue=Y[ne+1].clone(),De=ae(ue,Y[ne+2]),de=ae(ue,Y[ne]),ge.push(ue),ge.push(De),ge.push(de)),Dt||(ue=Y[ne+2].clone(),De=ae(ue,Y[ne]),de=ae(ue,Y[ne+1]),ge.push(ue),ge.push(De),ge.push(de));break;case 3:break}}return ge},O=e instanceof Z?e:null,V=O==null?void 0:O._thinInstanceDataStorage.matrixData,w=(O==null?void 0:O.thinInstanceCount)||1,N=$.Matrix[0];N.copyFrom(j.IdentityReadOnly);for(let Y=0;Y{Ge();wn();yi();ki();pr();rn();Joe=new b(1,0,0),ele=new b(-1,0,0),tle=new b(0,1,0),ile=new b(0,-1,0),rle=new b(0,0,1),nle=new b(0,0,-1),Ax=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())}};Z.CreateDecal=(n,e,t,i,r,s)=>$P(n,e,{position:t,normal:i,size:r,angle:s})});function eH(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(),L=b.Zero(),O=Math.cos(p),V=Math.sin(p),w=new Fe(l*V,S+l*O).subtract(new Fe(c*V,-S+c*O)).length(),N=l*p+w+c*(R-p),U=0;for(C=0;C<=u;C++){let te=[],z=R-p*(C/u);U+=l*p/u;let Y=Math.cos(z),me=Math.sin(z),Re=Y*l;for(I=0;I<=a;I++){let Be=I/a,ae=Be*d+h,ge=Math.sin(ae),ne=Math.cos(ae);L.x=Re*ge,L.y=S+me*l,L.z=Re*ne,g.push(L.x,L.y,L.z),y.set(Y*ge,me,Y*ne),v.push(y.x,y.y,y.z),x.push(Be,Mt?U/N:1-U/N),te.push(T),T++}E.push(te)}let H=i-l-c+O*l-O*c,ee=V*(c-l)/H;for(C=1;C<=o;C++){let te=[];U+=w/o;let z=V*(C*(c-l)/o+l);for(I=0;I<=a;I++){let Y=I/a,me=Y*d+h,Re=Math.sin(me),Be=Math.cos(me);L.x=z*Re,L.y=S+O*l-C*H/o,L.z=z*Be,g.push(L.x,L.y,L.z),y.set(Re,ee,Be).normalize(),v.push(y.x,y.y,y.z),x.push(Y,Mt?U/N:1-U/N),te.push(T),T++}E.push(te)}for(C=1;C<=m;C++){let te=[],z=R-p-(Math.PI-p)*(C/m);U+=c*p/m;let Y=Math.cos(z),me=Math.sin(z),Re=Y*c;for(I=0;I<=a;I++){let Be=I/a,ae=Be*d+h,ge=Math.sin(ae),ne=Math.cos(ae);L.x=Re*ge,L.y=-S+me*c,L.z=Re*ne,g.push(L.x,L.y,L.z),y.set(Y*ge,me,Y*ne),v.push(y.x,y.y,y.z),x.push(Be,Mt?U/N:1-U/N),te.push(T),T++}E.push(te)}for(I=0;I{pr();Ge();yi();rn();Z.CreateCapsule=(n,e,t)=>JP(n,e,t);Ce.CreateCapsule=eH});var qi,iH=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),J.Warn("x is not an integer, floor(x) used")),t!==Math.floor(t)&&(t=Math.floor(t),J.Warn("y is not an integer, floor(y) used"))}clone(){return new n(this.x,this.y)}rotate60About(e){let t=this.x;return this.x=e.x+e.y-this.y,this.y=t+this.y-e.x,this}rotateNeg60About(e){let t=this.x;return this.x=t+this.y-e.y,this.y=e.x+e.y-t,this}rotate120(e,t){e!==Math.floor(e)&&(e=Math.floor(e),J.Warn("m not an integer only floor(m) used")),t!==Math.floor(t)&&(t=Math.floor(t),J.Warn("n not an integer only floor(n) used"));let i=this.x;return this.x=e-i-this.y,this.y=t+i,this}rotateNeg120(e,t){e!==Math.floor(e)&&(e=Math.floor(e),J.Warn("m is not an integer, floor(m) used")),t!==Math.floor(t)&&(t=Math.floor(t),J.Warn("n is not an integer, floor(n) used"));let i=this.x;return this.x=this.y-t,this.y=e+t-i-this.y,this}toCartesianOrigin(e,t){let i=b.Zero();return i.x=e.x+2*this.x*t+this.y*t,i.y=e.y+Math.sqrt(3)*this.y*t,i}static Zero(){return new n(0,0)}}});var zm,Hg,Xm,eL=M(()=>{Ge();wn();Nn();iH();zm=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 Hg("icosahedron","Regular",[[0,Er,-1],[-Er,1,0],[-1,0,-Er],[1,0,-Er],[Er,1,0],[0,Er,1],[-1,0,Er],[-Er,-1,0],[0,-Er,-1],[Er,-1,0],[1,0,Er],[0,-Er,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=fA(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=(L,O,V,w)=>{T=L+"|"+V,E=O+"|"+w,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 L=0;L<20;L++){if(x=this.IDATA.face[L],f=x[2],h=x[1],d=x[0],S=u.x+"|"+u.y,T=L+"|"+S,T in t||(t[T]=f,I[f]=[x[C[S][0]],C[S][1]]),S=m.x+"|"+m.y,T=L+"|"+S,T in t||(t[T]=h,I[h]=[x[C[S][0]],C[S][1]]),S=p.x+"|"+p.y,T=L+"|"+S,T in t||(t[T]=d,I[d]=[x[C[S][0]],C[S][1]]),l=this.IDATA.edgematch[L][0],c=this.IDATA.edgematch[L][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=fA(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 Hg("GeoDual","Goldberg",[],[]);e.name="GD dual";let t=this.vertex.length,i=new Array(t);for(let c=0;ci){let c=r;r=i,i=c,J.Warn("n > m therefore m and n swapped")}let s=new zm;s.build(i,r);let o={custom:Xm.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 Wg(n,o,t)}var nH=M(()=>{ZP();Pt();eL()});var zg,sH=M(()=>{Ge();ki();yi();zt();Pt();Z._GoldbergMeshParser=(n,e)=>zg.Parse(n,e);zg=class n extends Z{constructor(){super(...arguments),this.goldbergData={faceColors:[],faceCenters:[],faceZaxis:[],faceXaxis:[],faceYaxis:[],nbSharedFaces:0,nbUnsharedFaces:0,nbFaces:0,nbFacesAtPole:0,adjacentFaces:[]}}relatedGoldbergFace(e,t){return t===void 0?(e>this.goldbergData.nbUnsharedFaces-1&&(J.Warn("Maximum number of unshared faces used"),e=this.goldbergData.nbUnsharedFaces-1),this.goldbergData.nbUnsharedFaces+e):(e>11&&(J.Warn("Last pole used"),e=11),t>this.goldbergData.nbFacesAtPole-1&&(J.Warn("Maximum number of faces at a pole used"),t=this.goldbergData.nbFacesAtPole-1),12+e*this.goldbergData.nbFacesAtPole+t)}_changeGoldbergFaceColors(e){for(let i=0;i1&&(h=1),c.push(h,d);for(let u=0;u<6;u++)h=a.x+o*Math.cos(l+u*Math.PI/3),d=a.y+o*Math.sin(l+u*Math.PI/3),h<0&&(h=0),h>1&&(h=1),f.push(h,d);for(let u=r;ult.FromArray(s)),i.faceCenters=i.faceCenters.map(s=>b.FromArray(s)),i.faceZaxis=i.faceZaxis.map(s=>b.FromArray(s)),i.faceXaxis=i.faceXaxis.map(s=>b.FromArray(s)),i.faceYaxis=i.faceYaxis.map(s=>b.FromArray(s));let r=new n(e.name,t);return r.goldbergData=i,r}}});function sle(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,J.Warn("n > m therefore m and n swapped")}let c=new zm;c.build(o,l);let f=Xm.BuildGeodesicData(c),h=f.toGoldbergPolyhedronData(),d=new zg(n,t);e.sideOrientation=Z._GetDefaultSideOrientation(e.sideOrientation),d._originalBuilderSideOrientation=e.sideOrientation,sle(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();pr();Pt();eL();sH();rn()});function ale(n,e,t,i,r,s){let a=s.glyphs[n]||s.glyphs["?"];if(!a)return null;let o=new tL(r);if(a.o){let l=a.o.split(" ");for(let c=0,f=l.length;c{Vh();Ge();yi();$h();zP();tL=class{constructor(e){this._paths=[],this._tempPaths=[],this._holes=[],this._resolution=e}moveTo(e,t){this._currentPath=new em(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 ss,iL=M(()=>{Mg();Ok();bP();Gk();Wk();zk();Yk();jk();kW();zP();XW();YW();jW();IP();xP();qW();ZP();$W();JW();tH();nH();oH();cH();ss={CreateBox:RP,CreateTiledBox:Vk,CreateSphere:CP,CreateDisc:vP,CreateIcoSphere:QP,CreateRibbon:To,CreateCylinder:yP,CreateTorus:PP,CreateTorusKnot:LP,CreateLineSystem:GP,CreateLines:kP,CreateDashedLines:WP,ExtrudeShape:XP,ExtrudeShapeCustom:YP,CreateLathe:KP,CreateTiledPlane:Bk,CreatePlane:jP,CreateGround:SP,CreateTiledGround:TP,CreateGroundFromHeightMap:AP,CreatePolygon:Tx,ExtrudePolygon:kg,CreateTube:qP,CreatePolyhedron:Wg,CreateGeodesic:rH,CreateGoldberg:aH,CreateDecal:$P,CreateCapsule:JP,CreateText:lH}});var Fs,xx=M(()=>{Fs=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,wa=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{wa()});function ele(){$oe.length=0,Joe=!1,Ee.OnEventObservable.remove(lH),lH=null}var Qoe,Ym,$oe,Joe,lH,cH=M(()=>{kn();Ni();XT();G();Qoe=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 Ym(n){return class extends n{constructor(){super(...arguments),this.IMAGEPROCESSING=!1,this.VIGNETTE=!1,this.VIGNETTEBLENDMODEMULTIPLY=!1,this.VIGNETTEBLENDMODEOPAQUE=!1,this.TONEMAPPING=0,this.CONTRAST=!1,this.COLORCURVES=!1,this.COLORGRADING=!1,this.COLORGRADING3D=!1,this.SAMPLER3DGREENDEPTH=!1,this.SAMPLER3DBGRMAP=!1,this.DITHER=!1,this.IMAGEPROCESSINGPOSTPROCESS=!1,this.SKIPFINALCOLORCLAMP=!1,this.EXPOSURE=!1}}}var Rx=M(()=>{wa()});function hle(){cle.length=0,fle=!1,Ee.OnEventObservable.remove(fH),fH=null}var lle,Km,cle,fle,fH,hH=M(()=>{Wn();Ni();ZT();G();lle=new RegExp("^([gimus]+)!"),Km=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: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",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=Qoe.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",z_(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=lle.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;_{ele()});$oe=[],Joe=!1,lH=null});var Wr,Bf=M(()=>{kt();Vt();cH();Rr();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 JP,Fa,eL=M(()=>{kt();kn();Vt();Oa();wa();Bf();Gn();JP=class extends br{constructor(){super(...arguments),this.DETAIL=!1,this.DETAILDIRECTUV=0,this.DETAIL_NORMALBLENDMETHOD=0}},Fa=class extends Wr{_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"DetailMap",140,new JP,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")],Fa.prototype,"texture",void 0);P([F()],Fa.prototype,"diffuseBlendLevel",void 0);P([F()],Fa.prototype,"roughnessBlendLevel",void 0);P([F()],Fa.prototype,"bumpLevel",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Fa.prototype,"normalBlendMethod",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Fa.prototype,"isEnabled",void 0)});var fH,Xn,Sx=M(()=>{Ge();(function(n){n[n.Zero=0]="Zero",n[n.One=1]="One",n[n.MaxViewZ=2]="MaxViewZ",n[n.NoClear=3]="NoClear"})(fH||(fH={}));Xn=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 Ax=M(()=>{});function qm(n){return class extends n{constructor(...e){super(...e),RB()(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 xx=M(()=>{Vt()});var hH,tle,ed=M(()=>{G();hH="sceneUboDeclaration",tle=`struct Scene {viewProjection : mat4x4, +`+h)}}return r}}};Km._MaterialPluginClassToMainDefine={};Km._MaterialPluginCounter=0;Oe.OnEnginesDisposedObservable.add(()=>{hle()});cle=[],fle=!1,fH=null});var Hr,Uf=M(()=>{kt();Vt();hH();Rr();zi();Hr=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 Km(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()],Hr.prototype,"name",void 0);P([F()],Hr.prototype,"priority",void 0);P([F()],Hr.prototype,"resolveIncludes",void 0);P([F()],Hr.prototype,"registerForExtraEvents",void 0);Ft("BABYLON.MaterialPluginBase",Hr)});var rL,Fa,nL=M(()=>{kt();Wn();Vt();Oa();wa();Uf();kn();rL=class extends br{constructor(){super(...arguments),this.DETAIL=!1,this.DETAILDIRECTUV=0,this.DETAIL_NORMALBLENDMETHOD=0}},Fa=class extends Hr{_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"DetailMap",140,new rL,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")],Fa.prototype,"texture",void 0);P([F()],Fa.prototype,"diffuseBlendLevel",void 0);P([F()],Fa.prototype,"roughnessBlendLevel",void 0);P([F()],Fa.prototype,"bumpLevel",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Fa.prototype,"normalBlendMethod",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],Fa.prototype,"isEnabled",void 0)});var dH,Yn,bx=M(()=>{Ge();(function(n){n[n.Zero=0]="Zero",n[n.One=1]="One",n[n.MaxViewZ=2]="MaxViewZ",n[n.NoClear=3]="NoClear"})(dH||(dH={}));Yn=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 qm(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 Mx=M(()=>{});function Zm(n){return class extends n{constructor(...e){super(...e),IB()(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 Cx=M(()=>{Vt()});var uH,dle,rd=M(()=>{G();uH="sceneUboDeclaration",dle=`struct Scene {viewProjection : mat4x4, #ifdef MULTIVIEW viewProjectionR : mat4x4, #endif @@ -5151,17 +5151,17 @@ vEyePosition : vec4, inverseProjection : mat4x4,}; #define SCENE_UBO var scene : Scene; -`;A.IncludesShadersStoreWGSL[hH]||(A.IncludesShadersStoreWGSL[hH]=tle)});var dH,ile,kg=M(()=>{G();dH="meshUboDeclaration",ile=`struct Mesh {world : mat4x4, +`;A.IncludesShadersStoreWGSL[uH]||(A.IncludesShadersStoreWGSL[uH]=dle)});var mH,ule,Xg=M(()=>{G();mH="meshUboDeclaration",ule=`struct Mesh {world : mat4x4, visibility : f32,};var mesh : Mesh; #define WORLD_UBO -`;A.IncludesShadersStoreWGSL[dH]||(A.IncludesShadersStoreWGSL[dH]=ile)});var uH,rle,tL=M(()=>{G();ed();kg();uH="defaultUboDeclaration",rle=`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[mH]||(A.IncludesShadersStoreWGSL[mH]=ule)});var pH,mle,sL=M(()=>{G();rd();Xg();pH="defaultUboDeclaration",mle=`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 -`;A.IncludesShadersStoreWGSL[uH]||(A.IncludesShadersStoreWGSL[uH]=rle)});var mH,nle,Rx=M(()=>{G();mH="uvAttributeDeclaration",nle=`#if defined(UV{X}) && !defined(USE_VERTEX_PULLING) +`;A.IncludesShadersStoreWGSL[pH]||(A.IncludesShadersStoreWGSL[pH]=mle)});var _H,ple,yx=M(()=>{G();_H="uvAttributeDeclaration",ple=`#if defined(UV{X}) && !defined(USE_VERTEX_PULLING) attribute uv{X}: vec2f; #endif -`;A.IncludesShadersStoreWGSL[mH]||(A.IncludesShadersStoreWGSL[mH]=nle)});var pH,sle,bx=M(()=>{G();pH="prePassVertexDeclaration",sle=`#ifdef PREPASS +`;A.IncludesShadersStoreWGSL[_H]||(A.IncludesShadersStoreWGSL[_H]=ple)});var gH,_le,Px=M(()=>{G();gH="prePassVertexDeclaration",_le=`#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 -`;A.IncludesShadersStoreWGSL[pH]||(A.IncludesShadersStoreWGSL[pH]=sle)});var _H,ale,Zm=M(()=>{G();_H="mainUVVaryingDeclaration",ale=`#ifdef MAINUV{X} +`;A.IncludesShadersStoreWGSL[gH]||(A.IncludesShadersStoreWGSL[gH]=_le)});var vH,gle,Qm=M(()=>{G();vH="mainUVVaryingDeclaration",gle=`#ifdef MAINUV{X} varying vMainUV{X}: vec2f; #endif -`;A.IncludesShadersStoreWGSL[_H]||(A.IncludesShadersStoreWGSL[_H]=ale)});var gH,ole,Ix=M(()=>{G();gH="samplerVertexDeclaration",ole=`#if defined(_DEFINENAME_) && _DEFINENAME_DIRECTUV==0 +`;A.IncludesShadersStoreWGSL[vH]||(A.IncludesShadersStoreWGSL[vH]=gle)});var EH,vle,Lx=M(()=>{G();EH="samplerVertexDeclaration",vle=`#if defined(_DEFINENAME_) && _DEFINENAME_DIRECTUV==0 varying v_VARYINGNAME_UV: vec2f; #endif -`;A.IncludesShadersStoreWGSL[gH]||(A.IncludesShadersStoreWGSL[gH]=ole)});var vH,lle,iL=M(()=>{G();vH="bumpVertexDeclaration",lle=`#if defined(BUMP) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) +`;A.IncludesShadersStoreWGSL[EH]||(A.IncludesShadersStoreWGSL[EH]=vle)});var SH,Ele,aL=M(()=>{G();SH="bumpVertexDeclaration",Ele=`#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 -`;A.IncludesShadersStoreWGSL[vH]||(A.IncludesShadersStoreWGSL[vH]=lle)});var EH,cle,SH=M(()=>{G();EH="lightVxFragmentDeclaration",cle=`#ifdef LIGHT{X} +`;A.IncludesShadersStoreWGSL[SH]||(A.IncludesShadersStoreWGSL[SH]=Ele)});var TH,Sle,AH=M(()=>{G();TH="lightVxFragmentDeclaration",Sle=`#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 -`;A.IncludesShadersStoreWGSL[EH]||(A.IncludesShadersStoreWGSL[EH]=cle)});var TH,fle,Mx=M(()=>{G();TH="lightVxUboDeclaration",fle=`#ifdef LIGHT{X} +`;A.IncludesShadersStoreWGSL[TH]||(A.IncludesShadersStoreWGSL[TH]=Sle)});var xH,Tle,Dx=M(()=>{G();xH="lightVxUboDeclaration",Tle=`#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 -`;A.IncludesShadersStoreWGSL[TH]||(A.IncludesShadersStoreWGSL[TH]=fle)});var AH,hle,Uf=M(()=>{G();AH="morphTargetsVertexGlobalDeclaration",hle=`#ifdef MORPHTARGETS +`;A.IncludesShadersStoreWGSL[xH]||(A.IncludesShadersStoreWGSL[xH]=Tle)});var RH,Ale,Vf=M(()=>{G();RH="morphTargetsVertexGlobalDeclaration",Ale=`#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 -`;A.IncludesShadersStoreWGSL[AH]||(A.IncludesShadersStoreWGSL[AH]=hle)});var xH,dle,Vf=M(()=>{G();xH="morphTargetsVertexDeclaration",dle=`#ifdef MORPHTARGETS +`;A.IncludesShadersStoreWGSL[RH]||(A.IncludesShadersStoreWGSL[RH]=Ale)});var bH,xle,Gf=M(()=>{G();bH="morphTargetsVertexDeclaration",xle=`#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 -`;A.IncludesShadersStoreWGSL[xH]||(A.IncludesShadersStoreWGSL[xH]=dle)});var RH,ule,td=M(()=>{G();RH="logDepthDeclaration",ule=`#ifdef LOGARITHMICDEPTH +`;A.IncludesShadersStoreWGSL[bH]||(A.IncludesShadersStoreWGSL[bH]=xle)});var IH,Rle,nd=M(()=>{G();IH="logDepthDeclaration",Rle=`#ifdef LOGARITHMICDEPTH uniform logarithmicDepthConstant: f32;varying vFragmentDepth: f32; #endif -`;A.IncludesShadersStoreWGSL[RH]||(A.IncludesShadersStoreWGSL[RH]=ule)});var bH,mle,Cx=M(()=>{G();bH="vertexPullingDeclaration",mle=`#ifdef USE_VERTEX_PULLING +`;A.IncludesShadersStoreWGSL[IH]||(A.IncludesShadersStoreWGSL[IH]=Rle)});var MH,ble,Ox=M(()=>{G();MH="vertexPullingDeclaration",ble=`#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 -`;A.IncludesShadersStoreWGSL[bH]||(A.IncludesShadersStoreWGSL[bH]=mle)});var IH,ple,yx=M(()=>{G();IH="vertexPullingVertex",ple=`#ifdef USE_VERTEX_PULLING +`;A.IncludesShadersStoreWGSL[MH]||(A.IncludesShadersStoreWGSL[MH]=ble)});var CH,Ile,Nx=M(()=>{G();CH="vertexPullingVertex",Ile=`#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 -`;A.IncludesShadersStoreWGSL[IH]||(A.IncludesShadersStoreWGSL[IH]=ple)});var MH,_le,Gf=M(()=>{G();MH="morphTargetsVertexGlobal",_le=`#ifdef MORPHTARGETS +`;A.IncludesShadersStoreWGSL[CH]||(A.IncludesShadersStoreWGSL[CH]=Ile)});var yH,Mle,kf=M(()=>{G();yH="morphTargetsVertexGlobal",Mle=`#ifdef MORPHTARGETS #ifdef MORPHTARGETS_TEXTURE var vertexID : f32; #endif #endif -`;A.IncludesShadersStoreWGSL[MH]||(A.IncludesShadersStoreWGSL[MH]=_le)});var CH,gle,kf=M(()=>{G();CH="morphTargetsVertex",gle=`#ifdef MORPHTARGETS +`;A.IncludesShadersStoreWGSL[yH]||(A.IncludesShadersStoreWGSL[yH]=Mle)});var PH,Cle,Wf=M(()=>{G();PH="morphTargetsVertex",Cle=`#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 -`;A.IncludesShadersStoreWGSL[CH]||(A.IncludesShadersStoreWGSL[CH]=gle)});var yH,vle,Px=M(()=>{G();yH="prePassVertex",vle=`#ifdef PREPASS_DEPTH +`;A.IncludesShadersStoreWGSL[PH]||(A.IncludesShadersStoreWGSL[PH]=Cle)});var LH,yle,wx=M(()=>{G();LH="prePassVertex",yle=`#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 -`;A.IncludesShadersStoreWGSL[yH]||(A.IncludesShadersStoreWGSL[yH]=vle)});var PH,Ele,Lx=M(()=>{G();PH="uvVariableDeclaration",Ele=`#ifdef MAINUV{X} +`;A.IncludesShadersStoreWGSL[LH]||(A.IncludesShadersStoreWGSL[LH]=yle)});var DH,Ple,Fx=M(()=>{G();DH="uvVariableDeclaration",Ple=`#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 -`;A.IncludesShadersStoreWGSL[PH]||(A.IncludesShadersStoreWGSL[PH]=Ele)});var LH,Sle,Dx=M(()=>{G();LH="samplerVertexImplementation",Sle=`#if defined(_DEFINENAME_) && _DEFINENAME_DIRECTUV==0 +`;A.IncludesShadersStoreWGSL[DH]||(A.IncludesShadersStoreWGSL[DH]=Ple)});var OH,Lle,Bx=M(()=>{G();OH="samplerVertexImplementation",Lle=`#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 -`;A.IncludesShadersStoreWGSL[LH]||(A.IncludesShadersStoreWGSL[LH]=Sle)});var DH,Tle,Ox=M(()=>{G();DH="bumpVertex",Tle=`#if defined(BUMP) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) +`;A.IncludesShadersStoreWGSL[OH]||(A.IncludesShadersStoreWGSL[OH]=Lle)});var NH,Dle,Ux=M(()=>{G();NH="bumpVertex",Dle=`#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 -`;A.IncludesShadersStoreWGSL[DH]||(A.IncludesShadersStoreWGSL[DH]=Tle)});var OH,Ale,Nx=M(()=>{G();OH="shadowsVertex",Ale=`#ifdef SHADOWS +`;A.IncludesShadersStoreWGSL[NH]||(A.IncludesShadersStoreWGSL[NH]=Dle)});var wH,Ole,Vx=M(()=>{G();wH="shadowsVertex",Ole=`#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 -`;A.IncludesShadersStoreWGSL[OH]||(A.IncludesShadersStoreWGSL[OH]=Ale)});var NH,xle,wx=M(()=>{G();NH="logDepthVertex",xle=`#ifdef LOGARITHMICDEPTH +`;A.IncludesShadersStoreWGSL[wH]||(A.IncludesShadersStoreWGSL[wH]=Ole)});var FH,Nle,Gx=M(()=>{G();FH="logDepthVertex",Nle=`#ifdef LOGARITHMICDEPTH vertexOutputs.vFragmentDepth=1.0+vertexOutputs.position.w;vertexOutputs.position.z=log2(max(0.000001,vertexOutputs.vFragmentDepth))*uniforms.logarithmicDepthConstant; #endif -`;A.IncludesShadersStoreWGSL[NH]||(A.IncludesShadersStoreWGSL[NH]=xle)});var FH={};tt(FH,{defaultVertexShaderWGSL:()=>Rle});var rL,wH,Rle,BH=M(()=>{G();tL();Rx();Pa();sc();ac();wf();bx();Zm();Ix();iL();oc();Ig();SH();Mx();Uf();Vf();td();Cx();yx();Gf();kf();lc();cc();fc();Px();Lx();Dx();Ox();hc();Mg();Nx();Cg();wx();rL="defaultVertexShader",wH=`#include +`;A.IncludesShadersStoreWGSL[FH]||(A.IncludesShadersStoreWGSL[FH]=Nle)});var UH={};tt(UH,{defaultVertexShaderWGSL:()=>wle});var oL,BH,wle,VH=M(()=>{G();sL();yx();Pa();oc();lc();Ff();Px();Qm();Lx();aL();cc();Pg();AH();Dx();Vf();Gf();nd();Ox();Nx();kf();Wf();fc();hc();dc();wx();Fx();Bx();Ux();uc();Lg();Vx();Dg();Gx();oL="defaultVertexShader",BH=`#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 } -`;A.ShadersStoreWGSL[rL]||(A.ShadersStoreWGSL[rL]=wH);Rle={name:rL,shader:wH}});var UH,ble,Fx=M(()=>{G();UH="prePassDeclaration",ble=`#ifdef PREPASS +`;A.ShadersStoreWGSL[oL]||(A.ShadersStoreWGSL[oL]=BH);wle={name:oL,shader:BH}});var GH,Fle,kx=M(()=>{G();GH="prePassDeclaration",Fle=`#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 -`;A.IncludesShadersStoreWGSL[UH]||(A.IncludesShadersStoreWGSL[UH]=ble)});var VH,Ile,Bx=M(()=>{G();VH="oitDeclaration",Ile=`#ifdef ORDER_INDEPENDENT_TRANSPARENCY +`;A.IncludesShadersStoreWGSL[GH]||(A.IncludesShadersStoreWGSL[GH]=Fle)});var kH,Ble,Wx=M(()=>{G();kH="oitDeclaration",Ble=`#ifdef ORDER_INDEPENDENT_TRANSPARENCY #define MAX_DEPTH 99999.0 var oitDepthSamplerSampler: sampler;var oitDepthSampler: texture_2d;var oitFrontColorSamplerSampler: sampler;var oitFrontColorSampler: texture_2d; #endif -`;A.IncludesShadersStoreWGSL[VH]||(A.IncludesShadersStoreWGSL[VH]=Ile)});var GH,Mle,Ux=M(()=>{G();GH="lightUboDeclaration",Mle=`#ifdef LIGHT{X} +`;A.IncludesShadersStoreWGSL[kH]||(A.IncludesShadersStoreWGSL[kH]=Ble)});var WH,Ule,Hx=M(()=>{G();WH="lightUboDeclaration",Ule=`#ifdef LIGHT{X} struct Light{X} {vLightData: vec4f, vLightDiffuse: vec4f, @@ -6035,7 +6035,7 @@ uniform lightMatrix{X}: mat4x4f; #endif #endif #endif -`;A.IncludesShadersStoreWGSL[GH]||(A.IncludesShadersStoreWGSL[GH]=Mle)});var kH,Cle,nL=M(()=>{G();kH="ltcHelperFunctions",Cle=`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[WH]||(A.IncludesShadersStoreWGSL[WH]=Ule)});var HH,Vle,lL=M(()=>{G();HH="ltcHelperFunctions",Vle=`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;} -`;A.IncludesShadersStoreWGSL[kH]||(A.IncludesShadersStoreWGSL[kH]=Cle)});var WH,yle,sL=M(()=>{G();WH="clusteredLightingFunctions",yle=`struct ClusteredLight {vLightData: vec4f, +`;A.IncludesShadersStoreWGSL[HH]||(A.IncludesShadersStoreWGSL[HH]=Vle)});var zH,Gle,cL=M(()=>{G();zH="clusteredLightingFunctions",Gle=`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);} -`;A.IncludesShadersStoreWGSL[WH]||(A.IncludesShadersStoreWGSL[WH]=yle)});var HH,Ple,zH=M(()=>{G();nL();sL();HH="lightsFragmentFunctions",Ple=`struct lightingInfo +`;A.IncludesShadersStoreWGSL[zH]||(A.IncludesShadersStoreWGSL[zH]=Gle)});var XH,kle,YH=M(()=>{G();lL();cL();XH="lightsFragmentFunctions",kle=`struct lightingInfo {diffuse: vec3f, #ifdef SPECULARTERM specular: vec3f, @@ -6189,7 +6189,7 @@ result.specular+=info.specular; batchOffset+=CLUSTLIGHT_BATCH;} return result;} #endif -`;A.IncludesShadersStoreWGSL[HH]||(A.IncludesShadersStoreWGSL[HH]=Ple)});var XH,Lle,Vx=M(()=>{G();XH="shadowsFragmentFunctions",Lle=`#ifdef SHADOWS +`;A.IncludesShadersStoreWGSL[XH]||(A.IncludesShadersStoreWGSL[XH]=kle)});var KH,Wle,zx=M(()=>{G();KH="shadowsFragmentFunctions",Wle=`#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 -`;A.IncludesShadersStoreWGSL[XH]||(A.IncludesShadersStoreWGSL[XH]=Lle)});var YH,Dle,id=M(()=>{G();YH="samplerFragmentDeclaration",Dle=`#ifdef _DEFINENAME_ +`;A.IncludesShadersStoreWGSL[KH]||(A.IncludesShadersStoreWGSL[KH]=Wle)});var jH,Hle,sd=M(()=>{G();jH="samplerFragmentDeclaration",Hle=`#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 -`;A.IncludesShadersStoreWGSL[YH]||(A.IncludesShadersStoreWGSL[YH]=Dle)});var KH,Ole,jH=M(()=>{G();KH="fresnelFunction",Ole=`#ifdef FRESNEL +`;A.IncludesShadersStoreWGSL[jH]||(A.IncludesShadersStoreWGSL[jH]=Hle)});var qH,zle,ZH=M(()=>{G();qH="fresnelFunction",zle=`#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 -`;A.IncludesShadersStoreWGSL[KH]||(A.IncludesShadersStoreWGSL[KH]=Ole)});var qH,Nle,Wg=M(()=>{G();qH="reflectionFunction",Nle=`fn computeFixedEquirectangularCoords(worldPos: vec4f,worldNormal: vec3f,direction: vec3f)->vec3f +`;A.IncludesShadersStoreWGSL[qH]||(A.IncludesShadersStoreWGSL[qH]=zle)});var QH,Xle,Yg=M(()=>{G();QH="reflectionFunction",Xle=`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 -`;A.IncludesShadersStoreWGSL[qH]||(A.IncludesShadersStoreWGSL[qH]=Nle)});var ZH,wle,Gx=M(()=>{G();ZH="imageProcessingDeclaration",wle=`#ifdef EXPOSURE +`;A.IncludesShadersStoreWGSL[QH]||(A.IncludesShadersStoreWGSL[QH]=Xle)});var $H,Yle,Xx=M(()=>{G();$H="imageProcessingDeclaration",Yle=`#ifdef EXPOSURE uniform exposureLinear: f32; #endif #ifdef CONTRAST @@ -6593,7 +6593,7 @@ uniform colorTransformSettings: vec4f; #ifdef DITHER uniform ditherIntensity: f32; #endif -`;A.IncludesShadersStoreWGSL[ZH]||(A.IncludesShadersStoreWGSL[ZH]=wle)});var QH,Fle,kx=M(()=>{G();QH="imageProcessingFunctions",Fle=`#if TONEMAPPING==3 +`;A.IncludesShadersStoreWGSL[$H]||(A.IncludesShadersStoreWGSL[$H]=Yle)});var JH,Kle,Yx=M(()=>{G();JH="imageProcessingFunctions",Kle=`#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();$H="bumpFragmentMainFunctions",Ble=`#if defined(BUMP) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) || defined(DETAIL) +return vec4f(rgb,result.a);}`;A.IncludesShadersStoreWGSL[JH]||(A.IncludesShadersStoreWGSL[JH]=Kle)});var ez,jle,Kx=M(()=>{G();ez="bumpFragmentMainFunctions",jle=`#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 -`;A.IncludesShadersStoreWGSL[$H]||(A.IncludesShadersStoreWGSL[$H]=Ble)});var JH,Ule,Hx=M(()=>{G();id();JH="bumpFragmentFunctions",Ule=`#if defined(BUMP) +`;A.IncludesShadersStoreWGSL[ez]||(A.IncludesShadersStoreWGSL[ez]=jle)});var tz,qle,jx=M(()=>{G();sd();tz="bumpFragmentFunctions",qle=`#if defined(BUMP) #include(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump,_SAMPLERNAME_,bump) #endif #if defined(DETAIL) @@ -6725,7 +6725,7 @@ return -texCoordOffset; #endif } #endif -`;A.IncludesShadersStoreWGSL[JH]||(A.IncludesShadersStoreWGSL[JH]=Ule)});var ez,Vle,zx=M(()=>{G();ez="bumpFragment",Vle=`var uvOffset: vec2f= vec2f(0.0,0.0); +`;A.IncludesShadersStoreWGSL[tz]||(A.IncludesShadersStoreWGSL[tz]=qle)});var iz,Zle,qx=M(()=>{G();iz="bumpFragment",Zle=`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 -`;A.IncludesShadersStoreWGSL[ez]||(A.IncludesShadersStoreWGSL[ez]=Vle)});var tz,Gle,aL=M(()=>{G();tz="decalFragment",Gle=`#ifdef DECAL +`;A.IncludesShadersStoreWGSL[iz]||(A.IncludesShadersStoreWGSL[iz]=Zle)});var rz,Qle,fL=M(()=>{G();rz="decalFragment",Qle=`#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 -`;A.IncludesShadersStoreWGSL[tz]||(A.IncludesShadersStoreWGSL[tz]=Gle)});var iz,kle,Xx=M(()=>{G();iz="depthPrePass",kle=`#ifdef DEPTHPREPASS +`;A.IncludesShadersStoreWGSL[rz]||(A.IncludesShadersStoreWGSL[rz]=Qle)});var nz,$le,Zx=M(()=>{G();nz="depthPrePass",$le=`#ifdef DEPTHPREPASS #if !defined(PREPASS) && !defined(ORDER_INDEPENDENT_TRANSPARENCY) fragmentOutputs.color= vec4f(0.,0.,0.,1.0); #endif return fragmentOutputs; #endif -`;A.IncludesShadersStoreWGSL[iz]||(A.IncludesShadersStoreWGSL[iz]=kle)});var rz,Wle,oL=M(()=>{G();rz="lightFragment",Wle=`#ifdef LIGHT{X} +`;A.IncludesShadersStoreWGSL[nz]||(A.IncludesShadersStoreWGSL[nz]=$le)});var sz,Jle,hL=M(()=>{G();sz="lightFragment",Jle=`#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 -`;A.IncludesShadersStoreWGSL[rz]||(A.IncludesShadersStoreWGSL[rz]=Wle)});var nz,Hle,Yx=M(()=>{G();nz="logDepthFragment",Hle=`#ifdef LOGARITHMICDEPTH +`;A.IncludesShadersStoreWGSL[sz]||(A.IncludesShadersStoreWGSL[sz]=Jle)});var az,ece,Qx=M(()=>{G();az="logDepthFragment",ece=`#ifdef LOGARITHMICDEPTH fragmentOutputs.fragDepth=log2(fragmentInputs.vFragmentDepth)*uniforms.logarithmicDepthConstant*0.5; #endif -`;A.IncludesShadersStoreWGSL[nz]||(A.IncludesShadersStoreWGSL[nz]=Hle)});var sz,zle,Kx=M(()=>{G();sz="oitFragment",zle=`#ifdef ORDER_INDEPENDENT_TRANSPARENCY +`;A.IncludesShadersStoreWGSL[az]||(A.IncludesShadersStoreWGSL[az]=ece)});var oz,tce,$x=M(()=>{G();oz="oitFragment",tce=`#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 && fragDepthXle});var lL,az,Xle,lz=M(()=>{G();tL();Fx();Bx();Zm();Pa();Ux();zH();Vx();id();jH();Wg();Gx();kx();Wx();Hx();dc();td();yg();uc();zx();aL();Xx();oL();Yx();Pg();Kx();lL="defaultPixelShader",az=`#include +`;A.IncludesShadersStoreWGSL[oz]||(A.IncludesShadersStoreWGSL[oz]=tce)});var cz={};tt(cz,{defaultPixelShaderWGSL:()=>ice});var dL,lz,ice,fz=M(()=>{G();sL();kx();Wx();Qm();Pa();Hx();YH();zx();sd();ZH();Yg();Xx();Yx();Kx();jx();mc();nd();Og();pc();qx();fL();Zx();hL();Qx();Ng();$x();dL="defaultPixelShader",lz=`#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 } -`;A.ShadersStoreWGSL[lL]||(A.ShadersStoreWGSL[lL]=az);Xle={name:lL,shader:az}});var cz,Yle,jx=M(()=>{G();cz="decalVertexDeclaration",Yle=`#ifdef DECAL +`;A.ShadersStoreWGSL[dL]||(A.ShadersStoreWGSL[dL]=lz);ice={name:dL,shader:lz}});var hz,rce,Jx=M(()=>{G();hz="decalVertexDeclaration",rce=`#ifdef DECAL uniform vec4 vDecalInfos;uniform mat4 decalMatrix; #endif -`;A.IncludesShadersStore[cz]||(A.IncludesShadersStore[cz]=Yle)});var fz,Kle,hz=M(()=>{G();jx();fz="defaultVertexDeclaration",Kle=`uniform mat4 viewProjection; +`;A.IncludesShadersStore[hz]||(A.IncludesShadersStore[hz]=rce)});var dz,nce,uz=M(()=>{G();Jx();dz="defaultVertexDeclaration",nce=`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 -`;A.IncludesShadersStore[fz]||(A.IncludesShadersStore[fz]=Kle)});var dz,jle,rd=M(()=>{G();dz="sceneUboDeclaration",jle=`layout(std140,column_major) uniform;uniform Scene {mat4 viewProjection; +`;A.IncludesShadersStore[dz]||(A.IncludesShadersStore[dz]=nce)});var mz,sce,ad=M(()=>{G();mz="sceneUboDeclaration",sce=`layout(std140,column_major) uniform;uniform Scene {mat4 viewProjection; #ifdef MULTIVIEW mat4 viewProjectionR; #endif mat4 view;mat4 projection;vec4 vEyePosition;mat4 inverseProjection;}; -`;A.IncludesShadersStore[dz]||(A.IncludesShadersStore[dz]=jle)});var uz,qle,Hg=M(()=>{G();uz="meshUboDeclaration",qle=`#ifdef WEBGL2 +`;A.IncludesShadersStore[mz]||(A.IncludesShadersStore[mz]=sce)});var pz,ace,Kg=M(()=>{G();pz="meshUboDeclaration",ace=`#ifdef WEBGL2 uniform mat4 world;uniform float visibility; #else layout(std140,column_major) uniform;uniform Mesh {mat4 world;float visibility;}; #endif #define WORLD_UBO -`;A.IncludesShadersStore[uz]||(A.IncludesShadersStore[uz]=qle)});var mz,Zle,cL=M(()=>{G();rd();Hg();mz="defaultUboDeclaration",Zle=`layout(std140,column_major) uniform;uniform Material +`;A.IncludesShadersStore[pz]||(A.IncludesShadersStore[pz]=ace)});var _z,oce,uL=M(()=>{G();ad();Kg();_z="defaultUboDeclaration",oce=`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 -`;A.IncludesShadersStore[mz]||(A.IncludesShadersStore[mz]=Zle)});var pz,Qle,qx=M(()=>{G();pz="uvAttributeDeclaration",Qle=`#ifdef UV{X} +`;A.IncludesShadersStore[_z]||(A.IncludesShadersStore[_z]=oce)});var gz,lce,eR=M(()=>{G();gz="uvAttributeDeclaration",lce=`#ifdef UV{X} attribute vec2 uv{X}; #endif -`;A.IncludesShadersStore[pz]||(A.IncludesShadersStore[pz]=Qle)});var _z,$le,Zx=M(()=>{G();_z="prePassVertexDeclaration",$le=`#ifdef PREPASS +`;A.IncludesShadersStore[gz]||(A.IncludesShadersStore[gz]=lce)});var vz,cce,tR=M(()=>{G();vz="prePassVertexDeclaration",cce=`#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 -`;A.IncludesShadersStore[_z]||(A.IncludesShadersStore[_z]=$le)});var gz,Jle,Qm=M(()=>{G();gz="mainUVVaryingDeclaration",Jle=`#ifdef MAINUV{X} +`;A.IncludesShadersStore[vz]||(A.IncludesShadersStore[vz]=cce)});var Ez,fce,$m=M(()=>{G();Ez="mainUVVaryingDeclaration",fce=`#ifdef MAINUV{X} varying vec2 vMainUV{X}; #endif -`;A.IncludesShadersStore[gz]||(A.IncludesShadersStore[gz]=Jle)});var vz,ece,Qx=M(()=>{G();vz="samplerVertexDeclaration",ece=`#if defined(_DEFINENAME_) && _DEFINENAME_DIRECTUV==0 +`;A.IncludesShadersStore[Ez]||(A.IncludesShadersStore[Ez]=fce)});var Sz,hce,iR=M(()=>{G();Sz="samplerVertexDeclaration",hce=`#if defined(_DEFINENAME_) && _DEFINENAME_DIRECTUV==0 varying vec2 v_VARYINGNAME_UV; #endif -`;A.IncludesShadersStore[vz]||(A.IncludesShadersStore[vz]=ece)});var Ez,tce,fL=M(()=>{G();Ez="bumpVertexDeclaration",tce=`#if defined(BUMP) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) +`;A.IncludesShadersStore[Sz]||(A.IncludesShadersStore[Sz]=hce)});var Tz,dce,mL=M(()=>{G();Tz="bumpVertexDeclaration",dce=`#if defined(BUMP) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) #if defined(TANGENT) && defined(NORMAL) varying mat3 vTBN; #endif #endif -`;A.IncludesShadersStore[Ez]||(A.IncludesShadersStore[Ez]=tce)});var Sz,ice,$x=M(()=>{G();Sz="lightVxFragmentDeclaration",ice=`#ifdef LIGHT{X} +`;A.IncludesShadersStore[Tz]||(A.IncludesShadersStore[Tz]=dce)});var Az,uce,rR=M(()=>{G();Az="lightVxFragmentDeclaration",uce=`#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 -`;A.IncludesShadersStore[Sz]||(A.IncludesShadersStore[Sz]=ice)});var Tz,rce,Jx=M(()=>{G();Tz="lightVxUboDeclaration",rce=`#ifdef LIGHT{X} +`;A.IncludesShadersStore[Az]||(A.IncludesShadersStore[Az]=uce)});var xz,mce,nR=M(()=>{G();xz="lightVxUboDeclaration",mce=`#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 -`;A.IncludesShadersStore[Tz]||(A.IncludesShadersStore[Tz]=rce)});var Az,nce,Wf=M(()=>{G();Az="morphTargetsVertexGlobalDeclaration",nce=`#ifdef MORPHTARGETS +`;A.IncludesShadersStore[xz]||(A.IncludesShadersStore[xz]=mce)});var Rz,pce,Hf=M(()=>{G();Rz="morphTargetsVertexGlobalDeclaration",pce=`#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 -`;A.IncludesShadersStore[Az]||(A.IncludesShadersStore[Az]=nce)});var xz,sce,Hf=M(()=>{G();xz="morphTargetsVertexDeclaration",sce=`#ifdef MORPHTARGETS +`;A.IncludesShadersStore[Rz]||(A.IncludesShadersStore[Rz]=pce)});var bz,_ce,zf=M(()=>{G();bz="morphTargetsVertexDeclaration",_ce=`#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 -`;A.IncludesShadersStore[xz]||(A.IncludesShadersStore[xz]=sce)});var Rz,ace,nd=M(()=>{G();Rz="logDepthDeclaration",ace=`#ifdef LOGARITHMICDEPTH +`;A.IncludesShadersStore[bz]||(A.IncludesShadersStore[bz]=_ce)});var Iz,gce,od=M(()=>{G();Iz="logDepthDeclaration",gce=`#ifdef LOGARITHMICDEPTH uniform float logarithmicDepthConstant;varying float vFragmentDepth; #endif -`;A.IncludesShadersStore[Rz]||(A.IncludesShadersStore[Rz]=ace)});var bz,oce,zf=M(()=>{G();bz="morphTargetsVertexGlobal",oce=`#ifdef MORPHTARGETS +`;A.IncludesShadersStore[Iz]||(A.IncludesShadersStore[Iz]=gce)});var Mz,vce,Xf=M(()=>{G();Mz="morphTargetsVertexGlobal",vce=`#ifdef MORPHTARGETS #ifdef MORPHTARGETS_TEXTURE float vertexID; #endif #endif -`;A.IncludesShadersStore[bz]||(A.IncludesShadersStore[bz]=oce)});var Iz,lce,Xf=M(()=>{G();Iz="morphTargetsVertex",lce=`#ifdef MORPHTARGETS +`;A.IncludesShadersStore[Mz]||(A.IncludesShadersStore[Mz]=vce)});var Cz,Ece,Yf=M(()=>{G();Cz="morphTargetsVertex",Ece=`#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 -`;A.IncludesShadersStore[Iz]||(A.IncludesShadersStore[Iz]=lce)});var Mz,cce,eR=M(()=>{G();Mz="prePassVertex",cce=`#ifdef PREPASS_DEPTH +`;A.IncludesShadersStore[Cz]||(A.IncludesShadersStore[Cz]=Ece)});var yz,Sce,sR=M(()=>{G();yz="prePassVertex",Sce=`#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 -`;A.IncludesShadersStore[Mz]||(A.IncludesShadersStore[Mz]=cce)});var Cz,fce,tR=M(()=>{G();Cz="uvVariableDeclaration",fce=`#if !defined(UV{X}) && defined(MAINUV{X}) +`;A.IncludesShadersStore[yz]||(A.IncludesShadersStore[yz]=Sce)});var Pz,Tce,aR=M(()=>{G();Pz="uvVariableDeclaration",Tce=`#if !defined(UV{X}) && defined(MAINUV{X}) vec2 uv{X}=vec2(0.,0.); #endif #ifdef MAINUV{X} vMainUV{X}=uv{X}; #endif -`;A.IncludesShadersStore[Cz]||(A.IncludesShadersStore[Cz]=fce)});var yz,hce,iR=M(()=>{G();yz="samplerVertexImplementation",hce=`#if defined(_DEFINENAME_) && _DEFINENAME_DIRECTUV==0 +`;A.IncludesShadersStore[Pz]||(A.IncludesShadersStore[Pz]=Tce)});var Lz,Ace,oR=M(()=>{G();Lz="samplerVertexImplementation",Ace=`#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 -`;A.IncludesShadersStore[yz]||(A.IncludesShadersStore[yz]=hce)});var Pz,dce,rR=M(()=>{G();Pz="bumpVertex",dce=`#if defined(BUMP) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) +`;A.IncludesShadersStore[Lz]||(A.IncludesShadersStore[Lz]=Ace)});var Dz,xce,lR=M(()=>{G();Dz="bumpVertex",xce=`#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 -`;A.IncludesShadersStore[Pz]||(A.IncludesShadersStore[Pz]=dce)});var Lz,uce,nR=M(()=>{G();Lz="shadowsVertex",uce=`#ifdef SHADOWS +`;A.IncludesShadersStore[Dz]||(A.IncludesShadersStore[Dz]=xce)});var Oz,Rce,cR=M(()=>{G();Oz="shadowsVertex",Rce=`#ifdef SHADOWS #if defined(SHADOWCSM{X}) vPositionFromCamera{X}=view*worldPos;for (int i=0; i{G();Dz="pointCloudVertex",mce=`#if defined(POINTSIZE) && !defined(WEBGPU) +`;A.IncludesShadersStore[Oz]||(A.IncludesShadersStore[Oz]=Rce)});var Nz,bce,pL=M(()=>{G();Nz="pointCloudVertex",bce=`#if defined(POINTSIZE) && !defined(WEBGPU) gl_PointSize=pointSize; #endif -`;A.IncludesShadersStore[Dz]||(A.IncludesShadersStore[Dz]=mce)});var Oz,pce,sR=M(()=>{G();Oz="logDepthVertex",pce=`#ifdef LOGARITHMICDEPTH +`;A.IncludesShadersStore[Nz]||(A.IncludesShadersStore[Nz]=bce)});var wz,Ice,fR=M(()=>{G();wz="logDepthVertex",Ice=`#ifdef LOGARITHMICDEPTH vFragmentDepth=1.0+gl_Position.w;gl_Position.z=log2(max(0.000001,vFragmentDepth))*logarithmicDepthConstant; #endif -`;A.IncludesShadersStore[Oz]||(A.IncludesShadersStore[Oz]=pce)});var wz={};tt(wz,{defaultVertexShader:()=>_ce});var dL,Nz,_ce,Fz=M(()=>{G();hz();cL();qx();La();mc();pc();Ff();Zx();Qm();Qx();fL();_c();Lg();$x();Jx();Wf();Hf();nd();zf();Xf();gc();vc();Ec();eR();tR();iR();rR();Sc();Dg();nR();Og();hL();sR();dL="defaultVertexShader",Nz=`#define CUSTOM_VERTEX_EXTENSION +`;A.IncludesShadersStore[wz]||(A.IncludesShadersStore[wz]=Ice)});var Bz={};tt(Bz,{defaultVertexShader:()=>Mce});var _L,Fz,Mce,Uz=M(()=>{G();uz();uL();eR();La();_c();gc();Bf();tR();$m();iR();mL();vc();wg();rR();nR();Hf();zf();od();Xf();Yf();Ec();Sc();Tc();sR();aR();oR();lR();Ac();Fg();cR();Bg();pL();fR();_L="defaultVertexShader",Fz=`#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 } -`;A.ShadersStore[dL]||(A.ShadersStore[dL]=Nz);_ce={name:dL,shader:Nz}});var Bz,gce,aR=M(()=>{G();Bz="decalFragmentDeclaration",gce=`#ifdef DECAL +`;A.ShadersStore[_L]||(A.ShadersStore[_L]=Fz);Mce={name:_L,shader:Fz}});var Vz,Cce,hR=M(()=>{G();Vz="decalFragmentDeclaration",Cce=`#ifdef DECAL uniform vec4 vDecalInfos; #endif -`;A.IncludesShadersStore[Bz]||(A.IncludesShadersStore[Bz]=gce)});var Uz,vce,Vz=M(()=>{G();aR();Uz="defaultFragmentDeclaration",vce=`uniform vec4 vEyePosition;uniform vec4 vDiffuseColor;uniform vec4 vSpecularColor;uniform vec3 vEmissiveColor;uniform vec3 vAmbientColor;uniform float visibility; +`;A.IncludesShadersStore[Vz]||(A.IncludesShadersStore[Vz]=Cce)});var Gz,yce,kz=M(()=>{G();hR();Gz="defaultFragmentDeclaration",yce=`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 -`;A.IncludesShadersStore[Uz]||(A.IncludesShadersStore[Uz]=vce)});var Gz,Ece,oR=M(()=>{G();Gz="prePassDeclaration",Ece=`#ifdef PREPASS +`;A.IncludesShadersStore[Gz]||(A.IncludesShadersStore[Gz]=yce)});var Wz,Pce,dR=M(()=>{G();Wz="prePassDeclaration",Pce=`#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 -`;A.IncludesShadersStore[Gz]||(A.IncludesShadersStore[Gz]=Ece)});var kz,Sce,lR=M(()=>{G();kz="oitDeclaration",Sce=`#ifdef ORDER_INDEPENDENT_TRANSPARENCY +`;A.IncludesShadersStore[Wz]||(A.IncludesShadersStore[Wz]=Pce)});var Hz,Lce,uR=M(()=>{G();Hz="oitDeclaration",Lce=`#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 -`;A.IncludesShadersStore[kz]||(A.IncludesShadersStore[kz]=Sce)});var Wz,Tce,cR=M(()=>{G();Wz="lightFragmentDeclaration",Tce=`#ifdef LIGHT{X} +`;A.IncludesShadersStore[Hz]||(A.IncludesShadersStore[Hz]=Lce)});var zz,Dce,mR=M(()=>{G();zz="lightFragmentDeclaration",Dce=`#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 -`;A.IncludesShadersStore[Wz]||(A.IncludesShadersStore[Wz]=Tce)});var Hz,Ace,fR=M(()=>{G();Hz="lightUboDeclaration",Ace=`#ifdef LIGHT{X} +`;A.IncludesShadersStore[zz]||(A.IncludesShadersStore[zz]=Dce)});var Xz,Oce,pR=M(()=>{G();Xz="lightUboDeclaration",Oce=`#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 -`;A.IncludesShadersStore[Hz]||(A.IncludesShadersStore[Hz]=Ace)});var zz,xce,uL=M(()=>{G();zz="ltcHelperFunctions",xce=`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[Xz]||(A.IncludesShadersStore[Xz]=Oce)});var Yz,Nce,gL=M(()=>{G();Yz="ltcHelperFunctions",Nce=`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;}`;A.IncludesShadersStore[zz]||(A.IncludesShadersStore[zz]=xce)});var Xz,Rce,mL=M(()=>{G();Xz="clusteredLightingFunctions",Rce=`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[Yz]||(A.IncludesShadersStore[Yz]=Nce)});var Kz,wce,vL=M(()=>{G();Kz="clusteredLightingFunctions",wce=`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);} -`;A.IncludesShadersStore[Xz]||(A.IncludesShadersStore[Xz]=Rce)});var Yz,bce,Kz=M(()=>{G();uL();mL();Yz="lightsFragmentFunctions",bce=`struct lightingInfo +`;A.IncludesShadersStore[Kz]||(A.IncludesShadersStore[Kz]=wce)});var jz,Fce,qz=M(()=>{G();gL();vL();jz="lightsFragmentFunctions",Fce=`struct lightingInfo {vec3 diffuse; #ifdef SPECULARTERM vec3 specular; @@ -8470,7 +8470,7 @@ result.specular+=info.specular; batchOffset+=CLUSTLIGHT_BATCH;} return result;} #endif -`;A.IncludesShadersStore[Yz]||(A.IncludesShadersStore[Yz]=bce)});var jz,Ice,hR=M(()=>{G();jz="shadowsFragmentFunctions",Ice=`#ifdef SHADOWS +`;A.IncludesShadersStore[jz]||(A.IncludesShadersStore[jz]=Fce)});var Zz,Bce,_R=M(()=>{G();Zz="shadowsFragmentFunctions",Bce=`#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 -`;A.IncludesShadersStore[jz]||(A.IncludesShadersStore[jz]=Ice)});var qz,Mce,sd=M(()=>{G();qz="samplerFragmentDeclaration",Mce=`#ifdef _DEFINENAME_ +`;A.IncludesShadersStore[Zz]||(A.IncludesShadersStore[Zz]=Bce)});var Qz,Uce,ld=M(()=>{G();Qz="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 -`;A.IncludesShadersStore[qz]||(A.IncludesShadersStore[qz]=Mce)});var Zz,Cce,Qz=M(()=>{G();Zz="fresnelFunction",Cce=`#ifdef FRESNEL +`;A.IncludesShadersStore[Qz]||(A.IncludesShadersStore[Qz]=Uce)});var $z,Vce,Jz=M(()=>{G();$z="fresnelFunction",Vce=`#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 -`;A.IncludesShadersStore[Zz]||(A.IncludesShadersStore[Zz]=Cce)});var $z,yce,zg=M(()=>{G();$z="reflectionFunction",yce=`vec3 computeFixedEquirectangularCoords(vec4 worldPos,vec3 worldNormal,vec3 direction) +`;A.IncludesShadersStore[$z]||(A.IncludesShadersStore[$z]=Vce)});var e4,Gce,jg=M(()=>{G();e4="reflectionFunction",Gce=`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 -`;A.IncludesShadersStore[$z]||(A.IncludesShadersStore[$z]=yce)});var Jz,Pce,dR=M(()=>{G();Jz="imageProcessingDeclaration",Pce=`#ifdef EXPOSURE +`;A.IncludesShadersStore[e4]||(A.IncludesShadersStore[e4]=Gce)});var t4,kce,gR=M(()=>{G();t4="imageProcessingDeclaration",kce=`#ifdef EXPOSURE uniform float exposureLinear; #endif #ifdef CONTRAST @@ -8923,7 +8923,7 @@ uniform vec4 colorTransformSettings; #ifdef DITHER uniform float ditherIntensity; #endif -`;A.IncludesShadersStore[Jz]||(A.IncludesShadersStore[Jz]=Pce)});var e4,Lce,uR=M(()=>{G();e4="imageProcessingFunctions",Lce=`#if defined(COLORGRADING) && !defined(COLORGRADING3D) +`;A.IncludesShadersStore[t4]||(A.IncludesShadersStore[t4]=kce)});var i4,Wce,vR=M(()=>{G();i4="imageProcessingFunctions",Wce=`#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;}`;A.IncludesShadersStore[e4]||(A.IncludesShadersStore[e4]=Lce)});var t4,Dce,mR=M(()=>{G();t4="bumpFragmentMainFunctions",Dce=`#if defined(BUMP) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) || defined(DETAIL) +return result;}`;A.IncludesShadersStore[i4]||(A.IncludesShadersStore[i4]=Wce)});var r4,Hce,ER=M(()=>{G();r4="bumpFragmentMainFunctions",Hce=`#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 -`;A.IncludesShadersStore[t4]||(A.IncludesShadersStore[t4]=Dce)});var i4,Oce,pR=M(()=>{G();sd();i4="bumpFragmentFunctions",Oce=`#if defined(BUMP) +`;A.IncludesShadersStore[r4]||(A.IncludesShadersStore[r4]=Hce)});var n4,zce,SR=M(()=>{G();ld();n4="bumpFragmentFunctions",zce=`#if defined(BUMP) #include(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump,_SAMPLERNAME_,bump) #endif #if defined(DETAIL) @@ -9102,7 +9102,7 @@ return -texCoordOffset; #endif } #endif -`;A.IncludesShadersStore[i4]||(A.IncludesShadersStore[i4]=Oce)});var r4,Nce,_R=M(()=>{G();r4="bumpFragment",Nce=`vec2 uvOffset=vec2(0.0,0.0); +`;A.IncludesShadersStore[n4]||(A.IncludesShadersStore[n4]=zce)});var s4,Xce,TR=M(()=>{G();s4="bumpFragment",Xce=`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 -`;A.IncludesShadersStore[r4]||(A.IncludesShadersStore[r4]=Nce)});var n4,wce,pL=M(()=>{G();n4="decalFragment",wce=`#ifdef DECAL +`;A.IncludesShadersStore[s4]||(A.IncludesShadersStore[s4]=Xce)});var a4,Yce,EL=M(()=>{G();a4="decalFragment",Yce=`#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 -`;A.IncludesShadersStore[n4]||(A.IncludesShadersStore[n4]=wce)});var s4,Fce,gR=M(()=>{G();s4="depthPrePass",Fce=`#ifdef DEPTHPREPASS +`;A.IncludesShadersStore[a4]||(A.IncludesShadersStore[a4]=Yce)});var o4,Kce,AR=M(()=>{G();o4="depthPrePass",Kce=`#ifdef DEPTHPREPASS gl_FragColor=vec4(0.,0.,0.,1.0);return; #endif -`;A.IncludesShadersStore[s4]||(A.IncludesShadersStore[s4]=Fce)});var a4,Bce,_L=M(()=>{G();a4="lightFragment",Bce=`#ifdef LIGHT{X} +`;A.IncludesShadersStore[o4]||(A.IncludesShadersStore[o4]=Kce)});var l4,jce,SL=M(()=>{G();l4="lightFragment",jce=`#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 -`;A.IncludesShadersStore[a4]||(A.IncludesShadersStore[a4]=Bce)});var o4,Uce,vR=M(()=>{G();o4="logDepthFragment",Uce=`#ifdef LOGARITHMICDEPTH +`;A.IncludesShadersStore[l4]||(A.IncludesShadersStore[l4]=jce)});var c4,qce,xR=M(()=>{G();c4="logDepthFragment",qce=`#ifdef LOGARITHMICDEPTH gl_FragDepthEXT=log2(vFragmentDepth)*logarithmicDepthConstant*0.5; #endif -`;A.IncludesShadersStore[o4]||(A.IncludesShadersStore[o4]=Uce)});var l4,Vce,ER=M(()=>{G();l4="oitFragment",Vce=`#ifdef ORDER_INDEPENDENT_TRANSPARENCY +`;A.IncludesShadersStore[c4]||(A.IncludesShadersStore[c4]=qce)});var f4,Zce,RR=M(()=>{G();f4="oitFragment",Zce=`#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 && fragDepthGce});var gL,c4,Gce,h4=M(()=>{G();Vz();cL();oR();lR();Qm();La();cR();fR();Kz();hR();sd();Qz();zg();dR();uR();mR();pR();Tc();nd();Ng();Ac();_R();pL();gR();_L();vR();wg();ER();gL="defaultPixelShader",c4=`#define CUSTOM_FRAGMENT_EXTENSION +`;A.IncludesShadersStore[f4]||(A.IncludesShadersStore[f4]=Zce)});var d4={};tt(d4,{defaultPixelShader:()=>Qce});var TL,h4,Qce,u4=M(()=>{G();kz();uL();dR();uR();$m();La();mR();pR();qz();_R();ld();Jz();jg();gR();vR();ER();SR();xc();od();Ug();Rc();TR();EL();AR();SL();xR();Vg();RR();TL="defaultPixelShader",h4=`#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 } -`;A.ShadersStore[gL]||(A.ShadersStore[gL]=c4);Gce={name:gL,shader:c4}});var vL,EL,SL,TL,ke,xc=M(()=>{kt();Vt();lo();ys();zt();ki();vx();Ex();ng();kn();wa();Rg();zi();Oa();Df();eL();ll();bg();Gn();Rr();Sx();Tx();Ax();xx();vL={effect:null,subMesh:null},EL=class extends jm(Km(br)){},SL=class extends Xm(EL){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()}},TL=class extends qm(dl){},ke=class n extends TL{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 Fa(this),this._attachImageProcessingConfiguration(null),this.prePassConfiguration=new ws,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 SL(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),Xn.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),!Rf(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(()=>(BH(),FH)),Promise.resolve().then(()=>(lz(),oz))]):await Promise.all([Promise.resolve().then(()=>(Fz(),wz)),Promise.resolve().then(()=>(h4(),f4))]),this._shadersLoaded=!0}},o);if(this._eventInfo.customCode=void 0,E)if(this._onEffectCreatedObservable&&(vL.effect=E,vL.subMesh=t,this._onEffectCreatedObservable.notifyObservers(vL)),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),Xn.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);Ls(t,a),this._vertexPullingMetadata&&Nf(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),Un(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!==ei.FOGMODE_NONE||this._reflectionTexture||this._refractionTexture||t.receiveShadows||s.PREPASS||s.CLUSTLIGHT_BATCH)&&this.bindView(a),Af(r,t,a),s.NUM_MORPH_INFLUENCERS&&Vn(t,a),s.BAKED_VERTEX_ANIMATION_TEXTURE&&((f=t.bakedVertexAnimationManager)==null||f.bind(a,s.INSTANCES)),this.useLogarithmicDepth&&Tf(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([Er("ambient")],ke.prototype,"ambientColor",void 0);P([Er("diffuse")],ke.prototype,"diffuseColor",void 0);P([Er("specular")],ke.prototype,"specularColor",void 0);P([Er("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);ei.DefaultMaterialFactory=n=>new ke("default material",n)});var d4=M(()=>{to();Jn();bs();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 SR,u4=M(()=>{Pt();Vr();d4();SR=class n extends ve{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=ve.CLAMP_ADDRESSMODE,this.wrapV=ve.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()&&J.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 AR(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 _4(n,e,t,i){let r=Kr.Zero();return AL(n,e,t,r,i),r}function AL(n,e,t,i,r){if(!is)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 TR(n,e,t,i,r,s,a,o){let l=e(i,t.enableDistantPicking);return xL(n,t,i,l,r,s,a,o)}function xL(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 kce(n,e){return n==="InstancedLinesMesh"||n==="LinesMesh"?e.intersectionThreshold:0}function g4(n){let e=n.getClassName();if(e==="GreasedLineMesh")return{rawBoundingInfo:null,intersectionThreshold:0};let t=n.rawBoundingInfo;return{rawBoundingInfo:t,intersectionThreshold:t?kce(e,n):0}}function v4(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 RL(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=p4.internalPickerForMesh||TR,f=c===TR;for(let h=0;h>4);for(let S=0;S1&&n.cameraToUseForPointers!==n.activeCamera),a=n.cameraToUseForPointers||n.activeCamera,o=p4.internalPickerForMesh||TR,l=o===TR;for(let c=0;c>4);for(let T=0;T(n._tempPickingRay||(n._tempPickingRay=Kr.Zero()),Xg(n,e,t,o,n._tempPickingRay,s||null),n._tempPickingRay),i,r,!0);return a&&(a.ray=AR(n,e,t,j.Identity(),s||null)),a}function T4(n,e,t,i,r,s,a,o=!1){let l=RL(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=AR(n,e,t,j.Identity(),s||null)),l}function A4(n,e,t,i,r){let s=RL(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 x4(n,e,t,i,r,s){return E4(n,a=>AR(n,e,t,a,r||null),i,s)}function R4(n,e,t,i){return E4(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 m4(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=$.Vector3[2];s.set(0,0,n._scene.useRightHandedSystem?-1:1);let a=$.Vector3[3];return b.TransformNormalToRef(s,i,a),b.NormalizeToRef(a,e.direction),e}function b4(n,e){e&&(e.prototype.getForwardRay=function(t=100,i,r){return m4(this,new Kr(b.Zero(),b.Zero(),t),t,i,r)},e.prototype.getForwardRayToRef=function(t,i=100,r,s){return m4(this,t,i,r,s)}),n&&(Yh._IsPickingAvailable=!0,n.prototype.createPickingRay=function(t,i,r,s,a=!1){return AR(this,t,i,r,s,a)})}var p4,Kr,bL=M(()=>{On();Ge();Qo();Ky();sg();Ni();ey();p4={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 jh(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=$.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=$.Vector3[0],a=$.Vector3[1],o=$.Vector3[2],l=$.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(){ys();al();bL();bL();b4(ei,mt);ei.prototype.createPickingRayToRef=function(n,e,t,i,r,s=!1,a=!1){return Xg(this,n,e,t,i,r,s,a)};ei.prototype.createPickingRayInCameraSpace=function(n,e,t){return _4(this,n,e,t)};ei.prototype.createPickingRayInCameraSpaceToRef=function(n,e,t,i){return AL(this,n,e,t,i)};ei.prototype.pickWithBoundingInfo=function(n,e,t,i,r){return S4(this,n,e,t,i,r)};ei.prototype.pick=function(n,e,t,i,r,s,a=!1){return T4(this,n,e,t,i,r,s,a)};ei.prototype.pickWithRay=function(n,e,t,i){return A4(this,n,e,t,i)};ei.prototype.multiPick=function(n,e,t,i,r){return x4(this,n,e,t,i,r)};ei.prototype.multiPickWithRay=function(n,e,t){return R4(this,n,e,t)}});var I4,Wce,ML=M(()=>{G();I4="kernelBlurVaryingDeclaration",Wce="varying sampleCoord{X}: vec2f;";A.IncludesShadersStoreWGSL[I4]||(A.IncludesShadersStoreWGSL[I4]=Wce)});var M4,Hce,xR=M(()=>{G();M4="packingFunctions",Hce=`fn pack(depth: f32)->vec4f +`;A.ShadersStore[TL]||(A.ShadersStore[TL]=h4);Qce={name:TL,shader:h4}});var AL,xL,RL,bL,ke,bc=M(()=>{kt();Vt();co();Ps();zt();ki();xx();Rx();lg();Wn();wa();Cg();zi();Oa();Of();nL();fl();yg();kn();Rr();bx();Ix();Mx();Cx();AL={effect:null,subMesh:null},xL=class extends qm(jm(br)){},RL=class extends Ym(xL){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()}},bL=class extends Zm(ml){},ke=class n extends bL{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 Fa(this),this._attachImageProcessingConfiguration(null),this.prePassConfiguration=new Fs,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 RL(this._eventInfo.defineNames));let s=this.getScene(),a=t.materialDefines;if(this._isReadyForSubMesh(t))return!0;let o=s.getEngine();if(a._needNormals=ym(s,e,a,!0,this._maxSimultaneousLights,this._disableLighting),!Cm(s,e,this._maxSimultaneousLights,this._disableLighting))return!1;Dm(s,a);let l=this.needAlphaBlendingForMesh(e)&&this.getScene().useOrderIndependentTransparency;if(Nm(s,a,this.canRenderToMRT&&!l),Om(s,a,l),Yn.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),!bf(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(()=>(VH(),UH)),Promise.resolve().then(()=>(fz(),cz))]):await Promise.all([Promise.resolve().then(()=>(Uz(),Bz)),Promise.resolve().then(()=>(u4(),d4))]),this._shadersLoaded=!0}},o);if(this._eventInfo.customCode=void 0,E)if(this._onEffectCreatedObservable&&(AL.effect=E,AL.subMesh=t,this._onEffectCreatedObservable.notifyObservers(AL)),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),Fm(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),Yn.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);Ds(t,a),this._vertexPullingMetadata&&wf(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),Tm(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),Vn(a,this,r),this.bindEyePosition(a)}else r.getEngine()._features.needToAlwaysBindUniformBuffers&&(this._needToBindSceneUbo=!0);(l||!this.isFrozen)&&(r.lightsEnabled&&!this._disableLighting&&xm(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),xf(r,t,a),s.NUM_MORPH_INFLUENCERS&&Gn(t,a),s.BAKED_VERTEX_ANIMATION_TEXTURE&&((f=t.bakedVertexAnimationManager)==null||f.bind(a,s.INSTANCES)),this.useLogarithmicDepth&&Af(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([Sr("ambient")],ke.prototype,"ambientColor",void 0);P([Sr("diffuse")],ke.prototype,"diffuseColor",void 0);P([Sr("specular")],ke.prototype,"specularColor",void 0);P([Sr("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([im("diffuseFresnelParameters")],ke.prototype,"_diffuseFresnelParameters",void 0);P([le("_markAllSubMeshesAsFresnelDirty")],ke.prototype,"diffuseFresnelParameters",void 0);P([im("opacityFresnelParameters")],ke.prototype,"_opacityFresnelParameters",void 0);P([le("_markAllSubMeshesAsFresnelAndMiscDirty")],ke.prototype,"opacityFresnelParameters",void 0);P([im("reflectionFresnelParameters")],ke.prototype,"_reflectionFresnelParameters",void 0);P([le("_markAllSubMeshesAsFresnelDirty")],ke.prototype,"reflectionFresnelParameters",void 0);P([im("refractionFresnelParameters")],ke.prototype,"_refractionFresnelParameters",void 0);P([le("_markAllSubMeshesAsFresnelDirty")],ke.prototype,"refractionFresnelParameters",void 0);P([im("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 m4=M(()=>{io();es();Is();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 bR,p4=M(()=>{Pt();Gr();m4();bR=class n extends ve{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=ve.CLAMP_ADDRESSMODE,this.wrapV=ve.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()&&J.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 MR(n,e,t,i,r,s=!1){let a=jr.Zero();return qg(n,e,t,i,a,r,s),a}function qg(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 v4(n,e,t,i){let r=jr.Zero();return IL(n,e,t,r,i),r}function IL(n,e,t,i,r){if(!rs)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 IR(n,e,t,i,r,s,a,o){let l=e(i,t.enableDistantPicking);return ML(n,t,i,l,r,s,a,o)}function ML(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 $ce(n,e){return n==="InstancedLinesMesh"||n==="LinesMesh"?e.intersectionThreshold:0}function E4(n){let e=n.getClassName();if(e==="GreasedLineMesh")return{rawBoundingInfo:null,intersectionThreshold:0};let t=n.rawBoundingInfo;return{rawBoundingInfo:t,intersectionThreshold:t?$ce(e,n):0}}function S4(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 CL(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=g4.internalPickerForMesh||IR,f=c===IR;for(let h=0;h>4);for(let S=0;S1&&n.cameraToUseForPointers!==n.activeCamera),a=n.cameraToUseForPointers||n.activeCamera,o=g4.internalPickerForMesh||IR,l=o===IR;for(let c=0;c>4);for(let T=0;T(n._tempPickingRay||(n._tempPickingRay=jr.Zero()),qg(n,e,t,o,n._tempPickingRay,s||null),n._tempPickingRay),i,r,!0);return a&&(a.ray=MR(n,e,t,j.Identity(),s||null)),a}function x4(n,e,t,i,r,s,a,o=!1){let l=CL(n,(c,f)=>(n._tempPickingRay||(n._tempPickingRay=jr.Zero()),qg(n,e,t,c,n._tempPickingRay,s||null,!1,f),n._tempPickingRay),i,r,!1,a);return l&&(l.ray=MR(n,e,t,j.Identity(),s||null)),l}function R4(n,e,t,i,r){let s=CL(n,a=>(n._pickWithRayInverseMatrix||(n._pickWithRayInverseMatrix=j.Identity()),a.invertToRef(n._pickWithRayInverseMatrix),n._cachedRayForTransform||(n._cachedRayForTransform=jr.Zero()),jr.TransformToRef(e,n._pickWithRayInverseMatrix,n._cachedRayForTransform),n._cachedRayForTransform),t,i,!1,r);return s&&(s.ray=e),s}function b4(n,e,t,i,r,s){return T4(n,a=>MR(n,e,t,a,r||null),i,s)}function I4(n,e,t,i){return T4(n,r=>(n._pickWithRayInverseMatrix||(n._pickWithRayInverseMatrix=j.Identity()),r.invertToRef(n._pickWithRayInverseMatrix),n._cachedRayForTransform||(n._cachedRayForTransform=jr.Zero()),jr.TransformToRef(e,n._pickWithRayInverseMatrix,n._cachedRayForTransform),n._cachedRayForTransform),t,i)}function _4(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=$.Vector3[2];s.set(0,0,n._scene.useRightHandedSystem?-1:1);let a=$.Vector3[3];return b.TransformNormalToRef(s,i,a),b.NormalizeToRef(a,e.direction),e}function M4(n,e){e&&(e.prototype.getForwardRay=function(t=100,i,r){return _4(this,new jr(b.Zero(),b.Zero(),t),t,i,r)},e.prototype.getForwardRayToRef=function(t,i=100,r,s){return _4(this,t,i,r,s)}),n&&(qh._IsPickingAvailable=!0,n.prototype.createPickingRay=function(t,i,r,s,a=!1){return MR(this,t,i,r,s,a)})}var g4,jr,yL=M(()=>{Nn();Ge();Jo();Qy();cg();Ni();ny();g4={internalPickerForMesh:void 0},jr=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=$.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=$.Vector3[0],a=$.Vector3[1],o=$.Vector3[2],l=$.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(){Ps();ll();yL();yL();M4(Jt,mt);Jt.prototype.createPickingRayToRef=function(n,e,t,i,r,s=!1,a=!1){return qg(this,n,e,t,i,r,s,a)};Jt.prototype.createPickingRayInCameraSpace=function(n,e,t){return v4(this,n,e,t)};Jt.prototype.createPickingRayInCameraSpaceToRef=function(n,e,t,i){return IL(this,n,e,t,i)};Jt.prototype.pickWithBoundingInfo=function(n,e,t,i,r){return A4(this,n,e,t,i,r)};Jt.prototype.pick=function(n,e,t,i,r,s,a=!1){return x4(this,n,e,t,i,r,s,a)};Jt.prototype.pickWithRay=function(n,e,t,i){return R4(this,n,e,t,i)};Jt.prototype.multiPick=function(n,e,t,i,r){return b4(this,n,e,t,i,r)};Jt.prototype.multiPickWithRay=function(n,e,t){return I4(this,n,e,t)}});var C4,Jce,LL=M(()=>{G();C4="kernelBlurVaryingDeclaration",Jce="varying sampleCoord{X}: vec2f;";A.IncludesShadersStoreWGSL[C4]||(A.IncludesShadersStoreWGSL[C4]=Jce)});var y4,efe,CR=M(()=>{G();y4="packingFunctions",efe=`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);}`;A.IncludesShadersStoreWGSL[M4]||(A.IncludesShadersStoreWGSL[M4]=Hce)});var C4,zce,y4=M(()=>{G();C4="kernelBlurFragment",zce=`#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[y4]||(A.IncludesShadersStoreWGSL[y4]=efe)});var P4,tfe,L4=M(()=>{G();P4="kernelBlurFragment",tfe=`#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 -`;A.IncludesShadersStoreWGSL[C4]||(A.IncludesShadersStoreWGSL[C4]=zce)});var P4,Xce,L4=M(()=>{G();P4="kernelBlurFragment2",Xce=`#ifdef DOF +`;A.IncludesShadersStoreWGSL[P4]||(A.IncludesShadersStoreWGSL[P4]=tfe)});var D4,ife,O4=M(()=>{G();D4="kernelBlurFragment2",ife=`#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 -`;A.IncludesShadersStoreWGSL[P4]||(A.IncludesShadersStoreWGSL[P4]=Xce)});var O4={};tt(O4,{kernelBlurPixelShaderWGSL:()=>Yce});var CL,D4,Yce,N4=M(()=>{G();ML();xR();y4();L4();CL="kernelBlurPixelShader",D4=`var textureSamplerSampler: sampler;var textureSampler: texture_2d;uniform delta: vec2f;varying sampleCenter: vec2f; +`;A.IncludesShadersStoreWGSL[D4]||(A.IncludesShadersStoreWGSL[D4]=ife)});var w4={};tt(w4,{kernelBlurPixelShaderWGSL:()=>rfe});var DL,N4,rfe,F4=M(()=>{G();LL();CR();L4();O4();DL="kernelBlurPixelShader",N4=`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 -}`;A.ShadersStoreWGSL[CL]||(A.ShadersStoreWGSL[CL]=D4);Yce={name:CL,shader:D4}});var w4,Kce,F4=M(()=>{G();w4="kernelBlurVertex",Kce="vertexOutputs.sampleCoord{X}=vertexOutputs.sampleCenter+uniforms.delta*KERNEL_OFFSET{X};";A.IncludesShadersStoreWGSL[w4]||(A.IncludesShadersStoreWGSL[w4]=Kce)});var U4={};tt(U4,{kernelBlurVertexShaderWGSL:()=>jce});var yL,B4,jce,V4=M(()=>{G();ML();F4();yL="kernelBlurVertexShader",B4=`attribute position: vec2f;uniform delta: vec2f;varying sampleCenter: vec2f; +}`;A.ShadersStoreWGSL[DL]||(A.ShadersStoreWGSL[DL]=N4);rfe={name:DL,shader:N4}});var B4,nfe,U4=M(()=>{G();B4="kernelBlurVertex",nfe="vertexOutputs.sampleCoord{X}=vertexOutputs.sampleCenter+uniforms.delta*KERNEL_OFFSET{X};";A.IncludesShadersStoreWGSL[B4]||(A.IncludesShadersStoreWGSL[B4]=nfe)});var G4={};tt(G4,{kernelBlurVertexShaderWGSL:()=>sfe});var OL,V4,sfe,k4=M(()=>{G();LL();U4();OL="kernelBlurVertexShader",V4=`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 -}`;A.ShadersStoreWGSL[yL]||(A.ShadersStoreWGSL[yL]=B4);jce={name:yL,shader:B4}});var G4,qce,PL=M(()=>{G();G4="kernelBlurVaryingDeclaration",qce="varying vec2 sampleCoord{X};";A.IncludesShadersStore[G4]||(A.IncludesShadersStore[G4]=qce)});var k4,Zce,RR=M(()=>{G();k4="packingFunctions",Zce=`vec4 pack(float depth) +}`;A.ShadersStoreWGSL[OL]||(A.ShadersStoreWGSL[OL]=V4);sfe={name:OL,shader:V4}});var W4,afe,NL=M(()=>{G();W4="kernelBlurVaryingDeclaration",afe="varying vec2 sampleCoord{X};";A.IncludesShadersStore[W4]||(A.IncludesShadersStore[W4]=afe)});var H4,ofe,yR=M(()=>{G();H4="packingFunctions",ofe=`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);}`;A.IncludesShadersStore[k4]||(A.IncludesShadersStore[k4]=Zce)});var W4,Qce,H4=M(()=>{G();W4="kernelBlurFragment",Qce=`#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[H4]||(A.IncludesShadersStore[H4]=ofe)});var z4,lfe,X4=M(()=>{G();z4="kernelBlurFragment",lfe=`#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 -`;A.IncludesShadersStore[W4]||(A.IncludesShadersStore[W4]=Qce)});var z4,$ce,X4=M(()=>{G();z4="kernelBlurFragment2",$ce=`#ifdef DOF +`;A.IncludesShadersStore[z4]||(A.IncludesShadersStore[z4]=lfe)});var Y4,cfe,K4=M(()=>{G();Y4="kernelBlurFragment2",cfe=`#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 -`;A.IncludesShadersStore[z4]||(A.IncludesShadersStore[z4]=$ce)});var K4={};tt(K4,{kernelBlurPixelShader:()=>Jce});var LL,Y4,Jce,j4=M(()=>{G();PL();RR();H4();X4();LL="kernelBlurPixelShader",Y4=`uniform sampler2D textureSampler;uniform vec2 delta;varying vec2 sampleCenter; +`;A.IncludesShadersStore[Y4]||(A.IncludesShadersStore[Y4]=cfe)});var q4={};tt(q4,{kernelBlurPixelShader:()=>ffe});var wL,j4,ffe,Z4=M(()=>{G();NL();yR();X4();K4();wL="kernelBlurPixelShader",j4=`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 -}`;A.ShadersStore[LL]||(A.ShadersStore[LL]=Y4);Jce={name:LL,shader:Y4}});var q4,efe,Z4=M(()=>{G();q4="kernelBlurVertex",efe="sampleCoord{X}=sampleCenter+delta*KERNEL_OFFSET{X};";A.IncludesShadersStore[q4]||(A.IncludesShadersStore[q4]=efe)});var $4={};tt($4,{kernelBlurVertexShader:()=>tfe});var DL,Q4,tfe,J4=M(()=>{G();PL();Z4();DL="kernelBlurVertexShader",Q4=`attribute vec2 position;uniform vec2 delta;varying vec2 sampleCenter; +}`;A.ShadersStore[wL]||(A.ShadersStore[wL]=j4);ffe={name:wL,shader:j4}});var Q4,hfe,$4=M(()=>{G();Q4="kernelBlurVertex",hfe="sampleCoord{X}=sampleCenter+delta*KERNEL_OFFSET{X};";A.IncludesShadersStore[Q4]||(A.IncludesShadersStore[Q4]=hfe)});var eX={};tt(eX,{kernelBlurVertexShader:()=>dfe});var FL,J4,dfe,tX=M(()=>{G();NL();$4();FL="kernelBlurVertexShader",J4=`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 -}`;A.ShadersStore[DL]||(A.ShadersStore[DL]=Q4);tfe={name:DL,shader:Q4}});var ss,OL=M(()=>{kh();Ni();ss=class n extends Xr{_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.all([Promise.resolve().then(()=>(N4(),O4)),Promise.resolve().then(()=>(V4(),U4))]))):t.push(Promise.all([Promise.resolve().then(()=>(j4(),K4)),Promise.resolve().then(()=>(J4(),$4))]))}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(` +}`;A.ShadersStore[FL]||(A.ShadersStore[FL]=J4);dfe={name:FL,shader:J4}});var as,BL=M(()=>{zh();Ni();as=class n extends Yr{_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.all([Promise.resolve().then(()=>(F4(),w4)),Promise.resolve().then(()=>(k4(),G4))]))):t.push(Promise.all([Promise.resolve().then(()=>(Z4(),q4)),Promise.resolve().then(()=>(tX(),eX))]))}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+$/,"")}};ss.VertexUrl="kernelBlur";ss.FragmentUrl="kernelBlur";ss.Uniforms=["delta","direction"];ss.Samplers=["circleOfConfusionSampler"]});var Ba,NL=M(()=>{kt();ql();Vr();zi();Vt();Rr();OL();Ba=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=ve.BILINEAR_SAMPLINGMODE,o,l,c=0,f="",h=!1,d=5){let u=typeof r=="number"?h:!!r.blockCompilation,m={uniforms:ss.Uniforms,samplers:ss.Samplers,size:typeof r=="number"?r:void 0,camera:s,samplingMode:a,engine:o,reusable:l,textureType:c,vertexUrl:ss.VertexUrl,indexParameters:{varyingCount:0,depCount:0},textureFormat:d,defines:f,...r,blockCompilation:!0};super(e,ss.FragmentUrl,{effectWrapper:typeof r=="number"||!r.effectWrapper?new ss(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()],Ba.prototype,"direction",null);P([F()],Ba.prototype,"kernel",null);P([F()],Ba.prototype,"packedFloat",null);Ft("BABYLON.BlurPostProcess",Ba)});var eX,ife,tX=M(()=>{G();eX="bayerDitherFunctions",ife=`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+$/,"")}};as.VertexUrl="kernelBlur";as.FragmentUrl="kernelBlur";as.Uniforms=["delta","direction"];as.Samplers=["circleOfConfusionSampler"]});var Ba,UL=M(()=>{kt();Ql();Gr();zi();Vt();Rr();BL();Ba=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=ve.BILINEAR_SAMPLINGMODE,o,l,c=0,f="",h=!1,d=5){let u=typeof r=="number"?h:!!r.blockCompilation,m={uniforms:as.Uniforms,samplers:as.Samplers,size:typeof r=="number"?r:void 0,camera:s,samplingMode:a,engine:o,reusable:l,textureType:c,vertexUrl:as.VertexUrl,indexParameters:{varyingCount:0,depCount:0},textureFormat:d,defines:f,...r,blockCompilation:!0};super(e,as.FragmentUrl,{effectWrapper:typeof r=="number"||!r.effectWrapper?new as(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([rm()],Ba.prototype,"direction",null);P([F()],Ba.prototype,"kernel",null);P([F()],Ba.prototype,"packedFloat",null);Ft("BABYLON.BlurPostProcess",Ba)});var iX,ufe,rX=M(()=>{G();iX="bayerDitherFunctions",ufe=`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);} -`;A.IncludesShadersStoreWGSL[eX]||(A.IncludesShadersStoreWGSL[eX]=ife)});var iX,rfe,rX=M(()=>{G();xR();tX();iX="shadowMapFragmentExtraDeclaration",rfe=`#if SM_FLOAT==0 +`;A.IncludesShadersStoreWGSL[iX]||(A.IncludesShadersStoreWGSL[iX]=ufe)});var nX,mfe,sX=M(()=>{G();CR();rX();nX="shadowMapFragmentExtraDeclaration",mfe=`#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 -`;A.IncludesShadersStoreWGSL[iX]||(A.IncludesShadersStoreWGSL[iX]=rfe)});var nX,nfe,sX=M(()=>{G();nX="shadowMapFragment",nfe=`var depthSM: f32=fragmentInputs.vDepthMetricSM; +`;A.IncludesShadersStoreWGSL[nX]||(A.IncludesShadersStoreWGSL[nX]=mfe)});var aX,pfe,oX=M(()=>{G();aX="shadowMapFragment",pfe=`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 -`;A.IncludesShadersStoreWGSL[nX]||(A.IncludesShadersStoreWGSL[nX]=nfe)});var oX={};tt(oX,{shadowMapPixelShaderWGSL:()=>sfe});var wL,aX,sfe,lX=M(()=>{G();rX();dc();uc();sX();wL="shadowMapPixelShader",aX=`#include +`;A.IncludesShadersStoreWGSL[aX]||(A.IncludesShadersStoreWGSL[aX]=pfe)});var cX={};tt(cX,{shadowMapPixelShaderWGSL:()=>_fe});var VL,lX,_fe,fX=M(()=>{G();sX();mc();pc();oX();VL="shadowMapPixelShader",lX=`#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 -}`;A.ShadersStoreWGSL[wL]||(A.ShadersStoreWGSL[wL]=aX);sfe={name:wL,shader:aX}});var cX,afe,fX=M(()=>{G();cX="shadowMapVertexExtraDeclaration",afe=`#if SM_NORMALBIAS==1 +}`;A.ShadersStoreWGSL[VL]||(A.ShadersStoreWGSL[VL]=lX);_fe={name:VL,shader:lX}});var hX,gfe,dX=M(()=>{G();hX="shadowMapVertexExtraDeclaration",gfe=`#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 -`;A.IncludesShadersStoreWGSL[cX]||(A.IncludesShadersStoreWGSL[cX]=afe)});var hX,ofe,dX=M(()=>{G();hX="shadowMapVertexNormalBias",ofe=`#if SM_NORMALBIAS==1 +`;A.IncludesShadersStoreWGSL[hX]||(A.IncludesShadersStoreWGSL[hX]=gfe)});var uX,vfe,mX=M(()=>{G();uX="shadowMapVertexNormalBias",vfe=`#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 -`;A.IncludesShadersStoreWGSL[hX]||(A.IncludesShadersStoreWGSL[hX]=ofe)});var uX,lfe,mX=M(()=>{G();uX="shadowMapVertexMetric",lfe=`#if SM_USEDISTANCE==1 +`;A.IncludesShadersStoreWGSL[uX]||(A.IncludesShadersStoreWGSL[uX]=vfe)});var pX,Efe,_X=M(()=>{G();pX="shadowMapVertexMetric",Efe=`#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 -`;A.IncludesShadersStoreWGSL[uX]||(A.IncludesShadersStoreWGSL[uX]=lfe)});var _X={};tt(_X,{shadowMapVertexShaderWGSL:()=>cfe});var FL,pX,cfe,gX=M(()=>{G();sc();ac();Uf();Vf();Pa();ed();kg();fX();oc();Gf();kf();lc();cc();fc();dX();mX();hc();FL="shadowMapVertexShader",pX=`attribute position: vec3f; +`;A.IncludesShadersStoreWGSL[pX]||(A.IncludesShadersStoreWGSL[pX]=Efe)});var vX={};tt(vX,{shadowMapVertexShaderWGSL:()=>Sfe});var GL,gX,Sfe,EX=M(()=>{G();oc();lc();Vf();Gf();Pa();rd();Xg();dX();cc();kf();Wf();fc();hc();dc();mX();_X();uc();GL="shadowMapVertexShader",gX=`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 -}`;A.ShadersStoreWGSL[FL]||(A.ShadersStoreWGSL[FL]=pX);cfe={name:FL,shader:pX}});var EX={};tt(EX,{depthBoxBlurPixelShaderWGSL:()=>ffe});var BL,vX,ffe,SX=M(()=>{G();BL="depthBoxBlurPixelShader",vX=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_2d;uniform screenSize: vec2f; +}`;A.ShadersStoreWGSL[GL]||(A.ShadersStoreWGSL[GL]=gX);Sfe={name:GL,shader:gX}});var TX={};tt(TX,{depthBoxBlurPixelShaderWGSL:()=>Tfe});var kL,SX,Tfe,AX=M(()=>{G();kL="depthBoxBlurPixelShader",SX=`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)));}`;A.ShadersStoreWGSL[BL]||(A.ShadersStoreWGSL[BL]=vX);ffe={name:BL,shader:vX}});var AX={};tt(AX,{shadowMapFragmentSoftTransparentShadowWGSL:()=>hfe});var UL,TX,hfe,xX=M(()=>{G();UL="shadowMapFragmentSoftTransparentShadow",TX=`#if SM_SOFTTRANSPARENTSHADOW==1 +fragmentOutputs.color=(colorDepth/ f32((OFFSET*2+1)*(OFFSET*2+1)));}`;A.ShadersStoreWGSL[kL]||(A.ShadersStoreWGSL[kL]=SX);Tfe={name:kL,shader:SX}});var RX={};tt(RX,{shadowMapFragmentSoftTransparentShadowWGSL:()=>Afe});var WL,xX,Afe,bX=M(()=>{G();WL="shadowMapFragmentSoftTransparentShadow",xX=`#if SM_SOFTTRANSPARENTSHADOW==1 if ((bayerDither8(floor(((fragmentInputs.position.xy)%(8.0)))))/64.0>=uniforms.softTransparentShadowSM.x*alpha) {discard;} #endif -`;A.IncludesShadersStoreWGSL[UL]||(A.IncludesShadersStoreWGSL[UL]=TX);hfe={name:UL,shader:TX}});var RX,dfe,bX=M(()=>{G();RX="bayerDitherFunctions",dfe=`float bayerDither2(vec2 _P) {return mod(2.0*_P.y+_P.x+1.0,4.0);} +`;A.IncludesShadersStoreWGSL[WL]||(A.IncludesShadersStoreWGSL[WL]=xX);Afe={name:WL,shader:xX}});var IX,xfe,MX=M(()=>{G();IX="bayerDitherFunctions",xfe=`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);} -`;A.IncludesShadersStore[RX]||(A.IncludesShadersStore[RX]=dfe)});var IX,ufe,MX=M(()=>{G();RR();bX();IX="shadowMapFragmentExtraDeclaration",ufe=`#if SM_FLOAT==0 +`;A.IncludesShadersStore[IX]||(A.IncludesShadersStore[IX]=xfe)});var CX,Rfe,yX=M(()=>{G();yR();MX();CX="shadowMapFragmentExtraDeclaration",Rfe=`#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 -`;A.IncludesShadersStore[IX]||(A.IncludesShadersStore[IX]=ufe)});var CX,mfe,yX=M(()=>{G();CX="shadowMapFragment",mfe=`float depthSM=vDepthMetricSM; +`;A.IncludesShadersStore[CX]||(A.IncludesShadersStore[CX]=Rfe)});var PX,bfe,LX=M(()=>{G();PX="shadowMapFragment",bfe=`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;`;A.IncludesShadersStore[CX]||(A.IncludesShadersStore[CX]=mfe)});var LX={};tt(LX,{shadowMapPixelShader:()=>pfe});var VL,PX,pfe,DX=M(()=>{G();MX();Tc();Ac();yX();VL="shadowMapPixelShader",PX=`#include +return;`;A.IncludesShadersStore[PX]||(A.IncludesShadersStore[PX]=bfe)});var OX={};tt(OX,{shadowMapPixelShader:()=>Ife});var HL,DX,Ife,NX=M(()=>{G();yX();xc();Rc();LX();HL="shadowMapPixelShader",DX=`#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 -}`;A.ShadersStore[VL]||(A.ShadersStore[VL]=PX);pfe={name:VL,shader:PX}});var OX,_fe,GL=M(()=>{G();OX="sceneVertexDeclaration",_fe=`uniform mat4 viewProjection; +}`;A.ShadersStore[HL]||(A.ShadersStore[HL]=DX);Ife={name:HL,shader:DX}});var wX,Mfe,zL=M(()=>{G();wX="sceneVertexDeclaration",Mfe=`uniform mat4 viewProjection; #ifdef MULTIVIEW uniform mat4 viewProjectionR; #endif uniform mat4 view;uniform mat4 projection;uniform vec4 vEyePosition; -`;A.IncludesShadersStore[OX]||(A.IncludesShadersStore[OX]=_fe)});var NX,gfe,wX=M(()=>{G();NX="meshVertexDeclaration",gfe=`uniform mat4 world;uniform float visibility; -`;A.IncludesShadersStore[NX]||(A.IncludesShadersStore[NX]=gfe)});var FX,vfe,BX=M(()=>{G();GL();wX();FX="shadowMapVertexDeclaration",vfe=`#include +`;A.IncludesShadersStore[wX]||(A.IncludesShadersStore[wX]=Mfe)});var FX,Cfe,BX=M(()=>{G();FX="meshVertexDeclaration",Cfe=`uniform mat4 world;uniform float visibility; +`;A.IncludesShadersStore[FX]||(A.IncludesShadersStore[FX]=Cfe)});var UX,yfe,VX=M(()=>{G();zL();BX();UX="shadowMapVertexDeclaration",yfe=`#include #include -`;A.IncludesShadersStore[FX]||(A.IncludesShadersStore[FX]=vfe)});var UX,Efe,VX=M(()=>{G();rd();Hg();UX="shadowMapUboDeclaration",Efe=`layout(std140,column_major) uniform; +`;A.IncludesShadersStore[UX]||(A.IncludesShadersStore[UX]=yfe)});var GX,Pfe,kX=M(()=>{G();ad();Kg();GX="shadowMapUboDeclaration",Pfe=`layout(std140,column_major) uniform; #include #include -`;A.IncludesShadersStore[UX]||(A.IncludesShadersStore[UX]=Efe)});var GX,Sfe,kX=M(()=>{G();GX="shadowMapVertexExtraDeclaration",Sfe=`#if SM_NORMALBIAS==1 +`;A.IncludesShadersStore[GX]||(A.IncludesShadersStore[GX]=Pfe)});var WX,Lfe,HX=M(()=>{G();WX="shadowMapVertexExtraDeclaration",Lfe=`#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 -`;A.IncludesShadersStore[GX]||(A.IncludesShadersStore[GX]=Sfe)});var WX,Tfe,HX=M(()=>{G();WX="shadowMapVertexNormalBias",Tfe=`#if SM_NORMALBIAS==1 +`;A.IncludesShadersStore[WX]||(A.IncludesShadersStore[WX]=Lfe)});var zX,Dfe,XX=M(()=>{G();zX="shadowMapVertexNormalBias",Dfe=`#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 -`;A.IncludesShadersStore[WX]||(A.IncludesShadersStore[WX]=Tfe)});var zX,Afe,XX=M(()=>{G();zX="shadowMapVertexMetric",Afe=`#if SM_USEDISTANCE==1 +`;A.IncludesShadersStore[zX]||(A.IncludesShadersStore[zX]=Dfe)});var YX,Ofe,KX=M(()=>{G();YX="shadowMapVertexMetric",Ofe=`#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 -`;A.IncludesShadersStore[zX]||(A.IncludesShadersStore[zX]=Afe)});var KX={};tt(KX,{shadowMapVertexShader:()=>xfe});var kL,YX,xfe,jX=M(()=>{G();mc();pc();Wf();Hf();La();BX();VX();kX();_c();zf();Xf();gc();vc();Ec();HX();XX();Sc();kL="shadowMapVertexShader",YX=`attribute vec3 position; +`;A.IncludesShadersStore[YX]||(A.IncludesShadersStore[YX]=Ofe)});var qX={};tt(qX,{shadowMapVertexShader:()=>Nfe});var XL,jX,Nfe,ZX=M(()=>{G();_c();gc();Hf();zf();La();VX();kX();HX();vc();Xf();Yf();Ec();Sc();Tc();XX();KX();Ac();XL="shadowMapVertexShader",jX=`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 -}`;A.ShadersStore[kL]||(A.ShadersStore[kL]=YX);xfe={name:kL,shader:YX}});var ZX={};tt(ZX,{depthBoxBlurPixelShader:()=>Rfe});var WL,qX,Rfe,QX=M(()=>{G();WL="depthBoxBlurPixelShader",qX=`varying vec2 vUV;uniform sampler2D textureSampler;uniform vec2 screenSize; +}`;A.ShadersStore[XL]||(A.ShadersStore[XL]=jX);Nfe={name:XL,shader:jX}});var $X={};tt($X,{depthBoxBlurPixelShader:()=>wfe});var YL,QX,wfe,JX=M(()=>{G();YL="depthBoxBlurPixelShader",QX=`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)));}`;A.ShadersStore[WL]||(A.ShadersStore[WL]=qX);Rfe={name:WL,shader:qX}});var JX={};tt(JX,{shadowMapFragmentSoftTransparentShadow:()=>bfe});var HL,$X,bfe,e5=M(()=>{G();HL="shadowMapFragmentSoftTransparentShadow",$X=`#if SM_SOFTTRANSPARENTSHADOW==1 +colorDepth+=texture2D(textureSampler,vUV+vec2(x,y)/screenSize);gl_FragColor=(colorDepth/float((OFFSET*2+1)*(OFFSET*2+1)));}`;A.ShadersStore[YL]||(A.ShadersStore[YL]=QX);wfe={name:YL,shader:QX}});var t5={};tt(t5,{shadowMapFragmentSoftTransparentShadow:()=>Ffe});var KL,e5,Ffe,i5=M(()=>{G();KL="shadowMapFragmentSoftTransparentShadow",e5=`#if SM_SOFTTRANSPARENTSHADOW==1 if ((bayerDither8(floor(mod(gl_FragCoord.xy,8.0))))/64.0>=softTransparentShadowSM.x*alpha) discard; #endif -`;A.IncludesShadersStore[HL]||(A.IncludesShadersStore[HL]=$X);bfe={name:HL,shader:$X}});var Pi,bR=M(()=>{Ge();zt();ki();Pf();Vr();gf();ql();NL();di();hn();Df();TA();Gh();ll();Gn();lg();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=ve.CLAMP_ADDRESSMODE,this._shadowMap.wrapV=ve.CLAMP_ADDRESSMODE,this._shadowMap.anisotropicFilteringLevel=1,this._shadowMap.updateSamplingMode(ve.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(),Ca.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),Ca.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=xa.MIN_RENDERINGGROUPS;r(lX(),oX)),Promise.resolve().then(()=>(gX(),_X)),Promise.resolve().then(()=>(SX(),EX)),Promise.resolve().then(()=>(xX(),AX))])):await Promise.all([Promise.resolve().then(()=>(DX(),LX)),Promise.resolve().then(()=>(jX(),KX)),Promise.resolve().then(()=>(QX(),ZX)),Promise.resolve().then(()=>(e5(),JX))]),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=ve.CLAMP_ADDRESSMODE,this._shadowMap2.wrapV=ve.CLAMP_ADDRESSMODE,this._shadowMap2.updateSamplingMode(ve.BILINEAR_SAMPLINGMODE)),this.useKernelBlur?(this._kernelBlurXPostprocess=new Ba(this._light.name+"KernelBlurX",new Fe(1,0),this.blurKernel,1,null,ve.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 Ba(this._light.name+"KernelBlurY",new Fe(0,1),this.blurKernel,1,null,ve.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,ve.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(ve.NEAREST_SAMPLINGMODE):this._shadowMap.updateSamplingMode(ve.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(D.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=[D.PositionKind],d=e.getMesh(),u=!1,m=!1,p=!1,_=!1;this.normalBias&&d.isVerticesDataPresent(D.NormalKind)&&(h.push(D.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(D.UVKind)&&(h.push(D.UVKind),a.push("#define UV1"),m=!0),d.isVerticesDataPresent(D.UV2Kind)&&this._opacityTexture.coordinatesIndex===1&&(h.push(D.UV2Kind),a.push("#define UV2"),p=!0)}let v=new zn;if(d.useBones&&d.computeBonesUsingShaders&&d.skeleton){h.push(D.MatricesIndicesKind),h.push(D.MatricesWeightsKind),d.numBoneInfluencers>4&&(h.push(D.MatricesIndicesExtraKind),h.push(D.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(Bn(R),this.customShaderOptions){if(S=this.customShaderOptions.shaderName,this.customShaderOptions.attributes)for(let L of this.customShaderOptions.attributes)h.indexOf(L)===-1&&h.push(L);if(this.customShaderOptions.uniforms)for(let L of this.customShaderOptions.uniforms)R.indexOf(L)===-1&&R.push(L);if(this.customShaderOptions.samplers)for(let L of this.customShaderOptions.samplers)I.indexOf(L)===-1&&I.push(L)}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?$C(l,this._viewMatrix,this._projectionMatrix,$.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 qe("ShadowGeneratorSceneComponent")}});var i5={};tt(i5,{depthPixelShader:()=>Ife});var zL,t5,Ife,XL=M(()=>{G();Tc();RR();Ac();zL="depthPixelShader",t5=`#ifdef ALPHATEST +`;A.IncludesShadersStore[KL]||(A.IncludesShadersStore[KL]=e5);Ffe={name:KL,shader:e5}});var Pi,PR=M(()=>{Ge();zt();ki();Lf();Gr();vf();Ql();UL();di();hn();Of();IA();Hh();fl();kn();dg();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 kr(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 kr(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=ve.CLAMP_ADDRESSMODE,this._shadowMap.wrapV=ve.CLAMP_ADDRESSMODE,this._shadowMap.anisotropicFilteringLevel=1,this._shadowMap.updateSamplingMode(ve.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(),Ca.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),Ca.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=xa.MIN_RENDERINGGROUPS;r(fX(),cX)),Promise.resolve().then(()=>(EX(),vX)),Promise.resolve().then(()=>(AX(),TX)),Promise.resolve().then(()=>(bX(),RX))])):await Promise.all([Promise.resolve().then(()=>(NX(),OX)),Promise.resolve().then(()=>(ZX(),qX)),Promise.resolve().then(()=>(JX(),$X)),Promise.resolve().then(()=>(i5(),t5))]),this._shadersLoaded=!0}_initializeBlurRTTAndPostProcesses(){let e=this._scene.getEngine(),t=this._mapSize/this.blurScale;(!this.useKernelBlur||this.blurScale!==1)&&(this._shadowMap2=new kr(this._light.name+"_shadowMap2",t,this._scene,!1,!0,this._textureType,void 0,void 0,!1),this._shadowMap2.wrapU=ve.CLAMP_ADDRESSMODE,this._shadowMap2.wrapV=ve.CLAMP_ADDRESSMODE,this._shadowMap2.updateSamplingMode(ve.BILINEAR_SAMPLINGMODE)),this.useKernelBlur?(this._kernelBlurXPostprocess=new Ba(this._light.name+"KernelBlurX",new Fe(1,0),this.blurKernel,1,null,ve.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 Ba(this._light.name+"KernelBlurY",new Fe(0,1),this.blurKernel,1,null,ve.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,ve.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(ve.NEAREST_SAMPLINGMODE):this._shadowMap.updateSamplingMode(ve.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(D.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=[D.PositionKind],d=e.getMesh(),u=!1,m=!1,p=!1,_=!1;this.normalBias&&d.isVerticesDataPresent(D.NormalKind)&&(h.push(D.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(D.UVKind)&&(h.push(D.UVKind),a.push("#define UV1"),m=!0),d.isVerticesDataPresent(D.UV2Kind)&&this._opacityTexture.coordinatesIndex===1&&(h.push(D.UV2Kind),a.push("#define UV2"),p=!0)}let v=new Xn;if(d.useBones&&d.computeBonesUsingShaders&&d.skeleton){h.push(D.MatricesIndicesKind),h.push(D.MatricesWeightsKind),d.numBoneInfluencers>4&&(h.push(D.MatricesIndicesExtraKind),h.push(D.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?hl(d.morphTargetManager,a,h,d,!0,u,!1,m,p,_):0;if(cl(r,this._scene,a),t&&(a.push("#define INSTANCES"),vo(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(Un(R),this.customShaderOptions){if(S=this.customShaderOptions.shaderName,this.customShaderOptions.attributes)for(let L of this.customShaderOptions.attributes)h.indexOf(L)===-1&&h.push(L);if(this.customShaderOptions.uniforms)for(let L of this.customShaderOptions.uniforms)R.indexOf(L)===-1&&R.push(L);if(this.customShaderOptions.samplers)for(let L of this.customShaderOptions.samplers)I.indexOf(L)===-1&&I.push(L)}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?iy(l,this._viewMatrix,this._projectionMatrix,$.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 qe("ShadowGeneratorSceneComponent")}});var n5={};tt(n5,{depthPixelShader:()=>Bfe});var jL,r5,Bfe,qL=M(()=>{G();xc();yR();Rc();jL="depthPixelShader",r5=`#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 -}`;A.ShadersStore[zL]||(A.ShadersStore[zL]=t5);Ife={name:zL,shader:t5}});var r5,Mfe,n5=M(()=>{G();r5="pointCloudVertexDeclaration",Mfe=`#ifdef POINTSIZE +}`;A.ShadersStore[jL]||(A.ShadersStore[jL]=r5);Bfe={name:jL,shader:r5}});var s5,Ufe,a5=M(()=>{G();s5="pointCloudVertexDeclaration",Ufe=`#ifdef POINTSIZE uniform float pointSize; #endif -`;A.IncludesShadersStore[r5]||(A.IncludesShadersStore[r5]=Mfe)});var a5={};tt(a5,{depthVertexShader:()=>Cfe});var YL,s5,Cfe,KL=M(()=>{G();mc();pc();Wf();Hf();_c();Ff();n5();zf();Xf();gc();vc();Ec();Sc();hL();YL="depthVertexShader",s5=`attribute vec3 position; +`;A.IncludesShadersStore[s5]||(A.IncludesShadersStore[s5]=Ufe)});var l5={};tt(l5,{depthVertexShader:()=>Vfe});var ZL,o5,Vfe,QL=M(()=>{G();_c();gc();Hf();zf();vc();Bf();a5();Xf();Yf();Ec();Sc();Tc();Ac();pL();ZL="depthVertexShader",o5=`attribute vec3 position; #include #include #include @@ -10563,7 +10563,7 @@ vUV=vec2(diffuseMatrix*vec4(uv2Updated,1.0,0.0)); #endif #include } -`;A.ShadersStore[YL]||(A.ShadersStore[YL]=s5);Cfe={name:YL,shader:s5}});var l5={};tt(l5,{depthVertexShaderWGSL:()=>yfe});var jL,o5,yfe,c5=M(()=>{G();sc();ac();Uf();Vf();oc();wf();Gf();kf();lc();cc();fc();hc();jL="depthVertexShader",o5=`attribute position: vec3f; +`;A.ShadersStore[ZL]||(A.ShadersStore[ZL]=o5);Vfe={name:ZL,shader:o5}});var f5={};tt(f5,{depthVertexShaderWGSL:()=>Gfe});var $L,c5,Gfe,h5=M(()=>{G();oc();lc();Vf();Gf();cc();Ff();kf();Wf();fc();hc();dc();uc();$L="depthVertexShader",c5=`attribute position: vec3f; #include #include #include @@ -10619,7 +10619,7 @@ vertexOutputs.vUV= (uniforms.diffuseMatrix* vec4f(uv2Updated,1.0,0.0)).xy; #endif #endif } -`;A.ShadersStoreWGSL[jL]||(A.ShadersStoreWGSL[jL]=o5);yfe={name:jL,shader:o5}});var h5={};tt(h5,{depthPixelShaderWGSL:()=>Pfe});var qL,f5,Pfe,d5=M(()=>{G();dc();xR();uc();qL="depthPixelShader",f5=`#ifdef ALPHATEST +`;A.ShadersStoreWGSL[$L]||(A.ShadersStoreWGSL[$L]=c5);Gfe={name:$L,shader:c5}});var u5={};tt(u5,{depthPixelShaderWGSL:()=>kfe});var JL,d5,kfe,m5=M(()=>{G();mc();CR();pc();JL="depthPixelShader",d5=`#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 -}`;A.ShadersStoreWGSL[qL]||(A.ShadersStoreWGSL[qL]=f5);Pfe={name:qL,shader:f5}});var $m,u5=M(()=>{zt();ki();Vr();gf();al();XL();KL();hn();ll();Gn();Df();$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=ve.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!==ve.NEAREST_SAMPLINGMODE&&(t===1&&!c._caps.textureFloatLinearFiltering&&(s=ve.NEAREST_SAMPLINGMODE),t===2&&!c._caps.textureHalfFloatLinearFiltering&&(s=ve.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=ve.CLAMP_ADDRESSMODE,this._depthMap.wrapV=ve.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],L=d._getDrawWrapper();!L&&y&&(L=y._getDrawWrapper());let O=R.mode===mt.ORTHOGRAPHIC_CAMERA;if(!L)return;let V=L.effect;_.enableEffect(L),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 w,N;if(O?(w=!_.useReverseDepthBuffer&&_.isNDCHalfZRange?0:1,N=_.useReverseDepthBuffer&&_.isNDCHalfZRange?0:1):(w=_.useReverseDepthBuffer&&_.isNDCHalfZRange?R.minZ:_.isNDCHalfZRange?0:R.minZ,N=_.useReverseDepthBuffer&&_.isNDCHalfZRange?0:R.maxZ),V.setFloat2("depthValues",w,w+N),!y){if(g.needAlphaTestingForMesh(m)){let H=g.getAlphaTestTexture();H&&(V.setTexture("diffuseSampler",H),V.setMatrix("diffuseMatrix",H.getTextureMatrix()))}Ls(u,V),Un(V,g,p),Vn(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,H)=>V.setMatrix("world",H))}};this._depthMap.customRenderFunction=(d,u,m,p)=>{let _=this._scene.getEngine(),g=_.getAlphaMode(),v;if(p.length)for(v=0;v(c5(),l5)),Promise.resolve().then(()=>(d5(),h5))])):await Promise.all([Promise.resolve().then(()=>(KL(),a5)),Promise.resolve().then(()=>(XL(),i5))]),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=[D.PositionKind],h=!1,d=!1,u=!1;l.needAlphaTestingForMesh(r)&&l.getAlphaTestTexture()&&(c.push("#define ALPHATEST"),r.isVerticesDataPresent(D.UVKind)&&(f.push(D.UVKind),c.push("#define UV1"),h=!0),r.isVerticesDataPresent(D.UV2Kind)&&(f.push(D.UV2Kind),c.push("#define UV2"),d=!0));let m=new zn;if(r.useBones&&r.computeBonesUsingShaders&&r.skeleton){f.push(D.MatricesIndicesKind),f.push(D.MatricesWeightsKind),r.numBoneInfluencers>4&&(f.push(D.MatricesIndicesExtraKind),f.push(D.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"];Bn(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 qe("DepthRendererSceneComponent")}});var p5={};tt(p5,{minmaxReduxPixelShaderWGSL:()=>Lfe});var ZL,m5,Lfe,QL=M(()=>{G();ZL="minmaxReduxPixelShader",m5=`varying vUV: vec2f;var textureSampler: texture_2d; +}`;A.ShadersStoreWGSL[JL]||(A.ShadersStoreWGSL[JL]=d5);kfe={name:JL,shader:d5}});var Jm,p5=M(()=>{zt();ki();Gr();vf();ll();qL();QL();hn();fl();kn();Of();Jm=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=ve.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!==ve.NEAREST_SAMPLINGMODE&&(t===1&&!c._caps.textureFloatLinearFiltering&&(s=ve.NEAREST_SAMPLINGMODE),t===2&&!c._caps.textureHalfFloatLinearFiltering&&(s=ve.NEAREST_SAMPLINGMODE));let f=this.isPacked||!c._features.supportExtendedTextureFormats?5:6;this._depthMap=l!=null?l:new kr(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=ve.CLAMP_ADDRESSMODE,this._depthMap.wrapV=ve.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],L=d._getDrawWrapper();!L&&y&&(L=y._getDrawWrapper());let O=R.mode===mt.ORTHOGRAPHIC_CAMERA;if(!L)return;let V=L.effect;_.enableEffect(L),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 w,N;if(O?(w=!_.useReverseDepthBuffer&&_.isNDCHalfZRange?0:1,N=_.useReverseDepthBuffer&&_.isNDCHalfZRange?0:1):(w=_.useReverseDepthBuffer&&_.isNDCHalfZRange?R.minZ:_.isNDCHalfZRange?0:R.minZ,N=_.useReverseDepthBuffer&&_.isNDCHalfZRange?0:R.maxZ),V.setFloat2("depthValues",w,w+N),!y){if(g.needAlphaTestingForMesh(m)){let H=g.getAlphaTestTexture();H&&(V.setTexture("diffuseSampler",H),V.setMatrix("diffuseMatrix",H.getTextureMatrix()))}Ds(u,V),Vn(V,g,p),Gn(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,H)=>V.setMatrix("world",H))}};this._depthMap.customRenderFunction=(d,u,m,p)=>{let _=this._scene.getEngine(),g=_.getAlphaMode(),v;if(p.length)for(v=0;v(h5(),f5)),Promise.resolve().then(()=>(m5(),u5))])):await Promise.all([Promise.resolve().then(()=>(QL(),l5)),Promise.resolve().then(()=>(qL(),n5))]),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=[D.PositionKind],h=!1,d=!1,u=!1;l.needAlphaTestingForMesh(r)&&l.getAlphaTestTexture()&&(c.push("#define ALPHATEST"),r.isVerticesDataPresent(D.UVKind)&&(f.push(D.UVKind),c.push("#define UV1"),h=!0),r.isVerticesDataPresent(D.UV2Kind)&&(f.push(D.UV2Kind),c.push("#define UV2"),d=!0));let m=new Xn;if(r.useBones&&r.computeBonesUsingShaders&&r.skeleton){f.push(D.MatricesIndicesKind),f.push(D.MatricesWeightsKind),r.numBoneInfluencers>4&&(f.push(D.MatricesIndicesExtraKind),f.push(D.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?hl(r.morphTargetManager,c,f,r,!0,!1,!1,h,d,u):0;l.pointsCloud&&c.push("#define POINTSIZE"),t&&(c.push("#define INSTANCES"),vo(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"),cl(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"];Un(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]}}};Jm.ForceGLSL=!1;Jm._SceneComponentInitialization=n=>{throw qe("DepthRendererSceneComponent")}});var g5={};tt(g5,{minmaxReduxPixelShaderWGSL:()=>Wfe});var eD,_5,Wfe,tD=M(()=>{G();eD="minmaxReduxPixelShader",_5=`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 -`;A.ShadersStoreWGSL[ZL]||(A.ShadersStoreWGSL[ZL]=m5);Lfe={name:ZL,shader:m5}});var g5={};tt(g5,{minmaxReduxPixelShader:()=>Dfe});var $L,_5,Dfe,JL=M(()=>{G();$L="minmaxReduxPixelShader",_5=`varying vec2 vUV;uniform sampler2D textureSampler; +`;A.ShadersStoreWGSL[eD]||(A.ShadersStoreWGSL[eD]=_5);Wfe={name:eD,shader:_5}});var E5={};tt(E5,{minmaxReduxPixelShader:()=>Hfe});var iD,v5,Hfe,rD=M(()=>{G();iD="minmaxReduxPixelShader",v5=`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 -`;A.ShadersStore[$L]||(A.ShadersStore[$L]=_5);Dfe={name:$L,shader:_5}});var v5,Yf,Ofe,Nfe,Ao,IR,E5=M(()=>{di();kh();Ni();(function(n){n[n.NormalizedViewDepth=0]="NormalizedViewDepth",n[n.ViewDepth=1]="ViewDepth",n[n.ScreenDepth=2]="ScreenDepth"})(v5||(v5={}));Yf=class n extends Xr{_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.resolve().then(()=>(QL(),p5)))):t.push(Promise.resolve().then(()=>(JL(),g5)))}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)}};Yf.FragmentUrl="minmaxRedux";Yf.Uniforms=["texSize"];Ofe=new Float32Array(4),Nfe=new Uint8Array(4),Ao={min:0,max:0},IR=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?Ofe:Nfe;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;t{di();zh();Ni();(function(n){n[n.NormalizedViewDepth=0]="NormalizedViewDepth",n[n.ViewDepth=1]="ViewDepth",n[n.ScreenDepth=2]="ScreenDepth"})(S5||(S5={}));Kf=class n extends Yr{_gatherImports(e,t){e?(this._webGPUReady=!0,t.push(Promise.resolve().then(()=>(tD(),g5)))):t.push(Promise.resolve().then(()=>(rD(),E5)))}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)}};Kf.FragmentUrl="minmaxRedux";Kf.Uniforms=["texSize"];zfe=new Float32Array(4),Xfe=new Uint8Array(4),xo={min:0,max:0},LR=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?zfe:Xfe;this._scene.getEngine()._readTexturePixels(e,1,1,-1,0,i,!1),xo.min=i[0],xo.max=i[1],t||(xo.min=xo.min/255,xo.max=xo.max/255),xo.min>=xo.max&&(xo.min=0,xo.max=1),this.onAfterReductionPerformed.notifyObservers(xo)}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 Yf("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 MR,S5=M(()=>{ql();EA();E5();JL();QL();MR=class{get onAfterReductionPerformed(){return this._thinMinMaxReducer.onAfterReductionPerformed}constructor(e){this._onAfterUnbindObserver=null,this._forceFullscreenViewport=!0,this._activated=!1,this._camera=e,this._postProcessManager=new jl(e.getScene()),this._thinMinMaxReducer=new IR(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{u5();S5();CR=class extends MR{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 A5,wfe,Ir,Jm,yR,xo,x5=M(()=>{Ge();gf();hn();bR();_m();T5();Pt();Ni();lg();A5=b.Up(),wfe=b.Zero(),Ir=new b,Jm=new b,yR=new j,xo=class n extends Pi{_validateFilter(e){return e===Pi.FILTER_NONE||e===Pi.FILTER_PCF||e===Pi.FILTER_PCSS?e:(J.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(wfe,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,yR),this._projectionMatrices[r].multiplyToRef(yR,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),Ca.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?DU(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 qe("ShadowGeneratorSceneComponent")}});function PR(n,e){Ffe[n]=e}var Ffe,eD=M(()=>{Ffe={}});var tD,R5=M(()=>{bR();x5();lm();eD();PR(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 tD(n),n._addComponent(e))}});async function b5(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 I5=M(()=>{Bh()});function Bfe(n){return!!n.createPlugin}function Ufe(n){return!!n.name}function LR(){return ul[".babylon"]}function Vfe(n){for(let e in ul){let t=ul[e];if(t.mimeType===n)return t}}function rD(n,e){let t=ul[n];return t||(J.Warn("Unable to find a plugin to load "+n+" files. Trying to use .babylon default plugin. To load from a specific filetype (eg. gltf) see: https://doc.babylonjs.com/features/featuresDeepDive/importers/loadingFileTypes"),e?LR():void 0)}function Gfe(n){return!!ul[n]}function kfe(n){for(let e in ul){let t=ul[e].plugin;if(t.canDirectLoad&&t.canDirectLoad(n))return ul[e]}return LR()}function Wfe(n){let e=n.indexOf("?");e!==-1&&(n=n.substring(0,e));let t=n.lastIndexOf(".");return n.substring(t,n.length).toLowerCase()}function Hfe(n){return n.substring(0,5)==="data:"?n.substring(5):null}function nD(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 sD(n,e,t,i,r,s,a,o,l){var u;let c=Hfe(n.url);if(n.rawData&&!a)throw"When using ArrayBufferView to load data the file extension must be provided.";let f=!c&&!a?Wfe(n.url):"",h=a?rD(a,!0):c?kfe(n.url):rD(f,!1);if(!h&&f){if(n.url&&!n.url.startsWith("blob:")){let m=await b5(n.url,{method:"HEAD",responseHeaders:["Content-Type"]}),p=m.headerValues?m.headerValues["Content-Type"]:"";p&&(h=Vfe(p))}h||(h=LR())}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(Bfe(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(C5.notifyObservers(m),c&&(m.canDirectLoad&&m.canDirectLoad(n.url)||!hf(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 aD(n,e){let t,i,r=null,s=null;if(!e)t=n,i=_e.GetFilename(n),n=_e.GetFolderPath(n);else if(Ufe(e))t=`file:${e.name}`,i=e.name,r=e;else if(ArrayBuffer.isView(e))t="",i=cf(),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 Kf(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 Yg(n,e,t){let{meshNames:i,rootUrl:r="",onProgress:s,pluginExtension:a,name:o,pluginOptions:l}=t!=null?t:{};return await P5(i,r,n,e,s,a,o,l)}async function y5(n,e,t="",i=Oe.LastCreatedScene,r=null,s=null,a=null,o=null,l="",c={}){if(!i)return J.Error("No scene available to import mesh to"),null;let f=aD(e,t);if(!f)return null;let h={};i.addPendingData(h);let d=()=>{i.removePendingData(h)},u=(_,g)=>{let v=nD(f,_,g);a?a(i,v,new Cs(v,Aa.SceneLoaderError,g)):J.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 sD(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 P5(n,e,t,i,r,s,a,o){return await new Promise((l,c)=>{try{y5(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 L5(n,e="",t=Oe.LastCreatedEngine,i=null,r=null,s=null,a=null,o="",l={}){if(!t){_e.Error("No engine available");return}await oD(n,e,new ei(t),i,r,s,a,o,l)}async function zfe(n,e,t,i,r,s,a){return await new Promise((o,l)=>{L5(n,e,t,c=>{o(c)},i,(c,f,h)=>{l(h||new Error(f))},r,s,a)})}async function oD(n,e="",t=Oe.LastCreatedScene,i=null,r=null,s=null,a=null,o="",l={}){if(!t)return J.Error("No scene available to append to"),null;let c=aD(n,e);if(!c)return null;let f={};t.addPendingData(f);let h=()=>{t.removePendingData(f)};Yr.ShowLoadingScreen&&!iD&&(iD=!0,t.getEngine().displayLoadingUI(),t.executeWhenReady(()=>{t.getEngine().hideLoadingUI(),iD=!1}));let d=(p,_)=>{let g=nD(c,p,_);s?s(t,g,new Cs(g,Aa.SceneLoaderError,_)):J.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 sD(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 Xfe(n,e,t,i,r,s,a){return await new Promise((o,l)=>{try{oD(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 lD(n,e="",t=Oe.LastCreatedScene,i=null,r=null,s=null,a=null,o="",l={}){if(!t)return J.Error("No scene available to load asset container to"),null;let c=aD(n,e);if(!c)return null;let f={};t.addPendingData(f);let h=()=>{t.removePendingData(f)},d=(p,_)=>{let g=nD(c,p,_);s?s(t,g,new Cs(g,Aa.SceneLoaderError,_)):J.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 sD(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 Yfe(n,e,t,i,r,s,a){return await new Promise((o,l)=>{try{lD(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){J.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:J.Error("Unknown animation group loading mode value '"+r+"'");return}let d=t.animatables.length;await lD(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 Kfe(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 M5,C5,ul,iD,ad,ep=M(()=>{Ci();di();ys();Ni();Pt();$A();Xl();K_();Y_();Ur();I5();(function(n){n[n.Clean=0]="Clean",n[n.Stop=1]="Stop",n[n.Sync=2]="Sync",n[n.NoSync=3]="NoSync"})(M5||(M5={}));C5=new ie,ul={},iD=!1;ad=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 LR()}static GetPluginForExtension(e){var t;return(t=rD(e,!0))==null?void 0:t.plugin}static IsPluginForExtensionAvailable(e){return Gfe(e)}static RegisterPlugin(e){Kf(e)}static ImportMesh(e,t,i,r,s,a,o,l,c,f){y5(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 P5(e,t,i,r,s,a,o)}static Load(e,t,i,r,s,a,o,l){L5(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 zfe(e,t,i,r,s,a)}static Append(e,t,i,r,s,a,o,l){oD(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 Xfe(e,t,i,r,s,a)}static LoadAssetContainer(e,t,i,r,s,a,o,l){lD(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 Yfe(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 Kfe(e,t,i,r,s,a,l,f,h)}};ad.NO_LOGGING=0;ad.MINIMAL_LOGGING=1;ad.SUMMARY_LOGGING=2;ad.DETAILED_LOGGING=3;ad.OnPluginActivatedObservable=C5});var DR,cD,fD,ml,Kg=M(()=>{yi();qh();vm();Pt();Ni();CP();Pf();al();Ci();uf();DR=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}},cD=class extends DR{},fD=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 DR{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 nc){let h=o.sourceMesh;t.has(h.uniqueId)&&(c.add(h.uniqueId),i.dependedBy.get(h.uniqueId).add(l))}let f=i.dependedBy.get(l);for(let h of o.getDescendants()){let d=h.uniqueId;t.has(d)&&(f.add(d),i.dependsOn.get(d).add(l))}}let r=[],s=[];for(let o of e){let l=o.uniqueId;i.dependsOn.get(l).size===0&&(s.push(o),t.delete(l))}let a=s;for(;a.length>0;){let o=a.shift();r.push(o);let l=i.dependedBy.get(o.uniqueId);for(let c of Array.from(l.values())){let f=i.dependsOn.get(c);f.delete(o.uniqueId),f.size===0&&t.get(c)&&(a.push(t.get(c)),t.delete(c))}}return t.size>0&&(J.Error("SceneSerializer._topologicalSort: There were unvisited nodes:"),t.forEach(o=>{J.Error(o.name)})),r}_addNodeAndDescendantsToList(e,t,i,r){if(!(!i||r&&!r(i)||t.has(i.uniqueId))){e.push(i),t.add(i.uniqueId);for(let s of i.getDescendants(!0))this._addNodeAndDescendantsToList(e,t,s,r)}}_isNodeInContainer(e){return e instanceof Sr&&this.meshes.indexOf(e)!==-1||e instanceof ti&&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 J.Warn(`Node ${e.name} has a parent that is not in the container.`),!1;for(let e of this.transformNodes)if(e.parent&&!this._isNodeInContainer(e.parent))return J.Warn(`Node ${e.name} has a parent that is not in the container.`),!1;for(let e of this.lights)if(e.parent&&!this._isNodeInContainer(e.parent))return J.Warn(`Node ${e.name} has a parent that is not in the container.`),!1;for(let e of this.cameras)if(e.parent&&!this._isNodeInContainer(e.parent))return J.Warn(`Node ${e.name} has a parent that is not in the container.`),!1;return!0}instantiateModelsToScene(e,t=!1,i){this._isValidHierarchy()||_e.Warn("SceneSerializer.InstantiateModelsToScene: The Asset Container hierarchy is not valid.");let r={},s={},a=new fD,o=[],l=[],c={doNotInstantiate:!0,...i},f=(p,_)=>{if(r[p.uniqueId]=_.uniqueId,s[_.uniqueId]=_,e&&(_.name=e(p.name)),_ instanceof Z){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 cD);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 Z("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 J.Error("No scene available to merge animations to"),[];let r=i||(l=>{let c,f=l.animations.length?l.animations[0].targetProperty:"",h=l.name.split(".").join("").split("_primitive")[0];switch(f){case"position":case"rotationQuaternion":c=e.getTransformNodeByName(l.name)||e.getTransformNodeByName(h);break;case"influence":c=e.getMorphTargetByName(l.name)||e.getMorphTargetByName(h);break;default:c=e.getNodeByName(l.name)||e.getNodeByName(h)}return c}),s=this.getNodes();for(let l of s){let c=r(l);if(c!==null){for(let f of l.animations){let h=c.animations.filter(d=>d.targetProperty===f.targetProperty);for(let d of h){let u=c.animations.indexOf(d,0);u>-1&&c.animations.splice(u,1)}}c.animations=c.animations.concat(l.animations)}}let a=[],o=this.animationGroups.slice();for(let l of o){a.push(l.clone(l.name,r));for(let c of l.animatables)c.stop()}for(let l of t){let c=r(l.target);c&&(e.beginAnimation(c,l.fromFrame,l.toFrame,l.loopAnimation,l.speedRatio,l.onAnimationEnd?l.onAnimationEnd:void 0,void 0,!0,void 0,l.onAnimationLoop?l.onAnimationLoop:void 0),e.stopAnimation(l.target))}return a}populateRootNodes(){this.rootNodes.length=0;for(let e of this.meshes)!e.parent&&this.rootNodes.indexOf(e)===-1&&this.rootNodes.push(e);for(let e of this.transformNodes)!e.parent&&this.rootNodes.indexOf(e)===-1&&this.rootNodes.push(e);for(let e of this.lights)!e.parent&&this.rootNodes.indexOf(e)===-1&&this.rootNodes.push(e);for(let e of this.cameras)!e.parent&&this.rootNodes.indexOf(e)===-1&&this.rootNodes.push(e)}addAllAssetsToContainer(e){if(!e)return;let t=[],i=new Set;for(t.push(e);t.length>0;){let r=t.pop();if(r instanceof Z?(r.geometry&&this.geometries.indexOf(r.geometry)===-1&&this.geometries.push(r.geometry),this.meshes.push(r)):r instanceof nc?this.meshes.push(r):r instanceof ti?this.transformNodes.push(r):r instanceof Xt?this.lights.push(r):r instanceof mt&&this.cameras.push(r),r instanceof Sr){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 od,O5=M(()=>{j_();od=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 yB(this.readUint8Array(e))}skipBytes(e){this._dataByteOffset+=e,this.byteOffset+=e}}});function hD(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 jfe(){let n=[];onmessage=e=>{let t=e.data;switch(t.id){case"init":{importScripts(t.url);break}case"validate":{hD(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,N5=M(()=>{Ci();tp=class n{static ValidateAsync(e,t,i,r){return typeof Worker=="function"?new Promise((s,a)=>{let o=`${hD}(${jfe})()`,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(()=>hD(e,t,i,r)))}};tp.Configuration={url:`${_e._DefaultCdnUrl}/gltf_validator.js`};tp._LastResults=null});var Rc,jg,w5=M(()=>{Rc="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,"+Rc)||n.startsWith("data:;base64,"+Rc)||n.startsWith("data:application/octet-stream;base64,"+Rc)||n.startsWith("data:model/gltf-binary;base64,"+Rc)}}});function F5(n,e,t){try{return Promise.resolve(new Uint8Array(n,e,t))}catch(i){return Promise.reject(i)}}function qfe(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,ld,as,OR,Zfe,dD,jf,uD=M(()=>{di();Ci();ep();Kg();Pt();O5();N5();w5();Xl();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"})(ld||(ld={}));(function(n){n[n.LOADING=0]="LOADING",n[n.READY=1]="READY",n[n.COMPLETE=2]="COMPLETE"})(as||(as={}));OR=class{constructor(){this.alwaysComputeBoundingBox=!1,this.alwaysComputeSkeletonRootNode=!1,this.animationStartMode=ld.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}},Zfe=new OR,dD=class extends OR{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,L;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=(L=e.dontUseTransmissionHelper)!=null?L:this.dontUseTransmissionHelper)}},jf=class n extends dD{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({...Zfe},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&&J.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 od(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 od({readAsync:(h,d)=>F5(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 od({readAsync:(o,l)=>qfe(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 jg.canDirectLoad(e)}directLoad(e,t){if(t.startsWith("base64,"+Rc)||t.startsWith(";base64,"+Rc)||t.startsWith("application/octet-stream;base64,"+Rc)||t.startsWith("model/gltf-binary;base64,"+Rc)){let i=df(t);return this._validate(e,new Uint8Array(i,0,i.byteLength)),this._unpackBinaryAsync(new od({readAsync:(r,s)=>F5(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(as[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 Cs("Unexpected magic: "+i,Aa.GLTFLoaderUnexpectedMagicError);let r=e.readUint32();this.loggingEnabled&&this._log(`Binary version: ${r}`);let s=e.readUint32();!this.useRangeRequests&&s!==e.buffer.byteLength&&J.Warn(`Length in header does not match actual data length: ${s} != ${e.buffer.byteLength}`);let a;switch(r){case 1:{a=this._unpackBinaryV1Async(e,s);break}case 2:{a=this._unpackBinaryV2Async(e,s);break}default:throw new Error("Unsupported version: "+r)}return this._endPerformanceCounter("Unpack Binary"),a})}_unpackBinaryV1Async(e,t){let i={JSON:0},r=e.readUint32(),s=e.readUint32();if(s!==i.JSON)throw new Error(`Unexpected content format: ${s}`);let a=t-e.byteOffset,o={json:this._parseJson(e.readString(r)),bin:null};if(a!==0){let l=e.byteOffset;o.bin={readAsync:(c,f)=>e.buffer.readAsync(l+c,f),byteLength:a}}return Promise.resolve(o)}_unpackBinaryV2Async(e,t){let i={JSON:1313821514,BIN:5130562},r=e.readUint32();if(e.readUint32()!==i.JSON)throw new Error("First chunk format is not JSON");return e.byteOffset+r===t?e.loadAsync(r).then(()=>({json:this._parseJson(e.readString(r)),bin:null})):e.loadAsync(r+8).then(()=>{let a={json:this._parseJson(e.readString(r)),bin:null},o=()=>{let l=e.readUint32();switch(e.readUint32()){case i.JSON:throw new Error("Unexpected JSON chunk");case i.BIN:{let f=e.byteOffset;a.bin={readAsync:(h,d)=>e.buffer.readAsync(f+h,d),byteLength:l},e.skipBytes(l);break}default:{e.skipBytes(l);break}}return e.byteOffset!==t?e.loadAsync(8).then(o):Promise.resolve(a)};return o()})}static _parseVersion(e){if(e==="1.0"||e==="1.0.1")return{major:1,minor:0};let t=(e+"").match(/^(\d+)\.(\d+)/);return t?{major:parseInt(t[1]),minor:parseInt(t[2])}:null}static _compareVersion(e,t){return e.major>t.major?1:e.majort.minor?1:e.minor{NR=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 Yn,U5=M(()=>{kt();Vt();hl();DA();Ge();Ci();Yn=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{kt();di();Vt();hl();fo();Ci();cd=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()],cd.prototype,"buttons",void 0);P([F()],cd.prototype,"angularSensibility",void 0);Wn.FreeCameraMouseInput=cd});var fd,G5=M(()=>{kt();Vt();di();fo();OA();Ci();fd=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()],fd.prototype,"wheelPrecisionX",void 0);P([F()],fd.prototype,"wheelPrecisionY",void 0);P([F()],fd.prototype,"wheelPrecisionZ",void 0)});var wi,Fs,k5=M(()=>{kt();Vt();hl();G5();Ge();(function(n){n[n.MoveRelative=0]="MoveRelative",n[n.RotateRelative=1]="RotateRelative",n[n.MoveScene=2]="MoveScene"})(wi||(wi={}));Fs=class extends fd{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()],Fs.prototype,"wheelXMoveRelative",null);P([F()],Fs.prototype,"wheelYMoveRelative",null);P([F()],Fs.prototype,"wheelZMoveRelative",null);P([F()],Fs.prototype,"wheelXRotateRelative",null);P([F()],Fs.prototype,"wheelYRotateRelative",null);P([F()],Fs.prototype,"wheelZRotateRelative",null);P([F()],Fs.prototype,"wheelXMoveScene",null);P([F()],Fs.prototype,"wheelYMoveScene",null);P([F()],Fs.prototype,"wheelZMoveScene",null);Wn.FreeCameraMouseWheelInput=Fs});var hd,W5=M(()=>{kt();Vt();hl();fo();Ge();Ci();hd=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=$.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()],hd.prototype,"touchAngularSensibility",void 0);P([F()],hd.prototype,"touchMoveSensibility",void 0);Wn.FreeCameraTouchInput=hd});var wR,H5=M(()=>{hl();U5();V5();k5();W5();wR=class extends Gm{constructor(e){super(e),this._mouseInput=null,this._mouseWheelInput=null}addKeyboard(){return this.add(new Yn),this}addMouse(e=!0){return this._mouseInput||(this._mouseInput=new cd(e),this.add(this._mouseInput)),this}removeMouse(){return this._mouseInput&&this.remove(this._mouseInput),this}addMouseWheel(){return this._mouseWheelInput||(this._mouseWheelInput=new Fs,this.add(this._mouseWheelInput)),this}removeMouseWheel(){return this._mouseWheelInput&&this.remove(this._mouseWheelInput),this}addTouch(){return this.add(new hd),this}clear(){super.clear(),this._mouseInput=null}}});var bc,z5=M(()=>{kt();Vt();Ge();dP();H5();Ci();zi();Ur();bc=class extends Ds{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 wR(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()],bc.prototype,"ellipsoid",void 0);P([zr()],bc.prototype,"ellipsoidOffset",void 0);P([F()],bc.prototype,"checkCollisions",void 0);P([F()],bc.prototype,"applyGravity",void 0);Ft("BABYLON.FreeCamera",bc)});var Ua,FR=M(()=>{Ge();Qo();ea();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=$.Vector3[0],i=$.Quaternion[0],r=$.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 ve{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=ve.CLAMP_ADDRESSMODE,this.wrapV=ve.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=ve.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=ve.TRILINEAR_SAMPLINGMODE,l=1){return new n(e,t,i,6,r,s,a,o,l,1)}}});var BR,Y5=M(()=>{FR();di();Ge();X5();Mf();nP();Ni();Pt();Q_();BR=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,$.Matrix[1]),o._updateAbsoluteBindMatrices($.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{kt();di();Ni();ki();Vt();Rr();zi();qf=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();UR=class n extends ve{get depth(){return this._depth}constructor(e,t,i,r,s,a,o=!0,l=!1,c=ve.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 dd,j5=M(()=>{lo();Pt();Ni();mD();K5();dd=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){J.Error(`Incompatible target. Targets must all have the same vertices count. Current vertex count: ${this._vertexCount}, vertex count for target "${i.name}": ${r}`);return}}if(this.isUsingTextureForTargets){this._textureVertexStride=0,this._supportsPositions&&this._textureVertexStride++,this._supportsNormals&&this._textureVertexStride++,this._supportsTangents&&this._textureVertexStride++,this._supportsUVs&&this._textureVertexStride++,this._supportsUV2s&&this._textureVertexStride++,this._supportsColors&&this._textureVertexStride++,this._textureWidth=this._vertexCount*this._textureVertexStride||1,this._textureHeight=1;let i=e.getCaps().maxTextureSize;this._textureWidth>i&&(this._textureHeight=Math.ceil(this._textureWidth/i),this._textureWidth=i);let r=this._targets.length,s=new Float32Array(r*this._textureWidth*this._textureHeight*4),a;for(let o=0;o-1&&this._parentContainer.morphTargetManagers.splice(e,1),this._parentContainer=null}for(let e of this._targets)this._scene.stopAnimation(e)}}static Parse(e,t){let i=new n(t);for(let r of e.targets)i.addTarget(qf.Parse(r,t,i));return e.metadata&&(i.metadata=e.metadata),i}};dd.EnableTextureStorage=!0;dd.MaxActiveMorphTargetsInVertexAttributeMode=8;dd.ConstantTargetCountForTextureMode=0});function VR(n,e,t){Zg(n)&&J.Warn(`Extension with the name '${n}' already exists`),pD.set(n,{isGLTFExtension:e,factory:t})}function Zg(n){return pD.delete(n)}var pD,q5,_D=M(()=>{Pt();pD=new Map,q5=pD});var k,gD=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 Uqe,Z5=M(()=>{Uqe=[{regex:new RegExp("^/nodes/\\d+/extensions/")}]});function Zf(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 an(n,e){return{offset:{componentsCount:2,type:"Vector2",get:(t,i,r)=>{let s=Zf(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=Zf(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=Zf(t,r,n,e))==null?void 0:s.wAng},getTarget:at,set:(t,i,r,s)=>Zf(i,s,n,e).wAng=t,getPropertyName:[()=>`${n}${e?"."+e:""}.wAng`]},scale:{componentsCount:2,type:"Vector2",get:(t,i,r)=>{let s=Zf(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=Zf(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=Q5;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=Q5;for(let r of t)r&&(i=i[r]);i&&i.type&&i.get&&(i.interpolation=e)}var Qfe,$fe,Jfe,ehe,the,ihe,Q5,vD=M(()=>{Ge();gD();zt();uP();Z5();Qfe={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)}}}}}},$fe={length:{type:"number",get:n=>n.length,getTarget:n=>n.map(e=>e._babylonAnimationGroup),getPropertyName:[()=>"length"]},__array__:{}},Jfe={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__:{}},ehe={__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"]}}}},the={__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:an("emissiveTexture")}},normalTexture:{scale:{type:"number",get:(n,e,t)=>{var i;return(i=Zf(n,t,"bumpTexture"))==null?void 0:i.level},set:(n,e,t,i)=>{let r=Zf(e,i,"bumpTexture");r&&(r.level=n)},getTarget:(n,e,t)=>at(n,e,t),getPropertyName:[()=>"level"]},extensions:{KHR_texture_transform:an("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:an("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:an("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:an("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:an("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:an("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:an("clearCoat","bumpTexture")}},clearcoatRoughnessTexture:{extensions:{KHR_texture_transform:an("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:an("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:an("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:an("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:an("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:an("metallicReflectanceTexture")}},specularColorTexture:{extensions:{KHR_texture_transform:an("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:an("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:an("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:an("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:an("subSurface","thicknessTexture")}}}}}},ihe={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}}}}};Q5={cameras:ehe,nodes:Qfe,materials:the,extensions:ihe,animations:$fe,meshes:Jfe}});function ED(...n){let e=t=>!!t&&typeof t=="object";return n.reduce((t,i)=>{let r=Object.keys(i);for(let s of r){let a=t[s],o=i[s];Array.isArray(a)&&Array.isArray(o)?t[s]=a.concat(...o):e(a)&&e(o)?t[s]=ED(a,o):t[s]=o}return t},{})}var $5=M(()=>{});var Jg,J5=M(()=>{Jg=class{constructor(e){this._factory=e}get value(){return this._factory&&(this._value=this._factory(),this._factory=void 0),this._value}}});var GR,eY=M(()=>{Ge();Mf();GR=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=sP;break;case ht.ANIMATIONTYPE_VECTOR3:m=aP;break;case ht.ANIMATIONTYPE_VECTOR2:m=oP;break;case ht.ANIMATIONTYPE_SIZE:m=lP;break;case ht.ANIMATIONTYPE_COLOR3:m=cP;break;case ht.ANIMATIONTYPE_COLOR4:m=fP;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 rhe(n){if(n.totalWeight===0&&n.totalAdditiveWeight===0)return n.originalValue;let e=1,t=$.Vector3[0],i=$.Vector3[1],r=$.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=gr.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();eY();Mf();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{FR();SD();ys();SD();tY(ei,Ua)});var rY={};tt(rY,{AnimationGroup:()=>TD,TargetedAnimation:()=>kR});var kR,TD,nY=M(()=>{Mf();di();Ni();uf();iY();VA();kR=class{getClassName(){return"TargetedAnimation"}constructor(e){this.parent=e,this.uniqueId=ec.UniqueId}serialize(){let e={};return e.animation=this.animation.serialize(),e.targetId=this.target.id,e.targetUniqueId=this.target.uniqueId,e}},TD=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 kR(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:()=>WR,getQuaternion:()=>sY,getVector3:()=>AD,getWeights:()=>aY});function AD(n,e,t,i){return b.FromArray(e,t).scaleInPlace(i)}function sY(n,e,t,i){return ze.FromArray(e,t).scaleInPlace(i)}function aY(n,e,t,i){let r=new Array(n._numMorphTargets);for(let s=0;s{Mf();Ge();vD();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}},WR=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",AD,()=>3)]);$g("/nodes/{}/rotation",[new rp(ht.ANIMATIONTYPE_QUATERNION,"rotationQuaternion",sY,()=>4)]);$g("/nodes/{}/scale",[new rp(ht.ANIMATIONTYPE_VECTOR3,"scaling",AD,()=>3)]);$g("/nodes/{}/weights",[new WR(ht.ANIMATIONTYPE_FLOAT,"influence",aY,n=>n._numMorphTargets)])});var ahe,ohe,lhe,che,xD,HR,RD,cY,zR=M(()=>{Vr();fy();ahe="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==",ohe="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==",lhe="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",che=0,xD=(n,e,t,i)=>{if(!n[t]){let r=n.useDelayedTextureLoading;n.useDelayedTextureLoading=!1;let s=n._blockEntityCollection;n._blockEntityCollection=!1;let a=ve.CreateFromBase64String(e,i+che++,n,!0,!1,ve.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=ve.CLAMP_ADDRESSMODE,a.wrapV=ve.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]},HR=n=>xD(n,ahe,"environmentBRDFTexture","EnvironmentBRDFTexture"),RD=n=>xD(n,ohe,"environmentFuzzBRDFTexture","EnvironmentFuzzBRDFTexture"),cY=n=>xD(n,lhe,"openPBREnvironmentBRDFTexture","OpenPBREnvironmentBRDFTexture")});function fY(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 hY=M(()=>{});var bD=M(()=>{bs();Pt();Jn();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,L=this._currentFramebuffer,O=y.createFramebuffer();this._bindUnboundFramebuffer(O);let V=(z=n.width)!=null?z:n,w=(Y=n.height)!=null?Y:n,N=[],U=[],H=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?H:s,C._depthStencilBuffer=this._setupFramebufferDepthAttachments(C._generateStencilBuffer,C._generateDepthBuffer,V,w,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 je=new Oi(this,6);N[ae]=je,y.activeTexture(y["TEXTURE"+ae]),y.bindTexture(de,je._hardwareTexture.underlyingResource),y.texParameteri(de,y.TEXTURE_MAG_FILTER,Ze.mag),y.texParameteri(de,y.TEXTURE_MIN_FILTER,Ze.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=Ie,y.texImage3D(de,0,$t,V,w,Ie,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,w,0,Dt,xi,null);je.isCube=!0}else y.texImage2D(y.TEXTURE_2D,0,$t,V,w,0,Dt,xi,null);i&&y.generateMipmap(de),this._bindTextureDirectly(de,null),je.baseWidth=V,je.baseHeight=w,je.width=V,je.height=w,je.isReady=!0,je.samples=1,je.generateMipMaps=i,je.samplingMode=ge,je.type=ne,je._useSRGBBuffer=ue,je.format=De,je.label=(Be=R[ae])!=null?Be:C.label+"-Texture"+ae,this._internalTexturesCache.push(je)}if(a&&this._caps.depthTextureExtension&&!I){let ae=new Oi(this,14),ge=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?(ge=1,De=y.FLOAT,ne=y.DEPTH_COMPONENT32F):o===18?(ge=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?(ge=0,De=y.UNSIGNED_INT,ne=y.DEPTH_COMPONENT24,de=y.DEPTH_ATTACHMENT):(o===13||o===17)&&(ge=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,w,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=H,ae.baseWidth=V,ae.baseHeight=w,ae.width=V,ae.height=w,ae.isReady=!0,ae.samples=1,ae.generateMipMaps=i,ae.samplingMode=1,ae.format=o,ae.type=ge,ae.label=C.label+"-DepthStencil",N[l]=ae,this._internalTexturesCache.push(ae)}if(C.setTextures(N),t&&y.drawBuffers(U),this._bindUnboundFramebuffer(L),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(L))}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 XR,dY=M(()=>{Vr();gf();bD();XR=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 uY,fhe,mY=M(()=>{G();uY="mrtFragmentDeclaration",fhe=`#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 Kf("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 DR,A5=M(()=>{Ql();RA();T5();rD();tD();DR=class{get onAfterReductionPerformed(){return this._thinMinMaxReducer.onAfterReductionPerformed}constructor(e){this._onAfterUnbindObserver=null,this._forceFullscreenViewport=!0,this._activated=!1,this._camera=e,this._postProcessManager=new Zl(e.getScene()),this._thinMinMaxReducer=new LR(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{p5();A5();OR=class extends DR{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 Jm(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 R5,Yfe,Ir,ep,NR,Ro,b5=M(()=>{Ge();vf();hn();PR();gm();x5();Pt();Ni();dg();R5=b.Up(),Yfe=b.Zero(),Ir=new b,ep=new b,NR=new j,Ro=class n extends Pi{_validateFilter(e){return e===Pi.FILTER_NONE||e===Pi.FILTER_PCF||e===Pi.FILTER_PCSS?e:(J.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(Yfe,this._transformMatrices[r],Ir),Ir.scaleInPlace(this._mapSize/2),ep.copyFromFloats(Math.round(Ir.x),Math.round(Ir.y),Math.round(Ir.z)),ep.subtractInPlace(Ir).scaleInPlace(2/this._mapSize),j.TranslationToRef(ep.x,ep.y,0,NR),this._projectionMatrices[r].multiplyToRef(NR,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),Ca.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?NU(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}};Ro._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)];Ro.CLASSNAME="CascadedShadowGenerator";Ro.DEFAULT_CASCADES_COUNT=4;Ro.MIN_CASCADES_COUNT=2;Ro.MAX_CASCADES_COUNT=4;Ro._SceneComponentInitialization=n=>{throw qe("ShadowGeneratorSceneComponent")}});function wR(n,e){Kfe[n]=e}var Kfe,nD=M(()=>{Kfe={}});var sD,I5=M(()=>{PR();b5();cm();nD();wR(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 sD(n),n._addComponent(e))}});async function M5(n,e){let t=e.method||"GET";return await new Promise((i,r)=>{let s=new Pr;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 C5=M(()=>{Gh()});function jfe(n){return!!n.createPlugin}function qfe(n){return!!n.name}function FR(){return pl[".babylon"]}function Zfe(n){for(let e in pl){let t=pl[e];if(t.mimeType===n)return t}}function oD(n,e){let t=pl[n];return t||(J.Warn("Unable to find a plugin to load "+n+" files. Trying to use .babylon default plugin. To load from a specific filetype (eg. gltf) see: https://doc.babylonjs.com/features/featuresDeepDive/importers/loadingFileTypes"),e?FR():void 0)}function Qfe(n){return!!pl[n]}function $fe(n){for(let e in pl){let t=pl[e].plugin;if(t.canDirectLoad&&t.canDirectLoad(n))return pl[e]}return FR()}function Jfe(n){let e=n.indexOf("?");e!==-1&&(n=n.substring(0,e));let t=n.lastIndexOf(".");return n.substring(t,n.length).toLowerCase()}function ehe(n){return n.substring(0,5)==="data:"?n.substring(5):null}function lD(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 cD(n,e,t,i,r,s,a,o,l){var u;let c=ehe(n.url);if(n.rawData&&!a)throw"When using ArrayBufferView to load data the file extension must be provided.";let f=!c&&!a?Jfe(n.url):"",h=a?oD(a,!0):c?$fe(n.url):oD(f,!1);if(!h&&f){if(n.url&&!n.url.startsWith("blob:")){let m=await M5(n.url,{method:"HEAD",responseHeaders:["Content-Type"]}),p=m.headerValues?m.headerValues["Content-Type"]:"";p&&(h=Zfe(p))}h||(h=FR())}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(jfe(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(P5.notifyObservers(m),c&&(m.canDirectLoad&&m.canDirectLoad(n.url)||!df(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 fD(n,e){let t,i,r=null,s=null;if(!e)t=n,i=_e.GetFilename(n),n=_e.GetFolderPath(n);else if(qfe(e))t=`file:${e.name}`,i=e.name,r=e;else if(ArrayBuffer.isView(e))t="",i=ff(),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 jf(n){if(typeof n.extensions=="string"){let e=n.extensions;pl[e.toLowerCase()]={plugin:n,isBinary:!1}}else{let e=n.extensions,t=Object.keys(e);for(let i of t)pl[i.toLowerCase()]={plugin:n,isBinary:e[i].isBinary,mimeType:e[i].mimeType}}}async function Zg(n,e,t){let{meshNames:i,rootUrl:r="",onProgress:s,pluginExtension:a,name:o,pluginOptions:l}=t!=null?t:{};return await D5(i,r,n,e,s,a,o,l)}async function L5(n,e,t="",i=Oe.LastCreatedScene,r=null,s=null,a=null,o=null,l="",c={}){if(!i)return J.Error("No scene available to import mesh to"),null;let f=fD(e,t);if(!f)return null;let h={};i.addPendingData(h);let d=()=>{i.removePendingData(h)},u=(_,g)=>{let v=lD(f,_,g);a?a(i,v,new ys(v,Aa.SceneLoaderError,g)):J.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 cD(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 D5(n,e,t,i,r,s,a,o){return await new Promise((l,c)=>{try{L5(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 O5(n,e="",t=Oe.LastCreatedEngine,i=null,r=null,s=null,a=null,o="",l={}){if(!t){_e.Error("No engine available");return}await hD(n,e,new Jt(t),i,r,s,a,o,l)}async function the(n,e,t,i,r,s,a){return await new Promise((o,l)=>{O5(n,e,t,c=>{o(c)},i,(c,f,h)=>{l(h||new Error(f))},r,s,a)})}async function hD(n,e="",t=Oe.LastCreatedScene,i=null,r=null,s=null,a=null,o="",l={}){if(!t)return J.Error("No scene available to append to"),null;let c=fD(n,e);if(!c)return null;let f={};t.addPendingData(f);let h=()=>{t.removePendingData(f)};Kr.ShowLoadingScreen&&!aD&&(aD=!0,t.getEngine().displayLoadingUI(),t.executeWhenReady(()=>{t.getEngine().hideLoadingUI(),aD=!1}));let d=(p,_)=>{let g=lD(c,p,_);s?s(t,g,new ys(g,Aa.SceneLoaderError,_)):J.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 cD(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 ihe(n,e,t,i,r,s,a){return await new Promise((o,l)=>{try{hD(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 dD(n,e="",t=Oe.LastCreatedScene,i=null,r=null,s=null,a=null,o="",l={}){if(!t)return J.Error("No scene available to load asset container to"),null;let c=fD(n,e);if(!c)return null;let f={};t.addPendingData(f);let h=()=>{t.removePendingData(f)},d=(p,_)=>{let g=lD(c,p,_);s?s(t,g,new ys(g,Aa.SceneLoaderError,_)):J.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 cD(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 rhe(n,e,t,i,r,s,a){return await new Promise((o,l)=>{try{dD(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 N5(n,e="",t=Oe.LastCreatedScene,i=!0,r=0,s=null,a=null,o=null,l=null,c=null,f="",h={}){if(!t){J.Error("No scene available to load animations to");return}if(i){for(let _ 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:J.Error("Unknown animation group loading mode value '"+r+"'");return}let d=t.animatables.length;await dD(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 nhe(n,e,t,i,r,s,a,o,l,c){return await new Promise((f,h)=>{try{N5(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 y5,P5,pl,aD,cd,tp=M(()=>{Ci();di();Ps();Ni();Pt();rx();Kl();Q_();Z_();Vr();C5();(function(n){n[n.Clean=0]="Clean",n[n.Stop=1]="Stop",n[n.Sync=2]="Sync",n[n.NoSync=3]="NoSync"})(y5||(y5={}));P5=new ie,pl={},aD=!1;cd=class{static get ForceFullSceneLoadingForIncremental(){return Kr.ForceFullSceneLoadingForIncremental}static set ForceFullSceneLoadingForIncremental(e){Kr.ForceFullSceneLoadingForIncremental=e}static get ShowLoadingScreen(){return Kr.ShowLoadingScreen}static set ShowLoadingScreen(e){Kr.ShowLoadingScreen=e}static get loggingLevel(){return Kr.loggingLevel}static set loggingLevel(e){Kr.loggingLevel=e}static get CleanBoneMatrixWeights(){return Kr.CleanBoneMatrixWeights}static set CleanBoneMatrixWeights(e){Kr.CleanBoneMatrixWeights=e}static GetDefaultPlugin(){return FR()}static GetPluginForExtension(e){var t;return(t=oD(e,!0))==null?void 0:t.plugin}static IsPluginForExtensionAvailable(e){return Qfe(e)}static RegisterPlugin(e){jf(e)}static ImportMesh(e,t,i,r,s,a,o,l,c,f){L5(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 D5(e,t,i,r,s,a,o)}static Load(e,t,i,r,s,a,o,l){O5(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 the(e,t,i,r,s,a)}static Append(e,t,i,r,s,a,o,l){hD(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 ihe(e,t,i,r,s,a)}static LoadAssetContainer(e,t,i,r,s,a,o,l){dD(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 rhe(e,t,i,r,s,a)}static ImportAnimations(e,t,i,r,s,a,o,l,c,f,h){N5(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 nhe(e,t,i,r,s,a,l,f,h)}};cd.NO_LOGGING=0;cd.MINIMAL_LOGGING=1;cd.SUMMARY_LOGGING=2;cd.DETAILED_LOGGING=3;cd.OnPluginActivatedObservable=P5});var BR,uD,mD,_l,Qg=M(()=>{yi();$h();Em();Pt();Ni();DP();Lf();ll();Ci();mf();BR=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}},uD=class extends BR{},mD=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}},_l=class extends BR{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 ac){let h=o.sourceMesh;t.has(h.uniqueId)&&(c.add(h.uniqueId),i.dependedBy.get(h.uniqueId).add(l))}let f=i.dependedBy.get(l);for(let h of o.getDescendants()){let d=h.uniqueId;t.has(d)&&(f.add(d),i.dependsOn.get(d).add(l))}}let r=[],s=[];for(let o of e){let l=o.uniqueId;i.dependsOn.get(l).size===0&&(s.push(o),t.delete(l))}let a=s;for(;a.length>0;){let o=a.shift();r.push(o);let l=i.dependedBy.get(o.uniqueId);for(let c of Array.from(l.values())){let f=i.dependsOn.get(c);f.delete(o.uniqueId),f.size===0&&t.get(c)&&(a.push(t.get(c)),t.delete(c))}}return t.size>0&&(J.Error("SceneSerializer._topologicalSort: There were unvisited nodes:"),t.forEach(o=>{J.Error(o.name)})),r}_addNodeAndDescendantsToList(e,t,i,r){if(!(!i||r&&!r(i)||t.has(i.uniqueId))){e.push(i),t.add(i.uniqueId);for(let s of i.getDescendants(!0))this._addNodeAndDescendantsToList(e,t,s,r)}}_isNodeInContainer(e){return e instanceof Tr&&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 J.Warn(`Node ${e.name} has a parent that is not in the container.`),!1;for(let e of this.transformNodes)if(e.parent&&!this._isNodeInContainer(e.parent))return J.Warn(`Node ${e.name} has a parent that is not in the container.`),!1;for(let e of this.lights)if(e.parent&&!this._isNodeInContainer(e.parent))return J.Warn(`Node ${e.name} has a parent that is not in the container.`),!1;for(let e of this.cameras)if(e.parent&&!this._isNodeInContainer(e.parent))return J.Warn(`Node ${e.name} has a parent that is not in the container.`),!1;return!0}instantiateModelsToScene(e,t=!1,i){this._isValidHierarchy()||_e.Warn("SceneSerializer.InstantiateModelsToScene: The Asset Container hierarchy is not valid.");let r={},s={},a=new mD,o=[],l=[],c={doNotInstantiate:!0,...i},f=(p,_)=>{if(r[p.uniqueId]=_.uniqueId,s[_.uniqueId]=_,e&&(_.name=e(p.name)),_ instanceof Z){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 uD);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 Z("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 J.Error("No scene available to merge animations to"),[];let r=i||(l=>{let c,f=l.animations.length?l.animations[0].targetProperty:"",h=l.name.split(".").join("").split("_primitive")[0];switch(f){case"position":case"rotationQuaternion":c=e.getTransformNodeByName(l.name)||e.getTransformNodeByName(h);break;case"influence":c=e.getMorphTargetByName(l.name)||e.getMorphTargetByName(h);break;default:c=e.getNodeByName(l.name)||e.getNodeByName(h)}return c}),s=this.getNodes();for(let l of s){let c=r(l);if(c!==null){for(let f of l.animations){let h=c.animations.filter(d=>d.targetProperty===f.targetProperty);for(let d of h){let u=c.animations.indexOf(d,0);u>-1&&c.animations.splice(u,1)}}c.animations=c.animations.concat(l.animations)}}let a=[],o=this.animationGroups.slice();for(let l of o){a.push(l.clone(l.name,r));for(let c of l.animatables)c.stop()}for(let l of t){let c=r(l.target);c&&(e.beginAnimation(c,l.fromFrame,l.toFrame,l.loopAnimation,l.speedRatio,l.onAnimationEnd?l.onAnimationEnd:void 0,void 0,!0,void 0,l.onAnimationLoop?l.onAnimationLoop:void 0),e.stopAnimation(l.target))}return a}populateRootNodes(){this.rootNodes.length=0;for(let e of this.meshes)!e.parent&&this.rootNodes.indexOf(e)===-1&&this.rootNodes.push(e);for(let e of this.transformNodes)!e.parent&&this.rootNodes.indexOf(e)===-1&&this.rootNodes.push(e);for(let e of this.lights)!e.parent&&this.rootNodes.indexOf(e)===-1&&this.rootNodes.push(e);for(let e of this.cameras)!e.parent&&this.rootNodes.indexOf(e)===-1&&this.rootNodes.push(e)}addAllAssetsToContainer(e){if(!e)return;let t=[],i=new Set;for(t.push(e);t.length>0;){let r=t.pop();if(r instanceof Z?(r.geometry&&this.geometries.indexOf(r.geometry)===-1&&this.geometries.push(r.geometry),this.meshes.push(r)):r instanceof ac?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 Tr){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 fd,w5=M(()=>{$_();fd=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 LB(this.readUint8Array(e))}skipBytes(e){this._dataByteOffset+=e,this.byteOffset+=e}}});function pD(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 she(){let n=[];onmessage=e=>{let t=e.data;switch(t.id){case"init":{importScripts(t.url);break}case"validate":{pD(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 ip,F5=M(()=>{Ci();ip=class n{static ValidateAsync(e,t,i,r){return typeof Worker=="function"?new Promise((s,a)=>{let o=`${pD}(${she})()`,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(()=>pD(e,t,i,r)))}};ip.Configuration={url:`${_e._DefaultCdnUrl}/gltf_validator.js`};ip._LastResults=null});var Ic,$g,B5=M(()=>{Ic="Z2xURg",$g={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,"+Ic)||n.startsWith("data:;base64,"+Ic)||n.startsWith("data:application/octet-stream;base64,"+Ic)||n.startsWith("data:model/gltf-binary;base64,"+Ic)}}});function U5(n,e,t){try{return Promise.resolve(new Uint8Array(n,e,t))}catch(i){return Promise.reject(i)}}function ahe(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 rp,hd,os,UR,ohe,_D,qf,gD=M(()=>{di();Ci();tp();Qg();Pt();w5();F5();B5();Kl();Q_();(function(n){n[n.AUTO=0]="AUTO",n[n.FORCE_RIGHT_HANDED=1]="FORCE_RIGHT_HANDED"})(rp||(rp={}));(function(n){n[n.NONE=0]="NONE",n[n.FIRST=1]="FIRST",n[n.ALL=2]="ALL"})(hd||(hd={}));(function(n){n[n.LOADING=0]="LOADING",n[n.READY=1]="READY",n[n.COMPLETE=2]="COMPLETE"})(os||(os={}));UR=class{constructor(){this.alwaysComputeBoundingBox=!1,this.alwaysComputeSkeletonRootNode=!1,this.animationStartMode=hd.FIRST,this.compileMaterials=!1,this.compileShadowGenerators=!1,this.coordinateSystemMode=rp.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}},ohe=new UR,_D=class extends UR{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,L;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=(L=e.dontUseTransmissionHelper)!=null?L:this.dontUseTransmissionHelper)}},qf=class n extends _D{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=$g.name,this.extensions=$g.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({...ohe},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&&J.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 fd(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 fd({readAsync:(h,d)=>U5(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 fd({readAsync:(o,l)=>ahe(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 _l(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 $g.canDirectLoad(e)}directLoad(e,t){if(t.startsWith("base64,"+Ic)||t.startsWith(";base64,"+Ic)||t.startsWith("application/octet-stream;base64,"+Ic)||t.startsWith("model/gltf-binary;base64,"+Ic)){let i=uf(t);return this._validate(e,new Uint8Array(i,0,i.byteLength)),this._unpackBinaryAsync(new fd({readAsync:(r,s)=>U5(i,r,s),byteLength:i.byteLength}))}return this._validate(e,t),Promise.resolve({json:this._parseJson(t)})}createPlugin(e){return new n(e[$g.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(os[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"),ip.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 ys("Unexpected magic: "+i,Aa.GLTFLoaderUnexpectedMagicError);let r=e.readUint32();this.loggingEnabled&&this._log(`Binary version: ${r}`);let s=e.readUint32();!this.useRangeRequests&&s!==e.buffer.byteLength&&J.Warn(`Length in header does not match actual data length: ${s} != ${e.buffer.byteLength}`);let a;switch(r){case 1:{a=this._unpackBinaryV1Async(e,s);break}case 2:{a=this._unpackBinaryV2Async(e,s);break}default:throw new Error("Unsupported version: "+r)}return this._endPerformanceCounter("Unpack Binary"),a})}_unpackBinaryV1Async(e,t){let i={JSON:0},r=e.readUint32(),s=e.readUint32();if(s!==i.JSON)throw new Error(`Unexpected content format: ${s}`);let a=t-e.byteOffset,o={json:this._parseJson(e.readString(r)),bin:null};if(a!==0){let l=e.byteOffset;o.bin={readAsync:(c,f)=>e.buffer.readAsync(l+c,f),byteLength:a}}return Promise.resolve(o)}_unpackBinaryV2Async(e,t){let i={JSON:1313821514,BIN:5130562},r=e.readUint32();if(e.readUint32()!==i.JSON)throw new Error("First chunk format is not JSON");return e.byteOffset+r===t?e.loadAsync(r).then(()=>({json:this._parseJson(e.readString(r)),bin:null})):e.loadAsync(r+8).then(()=>{let a={json:this._parseJson(e.readString(r)),bin:null},o=()=>{let l=e.readUint32();switch(e.readUint32()){case i.JSON:throw new Error("Unexpected JSON chunk");case i.BIN:{let f=e.byteOffset;a.bin={readAsync:(h,d)=>e.buffer.readAsync(f+h,d),byteLength:l},e.skipBytes(l);break}default:{e.skipBytes(l);break}}return e.byteOffset!==t?e.loadAsync(8).then(o):Promise.resolve(a)};return o()})}static _parseVersion(e){if(e==="1.0"||e==="1.0.1")return{major:1,minor:0};let t=(e+"").match(/^(\d+)\.(\d+)/);return t?{major:parseInt(t[1]),minor:parseInt(t[2])}:null}static _compareVersion(e,t){return e.major>t.major?1:e.majort.minor?1:e.minor{VR=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 Kn,G5=M(()=>{kt();Vt();ul();BA();Ge();Ci();Kn=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===uo.KEYDOWN)(this.keysUp.indexOf(i.keyCode)!==-1||this.keysDown.indexOf(i.keyCode)!==-1||this.keysLeft.indexOf(i.keyCode)!==-1||this.keysRight.indexOf(i.keyCode)!==-1||this.keysUpward.indexOf(i.keyCode)!==-1||this.keysDownward.indexOf(i.keyCode)!==-1||this.keysRotateLeft.indexOf(i.keyCode)!==-1||this.keysRotateRight.indexOf(i.keyCode)!==-1||this.keysRotateUp.indexOf(i.keyCode)!==-1||this.keysRotateDown.indexOf(i.keyCode)!==-1)&&(this._keys.indexOf(i.keyCode)===-1&&this._keys.push(i.keyCode),e||i.preventDefault());else if(this.keysUp.indexOf(i.keyCode)!==-1||this.keysDown.indexOf(i.keyCode)!==-1||this.keysLeft.indexOf(i.keyCode)!==-1||this.keysRight.indexOf(i.keyCode)!==-1||this.keysUpward.indexOf(i.keyCode)!==-1||this.keysDownward.indexOf(i.keyCode)!==-1||this.keysRotateLeft.indexOf(i.keyCode)!==-1||this.keysRotateRight.indexOf(i.keyCode)!==-1||this.keysRotateUp.indexOf(i.keyCode)!==-1||this.keysRotateDown.indexOf(i.keyCode)!==-1){let r=this._keys.indexOf(i.keyCode);r>=0&&this._keys.splice(r,1),e||i.preventDefault()}}}))}detachControl(){this._scene&&(this._onKeyboardObserver&&this._scene.onKeyboardObservable.remove(this._onKeyboardObserver),this._onCanvasBlurObserver&&this._engine.onCanvasBlurObservable.remove(this._onCanvasBlurObserver),this._onKeyboardObserver=null,this._onCanvasBlurObserver=null),this._keys.length=0}checkInputs(){if(this._onKeyboardObserver){let e=this.camera;for(let t=0;t{kt();di();Vt();ul();ho();Ci();dd=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()],dd.prototype,"buttons",void 0);P([F()],dd.prototype,"angularSensibility",void 0);Hn.FreeCameraMouseInput=dd});var ud,W5=M(()=>{kt();Vt();di();ho();UA();Ci();ud=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===mo.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()],ud.prototype,"wheelPrecisionX",void 0);P([F()],ud.prototype,"wheelPrecisionY",void 0);P([F()],ud.prototype,"wheelPrecisionZ",void 0)});var wi,Bs,H5=M(()=>{kt();Vt();ul();W5();Ge();(function(n){n[n.MoveRelative=0]="MoveRelative",n[n.RotateRelative=1]="RotateRelative",n[n.MoveScene=2]="MoveScene"})(wi||(wi={}));Bs=class extends ud{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()],Bs.prototype,"wheelXMoveRelative",null);P([F()],Bs.prototype,"wheelYMoveRelative",null);P([F()],Bs.prototype,"wheelZMoveRelative",null);P([F()],Bs.prototype,"wheelXRotateRelative",null);P([F()],Bs.prototype,"wheelYRotateRelative",null);P([F()],Bs.prototype,"wheelZRotateRelative",null);P([F()],Bs.prototype,"wheelXMoveScene",null);P([F()],Bs.prototype,"wheelYMoveScene",null);P([F()],Bs.prototype,"wheelZMoveScene",null);Hn.FreeCameraMouseWheelInput=Bs});var md,z5=M(()=>{kt();Vt();ul();ho();Ge();Ci();md=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=$.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()],md.prototype,"touchAngularSensibility",void 0);P([F()],md.prototype,"touchMoveSensibility",void 0);Hn.FreeCameraTouchInput=md});var GR,X5=M(()=>{ul();G5();k5();H5();z5();GR=class extends km{constructor(e){super(e),this._mouseInput=null,this._mouseWheelInput=null}addKeyboard(){return this.add(new Kn),this}addMouse(e=!0){return this._mouseInput||(this._mouseInput=new dd(e),this.add(this._mouseInput)),this}removeMouse(){return this._mouseInput&&this.remove(this._mouseInput),this}addMouseWheel(){return this._mouseWheelInput||(this._mouseWheelInput=new Bs,this.add(this._mouseWheelInput)),this}removeMouseWheel(){return this._mouseWheelInput&&this.remove(this._mouseWheelInput),this}addTouch(){return this.add(new md),this}clear(){super.clear(),this._mouseInput=null}}});var Mc,Y5=M(()=>{kt();Vt();Ge();_P();X5();Ci();zi();Vr();Mc=class extends Os{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 GR(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([Xr()],Mc.prototype,"ellipsoid",void 0);P([Xr()],Mc.prototype,"ellipsoidOffset",void 0);P([F()],Mc.prototype,"checkCollisions",void 0);P([F()],Mc.prototype,"applyGravity",void 0);Ft("BABYLON.FreeCamera",Mc)});var Ua,kR=M(()=>{Ge();Jo();ta();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=$.Vector3[0],i=$.Quaternion[0],r=$.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{Gr();Jg=class n extends ve{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=ve.CLAMP_ADDRESSMODE,this.wrapV=ve.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=ve.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=ve.TRILINEAR_SAMPLINGMODE,l=1){return new n(e,t,i,6,r,s,a,o,l,1)}}});var WR,j5=M(()=>{kR();di();Ge();K5();Cf();lP();Ni();Pt();tg();WR=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,$.Matrix[1]),o._updateAbsoluteBindMatrices($.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=Jg.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=Jg.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{kt();di();Ni();ki();Vt();Rr();zi();Zf=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{Gr();HR=class n extends ve{get depth(){return this._depth}constructor(e,t,i,r,s,a,o=!0,l=!1,c=ve.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 pd,Z5=M(()=>{co();Pt();Ni();vD();q5();pd=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){J.Error(`Incompatible target. Targets must all have the same vertices count. Current vertex count: ${this._vertexCount}, vertex count for target "${i.name}": ${r}`);return}}if(this.isUsingTextureForTargets){this._textureVertexStride=0,this._supportsPositions&&this._textureVertexStride++,this._supportsNormals&&this._textureVertexStride++,this._supportsTangents&&this._textureVertexStride++,this._supportsUVs&&this._textureVertexStride++,this._supportsUV2s&&this._textureVertexStride++,this._supportsColors&&this._textureVertexStride++,this._textureWidth=this._vertexCount*this._textureVertexStride||1,this._textureHeight=1;let i=e.getCaps().maxTextureSize;this._textureWidth>i&&(this._textureHeight=Math.ceil(this._textureWidth/i),this._textureWidth=i);let r=this._targets.length,s=new Float32Array(r*this._textureWidth*this._textureHeight*4),a;for(let o=0;o-1&&this._parentContainer.morphTargetManagers.splice(e,1),this._parentContainer=null}for(let e of this._targets)this._scene.stopAnimation(e)}}static Parse(e,t){let i=new n(t);for(let r of e.targets)i.addTarget(Zf.Parse(r,t,i));return e.metadata&&(i.metadata=e.metadata),i}};pd.EnableTextureStorage=!0;pd.MaxActiveMorphTargetsInVertexAttributeMode=8;pd.ConstantTargetCountForTextureMode=0});function zR(n,e,t){ev(n)&&J.Warn(`Extension with the name '${n}' already exists`),ED.set(n,{isGLTFExtension:e,factory:t})}function ev(n){return ED.delete(n)}var ED,Q5,SD=M(()=>{Pt();ED=new Map,Q5=ED});var k,TD=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 $qe,$5=M(()=>{$qe=[{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 an(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 tv(n){let e=n.split("/").map(i=>i.replace(/{}/g,"__array__")),t=J5;for(let i of e)i&&(t=t[i]);if(t&&t.type&&t.get)return t}function iv(n,e){let t=n.split("/").map(r=>r.replace(/{}/g,"__array__")),i=J5;for(let r of t)r&&(i=i[r]);i&&i.type&&i.get&&(i.interpolation=e)}var lhe,che,fhe,hhe,dhe,uhe,J5,AD=M(()=>{Ge();TD();zt();gP();$5();lhe={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 Wr,!0)[0])==null?void 0:t.intensity},getTarget:n=>{var e;return(e=n._babylonTransformNode)==null?void 0:e.getChildren(t=>t instanceof Wr,!0)[0]},set:(n,e)=>{if(e._babylonTransformNode){let t=e._babylonTransformNode.getChildren(i=>i instanceof Wr,!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 Wr,!0)[0])==null?void 0:t.diffuse},getTarget:n=>{var e;return(e=n._babylonTransformNode)==null?void 0:e.getChildren(t=>t instanceof Wr,!0)[0]},set:(n,e)=>{if(e._babylonTransformNode){let t=e._babylonTransformNode.getChildren(i=>i instanceof Wr,!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)}}}}}},che={length:{type:"number",get:n=>n.length,getTarget:n=>n.map(e=>e._babylonAnimationGroup),getPropertyName:[()=>"length"]},__array__:{}},fhe={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__:{}},hhe={__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"]}}}},dhe={__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:an("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:an("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:an("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:an("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:an("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:an("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:an("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:an("clearCoat","bumpTexture")}},clearcoatRoughnessTexture:{extensions:{KHR_texture_transform:an("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:an("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:an("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:an("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:an("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:an("metallicReflectanceTexture")}},specularColorTexture:{extensions:{KHR_texture_transform:an("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:an("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:an("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:an("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:an("subSurface","thicknessTexture")}}}}}},uhe={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}}}}};J5={cameras:hhe,nodes:lhe,materials:dhe,extensions:uhe,animations:che,meshes:fhe}});function xD(...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]=xD(a,o):t[s]=o}return t},{})}var eY=M(()=>{});var rv,tY=M(()=>{rv=class{constructor(e){this._factory=e}get value(){return this._factory&&(this._value=this._factory(),this._factory=void 0),this._value}}});var XR,iY=M(()=>{Ge();Cf();XR=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=cP;break;case ht.ANIMATIONTYPE_VECTOR3:m=fP;break;case ht.ANIMATIONTYPE_VECTOR2:m=hP;break;case ht.ANIMATIONTYPE_SIZE:m=dP;break;case ht.ANIMATIONTYPE_COLOR3:m=uP;break;case ht.ANIMATIONTYPE_COLOR4:m=mP;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 mhe(n){if(n.totalWeight===0&&n.totalAdditiveWeight===0)return n.originalValue;let e=1,t=$.Vector3[0],i=$.Vector3[1],r=$.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=vr.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 nv(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 nv(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();iY();Cf();Gl();Ge();nv=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{kR();RD();Ps();RD();rY(Jt,Ua)});var sY={};tt(sY,{AnimationGroup:()=>bD,TargetedAnimation:()=>YR});var YR,bD,aY=M(()=>{Cf();di();Ni();mf();nY();zA();YR=class{getClassName(){return"TargetedAnimation"}constructor(e){this.parent=e,this.uniqueId=ic.UniqueId}serialize(){let e={};return e.animation=this.animation.serialize(),e.targetId=this.target.id,e.targetUniqueId=this.target.uniqueId,e}},bD=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 YR(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),osv,TransformNodeAnimationPropertyInfo:()=>np,WeightAnimationPropertyInfo:()=>KR,getQuaternion:()=>oY,getVector3:()=>ID,getWeights:()=>lY});function ID(n,e,t,i){return b.FromArray(e,t).scaleInPlace(i)}function oY(n,e,t,i){return ze.FromArray(e,t).scaleInPlace(i)}function lY(n,e,t,i){let r=new Array(n._numMorphTargets);for(let s=0;s{Cf();Ge();AD();sv=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}},np=class extends sv{buildAnimations(e,t,i,r){let s=[];return s.push({babylonAnimatable:e._babylonTransformNode,babylonAnimation:this._buildAnimation(t,i,r)}),s}},KR=class extends sv{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}};iv("/nodes/{}/translation",[new np(ht.ANIMATIONTYPE_VECTOR3,"position",ID,()=>3)]);iv("/nodes/{}/rotation",[new np(ht.ANIMATIONTYPE_QUATERNION,"rotationQuaternion",oY,()=>4)]);iv("/nodes/{}/scale",[new np(ht.ANIMATIONTYPE_VECTOR3,"scaling",ID,()=>3)]);iv("/nodes/{}/weights",[new KR(ht.ANIMATIONTYPE_FLOAT,"influence",lY,n=>n._numMorphTargets)])});var ghe,vhe,Ehe,She,MD,jR,CD,hY,qR=M(()=>{Gr();my();ghe="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==",vhe="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==",Ehe="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",She=0,MD=(n,e,t,i)=>{if(!n[t]){let r=n.useDelayedTextureLoading;n.useDelayedTextureLoading=!1;let s=n._blockEntityCollection;n._blockEntityCollection=!1;let a=ve.CreateFromBase64String(e,i+She++,n,!0,!1,ve.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=ve.CLAMP_ADDRESSMODE,a.wrapV=ve.CLAMP_ADDRESSMODE,n[t]=a,n.useDelayedTextureLoading=r,hm.ExpandRGBDTexture(a);let c=n.getEngine().onContextRestoredObservable.add(()=>{a.isRGBD=!0;let f=n.onBeforeRenderObservable.add(()=>{a.isReady()&&(n.onBeforeRenderObservable.remove(f),hm.ExpandRGBDTexture(a))})});n.onDisposeObservable.add(()=>{n.getEngine().onContextRestoredObservable.remove(c)})}return n[t]},jR=n=>MD(n,ghe,"environmentBRDFTexture","EnvironmentBRDFTexture"),CD=n=>MD(n,vhe,"environmentFuzzBRDFTexture","EnvironmentFuzzBRDFTexture"),hY=n=>MD(n,Ehe,"openPBREnvironmentBRDFTexture","OpenPBREnvironmentBRDFTexture")});function dY(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 uY=M(()=>{});var yD=M(()=>{Is();Pt();es();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,L=this._currentFramebuffer,O=y.createFramebuffer();this._bindUnboundFramebuffer(O);let V=(z=n.width)!=null?z:n,w=(Y=n.height)!=null?Y:n,N=[],U=[],H=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?H:s,C._depthStencilBuffer=this._setupFramebufferDepthAttachments(C._generateStencilBuffer,C._generateDepthBuffer,V,w,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 je=new Oi(this,6);N[ae]=je,y.activeTexture(y["TEXTURE"+ae]),y.bindTexture(de,je._hardwareTexture.underlyingResource),y.texParameteri(de,y.TEXTURE_MAG_FILTER,Ze.mag),y.texParameteri(de,y.TEXTURE_MIN_FILTER,Ze.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=Ie,y.texImage3D(de,0,$t,V,w,Ie,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,w,0,Dt,xi,null);je.isCube=!0}else y.texImage2D(y.TEXTURE_2D,0,$t,V,w,0,Dt,xi,null);i&&y.generateMipmap(de),this._bindTextureDirectly(de,null),je.baseWidth=V,je.baseHeight=w,je.width=V,je.height=w,je.isReady=!0,je.samples=1,je.generateMipMaps=i,je.samplingMode=ge,je.type=ne,je._useSRGBBuffer=ue,je.format=De,je.label=(Be=R[ae])!=null?Be:C.label+"-Texture"+ae,this._internalTexturesCache.push(je)}if(a&&this._caps.depthTextureExtension&&!I){let ae=new Oi(this,14),ge=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?(ge=1,De=y.FLOAT,ne=y.DEPTH_COMPONENT32F):o===18?(ge=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?(ge=0,De=y.UNSIGNED_INT,ne=y.DEPTH_COMPONENT24,de=y.DEPTH_ATTACHMENT):(o===13||o===17)&&(ge=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,w,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=H,ae.baseWidth=V,ae.baseHeight=w,ae.width=V,ae.height=w,ae.isReady=!0,ae.samples=1,ae.generateMipMaps=i,ae.samplingMode=1,ae.format=o,ae.type=ge,ae.label=C.label+"-DepthStencil",N[l]=ae,this._internalTexturesCache.push(ae)}if(C.setTextures(N),t&&y.drawBuffers(U),this._bindUnboundFramebuffer(L),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(L))}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,mY=M(()=>{Gr();vf();yD();ZR=class extends kr{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 pY,The,_Y=M(()=>{G();pY="mrtFragmentDeclaration",The=`#if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE) layout(location=0) out vec4 glFragData[{X}]; #endif -`;A.IncludesShadersStore[uY]||(A.IncludesShadersStore[uY]=fhe)});var pY,hhe,YR=M(()=>{G();pY="pbrFragmentReflectionDeclaration",hhe=`#ifdef REFLECTION +`;A.IncludesShadersStore[pY]||(A.IncludesShadersStore[pY]=The)});var gY,Ahe,QR=M(()=>{G();gY="pbrFragmentReflectionDeclaration",Ahe=`#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 -`;A.IncludesShadersStore[pY]||(A.IncludesShadersStore[pY]=hhe)});var _Y,dhe,ID=M(()=>{G();_Y="sceneFragmentDeclaration",dhe=`uniform mat4 viewProjection; +`;A.IncludesShadersStore[gY]||(A.IncludesShadersStore[gY]=Ahe)});var vY,xhe,PD=M(()=>{G();vY="sceneFragmentDeclaration",xhe=`uniform mat4 viewProjection; #ifdef MULTIVIEW uniform mat4 viewProjectionR; #endif uniform mat4 view;uniform mat4 projection;uniform vec4 vEyePosition;uniform mat4 inverseProjection; -`;A.IncludesShadersStore[_Y]||(A.IncludesShadersStore[_Y]=dhe)});var gY,uhe,np=M(()=>{G();gY="pbrBRDFFunctions",uhe=`#define FRESNEL_MAXIMUM_ON_ROUGH 0.25 +`;A.IncludesShadersStore[vY]||(A.IncludesShadersStore[vY]=xhe)});var EY,Rhe,sp=M(()=>{G();EY="pbrBRDFFunctions",Rhe=`#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 -`;A.IncludesShadersStore[gY]||(A.IncludesShadersStore[gY]=uhe)});var vY,mhe,MD=M(()=>{G();vY="openpbrDielectricReflectance",mhe=`struct ReflectanceParams +`;A.IncludesShadersStore[EY]||(A.IncludesShadersStore[EY]=Rhe)});var SY,bhe,LD=M(()=>{G();SY="openpbrDielectricReflectance",bhe=`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;} -`;A.IncludesShadersStore[vY]||(A.IncludesShadersStore[vY]=mhe)});var EY,phe,KR=M(()=>{G();EY="pbrIBLFunctions",phe=`#if defined(REFLECTION) || defined(SS_REFRACTION) +`;A.IncludesShadersStore[SY]||(A.IncludesShadersStore[SY]=bhe)});var TY,Ihe,$R=M(()=>{G();TY="pbrIBLFunctions",Ihe=`#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 -`;A.IncludesShadersStore[EY]||(A.IncludesShadersStore[EY]=phe)});var SY,_he,CD=M(()=>{G();SY="openpbrGeometryInfo",_he=`struct geometryInfoOutParams +`;A.IncludesShadersStore[TY]||(A.IncludesShadersStore[TY]=Ihe)});var AY,Mhe,DD=M(()=>{G();AY="openpbrGeometryInfo",Mhe=`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;}`;A.IncludesShadersStore[SY]||(A.IncludesShadersStore[SY]=_he)});var TY,ghe,yD=M(()=>{G();TY="openpbrIblFunctions",ghe=`#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[AY]||(A.IncludesShadersStore[AY]=Mhe)});var xY,Che,OD=M(()=>{G();xY="openpbrIblFunctions",Che=`#ifdef REFLECTION vec3 sampleIrradiance( in vec3 surfaceNormal #if defined(NORMAL) && defined(USESPHERICALINVERTEX) @@ -11215,7 +11215,7 @@ return getReflectanceFromBRDFLookup(reflectance.coloredF0,reflectance.coloredF90 #endif } #endif -`;A.IncludesShadersStore[TY]||(A.IncludesShadersStore[TY]=ghe)});var AY,vhe,PD=M(()=>{G();AY="openpbrSubsurfaceLayerData",vhe=`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[xY]||(A.IncludesShadersStore[xY]=Che)});var RY,yhe,ND=M(()=>{G();RY="openpbrSubsurfaceLayerData",yhe=`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 -`;A.IncludesShadersStore[AY]||(A.IncludesShadersStore[AY]=vhe)});var xY,Ehe,LD=M(()=>{G();xY="openpbrTransmissionLayerData",Ehe=`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[RY]||(A.IncludesShadersStore[RY]=yhe)});var bY,Phe,wD=M(()=>{G();bY="openpbrTransmissionLayerData",Phe=`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 -`;A.IncludesShadersStore[xY]||(A.IncludesShadersStore[xY]=Ehe)});var bY={};tt(bY,{geometryPixelShader:()=>She});var DD,RY,She,OD=M(()=>{G();Tc();mY();mR();pR();La();YR();ID();rd();np();MD();KR();zg();CD();yD();sd();Ac();_R();PD();LD();DD="geometryPixelShader",RY=`#extension GL_EXT_draw_buffers : require +`;A.IncludesShadersStore[bY]||(A.IncludesShadersStore[bY]=Phe)});var MY={};tt(MY,{geometryPixelShader:()=>Lhe});var FD,IY,Lhe,BD=M(()=>{G();xc();_Y();ER();SR();La();QR();PD();ad();sp();LD();$R();jg();DD();OD();ld();Rc();TR();ND();wD();FD="geometryPixelShader",IY=`#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 } -`;A.ShadersStore[DD]||(A.ShadersStore[DD]=RY);She={name:DD,shader:RY}});var IY,The,MY=M(()=>{G();IY="geometryVertexDeclaration",The="uniform mat4 viewProjection;uniform mat4 view;";A.IncludesShadersStore[IY]||(A.IncludesShadersStore[IY]=The)});var CY,Ahe,yY=M(()=>{G();rd();CY="geometryUboDeclaration",Ahe=`#include -`;A.IncludesShadersStore[CY]||(A.IncludesShadersStore[CY]=Ahe)});var PY,xhe,sp=M(()=>{G();PY="harmonicsFunctions",xhe=`#ifdef USESPHERICALFROMREFLECTIONMAP +`;A.ShadersStore[FD]||(A.ShadersStore[FD]=IY);Lhe={name:FD,shader:IY}});var CY,Dhe,yY=M(()=>{G();CY="geometryVertexDeclaration",Dhe="uniform mat4 viewProjection;uniform mat4 view;";A.IncludesShadersStore[CY]||(A.IncludesShadersStore[CY]=Dhe)});var PY,Ohe,LY=M(()=>{G();ad();PY="geometryUboDeclaration",Ohe=`#include +`;A.IncludesShadersStore[PY]||(A.IncludesShadersStore[PY]=Ohe)});var DY,Nhe,ap=M(()=>{G();DY="harmonicsFunctions",Nhe=`#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 -`;A.IncludesShadersStore[PY]||(A.IncludesShadersStore[PY]=xhe)});var DY={};tt(DY,{geometryVertexShader:()=>Rhe});var ND,LY,Rhe,wD=M(()=>{G();mc();pc();Wf();Hf();Ff();MY();yY();_c();sp();zf();Xf();gc();vc();Ec();Sc();rR();ND="geometryVertexShader",LY=`precision highp float; +`;A.IncludesShadersStore[DY]||(A.IncludesShadersStore[DY]=Nhe)});var NY={};tt(NY,{geometryVertexShader:()=>whe});var UD,OY,whe,VD=M(()=>{G();_c();gc();Hf();zf();Bf();yY();LY();vc();ap();Xf();Yf();Ec();Sc();Tc();Ac();lR();UD="geometryVertexShader",OY=`precision highp float; #include #include #include @@ -11741,7 +11741,7 @@ vEnvironmentIrradiance=computeEnvironmentIrradiance(reflectionVector)*vReflectio #endif #endif } -`;A.ShadersStore[ND]||(A.ShadersStore[ND]=LY);Rhe={name:ND,shader:LY}});var OY,bhe,ap=M(()=>{G();OY="harmonicsFunctions",bhe=`#ifdef USESPHERICALFROMREFLECTIONMAP +`;A.ShadersStore[UD]||(A.ShadersStore[UD]=OY);whe={name:UD,shader:OY}});var wY,Fhe,op=M(()=>{G();wY="harmonicsFunctions",Fhe=`#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 -`;A.IncludesShadersStoreWGSL[OY]||(A.IncludesShadersStoreWGSL[OY]=bhe)});var wY={};tt(wY,{geometryVertexShaderWGSL:()=>Ihe});var FD,NY,Ihe,FY=M(()=>{G();sc();ac();Uf();Vf();wf();ed();oc();ap();Gf();kf();lc();cc();fc();hc();Ox();FD="geometryVertexShader",NY=`#include +`;A.IncludesShadersStoreWGSL[wY]||(A.IncludesShadersStoreWGSL[wY]=Fhe)});var BY={};tt(BY,{geometryVertexShaderWGSL:()=>Bhe});var GD,FY,Bhe,UY=M(()=>{G();oc();lc();Vf();Gf();Ff();rd();cc();op();kf();Wf();fc();hc();dc();uc();Ux();GD="geometryVertexShader",FY=`#include #include #include #include[0..maxSimultaneousMorphTargets] @@ -11967,7 +11967,7 @@ vertexOutputs.vEnvironmentIrradiance=computeEnvironmentIrradiance(reflectionVect #endif #endif } -`;A.ShadersStoreWGSL[FD]||(A.ShadersStoreWGSL[FD]=NY);Ihe={name:FD,shader:NY}});var BY,Mhe,jR=M(()=>{G();BY="pbrFragmentReflectionDeclaration",Mhe=`#ifdef REFLECTION +`;A.ShadersStoreWGSL[GD]||(A.ShadersStoreWGSL[GD]=FY);Bhe={name:GD,shader:FY}});var VY,Uhe,JR=M(()=>{G();VY="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 -`;A.IncludesShadersStoreWGSL[BY]||(A.IncludesShadersStoreWGSL[BY]=Mhe)});var UY,Che,op=M(()=>{G();UY="pbrBRDFFunctions",Che=`#define FRESNEL_MAXIMUM_ON_ROUGH 0.25 +`;A.IncludesShadersStoreWGSL[VY]||(A.IncludesShadersStoreWGSL[VY]=Uhe)});var GY,Vhe,lp=M(()=>{G();GY="pbrBRDFFunctions",Vhe=`#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 -`;A.IncludesShadersStoreWGSL[UY]||(A.IncludesShadersStoreWGSL[UY]=Che)});var VY,yhe,BD=M(()=>{G();VY="openpbrDielectricReflectance",yhe=`struct ReflectanceParams +`;A.IncludesShadersStoreWGSL[GY]||(A.IncludesShadersStoreWGSL[GY]=Vhe)});var kY,Ghe,kD=M(()=>{G();kY="openpbrDielectricReflectance",Ghe=`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;} -`;A.IncludesShadersStoreWGSL[VY]||(A.IncludesShadersStoreWGSL[VY]=yhe)});var GY,Phe,qR=M(()=>{G();GY="pbrIBLFunctions",Phe=`#if defined(REFLECTION) || defined(SS_REFRACTION) +`;A.IncludesShadersStoreWGSL[kY]||(A.IncludesShadersStoreWGSL[kY]=Ghe)});var WY,khe,eb=M(()=>{G();WY="pbrIBLFunctions",khe=`#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 -`;A.IncludesShadersStoreWGSL[GY]||(A.IncludesShadersStoreWGSL[GY]=Phe)});var kY,Lhe,UD=M(()=>{G();kY="openpbrGeometryInfo",Lhe=`struct geometryInfoOutParams +`;A.IncludesShadersStoreWGSL[WY]||(A.IncludesShadersStoreWGSL[WY]=khe)});var HY,Whe,WD=M(()=>{G();HY="openpbrGeometryInfo",Whe=`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;} -`;A.IncludesShadersStoreWGSL[kY]||(A.IncludesShadersStoreWGSL[kY]=Lhe)});var WY,Dhe,VD=M(()=>{G();WY="openpbrIblFunctions",Dhe=`#ifdef REFLECTION +`;A.IncludesShadersStoreWGSL[HY]||(A.IncludesShadersStoreWGSL[HY]=Whe)});var zY,Hhe,HD=M(()=>{G();zY="openpbrIblFunctions",Hhe=`#ifdef REFLECTION fn sampleIrradiance( surfaceNormal: vec3f #if defined(NORMAL) && defined(USESPHERICALINVERTEX) @@ -12458,7 +12458,7 @@ return getReflectanceFromBRDFLookup(reflectance.coloredF0,reflectance.coloredF90 #endif } #endif -`;A.IncludesShadersStoreWGSL[WY]||(A.IncludesShadersStoreWGSL[WY]=Dhe)});var HY,Ohe,GD=M(()=>{G();HY="openpbrSubsurfaceLayerData",Ohe=`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[zY]||(A.IncludesShadersStoreWGSL[zY]=Hhe)});var XY,zhe,zD=M(()=>{G();XY="openpbrSubsurfaceLayerData",zhe=`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 -`;A.IncludesShadersStoreWGSL[HY]||(A.IncludesShadersStoreWGSL[HY]=Ohe)});var zY,Nhe,kD=M(()=>{G();zY="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[XY]||(A.IncludesShadersStoreWGSL[XY]=zhe)});var YY,Xhe,XD=M(()=>{G();YY="openpbrTransmissionLayerData",Xhe=`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 -`;A.IncludesShadersStoreWGSL[zY]||(A.IncludesShadersStoreWGSL[zY]=Nhe)});var YY={};tt(YY,{geometryPixelShaderWGSL:()=>whe});var WD,XY,whe,KY=M(()=>{G();dc();Wx();Hx();Pa();jR();ed();op();BD();qR();Wg();UD();VD();id();uc();zx();GD();kD();WD="geometryPixelShader",XY=`#ifdef BUMP +`;A.IncludesShadersStoreWGSL[YY]||(A.IncludesShadersStoreWGSL[YY]=Xhe)});var jY={};tt(jY,{geometryPixelShaderWGSL:()=>Yhe});var YD,KY,Yhe,qY=M(()=>{G();mc();Kx();jx();Pa();JR();rd();lp();kD();eb();Yg();WD();HD();sd();pc();qx();zD();XD();YD="geometryPixelShader",KY=`#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 } -`;A.ShadersStoreWGSL[WD]||(A.ShadersStoreWGSL[WD]=XY);whe={name:WD,shader:XY}});var jY,HD,os,qY=M(()=>{Ge();ki();Vr();dY();zt();hn();kn();OD();wD();Oa();ll();Gn();bD();jY=["diffuseSampler","bumpSampler","reflectivitySampler","albedoSampler","morphTargets","boneSampler","transmissionWeightSampler","subsurfaceWeightSampler","iblShadowSampler"],HD=["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"];bf(HD,jY,!0);Bn(HD);os=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(()=>(FY(),wY)),Promise.resolve().then(()=>(KY(),YY))])):await Promise.all([Promise.resolve().then(()=>(wD(),DY)),Promise.resolve().then(()=>(OD(),bY))]),this._shadersLoaded=!0}isReady(e,t){if(!this._shadersLoaded)return!1;let i=e.getMaterial();if(i&&i.disableDepthWrite)return!1;let r=[],s=[D.PositionKind],a=e.getMesh();a.isVerticesDataPresent(D.NormalKind)&&(r.push("#define HAS_NORMAL_ATTRIBUTE"),s.push(D.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(D.UVKind)&&(s.push(D.UVKind),r.push("#define UV1"),l=!0),a.isVerticesDataPresent(D.UV2Kind)&&(s.push(D.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),Rf(_,_.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(D.MatricesIndicesKind),s.push(D.MatricesWeightsKind),a.numBoneInfluencers>4&&(s.push(D.MatricesIndicesExtraKind),s.push(D.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:HD,samplers:jY,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 XR("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=ve.CLAMP_ADDRESSMODE,this._multiRenderTarget.wrapV=ve.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 L=x.skeleton.getTransformMatrices(x);this._previousBonesTransformationMatrices[x.uniqueId]=this._copyBonesTransformationMatrices(L,new Float32Array(L.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 L=v._getDrawWrapper();if(!L)return;let O=L.effect;S.enableEffect(L),C||x._bind(v,O,R.fillMode),this._useUbo?(xf(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 N=T._getWorldMatrixDeterminant();V=R._getEffectiveOrientation(x),N<0&&(V=V===Ee.ClockWiseSideOrientation?Ee.CounterClockWiseSideOrientation:Ee.ClockWiseSideOrientation)}else V=x._effectiveSideOrientation;if(R._preBind(L,V),R.needAlphaTestingForMesh(T)){let N=R.getAlphaTestTexture();N&&(O.setTexture("diffuseSampler",N),O.setMatrix("diffuseMatrix",N.getTextureMatrix()))}if((R.bumpTexture||R.normalTexture||R.geometryNormalTexture)&&E.getEngine().getCaps().standardDerivatives&&ce.BumpTextureEnabled){let N=R.bumpTexture||R.normalTexture||R.geometryNormalTexture;O.setFloat3("vBumpInfos",N.coordinatesIndex,1/N.level,R.parallaxScaleBias),O.setMatrix("bumpMatrix",N.getTextureMatrix()),O.setTexture("bumpSampler",N),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 N=R;N._useRoughnessFromMetallicTextureGreen&&N.baseMetalnessTexture?(O.setTexture("reflectivitySampler",N.baseMetalnessTexture),O.setMatrix("reflectivityMatrix",N.baseMetalnessTexture.getTextureMatrix())):N.baseMetalnessTexture?(O.setTexture("metallicSampler",N.baseMetalnessTexture),O.setMatrix("metallicMatrix",N.baseMetalnessTexture.getTextureMatrix())):N.specularRoughnessTexture&&(O.setTexture("roughnessSampler",N.specularRoughnessTexture),O.setMatrix("roughnessMatrix",N.specularRoughnessTexture.getTextureMatrix())),O.setFloat("metallic",N.baseMetalness),O.setFloat("glossiness",1-N.specularRoughness),N.baseColorTexture!==null&&(O.setTexture("albedoSampler",N.baseColorTexture),O.setMatrix("albedoMatrix",N.baseColorTexture.getTextureMatrix())),N.baseColor!==null&&O.setColor3("albedoColor",N.baseColor)}}if(this._enableIrradiance&&E.environmentTexture){let N=E.environmentTexture,U=E.postProcessRenderPipelineManager.supportedPipelines.find(H=>H.getClassName()==="IBLShadowsRenderPipeline");if(U){let ee=U._getAccumulatedTexture();ee&&(O.setTexture("iblShadowSampler",ee),O.setFloat2("shadowTextureSize",ee.getSize().width,ee.getSize().height))}if(O.setMatrix("reflectionMatrix",N.getReflectionTextureMatrix()),O.setFloat2("vReflectionInfos",N.level*E.iblIntensity,0),O.setTexture("reflectionSampler",N),N.irradianceTexture&&(O.setTexture("irradianceSampler",N.irradianceTexture),N.irradianceTexture._dominantDirection&&O.setVector3("vReflectionDominantDirection",N.irradianceTexture._dominantDirection)),N.sphericalPolynomial){let H=N.sphericalPolynomial;if(H.preScaledHarmonics){let ee=H.preScaledHarmonics;O.setVector3("vSphericalL00",ee.l00),O.setVector3("vSphericalL1_1",ee.l1_1),O.setVector3("vSphericalL10",ee.l10),O.setVector3("vSphericalL11",ee.l11),O.setVector3("vSphericalL2_2",ee.l2_2),O.setVector3("vSphericalL2_1",ee.l2_1),O.setVector3("vSphericalL20",ee.l20),O.setVector3("vSphericalL21",ee.l21),O.setVector3("vSphericalL22",ee.l22)}else O.setFloat3("vSphericalX",H.x.x,H.x.y,H.x.z),O.setFloat3("vSphericalY",H.y.x,H.y.y,H.y.z),O.setFloat3("vSphericalZ",H.z.x,H.z.y,H.z.z),O.setFloat3("vSphericalXX_ZZ",H.xx.x-H.zz.x,H.xx.y-H.zz.y,H.xx.z-H.zz.z),O.setFloat3("vSphericalYY_ZZ",H.yy.x-H.zz.x,H.yy.y-H.zz.y,H.yy.z-H.zz.z),O.setFloat3("vSphericalZZ",H.zz.x,H.zz.y,H.zz.z),O.setFloat3("vSphericalXY",H.xy.x,H.xy.y,H.xy.z),O.setFloat3("vSphericalYZ",H.yz.x,H.yz.y,H.yz.z),O.setFloat3("vSphericalZX",H.zx.x,H.zx.y,H.zx.z)}if(this.generateIrradianceWithScatterMask&&R.getClassName()==="OpenPBRMaterial"){let H=R;O.setFloat("vSubsurfaceWeight",H.subsurfaceWeight),H.subsurfaceWeightTexture&&(O.setTexture("subsurfaceWeightSampler",H.subsurfaceWeightTexture),O.setMatrix("subsurfaceWeightMatrix",H.subsurfaceWeightTexture.getTextureMatrix())),O.setFloat("vTransmissionWeight",H.transmissionWeight),H.transmissionWeightTexture&&(O.setTexture("transmissionWeightSampler",H.transmissionWeightTexture),O.setMatrix("transmissionWeightMatrix",H.transmissionWeightTexture.getTextureMatrix())),O.setFloat("vTransmissionScatterAnisotropy",H.transmissionScatterAnisotropy),O.setFloat("vSubsurfaceScatterAnisotropy",H.subsurfaceScatterAnisotropy)}}if(Un(O,R,this._scene),x.useBones&&x.computeBonesUsingShaders&&x.skeleton){let N=x.skeleton;if(N.isUsingTextureForMatrices&&O.getUniformIndex("boneTextureInfo")>-1){let U=N.getTransformMatrixTexture(x);O.setTexture("boneSampler",U),O.setFloat2("boneTextureInfo",N._textureWidth,N._textureHeight)}else O.setMatrices("mBones",x.skeleton.getTransformMatrices(x));(this._enableVelocity||this._enableVelocityLinear)&&O.setMatrices("mPreviousBones",this._previousBonesTransformationMatrices[x.uniqueId])}Vn(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,(N,U)=>{N||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 qe("GeometryBufferRendererSceneComponent")}});var ZY,Fhe,zD=M(()=>{G();ed();kg();ZY="openpbrUboDeclaration",Fhe=`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[YD]||(A.ShadersStoreWGSL[YD]=KY);Yhe={name:YD,shader:KY}});var ZY,KD,ls,QY=M(()=>{Ge();ki();Gr();mY();zt();hn();Wn();BD();VD();Oa();fl();kn();yD();ZY=["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"];If(KD,ZY,!0);Un(KD);ls=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(()=>(UY(),BY)),Promise.resolve().then(()=>(qY(),jY))])):await Promise.all([Promise.resolve().then(()=>(VD(),NY)),Promise.resolve().then(()=>(BD(),MY))]),this._shadersLoaded=!0}isReady(e,t){if(!this._shadersLoaded)return!1;let i=e.getMaterial();if(i&&i.disableDepthWrite)return!1;let r=[],s=[D.PositionKind],a=e.getMesh();a.isVerticesDataPresent(D.NormalKind)&&(r.push("#define HAS_NORMAL_ATTRIBUTE"),s.push(D.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(D.UVKind)&&(s.push(D.UVKind),r.push("#define UV1"),l=!0),a.isVerticesDataPresent(D.UV2Kind)&&(s.push(D.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),bf(_,_.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(D.MatricesIndicesKind),s.push(D.MatricesWeightsKind),a.numBoneInfluencers>4&&(s.push(D.MatricesIndicesExtraKind),s.push(D.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?hl(a.morphTargetManager,r,s,a,!0,!0,!1,l,c,f):0;t&&(r.push("#define INSTANCES"),vo(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),cl(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:ZY,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=ve.CLAMP_ADDRESSMODE,this._multiRenderTarget.wrapV=ve.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 L=x.skeleton.getTransformMatrices(x);this._previousBonesTransformationMatrices[x.uniqueId]=this._copyBonesTransformationMatrices(L,new Float32Array(L.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 L=v._getDrawWrapper();if(!L)return;let O=L.effect;S.enableEffect(L),C||x._bind(v,O,R.fillMode),this._useUbo?(Rf(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 N=T._getWorldMatrixDeterminant();V=R._getEffectiveOrientation(x),N<0&&(V=V===Ee.ClockWiseSideOrientation?Ee.CounterClockWiseSideOrientation:Ee.ClockWiseSideOrientation)}else V=x._effectiveSideOrientation;if(R._preBind(L,V),R.needAlphaTestingForMesh(T)){let N=R.getAlphaTestTexture();N&&(O.setTexture("diffuseSampler",N),O.setMatrix("diffuseMatrix",N.getTextureMatrix()))}if((R.bumpTexture||R.normalTexture||R.geometryNormalTexture)&&E.getEngine().getCaps().standardDerivatives&&ce.BumpTextureEnabled){let N=R.bumpTexture||R.normalTexture||R.geometryNormalTexture;O.setFloat3("vBumpInfos",N.coordinatesIndex,1/N.level,R.parallaxScaleBias),O.setMatrix("bumpMatrix",N.getTextureMatrix()),O.setTexture("bumpSampler",N),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 N=R;N._useRoughnessFromMetallicTextureGreen&&N.baseMetalnessTexture?(O.setTexture("reflectivitySampler",N.baseMetalnessTexture),O.setMatrix("reflectivityMatrix",N.baseMetalnessTexture.getTextureMatrix())):N.baseMetalnessTexture?(O.setTexture("metallicSampler",N.baseMetalnessTexture),O.setMatrix("metallicMatrix",N.baseMetalnessTexture.getTextureMatrix())):N.specularRoughnessTexture&&(O.setTexture("roughnessSampler",N.specularRoughnessTexture),O.setMatrix("roughnessMatrix",N.specularRoughnessTexture.getTextureMatrix())),O.setFloat("metallic",N.baseMetalness),O.setFloat("glossiness",1-N.specularRoughness),N.baseColorTexture!==null&&(O.setTexture("albedoSampler",N.baseColorTexture),O.setMatrix("albedoMatrix",N.baseColorTexture.getTextureMatrix())),N.baseColor!==null&&O.setColor3("albedoColor",N.baseColor)}}if(this._enableIrradiance&&E.environmentTexture){let N=E.environmentTexture,U=E.postProcessRenderPipelineManager.supportedPipelines.find(H=>H.getClassName()==="IBLShadowsRenderPipeline");if(U){let ee=U._getAccumulatedTexture();ee&&(O.setTexture("iblShadowSampler",ee),O.setFloat2("shadowTextureSize",ee.getSize().width,ee.getSize().height))}if(O.setMatrix("reflectionMatrix",N.getReflectionTextureMatrix()),O.setFloat2("vReflectionInfos",N.level*E.iblIntensity,0),O.setTexture("reflectionSampler",N),N.irradianceTexture&&(O.setTexture("irradianceSampler",N.irradianceTexture),N.irradianceTexture._dominantDirection&&O.setVector3("vReflectionDominantDirection",N.irradianceTexture._dominantDirection)),N.sphericalPolynomial){let H=N.sphericalPolynomial;if(H.preScaledHarmonics){let ee=H.preScaledHarmonics;O.setVector3("vSphericalL00",ee.l00),O.setVector3("vSphericalL1_1",ee.l1_1),O.setVector3("vSphericalL10",ee.l10),O.setVector3("vSphericalL11",ee.l11),O.setVector3("vSphericalL2_2",ee.l2_2),O.setVector3("vSphericalL2_1",ee.l2_1),O.setVector3("vSphericalL20",ee.l20),O.setVector3("vSphericalL21",ee.l21),O.setVector3("vSphericalL22",ee.l22)}else O.setFloat3("vSphericalX",H.x.x,H.x.y,H.x.z),O.setFloat3("vSphericalY",H.y.x,H.y.y,H.y.z),O.setFloat3("vSphericalZ",H.z.x,H.z.y,H.z.z),O.setFloat3("vSphericalXX_ZZ",H.xx.x-H.zz.x,H.xx.y-H.zz.y,H.xx.z-H.zz.z),O.setFloat3("vSphericalYY_ZZ",H.yy.x-H.zz.x,H.yy.y-H.zz.y,H.yy.z-H.zz.z),O.setFloat3("vSphericalZZ",H.zz.x,H.zz.y,H.zz.z),O.setFloat3("vSphericalXY",H.xy.x,H.xy.y,H.xy.z),O.setFloat3("vSphericalYZ",H.yz.x,H.yz.y,H.yz.z),O.setFloat3("vSphericalZX",H.zx.x,H.zx.y,H.zx.z)}if(this.generateIrradianceWithScatterMask&&R.getClassName()==="OpenPBRMaterial"){let H=R;O.setFloat("vSubsurfaceWeight",H.subsurfaceWeight),H.subsurfaceWeightTexture&&(O.setTexture("subsurfaceWeightSampler",H.subsurfaceWeightTexture),O.setMatrix("subsurfaceWeightMatrix",H.subsurfaceWeightTexture.getTextureMatrix())),O.setFloat("vTransmissionWeight",H.transmissionWeight),H.transmissionWeightTexture&&(O.setTexture("transmissionWeightSampler",H.transmissionWeightTexture),O.setMatrix("transmissionWeightMatrix",H.transmissionWeightTexture.getTextureMatrix())),O.setFloat("vTransmissionScatterAnisotropy",H.transmissionScatterAnisotropy),O.setFloat("vSubsurfaceScatterAnisotropy",H.subsurfaceScatterAnisotropy)}}if(Vn(O,R,this._scene),x.useBones&&x.computeBonesUsingShaders&&x.skeleton){let N=x.skeleton;if(N.isUsingTextureForMatrices&&O.getUniformIndex("boneTextureInfo")>-1){let U=N.getTransformMatrixTexture(x);O.setTexture("boneSampler",U),O.setFloat2("boneTextureInfo",N._textureWidth,N._textureHeight)}else O.setMatrices("mBones",x.skeleton.getTransformMatrices(x));(this._enableVelocity||this._enableVelocityLinear)&&O.setMatrices("mPreviousBones",this._previousBonesTransformationMatrices[x.uniqueId])}Gn(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,(N,U)=>{N||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 qe("GeometryBufferRendererSceneComponent")}});var $Y,Khe,jD=M(()=>{G();rd();Xg();$Y="openpbrUboDeclaration",Khe=`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 -`;A.IncludesShadersStoreWGSL[ZY]||(A.IncludesShadersStoreWGSL[ZY]=Fhe)});var QY,Bhe,$Y=M(()=>{G();QY="openpbrNormalMapVertexDeclaration",Bhe=`#if defined(GEOMETRY_NORMAL) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) || defined(FUZZ) +`;A.IncludesShadersStoreWGSL[$Y]||(A.IncludesShadersStoreWGSL[$Y]=Khe)});var JY,jhe,e8=M(()=>{G();JY="openpbrNormalMapVertexDeclaration",jhe=`#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 -`;A.IncludesShadersStoreWGSL[QY]||(A.IncludesShadersStoreWGSL[QY]=Bhe)});var JY,Uhe,e8=M(()=>{G();JY="openpbrNormalMapVertex",Uhe=`#if defined(GEOMETRY_NORMAL) || defined(PARALLAX) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) || defined(FUZZ) +`;A.IncludesShadersStoreWGSL[JY]||(A.IncludesShadersStoreWGSL[JY]=jhe)});var t8,qhe,i8=M(()=>{G();t8="openpbrNormalMapVertex",qhe=`#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 -`;A.IncludesShadersStoreWGSL[JY]||(A.IncludesShadersStoreWGSL[JY]=Uhe)});var i8={};tt(i8,{openpbrVertexShaderWGSL:()=>Vhe});var XD,t8,Vhe,r8=M(()=>{G();zD();Rx();Zm();Pa();op();sc();ac();wf();bx();Ix();ap();$Y();oc();Ig();Mx();Uf();Vf();td();Cx();yx();Gf();kf();lc();cc();fc();Px();Lx();Dx();e8();hc();Mg();Nx();Cg();wx();XD="openpbrVertexShader",t8=`#define OPENPBR_VERTEX_SHADER +`;A.IncludesShadersStoreWGSL[t8]||(A.IncludesShadersStoreWGSL[t8]=qhe)});var n8={};tt(n8,{openpbrVertexShaderWGSL:()=>Zhe});var qD,r8,Zhe,s8=M(()=>{G();jD();yx();Qm();Pa();lp();oc();lc();Ff();Px();Lx();op();e8();cc();Pg();Dx();Vf();Gf();nd();Ox();Nx();kf();Wf();fc();hc();dc();wx();Fx();Bx();i8();uc();Lg();Vx();Dg();Gx();qD="openpbrVertexShader",r8=`#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 -}`;A.ShadersStoreWGSL[XD]||(A.ShadersStoreWGSL[XD]=t8);Vhe={name:XD,shader:t8}});var n8,Ghe,YD=M(()=>{G();Zm();n8="pbrFragmentExtraDeclaration",Ghe=`varying vPositionW: vec3f; +}`;A.ShadersStoreWGSL[qD]||(A.ShadersStoreWGSL[qD]=r8);Zhe={name:qD,shader:r8}});var a8,Qhe,ZD=M(()=>{G();Qm();a8="pbrFragmentExtraDeclaration",Qhe=`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 -`;A.IncludesShadersStoreWGSL[n8]||(A.IncludesShadersStoreWGSL[n8]=Ghe)});var s8,khe,a8=M(()=>{G();id();jR();s8="openpbrFragmentSamplersDeclaration",khe=`#include(_DEFINENAME_,BASE_COLOR,_VARYINGNAME_,BaseColor,_SAMPLERNAME_,baseColor) +`;A.IncludesShadersStoreWGSL[a8]||(A.IncludesShadersStoreWGSL[a8]=Qhe)});var o8,$he,l8=M(()=>{G();sd();JR();o8="openpbrFragmentSamplersDeclaration",$he=`#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 -`;A.IncludesShadersStoreWGSL[s8]||(A.IncludesShadersStoreWGSL[s8]=khe)});var o8,Whe,KD=M(()=>{G();o8="subSurfaceScatteringFunctions",Whe=`fn testLightingForSSS(diffusionProfile: f32)->bool -{return diffusionProfile<1.;}`;A.IncludesShadersStoreWGSL[o8]||(A.IncludesShadersStoreWGSL[o8]=Whe)});var l8,Hhe,jD=M(()=>{G();l8="importanceSampling",Hhe=`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[o8]||(A.IncludesShadersStoreWGSL[o8]=$he)});var c8,Jhe,QD=M(()=>{G();c8="subSurfaceScatteringFunctions",Jhe=`fn testLightingForSSS(diffusionProfile: f32)->bool +{return diffusionProfile<1.;}`;A.IncludesShadersStoreWGSL[c8]||(A.IncludesShadersStoreWGSL[c8]=Jhe)});var f8,ede,$D=M(()=>{G();f8="importanceSampling",ede=`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);}`;A.IncludesShadersStoreWGSL[l8]||(A.IncludesShadersStoreWGSL[l8]=Hhe)});var c8,zhe,qD=M(()=>{G();c8="pbrHelperFunctions",zhe=`#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[f8]||(A.IncludesShadersStoreWGSL[f8]=ede)});var h8,tde,JD=M(()=>{G();h8="pbrHelperFunctions",tde=`#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 -`;A.IncludesShadersStoreWGSL[c8]||(A.IncludesShadersStoreWGSL[c8]=zhe)});var f8,Xhe,ZD=M(()=>{G();nL();f8="pbrDirectLightingSetupFunctions",Xhe=`struct preLightingInfo +`;A.IncludesShadersStoreWGSL[h8]||(A.IncludesShadersStoreWGSL[h8]=tde)});var d8,ide,eO=M(()=>{G();lL();d8="pbrDirectLightingSetupFunctions",ide=`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 -`;A.IncludesShadersStoreWGSL[f8]||(A.IncludesShadersStoreWGSL[f8]=Xhe)});var h8,Yhe,QD=M(()=>{G();h8="pbrDirectLightingFalloffFunctions",Yhe=`fn computeDistanceLightFalloff_Standard(lightOffset: vec3f,range: f32)->f32 +`;A.IncludesShadersStoreWGSL[d8]||(A.IncludesShadersStoreWGSL[d8]=ide)});var u8,rde,tO=M(()=>{G();u8="pbrDirectLightingFalloffFunctions",rde=`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 -}`;A.IncludesShadersStoreWGSL[h8]||(A.IncludesShadersStoreWGSL[h8]=Yhe)});var d8,Khe,$D=M(()=>{G();d8="hdrFilteringFunctions",Khe=`#ifdef NUM_SAMPLES +}`;A.IncludesShadersStoreWGSL[u8]||(A.IncludesShadersStoreWGSL[u8]=rde)});var m8,nde,iO=M(()=>{G();m8="hdrFilteringFunctions",nde=`#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 -`;A.IncludesShadersStoreWGSL[d8]||(A.IncludesShadersStoreWGSL[d8]=Khe)});var u8,jhe,JD=M(()=>{G();u8="pbrBlockReflectance0",jhe=`var reflectanceF0: f32=reflectivityOut.reflectanceF0;var specularEnvironmentR0: vec3f=reflectivityOut.colorReflectanceF0;var specularEnvironmentR90: vec3f= reflectivityOut.reflectanceF90; +`;A.IncludesShadersStoreWGSL[m8]||(A.IncludesShadersStoreWGSL[m8]=nde)});var p8,sde,rO=M(()=>{G();p8="pbrBlockReflectance0",sde=`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 -`;A.IncludesShadersStoreWGSL[u8]||(A.IncludesShadersStoreWGSL[u8]=jhe)});var m8,qhe,eO=M(()=>{G();sL();JD();m8="pbrDirectLightingFunctions",qhe=`#define CLEARCOATREFLECTANCE90 1.0 +`;A.IncludesShadersStoreWGSL[p8]||(A.IncludesShadersStoreWGSL[p8]=sde)});var _8,ade,nO=M(()=>{G();cL();rO();_8="pbrDirectLightingFunctions",ade=`#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 -`;A.IncludesShadersStoreWGSL[m8]||(A.IncludesShadersStoreWGSL[m8]=qhe)});var p8,Zhe,_8=M(()=>{G();p8="openpbrNormalMapFragmentMainFunctions",Zhe=`#if defined(GEOMETRY_NORMAL) || defined(GEOMETRY_COAT_NORMAL) || defined(ANISOTROPIC) || defined(FUZZ) || defined(DETAIL) +`;A.IncludesShadersStoreWGSL[_8]||(A.IncludesShadersStoreWGSL[_8]=ade)});var g8,ode,v8=M(()=>{G();g8="openpbrNormalMapFragmentMainFunctions",ode=`#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 -`;A.IncludesShadersStoreWGSL[p8]||(A.IncludesShadersStoreWGSL[p8]=Zhe)});var g8,Qhe,v8=M(()=>{G();id();g8="openpbrNormalMapFragmentFunctions",Qhe=`#if defined(GEOMETRY_NORMAL) +`;A.IncludesShadersStoreWGSL[g8]||(A.IncludesShadersStoreWGSL[g8]=ode)});var E8,lde,S8=M(()=>{G();sd();E8="openpbrNormalMapFragmentFunctions",lde=`#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 -`;A.IncludesShadersStoreWGSL[g8]||(A.IncludesShadersStoreWGSL[g8]=Qhe)});var E8,$he,S8=M(()=>{G();E8="openpbrConductorReflectance",$he=`#define pbr_inline +`;A.IncludesShadersStoreWGSL[E8]||(A.IncludesShadersStoreWGSL[E8]=lde)});var T8,cde,A8=M(()=>{G();T8="openpbrConductorReflectance",cde=`#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;}`;A.IncludesShadersStoreWGSL[E8]||(A.IncludesShadersStoreWGSL[E8]=$he)});var T8,Jhe,A8=M(()=>{G();T8="openpbrAmbientOcclusionFunctions",Jhe=`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[T8]||(A.IncludesShadersStoreWGSL[T8]=cde)});var x8,fde,R8=M(()=>{G();x8="openpbrAmbientOcclusionFunctions",fde=`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));} -`;A.IncludesShadersStoreWGSL[T8]||(A.IncludesShadersStoreWGSL[T8]=Jhe)});var x8,ede,R8=M(()=>{G();x8="openpbrVolumeFunctions",ede=`struct OpenPBRHomogeneousVolume {extinction_coeff: vec3f, +`;A.IncludesShadersStoreWGSL[x8]||(A.IncludesShadersStoreWGSL[x8]=fde)});var b8,hde,I8=M(()=>{G();b8="openpbrVolumeFunctions",hde=`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));} -`;A.IncludesShadersStoreWGSL[x8]||(A.IncludesShadersStoreWGSL[x8]=ede)});var b8,tde,tO=M(()=>{G();b8="pbrBlockNormalGeometric",tde=`var viewDirectionW: vec3f=normalize(scene.vEyePosition.xyz-input.vPositionW); +`;A.IncludesShadersStoreWGSL[b8]||(A.IncludesShadersStoreWGSL[b8]=hde)});var M8,dde,sO=M(()=>{G();M8="pbrBlockNormalGeometric",dde=`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 -`;A.IncludesShadersStoreWGSL[b8]||(A.IncludesShadersStoreWGSL[b8]=tde)});var I8,ide,M8=M(()=>{G();I8="openpbrNormalMapFragment",ide=`var uvOffset: vec2f= vec2f(0.0,0.0); +`;A.IncludesShadersStoreWGSL[M8]||(A.IncludesShadersStoreWGSL[M8]=dde)});var C8,ude,y8=M(()=>{G();C8="openpbrNormalMapFragment",ude=`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 -`;A.IncludesShadersStoreWGSL[I8]||(A.IncludesShadersStoreWGSL[I8]=ide)});var C8,rde,y8=M(()=>{G();C8="openpbrBlockNormalFinal",rde=`#if defined(FORCENORMALFORWARD) && defined(NORMAL) +`;A.IncludesShadersStoreWGSL[C8]||(A.IncludesShadersStoreWGSL[C8]=ude)});var P8,mde,L8=M(()=>{G();P8="openpbrBlockNormalFinal",mde=`#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 -`;A.IncludesShadersStoreWGSL[C8]||(A.IncludesShadersStoreWGSL[C8]=rde)});var P8,nde,L8=M(()=>{G();P8="openpbrBaseLayerData",nde=`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[P8]||(A.IncludesShadersStoreWGSL[P8]=mde)});var D8,pde,O8=M(()=>{G();D8="openpbrBaseLayerData",pde=`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 -`;A.IncludesShadersStoreWGSL[P8]||(A.IncludesShadersStoreWGSL[P8]=nde)});var D8,sde,O8=M(()=>{G();D8="openpbrCoatLayerData",sde=`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[D8]||(A.IncludesShadersStoreWGSL[D8]=pde)});var N8,_de,w8=M(()=>{G();N8="openpbrCoatLayerData",_de=`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 -`;A.IncludesShadersStoreWGSL[D8]||(A.IncludesShadersStoreWGSL[D8]=sde)});var N8,ade,w8=M(()=>{G();N8="openpbrThinFilmLayerData",ade=`#ifdef THIN_FILM +`;A.IncludesShadersStoreWGSL[N8]||(A.IncludesShadersStoreWGSL[N8]=_de)});var F8,gde,B8=M(()=>{G();F8="openpbrThinFilmLayerData",gde=`#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 -`;A.IncludesShadersStoreWGSL[N8]||(A.IncludesShadersStoreWGSL[N8]=ade)});var F8,ode,B8=M(()=>{G();F8="openpbrFuzzLayerData",ode=`var fuzz_weight: f32=0.0f;var fuzz_color: vec3f=vec3f(1.0f);var fuzz_roughness: f32=0.0f; +`;A.IncludesShadersStoreWGSL[F8]||(A.IncludesShadersStoreWGSL[F8]=gde)});var U8,vde,V8=M(()=>{G();U8="openpbrFuzzLayerData",vde=`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 -`;A.IncludesShadersStoreWGSL[F8]||(A.IncludesShadersStoreWGSL[F8]=ode)});var U8,lde,V8=M(()=>{G();U8="openpbrAmbientOcclusionData",lde=`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[U8]||(A.IncludesShadersStoreWGSL[U8]=vde)});var G8,Ede,k8=M(()=>{G();G8="openpbrAmbientOcclusionData",Ede=`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 -`;A.IncludesShadersStoreWGSL[U8]||(A.IncludesShadersStoreWGSL[U8]=lde)});var G8,cde,k8=M(()=>{G();G8="openpbrBackgroundTransmission",cde=`var slab_translucent_background: vec4f=vec4f(0.,0.,0.,1.); +`;A.IncludesShadersStoreWGSL[G8]||(A.IncludesShadersStoreWGSL[G8]=Ede)});var W8,Sde,H8=M(()=>{G();W8="openpbrBackgroundTransmission",Sde=`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 -`;A.IncludesShadersStoreWGSL[G8]||(A.IncludesShadersStoreWGSL[G8]=cde)});var W8,fde,H8=M(()=>{G();W8="openpbrEnvironmentLighting",fde=`#if defined(REFLECTION) || defined(REFRACTED_BACKGROUND) +`;A.IncludesShadersStoreWGSL[W8]||(A.IncludesShadersStoreWGSL[W8]=Sde)});var z8,Tde,X8=M(()=>{G();z8="openpbrEnvironmentLighting",Tde=`#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 -`;A.IncludesShadersStoreWGSL[W8]||(A.IncludesShadersStoreWGSL[W8]=fde)});var z8,hde,X8=M(()=>{G();z8="openpbrDirectLightingInit",hde=`#ifdef LIGHT{X} +`;A.IncludesShadersStoreWGSL[z8]||(A.IncludesShadersStoreWGSL[z8]=Tde)});var Y8,Ade,K8=M(()=>{G();Y8="openpbrDirectLightingInit",Ade=`#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 -`;A.IncludesShadersStoreWGSL[z8]||(A.IncludesShadersStoreWGSL[z8]=hde)});var Y8,dde,K8=M(()=>{G();Y8="openpbrDirectLighting",dde=`#ifdef LIGHT{X} +`;A.IncludesShadersStoreWGSL[Y8]||(A.IncludesShadersStoreWGSL[Y8]=Ade)});var j8,xde,q8=M(()=>{G();j8="openpbrDirectLighting",xde=`#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 -`;A.IncludesShadersStoreWGSL[Y8]||(A.IncludesShadersStoreWGSL[Y8]=dde)});var j8,ude,iO=M(()=>{G();j8="pbrBlockImageProcessing",ude=`#if defined(IMAGEPROCESSINGPOSTPROCESS) || defined(SS_SCATTERING) +`;A.IncludesShadersStoreWGSL[j8]||(A.IncludesShadersStoreWGSL[j8]=xde)});var Z8,Rde,aO=M(()=>{G();Z8="pbrBlockImageProcessing",Rde=`#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 -`;A.IncludesShadersStoreWGSL[j8]||(A.IncludesShadersStoreWGSL[j8]=ude)});var q8,mde,Z8=M(()=>{G();q8="openpbrBlockPrePass",mde=`#if SCENE_MRT_COUNT>0 +`;A.IncludesShadersStoreWGSL[Z8]||(A.IncludesShadersStoreWGSL[Z8]=Rde)});var Q8,bde,$8=M(()=>{G();Q8="openpbrBlockPrePass",bde=`#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 -`;A.IncludesShadersStoreWGSL[q8]||(A.IncludesShadersStoreWGSL[q8]=mde)});var Q8,pde,rO=M(()=>{G();Q8="pbrDebug",pde=`#if DEBUGMODE>0 +`;A.IncludesShadersStoreWGSL[Q8]||(A.IncludesShadersStoreWGSL[Q8]=bde)});var J8,Ide,oO=M(()=>{G();J8="pbrDebug",Ide=`#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 -`;A.IncludesShadersStoreWGSL[Q8]||(A.IncludesShadersStoreWGSL[Q8]=pde)});var J8={};tt(J8,{openpbrPixelShaderWGSL:()=>_de});var nO,$8,_de,e6=M(()=>{G();Fx();Bx();zD();YD();Ux();a8();Gx();dc();td();yg();Pa();KD();jD();qD();kx();Vx();ap();ZD();QD();op();$D();eO();qR();_8();v8();Wg();BD();S8();A8();UD();VD();R8();uc();tO();M8();y8();L8();kD();GD();O8();w8();B8();V8();Xx();k8();H8();X8();K8();Yx();Pg();iO();Z8();Kx();rO();nO="openpbrPixelShader",$8=`#define OPENPBR_FRAGMENT_SHADER +`;A.IncludesShadersStoreWGSL[J8]||(A.IncludesShadersStoreWGSL[J8]=Ide)});var t6={};tt(t6,{openpbrPixelShaderWGSL:()=>Mde});var lO,e6,Mde,i6=M(()=>{G();kx();Wx();jD();ZD();Hx();l8();Xx();mc();nd();Og();Pa();QD();$D();JD();Yx();zx();op();eO();tO();lp();iO();nO();eb();v8();S8();Yg();kD();A8();R8();WD();HD();I8();pc();sO();y8();L8();O8();XD();zD();w8();B8();V8();k8();Zx();H8();X8();K8();q8();Qx();Ng();aO();$8();$x();oO();lO="openpbrPixelShader",e6=`#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 } -`;A.ShadersStoreWGSL[nO]||(A.ShadersStoreWGSL[nO]=$8);_de={name:nO,shader:$8}});var t6,gde,i6=M(()=>{G();GL();jx();t6="openpbrVertexDeclaration",gde=`#include +`;A.ShadersStoreWGSL[lO]||(A.ShadersStoreWGSL[lO]=e6);Mde={name:lO,shader:e6}});var r6,Cde,n6=M(()=>{G();zL();Jx();r6="openpbrVertexDeclaration",Cde=`#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 -`;A.IncludesShadersStore[t6]||(A.IncludesShadersStore[t6]=gde)});var r6,vde,sO=M(()=>{G();rd();Hg();r6="openpbrUboDeclaration",vde=`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[r6]||(A.IncludesShadersStore[r6]=Cde)});var s6,yde,cO=M(()=>{G();ad();Kg();s6="openpbrUboDeclaration",yde=`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 -`;A.IncludesShadersStore[r6]||(A.IncludesShadersStore[r6]=vde)});var n6,Ede,s6=M(()=>{G();n6="openpbrNormalMapVertexDeclaration",Ede=`#if defined(GEOMETRY_NORMAL) || defined(PARALLAX) || defined(GEOMETRY_COAT_NORMAL) || defined(ANISOTROPIC) || defined(FUZZ) +`;A.IncludesShadersStore[s6]||(A.IncludesShadersStore[s6]=yde)});var a6,Pde,o6=M(()=>{G();a6="openpbrNormalMapVertexDeclaration",Pde=`#if defined(GEOMETRY_NORMAL) || defined(PARALLAX) || defined(GEOMETRY_COAT_NORMAL) || defined(ANISOTROPIC) || defined(FUZZ) #if defined(TANGENT) && defined(NORMAL) varying mat3 vTBN; #endif #endif -`;A.IncludesShadersStore[n6]||(A.IncludesShadersStore[n6]=Ede)});var a6,Sde,o6=M(()=>{G();a6="openpbrNormalMapVertex",Sde=`#if defined(GEOMETRY_NORMAL) || defined(PARALLAX) || defined(GEOMETRY_COAT_NORMAL) || defined(ANISOTROPIC) || defined(FUZZ) +`;A.IncludesShadersStore[a6]||(A.IncludesShadersStore[a6]=Pde)});var l6,Lde,c6=M(()=>{G();l6="openpbrNormalMapVertex",Lde=`#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 -`;A.IncludesShadersStore[a6]||(A.IncludesShadersStore[a6]=Sde)});var c6={};tt(c6,{openpbrVertexShader:()=>Tde});var aO,l6,Tde,f6=M(()=>{G();i6();sO();qx();Qm();La();np();mc();pc();Ff();Zx();Qx();sp();s6();_c();Lg();$x();Jx();Wf();Hf();nd();zf();Xf();gc();vc();Ec();eR();tR();iR();o6();Sc();Dg();nR();Og();sR();aO="openpbrVertexShader",l6=`#define OPENPBR_VERTEX_SHADER +`;A.IncludesShadersStore[l6]||(A.IncludesShadersStore[l6]=Lde)});var h6={};tt(h6,{openpbrVertexShader:()=>Dde});var fO,f6,Dde,d6=M(()=>{G();n6();cO();eR();$m();La();sp();_c();gc();Bf();tR();iR();ap();o6();vc();wg();rR();nR();Hf();zf();od();Xf();Yf();Ec();Sc();Tc();sR();aR();oR();c6();Ac();Fg();cR();Bg();fR();fO="openpbrVertexShader",f6=`#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 } -`;A.ShadersStore[aO]||(A.ShadersStore[aO]=l6);Tde={name:aO,shader:l6}});var h6,Ade,d6=M(()=>{G();ID();aR();h6="openpbrFragmentDeclaration",Ade=`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[fO]||(A.ShadersStore[fO]=f6);Dde={name:fO,shader:f6}});var u6,Ode,m6=M(()=>{G();PD();hR();u6="openpbrFragmentDeclaration",Ode=`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 -`;A.IncludesShadersStore[h6]||(A.IncludesShadersStore[h6]=Ade)});var u6,xde,oO=M(()=>{G();Qm();u6="pbrFragmentExtraDeclaration",xde=`varying vec3 vPositionW; +`;A.IncludesShadersStore[u6]||(A.IncludesShadersStore[u6]=Ode)});var p6,Nde,hO=M(()=>{G();$m();p6="pbrFragmentExtraDeclaration",Nde=`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 -`;A.IncludesShadersStore[u6]||(A.IncludesShadersStore[u6]=xde)});var m6,Rde,p6=M(()=>{G();sd();YR();m6="openpbrFragmentSamplersDeclaration",Rde=`#include(_DEFINENAME_,BASE_COLOR,_VARYINGNAME_,BaseColor,_SAMPLERNAME_,baseColor) +`;A.IncludesShadersStore[p6]||(A.IncludesShadersStore[p6]=Nde)});var _6,wde,g6=M(()=>{G();ld();QR();_6="openpbrFragmentSamplersDeclaration",wde=`#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 -`;A.IncludesShadersStore[m6]||(A.IncludesShadersStore[m6]=Rde)});var _6,bde,lO=M(()=>{G();_6="subSurfaceScatteringFunctions",bde=`bool testLightingForSSS(float diffusionProfile) -{return diffusionProfile<1.;}`;A.IncludesShadersStore[_6]||(A.IncludesShadersStore[_6]=bde)});var g6,Ide,cO=M(()=>{G();g6="importanceSampling",Ide=`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[_6]||(A.IncludesShadersStore[_6]=wde)});var v6,Fde,dO=M(()=>{G();v6="subSurfaceScatteringFunctions",Fde=`bool testLightingForSSS(float diffusionProfile) +{return diffusionProfile<1.;}`;A.IncludesShadersStore[v6]||(A.IncludesShadersStore[v6]=Fde)});var E6,Bde,uO=M(()=>{G();E6="importanceSampling",Bde=`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);}`;A.IncludesShadersStore[g6]||(A.IncludesShadersStore[g6]=Ide)});var v6,Mde,fO=M(()=>{G();v6="pbrHelperFunctions",Mde=`#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[E6]||(A.IncludesShadersStore[E6]=Bde)});var S6,Ude,mO=M(()=>{G();S6="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 -`;A.IncludesShadersStore[v6]||(A.IncludesShadersStore[v6]=Mde)});var E6,Cde,hO=M(()=>{G();uL();E6="pbrDirectLightingSetupFunctions",Cde=`struct preLightingInfo +`;A.IncludesShadersStore[S6]||(A.IncludesShadersStore[S6]=Ude)});var T6,Vde,pO=M(()=>{G();gL();T6="pbrDirectLightingSetupFunctions",Vde=`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 -`;A.IncludesShadersStore[E6]||(A.IncludesShadersStore[E6]=Cde)});var S6,yde,dO=M(()=>{G();S6="pbrDirectLightingFalloffFunctions",yde=`float computeDistanceLightFalloff_Standard(vec3 lightOffset,float range) +`;A.IncludesShadersStore[T6]||(A.IncludesShadersStore[T6]=Vde)});var A6,Gde,_O=M(()=>{G();A6="pbrDirectLightingFalloffFunctions",Gde=`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 -}`;A.IncludesShadersStore[S6]||(A.IncludesShadersStore[S6]=yde)});var T6,Pde,uO=M(()=>{G();T6="hdrFilteringFunctions",Pde=`#if NUM_SAMPLES +}`;A.IncludesShadersStore[A6]||(A.IncludesShadersStore[A6]=Gde)});var x6,kde,gO=M(()=>{G();x6="hdrFilteringFunctions",kde=`#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 -`;A.IncludesShadersStore[T6]||(A.IncludesShadersStore[T6]=Pde)});var A6,Lde,mO=M(()=>{G();A6="pbrDirectLightingFunctions",Lde=`#define CLEARCOATREFLECTANCE90 1.0 +`;A.IncludesShadersStore[x6]||(A.IncludesShadersStore[x6]=kde)});var R6,Wde,vO=M(()=>{G();R6="pbrDirectLightingFunctions",Wde=`#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 -`;A.IncludesShadersStore[A6]||(A.IncludesShadersStore[A6]=Lde)});var x6,Dde,R6=M(()=>{G();x6="openpbrNormalMapFragmentMainFunctions",Dde=`#if defined(GEOMETRY_NORMAL) || defined(GEOMETRY_COAT_NORMAL) || defined(ANISOTROPIC) || defined(FUZZ) || defined(DETAIL) +`;A.IncludesShadersStore[R6]||(A.IncludesShadersStore[R6]=Wde)});var b6,Hde,I6=M(()=>{G();b6="openpbrNormalMapFragmentMainFunctions",Hde=`#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 -`;A.IncludesShadersStore[x6]||(A.IncludesShadersStore[x6]=Dde)});var b6,Ode,I6=M(()=>{G();sd();b6="openpbrNormalMapFragmentFunctions",Ode=`#if defined(GEOMETRY_NORMAL) +`;A.IncludesShadersStore[b6]||(A.IncludesShadersStore[b6]=Hde)});var M6,zde,C6=M(()=>{G();ld();M6="openpbrNormalMapFragmentFunctions",zde=`#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 -`;A.IncludesShadersStore[b6]||(A.IncludesShadersStore[b6]=Ode)});var M6,Nde,C6=M(()=>{G();M6="openpbrConductorReflectance",Nde=`#define pbr_inline +`;A.IncludesShadersStore[M6]||(A.IncludesShadersStore[M6]=zde)});var y6,Xde,P6=M(()=>{G();y6="openpbrConductorReflectance",Xde=`#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;}`;A.IncludesShadersStore[M6]||(A.IncludesShadersStore[M6]=Nde)});var y6,wde,P6=M(()=>{G();y6="openpbrAmbientOcclusionFunctions",wde=`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[y6]||(A.IncludesShadersStore[y6]=Xde)});var L6,Yde,D6=M(()=>{G();L6="openpbrAmbientOcclusionFunctions",Yde=`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));} -`;A.IncludesShadersStore[y6]||(A.IncludesShadersStore[y6]=wde)});var L6,Fde,D6=M(()=>{G();L6="openpbrVolumeFunctions",Fde=`struct OpenPBRHomogeneousVolume {vec3 extinction_coeff; +`;A.IncludesShadersStore[L6]||(A.IncludesShadersStore[L6]=Yde)});var O6,Kde,N6=M(()=>{G();O6="openpbrVolumeFunctions",Kde=`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);}`;A.IncludesShadersStore[L6]||(A.IncludesShadersStore[L6]=Fde)});var O6,Bde,pO=M(()=>{G();O6="pbrBlockNormalGeometric",Bde=`vec3 viewDirectionW=normalize(vEyePosition.xyz-vPositionW); +weight_sum.b<1e-5f ? unconvolved_irradiance.b : irradiance_sum.b/weight_sum.b);}`;A.IncludesShadersStore[O6]||(A.IncludesShadersStore[O6]=Kde)});var w6,jde,EO=M(()=>{G();w6="pbrBlockNormalGeometric",jde=`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 -`;A.IncludesShadersStore[O6]||(A.IncludesShadersStore[O6]=Bde)});var N6,Ude,w6=M(()=>{G();N6="openpbrNormalMapFragment",Ude=`vec2 uvOffset=vec2(0.0,0.0); +`;A.IncludesShadersStore[w6]||(A.IncludesShadersStore[w6]=jde)});var F6,qde,B6=M(()=>{G();F6="openpbrNormalMapFragment",qde=`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 -`;A.IncludesShadersStore[N6]||(A.IncludesShadersStore[N6]=Ude)});var F6,Vde,B6=M(()=>{G();F6="openpbrBlockNormalFinal",Vde=`#if defined(FORCENORMALFORWARD) && defined(NORMAL) +`;A.IncludesShadersStore[F6]||(A.IncludesShadersStore[F6]=qde)});var U6,Zde,V6=M(()=>{G();U6="openpbrBlockNormalFinal",Zde=`#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 -`;A.IncludesShadersStore[F6]||(A.IncludesShadersStore[F6]=Vde)});var U6,Gde,V6=M(()=>{G();U6="openpbrBaseLayerData",Gde=`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[U6]||(A.IncludesShadersStore[U6]=Zde)});var G6,Qde,k6=M(()=>{G();G6="openpbrBaseLayerData",Qde=`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 -`;A.IncludesShadersStore[U6]||(A.IncludesShadersStore[U6]=Gde)});var G6,kde,k6=M(()=>{G();G6="openpbrCoatLayerData",kde=`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[G6]||(A.IncludesShadersStore[G6]=Qde)});var W6,$de,H6=M(()=>{G();W6="openpbrCoatLayerData",$de=`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 -`;A.IncludesShadersStore[G6]||(A.IncludesShadersStore[G6]=kde)});var W6,Wde,H6=M(()=>{G();W6="openpbrThinFilmLayerData",Wde=`#ifdef THIN_FILM +`;A.IncludesShadersStore[W6]||(A.IncludesShadersStore[W6]=$de)});var z6,Jde,X6=M(()=>{G();z6="openpbrThinFilmLayerData",Jde=`#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 -`;A.IncludesShadersStore[W6]||(A.IncludesShadersStore[W6]=Wde)});var z6,Hde,X6=M(()=>{G();z6="openpbrFuzzLayerData",Hde=`float fuzz_weight=0.0;vec3 fuzz_color=vec3(1.0);float fuzz_roughness=0.0; +`;A.IncludesShadersStore[z6]||(A.IncludesShadersStore[z6]=Jde)});var Y6,eue,K6=M(()=>{G();Y6="openpbrFuzzLayerData",eue=`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 -`;A.IncludesShadersStore[z6]||(A.IncludesShadersStore[z6]=Hde)});var Y6,zde,K6=M(()=>{G();Y6="openpbrAmbientOcclusionData",zde=`vec3 ambient_occlusion=vec3(1.0);float specular_ambient_occlusion=1.0;float coat_specular_ambient_occlusion=1.0; +`;A.IncludesShadersStore[Y6]||(A.IncludesShadersStore[Y6]=eue)});var j6,tue,q6=M(()=>{G();j6="openpbrAmbientOcclusionData",tue=`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 -`;A.IncludesShadersStore[Y6]||(A.IncludesShadersStore[Y6]=zde)});var j6,Xde,q6=M(()=>{G();j6="openpbrBackgroundTransmission",Xde=`vec4 slab_translucent_background=vec4(0.,0.,0.,1.); +`;A.IncludesShadersStore[j6]||(A.IncludesShadersStore[j6]=tue)});var Z6,iue,Q6=M(()=>{G();Z6="openpbrBackgroundTransmission",iue=`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 -`;A.IncludesShadersStore[j6]||(A.IncludesShadersStore[j6]=Xde)});var Z6,Yde,Q6=M(()=>{G();Z6="openpbrEnvironmentLighting",Yde=`#if defined(REFLECTION) || defined(REFRACTED_BACKGROUND) +`;A.IncludesShadersStore[Z6]||(A.IncludesShadersStore[Z6]=iue)});var $6,rue,J6=M(()=>{G();$6="openpbrEnvironmentLighting",rue=`#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 -`;A.IncludesShadersStore[Z6]||(A.IncludesShadersStore[Z6]=Yde)});var $6,Kde,J6=M(()=>{G();$6="openpbrDirectLightingInit",Kde=`#ifdef LIGHT{X} +`;A.IncludesShadersStore[$6]||(A.IncludesShadersStore[$6]=rue)});var e7,nue,t7=M(()=>{G();e7="openpbrDirectLightingInit",nue=`#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 -`;A.IncludesShadersStore[$6]||(A.IncludesShadersStore[$6]=Kde)});var e7,jde,t7=M(()=>{G();e7="openpbrDirectLighting",jde=`#ifdef LIGHT{X} +`;A.IncludesShadersStore[e7]||(A.IncludesShadersStore[e7]=nue)});var i7,sue,r7=M(()=>{G();i7="openpbrDirectLighting",sue=`#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 -`;A.IncludesShadersStore[e7]||(A.IncludesShadersStore[e7]=jde)});var i7,qde,_O=M(()=>{G();i7="pbrBlockImageProcessing",qde=`#if defined(IMAGEPROCESSINGPOSTPROCESS) || defined(SS_SCATTERING) +`;A.IncludesShadersStore[i7]||(A.IncludesShadersStore[i7]=sue)});var n7,aue,SO=M(()=>{G();n7="pbrBlockImageProcessing",aue=`#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 -`;A.IncludesShadersStore[i7]||(A.IncludesShadersStore[i7]=qde)});var r7,Zde,n7=M(()=>{G();r7="openpbrBlockPrePass",Zde=`#if SCENE_MRT_COUNT>0 +`;A.IncludesShadersStore[n7]||(A.IncludesShadersStore[n7]=aue)});var s7,oue,a7=M(()=>{G();s7="openpbrBlockPrePass",oue=`#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 -`;A.IncludesShadersStore[r7]||(A.IncludesShadersStore[r7]=Zde)});var s7,Qde,gO=M(()=>{G();s7="pbrDebug",Qde=`#if DEBUGMODE>0 +`;A.IncludesShadersStore[s7]||(A.IncludesShadersStore[s7]=oue)});var o7,lue,TO=M(()=>{G();o7="pbrDebug",lue=`#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 -`;A.IncludesShadersStore[s7]||(A.IncludesShadersStore[s7]=Qde)});var o7={};tt(o7,{openpbrPixelShader:()=>$de});var vO,a7,$de,l7=M(()=>{G();oR();lR();d6();sO();oO();cR();fR();p6();dR();Tc();nd();Ng();La();lO();cO();fO();uR();hR();sp();hO();dO();np();uO();mO();KR();R6();I6();zg();MD();C6();P6();CD();yD();D6();Ac();pO();w6();B6();V6();LD();PD();k6();H6();X6();K6();gR();q6();Q6();J6();t7();vR();wg();_O();n7();ER();gO();vO="openpbrPixelShader",a7=`#define OPENPBR_FRAGMENT_SHADER +`;A.IncludesShadersStore[o7]||(A.IncludesShadersStore[o7]=lue)});var c7={};tt(c7,{openpbrPixelShader:()=>cue});var AO,l7,cue,f7=M(()=>{G();dR();uR();m6();cO();hO();mR();pR();g6();gR();xc();od();Ug();La();dO();uO();mO();vR();_R();ap();pO();_O();sp();gO();vO();$R();I6();C6();jg();LD();P6();D6();DD();OD();N6();Rc();EO();B6();V6();k6();wD();ND();H6();X6();K6();q6();AR();Q6();J6();t7();r7();xR();Vg();SO();a7();RR();TO();AO="openpbrPixelShader",l7=`#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 } -`;A.ShadersStore[vO]||(A.ShadersStore[vO]=a7);$de={name:vO,shader:a7}});var c7={};tt(c7,{OpenPBRMaterial:()=>Ne,OpenPBRMaterialDefines:()=>iv});var lp,ZR,ai,Ti,EO,SO,iv,TO,Ne,f7=M(()=>{kt();Vt();zR();zt();ng();Vr();zi();kn();Rr();wa();Ex();Df();ll();bg();Gn();ki();Sx();vx();Oa();Pt();Tx();Ax();hY();Ge();xx();Rg();lo();Ci();qY();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?J.Error(`Float property ${r.name} has an offset that is too large.`):J.Error(`Vector${s} property ${r.name} won't fit in Vector${t} or has an offset that is too large.`);return}typeof r.value=="number"?n._tmpArray[r.targetUniformComponentOffset]=r.value:r.value.toArray(n._tmpArray,r.targetUniformComponentOffset)}e.fromArray(n._tmpArray)}constructor(e,t){this.linkedProperties={},this.firstLinkedKey="",this.name=e,this.numComponents=t}};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}},EO=class extends jm(Km(br)){},SO=class extends fY(EO){},iv=class extends Xm(SO){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}},TO=class extends qm(dl){},Ne=class n extends TO{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&&J.Error("OpenPBRMaterial: WebGL 2.0 or above is required for this material."),n._noiseTextures[this.getScene().uniqueId]||(n._noiseTextures[this.getScene().uniqueId]=new ve(_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=cY(this.getScene()),this._environmentFuzzBRDFTexture=RD(this.getScene()),this.prePassConfiguration=new ws,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?J.Error(`Uniform ${o.targetUniformName} already exists of size ${l.numComponents}, but trying to set it to ${o.targetUniformComponentNum}.`):l.requiredDefine!==o.requiredDefine&&(l.requiredDefine=void 0):(l=new 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($.Vector3[0]);let s=Math.max(Math.abs($.Vector3[0].x),Math.abs($.Vector3[0].y),Math.abs($.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),Xn.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);Ls(t,this._activeEffect,this.prePassConfiguration),this._vertexPullingMetadata&&Nf(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 zn,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=[D.PositionKind];i.NORMAL&&d.push(D.NormalKind),i.TANGENT&&d.push(D.TangentKind);for(let E=1;E<=6;++E)i["UV"+E]&&d.push(`uv${E===1?"":E}`);i.VERTEXCOLOR&&d.push(D.ColorKind),xm(d,e,i,f),Rm(d,i),Qh(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)}bf(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),Xn.AddUniformsAndSamplers(m,p),ws.AddUniforms(m),ws.AddSamplers(p),Bn(m),this._useVertexPulling){let E=t==null?void 0:t.geometry;E&&(this._vertexPullingMetadata=Of(E),this._vertexPullingMetadata&&this._vertexPullingMetadata.forEach((S,R)=>{m.push(`vp_${R}_info`)}))}else this._vertexPullingMetadata=null;Wt&&(Wt.PrepareUniforms(m,i),Wt.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(()=>(r8(),i8)),Promise.resolve().then(()=>(e6(),J8))]):await Promise.all([Promise.resolve().then(()=>(f6(),c6)),Promise.resolve().then(()=>(l7(),o7))]),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),Xn.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(Rf(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(D.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(os.IRRADIANCE_TEXTURE_TYPE);this.sssIrradianceTexture=o.geometryBufferRenderer.getGBuffer().textures[u],d=!0}if(!this.sssDepthTexture&&o.geometryBufferRenderer){let u=o.geometryBufferRenderer.getTextureIndex(os.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(D.TangentKind)||(i._needUVs=!0,i.MAINUV1=!0),this._environmentFuzzBRDFTexture=RD(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(D.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 h7={};tt(h7,{OpenPBRMaterialLoadingAdapter:()=>AO});var AO,d7=M(()=>{zt();AO=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 xO,Pr,u7=M(()=>{kt();Vt();wa();Bf();xO=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 xO,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 RO,on,m7=M(()=>{kt();Vt();zt();Oa();Bf();wa();Gn();RO=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}},on=class n extends Wr{_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"PBRClearCoat",100,new RO,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"}]}}};on._DefaultIndexOfRefraction=1.5;P([F(),le("_markAllSubMeshesAsTexturesDirty")],on.prototype,"isEnabled",void 0);P([F()],on.prototype,"intensity",void 0);P([F()],on.prototype,"roughness",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],on.prototype,"indexOfRefraction",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],on.prototype,"texture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],on.prototype,"useRoughnessFromMainTexture",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],on.prototype,"textureRoughness",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],on.prototype,"remapF0OnInterfaceChange",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],on.prototype,"bumpTexture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],on.prototype,"isTintEnabled",void 0);P([Er()],on.prototype,"tintColor",void 0);P([F()],on.prototype,"tintColorAtDistance",void 0);P([F()],on.prototype,"tintThickness",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],on.prototype,"tintTexture",void 0)});var bO,Bs,p7=M(()=>{kt();Vt();Oa();Bf();wa();Gn();bO=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}},Bs=class n extends Wr{_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"PBRIridescence",110,new bO,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"}]}}};Bs._DefaultMinimumThickness=100;Bs._DefaultMaximumThickness=400;Bs._DefaultIndexOfRefraction=1.3;P([F(),le("_markAllSubMeshesAsTexturesDirty")],Bs.prototype,"isEnabled",void 0);P([F()],Bs.prototype,"intensity",void 0);P([F()],Bs.prototype,"minimumThickness",void 0);P([F()],Bs.prototype,"maximumThickness",void 0);P([F()],Bs.prototype,"indexOfRefraction",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],Bs.prototype,"texture",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],Bs.prototype,"thicknessTexture",void 0)});var IO,Ic,_7=M(()=>{kt();Vt();ki();Ge();Oa();Bf();wa();Gn();IO=class extends br{constructor(){super(...arguments),this.ANISOTROPIC=!1,this.ANISOTROPIC_TEXTURE=!1,this.ANISOTROPIC_TEXTUREDIRECTUV=0,this.ANISOTROPIC_LEGACY=!1,this.MAINUV1=!1}},Ic=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 IO,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(D.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")],Ic.prototype,"isEnabled",void 0);P([F()],Ic.prototype,"intensity",void 0);P([im()],Ic.prototype,"direction",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],Ic.prototype,"texture",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],Ic.prototype,"legacy",void 0)});var MO,ra,g7=M(()=>{kt();Vt();zt();Oa();Bf();wa();Gn();MO=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}},ra=class extends Wr{_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"Sheen",120,new MO,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")],ra.prototype,"isEnabled",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],ra.prototype,"linkSheenWithAlbedo",void 0);P([F()],ra.prototype,"intensity",void 0);P([Er()],ra.prototype,"color",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],ra.prototype,"texture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],ra.prototype,"useRoughnessFromMainTexture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],ra.prototype,"roughness",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],ra.prototype,"textureRoughness",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],ra.prototype,"albedoScaling",void 0)});var CO,Ai,v7=M(()=>{kt();Vt();zt();Oa();Ge();Bf();wa();Gn();CO=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 CO,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($.Vector3[0]);let s=Math.max(Math.abs($.Vector3[0].x),Math.abs($.Vector3[0].y),Math.abs($.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([Er()],Ai.prototype,"tintColor",void 0);P([F()],Ai.prototype,"tintColorAtDistance",void 0);P([F()],Ai.prototype,"dispersion",void 0);P([Er()],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([Er()],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 E7,Jde,yO=M(()=>{G();ed();kg();E7="pbrUboDeclaration",Jde=`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[AO]||(A.ShadersStore[AO]=l7);cue={name:AO,shader:l7}});var h7={};tt(h7,{OpenPBRMaterial:()=>Ne,OpenPBRMaterialDefines:()=>av});var cp,tb,ai,Ti,xO,RO,av,bO,Ne,d7=M(()=>{kt();Vt();qR();zt();lg();Gr();zi();Wn();Rr();wa();Rx();Of();fl();yg();kn();ki();bx();xx();Oa();Pt();Ix();Mx();uY();Ge();Cx();Cg();co();Ci();QY();cp={effect:null,subMesh:null},tb=class n{populateVectorFromLinkedProperties(e){let t=e.dimension[0];for(let i in this.linkedProperties){let r=this.linkedProperties[i],s=r.numComponents;if(tt-s){s==1?J.Error(`Float property ${r.name} has an offset that is too large.`):J.Error(`Vector${s} property ${r.name} won't fit in Vector${t} or has an offset that is too large.`);return}typeof r.value=="number"?n._tmpArray[r.targetUniformComponentOffset]=r.value:r.value.toArray(n._tmpArray,r.targetUniformComponentOffset)}e.fromArray(n._tmpArray)}constructor(e,t){this.linkedProperties={},this.firstLinkedKey="",this.name=e,this.numComponents=t}};tb._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}},xO=class extends qm(jm(br)){},RO=class extends dY(xO){},av=class extends Ym(RO){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}},bO=class extends Zm(ml){},Ne=class n extends bO{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&&J.Error("OpenPBRMaterial: WebGL 2.0 or above is required for this material."),n._noiseTextures[this.getScene().uniqueId]||(n._noiseTextures[this.getScene().uniqueId]=new ve(_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=hY(this.getScene()),this._environmentFuzzBRDFTexture=CD(this.getScene()),this.prePassConfiguration=new Fs,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?J.Error(`Uniform ${o.targetUniformName} already exists of size ${l.numComponents}, but trying to set it to ${o.targetUniformComponentNum}.`):l.requiredDefine!==o.requiredDefine&&(l.requiredDefine=void 0):(l=new tb(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 av({...this._eventInfo.defineNames||{},...this._samplerDefines||{}}),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)})})()}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 av({...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($.Vector3[0]);let s=Math.max(Math.abs($.Vector3[0].x),Math.abs($.Vector3[0].y),Math.abs($.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),Yn.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);Ds(t,this._activeEffect,this.prePassConfiguration),this._vertexPullingMetadata&&wf(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)),Tm(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 Xn,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=Im(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=[D.PositionKind];i.NORMAL&&d.push(D.NormalKind),i.TANGENT&&d.push(D.TangentKind);for(let E=1;E<=6;++E)i["UV"+E]&&d.push(`uv${E===1?"":E}`);i.VERTEXCOLOR&&d.push(D.ColorKind),Rm(d,e,i,f),bm(d,i),ed(d,e,i),Am(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)}If(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),Yn.AddUniformsAndSamplers(m,p),Fs.AddUniforms(m),Fs.AddSamplers(p),Un(m),this._useVertexPulling){let E=t==null?void 0:t.geometry;E&&(this._vertexPullingMetadata=Nf(E),this._vertexPullingMetadata&&this._vertexPullingMetadata.forEach((S,R)=>{m.push(`vp_${R}_info`)}))}else this._vertexPullingMetadata=null;Wt&&(Wt.PrepareUniforms(m,i),Wt.PrepareSamplers(p,i)),wm({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(()=>(s8(),n8)),Promise.resolve().then(()=>(i6(),t6))]):await Promise.all([Promise.resolve().then(()=>(d6(),h6)),Promise.resolve().then(()=>(f7(),c7))]),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();ym(o,e,i,!0,this._maxSimultaneousLights,this._disableLighting),i._needNormals=!0,Dm(o,i);let c=this.needAlphaBlendingForMesh(e)&&this.getScene().useOrderIndependentTransparency;if(Nm(o,i,this.canRenderToMRT&&!c),Om(o,i,c),Yn.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(bf(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(D.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(ls.IRRADIANCE_TEXTURE_TYPE);this.sssIrradianceTexture=o.geometryBufferRenderer.getGBuffer().textures[u],d=!0}if(!this.sssDepthTexture&&o.geometryBufferRenderer){let u=o.geometryBufferRenderer.getTextureIndex(ls.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(D.TangentKind)||(i._needUVs=!0,i.MAINUV1=!0),this._environmentFuzzBRDFTexture=CD(this.getScene()),i.FUZZ_IBL_SAMPLES=this.fuzzSampleNumber):(this._environmentFuzzBRDFTexture=null,i.FUZZENVIRONMENTBRDF=!1,i.FUZZ_IBL_SAMPLES=0),i._areMiscDirty&&(Mm(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(D.NormalKind),i.DEBUGMODE=this._debugMode),Pm(o,l,this,i,!!r,s,a),this._eventInfo.defines=i,this._eventInfo.mesh=e,this._callbackPluginEventPrepareDefinesBeforeAttributes(this._eventInfo),Lm(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 u7={};tt(u7,{OpenPBRMaterialLoadingAdapter:()=>IO});var IO,m7=M(()=>{zt();IO=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 MO,Lr,p7=M(()=>{kt();Vt();wa();Uf();MO=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}},Lr=class n extends Hr{_markAllSubMeshesAsMiscDirty(){this._internalMarkAllSubMeshesAsMiscDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"PBRBRDF",90,new MO,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"}};Lr.DEFAULT_USE_ENERGY_CONSERVATION=!0;Lr.DEFAULT_USE_SMITH_VISIBILITY_HEIGHT_CORRELATED=!0;Lr.DEFAULT_USE_SPHERICAL_HARMONICS=!0;Lr.DEFAULT_USE_SPECULAR_GLOSSINESS_INPUT_ENERGY_CONSERVATION=!0;Lr.DEFAULT_MIX_IBL_RADIANCE_WITH_IRRADIANCE=!0;Lr.DEFAULT_USE_LEGACY_SPECULAR_ENERGY_CONSERVATION=!0;Lr.DEFAULT_DIFFUSE_MODEL=0;Lr.DEFAULT_DIELECTRIC_SPECULAR_MODEL=0;Lr.DEFAULT_CONDUCTOR_SPECULAR_MODEL=0;P([F(),le("_markAllSubMeshesAsMiscDirty")],Lr.prototype,"useEnergyConservation",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],Lr.prototype,"useSmithVisibilityHeightCorrelated",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],Lr.prototype,"useSphericalHarmonics",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],Lr.prototype,"useSpecularGlossinessInputEnergyConservation",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],Lr.prototype,"mixIblRadianceWithIrradiance",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],Lr.prototype,"useLegacySpecularEnergyConservation",void 0);P([F("baseDiffuseModel"),le("_markAllSubMeshesAsMiscDirty")],Lr.prototype,"baseDiffuseModel",void 0);P([F("dielectricSpecularModel"),le("_markAllSubMeshesAsMiscDirty")],Lr.prototype,"dielectricSpecularModel",void 0);P([F("conductorSpecularModel"),le("_markAllSubMeshesAsMiscDirty")],Lr.prototype,"conductorSpecularModel",void 0)});var CO,on,_7=M(()=>{kt();Vt();zt();Oa();Uf();wa();kn();CO=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}},on=class n extends Hr{_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"PBRClearCoat",100,new CO,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"}]}}};on._DefaultIndexOfRefraction=1.5;P([F(),le("_markAllSubMeshesAsTexturesDirty")],on.prototype,"isEnabled",void 0);P([F()],on.prototype,"intensity",void 0);P([F()],on.prototype,"roughness",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],on.prototype,"indexOfRefraction",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],on.prototype,"texture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],on.prototype,"useRoughnessFromMainTexture",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],on.prototype,"textureRoughness",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],on.prototype,"remapF0OnInterfaceChange",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],on.prototype,"bumpTexture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],on.prototype,"isTintEnabled",void 0);P([Sr()],on.prototype,"tintColor",void 0);P([F()],on.prototype,"tintColorAtDistance",void 0);P([F()],on.prototype,"tintThickness",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],on.prototype,"tintTexture",void 0)});var yO,Us,g7=M(()=>{kt();Vt();Oa();Uf();wa();kn();yO=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}},Us=class n extends Hr{_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"PBRIridescence",110,new yO,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"}]}}};Us._DefaultMinimumThickness=100;Us._DefaultMaximumThickness=400;Us._DefaultIndexOfRefraction=1.3;P([F(),le("_markAllSubMeshesAsTexturesDirty")],Us.prototype,"isEnabled",void 0);P([F()],Us.prototype,"intensity",void 0);P([F()],Us.prototype,"minimumThickness",void 0);P([F()],Us.prototype,"maximumThickness",void 0);P([F()],Us.prototype,"indexOfRefraction",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],Us.prototype,"texture",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],Us.prototype,"thicknessTexture",void 0)});var PO,Cc,v7=M(()=>{kt();Vt();ki();Ge();Oa();Uf();wa();kn();PO=class extends br{constructor(){super(...arguments),this.ANISOTROPIC=!1,this.ANISOTROPIC_TEXTURE=!1,this.ANISOTROPIC_TEXTUREDIRECTUV=0,this.ANISOTROPIC_LEGACY=!1,this.MAINUV1=!1}},Cc=class extends Hr{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 PO,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(D.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")],Cc.prototype,"isEnabled",void 0);P([F()],Cc.prototype,"intensity",void 0);P([rm()],Cc.prototype,"direction",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],Cc.prototype,"texture",void 0);P([F(),le("_markAllSubMeshesAsMiscDirty")],Cc.prototype,"legacy",void 0)});var LO,na,E7=M(()=>{kt();Vt();zt();Oa();Uf();wa();kn();LO=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}},na=class extends Hr{_markAllSubMeshesAsTexturesDirty(){this._enable(this._isEnabled),this._internalMarkAllSubMeshesAsTexturesDirty()}isCompatible(){return!0}constructor(e,t=!0){super(e,"Sheen",120,new LO,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")],na.prototype,"isEnabled",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],na.prototype,"linkSheenWithAlbedo",void 0);P([F()],na.prototype,"intensity",void 0);P([Sr()],na.prototype,"color",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],na.prototype,"texture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],na.prototype,"useRoughnessFromMainTexture",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],na.prototype,"roughness",void 0);P([Ut(),le("_markAllSubMeshesAsTexturesDirty")],na.prototype,"textureRoughness",void 0);P([F(),le("_markAllSubMeshesAsTexturesDirty")],na.prototype,"albedoScaling",void 0)});var DO,Ai,S7=M(()=>{kt();Vt();zt();Oa();Ge();Uf();wa();kn();DO=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 Hr{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 DO,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($.Vector3[0]);let s=Math.max(Math.abs($.Vector3[0].x),Math.abs($.Vector3[0].y),Math.abs($.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([Sr()],Ai.prototype,"tintColor",void 0);P([F()],Ai.prototype,"tintColorAtDistance",void 0);P([F()],Ai.prototype,"dispersion",void 0);P([Sr()],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([Sr()],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 T7,fue,OO=M(()=>{G();rd();Xg();T7="pbrUboDeclaration",fue=`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 -`;A.IncludesShadersStoreWGSL[E7]||(A.IncludesShadersStoreWGSL[E7]=Jde)});var T7={};tt(T7,{pbrVertexShaderWGSL:()=>eue});var PO,S7,eue,A7=M(()=>{G();yO();Rx();Zm();Pa();op();sc();ac();wf();bx();Ix();ap();iL();oc();Ig();Mx();Uf();Vf();td();Cx();yx();Gf();kf();lc();cc();fc();Px();Lx();Dx();Ox();hc();Mg();Nx();Cg();wx();PO="pbrVertexShader",S7=`#define PBR_VERTEX_SHADER +`;A.IncludesShadersStoreWGSL[T7]||(A.IncludesShadersStoreWGSL[T7]=fue)});var x7={};tt(x7,{pbrVertexShaderWGSL:()=>hue});var NO,A7,hue,R7=M(()=>{G();OO();yx();Qm();Pa();lp();oc();lc();Ff();Px();Lx();op();aL();cc();Pg();Dx();Vf();Gf();nd();Ox();Nx();kf();Wf();fc();hc();dc();wx();Fx();Bx();Ux();uc();Lg();Vx();Dg();Gx();NO="pbrVertexShader",A7=`#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 -}`;A.ShadersStoreWGSL[PO]||(A.ShadersStoreWGSL[PO]=S7);eue={name:PO,shader:S7}});var x7,tue,R7=M(()=>{G();x7="samplerFragmentAlternateDeclaration",tue=`#ifdef _DEFINENAME_ +}`;A.ShadersStoreWGSL[NO]||(A.ShadersStoreWGSL[NO]=A7);hue={name:NO,shader:A7}});var b7,due,I7=M(()=>{G();b7="samplerFragmentAlternateDeclaration",due=`#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 -`;A.IncludesShadersStoreWGSL[x7]||(A.IncludesShadersStoreWGSL[x7]=tue)});var b7,iue,I7=M(()=>{G();id();R7();jR();b7="pbrFragmentSamplersDeclaration",iue=`#include(_DEFINENAME_,ALBEDO,_VARYINGNAME_,Albedo,_SAMPLERNAME_,albedo) +`;A.IncludesShadersStoreWGSL[b7]||(A.IncludesShadersStoreWGSL[b7]=due)});var M7,uue,C7=M(()=>{G();sd();I7();JR();M7="pbrFragmentSamplersDeclaration",uue=`#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 -`;A.IncludesShadersStoreWGSL[b7]||(A.IncludesShadersStoreWGSL[b7]=iue)});var M7,rue,C7=M(()=>{G();aL();M7="pbrBlockAlbedoOpacity",rue=`struct albedoOpacityOutParams +`;A.IncludesShadersStoreWGSL[M7]||(A.IncludesShadersStoreWGSL[M7]=uue)});var y7,mue,P7=M(()=>{G();fL();y7="pbrBlockAlbedoOpacity",mue=`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;} -`;A.IncludesShadersStoreWGSL[M7]||(A.IncludesShadersStoreWGSL[M7]=rue)});var y7,nue,P7=M(()=>{G();y7="pbrBlockReflectivity",nue=`struct reflectivityOutParams +`;A.IncludesShadersStoreWGSL[y7]||(A.IncludesShadersStoreWGSL[y7]=mue)});var L7,pue,D7=M(()=>{G();L7="pbrBlockReflectivity",pue=`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;} -`;A.IncludesShadersStoreWGSL[y7]||(A.IncludesShadersStoreWGSL[y7]=nue)});var L7,sue,D7=M(()=>{G();L7="pbrBlockAmbientOcclusion",sue=`struct ambientOcclusionOutParams +`;A.IncludesShadersStoreWGSL[L7]||(A.IncludesShadersStoreWGSL[L7]=pue)});var O7,_ue,N7=M(()=>{G();O7="pbrBlockAmbientOcclusion",_ue=`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;} -`;A.IncludesShadersStoreWGSL[L7]||(A.IncludesShadersStoreWGSL[L7]=sue)});var O7,aue,N7=M(()=>{G();O7="pbrBlockAlphaFresnel",aue=`#ifdef ALPHAFRESNEL +`;A.IncludesShadersStoreWGSL[O7]||(A.IncludesShadersStoreWGSL[O7]=_ue)});var w7,gue,F7=M(()=>{G();w7="pbrBlockAlphaFresnel",gue=`#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 -`;A.IncludesShadersStoreWGSL[O7]||(A.IncludesShadersStoreWGSL[O7]=aue)});var w7,oue,F7=M(()=>{G();w7="pbrBlockAnisotropic",oue=`#ifdef ANISOTROPIC +`;A.IncludesShadersStoreWGSL[w7]||(A.IncludesShadersStoreWGSL[w7]=gue)});var B7,vue,U7=M(()=>{G();B7="pbrBlockAnisotropic",vue=`#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 -`;A.IncludesShadersStoreWGSL[w7]||(A.IncludesShadersStoreWGSL[w7]=oue)});var B7,lue,U7=M(()=>{G();B7="pbrBlockReflection",lue=`#ifdef REFLECTION +`;A.IncludesShadersStoreWGSL[B7]||(A.IncludesShadersStoreWGSL[B7]=vue)});var V7,Eue,G7=M(()=>{G();V7="pbrBlockReflection",Eue=`#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 -`;A.IncludesShadersStoreWGSL[B7]||(A.IncludesShadersStoreWGSL[B7]=lue)});var V7,cue,G7=M(()=>{G();V7="pbrBlockSheen",cue=`#ifdef SHEEN +`;A.IncludesShadersStoreWGSL[V7]||(A.IncludesShadersStoreWGSL[V7]=Eue)});var k7,Sue,W7=M(()=>{G();k7="pbrBlockSheen",Sue=`#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 -`;A.IncludesShadersStoreWGSL[V7]||(A.IncludesShadersStoreWGSL[V7]=cue)});var k7,fue,W7=M(()=>{G();k7="pbrBlockClearcoat",fue=`struct clearcoatOutParams +`;A.IncludesShadersStoreWGSL[k7]||(A.IncludesShadersStoreWGSL[k7]=Sue)});var H7,Tue,z7=M(()=>{G();H7="pbrBlockClearcoat",Tue=`struct clearcoatOutParams {specularEnvironmentR0: vec3f, conservationFactor: f32, clearCoatNormalW: vec3f, @@ -18932,7 +18932,7 @@ outParams.energyConservationFactorClearCoat=getEnergyConservationFactor(outParam #endif return outParams;} #endif -`;A.IncludesShadersStoreWGSL[k7]||(A.IncludesShadersStoreWGSL[k7]=fue)});var H7,hue,z7=M(()=>{G();H7="pbrBlockIridescence",hue=`struct iridescenceOutParams +`;A.IncludesShadersStoreWGSL[H7]||(A.IncludesShadersStoreWGSL[H7]=Tue)});var X7,Aue,Y7=M(()=>{G();X7="pbrBlockIridescence",Aue=`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 -`;A.IncludesShadersStoreWGSL[H7]||(A.IncludesShadersStoreWGSL[H7]=hue)});var X7,due,Y7=M(()=>{G();X7="pbrBlockSubSurface",due=`struct subSurfaceOutParams +`;A.IncludesShadersStoreWGSL[X7]||(A.IncludesShadersStoreWGSL[X7]=Aue)});var K7,xue,j7=M(()=>{G();K7="pbrBlockSubSurface",xue=`struct subSurfaceOutParams {specularEnvironmentReflectance: vec3f, #ifdef SS_REFRACTION finalRefraction: vec3f, @@ -19395,7 +19395,7 @@ outParams.refractionIrradiance=refractionIrradiance; #endif return outParams;} #endif -`;A.IncludesShadersStoreWGSL[X7]||(A.IncludesShadersStoreWGSL[X7]=due)});var K7,uue,j7=M(()=>{G();K7="pbrBlockNormalFinal",uue=`#if defined(FORCENORMALFORWARD) && defined(NORMAL) +`;A.IncludesShadersStoreWGSL[K7]||(A.IncludesShadersStoreWGSL[K7]=xue)});var q7,Rue,Z7=M(()=>{G();q7="pbrBlockNormalFinal",Rue=`#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 -`;A.IncludesShadersStoreWGSL[K7]||(A.IncludesShadersStoreWGSL[K7]=uue)});var q7,mue,Z7=M(()=>{G();q7="pbrBlockLightmapInit",mue=`#ifdef LIGHTMAP +`;A.IncludesShadersStoreWGSL[q7]||(A.IncludesShadersStoreWGSL[q7]=Rue)});var Q7,bue,$7=M(()=>{G();Q7="pbrBlockLightmapInit",bue=`#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 -`;A.IncludesShadersStoreWGSL[q7]||(A.IncludesShadersStoreWGSL[q7]=mue)});var Q7,pue,$7=M(()=>{G();Q7="pbrBlockGeometryInfo",pue=`var NdotVUnclamped: f32=dot(normalW,viewDirectionW);var NdotV: f32=absEps(NdotVUnclamped);var alphaG: f32=convertRoughnessToAverageSlope(roughness);var AARoughnessFactors: vec2f=getAARoughnessFactors(normalW.xyz); +`;A.IncludesShadersStoreWGSL[Q7]||(A.IncludesShadersStoreWGSL[Q7]=bue)});var J7,Iue,e9=M(()=>{G();J7="pbrBlockGeometryInfo",Iue=`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 -`;A.IncludesShadersStoreWGSL[Q7]||(A.IncludesShadersStoreWGSL[Q7]=pue)});var J7,_ue,e9=M(()=>{G();J7="pbrBlockReflectance",_ue=`#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX) +`;A.IncludesShadersStoreWGSL[J7]||(A.IncludesShadersStoreWGSL[J7]=Iue)});var t9,Mue,i9=M(()=>{G();t9="pbrBlockReflectance",Mue=`#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 -`;A.IncludesShadersStoreWGSL[J7]||(A.IncludesShadersStoreWGSL[J7]=_ue)});var t9,gue,i9=M(()=>{G();t9="pbrBlockDirectLighting",gue=`var diffuseBase: vec3f=vec3f(0.,0.,0.); +`;A.IncludesShadersStoreWGSL[t9]||(A.IncludesShadersStoreWGSL[t9]=Mue)});var r9,Cue,n9=M(()=>{G();r9="pbrBlockDirectLighting",Cue=`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 -`;A.IncludesShadersStoreWGSL[t9]||(A.IncludesShadersStoreWGSL[t9]=gue)});var r9,vue,n9=M(()=>{G();r9="pbrBlockFinalLitComponents",vue=`aggShadow=aggShadow/numLights; +`;A.IncludesShadersStoreWGSL[r9]||(A.IncludesShadersStoreWGSL[r9]=Cue)});var s9,yue,a9=M(()=>{G();s9="pbrBlockFinalLitComponents",yue=`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 -`;A.IncludesShadersStoreWGSL[r9]||(A.IncludesShadersStoreWGSL[r9]=vue)});var s9,Eue,a9=M(()=>{G();s9="pbrBlockFinalUnlitComponents",Eue=`var finalDiffuse: vec3f=diffuseBase;finalDiffuse*=surfaceAlbedo; +`;A.IncludesShadersStoreWGSL[s9]||(A.IncludesShadersStoreWGSL[s9]=yue)});var o9,Pue,l9=M(()=>{G();o9="pbrBlockFinalUnlitComponents",Pue=`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; -`;A.IncludesShadersStoreWGSL[s9]||(A.IncludesShadersStoreWGSL[s9]=Eue)});var o9,Sue,l9=M(()=>{G();o9="pbrBlockFinalColorComposition",Sue=`var finalColor: vec4f= vec4f( +`;A.IncludesShadersStoreWGSL[o9]||(A.IncludesShadersStoreWGSL[o9]=Pue)});var c9,Lue,f9=M(()=>{G();c9="pbrBlockFinalColorComposition",Lue=`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)); -`;A.IncludesShadersStoreWGSL[o9]||(A.IncludesShadersStoreWGSL[o9]=Sue)});var c9,Tue,f9=M(()=>{G();c9="pbrBlockPrePass",Tue=`#if SCENE_MRT_COUNT>0 +`;A.IncludesShadersStoreWGSL[c9]||(A.IncludesShadersStoreWGSL[c9]=Lue)});var h9,Due,d9=M(()=>{G();h9="pbrBlockPrePass",Due=`#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 -`;A.IncludesShadersStoreWGSL[c9]||(A.IncludesShadersStoreWGSL[c9]=Tue)});var d9={};tt(d9,{pbrPixelShaderWGSL:()=>Aue});var LO,h9,Aue,u9=M(()=>{G();Fx();Bx();yO();YD();Ux();I7();Gx();dc();td();yg();Pa();KD();jD();qD();kx();Vx();ap();ZD();QD();op();$D();eO();qR();Wx();Hx();Wg();C7();P7();D7();N7();F7();U7();G7();W7();z7();Y7();uc();tO();zx();j7();Xx();Z7();$7();JD();e9();i9();oL();n9();a9();l9();Yx();Pg();iO();f9();Kx();rO();LO="pbrPixelShader",h9=`#define PBR_FRAGMENT_SHADER +`;A.IncludesShadersStoreWGSL[h9]||(A.IncludesShadersStoreWGSL[h9]=Due)});var m9={};tt(m9,{pbrPixelShaderWGSL:()=>Oue});var wO,u9,Oue,p9=M(()=>{G();kx();Wx();OO();ZD();Hx();C7();Xx();mc();nd();Og();Pa();QD();$D();JD();Yx();zx();op();eO();tO();lp();iO();nO();eb();Kx();jx();Yg();P7();D7();N7();F7();U7();G7();W7();z7();Y7();j7();pc();sO();qx();Z7();Zx();$7();e9();rO();i9();n9();hL();a9();l9();f9();Qx();Ng();aO();d9();$x();oO();wO="pbrPixelShader",u9=`#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 } -`;A.ShadersStoreWGSL[LO]||(A.ShadersStoreWGSL[LO]=h9);Aue={name:LO,shader:h9}});var m9,xue,p9=M(()=>{G();jx();m9="pbrVertexDeclaration",xue=`uniform mat4 view;uniform mat4 viewProjection;uniform vec4 vEyePosition; +`;A.ShadersStoreWGSL[wO]||(A.ShadersStoreWGSL[wO]=u9);Oue={name:wO,shader:u9}});var _9,Nue,g9=M(()=>{G();Jx();_9="pbrVertexDeclaration",Nue=`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 -`;A.IncludesShadersStore[m9]||(A.IncludesShadersStore[m9]=xue)});var _9,Rue,DO=M(()=>{G();rd();Hg();_9="pbrUboDeclaration",Rue=`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[_9]||(A.IncludesShadersStore[_9]=Nue)});var v9,wue,FO=M(()=>{G();ad();Kg();v9="pbrUboDeclaration",wue=`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 -`;A.IncludesShadersStore[_9]||(A.IncludesShadersStore[_9]=Rue)});var v9={};tt(v9,{pbrVertexShader:()=>bue});var OO,g9,bue,E9=M(()=>{G();p9();DO();qx();Qm();La();np();mc();pc();Ff();Zx();Qx();sp();fL();_c();Lg();$x();Jx();Wf();Hf();nd();zf();Xf();gc();vc();Ec();eR();tR();iR();rR();Sc();Dg();nR();Og();sR();OO="pbrVertexShader",g9=`#define PBR_VERTEX_SHADER +`;A.IncludesShadersStore[v9]||(A.IncludesShadersStore[v9]=wue)});var S9={};tt(S9,{pbrVertexShader:()=>Fue});var BO,E9,Fue,T9=M(()=>{G();g9();FO();eR();$m();La();sp();_c();gc();Bf();tR();iR();ap();mL();vc();wg();rR();nR();Hf();zf();od();Xf();Yf();Ec();Sc();Tc();sR();aR();oR();lR();Ac();Fg();cR();Bg();fR();BO="pbrVertexShader",E9=`#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 } -`;A.ShadersStore[OO]||(A.ShadersStore[OO]=g9);bue={name:OO,shader:g9}});var S9,Iue,T9=M(()=>{G();aR();S9="pbrFragmentDeclaration",Iue=`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[BO]||(A.ShadersStore[BO]=E9);Fue={name:BO,shader:E9}});var A9,Bue,x9=M(()=>{G();hR();A9="pbrFragmentDeclaration",Bue=`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 -`;A.IncludesShadersStore[S9]||(A.IncludesShadersStore[S9]=Iue)});var A9,Mue,x9=M(()=>{G();A9="samplerFragmentAlternateDeclaration",Mue=`#ifdef _DEFINENAME_ +`;A.IncludesShadersStore[A9]||(A.IncludesShadersStore[A9]=Bue)});var R9,Uue,b9=M(()=>{G();R9="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 -`;A.IncludesShadersStore[A9]||(A.IncludesShadersStore[A9]=Mue)});var R9,Cue,b9=M(()=>{G();sd();x9();YR();R9="pbrFragmentSamplersDeclaration",Cue=`#include(_DEFINENAME_,ALBEDO,_VARYINGNAME_,Albedo,_SAMPLERNAME_,albedo) +`;A.IncludesShadersStore[R9]||(A.IncludesShadersStore[R9]=Uue)});var I9,Vue,M9=M(()=>{G();ld();b9();QR();I9="pbrFragmentSamplersDeclaration",Vue=`#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 -`;A.IncludesShadersStore[R9]||(A.IncludesShadersStore[R9]=Cue)});var I9,yue,M9=M(()=>{G();pL();I9="pbrBlockAlbedoOpacity",yue=`struct albedoOpacityOutParams +`;A.IncludesShadersStore[I9]||(A.IncludesShadersStore[I9]=Vue)});var C9,Gue,y9=M(()=>{G();EL();C9="pbrBlockAlbedoOpacity",Gue=`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;} -`;A.IncludesShadersStore[I9]||(A.IncludesShadersStore[I9]=yue)});var C9,Pue,y9=M(()=>{G();C9="pbrBlockReflectivity",Pue=`struct reflectivityOutParams +`;A.IncludesShadersStore[C9]||(A.IncludesShadersStore[C9]=Gue)});var P9,kue,L9=M(()=>{G();P9="pbrBlockReflectivity",kue=`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;} -`;A.IncludesShadersStore[C9]||(A.IncludesShadersStore[C9]=Pue)});var P9,Lue,L9=M(()=>{G();P9="pbrBlockAmbientOcclusion",Lue=`struct ambientOcclusionOutParams +`;A.IncludesShadersStore[P9]||(A.IncludesShadersStore[P9]=kue)});var D9,Wue,O9=M(()=>{G();D9="pbrBlockAmbientOcclusion",Wue=`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;} -`;A.IncludesShadersStore[P9]||(A.IncludesShadersStore[P9]=Lue)});var D9,Due,O9=M(()=>{G();D9="pbrBlockAlphaFresnel",Due=`#ifdef ALPHAFRESNEL +`;A.IncludesShadersStore[D9]||(A.IncludesShadersStore[D9]=Wue)});var N9,Hue,w9=M(()=>{G();N9="pbrBlockAlphaFresnel",Hue=`#ifdef ALPHAFRESNEL #if defined(ALPHATEST) || defined(ALPHABLEND) struct alphaFresnelOutParams {float alpha;}; @@ -21202,7 +21202,7 @@ outParams.alpha=1.0; return outParams;} #endif #endif -`;A.IncludesShadersStore[D9]||(A.IncludesShadersStore[D9]=Due)});var N9,Oue,w9=M(()=>{G();N9="pbrBlockAnisotropic",Oue=`#ifdef ANISOTROPIC +`;A.IncludesShadersStore[N9]||(A.IncludesShadersStore[N9]=Hue)});var F9,zue,B9=M(()=>{G();F9="pbrBlockAnisotropic",zue=`#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 -`;A.IncludesShadersStore[N9]||(A.IncludesShadersStore[N9]=Oue)});var F9,Nue,B9=M(()=>{G();F9="pbrBlockReflection",Nue=`#ifdef REFLECTION +`;A.IncludesShadersStore[F9]||(A.IncludesShadersStore[F9]=zue)});var U9,Xue,V9=M(()=>{G();U9="pbrBlockReflection",Xue=`#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 -`;A.IncludesShadersStore[F9]||(A.IncludesShadersStore[F9]=Nue)});var U9,wue,V9=M(()=>{G();U9="pbrBlockSheen",wue=`#ifdef SHEEN +`;A.IncludesShadersStore[U9]||(A.IncludesShadersStore[U9]=Xue)});var G9,Yue,k9=M(()=>{G();G9="pbrBlockSheen",Yue=`#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 -`;A.IncludesShadersStore[U9]||(A.IncludesShadersStore[U9]=wue)});var G9,Fue,k9=M(()=>{G();G9="pbrBlockClearcoat",Fue=`struct clearcoatOutParams +`;A.IncludesShadersStore[G9]||(A.IncludesShadersStore[G9]=Yue)});var W9,Kue,H9=M(()=>{G();W9="pbrBlockClearcoat",Kue=`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 -`;A.IncludesShadersStore[G9]||(A.IncludesShadersStore[G9]=Fue)});var W9,Bue,H9=M(()=>{G();W9="pbrBlockIridescence",Bue=`struct iridescenceOutParams +`;A.IncludesShadersStore[W9]||(A.IncludesShadersStore[W9]=Kue)});var z9,jue,X9=M(()=>{G();z9="pbrBlockIridescence",jue=`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 -`;A.IncludesShadersStore[W9]||(A.IncludesShadersStore[W9]=Bue)});var z9,Uue,X9=M(()=>{G();z9="pbrBlockSubSurface",Uue=`struct subSurfaceOutParams +`;A.IncludesShadersStore[z9]||(A.IncludesShadersStore[z9]=jue)});var Y9,que,K9=M(()=>{G();Y9="pbrBlockSubSurface",que=`struct subSurfaceOutParams {vec3 specularEnvironmentReflectance; #ifdef SS_REFRACTION vec3 finalRefraction;vec3 surfaceAlbedo; @@ -22371,11 +22371,11 @@ outParams.refractionIrradiance=refractionIrradiance.rgb; #endif return outParams;} #endif -`;A.IncludesShadersStore[z9]||(A.IncludesShadersStore[z9]=Uue)});var Y9,Vue,NO=M(()=>{G();Y9="pbrBlockReflectance0",Vue=`float reflectanceF0=reflectivityOut.reflectanceF0;vec3 specularEnvironmentR0=reflectivityOut.colorReflectanceF0;vec3 specularEnvironmentR90=reflectivityOut.colorReflectanceF90; +`;A.IncludesShadersStore[Y9]||(A.IncludesShadersStore[Y9]=que)});var j9,Zue,UO=M(()=>{G();j9="pbrBlockReflectance0",Zue=`float reflectanceF0=reflectivityOut.reflectanceF0;vec3 specularEnvironmentR0=reflectivityOut.colorReflectanceF0;vec3 specularEnvironmentR90=reflectivityOut.colorReflectanceF90; #ifdef ALPHAFRESNEL float reflectance90=fresnelGrazingReflectance(reflectanceF0);specularEnvironmentR90=specularEnvironmentR90*reflectance90; #endif -`;A.IncludesShadersStore[Y9]||(A.IncludesShadersStore[Y9]=Vue)});var K9,Gue,j9=M(()=>{G();mL();NO();K9="pbrClusteredLightingFunctions",Gue=`#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0 +`;A.IncludesShadersStore[j9]||(A.IncludesShadersStore[j9]=Zue)});var q9,Que,Z9=M(()=>{G();vL();UO();q9="pbrClusteredLightingFunctions",Que=`#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 -`;A.IncludesShadersStore[K9]||(A.IncludesShadersStore[K9]=Gue)});var q9,kue,Z9=M(()=>{G();q9="pbrBlockNormalFinal",kue=`#if defined(FORCENORMALFORWARD) && defined(NORMAL) +`;A.IncludesShadersStore[q9]||(A.IncludesShadersStore[q9]=Que)});var Q9,$ue,$9=M(()=>{G();Q9="pbrBlockNormalFinal",$ue=`#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 -`;A.IncludesShadersStore[q9]||(A.IncludesShadersStore[q9]=kue)});var Q9,Wue,$9=M(()=>{G();Q9="pbrBlockLightmapInit",Wue=`#ifdef LIGHTMAP +`;A.IncludesShadersStore[Q9]||(A.IncludesShadersStore[Q9]=$ue)});var J9,Jue,eK=M(()=>{G();J9="pbrBlockLightmapInit",Jue=`#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 -`;A.IncludesShadersStore[Q9]||(A.IncludesShadersStore[Q9]=Wue)});var J9,Hue,eK=M(()=>{G();J9="pbrBlockGeometryInfo",Hue=`float NdotVUnclamped=dot(normalW,viewDirectionW);float NdotV=absEps(NdotVUnclamped);float alphaG=convertRoughnessToAverageSlope(roughness);vec2 AARoughnessFactors=getAARoughnessFactors(normalW.xyz); +`;A.IncludesShadersStore[J9]||(A.IncludesShadersStore[J9]=Jue)});var tK,eme,iK=M(()=>{G();tK="pbrBlockGeometryInfo",eme=`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 -`;A.IncludesShadersStore[J9]||(A.IncludesShadersStore[J9]=Hue)});var tK,zue,iK=M(()=>{G();tK="pbrBlockReflectance",zue=`#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX) +`;A.IncludesShadersStore[tK]||(A.IncludesShadersStore[tK]=eme)});var rK,tme,nK=M(()=>{G();rK="pbrBlockReflectance",tme=`#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 -`;A.IncludesShadersStore[tK]||(A.IncludesShadersStore[tK]=zue)});var rK,Xue,nK=M(()=>{G();rK="pbrBlockDirectLighting",Xue=`vec3 diffuseBase=vec3(0.,0.,0.); +`;A.IncludesShadersStore[rK]||(A.IncludesShadersStore[rK]=tme)});var sK,ime,aK=M(()=>{G();sK="pbrBlockDirectLighting",ime=`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 -`;A.IncludesShadersStore[rK]||(A.IncludesShadersStore[rK]=Xue)});var sK,Yue,aK=M(()=>{G();sK="pbrBlockFinalLitComponents",Yue=`aggShadow=aggShadow/numLights; +`;A.IncludesShadersStore[sK]||(A.IncludesShadersStore[sK]=ime)});var oK,rme,lK=M(()=>{G();oK="pbrBlockFinalLitComponents",rme=`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 -`;A.IncludesShadersStore[sK]||(A.IncludesShadersStore[sK]=Yue)});var oK,Kue,lK=M(()=>{G();oK="pbrBlockFinalUnlitComponents",Kue=`vec3 finalDiffuse=diffuseBase;finalDiffuse*=surfaceAlbedo; +`;A.IncludesShadersStore[oK]||(A.IncludesShadersStore[oK]=rme)});var cK,nme,fK=M(()=>{G();cK="pbrBlockFinalUnlitComponents",nme=`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; -`;A.IncludesShadersStore[oK]||(A.IncludesShadersStore[oK]=Kue)});var cK,jue,fK=M(()=>{G();cK="pbrBlockFinalColorComposition",jue=`vec4 finalColor=vec4( +`;A.IncludesShadersStore[cK]||(A.IncludesShadersStore[cK]=nme)});var hK,sme,dK=M(()=>{G();hK="pbrBlockFinalColorComposition",sme=`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); -`;A.IncludesShadersStore[cK]||(A.IncludesShadersStore[cK]=jue)});var hK,que,dK=M(()=>{G();hK="pbrBlockPrePass",que=`#if SCENE_MRT_COUNT>0 +`;A.IncludesShadersStore[hK]||(A.IncludesShadersStore[hK]=sme)});var uK,ame,mK=M(()=>{G();uK="pbrBlockPrePass",ame=`#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 -`;A.IncludesShadersStore[hK]||(A.IncludesShadersStore[hK]=que)});var mK={};tt(mK,{pbrPixelShader:()=>Zue});var wO,uK,Zue,pK=M(()=>{G();oR();lR();T9();DO();oO();cR();fR();b9();dR();Tc();nd();Ng();La();lO();cO();fO();uR();hR();sp();hO();dO();np();uO();mO();KR();mR();pR();zg();M9();y9();L9();O9();w9();B9();V9();k9();H9();X9();j9();Ac();pO();_R();Z9();gR();$9();eK();NO();iK();nK();_L();aK();lK();fK();vR();wg();_O();dK();ER();gO();wO="pbrPixelShader",uK=`#define PBR_FRAGMENT_SHADER +`;A.IncludesShadersStore[uK]||(A.IncludesShadersStore[uK]=ame)});var _K={};tt(_K,{pbrPixelShader:()=>ome});var VO,pK,ome,gK=M(()=>{G();dR();uR();x9();FO();hO();mR();pR();M9();gR();xc();od();Ug();La();dO();uO();mO();vR();_R();ap();pO();_O();sp();gO();vO();$R();ER();SR();jg();y9();L9();O9();w9();B9();V9();k9();H9();X9();K9();Z9();Rc();EO();TR();$9();AR();eK();iK();UO();nK();aK();SL();lK();fK();dK();xR();Vg();SO();mK();RR();TO();VO="pbrPixelShader",pK=`#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 } -`;A.ShadersStore[wO]||(A.ShadersStore[wO]=uK);Zue={name:wO,shader:uK}});var cp,FO,QR,BO,Tr,_K=M(()=>{kt();Vt();Pt();lo();zR();ys();Ge();ki();u7();vx();zt();Ex();ng();kn();wa();Rg();Oa();hy();Df();m7();p7();_7();g7();v7();eL();ll();bg();Gn();Sx();Tx();Ax();xx();cp={effect:null,subMesh:null},FO=class extends jm(Km(br)){},QR=class extends Xm(FO){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}},BO=class extends qm(dl){},Tr=class n extends BO{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 on(this),this.iridescence=new Bs(this),this.anisotropy=new Ic(this),this.sheen=new ra(this),this.subSurface=new Ai(this),this.detailMap=new Fa(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=HR(this.getScene()),this.prePassConfiguration=new ws}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 QR(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;Wt&&(Wt.PrepareUniforms(m,i),Wt.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(()=>(A7(),T7)),Promise.resolve().then(()=>(u9(),d9))]):await Promise.all([Promise.resolve().then(()=>(E9(),v9)),Promise.resolve().then(()=>(pK(),mK))]),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),Xn.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;Rf(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(D.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 QR(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),Xn.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);Ls(t,this._activeEffect,this.prePassConfiguration),this._vertexPullingMetadata&&Nf(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),ix(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),Un(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!==ei.FOGMODE_NONE||f||this.subSurface.refractionTexture||t.receiveShadows||s.PREPASS||s.CLUSTLIGHT_BATCH)&&this.bindView(a),Af(r,t,this._activeEffect,!0),s.NUM_MORPH_INFLUENCERS&&Vn(t,this._activeEffect),s.BAKED_VERTEX_ANIMATION_TEXTURE&&((p=t.bakedVertexAnimationManager)==null||p.bind(a,s.INSTANCES)),this._imageProcessingConfiguration.bind(this._activeEffect),Tf(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)}};Tr.PBRMATERIAL_OPAQUE=Ee.MATERIAL_OPAQUE;Tr.PBRMATERIAL_ALPHATEST=Ee.MATERIAL_ALPHATEST;Tr.PBRMATERIAL_ALPHABLEND=Ee.MATERIAL_ALPHABLEND;Tr.PBRMATERIAL_ALPHATESTANDBLEND=Ee.MATERIAL_ALPHATESTANDBLEND;Tr.DEFAULT_AO_ON_ANALYTICAL_LIGHTS=0;Tr.LIGHTFALLOFF_PHYSICAL=0;Tr.LIGHTFALLOFF_GLTF=1;Tr.LIGHTFALLOFF_STANDARD=2;Tr.ForceGLSL=!1;P([le("_markAllSubMeshesAsMiscDirty")],Tr.prototype,"debugMode",void 0)});var gK={};tt(gK,{PBRMaterial:()=>dt});var dt,vK=M(()=>{kt();Vt();zR();zt();_K();zi();kn();Rr();dt=class n extends Tr{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===Tr.LIGHTFALLOFF_PHYSICAL}set usePhysicalLightFalloff(e){e!==this.usePhysicalLightFalloff&&(this._markAllSubMeshesAsTexturesDirty(),e?this._lightFalloff=Tr.LIGHTFALLOFF_PHYSICAL:this._lightFalloff=Tr.LIGHTFALLOFF_STANDARD)}get useGLTFLightFalloff(){return this._lightFalloff===Tr.LIGHTFALLOFF_GLTF}set useGLTFLightFalloff(e){e!==this.useGLTFLightFalloff&&(this._markAllSubMeshesAsTexturesDirty(),e?this._lightFalloff=Tr.LIGHTFALLOFF_GLTF:this._lightFalloff=Tr.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=HR(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=Tr.PBRMATERIAL_OPAQUE;dt.PBRMATERIAL_ALPHATEST=Tr.PBRMATERIAL_ALPHATEST;dt.PBRMATERIAL_ALPHABLEND=Tr.PBRMATERIAL_ALPHABLEND;dt.PBRMATERIAL_ALPHATESTANDBLEND=Tr.PBRMATERIAL_ALPHATESTANDBLEND;dt.DEFAULT_AO_ON_ANALYTICAL_LIGHTS=Tr.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([Er(),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([Er("ambient"),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"ambientColor",void 0);P([Er("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([Er("reflectivity"),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"reflectivityColor",void 0);P([Er("reflection"),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"reflectionColor",void 0);P([Er("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 EK={};tt(EK,{PBRMaterialLoadingAdapter:()=>UO});var UO,SK=M(()=>{zt();gD();Ge();UO=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 Jue(n){if(n.min&&n.max){let e=n.min,t=n.max,i=$.Vector3[0].copyFromFloats(e[0],e[1],e[2]),r=$.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 Que,$ue,Kt,$R,TK=M(()=>{B5();Ge();zt();Ci();al();z5();FR();Y5();kn();Vr();qh();ki();JA();vm();yi();mD();j5();uD();Xl();Pt();_m();_D();vD();$5();sm();J5();Que=new Jg(()=>Promise.resolve().then(()=>(nY(),rY))),$ue=new Jg(()=>Promise.resolve().then(()=>(lY(),oY))),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(()=>(f7(),c7))).OpenPBRMaterial,adapterClass:(await Promise.resolve().then(()=>(d7(),h7))).OpenPBRMaterialLoadingAdapter}:this._pbrMaterialImpl={materialClass:(await Promise.resolve().then(()=>(vK(),gK))).PBRMaterial,adapterClass:(await Promise.resolve().then(()=>(SK(),EK))).PBRMaterialLoadingAdapter});let s=`${as[as.LOADING]} => ${as[as.READY]}`,a=`${as[as.LOADING]} => ${as[as.COMPLETE]}`;this._parent._startPerformanceCounter(s),this._parent._startPerformanceCounter(a),this._parent._setState(as.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(as.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(as.COMPLETE),this._parent.onCompleteObservable.notifyObservers(void 0),this._parent.onCompleteObservable.clear(),this.dispose()},h=>{this._parent.onErrorObservable.notifyObservers(h),this._parent.onErrorObservable.clear(),this.dispose()})}),f))}).catch(s=>{throw this._disposed||(this._parent.onErrorObservable.notifyObservers(s),this._parent.onErrorObservable.clear(),this.dispose()),s})}_loadData(e){if(this._gltf=e.json,this._setupData(),e.bin){let t=this._gltf.buffers;if(t&&t[0]&&!t[0].uri){let i=t[0];(i.byteLengthe.bin.byteLength)&&J.Warn(`Binary buffer length (${i.byteLength}) from JSON does not match chunk length (${e.bin.byteLength})`),this._bin=e.bin}else J.Warn("Unexpected BIN chunk")}}_setupData(){if(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(q5.forEach((i,r)=>{var s;((s=this.parent.extensionOptions[r])==null?void 0:s.enabled)===!1?i.isGLTFExtension&&this.isExtensionUsed(r)&&J.Warn(`Extension ${r} is used but has been explicitly disabled.`):(!i.isGLTFExtension||this.isExtensionUsed(r))&&e.push((async()=>{let a=await i.factory(this);return a.name!==r&&J.Warn(`The name of the glTF loader extension instance does not match the registered name: ${a.name} !== ${r}`),this._parent.onExtensionLoadedObservable.notifyObservers(a),a})())}),this._extensions.push(...await Promise.all(e)),this._extensions.sort((i,r)=>(i.order||Number.MAX_VALUE)-(r.order||Number.MAX_VALUE)),this._parent.onExtensionLoadedObservable.clear(),this._gltf.extensionsRequired){for(let i of this._gltf.extensionsRequired)if(!this._extensions.some(s=>s.name===i&&s.enabled))throw((t=this.parent.extensionOptions[i])==null?void 0:t.enabled)===!1?new Error(`Required extension ${i} is disabled`):new Error(`Required extension ${i} is not available`)}}_createRootNode(){if(this._parent.customRootNode!==void 0)return this._rootBabylonMesh=this._parent.customRootNode,{_babylonTransformNode:this._rootBabylonMesh===null?void 0:this._rootBabylonMesh,index:-1};this._babylonScene._blockEntityCollection=!!this._assetContainer;let e=new Z("__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 Sr&&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 ld.NONE:break;case ld.FIRST:{let e=this._getAnimationGroups();e.length!==0&&e[0].start(!0);break}case ld.ALL:{let e=this._getAnimationGroups();for(let t of e)t.start(!0);break}default:{J.Error(`Invalid animation start mode (${this._parent.animationStartMode})`);return}}}loadNodeAsync(e,t,i=()=>{}){let r=this._extensionsLoadNodeAsync(e,t,i);if(r)return r;if(t._babylonTransformNode)throw new Error(`${e}: Invalid recursive node hierarchy`);let s=new Array;this.logOpen(`${e} ${t.name||""}`);let a=c=>{if(n.AddPointerMetadata(c,e),n._LoadTransform(t,c),t.camera!=null){let f=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 ti(c,this._babylonScene);f._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,t.mesh==null?t._babylonTransformNode=f:t._babylonTransformNodeForSkin=f,a(f)}if(o)if(l){let c=Kt.Get(`${e}/mesh`,this._gltf.meshes,t.mesh);s.push(this._loadMeshAsync(`/meshes/${c.index}`,t,c,f=>{let h=t._babylonTransformNodeForSkin;f.metadata=ED(h.metadata,f.metadata||{});let d=Kt.Get(`${e}/skin`,this._gltf.skins,t.skin);s.push(this._loadSkinAsync(`/skins/${d.index}`,t,d,u=>{this._forEachPrimitive(t,m=>{m.skeleton=u}),this._postSceneLoadActions.push(()=>{if(d.skeleton!=null){let m=Kt.Get(`/skins/${d.index}/skeleton`,this._gltf.nodes,d.skeleton).parent;t.index===m.index?f.parent=h.parent:f.parent=m._babylonTransformNode}else f.parent=this._rootBabylonMesh;this._parent.onSkinLoadedObservable.notifyObservers({node:h,skinnedNode:f})})}))}))}else{let c=Kt.Get(`${e}/mesh`,this._gltf.meshes,t.mesh);s.push(this._loadMeshAsync(`/meshes/${c.index}`,t,c,a))}return this.logClose(),Promise.all(s).then(()=>(this._forEachPrimitive(t,c=>{let f=c;!f.isAnInstance&&f.geometry&&f.geometry.useBoundingInfoFromGeometry?c._updateBoundingInfo():c.refreshBoundingInfo(!0,!0)}),t._babylonTransformNode))}_loadMeshAsync(e,t,i,r){let s=i.primitives;if(!s||!s.length)throw new Error(`${e}: Primitives are missing`);s[0].index==null&&Kt.Assign(s);let a=new Array;this.logOpen(`${e} ${i.name||""}`);let o=t.name||`node${t.index}`;if(s.length===1){let l=i.primitives[0];a.push(this._loadMeshPrimitiveAsync(`${e}/primitives/${l.index}`,o,t,i,l,c=>{t._babylonTransformNode=c,t._primitiveBabylonMeshes=[c]}))}else{this._babylonScene._blockEntityCollection=!!this._assetContainer,t._babylonTransformNode=new ti(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 Z(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()===D.PositionKind&&!this.parent.alwaysComputeBoundingBox&&!i.skeleton){let m=Jue(d);m&&(o._boundingInfo=m,o.useBoundingInfoFromGeometry=!0)}o.setVerticesBuffer(u,d.count)})),f==D.MatricesIndicesExtraKind&&(i.numBoneInfluencers=8),h&&h(d)};return l("POSITION",D.PositionKind),l("NORMAL",D.NormalKind),l("TANGENT",D.TangentKind),l("TEXCOORD_0",D.UVKind),l("TEXCOORD_1",D.UV2Kind),l("TEXCOORD_2",D.UV3Kind),l("TEXCOORD_3",D.UV4Kind),l("TEXCOORD_4",D.UV5Kind),l("TEXCOORD_5",D.UV6Kind),l("JOINTS_0",D.MatricesIndicesKind),l("WEIGHTS_0",D.MatricesWeightsKind),l("JOINTS_1",D.MatricesIndicesExtraKind),l("WEIGHTS_1",D.MatricesWeightsExtraKind),l("COLOR_0",D.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 dd(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",D.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",D.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",D.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",D.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",D.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",D.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 BR(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)&&(J.Warn(`${e}/skeleton: Overriding with nearest common ancestor as skeleton node is not a common root`),t.skeleton=s.index)}else J.Warn(`${e}: Failed to find common root`)}let r={};for(let s of t.joints){let a=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&&J.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 bc(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||Que.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():$ue.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 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*D.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 D.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),D.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 D(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 D(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 NR;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:wB((m=i.uri)!=null?m:""),loaderOptions:s,useSRGBBuffer:!!a&&this._parent.useSRGBBuffers},h=new ve(null,this._babylonScene,f);h._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,l.push(c.promise);let d=i.uri&&!hf(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(hf(i)){let s=new Uint8Array(df(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 ve.CLAMP_ADDRESSMODE;case 33648:return ve.MIRROR_ADDRESSMODE;case 10497:return ve.WRAP_ADDRESSMODE;default:return J.Warn(`${e}: Invalid value (${t})`),ve.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 ve.LINEAR_NEAREST;case 9729:return ve.LINEAR_LINEAR;case 9984:return ve.LINEAR_NEAREST_MIPNEAREST;case 9985:return ve.LINEAR_LINEAR_MIPNEAREST;case 9986:return ve.LINEAR_NEAREST_MIPLINEAR;case 9987:return ve.LINEAR_LINEAR_MIPLINEAR;default:return J.Warn(`${e}/minFilter: Invalid value (${r})`),ve.LINEAR_LINEAR_MIPLINEAR}else switch(i!==9728&&J.Warn(`${e}/magFilter: Invalid value (${i})`),r){case 9728:return ve.NEAREST_NEAREST;case 9729:return ve.NEAREST_LINEAR;case 9984:return ve.NEAREST_NEAREST_MIPNEAREST;case 9985:return ve.NEAREST_LINEAR_MIPNEAREST;case 9986:return ve.NEAREST_NEAREST_MIPLINEAR;case 9987:return ve.NEAREST_LINEAR_MIPLINEAR;default:return J.Warn(`${e}/minFilter: Invalid value (${r})`),ve.NEAREST_NEAREST_MIPNEAREST}}static _GetTypedArrayConstructor(e,t){try{return pC(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=D.GetTypeByteLength(t);return r%l!==0?(J.Warn(`${e}: Copying buffer as byte offset (${r}) is not a multiple of component type byte length (${l})`),new o(a.slice(r,r+s*l),0)):new o(a,r,s)}static _GetNumComponents(e,t){switch(t){case"SCALAR":return 1;case"VEC2":return 2;case"VEC3":return 3;case"VEC4":return 4;case"MAT2":return 4;case"MAT3":return 9;case"MAT4":return 16}throw new Error(`${e}: Invalid type (${t})`)}static _ValidateUri(e){return _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)}};$R.DefaultSampler={index:-1};jf._CreateGLTF2Loader=n=>new $R(n)});var GO,VO,AK=M(()=>{_D();GO="ExtrasAsMetadata",VO=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=GO,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(GO);VR(GO,!1,n=>new VO(n))});var JR,xK=M(()=>{JR={name:"obj",extensions:".obj"}});var ud,RK=M(()=>{zt();Vr();xc();ud=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 ve(r,i,!1,n.INVERT_TEXTURE_Y)}};ud.INVERT_TEXTURE_Y=!0});var jr,bK=M(()=>{ki();xc();zt();Ge();JA();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(D.PositionKind),i=e.getVerticesData(D.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)||J.Log("Unhandled expression at line : "+u)}if(this._hasMeshes&&(this._handledMesh=this._meshesFromObj[this._meshesFromObj.length-1],this._loadingOptions.useLegacyBehavior&&this._indicesForBabylon.reverse(),this._unwrapData(),this._handledMesh.indices=this._indicesForBabylon,this._handledMesh.positions=this._unwrappedPositionsForBabylon,this._unwrappedNormalsForBabylon.length&&(this._handledMesh.normals=this._unwrappedNormalsForBabylon),this._unwrappedUVForBabylon.length&&(this._handledMesh.uvs=this._unwrappedUVForBabylon),this._unwrappedColorsForBabylon.length&&(this._handledMesh.colors=this._unwrappedColorsForBabylon),this._handledMesh.hasLines=this._hasLineData),!this._hasMeshes){let d=null;if(this._indicesForBabylon.length)this._loadingOptions.useLegacyBehavior&&this._indicesForBabylon.reverse(),this._unwrapData();else{for(let u of this._positions)this._unwrappedPositionsForBabylon.push(u.x,u.y,u.z);if(this._normals.length)for(let u of this._normals)this._unwrappedNormalsForBabylon.push(u.x,u.y,u.z);if(this._uvs.length)for(let u of this._uvs)this._unwrappedUVForBabylon.push(u.x,u.y);if(this._extColors.length)for(let u of this._extColors)this._unwrappedColorsForBabylon.push(u.r,u.g,u.b,u.a);else if(this._colors.length)for(let u of this._colors)this._unwrappedColorsForBabylon.push(u.r,u.g,u.b,u.a);this._materialNameFromObj||(d=new 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 IK={};tt(IK,{OBJFileLoader:()=>na});var na,kO=M(()=>{Ge();Ci();ep();Kg();xK();RK();bK();xc();na=class n{static get INVERT_TEXTURE_Y(){return ud.INVERT_TEXTURE_Y}static set INVERT_TEXTURE_Y(e){ud.INVERT_TEXTURE_Y=e}constructor(e){this.name=JR.name,this.extensions=JR.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[JR.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 ud,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})}};na.OPTIMIZE_WITH_UV=!0;na.INVERT_Y=!1;na.IMPORT_VERTEX_COLORS=!1;na.COMPUTE_NORMALS=!1;na.OPTIMIZE_NORMALS=!1;na.UV_SCALING=new Fe(1,1);na.SKIP_MATERIALS=!1;na.MATERIAL_LOADING_FAILS_SILENTLY=!0;na.USE_LEGACY_BEHAVIOR=!1;Kf(new na)});function eme(n){let e=n.trim();return/^https?:\/\//i.test(e)||/^wss?:\/\//i.test(e)||/^\/\//.test(e)}function WO(n,e){if(eme(n))throw new Error(`[AI3D] Babylon ${e} is limited to local vault resources. Refused remote URL: ${n}`);return n}function eb(n){throw new Error(`[AI3D] Babylon script loading is disabled in this plugin build. Refused script URL: ${n}`)}function CK(){if(MK)return;let n=i=>WO(i,"asset loading"),e=i=>WO(i,"script loading"),t=()=>-1;_e.PreprocessUrl=n,_e.ScriptPreprocessUrl=e,_e.DefaultRetryStrategy=t,_e.LoadScript=(i,r,s)=>{try{e(i),eb(i)}catch(a){s==null||s(a instanceof Error?a.message:String(a),a);return}r==null||r()},_e.LoadScriptAsync=async i=>{e(i),eb(i)},_e.LoadBabylonScript=(i,r,s)=>{try{eb(i)}catch(a){s==null||s(a instanceof Error?a.message:String(a),a);return}r()},_e.LoadBabylonScriptAsync=async i=>{eb(i)},Gi.PreprocessUrl=n,Gi.ScriptPreprocessUrl=e,Gi.DefaultRetryStrategy=t,yr.CustomRequestModifiers.push((i,r)=>WO(r,"request")),MK=!0}var MK,yK=M(()=>{"use strict";Xl();Ci();Bh();MK=!1});function tb(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,w=(v>>5&31)/31,N=(v>>10&31)/31,U=p*12;l[U+0]=V,l[U+1]=w,l[U+2]=N,l[U+3]=1,l[U+4]=V,l[U+5]=w,l[U+6]=N,l[U+7]=1,l[U+8]=V,l[U+9]=w,l[U+10]=N,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,L=x*R-T*S,O=Math.sqrt(C*C+y*y+L*L);O>1e-8?(C/=O,y/=O,L/=O):(C=0,y=0,L=1,f++),o[_+0]=C,o[_+1]=y,o[_+2]=L,o[_+3]=C,o[_+4]=y,o[_+5]=L,o[_+6]=C,o[_+7]=y,o[_+8]=L,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 Z("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 PK(n,e){return tb(n,e)}function LK(n){n(tme)}var tme,HO=M(()=>{"use strict";yi();Kg();mr();xc();zt();tme={name:"stl",extensions:".stl",importMeshAsync(n,e,t){return Promise.resolve().then(()=>({meshes:[tb(e,t)],particleSystems:[],skeletons:[],animationGroups:[],transformNodes:[],geometries:[],lights:[],spriteManagers:[]}))},loadAsync(n,e){return Promise.resolve().then(()=>{tb(n,e)})},loadAssetContainerAsync(n,e){return Promise.resolve().then(()=>{let t=tb(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 ime(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 ib(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 rme(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,L=l[v+2]-E,O=R*L-I*y,V=I*C-S*L,w=S*y-R*C;d[_]+=O,d[_+1]+=V,d[_+2]+=w,d[g]+=O,d[g+1]+=V,d[g+2]+=w,d[v]+=O,d[v+1]+=V,d[v+2]+=w}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 Z("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 DK(n,e){return rb(n,e)}function OK(n){n(sme)}var sme,zO=M(()=>{"use strict";yi();Kg();mr();xc();zt();sme={name:"ply",extensions:".ply",importMeshAsync(n,e,t){return Promise.resolve().then(()=>({meshes:[rb(e,t)],particleSystems:[],skeletons:[],animationGroups:[],transformNodes:[],geometries:[],lights:[],spriteManagers:[]}))},loadAsync(n,e){return Promise.resolve().then(()=>{rb(n,e)})},loadAssetContainerAsync(n,e){return Promise.resolve().then(()=>{let t=rb(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 rv(){NK||(CK(),LK(Kf),OK(Kf),NK=!0)}var NK,nv=M(()=>{"use strict";uD();TK();AK();kO();ep();yK();HO();zO();NK=!1});function sb(n){return Math.floor(n.getTotalIndices()/3)}function md(n){return n.getTotalVertices()}function pd(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),md(r)>0||r.getTotalIndices()>0))}function FK(n){let e=Array.from(n),t=new Set(e);return e.filter(i=>{let r=i.parent;return!r||!t.has(r)})}function XO(n){n.computeWorldMatrix(!0);let e=n.getBoundingInfo().boundingBox;return O_(Gt(e.minimumWorld),Gt(e.maximumWorld))}function sv(n){let e=null;for(let t of n)!t||t.isDisposed()||(e=w3(e,XO(t)));return e}function ab(n,e=[]){var t;return(t=sv(pd(n,e)))!=null?t:XO(n)}function ob(n,e,t,i={}){return tT({rootName:n,boundingSize:xr(e),meshes:t.map(r=>({triangleCount:sb(r),vertexCount:md(r),materialKeys:r.material?[r.material.name]:[]})),splatCount:i.splatCount,resourceWarnings:i.resourceWarnings})}function BK(n,e={}){var t,i;return{name:n.name,triangleCount:e.isSplat?null:sb(n),vertexCount:md(n),materialName:(i=(t=n.material)==null?void 0:t.name)!=null?i:null}}function YO(n,e=wK){var a,o,l;let t=XO(n),i=n.name||`mesh-${n.uniqueId}`,r=kK(n.metadata,(a=e.get(`node:${i}`))!=null?a:e.get(`mesh:${i}`)),s=nf(r,{name:i,path:GK(n)});return Fu({name:WK(s,i),triangleCount:sb(n),vertexCount:md(n),materialName:(l=(o=n.material)==null?void 0:o.name)!=null?l:null,boundingSize:xr(t),center:tn(t),source:s.hasExplicitIdentity?"component":"mesh",meshNames:[i],childCount:1,componentId:s.componentId,occurrenceId:s.occurrenceId,partNumber:s.partNumber,componentPath:s.componentPath})}function UK(n,e,t=wK){let i=new Set(n),r=[],s=new Set,a=[];for(let o of e){let l=o.getChildMeshes(!1).filter(d=>i.has(d)),c=nb(o,`component-${o.uniqueId}`),f=kK(o.metadata,t.get(`node:${c}`)),h=nf(f,{name:nb(o,`component-${o.uniqueId}`),path:GK(o)});l.length<1||l.length===n.length||!h.hasExplicitIdentity&&(!o.name.trim()||l.length<2)||a.push({node:o,childMeshes:l,identity:h})}return a.sort((o,l)=>o.childMeshes.length-l.childMeshes.length).forEach(({node:o,childMeshes:l,identity:c})=>{var p;let f=l.filter(_=>!s.has(_));if(f.length<1||!c.hasExplicitIdentity&&f.length<2)return;for(let _ of f)s.add(_);let h=sv(f);if(!h)return;let d=new Set,u=0,m=0;for(let _ of f)u+=sb(_),m+=md(_),(p=_.material)!=null&&p.name&&d.add(_.material.name);r.push(Fu({name:WK(c,nb(o,`component-${o.uniqueId}`)),triangleCount:u,vertexCount:m,materialName:cT(d),boundingSize:xr(h),center:tn(h),source:c.hasExplicitIdentity?"component":"group",meshNames:f.map(_=>_.name||`mesh-${_.uniqueId}`),childCount:f.length,componentId:c.componentId,occurrenceId:c.occurrenceId,partNumber:c.partNumber,componentPath:c.componentPath}))}),{parts:r,groupedMeshes:s}}function VK(n,e){let t=ame(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 nb(n,e){var i;return((i=nf(n.metadata,{name:n.name}).displayName)==null?void 0:i.trim())||n.name||e}function GK(n){let e=[],t=n;for(;t&&typeof t=="object"&&"name"in t;){let i=t,r=nb(i,"node");r.trim()&&e.push(r),t=i.parent}return e.reverse().join("/")}function ame(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 kK(n,e){return e===void 0?n:n==null?e:{metadata:n,extras:e}}function WK(n,e){var t;return((t=n.displayName)==null?void 0:t.trim())||n.partNumber||n.componentId||e}var wK,lb=M(()=>{"use strict";Fl();FM();w_();us();iT();wK=new Map});function Qf(n){return Zr(n)}function HK(n,e,t,i=[]){_T(new cb(n,i),e,t)}function KO(n,e=[]){gT(new cb(n,e))}var cb,zK=M(()=>{"use strict";Ge();Fl();us();NM();lb();cb=class{constructor(e,t=[]){this.rootMesh=e,this.loadedMeshes=t}getParts(){return pd(this.rootMesh,this.loadedMeshes)}getRootCenter(){return tn(ab(this.rootMesh,this.loadedMeshes))}getPartPosition(e){return Gt(e.position)}getPartCenter(e){return Gt(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:Qf(t._previewExplodeState.originalPosition),originalCenter:Qf(t._previewExplodeState.originalCenter)}:t!=null&&t._originalPos&&(t!=null&&t._originalCenter)?{originalPosition:Qf(t._originalPos),originalCenter:Qf(t._originalCenter)}:null}setPartState(e,t){(!e.metadata||typeof e.metadata!="object")&&(e.metadata={});let i=e.metadata;i._previewExplodeState={originalPosition:Qf(t.originalPosition),originalCenter:Qf(t.originalCenter)},i._originalPos=Qf(t.originalPosition),i._originalCenter=Qf(t.originalCenter)}}});var fb={};tt(fb,{glowBlurPostProcessPixelShaderWGSL:()=>ome});var jO,XK,ome,hb=M(()=>{G();jO="glowBlurPostProcessPixelShader",XK=`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[VO]||(A.ShadersStore[VO]=pK);ome={name:VO,shader:pK}});var fp,GO,ib,kO,Ar,vK=M(()=>{kt();Vt();Pt();co();qR();Ps();Ge();ki();p7();xx();zt();Rx();lg();Wn();wa();Cg();Oa();py();Of();_7();g7();v7();E7();S7();nL();fl();yg();kn();bx();Ix();Mx();Cx();fp={effect:null,subMesh:null},GO=class extends qm(jm(br)){},ib=class extends Ym(GO){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}},kO=class extends Zm(ml){},Ar=class n extends kO{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 Lr(this),this.clearCoat=new on(this),this.iridescence=new Us(this),this.anisotropy=new Cc(this),this.sheen=new na(this),this.subSurface=new Ai(this),this.detailMap=new Fa(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=jR(this.getScene()),this.prePassConfiguration=new Fs}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 ib(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;Wt&&(Wt.PrepareUniforms(m,i),Wt.PrepareSamplers(p,i)),wm({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(()=>(R7(),x7)),Promise.resolve().then(()=>(p9(),m9))]):await Promise.all([Promise.resolve().then(()=>(T9(),S9)),Promise.resolve().then(()=>(gK(),_K))]),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();ym(o,e,i,!0,this._maxSimultaneousLights,this._disableLighting),i._needNormals=!0,Dm(o,i);let c=this.needAlphaBlendingForMesh(e)&&this.getScene().useOrderIndependentTransparency;if(Nm(o,i,this.canRenderToMRT&&!c),Om(o,i,c),Yn.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;bf(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&&(Mm(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(D.NormalKind),i.DEBUGMODE=this._debugMode),Pm(o,l,this,i,!!r,s,a),this._eventInfo.defines=i,this._eventInfo.mesh=e,this._callbackPluginEventPrepareDefinesBeforeAttributes(this._eventInfo),Lm(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 ib(this._eventInfo.defineNames),o=this._prepareEffect(e,e,a,void 0,void 0,r.useInstances,r.clipPlane);this._onEffectCreatedObservable&&(fp.effect=o,fp.subMesh=null,this._onEffectCreatedObservable.notifyObservers(fp)),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),Fm(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),Yn.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);Ds(t,this._activeEffect,this.prePassConfiguration),this._vertexPullingMetadata&&wf(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)),Tm(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),ox(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),Vn(this._activeEffect,this,r),this.bindEyePosition(a)}else r.getEngine()._features.needToAlwaysBindUniformBuffers&&(this._needToBindSceneUbo=!0);(c||!this.isFrozen)&&(r.lightsEnabled&&!this._disableLighting&&xm(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),xf(r,t,this._activeEffect,!0),s.NUM_MORPH_INFLUENCERS&&Gn(t,this._activeEffect),s.BAKED_VERTEX_ANIMATION_TEXTURE&&((p=t.bakedVertexAnimationManager)==null||p.bind(a,s.INSTANCES)),this._imageProcessingConfiguration.bind(this._activeEffect),Af(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)}};Ar.PBRMATERIAL_OPAQUE=Ee.MATERIAL_OPAQUE;Ar.PBRMATERIAL_ALPHATEST=Ee.MATERIAL_ALPHATEST;Ar.PBRMATERIAL_ALPHABLEND=Ee.MATERIAL_ALPHABLEND;Ar.PBRMATERIAL_ALPHATESTANDBLEND=Ee.MATERIAL_ALPHATESTANDBLEND;Ar.DEFAULT_AO_ON_ANALYTICAL_LIGHTS=0;Ar.LIGHTFALLOFF_PHYSICAL=0;Ar.LIGHTFALLOFF_GLTF=1;Ar.LIGHTFALLOFF_STANDARD=2;Ar.ForceGLSL=!1;P([le("_markAllSubMeshesAsMiscDirty")],Ar.prototype,"debugMode",void 0)});var EK={};tt(EK,{PBRMaterial:()=>dt});var dt,SK=M(()=>{kt();Vt();qR();zt();vK();zi();Wn();Rr();dt=class n extends Ar{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===Ar.LIGHTFALLOFF_PHYSICAL}set usePhysicalLightFalloff(e){e!==this.usePhysicalLightFalloff&&(this._markAllSubMeshesAsTexturesDirty(),e?this._lightFalloff=Ar.LIGHTFALLOFF_PHYSICAL:this._lightFalloff=Ar.LIGHTFALLOFF_STANDARD)}get useGLTFLightFalloff(){return this._lightFalloff===Ar.LIGHTFALLOFF_GLTF}set useGLTFLightFalloff(e){e!==this.useGLTFLightFalloff&&(this._markAllSubMeshesAsTexturesDirty(),e?this._lightFalloff=Ar.LIGHTFALLOFF_GLTF:this._lightFalloff=Ar.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=jR(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=Ar.PBRMATERIAL_OPAQUE;dt.PBRMATERIAL_ALPHATEST=Ar.PBRMATERIAL_ALPHATEST;dt.PBRMATERIAL_ALPHABLEND=Ar.PBRMATERIAL_ALPHABLEND;dt.PBRMATERIAL_ALPHATESTANDBLEND=Ar.PBRMATERIAL_ALPHATESTANDBLEND;dt.DEFAULT_AO_ON_ANALYTICAL_LIGHTS=Ar.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([Sr(),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([Sr("ambient"),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"ambientColor",void 0);P([Sr("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([Sr("reflectivity"),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"reflectivityColor",void 0);P([Sr("reflection"),le("_markAllSubMeshesAsTexturesDirty")],dt.prototype,"reflectionColor",void 0);P([Sr("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 TK={};tt(TK,{PBRMaterialLoadingAdapter:()=>WO});var WO,AK=M(()=>{zt();TD();Ge();WO=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 fme(n){if(n.min&&n.max){let e=n.min,t=n.max,i=$.Vector3[0].copyFromFloats(e[0],e[1],e[2]),r=$.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 lme,cme,Kt,rb,xK=M(()=>{V5();Ge();zt();Ci();ll();Y5();kR();j5();Wn();Gr();$h();ki();nx();Em();yi();vD();Z5();gD();Kl();Pt();gm();SD();AD();eY();am();tY();lme=new rv(()=>Promise.resolve().then(()=>(aY(),sY))),cme=new rv(()=>Promise.resolve().then(()=>(fY(),cY))),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(()=>(d7(),h7))).OpenPBRMaterial,adapterClass:(await Promise.resolve().then(()=>(m7(),u7))).OpenPBRMaterialLoadingAdapter}:this._pbrMaterialImpl={materialClass:(await Promise.resolve().then(()=>(SK(),EK))).PBRMaterial,adapterClass:(await Promise.resolve().then(()=>(AK(),TK))).PBRMaterialLoadingAdapter});let s=`${os[os.LOADING]} => ${os[os.READY]}`,a=`${os[os.LOADING]} => ${os[os.COMPLETE]}`;this._parent._startPerformanceCounter(s),this._parent._startPerformanceCounter(a),this._parent._setState(os.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(os.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(os.COMPLETE),this._parent.onCompleteObservable.notifyObservers(void 0),this._parent.onCompleteObservable.clear(),this.dispose()},h=>{this._parent.onErrorObservable.notifyObservers(h),this._parent.onErrorObservable.clear(),this.dispose()})}),f))}).catch(s=>{throw this._disposed||(this._parent.onErrorObservable.notifyObservers(s),this._parent.onErrorObservable.clear(),this.dispose()),s})}_loadData(e){if(this._gltf=e.json,this._setupData(),e.bin){let t=this._gltf.buffers;if(t&&t[0]&&!t[0].uri){let i=t[0];(i.byteLengthe.bin.byteLength)&&J.Warn(`Binary buffer length (${i.byteLength}) from JSON does not match chunk length (${e.bin.byteLength})`),this._bin=e.bin}else J.Warn("Unexpected BIN chunk")}}_setupData(){if(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(Q5.forEach((i,r)=>{var s;((s=this.parent.extensionOptions[r])==null?void 0:s.enabled)===!1?i.isGLTFExtension&&this.isExtensionUsed(r)&&J.Warn(`Extension ${r} is used but has been explicitly disabled.`):(!i.isGLTFExtension||this.isExtensionUsed(r))&&e.push((async()=>{let a=await i.factory(this);return a.name!==r&&J.Warn(`The name of the glTF loader extension instance does not match the registered name: ${a.name} !== ${r}`),this._parent.onExtensionLoadedObservable.notifyObservers(a),a})())}),this._extensions.push(...await Promise.all(e)),this._extensions.sort((i,r)=>(i.order||Number.MAX_VALUE)-(r.order||Number.MAX_VALUE)),this._parent.onExtensionLoadedObservable.clear(),this._gltf.extensionsRequired){for(let i of this._gltf.extensionsRequired)if(!this._extensions.some(s=>s.name===i&&s.enabled))throw((t=this.parent.extensionOptions[i])==null?void 0:t.enabled)===!1?new Error(`Required extension ${i} is disabled`):new Error(`Required extension ${i} is not available`)}}_createRootNode(){if(this._parent.customRootNode!==void 0)return this._rootBabylonMesh=this._parent.customRootNode,{_babylonTransformNode:this._rootBabylonMesh===null?void 0:this._rootBabylonMesh,index:-1};this._babylonScene._blockEntityCollection=!!this._assetContainer;let e=new Z("__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 rp.AUTO:{this._babylonScene.useRightHandedSystem||(t.rotation=[0,1,0,0],t.scale=[1,1,-1],n._LoadTransform(t,this._rootBabylonMesh));break}case rp.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 Tr&&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 hd.NONE:break;case hd.FIRST:{let e=this._getAnimationGroups();e.length!==0&&e[0].start(!0);break}case hd.ALL:{let e=this._getAnimationGroups();for(let t of e)t.start(!0);break}default:{J.Error(`Invalid animation start mode (${this._parent.animationStartMode})`);return}}}loadNodeAsync(e,t,i=()=>{}){let r=this._extensionsLoadNodeAsync(e,t,i);if(r)return r;if(t._babylonTransformNode)throw new Error(`${e}: Invalid recursive node hierarchy`);let s=new Array;this.logOpen(`${e} ${t.name||""}`);let a=c=>{if(n.AddPointerMetadata(c,e),n._LoadTransform(t,c),t.camera!=null){let f=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=xD(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 Z(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()===D.PositionKind&&!this.parent.alwaysComputeBoundingBox&&!i.skeleton){let m=fme(d);m&&(o._boundingInfo=m,o.useBoundingInfoFromGeometry=!0)}o.setVerticesBuffer(u,d.count)})),f==D.MatricesIndicesExtraKind&&(i.numBoneInfluencers=8),h&&h(d)};return l("POSITION",D.PositionKind),l("NORMAL",D.NormalKind),l("TANGENT",D.TangentKind),l("TEXCOORD_0",D.UVKind),l("TEXCOORD_1",D.UV2Kind),l("TEXCOORD_2",D.UV3Kind),l("TEXCOORD_3",D.UV4Kind),l("TEXCOORD_4",D.UV5Kind),l("TEXCOORD_5",D.UV6Kind),l("JOINTS_0",D.MatricesIndicesKind),l("WEIGHTS_0",D.MatricesWeightsKind),l("JOINTS_1",D.MatricesIndicesExtraKind),l("WEIGHTS_1",D.MatricesWeightsExtraKind),l("COLOR_0",D.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 pd(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",D.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",D.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",D.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",D.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",D.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",D.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 WR(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)&&(J.Warn(`${e}/skeleton: Overriding with nearest common ancestor as skeleton node is not a common root`),t.skeleton=s.index)}else J.Warn(`${e}: Failed to find common root`)}let r={};for(let s of t.joints){let a=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&&J.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 Mc(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||lme.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():cme.value.then(()=>{var d,u,m,p;let f;switch(l){case"translation":{f=(d=tv("/nodes/{}/translation"))==null?void 0:d.interpolation;break}case"rotation":{f=(u=tv("/nodes/{}/rotation"))==null?void 0:u.interpolation;break}case"scale":{f=(m=tv("/nodes/{}/scale"))==null?void 0:m.interpolation;break}case"weights":{f=(p=tv("/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*D.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 D.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),D.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 oo(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 D(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 D(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 VR;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:BB((m=i.uri)!=null?m:""),loaderOptions:s,useSRGBBuffer:!!a&&this._parent.useSRGBBuffers},h=new ve(null,this._babylonScene,f);h._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,l.push(c.promise);let d=i.uri&&!df(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(df(i)){let s=new Uint8Array(uf(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 om(`${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 ve.CLAMP_ADDRESSMODE;case 33648:return ve.MIRROR_ADDRESSMODE;case 10497:return ve.WRAP_ADDRESSMODE;default:return J.Warn(`${e}: Invalid value (${t})`),ve.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 ve.LINEAR_NEAREST;case 9729:return ve.LINEAR_LINEAR;case 9984:return ve.LINEAR_NEAREST_MIPNEAREST;case 9985:return ve.LINEAR_LINEAR_MIPNEAREST;case 9986:return ve.LINEAR_NEAREST_MIPLINEAR;case 9987:return ve.LINEAR_LINEAR_MIPLINEAR;default:return J.Warn(`${e}/minFilter: Invalid value (${r})`),ve.LINEAR_LINEAR_MIPLINEAR}else switch(i!==9728&&J.Warn(`${e}/magFilter: Invalid value (${i})`),r){case 9728:return ve.NEAREST_NEAREST;case 9729:return ve.NEAREST_LINEAR;case 9984:return ve.NEAREST_NEAREST_MIPNEAREST;case 9985:return ve.NEAREST_LINEAR_MIPNEAREST;case 9986:return ve.NEAREST_NEAREST_MIPLINEAR;case 9987:return ve.NEAREST_LINEAR_MIPLINEAR;default:return J.Warn(`${e}/minFilter: Invalid value (${r})`),ve.NEAREST_NEAREST_MIPNEAREST}}static _GetTypedArrayConstructor(e,t){try{return EC(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=D.GetTypeByteLength(t);return r%l!==0?(J.Warn(`${e}: Copying buffer as byte offset (${r}) is not a multiple of component type byte length (${l})`),new o(a.slice(r,r+s*l),0)):new o(a,r,s)}static _GetNumComponents(e,t){switch(t){case"SCALAR":return 1;case"VEC2":return 2;case"VEC3":return 3;case"VEC4":return 4;case"MAT2":return 4;case"MAT3":return 9;case"MAT4":return 16}throw new Error(`${e}: Invalid type (${t})`)}static _ValidateUri(e){return _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)}};rb.DefaultSampler={index:-1};qf._CreateGLTF2Loader=n=>new rb(n)});var zO,HO,RK=M(()=>{SD();zO="ExtrasAsMetadata",HO=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=zO,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))}};ev(zO);zR(zO,!1,n=>new HO(n))});var nb,bK=M(()=>{nb={name:"obj",extensions:".obj"}});var _d,IK=M(()=>{zt();Gr();bc();_d=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 ve(r,i,!1,n.INVERT_TEXTURE_Y)}};_d.INVERT_TEXTURE_Y=!0});var qr,MK=M(()=>{ki();bc();zt();Ge();nx();yi();pr();Pt();qr=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(D.PositionKind),i=e.getVerticesData(D.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)||J.Log("Unhandled expression at line : "+u)}if(this._hasMeshes&&(this._handledMesh=this._meshesFromObj[this._meshesFromObj.length-1],this._loadingOptions.useLegacyBehavior&&this._indicesForBabylon.reverse(),this._unwrapData(),this._handledMesh.indices=this._indicesForBabylon,this._handledMesh.positions=this._unwrappedPositionsForBabylon,this._unwrappedNormalsForBabylon.length&&(this._handledMesh.normals=this._unwrappedNormalsForBabylon),this._unwrappedUVForBabylon.length&&(this._handledMesh.uvs=this._unwrappedUVForBabylon),this._unwrappedColorsForBabylon.length&&(this._handledMesh.colors=this._unwrappedColorsForBabylon),this._handledMesh.hasLines=this._hasLineData),!this._hasMeshes){let d=null;if(this._indicesForBabylon.length)this._loadingOptions.useLegacyBehavior&&this._indicesForBabylon.reverse(),this._unwrapData();else{for(let u of this._positions)this._unwrappedPositionsForBabylon.push(u.x,u.y,u.z);if(this._normals.length)for(let u of this._normals)this._unwrappedNormalsForBabylon.push(u.x,u.y,u.z);if(this._uvs.length)for(let u of this._uvs)this._unwrappedUVForBabylon.push(u.x,u.y);if(this._extColors.length)for(let u of this._extColors)this._unwrappedColorsForBabylon.push(u.r,u.g,u.b,u.a);else if(this._colors.length)for(let u of this._colors)this._unwrappedColorsForBabylon.push(u.r,u.g,u.b,u.a);this._materialNameFromObj||(d=new 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)}}};qr.ObjectDescriptor=/^o/;qr.GroupDescriptor=/^g/;qr.MtlLibGroupDescriptor=/^mtllib /;qr.UseMtlDescriptor=/^usemtl /;qr.SmoothDescriptor=/^s /;qr.VertexPattern=/^v(\s+[\d|.|+|\-|e|E]+){3,7}/;qr.NormalPattern=/^vn(\s+[\d|.|+|\-|e|E]+)( +[\d|.|+|\-|e|E]+)( +[\d|.|+|\-|e|E]+)/;qr.UVPattern=/^vt(\s+[\d|.|+|\-|e|E]+)( +[\d|.|+|\-|e|E]+)/;qr.FacePattern1=/^f\s+(([\d]{1,}[\s]?){3,})+/;qr.FacePattern2=/^f\s+((([\d]{1,}\/[\d]{1,}[\s]?){3,})+)/;qr.FacePattern3=/^f\s+((([\d]{1,}\/[\d]{1,}\/[\d]{1,}[\s]?){3,})+)/;qr.FacePattern4=/^f\s+((([\d]{1,}\/\/[\d]{1,}[\s]?){3,})+)/;qr.FacePattern5=/^f\s+(((-[\d]{1,}\/-[\d]{1,}\/-[\d]{1,}[\s]?){3,})+)/;qr.LinePattern1=/^l\s+(([\d]{1,}[\s]?){2,})+/;qr.LinePattern2=/^l\s+((([\d]{1,}\/[\d]{1,}[\s]?){2,})+)/;qr.LinePattern3=/^l\s+((([\d]{1,}\/[\d]{1,}\/[\d]{1,}[\s]?){2,})+)/});var CK={};tt(CK,{OBJFileLoader:()=>sa});var sa,XO=M(()=>{Ge();Ci();tp();Qg();bK();IK();MK();bc();sa=class n{static get INVERT_TEXTURE_Y(){return _d.INVERT_TEXTURE_Y}static set INVERT_TEXTURE_Y(e){_d.INVERT_TEXTURE_Y=e}constructor(e){this.name=nb.name,this.extensions=nb.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[nb.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 _l(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 _d,o=[],l=[];i=i.replace(/#.*$/gm,"").trim(),new qr(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})}};sa.OPTIMIZE_WITH_UV=!0;sa.INVERT_Y=!1;sa.IMPORT_VERTEX_COLORS=!1;sa.COMPUTE_NORMALS=!1;sa.OPTIMIZE_NORMALS=!1;sa.UV_SCALING=new Fe(1,1);sa.SKIP_MATERIALS=!1;sa.MATERIAL_LOADING_FAILS_SILENTLY=!0;sa.USE_LEGACY_BEHAVIOR=!1;jf(new sa)});function hme(n){let e=n.trim();return/^https?:\/\//i.test(e)||/^wss?:\/\//i.test(e)||/^\/\//.test(e)}function YO(n,e){if(hme(n))throw new Error(`[AI3D] Babylon ${e} is limited to local vault resources. Refused remote URL: ${n}`);return n}function sb(n){throw new Error(`[AI3D] Babylon script loading is disabled in this plugin build. Refused script URL: ${n}`)}function PK(){if(yK)return;let n=i=>YO(i,"asset loading"),e=i=>YO(i,"script loading"),t=()=>-1;_e.PreprocessUrl=n,_e.ScriptPreprocessUrl=e,_e.DefaultRetryStrategy=t,_e.LoadScript=(i,r,s)=>{try{e(i),sb(i)}catch(a){s==null||s(a instanceof Error?a.message:String(a),a);return}r==null||r()},_e.LoadScriptAsync=async i=>{e(i),sb(i)},_e.LoadBabylonScript=(i,r,s)=>{try{sb(i)}catch(a){s==null||s(a instanceof Error?a.message:String(a),a);return}r()},_e.LoadBabylonScriptAsync=async i=>{sb(i)},Gi.PreprocessUrl=n,Gi.ScriptPreprocessUrl=e,Gi.DefaultRetryStrategy=t,Pr.CustomRequestModifiers.push((i,r)=>YO(r,"request")),yK=!0}var yK,LK=M(()=>{"use strict";Kl();Ci();Gh();yK=!1});function ab(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,w=(v>>5&31)/31,N=(v>>10&31)/31,U=p*12;l[U+0]=V,l[U+1]=w,l[U+2]=N,l[U+3]=1,l[U+4]=V,l[U+5]=w,l[U+6]=N,l[U+7]=1,l[U+8]=V,l[U+9]=w,l[U+10]=N,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,L=x*R-T*S,O=Math.sqrt(C*C+y*y+L*L);O>1e-8?(C/=O,y/=O,L/=O):(C=0,y=0,L=1,f++),o[_+0]=C,o[_+1]=y,o[_+2]=L,o[_+3]=C,o[_+4]=y,o[_+5]=L,o[_+6]=C,o[_+7]=y,o[_+8]=L,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 Z("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 DK(n,e){return ab(n,e)}function OK(n){n(dme)}var dme,KO=M(()=>{"use strict";yi();Qg();pr();bc();zt();dme={name:"stl",extensions:".stl",importMeshAsync(n,e,t){return Promise.resolve().then(()=>({meshes:[ab(e,t)],particleSystems:[],skeletons:[],animationGroups:[],transformNodes:[],geometries:[],lights:[],spriteManagers:[]}))},loadAsync(n,e){return Promise.resolve().then(()=>{ab(n,e)})},loadAssetContainerAsync(n,e){return Promise.resolve().then(()=>{let t=ab(n,e),i=new _l(n);return i.meshes.push(t),t.material&&i.materials.push(t.material),i})},canDirectLoad(){return!1},rewriteRootURL(n){return n}}});function ume(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 hp(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 ob(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 mme(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,L=l[v+2]-E,O=R*L-I*y,V=I*C-S*L,w=S*y-R*C;d[_]+=O,d[_+1]+=V,d[_+2]+=w,d[g]+=O,d[g+1]+=V,d[g+2]+=w,d[v]+=O,d[v+1]+=V,d[v+2]+=w}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 Z("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 NK(n,e){return lb(n,e)}function wK(n){n(_me)}var _me,jO=M(()=>{"use strict";yi();Qg();pr();bc();zt();_me={name:"ply",extensions:".ply",importMeshAsync(n,e,t){return Promise.resolve().then(()=>({meshes:[lb(e,t)],particleSystems:[],skeletons:[],animationGroups:[],transformNodes:[],geometries:[],lights:[],spriteManagers:[]}))},loadAsync(n,e){return Promise.resolve().then(()=>{lb(n,e)})},loadAssetContainerAsync(n,e){return Promise.resolve().then(()=>{let t=lb(n,e),i=new _l(n);return i.meshes.push(t),t.material&&i.materials.push(t.material),i})},canDirectLoad(){return!1},rewriteRootURL(n){return n}}});async function ov(){FK||(PK(),OK(jf),wK(jf),FK=!0)}var FK,lv=M(()=>{"use strict";gD();xK();RK();XO();tp();LK();KO();jO();FK=!1});function fb(n){return Math.floor(n.getTotalIndices()/3)}function gd(n){return n.getTotalVertices()}function vd(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),gd(r)>0||r.getTotalIndices()>0))}function UK(n){let e=Array.from(n),t=new Set(e);return e.filter(i=>{let r=i.parent;return!r||!t.has(r)})}function qO(n){n.computeWorldMatrix(!0);let e=n.getBoundingInfo().boundingBox;return N_(Gt(e.minimumWorld),Gt(e.maximumWorld))}function cv(n){let e=null;for(let t of n)!t||t.isDisposed()||(e=iT(e,qO(t)));return e}function hb(n,e=[]){var t;return(t=cv(vd(n,e)))!=null?t:qO(n)}function db(n,e,t,i={}){return aT({rootName:n,boundingSize:sr(e),meshes:t.map(r=>({triangleCount:fb(r),vertexCount:gd(r),materialKeys:r.material?[r.material.name]:[]})),splatCount:i.splatCount,resourceWarnings:i.resourceWarnings})}function VK(n,e={}){var t,i;return{name:n.name,triangleCount:e.isSplat?null:fb(n),vertexCount:gd(n),materialName:(i=(t=n.material)==null?void 0:t.name)!=null?i:null}}function ZO(n,e=BK){var a,o,l;let t=qO(n),i=n.name||`mesh-${n.uniqueId}`,r=HK(n.metadata,(a=e.get(`node:${i}`))!=null?a:e.get(`mesh:${i}`)),s=Ul(r,{name:i,path:WK(n)});return yh({name:zK(s,i),triangleCount:fb(n),vertexCount:gd(n),materialName:(l=(o=n.material)==null?void 0:o.name)!=null?l:null,boundingSize:sr(t),center:yr(t),source:s.hasExplicitIdentity?"component":"mesh",meshNames:[i],childCount:1,componentId:s.componentId,occurrenceId:s.occurrenceId,partNumber:s.partNumber,componentPath:s.componentPath})}function GK(n,e,t=BK){let i=new Set(n),r=[],s=new Set,a=[];for(let o of e){let l=o.getChildMeshes(!1).filter(d=>i.has(d)),c=cb(o,`component-${o.uniqueId}`),f=HK(o.metadata,t.get(`node:${c}`)),h=Ul(f,{name:cb(o,`component-${o.uniqueId}`),path:WK(o)});l.length<1||l.length===n.length||!h.hasExplicitIdentity&&(!o.name.trim()||l.length<2)||a.push({node:o,childMeshes:l,identity:h})}return a.sort((o,l)=>o.childMeshes.length-l.childMeshes.length).forEach(({node:o,childMeshes:l,identity:c})=>{var p;let f=l.filter(_=>!s.has(_));if(f.length<1||!c.hasExplicitIdentity&&f.length<2)return;for(let _ of f)s.add(_);let h=cv(f);if(!h)return;let d=new Set,u=0,m=0;for(let _ of f)u+=fb(_),m+=gd(_),(p=_.material)!=null&&p.name&&d.add(_.material.name);r.push(yh({name:zK(c,cb(o,`component-${o.uniqueId}`)),triangleCount:u,vertexCount:m,materialName:F_(d),boundingSize:sr(h),center:yr(h),source:c.hasExplicitIdentity?"component":"group",meshNames:f.map(_=>_.name||`mesh-${_.uniqueId}`),childCount:f.length,componentId:c.componentId,occurrenceId:c.occurrenceId,partNumber:c.partNumber,componentPath:c.componentPath}))}),{parts:r,groupedMeshes:s}}function kK(n,e){let t=gme(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 cb(n,e){var i;return((i=Ul(n.metadata,{name:n.name}).displayName)==null?void 0:i.trim())||n.name||e}function WK(n){let e=[],t=n;for(;t&&typeof t=="object"&&"name"in t;){let i=t,r=cb(i,"node");r.trim()&&e.push(r),t=i.parent}return e.reverse().join("/")}function gme(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 HK(n,e){return e===void 0?n:n==null?e:{metadata:n,extras:e}}function zK(n,e){var t;return((t=n.displayName)==null?void 0:t.trim())||n.partNumber||n.componentId||e}var BK,ub=M(()=>{"use strict";jo();kM();B_();ms();oT();BK=new Map});function $f(n){return Qr(n)}function XK(n,e,t,i=[]){ST(new mb(n,i),e,t)}function QO(n,e=[]){TT(new mb(n,e))}var mb,YK=M(()=>{"use strict";Ge();jo();ms();VM();ub();mb=class{constructor(e,t=[]){this.rootMesh=e,this.loadedMeshes=t}getParts(){return vd(this.rootMesh,this.loadedMeshes)}getRootCenter(){return yr(hb(this.rootMesh,this.loadedMeshes))}getPartPosition(e){return Gt(e.position)}getPartCenter(e){return Gt(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:$f(t._previewExplodeState.originalPosition),originalCenter:$f(t._previewExplodeState.originalCenter)}:t!=null&&t._originalPos&&(t!=null&&t._originalCenter)?{originalPosition:$f(t._originalPos),originalCenter:$f(t._originalCenter)}:null}setPartState(e,t){(!e.metadata||typeof e.metadata!="object")&&(e.metadata={});let i=e.metadata;i._previewExplodeState={originalPosition:$f(t.originalPosition),originalCenter:$f(t.originalCenter)},i._originalPos=$f(t.originalPosition),i._originalCenter=$f(t.originalCenter)}}});var pb={};tt(pb,{glowBlurPostProcessPixelShaderWGSL:()=>vme});var $O,KK,vme,_b=M(()=>{G();$O="glowBlurPostProcessPixelShader",KK=`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;}`;A.ShadersStoreWGSL[jO]||(A.ShadersStoreWGSL[jO]=XK);ome={name:jO,shader:XK}});var db={};tt(db,{glowBlurPostProcessPixelShader:()=>lme});var qO,YK,lme,ub=M(()=>{G();qO="glowBlurPostProcessPixelShader",YK=`varying vec2 vUV;uniform sampler2D textureSampler;uniform vec2 screenSize;uniform vec2 direction;uniform float blurWidth;float getLuminance(vec3 color) +fragmentOutputs.color=baseColor;}`;A.ShadersStoreWGSL[$O]||(A.ShadersStoreWGSL[$O]=KK);vme={name:$O,shader:KK}});var gb={};tt(gb,{glowBlurPostProcessPixelShader:()=>Eme});var JO,jK,Eme,vb=M(()=>{G();JO="glowBlurPostProcessPixelShader",jK=`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;}`;A.ShadersStore[qO]||(A.ShadersStore[qO]=YK);lme={name:qO,shader:YK}});var jK={};tt(jK,{glowMapGenerationVertexShaderWGSL:()=>cme});var ZO,KK,cme,qK=M(()=>{G();sc();ac();Uf();Vf();oc();wf();Gf();kf();lc();cc();fc();hc();ZO="glowMapGenerationVertexShader",KK=`attribute position: vec3f; +gl_FragColor=baseColor;}`;A.ShadersStore[JO]||(A.ShadersStore[JO]=jK);Eme={name:JO,shader:jK}});var ZK={};tt(ZK,{glowMapGenerationVertexShaderWGSL:()=>Sme});var eN,qK,Sme,QK=M(()=>{G();oc();lc();Vf();Gf();cc();Ff();kf();Wf();fc();hc();dc();uc();eN="glowMapGenerationVertexShader",qK=`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 -}`;A.ShadersStoreWGSL[ZO]||(A.ShadersStoreWGSL[ZO]=KK);cme={name:ZO,shader:KK}});var QK={};tt(QK,{glowMapGenerationPixelShaderWGSL:()=>fme});var QO,ZK,fme,$K=M(()=>{G();Pa();dc();uc();QO="glowMapGenerationPixelShader",ZK=`#if defined(DIFFUSE_ISLINEAR) || defined(EMISSIVE_ISLINEAR) +}`;A.ShadersStoreWGSL[eN]||(A.ShadersStoreWGSL[eN]=qK);Sme={name:eN,shader:qK}});var JK={};tt(JK,{glowMapGenerationPixelShaderWGSL:()=>Tme});var tN,$K,Tme,ej=M(()=>{G();Pa();mc();pc();tN="glowMapGenerationPixelShader",$K=`#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 } -`;A.ShadersStoreWGSL[QO]||(A.ShadersStoreWGSL[QO]=ZK);fme={name:QO,shader:ZK}});var ej={};tt(ej,{glowMapGenerationVertexShader:()=>hme});var $O,JK,hme,tj=M(()=>{G();mc();pc();Wf();Hf();_c();Ff();zf();Xf();gc();vc();Ec();Sc();$O="glowMapGenerationVertexShader",JK=`attribute vec3 position; +`;A.ShadersStoreWGSL[tN]||(A.ShadersStoreWGSL[tN]=$K);Tme={name:tN,shader:$K}});var ij={};tt(ij,{glowMapGenerationVertexShader:()=>Ame});var iN,tj,Ame,rj=M(()=>{G();_c();gc();Hf();zf();vc();Bf();Xf();Yf();Ec();Sc();Tc();Ac();iN="glowMapGenerationVertexShader",tj=`attribute vec3 position; #include #include #include @@ -23626,7 +23626,7 @@ vUVEmissive=vec2(emissiveMatrix*vec4(uv2Updated,1.0,0.0)); vColor=color; #endif #include -}`;A.ShadersStore[$O]||(A.ShadersStore[$O]=JK);hme={name:$O,shader:JK}});var rj={};tt(rj,{glowMapGenerationPixelShader:()=>dme});var JO,ij,dme,nj=M(()=>{G();La();Tc();Ac();JO="glowMapGenerationPixelShader",ij=`#if defined(DIFFUSE_ISLINEAR) || defined(EMISSIVE_ISLINEAR) +}`;A.ShadersStore[iN]||(A.ShadersStore[iN]=tj);Ame={name:iN,shader:tj}});var sj={};tt(sj,{glowMapGenerationPixelShader:()=>xme});var rN,nj,xme,aj=M(()=>{G();La();xc();Rc();rN="glowMapGenerationPixelShader",nj=`#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 -}`;A.ShadersStore[JO]||(A.ShadersStore[JO]=ij);dme={name:JO,shader:ij}});var Ro,Mc,mb=M(()=>{di();zt();Ni();ki();kh();kn();Df();Gh();ll();Gn();TC();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(()=>(hb(),fb)))):t.push(Promise.resolve().then(()=>(ub(),db))),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"];Mc=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(D.MatricesIndicesExtraKind),c.push(D.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"];Bn(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(()=>(qK(),jK)),Promise.resolve().then(()=>($K(),QK))]):await Promise.all([Promise.resolve().then(()=>(tj(),ej)),Promise.resolve().then(()=>(nj(),rj))]),(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[D.PositionKind];e&&e._rebuild(),this._generateIndexBuffer()}dispose(){let e=this._vertexBuffers[D.PositionKind];e&&(e.dispose(),this._vertexBuffers[D.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()}};Mc.ForceGLSL=!1});var Us,eN=M(()=>{kt();Vt();Ci();di();Ni();Vr();gf();hn();to();mb();VA();Us=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 Mc.ForceGLSL}static set ForceGLSL(e){Mc.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=ec.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 Mc(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:ve.TRILINEAR_SAMPLINGMODE,generateStencilBuffer:this._effectLayerOptions.generateStencilBuffer,existingObjectRenderer:this._thinEffectLayer.objectRenderer}),this._mainTexture.activeCamera=this._effectLayerOptions.camera,this._mainTexture.wrapU=ve.CLAMP_ADDRESSMODE,this._mainTexture.wrapV=ve.CLAMP_ADDRESSMODE,this._mainTexture.anisotropicFilteringLevel=1,this._mainTexture.updateSamplingMode(ve.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 qe("EffectLayerSceneComponent")};P([F()],Us.prototype,"name",null);P([rm()],Us.prototype,"neutralColor",null);P([F()],Us.prototype,"isEnabled",null);P([IB()],Us.prototype,"camera",null);P([F()],Us.prototype,"renderingGroupId",null);P([F()],Us.prototype,"disableBoundingBoxesFromEffectLayer",null)});var aj={};tt(aj,{glowMapMergePixelShaderWGSL:()=>ume});var tN,sj,ume,oj=M(()=>{G();tN="glowMapMergePixelShader",sj=`varying vUV: vec2f;var textureSamplerSampler: sampler;var textureSampler: texture_2d; +}`;A.ShadersStore[rN]||(A.ShadersStore[rN]=nj);xme={name:rN,shader:nj}});var bo,yc,Eb=M(()=>{di();zt();Ni();ki();zh();Wn();Of();Hh();fl();kn();bC();bo=class n extends Yr{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(()=>(_b(),pb)))):t.push(Promise.resolve().then(()=>(vb(),gb))),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)}};bo.FragmentUrl="glowBlurPostProcess";bo.Uniforms=["screenSize","direction","blurWidth"];yc=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(D.MatricesIndicesExtraKind),c.push(D.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?hl(s.morphTargetManager,l,c,s,!0,!1,!1,f,h,d):0;t&&(l.push("#define INSTANCES"),vo(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")),cl(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"];Un(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(()=>(QK(),ZK)),Promise.resolve().then(()=>(ej(),JK))]):await Promise.all([Promise.resolve().then(()=>(rj(),ij)),Promise.resolve().then(()=>(aj(),sj))]),(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[D.PositionKind];e&&e._rebuild(),this._generateIndexBuffer()}dispose(){let e=this._vertexBuffers[D.PositionKind];e&&(e.dispose(),this._vertexBuffers[D.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()}};yc.ForceGLSL=!1});var Vs,nN=M(()=>{kt();Vt();Ci();di();Ni();Gr();vf();hn();io();Eb();zA();Vs=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 yc.ForceGLSL}static set ForceGLSL(e){yc.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=ic.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 yc(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 kr("EffectLayerMainRTT",{width:this._mainTextureDesiredSize.width,height:this._mainTextureDesiredSize.height},this._scene,{type:this._effectLayerOptions.mainTextureType,format:this._effectLayerOptions.mainTextureFormat,samplingMode:ve.TRILINEAR_SAMPLINGMODE,generateStencilBuffer:this._effectLayerOptions.generateStencilBuffer,existingObjectRenderer:this._thinEffectLayer.objectRenderer}),this._mainTexture.activeCamera=this._effectLayerOptions.camera,this._mainTexture.wrapU=ve.CLAMP_ADDRESSMODE,this._mainTexture.wrapV=ve.CLAMP_ADDRESSMODE,this._mainTexture.anisotropicFilteringLevel=1,this._mainTexture.updateSamplingMode(ve.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 qe("EffectLayerSceneComponent")};P([F()],Vs.prototype,"name",null);P([nm()],Vs.prototype,"neutralColor",null);P([F()],Vs.prototype,"isEnabled",null);P([CB()],Vs.prototype,"camera",null);P([F()],Vs.prototype,"renderingGroupId",null);P([F()],Vs.prototype,"disableBoundingBoxesFromEffectLayer",null)});var lj={};tt(lj,{glowMapMergePixelShaderWGSL:()=>Rme});var sN,oj,Rme,cj=M(()=>{G();sN="glowMapMergePixelShader",oj=`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 } -`;A.ShadersStoreWGSL[tN]||(A.ShadersStoreWGSL[tN]=sj);ume={name:tN,shader:sj}});var cj={};tt(cj,{glowMapMergeVertexShaderWGSL:()=>mme});var iN,lj,mme,fj=M(()=>{G();iN="glowMapMergeVertexShader",lj=`attribute position: vec2f;varying vUV: vec2f; +`;A.ShadersStoreWGSL[sN]||(A.ShadersStoreWGSL[sN]=oj);Rme={name:sN,shader:oj}});var hj={};tt(hj,{glowMapMergeVertexShaderWGSL:()=>bme});var aN,fj,bme,dj=M(()=>{G();aN="glowMapMergeVertexShader",fj=`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 -}`;A.ShadersStoreWGSL[iN]||(A.ShadersStoreWGSL[iN]=lj);mme={name:iN,shader:lj}});var dj={};tt(dj,{glowMapMergePixelShader:()=>pme});var rN,hj,pme,uj=M(()=>{G();rN="glowMapMergePixelShader",hj=`varying vec2 vUV;uniform sampler2D textureSampler; +}`;A.ShadersStoreWGSL[aN]||(A.ShadersStoreWGSL[aN]=fj);bme={name:aN,shader:fj}});var mj={};tt(mj,{glowMapMergePixelShader:()=>Ime});var oN,uj,Ime,pj=M(()=>{G();oN="glowMapMergePixelShader",uj=`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 -}`;A.ShadersStore[rN]||(A.ShadersStore[rN]=hj);pme={name:rN,shader:hj}});var pj={};tt(pj,{glowMapMergeVertexShader:()=>_me});var nN,mj,_me,_j=M(()=>{G();nN="glowMapMergeVertexShader",mj=`attribute vec2 position;varying vec2 vUV;const vec2 madd=vec2(0.5,0.5); +}`;A.ShadersStore[oN]||(A.ShadersStore[oN]=uj);Ime={name:oN,shader:uj}});var gj={};tt(gj,{glowMapMergeVertexShader:()=>Mme});var lN,_j,Mme,vj=M(()=>{G();lN="glowMapMergeVertexShader",_j=`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 -}`;A.ShadersStore[nN]||(A.ShadersStore[nN]=mj);_me={name:nN,shader:mj}});var pl,gj=M(()=>{Ge();ki();kn();FC();mb();zt();OL();pl=class n extends Mc{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(()=>(oj(),aj)),Promise.resolve().then(()=>(fj(),cj)),Promise.resolve().then(()=>(hb(),fb))]):await Promise.all([Promise.resolve().then(()=>(uj(),dj)),Promise.resolve().then(()=>(_j(),pj)),Promise.resolve().then(()=>(ub(),db))]),await super._importShadersAsync()}getEffectName(){return n.EffectName}_numInternalDraws(){return 2}_createMergeEffect(){return this._engine.createEffect("glowMapMerge",[D.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 Zl("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 ss("HighlightLayerHBP",this._scene.getEngine(),new Fe(1,0),this._options.blurHorizontalSize/2),this._verticalBlurPostprocess=new ss("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 pb,sa,vj=M(()=>{kt();Vt();di();ys();Ge();Vr();gf();ql();UC();NL();eN();Pt();zi();zt();gj();Rr();to();mb();ei.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()===sa.EffectName)return this.effectLayers[t];return null};pb=class extends Ri{constructor(e,t,i,r,s=null,a=ve.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(()=>(hb(),fb)))):t.push(Promise.resolve().then(()=>(ub(),db))),super._gatherImports(e,t)}},sa=class n extends Us{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||J.Warn("Rendering the Highlight Layer requires the stencil to be active on the canvas. var engine = new Engine(canvas, antialias, { stencil: true }"),this._options={mainTextureRatio:.5,blurTextureSizeRatio:.5,mainTextureFixedSize:0,blurHorizontalSize:1,blurVerticalSize:1,alphaBlendingMode:2,camera:null,renderingGroupId:-1,mainTextureType:0,mainTextureFormat:5,forceGLSL:!1,isStroke:!1,generateStencilBuffer:!1,...i},this._init(this._options),this._shouldRender=!1}getEffectName(){return n.EffectName}_numInternalDraws(){return 2}_createMergeEffect(){return this._thinEffectLayer._createMergeEffect()}_createTextureAndPostProcesses(){let e=this._mainTextureDesiredSize.width*this._options.blurTextureSizeRatio,t=this._mainTextureDesiredSize.height*this._options.blurTextureSizeRatio;e=this._engine.needPOTTextures?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=ve.CLAMP_ADDRESSMODE,this._blurTexture.wrapV=ve.CLAMP_ADDRESSMODE,this._blurTexture.anisotropicFilteringLevel=16,this._blurTexture.updateSamplingMode(ve.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 Wh("HighlightLayerPPP",{size:this._options.blurTextureSizeRatio,samplingMode:ve.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 pb("HighlightLayerHBP",new Fe(1,0),this._options.blurHorizontalSize,{samplingMode:ve.BILINEAR_SAMPLINGMODE,engine:this._scene.getEngine(),effectWrapper:this._thinEffectLayer._postProcesses[1]}),this._horizontalBlurPostprocess.onApplyObservable.add(r=>{r.setFloat2("screenSize",e,t)}),this._verticalBlurPostprocess=new pb("HighlightLayerVBP",new Fe(0,1),this._options.blurVerticalSize,{samplingMode:ve.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 Ba("HighlightLayerHBP",new Fe(1,0),this._options.blurHorizontalSize/2,{size:{width:e,height:t},samplingMode:ve.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 Ba("HighlightLayerVBP",new Fe(0,1),this._options.blurVerticalSize/2,{size:{width:e,height:t},samplingMode:ve.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();eN();Ni();eD();PR(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 sN(n),n._addComponent(e))}});function Sj(n,e,t=()=>!0){let i=new sa("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 Tj=M(()=>{"use strict";fo();zt();vj();Ej()});function xme(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 Rme(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 gme,_b,vme,oN,Eme,Sme,aN,Tme,Ame,gb,Aj=M(()=>{"use strict";ys();fx();hx();Ge();zt();em();$P();xc();gme=.32,_b=1.05,vme=.075,oN=.28,Eme=.22,Sme=.16,aN=(_b+oN)*.42,Tme=new b(aN,aN,aN),Ame=[{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)}];gb=class{constructor(e,t){this.engine=e,this.scene=new ei(e),this.scene.clearColor=new lt(0,0,0,0),this.scene.autoClear=!1,this.camera=new gi("gizmo-cam",0,0,4.1,Tme,this.scene),this.camera.minZ=.01,this.camera.fov=.56,this.camera.detachControl(),new ia("gizmo-light",new b(0,1,.5),this.scene);let i=ns.CreateSphere("gizmo-origin",{diameter:Sme,segments:16},this.scene);i.material=Rme(this.scene);for(let{name:s,color:a,rot:o,dir:l}of Ame){let c=xme(`gizmo-${s}-mat`,a,this.scene),f=ns.CreateCylinder(`gizmo-${s}-shaft`,{height:_b,diameter:vme,tessellation:8},this.scene);f.material=c,f.position=l.scale(_b/2),f.rotation=o;let h=ns.CreateCylinder(`gizmo-${s}-head`,{height:oN,diameterTop:0,diameterBottom:Eme,tessellation:8},this.scene);h.material=c;let d=_b+oN/2;h.position=l.scale(d),h.rotation=o}let r=gme;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 cN={};tt(cN,{boundingBoxRendererVertexShaderWGSL:()=>bme});var lN,xj,bme,fN=M(()=>{G();lN="boundingBoxRendererVertexShader",xj=`attribute position: vec3f;uniform world: mat4x4f;uniform viewProjection: mat4x4f; +}`;A.ShadersStore[lN]||(A.ShadersStore[lN]=_j);Mme={name:lN,shader:_j}});var gl,Ej=M(()=>{Ge();ki();Wn();GC();Eb();zt();BL();gl=class n extends yc{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(()=>(cj(),lj)),Promise.resolve().then(()=>(dj(),hj)),Promise.resolve().then(()=>(_b(),pb))]):await Promise.all([Promise.resolve().then(()=>(pj(),mj)),Promise.resolve().then(()=>(vj(),gj)),Promise.resolve().then(()=>(vb(),gb))]),await super._importShadersAsync()}getEffectName(){return n.EffectName}_numInternalDraws(){return 2}_createMergeEffect(){return this._engine.createEffect("glowMapMerge",[D.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 $l("HighlightLayerPPP",this._scene.getEngine()),this._horizontalBlurPostprocess=new bo("HighlightLayerHBP",this._scene.getEngine(),new Fe(1,0),this._options.blurHorizontalSize),this._verticalBlurPostprocess=new bo("HighlightLayerVBP",this._scene.getEngine(),new Fe(0,1),this._options.blurVerticalSize),this._postProcesses=[this._downSamplePostprocess,this._horizontalBlurPostprocess,this._verticalBlurPostprocess]):(this._horizontalBlurPostprocess=new as("HighlightLayerHBP",this._scene.getEngine(),new Fe(1,0),this._options.blurHorizontalSize/2),this._verticalBlurPostprocess=new as("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()}};gl.EffectName="HighlightLayer";gl.NeutralColor=new lt(0,0,0,0);gl.GlowingMeshStencilReference=2;gl.NormalMeshStencilReference=1});var Sb,aa,Sj=M(()=>{kt();Vt();di();Ps();Ge();Gr();vf();Ql();WC();UL();nN();Pt();zi();zt();Ej();Rr();io();Eb();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()===aa.EffectName)return this.effectLayers[t];return null};Sb=class extends Ri{constructor(e,t,i,r,s=null,a=ve.BILINEAR_SAMPLINGMODE,o,l){let c={uniforms:bo.Uniforms,size:typeof r=="number"?r:void 0,camera:s,samplingMode:a,engine:o,reusable:l,...r};super(e,bo.FragmentUrl,{effectWrapper:typeof r=="number"||!r.effectWrapper?new bo(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(()=>(_b(),pb)))):t.push(Promise.resolve().then(()=>(vb(),gb))),super._gatherImports(e,t)}},aa=class n extends Vs{static get NeutralColor(){return gl.NeutralColor}static set NeutralColor(e){gl.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 gl(e,t,i)),this.onBeforeBlurObservable=new ie,this.onAfterBlurObservable=new ie,this._engine.isStencilEnable||J.Warn("Rendering the Highlight Layer requires the stencil to be active on the canvas. var engine = new Engine(canvas, antialias, { stencil: true }"),this._options={mainTextureRatio:.5,blurTextureSizeRatio:.5,mainTextureFixedSize:0,blurHorizontalSize:1,blurVerticalSize:1,alphaBlendingMode:2,camera:null,renderingGroupId:-1,mainTextureType:0,mainTextureFormat:5,forceGLSL:!1,isStroke:!1,generateStencilBuffer:!1,...i},this._init(this._options),this._shouldRender=!1}getEffectName(){return n.EffectName}_numInternalDraws(){return 2}_createMergeEffect(){return this._thinEffectLayer._createMergeEffect()}_createTextureAndPostProcesses(){let e=this._mainTextureDesiredSize.width*this._options.blurTextureSizeRatio,t=this._mainTextureDesiredSize.height*this._options.blurTextureSizeRatio;e=this._engine.needPOTTextures?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 kr("HighlightLayerBlurRTT",{width:e,height:t},this._scene,!1,!0,i),this._blurTexture.wrapU=ve.CLAMP_ADDRESSMODE,this._blurTexture.wrapV=ve.CLAMP_ADDRESSMODE,this._blurTexture.anisotropicFilteringLevel=16,this._blurTexture.updateSamplingMode(ve.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 Xh("HighlightLayerPPP",{size:this._options.blurTextureSizeRatio,samplingMode:ve.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 Sb("HighlightLayerHBP",new Fe(1,0),this._options.blurHorizontalSize,{samplingMode:ve.BILINEAR_SAMPLINGMODE,engine:this._scene.getEngine(),effectWrapper:this._thinEffectLayer._postProcesses[1]}),this._horizontalBlurPostprocess.onApplyObservable.add(r=>{r.setFloat2("screenSize",e,t)}),this._verticalBlurPostprocess=new Sb("HighlightLayerVBP",new Fe(0,1),this._options.blurVerticalSize,{samplingMode:ve.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 Ba("HighlightLayerHBP",new Fe(1,0),this._options.blurHorizontalSize/2,{size:{width:e,height:t},samplingMode:ve.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 Ba("HighlightLayerVBP",new Fe(0,1),this._options.blurVerticalSize/2,{size:{width:e,height:t},samplingMode:ve.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{ll();cm();nN();Ni();nD();wR(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 cN(n),n._addComponent(e))}});function Aj(n,e,t=()=>!0){let i=new aa("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 xj=M(()=>{"use strict";ho();zt();Sj();Tj()});function Nme(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 wme(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 Cme,Tb,yme,hN,Pme,Lme,fN,Dme,Ome,Ab,Rj=M(()=>{"use strict";Ps();px();_x();Ge();zt();tm();iL();bc();Cme=.32,Tb=1.05,yme=.075,hN=.28,Pme=.22,Lme=.16,fN=(Tb+hN)*.42,Dme=new b(fN,fN,fN),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)}];Ab=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,Dme,this.scene),this.camera.minZ=.01,this.camera.fov=.56,this.camera.detachControl(),new ra("gizmo-light",new b(0,1,.5),this.scene);let i=ss.CreateSphere("gizmo-origin",{diameter:Lme,segments:16},this.scene);i.material=wme(this.scene);for(let{name:s,color:a,rot:o,dir:l}of Ome){let c=Nme(`gizmo-${s}-mat`,a,this.scene),f=ss.CreateCylinder(`gizmo-${s}-shaft`,{height:Tb,diameter:yme,tessellation:8},this.scene);f.material=c,f.position=l.scale(Tb/2),f.rotation=o;let h=ss.CreateCylinder(`gizmo-${s}-head`,{height:hN,diameterTop:0,diameterBottom:Pme,tessellation:8},this.scene);h.material=c;let d=Tb+hN/2;h.position=l.scale(d),h.rotation=o}let r=Cme;this.viewport=new ao(.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 uN={};tt(uN,{boundingBoxRendererVertexShaderWGSL:()=>Fme});var dN,bj,Fme,mN=M(()=>{G();dN="boundingBoxRendererVertexShader",bj=`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 } -`;A.ShadersStoreWGSL[lN]||(A.ShadersStoreWGSL[lN]=xj);bme={name:lN,shader:xj}});var dN={};tt(dN,{boundingBoxRendererPixelShaderWGSL:()=>Ime});var hN,Rj,Ime,uN=M(()=>{G();hN="boundingBoxRendererPixelShader",Rj=`uniform color: vec4f; +`;A.ShadersStoreWGSL[dN]||(A.ShadersStoreWGSL[dN]=bj);Fme={name:dN,shader:bj}});var _N={};tt(_N,{boundingBoxRendererPixelShaderWGSL:()=>Bme});var pN,Ij,Bme,gN=M(()=>{G();pN="boundingBoxRendererPixelShader",Ij=`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 -}`;A.ShadersStoreWGSL[hN]||(A.ShadersStoreWGSL[hN]=Rj);Ime={name:hN,shader:Rj}});var bj,Mme,Ij=M(()=>{G();bj="boundingBoxRendererVertexDeclaration",Mme=`uniform mat4 world;uniform mat4 viewProjection; +}`;A.ShadersStoreWGSL[pN]||(A.ShadersStoreWGSL[pN]=Ij);Bme={name:pN,shader:Ij}});var Mj,Ume,Cj=M(()=>{G();Mj="boundingBoxRendererVertexDeclaration",Ume=`uniform mat4 world;uniform mat4 viewProjection; #ifdef MULTIVIEW uniform mat4 viewProjectionR; #endif -`;A.IncludesShadersStore[bj]||(A.IncludesShadersStore[bj]=Mme)});var Mj,Cme,mN=M(()=>{G();Mj="boundingBoxRendererUboDeclaration",Cme=`#ifdef WEBGL2 +`;A.IncludesShadersStore[Mj]||(A.IncludesShadersStore[Mj]=Ume)});var yj,Vme,vN=M(()=>{G();yj="boundingBoxRendererUboDeclaration",Vme=`#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 -`;A.IncludesShadersStore[Mj]||(A.IncludesShadersStore[Mj]=Cme)});var _N={};tt(_N,{boundingBoxRendererVertexShader:()=>yme});var pN,Cj,yme,gN=M(()=>{G();Ij();mN();pN="boundingBoxRendererVertexShader",Cj=`attribute vec3 position; +`;A.IncludesShadersStore[yj]||(A.IncludesShadersStore[yj]=Vme)});var SN={};tt(SN,{boundingBoxRendererVertexShader:()=>Gme});var EN,Pj,Gme,TN=M(()=>{G();Cj();vN();EN="boundingBoxRendererVertexShader",Pj=`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 } -`;A.ShadersStore[pN]||(A.ShadersStore[pN]=Cj);yme={name:pN,shader:Cj}});var yj,Pme,Pj=M(()=>{G();yj="boundingBoxRendererFragmentDeclaration",Pme=`uniform vec4 color; -`;A.IncludesShadersStore[yj]||(A.IncludesShadersStore[yj]=Pme)});var EN={};tt(EN,{boundingBoxRendererPixelShader:()=>Lme});var vN,Lj,Lme,SN=M(()=>{G();Pj();mN();vN="boundingBoxRendererPixelShader",Lj=`#include<__decl__boundingBoxRendererFragment> +`;A.ShadersStore[EN]||(A.ShadersStore[EN]=Pj);Gme={name:EN,shader:Pj}});var Lj,kme,Dj=M(()=>{G();Lj="boundingBoxRendererFragmentDeclaration",kme=`uniform vec4 color; +`;A.IncludesShadersStore[Lj]||(A.IncludesShadersStore[Lj]=kme)});var xN={};tt(xN,{boundingBoxRendererPixelShader:()=>Wme});var AN,Oj,Wme,RN=M(()=>{G();Dj();vN();AN="boundingBoxRendererPixelShader",Oj=`#include<__decl__boundingBoxRendererFragment> #define CUSTOM_FRAGMENT_DEFINITIONS void main(void) { #define CUSTOM_FRAGMENT_MAIN_BEGIN gl_FragColor=color; #define CUSTOM_FRAGMENT_MAIN_END -}`;A.ShadersStore[vN]||(A.ShadersStore[vN]=Lj);Lme={name:vN,shader:Lj}});var Nj,Dj,vb,Dme,Ome,Oj,TN,wj=M(()=>{ys();ki();vm();Ge();lo();lm();jy();kn();PP();zt();di();Gh();pf();TP();qo();Pt();Object.defineProperty(ei.prototype,"forceShowBoundingBoxes",{get:function(){return this._forceShowBoundingBoxes||!1},set:function(n){this._forceShowBoundingBoxes=n,n&&this.getBoundingBoxRenderer()},enumerable:!0,configurable:!0});ei.prototype.getBoundingBoxRenderer=function(){return this._boundingBoxRenderer||(this._boundingBoxRenderer=new TN(this)),this._boundingBoxRenderer};Object.defineProperty(Sr.prototype,"showBoundingBox",{get:function(){return this._showBoundingBox||!1},set:function(n){this._showBoundingBox=n,n&&this.getScene().getBoundingBoxRenderer()},enumerable:!0,configurable:!0});Nj=j.Identity(),Dj=new j,vb=new b,Dme=new b,Ome=Nj.asArray(),Oj=new Sf(vb,vb),TN=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?(J.Error("BoundingBoxRenderer: Timeout while waiting for the renderer to be ready."),r&&J.Error(r)):(J.Error("BoundingBoxRenderer: An unexpected error occurred while waiting for the renderer to be ready."),r&&(J.Error(r),r.stack&&J.Error(r.stack)))},e,t)})}_evaluateSubMesh(e,t){if(e.showSubMeshesBoundingBox){let i=t.getBoundingInfo();i!=null&&(i.boundingBox._tag=e.renderingGroupId,this.renderList.push(i.boundingBox))}}_preActiveMesh(e){if(e.showBoundingBox||this.scene.forceShowBoundingBoxes){let t=e.getBoundingInfo();t.boundingBox._tag=e.renderingGroupId,this.renderList.push(t.boundingBox)}}_prepareResources(){if(this._colorShader)return;this._colorShader=new To("colorShader",this.scene,"boundingBoxRenderer",{attributes:[D.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(()=>(fN(),cN)),Promise.resolve().then(()=>(uN(),dN))]):await Promise.all([Promise.resolve().then(()=>(gN(),_N)),Promise.resolve().then(()=>(SN(),EN))])}},!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:[D.PositionKind],uniforms:["world","viewProjection","viewProjectionR","color"],uniformBuffers:["BoundingBoxRenderer"],shaderLanguage:this._shaderLanguage,extraInitializationsAsync:async()=>{this._shaderLanguage===1?await Promise.all([Promise.resolve().then(()=>(fN(),cN)),Promise.resolve().then(()=>(uN(),dN))]):await Promise.all([Promise.resolve().then(()=>(gN(),_N)),Promise.resolve().then(()=>(SN(),EN))])}},!0),this._colorShaderForOcclusionQuery.doNotSerialize=!0,this._colorShaderForOcclusionQuery.reservedDataStore={hidden:!0};let e=this.scene.getEngine(),t=ux({size:1});this._vertexBuffers[D.PositionKind]=new D(e,t.positions,D.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[D.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();IL();zt();fo();wj();us();DM();$f=class $f{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($f.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($f.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=Vd(Gt(i),Gt(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=Fc(Gt(i),Gt(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)&&wc(a.distance,r.distance,r.epsilon);o!==this.lastOccluded&&(this.lastOccluded=o,this.setBoundingBoxColor(o?$f.BBOX_OCCLUDED:$f.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=Lv({startPosition:Gt(e.startPosition),pivot:Gt(e.pivot),startRotationQuaternion:Pv(e.startRotationQuaternion),yawAxis:Gt(this.camera.getDirection(b.Up()).normalize()),pitchAxis:Gt(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=Vd(Gt(i),Gt(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=yv({origin:Gt(o.origin),direction:Gt(o.direction)},t);return l?new b(l.x,l.y,l.z):null}};$f.BBOX_VISIBLE=new pe(.25,.7,1),$f.BBOX_OCCLUDED=new pe(.1,.25,.4);AN=$f});var Vj={};tt(Vj,{BabylonModelPreview:()=>Sb,createBabylonModelPreview:()=>Hme});function Bme(n){let e=n.getClassName();return e==="DirectionalLight"||e==="PointLight"||e==="SpotLight"}function xN(n){return n.getClassName()==="GaussianSplattingMesh"}function Ume(n){return!!n&&typeof n=="object"&&"getBoundingInfo"in n}function av(n){return new b(n.x,n.y,n.z)}function Vme(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 Gme(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 kme(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 Wme(n,e,t){let i=ds(e),r=i.replace(/\.[^.]+$/,""),s=qr(t),a=[ks(n,e),ks(n,i)];if(s)for(let o of Uj)a.push(ks(n,`${s}.${o}`));for(let o of Uj){let l=`${r}.${o}`;l!==i&&a.push(ks(n,l))}return a}function Hme(n){return new Sb(n)}var Eb,Uj,Nme,wme,Fme,aa,Sb,Gj=M(()=>{"use strict";Hy();ys();fx();hx();Mk();Ck();uP();Ge();zt();yi();$P();xc();u4();IL();bR();R5();iP();ep();nv();nv();HO();zO();zK();Tj();ZS();Qs();Ws();Aj();Bj();lb();Fl();JS();MM();w_();us();aT();PM();Eb=null,Uj=["jpg","jpeg","png","bmp","tga","webp","tif","tiff"],Nme=/^\s*(map_Kd|map_Ka|map_Ks|map_Ns|map_d|map_bump|bump|disp|decal)\s+(.+)/i,wme=.242,Fme=320;aa=class aa{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 ei(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 ia("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.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=VK(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){Eb&&await Eb;let m;Eb=new Promise(p=>{m=p});try{let{OBJFileLoader:p}=await Promise.resolve().then(()=>(kO(),IK)),_=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=Vme(x[1]),R=Op(r),I=ks(R,S);try{let C=await i(I),L=new TextDecoder().decode(new Uint8Array(C)).split(` -`);for(let w=0;ww!=="");if(!O.some(w=>/^\s*Kd\s+/i.test(w))){let w=O.findIndex(N=>/^\s*newmtl\s+/i.test(N));O.splice(w>=0?w+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 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(),Eb=null}}else if(s==="stl")this.rootMesh=PK(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=$S(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=Sj(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.createModelSummary(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 ia("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 Ns("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 Lf("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 Lf("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(!Bme(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=xr(e),i=Math.max(t.x,t.z)*3,r=e.min.y;this.groundMesh=ns.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=xr(e),i=Math.max(t.x,t.z)*2,r=e.min.y-.01;this.gridMesh=ns.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=B3(e)*1.5,i=av(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=ns.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&&(xN(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=U_(e),this.updateMeasurementLabels()}getMeasurementScale(){return{...this.measurementScale}}setMeasurementUnit(e){this.measurementUnit=hT(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 uT(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 gb(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=_r()?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(tn(t)),r=av(xr(t));this.bboxMesh=ns.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&&HK(this.rootMesh,e,t,this.loadedMeshes)}resetExplode(){this.rootMesh&&KO(this.rootMesh,this.loadedMeshes)}resetView(){this.rootMesh&&KO(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.getRenderableMeshes(this.rootMesh),i=xN(this.rootMesh),r=this.createModelSummary(this.rootMesh),s=e&&ds(e)||r.rootName;return nT({title:s,format:this.loadedExt.toUpperCase(),summary:r,meshBreakdown:t.map(a=>BK(a,{isSplat:i})),materialNames:t.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=UK(e,this.loadedTransformNodes,this.gltfComponentMetadata);return fT({summary:this.createModelSummary(this.rootMesh),renderableMeshes:e,groupedPartCandidates:t,createMeshPart:i=>YO(i,this.gltfComponentMetadata),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:YO(t,this.gltfComponentMetadata)}exportSelectedPartInfo(){let e=this.getSelectedPartInfo();return e?sT(e):""}getPickWorldPoint(e){if(e.pickedPoint&&typeof e.pickedPoint=="object")return Gt(e.pickedPoint);if(Ume(e.mesh)){let t=e.mesh.getBoundingInfo().boundingBox.centerWorld;return Gt(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)/Fme)),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 lT([{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=aa.annotationWorldPoint;return a.set(e.x,e.y,e.z),b.ProjectToRef(a,aa.annotationIdentity,this.scene.getTransformMatrix(),this.camera.viewport.toGlobal(r,s),aa.annotationProjection),X3(aa.annotationProjection,r,s,i,t)}isAnnotationWorldPointOccluded(e){if(this.scene.isDisposed)return!1;let t=Fc(Gt(this.camera.position),e);if(!t)return!1;let i=aa.annotationDirection,r=aa.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)&&wc(s.distance,t.distance,t.epsilon)}getAnnotationProvider(){let e=this.engine.getRenderingCanvas();if(!e)throw new Error("Preview canvas is unavailable");return oT({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=_r()?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 pd(e,this.loadedMeshes)}getRenderableBounds(e){return ab(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:wme,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}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=ns.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=ns.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=ns.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=ns.CreatePlane("measure-label",{width:i*5,height:i*1.25},this.scene);r.position=t,r.billboardMode=Z.BILLBOARDMODE_ALL,r.isPickable=!1,r.renderingGroupId=2;let s=new SR("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=ns.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=ns.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 dT(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}}createModelSummary(e){let t=this.getRenderableMeshes(e),i=xN(e),r=t.reduce((s,a)=>s+md(a),0);return ob(e.name,this.getRenderableBounds(e),t,{splatCount:i?r:void 0,resourceWarnings:this.resourceWarnings})}};aa.annotationIdentity=j.Identity(),aa.annotationWorldPoint=b.Zero(),aa.annotationProjection=b.Zero(),aa.annotationDirection=b.Zero(),aa.annotationRay=new Kr(b.Zero(),b.Zero(),1);Sb=aa});async function kj(n,e){if(Wd(e).backend==="three"){let{createThreeModelPreview:r}=await Promise.resolve().then(()=>(m2(),u2));return r(n)}let{createBabylonModelPreview:i}=await Promise.resolve().then(()=>(Gj(),Vj));return i(n)}var Wj=M(()=>{"use strict";Ov()});var Hj={};tt(Hj,{createBabylonGridRenderer:()=>Xme});function zme(n){return n.replace(/\|/g,"\\|").replace(/\r?\n/g," ")}function RN(n){return new b(n.x,n.y,n.z)}function Xme(n){return new bN(n)}var hp,bN,zj=M(()=>{"use strict";Hy();ys();fx();hx();Ge();zt();em();ep();qh();xc();nv();nv();lb();ZS();Qs();Fl();JS();hp=32;bN=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 ei(this.engine),this.scene.clearColor=new lt(.12,.12,.14,1),this.scene.autoClear=!1,new ia("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=sv(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>hp?(console.warn(`[AI3D Grid] Capping ${e.length} models to ${hp} (layerMask limit)`),e.slice(0,hp)):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;mhp?(console.warn(`[AI3D Preset] Capping ${e.placements.length} placements to ${hp} (layerMask limit)`),e.placements.slice(0,hp)):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=$S(this.getCellBounds(e)),l=new gi(`cell-cam-${t}`,Math.PI/4,Math.PI/3,o.radius,RN(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=_r()?1.5:1;return this.engine.setHardwareScalingLevel(i/t),t}resetView(){for(let e=0;e(zj(),Hj));return e(n)}var Yj=M(()=>{"use strict"});function Yme(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 _d(n,e,t,i){let r=Wd(i);return Yme(n,e,r),{preview:await kj(t,i),route:r}}function Kme(n,e,t){n.info("select preview backend",{...e,backend:t.backend,reason:t.reason})}async function Kj(n,e,t){let i=$w();return Kme(n,e,i),{renderer:await Xj(t),route:i}}var Tb=M(()=>{"use strict";Wj();Yj();Ov()});function IN(n){qj=n}function Ab(n){return jj[n]>=jj[qj]}function xb(){return new Date().toISOString()}function Rb(n){return n&&Object.keys(n).length>0?n:void 0}function Wi(n){let e=`[AI3D][${n}]`;return{debug(t,i){Ab("debug")&&console.debug(e,xb(),t,Rb(i))},info(t,i){Ab("info")&&console.debug(e,xb(),t,Rb(i))},warn(t,i){Ab("warn")&&console.warn(e,xb(),t,Rb(i))},error(t,i){Ab("error")&&console.error(e,xb(),t,Rb(i))}}}var jj,qj,An=M(()=>{"use strict";jj={debug:10,info:20,warn:30,error:40},qj="warn"});function Mr(n,e){return!!n&&typeof n=="object"&&typeof n[e]=="function"}function ov(n){return Mr(n,"getAnnotationProvider")}function MN(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 lv(n){return Mr(n,"toggleDisassembly")&&Mr(n,"resetDisassembly")&&Mr(n,"isDisassemblyEnabled")}function cv(n){return Mr(n,"toggleFocusSelection")&&Mr(n,"isFocusSelectionEnabled")}function CN(n){return Mr(n,"toggleWireframe")}function bb(n){return Mr(n,"toggleOrientationGizmo")}function yN(n){return Mr(n,"toggleBoundingBox")}function PN(n){return Mr(n,"setRenderScale")}var dp=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 Zj(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"),Qj(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=(Ht=S==null?void 0:S.createSpan({cls:"ai3d-mobile-mode-btn-label"}))!=null?Ht:null,I=()=>{f&&S&&(Qj(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)},L=null,O=()=>{var Ye;let re=i(),K=re&&cv(re)?re:null,Pe=re&&lv(re)?re:null,Ae=re&&xn(re)?re:null;v(te,!!(K!=null&&K.isFocusSelectionEnabled())),v(z,!!(Pe!=null&&Pe.isDisassemblyEnabled())),v(ge,!!(Ae!=null&&Ae.isMeasurementActive())),re&&bb(re)&&v(ee,!!((Ye=re.isOrientationGizmoEnabled)!=null&&Ye.call(re)))},V=()=>{let re=i(),K=re&&cv(re)?re:null,Pe=re&&lv(re)?re:null,Ae=re&&MN(re)?re:null;re!==L&&(L=re,v(H,!1),v(q,!1),v(ae,!1),ae.replaceChildren(Lr('')),y(w,!!(re!=null&&re.resetView)),y(N,!!(re!=null&&re.exportModelInfo)),y(U,!!(re!=null&&re.exportSelectedPartInfo)),y(H,!!re&&CN(re)),y(ee,!!re&&bb(re)),y(q,!!re&&yN(re)),y(te,!!K),y(z,!!Pe),y(Be,!!re&&PN(re)),y(ae,!!(Ae!=null&&Ae.hasAnimations()))),y(ge,!!re&&xn(re)),y(ne,!!re&&xn(re)),y(ue,!!re&&xn(re)),y(De,!!re&&xn(re)),O(),x()},w=u.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.resetViewLabel")}});ln(w,"reset-view"),w.appendChild(Lr('')),w.addEventListener("click",()=>{let re=i();re!=null&&re.resetView&&(re.resetView(),V(),bi(w,Q("helper.resetViewDone")))});let N=g(m.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.copyModelInfoLabel")}}));ln(N,"copy-model-info"),N.appendChild(Lr('')),N.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(N,Q("helper.copied"))}).catch(()=>{bi(N,Q("helper.failed"))})}catch(K){console.error("[AI3D] Export model info failed:",K),bi(N,Q("helper.failed"))}});let U=g(m.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.copySelectedPartInfoLabel")}}));ln(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 H=u.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.toggleWireframeLabel"),"aria-pressed":"false"}});ln(H,"toggle-wireframe"),H.appendChild(Lr('')),H.addEventListener("click",()=>{let re=i();if(!(re!=null&&re.toggleWireframe))return;let K=re.toggleWireframe();v(H,K),bi(H,K?Q("helper.wireframeOn"):Q("helper.wireframeOff"))});let ee=u.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.toggleAxesLabel"),"aria-pressed":"false"}});ln(ee,"toggle-axes"),ee.appendChild(Lr('')),ee.addEventListener("click",()=>{let re=i();if(!(re!=null&&re.toggleOrientationGizmo))return;let K=re.toggleOrientationGizmo();v(ee,K),bi(ee,K?Q("helper.axesOn"):Q("helper.axesOff"))});let q=u.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.toggleBoundingBoxLabel"),"aria-pressed":"false"}});ln(q,"toggle-bounding-box"),q.appendChild(Lr('')),q.addEventListener("click",()=>{let re=i();if(!(re!=null&&re.toggleBoundingBox))return;let K=re.toggleBoundingBox();v(q,K),bi(q,K?Q("helper.boundingBoxOn"):Q("helper.boundingBoxOff"))});let te=m.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.toggleFocusSelectionLabel"),"aria-pressed":"false"}});ln(te,"toggle-focus"),te.appendChild(Lr('')),te.addEventListener("click",()=>{let re=i();if(!re||!cv(re))return;let K=re.toggleFocusSelection();V(),bi(te,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"}});ln(z,"toggle-disassembly"),z.appendChild(Lr('')),z.addEventListener("click",()=>{let re=i();if(!re||!lv(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,Re=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;Re=(Re+1)%Y.length;let K=re.setRenderScale(Y[Re]);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"}}));ln(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 ge=m.createEl("button",{cls:"ai3d-inline-btn is-hidden",attr:{"aria-label":Q("helper.toggleMeasurementLabel"),"aria-pressed":"false",title:Q("helper.toggleMeasurementLabel")}});ln(ge,"toggle-measurement"),ge.appendChild(Lr('')),ge.addEventListener("click",()=>{let re=i();if(!re||!xn(re))return;let K=re.toggleMeasurement();v(ge,K),bi(ge,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")}}));ln(ne,"clear-measurements"),ne.appendChild(Lr('')),ne.addEventListener("click",()=>{let re=i();!re||!xn(re)||(re.clearMeasurements(),v(ge,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")}}));ln(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")}}));ln(De,"toggle-calibration"),De.appendChild(Lr(''));let de=p.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.copySnapshotLabel")}});ln(de,"copy-snapshot"),de.appendChild(Lr('')),de.addEventListener("click",()=>{let re=i();if(re)try{let K=re.captureSnapshot();if(!K)return;let Pe=Zj(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 Ie=g(p.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.saveSnapshotLabel")}}));ln(Ie,"save-snapshot"),Ie.appendChild(Lr('')),Ie.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=Zj(Ae),Zi=new FileReader;Zi.onload=()=>{let Va=Zi.result;t.vault.adapter.exists(At).then(Mp=>Mp?Promise.resolve():t.vault.createFolder(At).catch(xv=>{jme.warn("Failed to create vault folder",{path:At,error:String(xv)})})).then(()=>t.vault.createBinary(`${At}/${vi}`,Va)).then(()=>{bi(Ie,Q("helper.saved"))}).catch(Mp=>{console.error("[AI3D] Save snapshot failed:",Mp),bi(Ie,Q("helper.failed"))})},Zi.onerror=()=>{console.error("[AI3D] FileReader error"),bi(Ie,Q("helper.failed"))},Zi.onabort=()=>{console.error("[AI3D] FileReader aborted"),bi(Ie,Q("helper.failed"))},Zi.readAsArrayBuffer(bn)}catch(Ae){console.error("[AI3D] Save snapshot failed:",Ae),bi(Ie,Q("helper.failed"))}});let Ze=g(p.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.downloadSnapshotLabel")}}));ln(Ze,"download-snapshot"),Ze.appendChild(Lr('')),Ze.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(Ze,Q("helper.downloaded"))}catch(K){console.error("[AI3D] Download snapshot failed:",K),bi(Ze,Q("helper.failed"))}});let Tt=g(p.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.removePreviewLabel")}}));ln(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"}});ln(Xe,"toggle-annotation"),Xe.appendChild(Lr(''));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(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")}),be=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(),be=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)||!be)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:be.x>1e-4?K/be.x:1,y:be.y>1e-4?Pe/be.y:1,z:be.z>1e-4?Ae/be.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(),be?(ot.value=be.x.toFixed(3),Li.value=be.y.toFixed(3),X.value=be.z.toFixed(3)):(ot.value="",Li.value="",X.value=""),bi(ye,Q("helper.calibrateResetDone")))}function Qe(re){if(!Ve.checked||!be)return;let Pe=parseFloat((re==="x"?ot:re==="y"?Li:X).value);if(!isFinite(Pe)||Pe===0)return;let Ae=be[re];if(Ae<=1e-4)return;let Ye=Pe/Ae;re!=="x"&&(ot.value=(be.x*Ye).toFixed(3)),re!=="y"&&(Li.value=(be.y*Ye).toFixed(3)),re!=="z"&&(X.value=(be.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(),be)){let K=i(),Pe=K&&xn(K)?K.getMeasurementScale():{x:1,y:1,z:1};ot.value=(be.x*Pe.x).toFixed(3),Li.value=(be.y*Pe.y).toFixed(3),X.value=(be.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=LN.get(n))==null||i.remove();let t=n.createSpan({cls:"ai3d-tooltip"});t.textContent=e,LN.set(n,t),window.setTimeout(()=>{t.remove(),LN.delete(n)},1500)}var jme,LN,DN=M(()=>{"use strict";Mn();An();dp();Qs();Ws();jme=Wi("helper-buttons");LN=new WeakMap});function Zme(n,e,t){let i=new Promise((r,s)=>{let a=window.setTimeout(()=>{s(new ON(`Conversion did not complete within ${e}ms`))},e);n.then(()=>window.clearTimeout(a)).catch(()=>window.clearTimeout(a))});return Promise.race([n,i])}var hv,qme,ON,Ib,$j=M(()=>{"use strict";Co();An();hv=Wi("conversion-manager"),qme=3e5,ON=class extends Error{constructor(e="Conversion timed out"){super(e),this.name="ConversionTimeoutError"}};Ib=class{constructor(){this.converters=new Map;this.pending=new Map}getConverter(e){return this.converters.get(Ga(e))}registerConverter(e){hv.info("register converter",{converterId:e.id,sourceExts:[...e.sourceExts]});for(let t of e.sourceExts)this.converters.set(Ga(t),e)}canConvert(e){let t=Ga(e),i=this.converters.has(t);return hv.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=Ga(e.sourceExt),i=this.getConverter(t);if(!i)throw hv.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 hv.info("joining in-flight conversion",{key:r}),s;hv.info("dispatch conversion",{converterId:i.id,ext:t,targetExt:e.targetExt});let a=Zme(i.convert({...e,sourceExt:t}),(o=e.timeoutMs)!=null?o:qme,{converterId:i.id,ext:t,targetExt:e.targetExt});this.pending.set(r,a);try{return await a}finally{this.pending.delete(r)}}}});function FN(...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 $me(){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",...FN("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 Jme(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 epe(...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 VN(n){try{return await fs(n,(We==null?void 0:We.platform)==="win32"?hs:Uw),!0}catch(e){return!1}}function NN(n){let e=n==null?void 0:n.trim();if(e)return e}function tq(n){return tpe.test(n)?{ok:!1,reason:"Command contains unsafe shell metacharacters."}:{ok:!0}}function ipe(n,e){for(let t of[n,...e]){let i=tq(t);if(!i.ok)return i}return{ok:!0}}async function rpe(n){try{return(await Dp(n)).isFile()}catch(e){return!1}}function npe(n){let e=[],t="",i=null;for(let r=0;rr.trim().toLowerCase()).filter(Boolean);return e!=null&&e.length?e:Qme}async function lpe(n){var r;let e=(r=We==null?void 0:We.env)==null?void 0:r.PATH;if(!e)return;let t=e.split(Vw).map(s=>s.trim()).filter(Boolean),i=(We==null?void 0:We.platform)==="win32"?ope(n):[""];for(let s of t)for(let a of i){let o=Xi(s,a?`${n}${a}`:n);if(await VN(o))return o}}function BN(n,e,t=15e3){let i=tq(n);return i.ok?new Promise((r,s)=>{ha(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 UN(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 wN(n,e,t,i){let r="";for(let s of t)try{return await BN(n,[...e,...s]),{ok:!0,detail:""}}catch(a){let o=UN(a);if(i.test(o))return{ok:!0,detail:""};r=o}return{ok:!1,detail:r||"Command probe failed."}}async function cpe(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 BN(e,[...t,"-c","import cadquery, trimesh; print('ok')"]),[{kind:"cad-python",ok:!0,detail:""}]}catch(r){return[{kind:"cad-python",ok:!1,detail:UN(r)}]}if(n.id==="assimp")try{return await BN(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:UN(r)}]}if(n.id==="freecadcmd"){let r=await wN(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 wN(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 wN(e,t,[["--version"],["--help"]],/fbx2gltf|usage|help|version/i);return[{kind:"fbx2gltf-cli",ok:r.ok,detail:r.detail}]}return[]}function fpe(n){let e=eq.find(t=>t.id===n);if(!e)throw new Error(`Unknown converter command id: ${n}`);return e}function hpe(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 Jj(n,e,t){for(let i of e)if(await VN(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 dpe(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 Mb(n,e,t,i){let r=spe(e),s=ipe(r.executable,r.args);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(ape(r.executable)){let[o,l]=await Promise.all([VN(r.executable),rpe(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 ${Cb(t)} path.`:"Configured path was not found or is not executable.",checkedCandidates:[r.executable]}}let a=await lpe(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 ${Cb(t)} via PATH lookup.`:"Command name was not found on PATH.",checkedCandidates:[r.executable]}}function Cb(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 iq(n,e){var d,u,m;let t=fpe(n),{userCandidates:i,systemCandidates:r}=hpe(t),s=NN(e);if(s)return Mb(t,s,"settings",s);let a=NN((d=We==null?void 0:We.env)==null?void 0:d[t.envVar]);if(a)return Mb(t,a,"env");for(let p of(u=t.envVarAliases)!=null?u:[]){let _=NN((m=We==null?void 0:We.env)==null?void 0:m[p]);if(_)return Mb(t,_,"env")}let o=await Jj(t,i,"Detected at a common user-managed install location.");if(o)return o;let l=[];for(let p of t.fallbackCommands){let _=await Mb(t,p,"path");if(l.push(_),_.available)return _}let c=await Jj(t,r,"Detected at a system fallback install location.");if(c)return c;let f=l.flatMap(p=>p.checkedCandidates),h=dpe(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 yb(n){let e=await Promise.all(eq.map(t=>iq(t.id,n[t.settingsKey])));return Promise.all(e.map(async t=>({...t,dependencyChecks:await cpe(t)})))}async function ls(n,e){var i;let t=await iq(n,e);if(!t.available&&t.detail==="Command contains unsafe shell metacharacters.")throw new Error(`Refusing to resolve converter command '${n}': ${t.detail}`);return{command:(i=t.resolvedPath)!=null?i:t.executable,args:[...t.args]}}var We,Qme,eq,tpe,Jf=M(()=>{"use strict";cr();cr();cr();We=Iv(),Qme=[".exe",".cmd",".bat",".com"];eq=[{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"?Jme("obj2gltf.cmd"):FN("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"?epe(Xi("FBX2glTF","FBX2glTF-windows-x64.exe"),Xi("FBX2glTF","FBX2glTF.exe")):FN("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:$me()}];tpe=/[;|&<>$`\r\n\t]/});var nq,rq=M(()=>{nq=`import cadquery as cq +}`;A.ShadersStore[AN]||(A.ShadersStore[AN]=Oj);Wme={name:AN,shader:Oj}});var Fj,Nj,xb,Hme,zme,wj,bN,Bj=M(()=>{Ps();ki();Em();Ge();co();cm();$y();Wn();NP();zt();di();Hh();_f();bP();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 bN(this)),this._boundingBoxRenderer};Object.defineProperty(Tr.prototype,"showBoundingBox",{get:function(){return this._showBoundingBox||!1},set:function(n){this._showBoundingBox=n,n&&this.getScene().getBoundingBoxRenderer()},enumerable:!0,configurable:!0});Fj=j.Identity(),Nj=new j,xb=new b,Hme=new b,zme=Fj.asArray(),wj=new Tf(xb,xb),bN=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 mr(this.scene.getEngine(),void 0,void 0,"BoundingBoxRendererFront",!0),this._buildUniformLayout(this._uniformBufferFront),this._uniformBufferBack=new mr(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=>{Zo(()=>this._colorShader.isReady(),()=>{i()},(r,s)=>{s?(J.Error("BoundingBoxRenderer: Timeout while waiting for the renderer to be ready."),r&&J.Error(r)):(J.Error("BoundingBoxRenderer: An unexpected error occurred while waiting for the renderer to be ready."),r&&(J.Error(r),r.stack&&J.Error(r.stack)))},e,t)})}_evaluateSubMesh(e,t){if(e.showSubMeshesBoundingBox){let i=t.getBoundingInfo();i!=null&&(i.boundingBox._tag=e.renderingGroupId,this.renderList.push(i.boundingBox))}}_preActiveMesh(e){if(e.showBoundingBox||this.scene.forceShowBoundingBoxes){let t=e.getBoundingInfo();t.boundingBox._tag=e.renderingGroupId,this.renderList.push(t.boundingBox)}}_prepareResources(){if(this._colorShader)return;this._colorShader=new Ao("colorShader",this.scene,"boundingBoxRenderer",{attributes:[D.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(()=>(mN(),uN)),Promise.resolve().then(()=>(gN(),_N))]):await Promise.all([Promise.resolve().then(()=>(TN(),SN)),Promise.resolve().then(()=>(RN(),xN))])}},!1),this._colorShader.setDefine("INSTANCES",this._useInstances),this._colorShader.doNotSerialize=!0,this._colorShader.reservedDataStore={hidden:!0},this._colorShaderForOcclusionQuery=new Ao("colorShaderOccQuery",this.scene,"boundingBoxRenderer",{attributes:[D.PositionKind],uniforms:["world","viewProjection","viewProjectionR","color"],uniformBuffers:["BoundingBoxRenderer"],shaderLanguage:this._shaderLanguage,extraInitializationsAsync:async()=>{this._shaderLanguage===1?await Promise.all([Promise.resolve().then(()=>(mN(),uN)),Promise.resolve().then(()=>(gN(),_N))]):await Promise.all([Promise.resolve().then(()=>(TN(),SN)),Promise.resolve().then(()=>(RN(),xN))])}},!0),this._colorShaderForOcclusionQuery.doNotSerialize=!0,this._colorShaderForOcclusionQuery.reservedDataStore={hidden:!0};let e=this.scene.getEngine(),t=vx({size:1});this._vertexBuffers[D.PositionKind]=new D(e,t.positions,D.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[D.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(wj);let s=0,a=this.scene.floatingOriginOffset;for(let g=0;g{"use strict";Ge();PL();zt();ho();Bj();ms();BM();Jf=class Jf{constructor(e,t,i){this.occlusionDirection=b.Zero();this.occlusionRay=new jr(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(Jf.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(Jf.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=kd(Gt(i),Gt(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=Uc(Gt(i),Gt(t));if(!r)return;let s=this.occlusionDirection;s.set(r.direction.x,r.direction.y,r.direction.z),this.occlusionRay.origin=i,this.occlusionRay.direction=s,this.occlusionRay.length=r.distance;let a=this.scene.pickWithRay(this.occlusionRay),o=!!(a!=null&&a.hit)&&Bc(a.distance,r.distance,r.epsilon);o!==this.lastOccluded&&(this.lastOccluded=o,this.setBoundingBoxColor(o?Jf.BBOX_OCCLUDED:Jf.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=wv({startPosition:Gt(e.startPosition),pivot:Gt(e.pivot),startRotationQuaternion:Nv(e.startRotationQuaternion),yawAxis:Gt(this.camera.getDirection(b.Up()).normalize()),pitchAxis:Gt(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=kd(Gt(i),Gt(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=Ov({origin:Gt(o.origin),direction:Gt(o.direction)},t);return l?new b(l.x,l.y,l.z):null}};Jf.BBOX_VISIBLE=new pe(.25,.7,1),Jf.BBOX_OCCLUDED=new pe(.1,.25,.4);IN=Jf});var kj={};tt(kj,{BabylonModelPreview:()=>bb,createBabylonModelPreview:()=>epe});function jme(n){let e=n.getClassName();return e==="DirectionalLight"||e==="PointLight"||e==="SpotLight"}function MN(n){return n.getClassName()==="GaussianSplattingMesh"}function qme(n){return!!n&&typeof n=="object"&&"getBoundingInfo"in n}function fv(n){return new b(n.x,n.y,n.z)}function Zme(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 Qme(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 $me(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 Jme(n,e,t){let i=us(e),r=i.replace(/\.[^.]+$/,""),s=Zr(t),a=[Ws(n,e),Ws(n,i)];if(s)for(let o of Gj)a.push(Ws(n,`${s}.${o}`));for(let o of Gj){let l=`${r}.${o}`;l!==i&&a.push(Ws(n,l))}return a}function epe(n){return new bb(n)}var Rb,Gj,Xme,Yme,Kme,oa,bb,Wj=M(()=>{"use strict";Ky();Ps();px();_x();yk();Pk();gP();Ge();zt();yi();iL();bc();p4();PL();PR();I5();aP();tp();lv();lv();KO();jO();YK();xj();eT();$s();Hs();Rj();Vj();ub();jo();nT();DM();B_();ms();hT();wM();Rb=null,Gj=["jpg","jpeg","png","bmp","tga","webp","tif","tiff"],Xme=/^\s*(map_Kd|map_Ka|map_Ks|map_Ns|map_d|map_bump|bump|disp|decal)\s+(.+)/i,Yme=.242,Kme=320;oa=class oa{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 ra("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=Uj(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 ov(),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=kK(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,${Bl(e)}`;if(s==="obj"&&i&&r){Rb&&await Rb;let m;Rb=new Promise(p=>{m=p});try{let{OBJFileLoader:p}=await Promise.resolve().then(()=>(XO(),CK)),_=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=Zme(x[1]),R=Np(r),I=Ws(R,S);try{let C=await i(I),L=new TextDecoder().decode(new Uint8Array(C)).split(` +`);for(let w=0;ww!=="");if(!O.some(w=>/^\s*Kd\s+/i.test(w))){let w=O.findIndex(N=>/^\s*newmtl\s+/i.test(N));O.splice(w>=0?w+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 Zg(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(),Rb=null}}else if(s==="stl")this.rootMesh=DK(a,e),this.rootMesh&&(this.loadedMeshes=[this.rootMesh]);else if(s==="ply")this.rootMesh=NK(a,e),this.rootMesh&&(this.loadedMeshes=[this.rootMesh]);else{let m=await Zg(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=rT(this.getRenderableBounds(this.rootMesh));return this.camera.target=fv(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=Aj(this.scene,m=>{if(!this.isDisassemblyActive()){if(this.measurementActive&&m.pickedPoint){this.addMeasurementPoint(fv(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.createModelSummary(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 ra("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 ws("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 Df("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 Wr("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 Df("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(!jme(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 Vm,this.autoRotateBehavior.idleRotationSpeed=(t=e.autoRotateSpeed)!=null?t:.5,this.autoRotateBehavior.idleRotationWaitTime=1e3,this.autoRotateBehavior.idleRotationSpinupTime=500,this.camera.addBehavior(this.autoRotateBehavior))),e.groundShadow&&this.rootMesh&&this.createGround(),e.grid&&this.createGrid(),e.axis&&this.createAxis()}createGround(){if(!this.rootMesh||this.groundMesh)return;let e=this.getRenderableBounds(this.rootMesh),t=sr(e),i=Math.max(t.x,t.z)*3,r=e.min.y;this.groundMesh=ss.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=sr(e),i=Math.max(t.x,t.z)*2,r=e.min.y-.01;this.gridMesh=ss.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=G3(e)*1.5,i=fv(e.min),r=w_(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=ss.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&&(MN(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=G_(e),this.updateMeasurementLabels()}getMeasurementScale(){return{...this.measurementScale}}setMeasurementUnit(e){this.measurementUnit=pT(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 gT(this.createMeasurementRecords())}updateMeasurementLabels(){if(this.measurementSegments.length===0)return;let e=this.getMeasurementMarkerSize()*4;for(let t of this.measurementSegments){let i=Vu(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 Ab(this.engine,this.camera)),this.gizmoEnabled}isOrientationGizmoEnabled(){return this.gizmoEnabled}setRenderScale(e){let t=Math.max(.25,Math.min(e,2)),i={low:2,medium:1.33,high:1}[this.currentQuality],r=gr()?1.5:1;return this.engine.setHardwareScalingLevel(i*r/t),t}getPerformanceSnapshot(){return{backend:"babylon",renderScale:Number((1/this.engine.getHardwareScalingLevel()).toFixed(2)),quality:this.currentQuality,meshCount:this.rootMesh?this.getRenderableMeshes(this.rootMesh).length:0}}toggleBoundingBox(){var e;if(this.bboxEnabled=!this.bboxEnabled,this.bboxEnabled){if(!this.rootMesh)return this.bboxEnabled;this.bboxMesh&&this.bboxMesh.dispose();let t=this.getRenderableBounds(this.rootMesh),i=fv(yr(t)),r=fv(sr(t));this.bboxMesh=ss.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&&XK(this.rootMesh,e,t,this.loadedMeshes)}resetExplode(){this.rootMesh&&QO(this.rootMesh,this.loadedMeshes)}resetView(){this.rootMesh&&QO(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.getRenderableMeshes(this.rootMesh),i=MN(this.rootMesh),r=this.createModelSummary(this.rootMesh),s=e&&us(e)||r.rootName;return cT({title:s,format:this.loadedExt.toUpperCase(),summary:r,meshBreakdown:t.map(a=>VK(a,{isSplat:i})),materialNames:t.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=GK(e,this.loadedTransformNodes,this.gltfComponentMetadata);return mT({summary:this.createModelSummary(this.rootMesh),renderableMeshes:e,groupedPartCandidates:t,createMeshPart:i=>ZO(i,this.gltfComponentMetadata),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:ZO(t,this.gltfComponentMetadata)}exportSelectedPartInfo(){let e=this.getSelectedPartInfo();return e?fT(e):""}getPickWorldPoint(e){if(e.pickedPoint&&typeof e.pickedPoint=="object")return Gt(e.pickedPoint);if(qme(e.mesh)){let t=e.mesh.getBoundingInfo().boundingBox.centerWorld;return Gt(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)/Kme)),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 uT([{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=oa.annotationWorldPoint;return a.set(e.x,e.y,e.z),b.ProjectToRef(a,oa.annotationIdentity,this.scene.getTransformMatrix(),this.camera.viewport.toGlobal(r,s),oa.annotationProjection),j3(oa.annotationProjection,r,s,i,t)}isAnnotationWorldPointOccluded(e){if(this.scene.isDisposed)return!1;let t=Uc(Gt(this.camera.position),e);if(!t)return!1;let i=oa.annotationDirection,r=oa.annotationRay;i.set(t.direction.x,t.direction.y,t.direction.z),r.origin=this.camera.position,r.direction=i,r.length=t.distance;let s=this.scene.pickWithRay(r);return!!(s!=null&&s.hit)&&Bc(s.distance,t.distance,t.epsilon)}getAnnotationProvider(){let e=this.engine.getRenderingCanvas();if(!e)throw new Error("Preview canvas is unavailable");return dT({canvas:e,observeRender:t=>{let i=this.scene.onAfterRenderCameraObservable.add(r=>{r===this.camera&&t()});return{remove:()=>this.scene.onAfterRenderCameraObservable.remove(i)}},getCameraStateKey:()=>this.getAnnotationCameraStateKey(),projectWorldPoint:(t,i)=>this.projectAnnotationWorldPoint(t,i),isWorldPointOccluded:t=>this.isAnnotationWorldPointOccluded(t)})}getCanvas(){return this.engine.getRenderingCanvas()}getLastPickResult(){return this._lastPickResult}onPick(e){return this._onPickCallbacks.push(e),()=>{this._onPickCallbacks=this._onPickCallbacks.filter(t=>t!==e)}}setRenderQuality(e,t=1){this.currentQuality=e;let i={low:2,medium:1.33,high:1},r=gr()?1.5:1,s=i[e]*r/Math.max(t,.25);if(this.engine.setHardwareScalingLevel(s),this.shadowGenerator){let a={low:0,medium:16,high:32};this.shadowGenerator.blurKernel=a[e],e==="low"?(this.shadowGenerator.useBlurExponentialShadowMap=!1,this.shadowGenerator.useExponentialShadowMap=!0):(this.shadowGenerator.useBlurExponentialShadowMap=!0,this.shadowGenerator.useExponentialShadowMap=!1)}}destroy(){var t,i,r,s,a,o,l,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 vd(e,this.loadedMeshes)}getRenderableBounds(e){return hb(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:Yme,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}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=ss.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=ss.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=ss.CreateLines("measure-line",{points:[e,t]},this.scene);i.color=new pe(1,.42,.42),i.isPickable=!1,i.renderingGroupId=2;let r=Vu(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=ss.CreatePlane("measure-label",{width:i*5,height:i*1.25},this.scene);r.position=t,r.billboardMode=Z.BILLBOARDMODE_ALL,r.isPickable=!1,r.renderingGroupId=2;let s=new bR("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=ss.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=ss.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 _T(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}}createModelSummary(e){let t=this.getRenderableMeshes(e),i=MN(e),r=t.reduce((s,a)=>s+gd(a),0);return db(e.name,this.getRenderableBounds(e),t,{splatCount:i?r:void 0,resourceWarnings:this.resourceWarnings})}};oa.annotationIdentity=j.Identity(),oa.annotationWorldPoint=b.Zero(),oa.annotationProjection=b.Zero(),oa.annotationDirection=b.Zero(),oa.annotationRay=new jr(b.Zero(),b.Zero(),1);bb=oa});async function Hj(n,e){if(zd(e).backend==="three"){let{createThreeModelPreview:r}=await Promise.resolve().then(()=>(_2(),p2));return r(n)}let{createBabylonModelPreview:i}=await Promise.resolve().then(()=>(Wj(),kj));return i(n)}var zj=M(()=>{"use strict";Bv()});var Xj={};tt(Xj,{createBabylonGridRenderer:()=>ipe});function tpe(n){return n.replace(/\|/g,"\\|").replace(/\r?\n/g," ")}function CN(n){return new b(n.x,n.y,n.z)}function ipe(n){return new yN(n)}var dp,yN,Yj=M(()=>{"use strict";Ky();Ps();px();_x();Ge();zt();tm();tp();$h();bc();lv();lv();ub();eT();$s();jo();nT();dp=32;yN=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 ra("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=cv(e);if(!t)throw new Error("Grid cell has no renderable meshes");return t}async loadModels(e,t,i){var h,d,u;await ov();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=rT(this.getCellBounds(e)),l=new gi(`cell-cam-${t}`,Math.PI/4,Math.PI/3,o.radius,CN(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 ao(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=gr()?1.5:1;return this.engine.setHardwareScalingLevel(i/t),t}resetView(){for(let e=0;e(Yj(),Xj));return e(n)}var jj=M(()=>{"use strict"});function rpe(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 Ed(n,e,t,i){let r=zd(i);return rpe(n,e,r),{preview:await Hj(t,i),route:r}}function npe(n,e,t){n.info("select preview backend",{...e,backend:t.backend,reason:t.reason})}async function qj(n,e,t){let i=iF();return npe(n,e,i),{renderer:await Kj(t),route:i}}var Ib=M(()=>{"use strict";zj();jj();Bv()});function PN(n){Qj=n}function Mb(n){return Zj[n]>=Zj[Qj]}function Cb(){return new Date().toISOString()}function yb(n){return n&&Object.keys(n).length>0?n:void 0}function Wi(n){let e=`[AI3D][${n}]`;return{debug(t,i){Mb("debug")&&console.debug(e,Cb(),t,yb(i))},info(t,i){Mb("info")&&console.debug(e,Cb(),t,yb(i))},warn(t,i){Mb("warn")&&console.warn(e,Cb(),t,yb(i))},error(t,i){Mb("error")&&console.error(e,Cb(),t,yb(i))}}}var Zj,Qj,An=M(()=>{"use strict";Zj={debug:10,info:20,warn:30,error:40},Qj="warn"});function Mr(n,e){return!!n&&typeof n=="object"&&typeof n[e]=="function"}function hv(n){return Mr(n,"getAnnotationProvider")}function LN(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 dv(n){return Mr(n,"toggleDisassembly")&&Mr(n,"resetDisassembly")&&Mr(n,"isDisassemblyEnabled")}function uv(n){return Mr(n,"toggleFocusSelection")&&Mr(n,"isFocusSelectionEnabled")}function DN(n){return Mr(n,"toggleWireframe")}function Pb(n){return Mr(n,"toggleOrientationGizmo")}function ON(n){return Mr(n,"toggleBoundingBox")}function NN(n){return Mr(n,"setRenderScale")}var up=M(()=>{"use strict"});function Dr(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 $j(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"),Jj(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(Dr(''));let R=(Ht=S==null?void 0:S.createSpan({cls:"ai3d-mobile-mode-btn-label"}))!=null?Ht:null,I=()=>{f&&S&&(Jj(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)},L=null,O=()=>{var Ye;let re=i(),K=re&&uv(re)?re:null,Pe=re&&dv(re)?re:null,Ae=re&&xn(re)?re:null;v(te,!!(K!=null&&K.isFocusSelectionEnabled())),v(z,!!(Pe!=null&&Pe.isDisassemblyEnabled())),v(ge,!!(Ae!=null&&Ae.isMeasurementActive())),re&&Pb(re)&&v(ee,!!((Ye=re.isOrientationGizmoEnabled)!=null&&Ye.call(re)))},V=()=>{let re=i(),K=re&&uv(re)?re:null,Pe=re&&dv(re)?re:null,Ae=re&&LN(re)?re:null;re!==L&&(L=re,v(H,!1),v(q,!1),v(ae,!1),ae.replaceChildren(Dr('')),y(w,!!(re!=null&&re.resetView)),y(N,!!(re!=null&&re.exportModelInfo)),y(U,!!(re!=null&&re.exportSelectedPartInfo)),y(H,!!re&&DN(re)),y(ee,!!re&&Pb(re)),y(q,!!re&&ON(re)),y(te,!!K),y(z,!!Pe),y(Be,!!re&&NN(re)),y(ae,!!(Ae!=null&&Ae.hasAnimations()))),y(ge,!!re&&xn(re)),y(ne,!!re&&xn(re)),y(ue,!!re&&xn(re)),y(De,!!re&&xn(re)),O(),x()},w=u.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.resetViewLabel")}});ln(w,"reset-view"),w.appendChild(Dr('')),w.addEventListener("click",()=>{let re=i();re!=null&&re.resetView&&(re.resetView(),V(),bi(w,Q("helper.resetViewDone")))});let N=g(m.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.copyModelInfoLabel")}}));ln(N,"copy-model-info"),N.appendChild(Dr('')),N.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(N,Q("helper.copied"))}).catch(()=>{bi(N,Q("helper.failed"))})}catch(K){console.error("[AI3D] Export model info failed:",K),bi(N,Q("helper.failed"))}});let U=g(m.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.copySelectedPartInfoLabel")}}));ln(U,"copy-selected-part-info"),U.appendChild(Dr('')),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 H=u.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.toggleWireframeLabel"),"aria-pressed":"false"}});ln(H,"toggle-wireframe"),H.appendChild(Dr('')),H.addEventListener("click",()=>{let re=i();if(!(re!=null&&re.toggleWireframe))return;let K=re.toggleWireframe();v(H,K),bi(H,K?Q("helper.wireframeOn"):Q("helper.wireframeOff"))});let ee=u.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.toggleAxesLabel"),"aria-pressed":"false"}});ln(ee,"toggle-axes"),ee.appendChild(Dr('')),ee.addEventListener("click",()=>{let re=i();if(!(re!=null&&re.toggleOrientationGizmo))return;let K=re.toggleOrientationGizmo();v(ee,K),bi(ee,K?Q("helper.axesOn"):Q("helper.axesOff"))});let q=u.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.toggleBoundingBoxLabel"),"aria-pressed":"false"}});ln(q,"toggle-bounding-box"),q.appendChild(Dr('')),q.addEventListener("click",()=>{let re=i();if(!(re!=null&&re.toggleBoundingBox))return;let K=re.toggleBoundingBox();v(q,K),bi(q,K?Q("helper.boundingBoxOn"):Q("helper.boundingBoxOff"))});let te=m.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.toggleFocusSelectionLabel"),"aria-pressed":"false"}});ln(te,"toggle-focus"),te.appendChild(Dr('')),te.addEventListener("click",()=>{let re=i();if(!re||!uv(re))return;let K=re.toggleFocusSelection();V(),bi(te,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"}});ln(z,"toggle-disassembly"),z.appendChild(Dr('')),z.addEventListener("click",()=>{let re=i();if(!re||!dv(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,Re=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;Re=(Re+1)%Y.length;let K=re.setRenderScale(Y[Re]);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"}}));ln(ae,"toggle-animation"),ae.appendChild(Dr('')),ae.addEventListener("click",()=>{let re=i();if(!(re!=null&&re.toggleAnimation))return;let K=re.toggleAnimation();ae.replaceChildren(Dr(K?'':'')),v(ae,K),bi(ae,K?Q("helper.playing"):Q("helper.paused"))});let ge=m.createEl("button",{cls:"ai3d-inline-btn is-hidden",attr:{"aria-label":Q("helper.toggleMeasurementLabel"),"aria-pressed":"false",title:Q("helper.toggleMeasurementLabel")}});ln(ge,"toggle-measurement"),ge.appendChild(Dr('')),ge.addEventListener("click",()=>{let re=i();if(!re||!xn(re))return;let K=re.toggleMeasurement();v(ge,K),bi(ge,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")}}));ln(ne,"clear-measurements"),ne.appendChild(Dr('')),ne.addEventListener("click",()=>{let re=i();!re||!xn(re)||(re.clearMeasurements(),v(ge,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")}}));ln(ue,"copy-measurements"),ue.appendChild(Dr('')),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")}}));ln(De,"toggle-calibration"),De.appendChild(Dr(''));let de=p.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.copySnapshotLabel")}});ln(de,"copy-snapshot"),de.appendChild(Dr('')),de.addEventListener("click",()=>{let re=i();if(re)try{let K=re.captureSnapshot();if(!K)return;let Pe=$j(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 Ie=g(p.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.saveSnapshotLabel")}}));ln(Ie,"save-snapshot"),Ie.appendChild(Dr('')),Ie.addEventListener("click",()=>{var K,Pe;let re=i();if(re)try{let Ae=re.captureSnapshot();if(!Ae)return;let Ye=r(),Ke=Zr(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=$j(Ae),Zi=new FileReader;Zi.onload=()=>{let Va=Zi.result;t.vault.adapter.exists(At).then(Cp=>Cp?Promise.resolve():t.vault.createFolder(At).catch(Mv=>{spe.warn("Failed to create vault folder",{path:At,error:String(Mv)})})).then(()=>t.vault.createBinary(`${At}/${vi}`,Va)).then(()=>{bi(Ie,Q("helper.saved"))}).catch(Cp=>{console.error("[AI3D] Save snapshot failed:",Cp),bi(Ie,Q("helper.failed"))})},Zi.onerror=()=>{console.error("[AI3D] FileReader error"),bi(Ie,Q("helper.failed"))},Zi.onabort=()=>{console.error("[AI3D] FileReader aborted"),bi(Ie,Q("helper.failed"))},Zi.readAsArrayBuffer(bn)}catch(Ae){console.error("[AI3D] Save snapshot failed:",Ae),bi(Ie,Q("helper.failed"))}});let Ze=g(p.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.downloadSnapshotLabel")}}));ln(Ze,"download-snapshot"),Ze.appendChild(Dr('')),Ze.addEventListener("click",()=>{let re=i();if(re)try{let K=re.captureSnapshot();if(!K)return;let Pe=r(),Ye=`${Zr(Pe)||"model"}_snapshot_${Date.now()}.png`,Ke=createEl("a");Ke.href=K,Ke.download=Ye,activeDocument.body.appendChild(Ke),Ke.click(),Ke.remove(),bi(Ze,Q("helper.downloaded"))}catch(K){console.error("[AI3D] Download snapshot failed:",K),bi(Ze,Q("helper.failed"))}});let Tt=g(p.createEl("button",{cls:"ai3d-inline-btn",attr:{"aria-label":Q("helper.removePreviewLabel")}}));ln(Tt,"remove-preview"),Tt.appendChild(Dr('')),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"}});ln(Xe,"toggle-annotation"),Xe.appendChild(Dr(''));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(Dr('')),$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")}),be=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(),be=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)||!be)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:be.x>1e-4?K/be.x:1,y:be.y>1e-4?Pe/be.y:1,z:be.z>1e-4?Ae/be.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(),be?(ot.value=be.x.toFixed(3),Li.value=be.y.toFixed(3),X.value=be.z.toFixed(3)):(ot.value="",Li.value="",X.value=""),bi(ye,Q("helper.calibrateResetDone")))}function Qe(re){if(!Ve.checked||!be)return;let Pe=parseFloat((re==="x"?ot:re==="y"?Li:X).value);if(!isFinite(Pe)||Pe===0)return;let Ae=be[re];if(Ae<=1e-4)return;let Ye=Pe/Ae;re!=="x"&&(ot.value=(be.x*Ye).toFixed(3)),re!=="y"&&(Li.value=(be.y*Ye).toFixed(3)),re!=="z"&&(X.value=(be.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(),be)){let K=i(),Pe=K&&xn(K)?K.getMeasurementScale():{x:1,y:1,z:1};ot.value=(be.x*Pe.x).toFixed(3),Li.value=(be.y*Pe.y).toFixed(3),X.value=(be.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=wN.get(n))==null||i.remove();let t=n.createSpan({cls:"ai3d-tooltip"});t.textContent=e,wN.set(n,t),window.setTimeout(()=>{t.remove(),wN.delete(n)},1500)}var spe,wN,FN=M(()=>{"use strict";Mn();An();up();$s();Hs();spe=Wi("helper-buttons");wN=new WeakMap});function ope(n,e,t){let i=new Promise((r,s)=>{let a=window.setTimeout(()=>{s(new BN(`Conversion did not complete within ${e}ms`))},e);n.then(()=>window.clearTimeout(a)).catch(()=>window.clearTimeout(a))});return Promise.race([n,i])}var pv,ape,BN,Lb,eq=M(()=>{"use strict";yo();An();pv=Wi("conversion-manager"),ape=3e5,BN=class extends Error{constructor(e="Conversion timed out"){super(e),this.name="ConversionTimeoutError"}};Lb=class{constructor(){this.converters=new Map;this.pending=new Map}getConverter(e){return this.converters.get(Ga(e))}registerConverter(e){pv.info("register converter",{converterId:e.id,sourceExts:[...e.sourceExts]});for(let t of e.sourceExts)this.converters.set(Ga(t),e)}canConvert(e){let t=Ga(e),i=this.converters.has(t);return pv.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=Ga(e.sourceExt),i=this.getConverter(t);if(!i)throw pv.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 pv.info("joining in-flight conversion",{key:r}),s;pv.info("dispatch conversion",{converterId:i.id,ext:t,targetExt:e.targetExt});let a=ope(i.convert({...e,sourceExt:t}),(o=e.timeoutMs)!=null?o:ape,{converterId:i.id,ext:t,targetExt:e.targetExt});this.pending.set(r,a);try{return await a}finally{this.pending.delete(r)}}}});function GN(...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 cpe(){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",...GN("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 fpe(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 hpe(...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 HN(n){try{return await hs(n,(We==null?void 0:We.platform)==="win32"?ds:Ww),!0}catch(e){return!1}}function UN(n){let e=n==null?void 0:n.trim();if(e)return e}function rq(n){return dpe.test(n)?{ok:!1,reason:"Command contains unsafe shell metacharacters."}:{ok:!0}}function upe(n,e){for(let t of[n,...e]){let i=rq(t);if(!i.ok)return i}return{ok:!0}}async function mpe(n){try{return(await Op(n)).isFile()}catch(e){return!1}}function ppe(n){let e=[],t="",i=null;for(let r=0;rr.trim().toLowerCase()).filter(Boolean);return e!=null&&e.length?e:lpe}async function Epe(n){var r;let e=(r=We==null?void 0:We.env)==null?void 0:r.PATH;if(!e)return;let t=e.split(Hw).map(s=>s.trim()).filter(Boolean),i=(We==null?void 0:We.platform)==="win32"?vpe(n):[""];for(let s of t)for(let a of i){let o=Xi(s,a?`${n}${a}`:n);if(await HN(o))return o}}function kN(n,e,t=15e3){let i=rq(n);return i.ok?new Promise((r,s)=>{da(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 VN(n,e,t,i){let r="";for(let s of t)try{return await kN(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 Spe(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 kN(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 kN(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 VN(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 VN(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 VN(e,t,[["--version"],["--help"]],/fbx2gltf|usage|help|version/i);return[{kind:"fbx2gltf-cli",ok:r.ok,detail:r.detail}]}return[]}function Tpe(n){let e=iq.find(t=>t.id===n);if(!e)throw new Error(`Unknown converter command id: ${n}`);return e}function Ape(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 tq(n,e,t){for(let i of e)if(await HN(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 xpe(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 Db(n,e,t,i){let r=_pe(e),s=upe(r.executable,r.args);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(gpe(r.executable)){let[o,l]=await Promise.all([HN(r.executable),mpe(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 ${Ob(t)} path.`:"Configured path was not found or is not executable.",checkedCandidates:[r.executable]}}let a=await Epe(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 ${Ob(t)} via PATH lookup.`:"Command name was not found on PATH.",checkedCandidates:[r.executable]}}function Ob(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 nq(n,e){var d,u,m;let t=Tpe(n),{userCandidates:i,systemCandidates:r}=Ape(t),s=UN(e);if(s)return Db(t,s,"settings",s);let a=UN((d=We==null?void 0:We.env)==null?void 0:d[t.envVar]);if(a)return Db(t,a,"env");for(let p of(u=t.envVarAliases)!=null?u:[]){let _=UN((m=We==null?void 0:We.env)==null?void 0:m[p]);if(_)return Db(t,_,"env")}let o=await tq(t,i,"Detected at a common user-managed install location.");if(o)return o;let l=[];for(let p of t.fallbackCommands){let _=await Db(t,p,"path");if(l.push(_),_.available)return _}let c=await tq(t,r,"Detected at a system fallback install location.");if(c)return c;let f=l.flatMap(p=>p.checkedCandidates),h=xpe(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 Nb(n){let e=await Promise.all(iq.map(t=>nq(t.id,n[t.settingsKey])));return Promise.all(e.map(async t=>({...t,dependencyChecks:await Spe(t)})))}async function cs(n,e){var i;let t=await nq(n,e);if(!t.available&&t.detail==="Command contains unsafe shell metacharacters.")throw new Error(`Refusing to resolve converter command '${n}': ${t.detail}`);return{command:(i=t.resolvedPath)!=null?i:t.executable,args:[...t.args]}}var We,lpe,iq,dpe,eh=M(()=>{"use strict";fr();fr();fr();We=Pv(),lpe=[".exe",".cmd",".bat",".com"];iq=[{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"?fpe("obj2gltf.cmd"):GN("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"?hpe(Xi("FBX2glTF","FBX2glTF-windows-x64.exe"),Xi("FBX2glTF","FBX2glTF.exe")):GN("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:cpe()}];dpe=/[;|&<>$`\r\n\t]/});var aq,sq=M(()=>{aq=`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 aq,sq=M(()=>{aq=`import cadquery as cq +`});var lq,oq=M(()=>{lq=`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 lq,oq=M(()=>{lq=`import cadquery as cq +`});var fq,cq=M(()=>{fq=`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 Cc(n){if(n.includes('"'))throw new Error(`File path contains double-quote character, not supported for Python conversion: ${n}`);return n.replace(/\\/g,"/")}var Pb=M(()=>{"use strict"});function cq(n){return n.toLowerCase().replace(/^\./,"")}function Epe(n){let e=cq(n);return e==="step"||e==="stp"?lq:e==="iges"||e==="igs"?aq:nq}function GN(n,e,t){return n.split(e).join(t)}function fq(n,e,t){let i=cq(t),r=GN(Epe(i),_pe,Cc(n)),s=GN(r,gpe,Cc(e));return GN(s,vpe,i)}var _pe,gpe,vpe,hq=M(()=>{"use strict";rq();sq();oq();Pb();_pe="__AI3D_SOURCE_PATH__",gpe="__AI3D_OUTPUT_PATH__",vpe="__AI3D_SOURCE_EXT__"});async function Ape(n){try{return await fs(n,hs),!0}catch(e){return!1}}function xpe(n,e,t){return new Promise((i,r)=>{ha(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 Spe,Tpe,Lb,dq=M(()=>{"use strict";cr();cr();cr();cr();An();Jf();hq();Spe=Wi("freecad-converter"),Tpe=300*1e3;Lb=class{constructor(e){this.configuredCommand=e;this.id="freecad";this.sourceExts=["step","stp","iges","igs","brep"];this.targetExt="glb"}async getCacheKey(){let e=await ls(this.id,this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!Kn(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 ls(this.id,this.configuredCommand),i=yo(e.sourcePath),r=Po(e.sourcePath,fa(e.sourcePath)),s=Xi(i,`${r}.ai3d-converted.glb`),a=Xi(wd(),"ai3d-freecad"),o=Xi(a,`${r}-${Date.now()}.py`);await Od(a,{recursive:!0}),await Dd(o,fq(e.sourcePath,s,e.sourceExt),"utf8"),Spe.info("run CAD conversion (CadQuery/OCCT)",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{await xpe(t.command,[...t.args,o],Tpe)}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{Nd(o,{force:!0})}if(!await Ape(s))throw new Error(`CAD conversion finished but output was not found: '${s}'. Check that CadQuery supports this CAD format.`);if((await ca(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 Ipe(n){try{return await fs(n,hs),!0}catch(e){return!1}}function Mpe(n,e,t){return new Promise((i,r)=>{ha(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 Rpe,bpe,Db,uq=M(()=>{"use strict";cr();cr();cr();An();Jf();Rpe=Wi("obj2gltf-converter"),bpe=180*1e3;Db=class{constructor(e){this.configuredCommand=e;this.id="obj2gltf";this.sourceExts=["obj"];this.targetExt="glb"}async getCacheKey(){let e=await ls(this.id,this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!Kn(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 ls(this.id,this.configuredCommand),i=yo(e.sourcePath),r=Po(e.sourcePath,fa(e.sourcePath)),s=Xi(i,`${r}.ai3d-converted.glb`);Rpe.info("run obj2gltf conversion",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{await Mpe(t.command,[...t.args,"-i",e.sourcePath,"-o",s,"-b"],bpe)}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 Ipe(s))throw new Error(`obj2gltf conversion finished but output was not found: '${s}'.`);if((await ca(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 Ppe(n){try{return await fs(n,hs),!0}catch(e){return!1}}function Lpe(n,e,t){return new Promise((i,r)=>{ha(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 Cpe,ype,Ob,mq=M(()=>{"use strict";cr();cr();cr();An();Jf();Cpe=Wi("fbx2gltf-converter"),ype=180*1e3;Ob=class{constructor(e){this.configuredCommand=e;this.id="fbx2gltf";this.sourceExts=["fbx"];this.targetExt="glb"}async getCacheKey(){let e=await ls(this.id,this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!Kn(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 ls(this.id,this.configuredCommand),i=yo(e.sourcePath),r=Po(e.sourcePath,fa(e.sourcePath)),s=Xi(i,`${r}.ai3d-converted.glb`);Cpe.info("run FBX2glTF conversion",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{await Lpe(t.command,[...t.args,"-i",e.sourcePath,"-o",s,"-b"],ype)}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 Ppe(s))throw new Error(`FBX2glTF conversion finished but output was not found: '${s}'.`);if((await ca(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 fs(n,hs),!0}catch(e){return!1}}function wpe(n,e,t){return new Promise((i,r)=>{ha(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 Fpe(n,e){let t=Cc(n),i=Cc(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 Dpe,Ope,Nb,pq=M(()=>{"use strict";cr();cr();cr();cr();An();Jf();Pb();Dpe=Wi("assimp-converter"),Ope=300*1e3;Nb=class{constructor(e){this.configuredCommand=e;this.id="assimp";this.sourceExts=["3mf","dae"];this.targetExt="glb"}async getCacheKey(){let e=await ls(this.id,this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!Kn(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 ls(this.id,this.configuredCommand),i=yo(e.sourcePath),r=Po(e.sourcePath,fa(e.sourcePath)),s=Xi(i,`${r}.ai3d-converted.glb`),a=Xi(wd(),"ai3d-mesh-convert"),o=Xi(a,`${r}-${Date.now()}.py`);await Od(a,{recursive:!0}),await Dd(o,Fpe(e.sourcePath,s),"utf8"),Dpe.info("run mesh conversion (trimesh)",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{await wpe(t.command,[...t.args,o],Ope)}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{Nd(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 ca(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 Upe(n){try{return await fs(n,hs),!0}catch(e){return!1}}function Vpe(n,e,t){return new Promise((i,r)=>{ha(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 Gpe(n,e){let t=Cc(n),i=Cc(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 kN,Bpe,wb,_q=M(()=>{"use strict";cr();cr();cr();cr();An();Jf();Pb();kN=Wi("sldprt-converter"),Bpe=600*1e3;wb=class{constructor(e){this.configuredCommand=e;this.id="sldprt";this.sourceExts=["sldprt"];this.targetExt="glb"}async getCacheKey(){let e=await ls("freecadcmd",this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!Kn(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 ls("freecadcmd",this.configuredCommand),i=yo(e.sourcePath),r=Po(e.sourcePath,fa(e.sourcePath)),s=Xi(i,`${r}.ai3d-converted.glb`),a=Xi(wd(),"ai3d-sldprt"),o=Xi(a,`${r}-${Date.now()}.py`);await Od(a,{recursive:!0}),await Dd(o,Gpe(e.sourcePath,s),"utf8"),kN.info("run SLDPRT conversion (FreeCAD + OCP)",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{let{stdout:c,stderr:f}=await Vpe(t.command,[...t.args,o],Bpe);c&&kN.info("FreeCAD stdout",{stdout:c.trim().slice(0,500)}),f&&kN.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{Nd(o,{force:!0})}if(!await Upe(s))throw new Error(`SLDPRT conversion finished but output was not found: '${s}'. Check that FreeCAD can import this SolidWorks file version.`);if((await ca(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 gd(n){var r;let e=new Ib,t=new Set((r=n==null?void 0:n.enabledConverterIds)!=null?r:[]);WN.debug("create conversion manager",{enabledConverterIds:[...t]});let i=[new Lb(n==null?void 0:n.freecadCommand),new Db(n==null?void 0:n.obj2gltfCommand),new Ob(n==null?void 0:n.fbx2gltfCommand),new Nb(n==null?void 0:n.assimpCommand),new wb(n==null?void 0:n.freecadcmdCommand)];for(let s of i)t.has(s.id)?(e.registerConverter(s),WN.info("enabled converter",{converterId:s.id})):WN.debug("converter disabled",{converterId:s.id});return e}var WN,Fb=M(()=>{"use strict";$j();dq();uq();mq();pq();_q();An();WN=Wi("conversion-factory")});function gq(n){let e=Ga(n.sourceExt),t=[];return e!==n.sourceExt&&t.push(`Normalized extension '${n.sourceExt}' -> '${e}'.`),kpe.debug("prepare direct load",{path:n.path,sourceExt:n.sourceExt,normalizedExt:e,warningCount:t.length}),{effectivePath:n.path,effectiveExt:e,warnings:t}}var kpe,vq=M(()=>{"use strict";Co();An();kpe=Wi("direct-load-service")});function Bb(n){return`.${n.trim().toLowerCase()}`}function mp(n){return n instanceof vd}function HN(n){var e;if(n instanceof vd){let t=(e=Wpe[n.converterId])!=null?e:n.converterId;return Ki("modelLoad.warningMessage",{ext:Bb(n.sourceExt),converterName:t})}return n instanceof up?Ki("modelLoad.mobileWarningMessage",{ext:Bb(n.sourceExt)}):Ki("modelLoad.errorMessage",{reason:n instanceof Error?n.message:String(n)})}function pp(n){return n instanceof vd?{level:"warning",title:Q("modelLoad.warningTitle"),message:HN(n),hint:Q("modelLoad.warningHint")}:n instanceof up?{level:"warning",title:Q("modelLoad.warningTitle"),message:HN(n),hint:Q("modelLoad.mobileWarningHint")}:{level:"error",title:Q("modelLoad.errorTitle"),message:HN(n),hint:Q("modelLoad.errorHint")}}var Wpe,vd,up,_p=M(()=>{"use strict";Mn();Wpe={freecad:"FreeCAD",obj2gltf:"obj2gltf",fbx2gltf:"FBX2glTF",assimp:"mesh",sldprt:"SolidWorks"};vd=class extends Error{constructor(t,i){super(`Converter '${t}' is not registered for ${Bb(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 ${Bb(t)} requires local conversion tools that are unavailable on iOS, iPadOS, and Android.`);this.sourceExt=t;this.name="MobileConversionUnavailableError"}}});function Hpe(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 zpe(n,e,t){return n.converterId!==e?!1:t?n.converterId===t.converterId&&n.converterCacheKey===t.cacheKey:!0}async function Xpe(n){if(!n)return!1;try{return await fs(n,hs),!0}catch(e){return!1}}async function Sq(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 Tq(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.`);Ed.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 Xpe(r.outputPath))Ed.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(!zpe(r,e,i))Ed.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 Sq(n.sourcePath,r.outputPath))Ed.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 Ed.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=Hpe(n.sourcePath,t);if(await Sq(n.sourcePath,s))return Ed.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 vd(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()}),Ed.info("conversion route done",{sourcePath:n.sourcePath,outputPath:a.outputPath,warningCount:a.warnings.length}),{effectivePath:a.outputPath,effectiveExt:a.outputExt,warnings:a.warnings}}var Ed,Aq=M(()=>{"use strict";r0();An();cr();_p();Ed=Wi("conversion-service")});function Ype(n,e){var t;return!!((t=n.preferConversionExts)!=null&&t.includes(e))}async function Sd(n){var a,o;let e=Ga((a=n.path.split(".").pop())!=null?a:""),t=n0(e);if(yc.info("prepare model input",{path:n.path,sourceExt:e}),!t||!t.enabled)throw yc.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=Ype(n,e);if(t.strategy==="convert"||i&&!!t.converterId){if(_r())throw yc.warn("conversion unavailable on mobile",{sourceExt:e,path:n.path}),new up(e);if(!n.absolutePath)throw yc.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 yc.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 yc.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"&&yc.info("preferred conversion route",{sourceExt:e,path:n.path,converterId:l.converterId});let c=await Tq({sourcePath:n.absolutePath,sourceExt:e,capability:l,conversionManager:n.conversionManager,convertedAssetCache:n.convertedAssetCache});return yc.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=gq({path:n.path,sourceExt:e});return yc.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 yc,Ub=M(()=>{"use strict";Co();vq();Aq();_p();An();Qs();yc=Wi("model-pipeline")});function dv(n){return{path:n.effectivePath,ext:n.effectiveExt,strategy:n.strategy,sourcePath:n.sourcePath,sourceExt:n.sourceExt,warnings:n.warnings}}var zN=M(()=>{"use strict"});function Td(n){let e=[];return n.preferObj2gltfForObj&&e.push("obj"),n.preferFbx2gltfForFbx&&e.push("fbx"),e}var Vb=M(()=>{"use strict"});function uv(n){return n.replace(/\[\[([^\]|]+)\|([^\]]+)\]\]/g,"$2").replace(/\[\[([^\]]+)\]\]/g,"$1").replace(/\[([^\]]+)\]\([^)]*\)/g,"$1").replace(/[*_~`]+/g,"").replace(/==([^=]+)==/g,"$1").replace(/\s+/g," ").trim()}function Kpe(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 Rq(n){return e=>Kpe(n,e)}async function jpe(n,e,t){try{let i=n.vault.getAbstractFileByPath(e);if(!(i instanceof xq.TFile))return null;let s=(await n.vault.cachedRead(i)).split(` -`),a=-1,o=0,l=uv(t);for(let f=0;fjpe(n,e,t)}var xq,mv=M(()=>{"use strict";xq=require("obsidian")});function Ad(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=Nw(()=>{!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 Gb=M(()=>{"use strict";Mn()});function vp(n,e){let t=n.createDiv({cls:"ai3d-inline-empty ai3d-load-feedback-shell"});_r()&&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 kb=M(()=>{"use strict";Qs()});function Mq(){return typeof performance!="undefined"?performance.now():Date.now()}function xd(n,e,t=`${e}s`){return`${n.toLocaleString()} ${n===1?e:t}`}function $pe(n){return{stage:"reason",durationMs:Math.max(0,Math.round(Mq()-n)),status:"success"}}function Jpe(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 Qpe.has(e)?e:"glb"}function YN(n){return[n.x,n.y,n.z]}function bq(n){return n.trim().replace(/[\\/:*?"<>|#[\]^]+/g,"-").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").slice(0,96)}function e_e(n,e,t,i){var c,f;let r=bq(qr(n)||"model")||"model",s=(f=(c=e.occurrenceId)!=null?c:e.componentId)!=null?f:e.partNumber,a=s?`${r}:component:${bq(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 pv(n){return(n!=null?n:"").toLowerCase().replace(/[_\-./\\]+/g," ").replace(/[^\p{L}\p{N}\s]+/gu," ").replace(/\s+/g," ").trim()}function Wb(n){return new Set(pv(n).split(" ").filter(e=>e.length>=2))}function Iq(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 t_e(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 i_e(n,e){let t=pv(n),i=pv(e);return!!t&&!!i&&t===i}function XN(n,e){let t=pv(n),i=pv(e);return!!t&&!!i&&t===i}function r_e(n,e){let t=Wb(n.name),i=Wb(n.meshRefs.join(" "));return e.filter(s=>s.assetId!==n.assetId||s.partId!==n.partId).flatMap(s=>{let a=[],o=Iq(t,Wb(s.name)),l=Iq(i,Wb(s.meshRefs.join(" "))),c=t_e(n.bbox,s.bbox),f=!!n.category&&!!s.category&&n.category===s.category,h=i_e(n.materialName,s.materialName),d=XN(n.componentId,s.componentId),u=XN(n.partNumber,s.partNumber),m=XN(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,qpe)}function n_e(n,e){return e.length===0?n.map(t=>({...t})):n.map(t=>{let i=r_e(t,e);return i.length>0?{...t,registeredMatches:i}:{...t}})}function s_e(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 a_e(n){var t,i,r,s,a,o;let e=[];return n.source==="group"&&e.push(`Registered from model group with ${xd((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 ${xd((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(`${xd(n.triangleCount,"triangle")} and ${xd(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 KN(n,e){let t=new Set;return e.map((i,r)=>{var s;return{partId:e_e(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:s_e(i),meshRefs:(s=i.meshNames)!=null&&s.length?[...i.meshNames]:[i.name||`mesh-${r+1}`],childCount:i.childCount,materialRefs:i.materialName?[i.materialName]:[],bbox:YN(i.boundingSize),center:YN(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:a_e(i),inferredFunctions:[],knowledgeTags:[],reviewed:!1}})}function o_e(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:`${xd(a.meshCount,"mesh")}, ${xd(a.triangleCount,"triangle")}, ${xd(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 l_e(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=Jpe(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 f_e(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 Hb(n){var f,h,d,u,m,p,_,g,v,x;let e=(f=n.startedAt)!=null?f:Mq(),t=(d=(h=n.evidence)==null?void 0:h.summary)!=null?d:n.preview,i=n_e(KN(n.modelPath,(m=(u=n.evidence)==null?void 0:u.parts)!=null?m:[]),(p=n.registeredParts)!=null?p:[]),r=new Date().toISOString(),s=f_e(n.preview,n.evidence),a=l_e(n.profile,i),o=o_e(n.modelPath,n.profile,n.evidence,i,a),l=(_=n.previewImages)!=null?_:[],c=c_e({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?YN(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"},$pe(e)]}}var Sp,qpe,Zpe,Qpe,jN=M(()=>{"use strict";Ws();Sp="local-evidence-v1",qpe=3,Zpe=.58,Qpe=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");wq(n,{label:Ki(Dq[e],{model:ds(t)||Q("workbench.modelTitle"),shortcuts:i}),shortcutKeys:d_e,shortcutHint:i})}function Oq(n){let e=Q("previewCanvas.gridShortcuts");wq(n,{label:Ki(Dq.grid,{shortcuts:e}),shortcutKeys:u_e,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"&&(xn(i)&&i.toggleMeasurement(),t.preventDefault())})}function Nq(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 wq(n,e){m_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 m_e(n){if(Lq(n),Pq.has(n)||typeof MutationObserver=="undefined")return;Pq.add(n),new MutationObserver(()=>Lq(n)).observe(n,{attributes:!0,attributeFilter:["tabindex"]})}function Lq(n){n.tabIndex!==0&&(n.tabIndex=0),n.getAttribute("tabindex")!=="0"&&n.setAttribute("tabindex","0")}var d_e,u_e,Pq,Dq,zb=M(()=>{"use strict";Mn();dp();Ws();d_e=["R","W","G","B","M","Space"],u_e=["R","W"],Pq=new WeakSet,Dq={inline:"previewCanvas.inlineLabel",grid:"previewCanvas.gridLabel","live-preview":"previewCanvas.liveLabel","direct-view":"previewCanvas.directLabel"}});function Rd(n){let e=n.trim();return e.length>kq?Di(e.slice(0,kq))+"\u2026":Di(e)}function Wq(n){if(!n||typeof n!="object")return null;let e=n,t=typeof e.summary=="string"?e.summary.trim():"",i=Rd(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=Rd(c),d=Rd(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=>Rd(o)):void 0,a=Array.isArray(e.warnings)?e.warnings.filter(o=>typeof o=="string"&&o.trim().length>0).map(o=>Rd(o)):void 0;return{title:typeof e.title=="string"?Rd(e.title):void 0,summary:i,sections:r,suggestedTags:s,warnings:a,model:typeof e.model=="string"?Rd(e.model):void 0}}var kq,Hq=M(()=>{"use strict";eT();kq=8e3});function S_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 T_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 x_e(n,e){let t=e;return n.sendPreviewImagesToRemote||(t=T_e(t)),n.sendGeometrySummaryToRemote||(t=A_e(t)),{...t,evidence:{...t.evidence,rawModelIncluded:!1}}}function Xq(n,e,t){if(n.analysisMode==="local")return{enabled:!1,reason:"analysisMode=local"};let i=S_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:x_e(n,e)}}:{enabled:!1,reason:"drafting input is unavailable"}}function R_e(n){return Number.isFinite(n)&&Number(n)>0?Math.floor(Number(n)):E_e}async function b_e(n,e,t){let i=null,r=new Promise((s,a)=>{i=window.setTimeout(()=>{a(new qN(e,t))},e)});try{return await Promise.race([n,r])}finally{i!==null&&window.clearTimeout(i)}}async function Yq(n,e={}){if(!n.enabled||!n.endpoint||!n.request)return null;let t=R_e(e.timeoutMs),i=await b_e((0,zq.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 Wq(i.json)}var zq,E_e,qN,Kq=M(()=>{"use strict";zq=require("obsidian");Hq();E_e=15e3,qN=class extends Error{constructor(e,t){super(`Remote draft request timed out after ${e}ms: ${t}`),this.name="RemoteDraftTimeoutError"}}});var Yb={};tt(Yb,{buildKnowledgeIndexContent:()=>fZ,buildKnowledgeIndexManagedSection:()=>sw,buildKnowledgeNoteContent:()=>sZ,collectRegisteredPartsFromProfiles:()=>lZ,generateKnowledgeNote:()=>tge,replaceManagedSection:()=>cZ});function ZN(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 Jq(n){var t;let e=(t=n.split(".").pop())==null?void 0:t.trim().toLowerCase();return e&&e.length>0?e:"unknown"}function ew(n){return n.filter(e=>e.length>0).join(", ")}function QN(n){return Array.from(new Set(n.map(e=>e.trim()).filter(Boolean)))}function rw(n){return n.replace(/\\/g,"/").replace(/^\/+|\/+$/g,"").trim()}function tw(n,e){return n.replace(/[\\/:*?"<>|#[\]^]/g," ").replace(/\s+/g," ").trim().slice(0,80)||e}function iw(n){var e;return(e=n==null?void 0:n.map(t=>t.toFixed(2)).join(", "))!=null?e:"-"}function M_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 eZ(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 C_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 tZ(n){var t;let e=[];if(n.headingRef&&e.push(`heading: ${Di(n.headingRef)}`),n.notePath){let i=(t=ds(n.notePath))!=null?t:n.notePath;e.push(`note: [[${n.notePath}|${i}]]`)}return e}function y_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 iZ(n){let[e,t,i]=y_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 rZ(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 P_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: ${ew(e)}.`}function jq(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 L_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.",jq(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.`,rZ(n),iZ(n),jq(e)],i=P_e(e);return i&&t.push(i),t}function D_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=tZ(r),a=s.length>0?` (${s.join("; ")})`:"";t.push(`- **${Di(r.label||"Untitled pin")}**${a}`)}return t.push(""),t}function O_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(`| ${oa(s.label)} | ${oa((r=s.nearestPartName)!=null?r:"-")} | ${oa(a)} | ${s.distance===void 0?"-":s.distance.toFixed(3)} | ${Math.round(s.confidence*100)}% |`)}return t.push(""),t}function N_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,Qq)){let l=Di((s=ds((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 w_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 F_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 nZ(n){var _,g,v,x,T,E,S,R,I;let e=Jq(n.sourcePath).toUpperCase(),t=n.preview,i=[...(g=(_=n.analysis)==null?void 0:_.parts)!=null?g:[]].sort((C,y)=>{var L,O;return((L=y.triangleCount)!=null?L: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=QN(i.map(C=>{var y;return(y=C.category)!=null?y:"unclassified"})).slice(0,6),o=QN(i.flatMap(C=>C.materialName?[Di(C.materialName)]:[])).slice(0,6),l=w_e(i),c=F_e(i),f=t?iZ(t):"Geometry statistics are not available yet, so this draft should stay provisional.",h=t?rZ(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),L=y!=null&&y.nearestPartName?` Nearest captured part: ${Di(y.nearestPartName)}.`:"",O=C.headingRef?` Linked heading: ${Di(C.headingRef)}.`:"";return`- ${Di(C.label||"Untitled pin")}.${L}${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: ${ew(a)}.`:"No part categories were inferred yet.",o.length>0?`Visible materials include ${ew(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:QN([...(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 B_e(n){var i,r;let e=(r=(i=n.analysis)==null?void 0:i.localDraft)!=null?r:nZ(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 U_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 V_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 G_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 k_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 W_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=iw(l.center),f=l.observations.slice(0,2).join(" "),h=l.notePath?`[[${l.notePath}]]`:"-",d=eZ(l);t.push(`| ${o+1} | ${oa(l.name)} | ${oa(h)} | ${oa(d)} | ${oa((r=l.category)!=null?r:"unclassified")} | ${((s=l.triangleCount)!=null?s:0).toLocaleString()} | ${oa((a=l.materialName)!=null?a:"-")} | ${c} | ${oa(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(`| ${oa(s.name)} | ${oa(o)} | ${oa(a.sourceAssetId)} | ${Math.round(a.confidence*100)}% | ${oa(a.reasons.join(", "))} |`)}return e.length>32&&t.push(`| ... | ${e.length-32} more matched parts omitted | - | - | See sidecar JSON |`),t.push(""),t}function z_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 X_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 Y_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=tZ(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 sZ(n){var c,f,h,d;let e=n.profile,t=n.preview,i=n.analysis,r=Jq(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: ${Sp}`,`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?[...W3(t,{decimals:2}),""]:["(No preview data available)",""],...G_e(i),...B_e(n),...n.knowledgeIndexPath?["## Knowledge Index","",`- [[${n.knowledgeIndexPath}|Open model knowledge index]]`,""]:[],"## Local Observations","",...L_e(t,e).map(u=>`- ${u}`),"",...X_e(i,n.analysisSidecarPath),...k_e(i),...D_e(e),...O_e(i),...N_e(i),...W_e(i),...H_e(i),...z_e(i),...U_e(i),...V_e(i),...Y_e(t,e),"## Review Notes","",(d=e==null?void 0:e.notes)!=null&&d.trim()?Di(e.notes.trim()):"-",""].join(` -`)}function oa(n){return Di(n).replace(/\|/g,"\\|").replace(/\r?\n/g," ")}function K_e(n){let[,e=""]=n.split(",",2),t=atob(e),i=new Uint8Array(t.length);for(let r=0;r{I_e.warn("Failed to create vault folder",{path:i,error:String(s)})})}async function aZ(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 qq(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 j_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 nw(n,t);let a=`${t}/${i}_evidence_${Date.now()}.png`;return await n.vault.createBinary(a,K_e(r)),{paths:[a]}}catch(a){let o=a instanceof Error?a.message:String(a);return{paths:[],warning:`Evidence snapshot failed: ${o}`}}}function oZ(n){return!!n&&typeof n=="object"}function _v(n){return Array.isArray(n)?n.filter(e=>typeof e=="string"):[]}function Zq(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 q_e(n,e){if(!oZ(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:_v(n.meshRefs),childCount:Number.isFinite(n.childCount)?Number(n.childCount):void 0,materialRefs:_v(n.materialRefs),bbox:Zq(n.bbox),center:Zq(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:_v(n.observations),inferredFunctions:_v(n.inferredFunctions),knowledgeTags:_v(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 lZ(n,e,t){var a;let i=[],r=new Set,s=(o,l)=>{let c=q_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(oZ(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 Z_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,Qq).map(i=>i.partId))}function Q_e(n,e,t,i){let r=rw(n)||"Parts/3D Components",s=tw(e,"model"),a=tw(t.name,`Part ${i+1}`);return`${r}/${s}/${String(i+1).padStart(2,"0")} ${a}.md`}function $_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: ${eZ(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: ${M_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: ${iw(n.part.bbox)}`,`- Center: ${iw(n.part.center)}`,...(l=n.part.registeredMatches)!=null&&l.length?[`- Possible registered match: ${C_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 J_e(n){var a;let e=Z_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=`${rw(n.partFolder)||"Parts/3D Components"}/${tw(n.baseName,"model")}`;await nw(n.app,s);for(let[o,l]of n.analysis.parts.entries()){if(!e.has(l.partId))continue;let c=Q_e(n.partFolder,n.baseName,l,o),f={...l,notePath:c},h=$_e({baseName:n.baseName,notePath:n.notePath,sourcePath:n.sourcePath,part:f,analysis:n.analysis}),d=await aZ(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 sw(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[$q,"","## 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."],"",JN,""].join(` -`)}function cZ(n,e){let t=n.indexOf($q),i=n.indexOf(JN);if(t>=0&&i>t){let r=n.slice(0,t).replace(/\s+$/,""),s=n.slice(i+JN.length).replace(/^\s+/,"");return[r,e.trim(),s].filter(Boolean).join(` +`});function Pc(n){if(n.includes('"'))throw new Error(`File path contains double-quote character, not supported for Python conversion: ${n}`);return n.replace(/\\/g,"/")}var wb=M(()=>{"use strict"});function hq(n){return n.toLowerCase().replace(/^\./,"")}function Ppe(n){let e=hq(n);return e==="step"||e==="stp"?fq:e==="iges"||e==="igs"?lq:aq}function zN(n,e,t){return n.split(e).join(t)}function dq(n,e,t){let i=hq(t),r=zN(Ppe(i),Mpe,Pc(n)),s=zN(r,Cpe,Pc(e));return zN(s,ype,i)}var Mpe,Cpe,ype,uq=M(()=>{"use strict";sq();oq();cq();wb();Mpe="__AI3D_SOURCE_PATH__",Cpe="__AI3D_OUTPUT_PATH__",ype="__AI3D_SOURCE_EXT__"});async function Ope(n){try{return await hs(n,ds),!0}catch(e){return!1}}function Npe(n,e,t){return new Promise((i,r)=>{da(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 Lpe,Dpe,Fb,mq=M(()=>{"use strict";fr();fr();fr();fr();An();eh();uq();Lpe=Wi("freecad-converter"),Dpe=300*1e3;Fb=class{constructor(e){this.configuredCommand=e;this.id="freecad";this.sourceExts=["step","stp","iges","igs","brep"];this.targetExt="glb"}async getCacheKey(){let e=await cs(this.id,this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!jn(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 cs(this.id,this.configuredCommand),i=Po(e.sourcePath),r=Lo(e.sourcePath,ha(e.sourcePath)),s=Xi(i,`${r}.ai3d-converted.glb`),a=Xi(Bd(),"ai3d-freecad"),o=Xi(a,`${r}-${Date.now()}.py`);await wd(a,{recursive:!0}),await Nd(o,dq(e.sourcePath,s,e.sourceExt),"utf8"),Lpe.info("run CAD conversion (CadQuery/OCCT)",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{await Npe(t.command,[...t.args,o],Dpe)}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{Fd(o,{force:!0})}if(!await Ope(s))throw new Error(`CAD conversion finished but output was not found: '${s}'. Check that CadQuery supports this CAD format.`);if((await fa(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 Bpe(n){try{return await hs(n,ds),!0}catch(e){return!1}}function Upe(n,e,t){return new Promise((i,r)=>{da(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 wpe,Fpe,Bb,pq=M(()=>{"use strict";fr();fr();fr();An();eh();wpe=Wi("obj2gltf-converter"),Fpe=180*1e3;Bb=class{constructor(e){this.configuredCommand=e;this.id="obj2gltf";this.sourceExts=["obj"];this.targetExt="glb"}async getCacheKey(){let e=await cs(this.id,this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!jn(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 cs(this.id,this.configuredCommand),i=Po(e.sourcePath),r=Lo(e.sourcePath,ha(e.sourcePath)),s=Xi(i,`${r}.ai3d-converted.glb`);wpe.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"],Fpe)}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 Bpe(s))throw new Error(`obj2gltf conversion finished but output was not found: '${s}'.`);if((await fa(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 kpe(n){try{return await hs(n,ds),!0}catch(e){return!1}}function Wpe(n,e,t){return new Promise((i,r)=>{da(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 Vpe,Gpe,Ub,_q=M(()=>{"use strict";fr();fr();fr();An();eh();Vpe=Wi("fbx2gltf-converter"),Gpe=180*1e3;Ub=class{constructor(e){this.configuredCommand=e;this.id="fbx2gltf";this.sourceExts=["fbx"];this.targetExt="glb"}async getCacheKey(){let e=await cs(this.id,this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!jn(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 cs(this.id,this.configuredCommand),i=Po(e.sourcePath),r=Lo(e.sourcePath,ha(e.sourcePath)),s=Xi(i,`${r}.ai3d-converted.glb`);Vpe.info("run FBX2glTF conversion",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{await Wpe(t.command,[...t.args,"-i",e.sourcePath,"-o",s,"-b"],Gpe)}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 kpe(s))throw new Error(`FBX2glTF conversion finished but output was not found: '${s}'.`);if((await fa(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 Xpe(n){try{return await hs(n,ds),!0}catch(e){return!1}}function Ype(n,e,t){return new Promise((i,r)=>{da(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 Kpe(n,e){let t=Pc(n),i=Pc(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 Hpe,zpe,Vb,gq=M(()=>{"use strict";fr();fr();fr();fr();An();eh();wb();Hpe=Wi("assimp-converter"),zpe=300*1e3;Vb=class{constructor(e){this.configuredCommand=e;this.id="assimp";this.sourceExts=["3mf","dae"];this.targetExt="glb"}async getCacheKey(){let e=await cs(this.id,this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!jn(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 cs(this.id,this.configuredCommand),i=Po(e.sourcePath),r=Lo(e.sourcePath,ha(e.sourcePath)),s=Xi(i,`${r}.ai3d-converted.glb`),a=Xi(Bd(),"ai3d-mesh-convert"),o=Xi(a,`${r}-${Date.now()}.py`);await wd(a,{recursive:!0}),await Nd(o,Kpe(e.sourcePath,s),"utf8"),Hpe.info("run mesh conversion (trimesh)",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{await Ype(t.command,[...t.args,o],zpe)}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{Fd(o,{force:!0})}if(!await Xpe(s))throw new Error(`Mesh conversion finished but output was not found: '${s}'. Check that trimesh supports this format.`);if((await fa(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 qpe(n){try{return await hs(n,ds),!0}catch(e){return!1}}function Zpe(n,e,t){return new Promise((i,r)=>{da(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 Qpe(n,e){let t=Pc(n),i=Pc(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 XN,jpe,Gb,vq=M(()=>{"use strict";fr();fr();fr();fr();An();eh();wb();XN=Wi("sldprt-converter"),jpe=600*1e3;Gb=class{constructor(e){this.configuredCommand=e;this.id="sldprt";this.sourceExts=["sldprt"];this.targetExt="glb"}async getCacheKey(){let e=await cs("freecadcmd",this.configuredCommand);return`${this.id}:${e.command} ${e.args.join(" ")}`.trim()}async convert(e){if(!jn(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 cs("freecadcmd",this.configuredCommand),i=Po(e.sourcePath),r=Lo(e.sourcePath,ha(e.sourcePath)),s=Xi(i,`${r}.ai3d-converted.glb`),a=Xi(Bd(),"ai3d-sldprt"),o=Xi(a,`${r}-${Date.now()}.py`);await wd(a,{recursive:!0}),await Nd(o,Qpe(e.sourcePath,s),"utf8"),XN.info("run SLDPRT conversion (FreeCAD + OCP)",{sourcePath:e.sourcePath,outputPath:s,command:t.command,args:t.args});try{let{stdout:c,stderr:f}=await Zpe(t.command,[...t.args,o],jpe);c&&XN.info("FreeCAD stdout",{stdout:c.trim().slice(0,500)}),f&&XN.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{Fd(o,{force:!0})}if(!await qpe(s))throw new Error(`SLDPRT conversion finished but output was not found: '${s}'. Check that FreeCAD can import this SolidWorks file version.`);if((await fa(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 Sd(n){var r;let e=new Lb,t=new Set((r=n==null?void 0:n.enabledConverterIds)!=null?r:[]);YN.debug("create conversion manager",{enabledConverterIds:[...t]});let i=[new Fb(n==null?void 0:n.freecadCommand),new Bb(n==null?void 0:n.obj2gltfCommand),new Ub(n==null?void 0:n.fbx2gltfCommand),new Vb(n==null?void 0:n.assimpCommand),new Gb(n==null?void 0:n.freecadcmdCommand)];for(let s of i)t.has(s.id)?(e.registerConverter(s),YN.info("enabled converter",{converterId:s.id})):YN.debug("converter disabled",{converterId:s.id});return e}var YN,kb=M(()=>{"use strict";eq();mq();pq();_q();gq();vq();An();YN=Wi("conversion-factory")});function Eq(n){let e=Ga(n.sourceExt),t=[];return e!==n.sourceExt&&t.push(`Normalized extension '${n.sourceExt}' -> '${e}'.`),$pe.debug("prepare direct load",{path:n.path,sourceExt:n.sourceExt,normalizedExt:e,warningCount:t.length}),{effectivePath:n.path,effectiveExt:e,warnings:t}}var $pe,Sq=M(()=>{"use strict";yo();An();$pe=Wi("direct-load-service")});function Wb(n){return`.${n.trim().toLowerCase()}`}function pp(n){return n instanceof Td}function KN(n){var e;if(n instanceof Td){let t=(e=Jpe[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 Td?{level:"warning",title:Q("modelLoad.warningTitle"),message:KN(n),hint:Q("modelLoad.warningHint")}:n instanceof mp?{level:"warning",title:Q("modelLoad.warningTitle"),message:KN(n),hint:Q("modelLoad.mobileWarningHint")}:{level:"error",title:Q("modelLoad.errorTitle"),message:KN(n),hint:Q("modelLoad.errorHint")}}var Jpe,Td,mp,gp=M(()=>{"use strict";Mn();Jpe={freecad:"FreeCAD",obj2gltf:"obj2gltf",fbx2gltf:"FBX2glTF",assimp:"mesh",sldprt:"SolidWorks"};Td=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 e_e(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 t_e(n,e,t){return n.converterId!==e?!1:t?n.converterId===t.converterId&&n.converterCacheKey===t.cacheKey:!0}async function i_e(n){if(!n)return!1;try{return await hs(n,ds),!0}catch(e){return!1}}async function Aq(n,e){if(!e)return!1;try{let[t,i]=await Promise.all([Op(n),Op(e)]);return i.size>0&&i.mtimeMs>=t.mtimeMs}catch(t){return!1}}async function xq(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.`);Ad.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 i_e(r.outputPath))Ad.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(!t_e(r,e,i))Ad.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 Aq(n.sourcePath,r.outputPath))Ad.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 Ad.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=e_e(n.sourcePath,t);if(await Aq(n.sourcePath,s))return Ad.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 Td(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()}),Ad.info("conversion route done",{sourcePath:n.sourcePath,outputPath:a.outputPath,warningCount:a.warnings.length}),{effectivePath:a.outputPath,effectiveExt:a.outputExt,warnings:a.warnings}}var Ad,Rq=M(()=>{"use strict";l0();An();fr();gp();Ad=Wi("conversion-service")});function r_e(n,e){var t;return!!((t=n.preferConversionExts)!=null&&t.includes(e))}async function xd(n){var a,o;let e=Ga((a=n.path.split(".").pop())!=null?a:""),t=c0(e);if(Lc.info("prepare model input",{path:n.path,sourceExt:e}),!t||!t.enabled)throw Lc.warn("unsupported format",{sourceExt:e,path:n.path}),yp(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=r_e(n,e);if(t.strategy==="convert"||i&&!!t.converterId){if(gr())throw Lc.warn("conversion unavailable on mobile",{sourceExt:e,path:n.path}),new mp(e);if(!n.absolutePath)throw Lc.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 Lc.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 Lc.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"&&Lc.info("preferred conversion route",{sourceExt:e,path:n.path,converterId:l.converterId});let c=await xq({sourcePath:n.absolutePath,sourceExt:e,capability:l,conversionManager:n.conversionManager,convertedAssetCache:n.convertedAssetCache});return Lc.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=Eq({path:n.path,sourceExt:e});return Lc.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 Lc,Hb=M(()=>{"use strict";yo();Sq();Rq();gp();An();$s();Lc=Wi("model-pipeline")});function _v(n){return{path:n.effectivePath,ext:n.effectiveExt,strategy:n.strategy,sourcePath:n.sourcePath,sourceExt:n.sourceExt,warnings:n.warnings}}var jN=M(()=>{"use strict"});function Rd(n){let e=[];return n.preferObj2gltfForObj&&e.push("obj"),n.preferFbx2gltfForFbx&&e.push("fbx"),e}var zb=M(()=>{"use strict"});function gv(n){return n.replace(/\[\[([^\]|]+)\|([^\]]+)\]\]/g,"$2").replace(/\[\[([^\]]+)\]\]/g,"$1").replace(/\[([^\]]+)\]\([^)]*\)/g,"$1").replace(/[*_~`]+/g,"").replace(/==([^=]+)==/g,"$1").replace(/\s+/g," ").trim()}function n_e(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 Iq(n){return e=>n_e(n,e)}async function s_e(n,e,t){try{let i=n.vault.getAbstractFileByPath(e);if(!(i instanceof bq.TFile))return null;let s=(await n.vault.cachedRead(i)).split(` +`),a=-1,o=0,l=gv(t);for(let f=0;fs_e(n,e,t)}var bq,vv=M(()=>{"use strict";bq=require("obsidian")});function bd(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=Uw(()=>{!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 Xb=M(()=>{"use strict";Mn()});function Ep(n,e){let t=n.createDiv({cls:"ai3d-inline-empty ai3d-load-feedback-shell"});gr()&&t.classList.add("is-mobile");let i=t.createDiv({cls:`ai3d-load-feedback is-${e.level}`});return i.createDiv({cls:"ai3d-load-feedback-title",text:e.title}),i.createDiv({cls:"ai3d-load-feedback-message",text:e.message}),i.createDiv({cls:"ai3d-load-feedback-hint",text:e.hint}),t}function 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 Yb=M(()=>{"use strict";$s()});function yq(){return typeof performance!="undefined"?performance.now():Date.now()}function th(n,e,t=`${e}s`){return`${n.toLocaleString()} ${n===1?e:t}`}function c_e(n){return{stage:"reason",durationMs:Math.max(0,Math.round(yq()-n)),status:"success"}}function f_e(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 Pq(n){var t;let e=(t=n.split(".").pop())==null?void 0:t.trim().toLowerCase();return l_e.has(e)?e:"glb"}function ZN(n){return[n.x,n.y,n.z]}function Mq(n){return n.trim().replace(/[\\/:*?"<>|#[\]^]+/g,"-").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").slice(0,96)}function h_e(n,e,t,i){var c,f;let r=Mq(Zr(n)||"model")||"model",s=(f=(c=e.occurrenceId)!=null?c:e.componentId)!=null?f:e.partNumber,a=s?`${r}:component:${Mq(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 Ev(n){return(n!=null?n:"").toLowerCase().replace(/[_\-./\\]+/g," ").replace(/[^\p{L}\p{N}\s]+/gu," ").replace(/\s+/g," ").trim()}function Kb(n){return new Set(Ev(n).split(" ").filter(e=>e.length>=2))}function Cq(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 d_e(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 u_e(n,e){let t=Ev(n),i=Ev(e);return!!t&&!!i&&t===i}function qN(n,e){let t=Ev(n),i=Ev(e);return!!t&&!!i&&t===i}function m_e(n,e){let t=Kb(n.name),i=Kb(n.meshRefs.join(" "));return e.filter(s=>s.assetId!==n.assetId||s.partId!==n.partId).flatMap(s=>{let a=[],o=Cq(t,Kb(s.name)),l=Cq(i,Kb(s.meshRefs.join(" "))),c=d_e(n.bbox,s.bbox),f=!!n.category&&!!s.category&&n.category===s.category,h=u_e(n.materialName,s.materialName),d=qN(n.componentId,s.componentId),u=qN(n.partNumber,s.partNumber),m=qN(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,a_e)}function p_e(n,e){return e.length===0?n.map(t=>({...t})):n.map(t=>{let i=m_e(t,e);return i.length>0?{...t,registeredMatches:i}:{...t}})}function __e(n){var t;let e=n.name.toLowerCase();return n.source==="component"?"component":n.source==="group"?"group":n.source==="detail-cluster"?"detail-cluster":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 g_e(n){var t,i,r,s,a,o,l,c,f;let e=[];return n.source==="group"&&e.push(`Registered from model group with ${th((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 ${th((o=(a=n.childCount)!=null?a:(s=n.meshNames)==null?void 0:s.length)!=null?o:1,"child mesh","child meshes")}.`),n.source==="detail-cluster"&&e.push(`Merged from ${th((f=(c=n.childCount)!=null?c:(l=n.meshNames)==null?void 0:l.length)!=null?f:0,"generic tiny mesh","generic tiny meshes")} to avoid over-splitting renderer fragments.`),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(`${th(n.triangleCount,"triangle")} and ${th(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 v_e(n){return n.source==="component"?.82:n.source==="group"?.72:n.source==="detail-cluster"?.48:n.name?.55:.35}function QN(n,e){let t=new Set;return e.map((i,r)=>{var s;return{partId:h_e(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:__e(i),meshRefs:(s=i.meshNames)!=null&&s.length?[...i.meshNames]:[i.name||`mesh-${r+1}`],childCount:i.childCount,materialRefs:i.materialName?[i.materialName]:[],bbox:ZN(i.boundingSize),center:ZN(i.center),triangleCount:i.triangleCount,vertexCount:i.vertexCount,materialName:i.materialName,confidence:v_e(i),observations:g_e(i),inferredFunctions:[],knowledgeTags:[],reviewed:!1}})}function E_e(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:`${th(a.meshCount,"mesh")}, ${th(a.triangleCount,"triangle")}, ${th(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 S_e(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=f_e(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 A_e(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 jb(n){var f,h,d,u,m,p,_,g,v,x;let e=(f=n.startedAt)!=null?f:yq(),t=(d=(h=n.evidence)==null?void 0:h.summary)!=null?d:n.preview,i=p_e(QN(n.modelPath,(m=(u=n.evidence)==null?void 0:u.parts)!=null?m:[]),(p=n.registeredParts)!=null?p:[]),r=new Date().toISOString(),s=A_e(n.preview,n.evidence),a=S_e(n.profile,i),o=E_e(n.modelPath,n.profile,n.evidence,i,a),l=(_=n.previewImages)!=null?_:[],c=T_e({modelPath:n.modelPath,profile:n.profile,preview:t,parts:i,knowledgeNodes:o,annotationLinks:a,previewImages:l,warnings:s});return{asset:{assetId:n.modelPath,title:Zr(n.modelPath)||n.modelPath,sourcePath:n.modelPath,format:Pq(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?ZN(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"},c_e(e)]}}var Tp,a_e,o_e,l_e,$N=M(()=>{"use strict";Hs();Tp="local-evidence-v1",a_e=3,o_e=.58,l_e=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");Bq(n,{label:Ki(Nq[e],{model:us(t)||Q("workbench.modelTitle"),shortcuts:i}),shortcutKeys:R_e,shortcutHint:i})}function wq(n){let e=Q("previewCanvas.gridShortcuts");Bq(n,{label:Ki(Nq.grid,{shortcuts:e}),shortcutKeys:b_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 Fq(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 Bq(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(Oq(n),Dq.has(n)||typeof MutationObserver=="undefined")return;Dq.add(n),new MutationObserver(()=>Oq(n)).observe(n,{attributes:!0,attributeFilter:["tabindex"]})}function Oq(n){n.tabIndex!==0&&(n.tabIndex=0),n.getAttribute("tabindex")!=="0"&&n.setAttribute("tabindex","0")}var R_e,b_e,Dq,Nq,qb=M(()=>{"use strict";Mn();up();Hs();R_e=["R","W","G","B","M","Space"],b_e=["R","W"],Dq=new WeakSet,Nq={inline:"previewCanvas.inlineLabel",grid:"previewCanvas.gridLabel","live-preview":"previewCanvas.liveLabel","direct-view":"previewCanvas.directLabel"}});function Id(n){let e=n.trim();return e.length>Hq?Di(e.slice(0,Hq))+"\u2026":Di(e)}function zq(n){if(!n||typeof n!="object")return null;let e=n,t=typeof e.summary=="string"?e.summary.trim():"",i=Id(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=Id(c),d=Id(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=>Id(o)):void 0,a=Array.isArray(e.warnings)?e.warnings.filter(o=>typeof o=="string"&&o.trim().length>0).map(o=>Id(o)):void 0;return{title:typeof e.title=="string"?Id(e.title):void 0,summary:i,sections:r,suggestedTags:s,warnings:a,model:typeof e.model=="string"?Id(e.model):void 0}}var Hq,Xq=M(()=>{"use strict";sT();Hq=8e3});function D_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 O_e(n){return{...n,evidence:{...n.evidence,previewImages:[]}}}function N_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 w_e(n,e){let t=e;return n.sendPreviewImagesToRemote||(t=O_e(t)),n.sendGeometrySummaryToRemote||(t=N_e(t)),{...t,evidence:{...t.evidence,rawModelIncluded:!1}}}function Kq(n,e,t){if(n.analysisMode==="local")return{enabled:!1,reason:"analysisMode=local"};let i=D_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:w_e(n,e)}}:{enabled:!1,reason:"drafting input is unavailable"}}function F_e(n){return Number.isFinite(n)&&Number(n)>0?Math.floor(Number(n)):L_e}async function B_e(n,e,t){let i=null,r=new Promise((s,a)=>{i=window.setTimeout(()=>{a(new JN(e,t))},e)});try{return await Promise.race([n,r])}finally{i!==null&&window.clearTimeout(i)}}async function jq(n,e={}){if(!n.enabled||!n.endpoint||!n.request)return null;let t=F_e(e.timeoutMs),i=await B_e((0,Yq.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 zq(i.json)}var Yq,L_e,JN,qq=M(()=>{"use strict";Yq=require("obsidian");Xq();L_e=15e3,JN=class extends Error{constructor(e,t){super(`Remote draft request timed out after ${e}ms: ${t}`),this.name="RemoteDraftTimeoutError"}}});var Qb={};tt(Qb,{buildKnowledgeIndexContent:()=>dZ,buildKnowledgeIndexManagedSection:()=>cw,buildKnowledgeNoteContent:()=>oZ,collectRegisteredPartsFromProfiles:()=>fZ,generateKnowledgeNote:()=>mge,replaceManagedSection:()=>hZ});function ew(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 tZ(n){var t;let e=(t=n.split(".").pop())==null?void 0:t.trim().toLowerCase();return e&&e.length>0?e:"unknown"}function nw(n){return n.filter(e=>e.length>0).join(", ")}function tw(n){return Array.from(new Set(n.map(e=>e.trim()).filter(Boolean)))}function ow(n){return n.replace(/\\/g,"/").replace(/^\/+|\/+$/g,"").trim()}function sw(n,e){return n.replace(/[\\/:*?"<>|#[\]^]/g," ").replace(/\s+/g," ").trim().slice(0,80)||e}function aw(n){var e;return(e=n==null?void 0:n.map(t=>t.toFixed(2)).join(", "))!=null?e:"-"}function V_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 iZ(n){var e,t;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})`:n.source==="detail-cluster"?`detail cluster (${(t=n.childCount)!=null?t:n.meshRefs.length})`:"mesh"}function G_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 rZ(n){var t;let e=[];if(n.headingRef&&e.push(`heading: ${Di(n.headingRef)}`),n.notePath){let i=(t=us(n.notePath))!=null?t:n.notePath;e.push(`note: [[${n.notePath}|${i}]]`)}return e}function k_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 nZ(n){let[e,t,i]=k_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 sZ(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 W_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: ${nw(e)}.`}function Zq(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 H_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.",Zq(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.`,sZ(n),nZ(n),Zq(e)],i=W_e(e);return i&&t.push(i),t}function z_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=rZ(r),a=s.length>0?` (${s.join("; ")})`:"";t.push(`- **${Di(r.label||"Untitled pin")}**${a}`)}return t.push(""),t}function X_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(`| ${la(s.label)} | ${la((r=s.nearestPartName)!=null?r:"-")} | ${la(a)} | ${s.distance===void 0?"-":s.distance.toFixed(3)} | ${Math.round(s.confidence*100)}% |`)}return t.push(""),t}function Y_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,Jq)){let l=Di((s=us((r=o.notePath)!=null?r:""))!=null?s:o.name),c=[(a=o.category)!=null?a:"unclassified",Io(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 Io(n,e){return`${(n!=null?n:0).toLocaleString()} ${e}${n===1?"":"s"}`}function K_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"}, ${Io(e.triangleCount,"triangle")}${i})`}).join(` +`)}function j_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 aZ(n){var _,g,v,x,T,E,S,R,I;let e=tZ(n.sourcePath).toUpperCase(),t=n.preview,i=[...(g=(_=n.analysis)==null?void 0:_.parts)!=null?g:[]].sort((C,y)=>{var L,O;return((L=y.triangleCount)!=null?L: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=tw(i.map(C=>{var y;return(y=C.category)!=null?y:"unclassified"})).slice(0,6),o=tw(i.flatMap(C=>C.materialName?[Di(C.materialName)]:[])).slice(0,6),l=K_e(i),c=j_e(i),f=t?nZ(t):"Geometry statistics are not available yet, so this draft should stay provisional.",h=t?sZ(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 ${Io(t.meshCount,"mesh")}, ${Io(t.triangleCount,"triangle")}, ${Io(t.vertexCount,"vertex")}, and ${Io(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),L=y!=null&&y.nearestPartName?` Nearest captured part: ${Di(y.nearestPartName)}.`:"",O=C.headingRef?` Linked heading: ${Di(C.headingRef)}.`:"";return`- ${Di(C.label||"Untitled pin")}.${L}${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: ${nw(a)}.`:"No part categories were inferred yet.",o.length>0?`Visible materials include ${nw(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:tw([...(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 q_e(n){var i,r;let e=(r=(i=n.analysis)==null?void 0:i.localDraft)!=null?r:aZ(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 Z_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 Q_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 $_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 J_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 ege(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=aw(l.center),f=l.observations.slice(0,2).join(" "),h=l.notePath?`[[${l.notePath}]]`:"-",d=iZ(l);t.push(`| ${o+1} | ${la(l.name)} | ${la(h)} | ${la(d)} | ${la((r=l.category)!=null?r:"unclassified")} | ${((s=l.triangleCount)!=null?s:0).toLocaleString()} | ${la((a=l.materialName)!=null?a:"-")} | ${c} | ${la(f)} |`)}return e.length>32&&t.push(`| ... | ${e.length-32} more candidate parts omitted from this note | - | - | - | - | - | - | See sidecar JSON |`),t.push(""),t}function tge(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(`| ${la(s.name)} | ${la(o)} | ${la(a.sourceAssetId)} | ${Math.round(a.confidence*100)}% | ${la(a.reasons.join(", "))} |`)}return e.length>32&&t.push(`| ... | ${e.length-32} more matched parts omitted | - | - | See sidecar JSON |`),t.push(""),t}function ige(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 rge(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 nge(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=rZ(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 oZ(n){var c,f,h,d;let e=n.profile,t=n.preview,i=n.analysis,r=tZ(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?[...X3(t,{decimals:2}),""]:["(No preview data available)",""],...$_e(i),...q_e(n),...n.knowledgeIndexPath?["## Knowledge Index","",`- [[${n.knowledgeIndexPath}|Open model knowledge index]]`,""]:[],"## Local Observations","",...H_e(t,e).map(u=>`- ${u}`),"",...rge(i,n.analysisSidecarPath),...J_e(i),...z_e(e),...X_e(i),...Y_e(i),...ege(i),...tge(i),...ige(i),...Z_e(i),...Q_e(i),...nge(t,e),"## Review Notes","",(d=e==null?void 0:e.notes)!=null&&d.trim()?Di(e.notes.trim()):"-",""].join(` +`)}function la(n){return Di(n).replace(/\|/g,"\\|").replace(/\r?\n/g," ")}function sge(n){let[,e=""]=n.split(",",2),t=atob(e),i=new Uint8Array(t.length);for(let r=0;r{U_e.warn("Failed to create vault folder",{path:i,error:String(s)})})}async function lZ(n,e,t){let i=n.vault.getAbstractFileByPath(e);if(i instanceof vl.TFile)return i;try{return await n.vault.create(e,t)}catch(r){let s=n.vault.getAbstractFileByPath(e);return s instanceof vl.TFile?s:null}}async function Qq(n,e,t){let i=n.vault.getAbstractFileByPath(e);if(i instanceof vl.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 vl.TFile)return await n.vault.modify(s,t),s}return null}async function age(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 lw(n,t);let a=`${t}/${i}_evidence_${Date.now()}.png`;return await n.vault.createBinary(a,sge(r)),{paths:[a]}}catch(a){let o=a instanceof Error?a.message:String(a);return{paths:[],warning:`Evidence snapshot failed: ${o}`}}}function cZ(n){return!!n&&typeof n=="object"}function Sv(n){return Array.isArray(n)?n.filter(e=>typeof e=="string"):[]}function $q(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 oge(n){return n==="group"||n==="mesh"||n==="component"||n==="detail-cluster"?n:void 0}function lge(n,e){if(!cZ(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:oge(n.source),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:Sv(n.meshRefs),childCount:Number.isFinite(n.childCount)?Number(n.childCount):void 0,materialRefs:Sv(n.materialRefs),bbox:$q(n.bbox),center:$q(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:Sv(n.observations),inferredFunctions:Sv(n.inferredFunctions),knowledgeTags:Sv(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 fZ(n,e,t){var a;let i=[],r=new Set,s=(o,l)=>{let c=lge(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 vl.TFile)try{let f=await n.vault.read(c),h=JSON.parse(f);if(cZ(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 cge(n){var t;let e=new Set(((t=n.annotationLinks)!=null?t:[]).flatMap(i=>i.nearestPartId?[i.nearestPartId]:[]));return new Set([...n.parts].filter(i=>{var r;return i.source!=="detail-cluster"||e.has(i.partId)||!!((r=i.registeredMatches)!=null&&r.length)}).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,Jq).map(i=>i.partId))}function fge(n,e,t,i){let r=ow(n)||"Parts/3D Components",s=sw(e,"model"),a=sw(t.name,`Part ${i+1}`);return`${r}/${s}/${String(i+1).padStart(2,"0")} ${a}.md`}function hge(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: ${iZ(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"||n.part.source==="detail-cluster"?[`- Child meshes: ${V_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: ${aw(n.part.bbox)}`,`- Center: ${aw(n.part.center)}`,...(l=n.part.registeredMatches)!=null&&l.length?[`- Possible registered match: ${G_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 dge(n){var a;let e=cge(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=`${ow(n.partFolder)||"Parts/3D Components"}/${sw(n.baseName,"model")}`;await lw(n.app,s);for(let[o,l]of n.analysis.parts.entries()){if(!e.has(l.partId))continue;let c=fge(n.partFolder,n.baseName,l,o),f={...l,notePath:c},h=hge({baseName:n.baseName,notePath:n.notePath,sourcePath:n.sourcePath,part:f,analysis:n.analysis}),d=await lZ(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 cw(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[eZ,"","## 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?`- ${Io(n.preview.meshCount,"mesh")}, ${Io(n.preview.triangleCount,"triangle")}, ${Io(n.preview.vertexCount,"vertex")}, ${Io(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"}, ${Io(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."],"",rw,""].join(` +`)}function hZ(n,e){let t=n.indexOf(eZ),i=n.indexOf(rw);if(t>=0&&i>t){let r=n.slice(0,t).replace(/\s+$/,""),s=n.slice(i+rw.length).replace(/^\s+/,"");return[r,e.trim(),s].filter(Boolean).join(` `)+` `}return`${n.replace(/\s+$/,"")} ${e.trim()} -`}function fZ(n){var r;let e=sw(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(` +`}function dZ(n){var r;let e=cw(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 ege(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=sw(n);await n.app.vault.modify(t,cZ(r,s)),i=t}else i=await aZ(n.app,n.indexPath,fZ(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 tge(n,e,t={}){var o,l,c,f,h,d,u,m,p,_,g;if($N!==null)return;let i;$N=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`,L=((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;L&&new _l.Notice(L),r=ZN({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 j_e(n,t.preview,v.settings.previewFolder,S);a=V.paths.length;let w=await lZ(n,v.modelAssetProfiles,x);s=Hb({modelPath:x,profile:T,preview:E,evidence:O,previewImages:V.paths,registeredParts:w}),L&&(s.warnings=[...s.warnings,L]);let N=s;V.warning&&(N.warnings=[...N.warnings,V.warning],N.draftingInput&&(N.draftingInput={...N.draftingInput,evidence:{...N.draftingInput.evidence,warnings:[...N.draftingInput.evidence.warnings,V.warning]}})),N.localDraft=nZ({baseName:S,sourcePath:x,profile:T,preview:E,analysis:N}),N.pipeline.push({stage:"draft",durationMs:0,status:"success"}),await J_e({app:n,partFolder:v.settings.partFolder,baseName:S,notePath:I,sourcePath:x,analysis:N}),N.draftingInput&&(N.draftingInput={...N.draftingInput,partCandidates:N.draftingInput.partCandidates.map(z=>{let Y=N.parts.find(me=>me.partId===z.partId);return Y!=null&&Y.notePath?{...z,notePath:Y.notePath}:z}),annotationLinks:[...(h=N.annotationLinks)!=null?h:[]]});let U=Xq(v.settings,N.draftingInput,Sp);if(U.enabled)try{let z=await Yq(U);z?(N.remoteDraft=z,N.pipeline.push({stage:"remoteDraft",durationMs:0,status:"success"})):N.pipeline.push({stage:"remoteDraft",durationMs:0,status:"skipped"})}catch(z){let Y=z instanceof Error?z.message:String(z);N.warnings=[...N.warnings,`Remote draft failed: ${Y}`],N.pipeline.push({stage:"remoteDraft",durationMs:0,status:"failed"})}else N.pipeline.push({stage:"remoteDraft",durationMs:0,status:"skipped"});if(await nw(n,R),!await ege({app:n,baseName:S,notePath:I,sourcePath:x,analysisSidecarPath:C,indexPath:y,analysis:N,preview:E,profile:T}))throw new Error(`Unable to write knowledge index: ${y}`);let ee=sZ({baseName:S,notePath:I,sourcePath:x,profile:T,preview:E,analysis:N,analysisSidecarPath:C,knowledgeIndexPath:N.knowledgeIndexPath});if(!await qq(n,C,`${JSON.stringify(N,null,2)} -`))throw new Error(`Unable to write analysis sidecar: ${C}`);let te=await qq(n,I,ee);if(!te)throw new Error(`Unable to write knowledge report: ${I}`);e.updateModelProfile(x,z=>({analysisVersion:Sp,registeredParts:N.parts,reportNotePath:te.path,analysisSidecarPath:C,knowledgeIndexPath:N.knowledgeIndexPath,previewImagePaths:V.paths})),e.setLastKnowledgeGeneration(ZN({modelPath:x,reportNotePath:te.path,analysisSidecarPath:C,knowledgeIndexPath:N.knowledgeIndexPath,partNoteCount:(u=(d=N.partNotePaths)==null?void 0:d.length)!=null?u:0,previewImageCount:N.previewImages.length,status:"success",warningCount:N.warnings.length})),await n.workspace.getLeaf(!0).openFile(te,{active:!0}),new _l.Notice(`Knowledge note updated: ${te.path}`)}catch(v){throw r&&e.setLastKnowledgeGeneration(ZN({...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(),$N=null}}var _l,I_e,Qq,$q,JN,$N,Kb=M(()=>{"use strict";_l=require("obsidian");aT();eT();An();Ws();jN();Kq();I_e=Wi("knowledge-note"),Qq=8,$q="",JN="";$N=null});function Io(n,e,t=2.5){var i;if(typeof n=="string"){let r=(i=fw[n])!=null?i:fw.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 dw(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 fw,bd=M(()=>{"use strict";fw={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 mZ,pZ=M(()=>{"use strict";bd();mZ={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=Ev(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 _Z,gZ=M(()=>{"use strict";bd();_Z={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 vZ,EZ=M(()=>{"use strict";bd();vZ={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=dw(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 SZ,TZ=M(()=>{"use strict";bd();SZ={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=Ev(n,t),s=hw(n.length),a=n.map((o,l)=>({modelIndex:l,camera:Io(i),viewport:s[l]}));return{placements:r,cells:a}}}});function uw(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";AZ={name:"compose",description:"Combine multiple presets into one layout",minModels:1,maxModels:32,compute(n,e,t){return null}}});var xZ,RZ=M(()=>{"use strict";bd();xZ={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){bZ.set(n.name,n)}function pw(n){return bZ.get(n)}var bZ,IZ=M(()=>{"use strict";pZ();gZ();EZ();TZ();mw();RZ();bd();mw();bZ=new Map;Rp(mZ);Rp(_Z);Rp(vZ);Rp(SZ);Rp(AZ);Rp(xZ)});var PZ={};tt(PZ,{registerCodeBlockProcessor:()=>lge,registerGridCodeBlockProcessor:()=>fge});async function CZ(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(!vl(a))throw Cp(a)?new Error(Q("codeBlock.splatDisabled")):new Error(Ki("codeBlock.unsupportedFormat",{ext:`.${a}`,formats:El().join(", ")}));let o=(u=th(n,s))!=null?u:void 0,l=gd(t),c=await Sd({path:s,absolutePath:o,preferConversionExts:Td(t),conversionManager:l,convertedAssetCache:i}),f=dv(c);return{sourcePath:s,effectivePath:f.path,effectiveExt:f.ext,warnings:f.warnings,model:{...r,path:f.path}}}async function oge(n,e,t,i){let r=[];for(let s of e.models){let a=await CZ(n,s,t,i);r.push(a.model)}return{...e,models:r}}function yZ(n){_r()&&n.createDiv({cls:"ai3d-mobile-mode-hint ai3d-mobile-mode-hint--inline",text:Q("codeBlock.mobileHint")})}function lge(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 L=JSON.parse(o);l=cge(L)}catch(L){let O=s.createDiv({cls:"ai3d-json-error"}),V=String(L).match(/position\s+(\d+)/),w=Ki("codeBlock.jsonParseError",{error:String(L)});if(V){let N=parseInt(V[1],10),U=o.substring(0,N).split(` -`);w+=Ki("codeBlock.jsonParseLine",{line:String(U.length)})}O.createEl("pre",{text:w});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(!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"});Tp(p,"inline",h),m.appendChild(p);let _=null,g=null,v=!0,x=!1,T=!1;Ap(p,()=>x?null:_);let E=fv(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 L=m.querySelector(".ai3d-annotation-overlay");L&&L.classList.toggle("is-hidden",!v)}return v},void 0,{labelKey:"helper.toggleAnnotationsVisibilityLabel",activeTooltipKey:"helper.annotationsVisible",inactiveTooltipKey:"helper.annotationsHidden"});yZ(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,w,N,U,H,ee;if(T||x||!h)return;T=!0;let L=Ad(m);try{let q=(O=th(n,h))!=null?O:void 0,te=gd(u);L.setPhaseKey("loading.preparingModel");let z=await Sd({path:h,absolutePath:q,preferConversionExts:Td(u),conversionManager:te,convertedAssetCache:t}),Y=dv(z),me=(V=i==null?void 0:i(h))!=null?V:[],Re={ext:Y.ext,annotationMode:me.length>0?"readonly":"none",rendererRollout:u.previewRendererRollout,useThreeRenderer:u.useThreeRenderer},{preview:Be}=await _d(MZ,{surface:"code-block",modelPath:h},p,Re);_=Be,E.syncCapabilities(),L.setPhaseKey("loading.loadingModel");let ae=await ka(n,Y.path),ge=async ue=>ka(n,ue);if(x){L.hide();return}let ne=await _.loadModel(ae,Y.ext,ge,Y.path);if(L.setProgress(100),Ep(m,ne),x){L.hide();return}if(((w=l.scene)==null?void 0:w.autoRotate)===void 0&&u.autoRotateDefault&&(l.scene={...l.scene,autoRotate:!0,autoRotateSpeed:u.autoRotateSpeed}),_.applyConfig(l),(N=_.setRenderQuality)==null||N.call(_,u.renderQuality,u.renderScale),E.syncCapabilities(),me.length>0&&ov(_)){let ue=_.getAnnotationProvider();ue.canvas&&(g=new Bc(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&&((U=_.setSTLColor)==null||U.call(_,f.color)),d==="stl"&&f.wireframe!==void 0&&((H=_.setWireframe)==null||H.call(_,f.wireframe)),(ee=_.hasAnimations)!=null&&ee.call(_)&&E.showAnimButton(),L.hide()}catch(q){x=!0,S.disconnect(),I.disconnect(),L.hide(),_==null||_.destroy(),_=null,m.replaceChildren();let te=pp(q);mp(q)?console.warn("[AI3D] Inline preview blocked by converter settings:",te.message):console.error("[AI3D] Inline preview failed:",q),vp(m,te)}}let I=new IntersectionObserver(L=>{for(let O of L)O.isIntersecting&&(I.disconnect(),R())},{rootMargin:"200px"});I.observe(m)}}}function cge(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 fge(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=Ad(r);(async()=>{var S,R,I,C;let f=[];for(let y of(S=o.models)!=null?S:[])try{let L=await CZ(n,y,l,t);f.push(L)}catch(L){c.hide(),r.createDiv({cls:"ai3d-inline-empty",text:L instanceof Error?L.message:String(L)});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(Oq(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;Nq(m,()=>_?null:p);let v=fv(r,u,n,()=>p,()=>d,()=>{_||(_=!0,x.disconnect(),E.disconnect(),p==null||p.destroy(),p=null,u.remove())},e);yZ(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,L,O,V,w,N,U;if(!(g||_)){g=!0,c.setPhaseKey("codeBlock.renderingGrid"),c.setProgress(-1);try{let{renderer:H}=await Kj(MZ,{surface:"3dgrid",preset:(y=o.preset)!=null?y:"compare",modelCount:(O=(L=o.models)==null?void 0:L.length)!=null?O:0},m);p=H,v.syncCapabilities();let ee=p,q=async te=>ka(n,te);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 te=[];for(let Y of o.sections)try{if(!d){let Re=Y.models[0];if(Re){let Be=typeof Re=="string"?Re:Re.path;d=(V=Bd(n,Be))!=null?V:Be}}let me=await oge(n,Y,l,t);te.push(me)}catch(me){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:me instanceof Error?me.message:String(me)}),ee.destroy(),p=null;return}let z=uw(te,(w=o.direction)!=null?w:"horizontal",Number((N=o.params)==null?void 0:N.gap)||.02,Y=>typeof Y=="string"?null:Y,pw);if(!z){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:Q("codeBlock.composeNoValidSections")}),ee.destroy(),p=null;return}await ee.loadWithPreset(z,q)}else if(o.preset){let te=pw(o.preset);if(!te){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:Ki("codeBlock.unknownPreset",{preset:o.preset})}),ee.destroy(),p=null;return}let z=te.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(te.minModels),max:String(te.maxModels),count:String(h.length)})}),ee.destroy(),p=null;return}await ee.loadWithPreset(z,q)}else await ee.loadModels(h,o,q);if(_){c.hide();return}c.hide()}catch(H){_=!0,x.disconnect(),E.disconnect(),c.hide(),p==null||p.destroy(),p=null,console.error("[AI3D Grid] Failed:",H),u.createDiv({cls:"ai3d-inline-empty",text:Ki("codeBlock.gridFailed",{reason:String(H)})})}}}let E=new IntersectionObserver(y=>{for(let L of y)L.isIntersecting&&(E.disconnect(),T())},{rootMargin:"200px"});E.observe(u)})()}}}var MZ,LZ=M(()=>{"use strict";Co();Dv();Tb();dp();Ws();IZ();DN();Fb();Ub();zN();Vb();Gb();mv();_p();Mn();kb();Qs();An();zb();MZ=Wi("inline-code-block")});function Sv(n){return createDiv().createDiv(n?{cls:n}:void 0)}function _w(n,e){return createDiv().createEl(n,e?{cls:e}:void 0)}var DZ=M(()=>{"use strict"});var wZ={};tt(wZ,{registerLivePreviewExtension:()=>dge});function OZ(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 L=S.slice(I+3,C).split("|"),O=L[0].trim(),V=(x=(v=O.split(".").pop())==null?void 0:v.toLowerCase())!=null?x:"";if(!vl(V)){R=C+2;continue}let w=400,N=300;if(L.length>1){let q=L[1].trim().match(/^(\d+)\s*x\s*(\d+)$/);q&&(w=parseInt(q[1],10),N=parseInt(q[2],10))}let U=Bd(e,O);if(!U){R=C+2;continue}let H=E.from+I,ee=E.from+C+2;g.push(bp.Decoration.replace({widget:new gw(e,U,w,N,t,i,r,s,a,o,l,c,f,h,d,u,m,p),block:!0}).range(H,ee)),R=C+2}}return g}function NZ(n){return n.length===0?Id.RangeSet.empty:Id.RangeSet.of(n,!0)}function dge(n,e,t,i){let r=Id.StateField.define({create(s){let a=e(),o=OZ(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 NZ(o)},update(s,a){if(a.docChanged){let o=e(),l=OZ(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 NZ(l)}return s.map(a.changes)},provide:s=>bp.EditorView.decorations.from(s)});return[Id.Prec.highest(r)]}var bp,Id,hge,gw,FZ=M(()=>{"use strict";bp=require("@codemirror/view"),Id=require("@codemirror/state");Co();Dv();Tb();dp();Ws();Fb();Ub();Vb();Gb();mv();DZ();_p();Qs();kb();Mn();An();zb();hge=Wi("inline-live-preview"),gw=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=_r(),i=Sv("ai3d-embed-preview ai3d-cm-widget");i.setAttribute("contenteditable","false"),t&&i.classList.add("is-mobile","is-mobile-scroll-mode");let r=_w("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=Ad(i),o=Sv("ai3d-embed-error is-hidden");if(i.appendChild(o),t){let h=!1,d=Sv("ai3d-mobile-mode-bar"),u=Sv("ai3d-mobile-mode-hint");u.textContent=Q("livePreview.mobileHint");let m=_w("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=th(this.app,this.modelPath))!=null?o:void 0,m=gd({enabledConverterIds:this.enabledConverterIds,freecadCommand:this.freecadCommand,obj2gltfCommand:this.obj2gltfCommand,fbx2gltfCommand:this.fbx2gltfCommand,freecadcmdCommand:this.freecadcmdCommand});r.setPhaseKey("loading.preparingModel");let p=await Sd({path:this.modelPath,absolutePath:u,preferConversionExts:Td({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 _d(hge,{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 ka(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=>ka(this.app,E),p.effectivePath);if(this.destroyed||a!==this.initGeneration){(h=this.preview)==null||h.destroy(),this.preview=null;return}if(Ep(t,T),this.autoRotate&&this.preview.applyConfig({models:[],scene:{autoRotate:!0,autoRotateSpeed:.5}}),_.length>0&&ov(this.preview)){let E=this.preview.getAnnotationProvider();E.canvas&&(this.annotationMgr=new Bc(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}}});function BZ(n,e){return n==="three"?{backend:n,supportedFormats:uge,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:mge,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 UZ(n){return n.backend==="three"?BZ("three",["annotation","animation","measurement","disassembly","focus-selection","wireframe","orientation-gizmo","bounding-box","render-scale","workbench"]):BZ("babylon",["annotation","animation","measurement","disassembly","focus-selection","wireframe","orientation-gizmo","bounding-box","render-scale","workbench"])}function VZ(n){return[`${n.backend}`,`formats=${n.supportedFormats.join("/")}`,`capabilities=${n.capabilities.join("/")||"none"}`,`role=${n.fallbackRole}`].join("; ")}var uge,mge,GZ=M(()=>{"use strict";dp();uge=["glb","gltf","stl","ply","obj"],mge=["glb","gltf","stl","ply","obj","splat","converted-glb"]});var WZ={};tt(WZ,{buildDiagnosticsReport:()=>Rge});function $b(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 pge(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=pge(n);return i?``:""}function Tv(n,e){return n?`set (${Ip(n,e,"not set")})`:"not set"}function _ge(n){let e=n.settings;return e.analysisMode==="local"?"local only":[e.analysisMode,e.serviceBaseUrl.trim()?"service configured":"service missing",`geometry ${$b(e.sendGeometrySummaryToRemote)}`,`preview refs ${$b(e.sendPreviewImagesToRemote)}`,`raw model ${e.sendRawModelToRemote?"blocked if requested":"off"}`].join(", ")}function gge(n){let e=n.currentModelPath;return e?n.modelAssetProfiles[e]:void 0}function vge(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 Age(n){let e=new Set(n.enabledConverterIds);return Ege.map(t=>{let i=n[t.settingsKey].trim(),r=i.length===0?"command not configured":Sge.test(i)?"command configured, unsafe command rejected":"command configured, path redacted";return`${t.label}: ${e.has(t.id)?"enabled":"disabled"}, ${r}`}).join("; ")}function xge(n){let e=n.convertedAssetRecords;if(e.length===0)return"none";let t=new Set(e.map(r=>`${r.sourcePath}:${r.sourceExt}:${r.targetExt}`)).size,i=e.filter(r=>r.warnings.length>0).length;return[`${e.length} record(s) for ${t} source(s)`,"validated before reuse for cache version, converter identity, output presence, and source freshness",i>0?`${i} record(s) carry warning text`:""].filter(Boolean).join("; ")}function Rge(n){var c,f,h,d,u,m,p,_,g;let{manifest:e,state:t}=n,i=t.settings,r=gge(t),s=n.includeVaultPaths===!0,a=t.currentModelPath?Wd({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?UZ(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: ${kZ.apiVersion}`,`- Platform: ${_r()?"mobile":"desktop"}`,`- Locale: ${i.locale}`,"","## Renderer","",`- Use Three renderer: ${$b(i.useThreeRenderer)}`,`- Preview rollout: ${i.previewRendererRollout}`,`- Experimental Three workbench: ${$b(i.experimentalThreeWorkbench)}`,`- Current route: ${a?`${a.backend} (${a.reason})`:"no current model"}`,`- Route capability profile: ${o?VZ(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: ${Tv(r==null?void 0:r.reportNotePath,s)}`,`- Analysis sidecar: ${Tv(r==null?void 0:r.analysisSidecarPath,s)}`,`- Knowledge index: ${Tv(r==null?void 0:r.knowledgeIndexPath,s)}`,"","## Knowledge Generation","",`- Mode: ${_ge(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: ${vge(t)}`,`- Last generated model: ${Ip(l==null?void 0:l.modelPath,s,"none")}`,`- Last report: ${Tv(l==null?void 0:l.reportNotePath,s)}`,`- Last index: ${Tv(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}`,`- Converter command status: ${Age(i)}`,`- Conversion cache status: ${xge(t)}`,`- Conversion timeout: ${Tge}ms outer budget`,"- Converter safety: missing converters report their converter id; unsafe configured commands are rejected before execution; command paths are redacted.",`- 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 kZ,Ege,Sge,Tge,HZ=M(()=>{"use strict";kZ=require("obsidian");Co();GZ();Ov();Qs();Ege=[{id:"freecad",label:"Python/CadQuery",settingsKey:"freecadCommand"},{id:"obj2gltf",label:"obj2gltf",settingsKey:"obj2gltfCommand"},{id:"fbx2gltf",label:"FBX2glTF",settingsKey:"fbx2gltfCommand"},{id:"assimp",label:"Python/trimesh",settingsKey:"assimpCommand"},{id:"freecadcmd",label:"FreeCADCmd",settingsKey:"freecadcmdCommand"}],Sge=/[;|&<>$`\r\n\t]/,Tge=3e5});var bge={};tt(bge,{default:()=>Jb});module.exports=iQ(bge);var Vs=require("obsidian");r0();Co();Co();var Pge=new Set(El());var Nc={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 Mw(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 aQ={settings:{...Nc},currentModelPath:null,convertedAssetRecords:[],modelAssetProfiles:{},agentDraft:"",agentPlan:null,modelPreview:null,selectedPart:null,lastKnowledgeGeneration:null};function yw(n){let e=Mw(aQ),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?_:s0();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:{...Nc,...(m=d.settings)!=null?m:{}},convertedAssetRecords:(p=d.convertedAssetRecords)!=null?p:[],modelAssetProfiles:oQ(d.modelAssetProfiles),agentDraft:(_=d.agentDraft)!=null?_:"",agentPlan:(g=d.agentPlan)!=null?g:null,lastKnowledgeGeneration:cQ(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 oQ(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:lQ(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 Cw(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 lQ(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:Cw(s.bbox),center:Cw(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 cQ(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 s0(){let n=new Date().toISOString();return{tags:[],notes:"",annotations:[],registeredParts:void 0,createdAt:n,updatedAt:n}}var Pc=require("obsidian");Dv();Tb();DN();Fb();Ub();zN();Ws();Vb();mv();Gb();_p();Mn();kb();Qs();An();jN();Mn();function h_e(n){if(!n)return"";let e=n.split("/");return e[e.length-1]||n}function yq(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:h_e(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}Mn();zb();function Fq(n){let{contentEl:e,filePath:t,mobile:i,getPreview:r}=n,s=e.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),Ap(d,r),h.appendChild(d);let u=f.createDiv();u.className="ai3d-annot-mode-overlay is-hidden",h.appendChild(u),o.appendChild(h);let m=c.createDiv({cls:"ai3d-sidebar-content"}),p=s.createDiv({cls:"ai3d-resize-handle ai3d-resize-handle-v"}),_=s.createDiv({cls:"ai3d-direct-workbench-panel is-hidden"});return i&&o.createDiv({cls:"ai3d-mobile-mode-hint ai3d-mobile-mode-hint--inline",text:Q("directView.mobileHint")}),{workspace:s,topTrack:a,mainArea:o,hHandle:l,host:h,canvas:d,modeOverlay:u,sidebarContent:m,vHandle:p,workbenchPanel:_}}Mn();function Xb(n){return Math.round(n!=null?n:0).toLocaleString()}function p_e(n){return[n.boundingSize.x,n.boundingSize.y,n.boundingSize.z].map(e=>e.toFixed(2)).join(" x ")}function __e(n){return n==="three"?"Three.js":"Babylon.js"}function Bq(n){var f,h;let{panel:e,summary:t,route:i,registeredPartCount:r}=n;e.empty(),e.removeClass("is-hidden"),e.dataset.ai3dBackend=i.backend,e.dataset.ai3dRouteReason=i.reason;let s=e.createDiv({cls:"ai3d-direct-workbench-overview"}),a=s.createDiv({cls:"ai3d-direct-workbench-status"}),o=a.createDiv({cls:"ai3d-direct-workbench-line"});o.createSpan({cls:"ai3d-direct-workbench-label",text:Q("directWorkbench.backendLabel")}),o.createSpan({cls:"ai3d-direct-workbench-value",text:__e(i.backend)});let l=a.createDiv({cls:"ai3d-direct-workbench-line ai3d-direct-workbench-route"});l.createSpan({cls:"ai3d-direct-workbench-label",text:Q("directWorkbench.routeLabel")}),l.createSpan({cls:"ai3d-direct-workbench-value",text:i.reason});let c=s.createDiv({cls:"ai3d-direct-workbench-metrics"});xp(c,Q("workbench.meshesLabel"),Xb(t.meshCount)),xp(c,Q("directWorkbench.partCandidatesLabel"),Xb(r)),xp(c,t.splatCount!==void 0?Q("workbench.splatsLabel"):Q("workbench.trianglesLabel"),Xb((f=t.splatCount)!=null?f:t.triangleCount)),xp(c,Q("workbench.materialsLabel"),Xb(t.materialCount)),xp(c,Q("workbench.boundingSizeLabel"),p_e(t)),xp(c,Q("directWorkbench.performanceLabel"),(h=t.performanceTier)!=null?h:"light")}function xp(n,e,t){let i=n.createDiv({cls:"ai3d-direct-workbench-metric"});i.createSpan({cls:"ai3d-direct-workbench-label",text:e}),i.createSpan({cls:"ai3d-direct-workbench-value",text:t})}var Uq=new Set(["glb","gltf","stl","ply","obj"]),Vq=new Set(["glb","gltf"]);function g_e(n,e){return n.experimentalThreeWorkbench&&n.useThreeRenderer&&e.strategy==="direct"&&Vq.has(e.ext)&&Vq.has(e.sourceExt)}function v_e(n){return n.strategy==="direct"&&Uq.has(n.ext)&&Uq.has(n.sourceExt)}function Gq(n,e){let t=g_e(n,e);return{ext:e.ext,annotationMode:"edit",allowEditModeOnThree:!0,allowWorkbenchFeaturesOnThree:t,requireWorkbenchFeatures:t||!v_e(e),rendererRollout:n.previewRendererRollout,useThreeRenderer:n.useThreeRenderer}}var qb="ai3d-direct-view",aw=Wi("direct-view");function ige(n){return n instanceof Error&&n.message.includes("Missing external model resource:")}function hZ(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 rge(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 jb=class extends Pc.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 qb}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 v,x,T,E,S,R,I,C,y;let i=++this.loadGeneration,r=_r();(v=this.annotationMgr)==null||v.destroy(),this.annotationMgr=null,this.workbenchPanel=null,this.workbenchSummary=null,this.workbenchRoute=null,this.workbenchModelPath=null,this.sidebarContent=null,(x=this.preview)==null||x.destroy(),this.preview=null,this.ps.setCurrentModel(t.path,null);let{workspace:s,topTrack:a,mainArea:o,hHandle:l,host:c,canvas:f,modeOverlay:h,sidebarContent:d,vHandle:u,workbenchPanel:m}=Fq({contentEl:this.contentEl,filePath:t.path,mobile:r,getPreview:()=>this.preview}),p=null,_=L=>{var O;this.annotationMode=L,r&&L&&(p==null||p.setMobileInteractionMode(!0)),(O=this.annotationMgr)==null||O.hideEditor(),h.classList.toggle("is-hidden",!L)};this.escHandler&&activeDocument.removeEventListener("keydown",this.escHandler),this.escHandler=L=>{L.key==="Escape"&&this.annotationMode&&_(!1)},activeDocument.addEventListener("keydown",this.escHandler),p=fv(o,c,this.app,()=>this.preview,()=>t.path,()=>{this.leaf.detach()},this.getSettings,()=>(_(!this.annotationMode),this.annotationMode),L=>{!L&&this.annotationMode&&_(!1)}),this.sidebarContent=d,this.workbenchPanel=m,this.setupResizeHandles(l,u,a,s);let g=Ad(c);try{let L=this.getSettings(),O=gd(L),V=(T=th(this.app,t.path))!=null?T:void 0;g.setPhaseKey("loading.preparingModel");let w=await Sd({path:t.path,absolutePath:V,preferConversionExts:Td(L),conversionManager:O,convertedAssetCache:this.convertedAssetCache});if(i!==this.loadGeneration){new Pc.Notice(Q("directWorkbench.modelLoadInterrupted"));return}let N=dv(w),U=Gq(L,N);p==null||p.syncCapabilities(),g.setPhaseKey("loading.loadingModel");let H=await ka(this.app,N.path),ee=await this.createPreviewWithFallback(f,H,N,U,t.path);if(i!==this.loadGeneration){ee.preview.destroy(),new Pc.Notice(Q("directWorkbench.modelLoadInterrupted"));return}this.preview=ee.preview,c.dataset.ai3dBackend=ee.route.backend,c.dataset.ai3dRouteReason=ee.route.reason,p==null||p.syncCapabilities();let q=ee.summary,te=(R=(S=(E=this.preview).getModelEvidence)==null?void 0:S.call(E))!=null?R:null;this.registerModelPartsFromEvidence(t.path,te),Ep(c,q),this.workbenchPanel=m,this.workbenchSummary=q,this.workbenchRoute=ee.route,this.workbenchModelPath=t.path,this.renderWorkbenchPanel(m,q,ee.route,t.path),this.renderSidebarContent(t.path,q),this.ps.setCurrentModel(t.path,q),aw.info("direct view model loaded",{path:t.path,effectivePath:N.path,effectiveExt:N.ext,strategy:N.strategy,backend:ee.route.backend,routeReason:ee.route.reason,meshCount:q.meshCount,triangleCount:q.triangleCount}),g.setProgress(100);let z=this.preview.getAnnotationProvider();if(z.canvas){let Y=this.ps.store.getState().modelAssetProfiles[t.path],me=(I=Y==null?void 0:Y.annotations)!=null?I:[],Re=gp(this.app),Be=Rq(this.app);this.annotationMgr=new Bc(z,c,"edit",me,ae=>{this.ps.updateModelProfile(t.path,ge=>({annotations:ae})),p.updateAnnotationBadge(ae.length)},Re,Be,{app:this.app,previewMode:this.getSettings().annotationPreviewMode,displayMode:this.getSettings().annotationDisplayMode}),p.showAnnotateButton(),p.updateAnnotationBadge(me.length),this.preview.onPick(ae=>{var De,de;if(!this.annotationMode||!this.annotationMgr)return;let ge=ae.screenX,ne=ae.screenY,ue=(de=(De=this.preview)==null?void 0:De.getPickWorldPoint(ae))!=null?de:null;ue&&this.annotationMgr.showEditor(ge,ne,ue)})}g.hide()}catch(L){if(i!==this.loadGeneration)return;g.hide(),(C=this.preview)==null||C.destroy(),this.preview=null,c.replaceChildren(),(y=this.workbenchPanel)==null||y.addClass("is-hidden");let O=pp(L);mp(L)?console.warn("[AI3D] Direct view blocked by converter settings:",O.message):console.error("[AI3D] Direct view failed:",L),this.ps.store.getState().currentModelPath===t.path&&this.ps.clearModelPreview(),vp(c,O)}}registerModelPartsFromEvidence(t,i){var c,f;if(!(i!=null&&i.parts.length))return;let r=KN(t,i.parts);if(r.length===0)return;let a=(c=this.ps.store.getState().modelAssetProfiles[t])!=null?c:s0(),o=new Map(((f=a.registeredParts)!=null?f:[]).map(h=>[hZ(h),h])),l=r.map(h=>rge(o.get(hZ(h)),h));this.ps.updateModelProfile(t,h=>({registeredParts:l}))}renderWorkbenchPanel(t,i,r,s){var a,o;Bq({panel:t,summary:i,route:r,registeredPartCount:(o=(a=this.ps.store.getState().modelAssetProfiles[s])==null?void 0:a.registeredParts)==null?void 0:o.length})}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`},()=>{})}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(),Yb)).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 Pc.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 Pc.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(),Yb)).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=Hb({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,L,O,V,w;return((L=(y=(C=I.registeredMatches)==null?void 0:C[0])==null?void 0:y.matchScore)!=null?L:0)-((w=(V=(O=R.registeredMatches)==null?void 0:O[0])==null?void 0:V.matchScore)!=null?w: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=yq(E,R.name,I).querySelector("[data-ai3d-action='open-registered-part']");y instanceof HTMLButtonElement&&y.addEventListener("click",()=>{let L=y.getAttribute("data-ai3d-target-path")||void 0;if(!L)return;let O=this.app.vault.getAbstractFileByPath(L);O instanceof Pc.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 _d(aw,{surface:"direct-view",modelPath:a},t,s);try{let l=await o.preview.loadModel(i.slice(0),r.ext,c=>ka(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 _d(aw,{surface:"direct-view-fallback",modelPath:a},t,c);try{let h=await f.preview.loadModel(i.slice(0),r.ext,d=>ka(this.app,d),r.path);return{preview:f.preview,summary:h,route:f.route}}catch(h){throw f.preview.destroy(),ige(l)?l:h}}}};var dZ=require("obsidian");Co();Mn();var Zb=class extends dZ.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)}};Mn();mv();Ws();var gv=".markdown-preview-view, .markdown-source-view",vv=[".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 nge(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 lw(n){return n.map(e=>`${e.pinId}:${e.modelPath}:${e.color}`).sort().join("|")}function ow(n){return Array.from(n.entries()).map(([e,t])=>`${e}=>${lw(t)}`).sort().join("||")}function uZ(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=uv(C.headingRef);if(!y)continue;let L=E.get(y);L||(L=[],E.set(y,L)),L.push({pinId:C.id,modelPath:R,color:C.color})}return E},i=E=>uv(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=lw(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(N=>N.color).filter(Boolean))],L=C.createSpan({cls:"ai3d-heading-pin-badge-swatch"});if(L.style.background=nge(y),L.title=S.length>1?Q("headingPin.showMultiple"):Q("headingPin.showSingle"),L.setAttribute("role","button"),L.setAttribute("tabindex","0"),S.length>1){let N=C.createSpan({cls:"ai3d-heading-pin-badge-count"});N.textContent=`\xD7${S.length}`}let O=[...new Set(S.map(N=>qr(N.modelPath)))];C.title=Ki("headingPin.linkedTo",{models:O.join(", ")});let V=N=>{N==null||N.stopPropagation(),N==null||N.preventDefault();for(let U of S)activeDocument.dispatchEvent(new CustomEvent("ai3d-pin-highlight",{detail:{pinId:U.pinId}}))};L.addEventListener("click",N=>{V(N)}),L.addEventListener("keydown",N=>{N.instanceOf(KeyboardEvent)&&(N.key!=="Enter"&&N.key!==" "||V(N))}),C.addEventListener("click",N=>{N.stopPropagation()}),E.appendChild(C);let w=()=>{for(let N of S)activeDocument.dispatchEvent(new CustomEvent("ai3d-pin-highlight",{detail:{pinId:N.pinId}}))};E.addEventListener("mouseover",w),e.set(E,{badge:C,handler:w,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=lw(C);(C.length===0||I.signature!==y)&&s(R,C)}},l=(E,S)=>{E.querySelectorAll(vv).forEach(R=>a(R,S))},c=()=>{let E=t();o(E),activeDocument.querySelectorAll(gv).forEach(R=>l(R,E))},f=ow(t()),h=0,d=(E=0)=>{h&&window.clearTimeout(h),h=window.setTimeout(()=>{h=0,c()},E)},u=n.subscribeStore(()=>{let E=t(),S=ow(E);S!==f&&(f=S,d())});n.onLayoutChange(()=>{d(200)});let m=E=>E.matches(gv)||E.matches(vv)?!0:!!E.querySelector(gv)||!!E.querySelector(vv),p=E=>E.isConnected&&m(E),_=E=>m(E),g=new Set,v=0,x=()=>{var R,I,C,y,L,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,vv)&&a(V,S),(C=(I=V.querySelectorAll)==null?void 0:I.call(V,vv))==null||C.forEach(w=>a(w,S)),(y=V.matches)!=null&&y.call(V,gv)&&l(V,S),(O=(L=V.querySelectorAll)==null?void 0:L.call(V,gv))==null||O.forEach(w=>l(w,S)));f=ow(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");Jf();Mn();Qs();cr();var cw=Iv();function sge(){switch(cw==null?void 0:cw.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(Nc.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(Nc.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(Nc.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(Nc.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(),_r()){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=sge();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 yb(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")}: ${Cb(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})}};Jf();An();Mn();Qs();var zZ=Wi("main");function Av(n,e){return()=>{n().catch(t=>{zZ.error(`Command ${e} failed`,{error:String(t)}),new Vs.Notice(`AI3D: ${e} failed \u2014 ${String(t)}`,5e3)})}}var Jb=class extends Vs.Plugin{getSettings(){return this.ps.store.getState().settings}updateSettings(e){this.ps.updateSettings(e),IN(this.getSettings().logLevel),Pp(this.getSettings().locale)}async onload(){var l;if(this.ps=yw(this),await this.ps.load(),this.convertedAssetCache=bw(this.ps.store.getState().convertedAssetRecords,c=>this.ps.setConvertedAssetRecords(c)),IN(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:Av(()=>this.generateNote(),"generate note")}),this.addCommand({id:"open-knowledge-index",name:Q("main.commandOpenKnowledgeIndex"),callback:Av(()=>this.openKnowledgeIndex(),"open knowledge index")}),this.addCommand({id:"clear-conversion-cache",name:Q("main.commandClearConversionCache"),callback:Av(()=>Promise.resolve(this.clearConversionCache()),"clear conversion cache")}),this.addCommand({id:"check-converters",name:Q("main.commandCheckConverters"),callback:Av(()=>this.checkConverterCommands(),"check converters")}),this.addCommand({id:"copy-diagnostics-report",name:Q("main.commandCopyDiagnostics"),callback:Av(()=>this.copyDiagnosticsReport(),"copy diagnostics")}),this.addSettingTab(new Qb(this.app,this)),this.registerView(qb,c=>new jb(c,()=>this.getSettings(),this.convertedAssetCache,this.ps)),this.registerExtensions(El(),qb);let{registerCodeBlockProcessor:e,registerGridCodeBlockProcessor:t}=await Promise.resolve().then(()=>(LZ(),PZ)),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(()=>(FZ(),wZ)),o=a(this.app,()=>this.getSettings(),this.convertedAssetCache,i);for(let c of o)this.registerEditorExtension(c);uZ({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 Zb(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(()=>(Kb(),Yb));await e(this.app,this.ps)}async openKnowledgeIndex(){let e=this.resolveKnowledgeIndexPath();if(!e){new Vs.Notice(Q("workbench.noIndexYet"));return}let t=this.app.vault.getAbstractFileByPath(e);t instanceof Vs.TFile?await this.app.workspace.getLeaf(!0).openFile(t,{active:!0}):new Vs.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 Vs.Notice("AI 3d conversion cache cleared.")}async checkConverterCommands(){if(_r()){new Vs.Notice(Q("main.converterDiagnosticsMobileUnavailable"),8e3);return}let e=await yb(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 Vs.Notice(`AI 3D converter diagnostics: all commands available (${t.join(", ")}).`,8e3);return}new Vs.Notice(`AI 3D converter diagnostics: available ${t.join(", ")||"none"}; missing ${i.join(", ")}.`,1e4)}async copyDiagnosticsReport(){let{buildDiagnosticsReport:e}=await Promise.resolve().then(()=>(HZ(),WZ)),t=e({manifest:this.manifest,state:this.ps.store.getState()});try{await navigator.clipboard.writeText(t),new Vs.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 Vs.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=>{zZ.warn("Failed to create vault folder",{path:t,error:String(r)})})}}; +`)}async function uge(n){let e=typeof performance!="undefined"?performance.now():Date.now(),t=n.app.vault.getAbstractFileByPath(n.indexPath),i=null;if(t instanceof vl.TFile){let r=await n.app.vault.read(t),s=cw(n);await n.app.vault.modify(t,hZ(r,s)),i=t}else i=await lZ(n.app,n.indexPath,dZ(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 mge(n,e,t={}){var o,l,c,f,h,d,u,m,p,_,g;if(iw!==null)return;let i;iw=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=Zr(x)||"model",R=v.settings.reportFolder,I=`${R}/${S} Report.md`,C=`${R}/${S} Analysis.json`,y=`${R}/${S} Index.md`,L=((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;L&&new vl.Notice(L),r=ew({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 age(n,t.preview,v.settings.previewFolder,S);a=V.paths.length;let w=await fZ(n,v.modelAssetProfiles,x);s=jb({modelPath:x,profile:T,preview:E,evidence:O,previewImages:V.paths,registeredParts:w}),L&&(s.warnings=[...s.warnings,L]);let N=s;V.warning&&(N.warnings=[...N.warnings,V.warning],N.draftingInput&&(N.draftingInput={...N.draftingInput,evidence:{...N.draftingInput.evidence,warnings:[...N.draftingInput.evidence.warnings,V.warning]}})),N.localDraft=aZ({baseName:S,sourcePath:x,profile:T,preview:E,analysis:N}),N.pipeline.push({stage:"draft",durationMs:0,status:"success"}),await dge({app:n,partFolder:v.settings.partFolder,baseName:S,notePath:I,sourcePath:x,analysis:N}),N.draftingInput&&(N.draftingInput={...N.draftingInput,partCandidates:N.draftingInput.partCandidates.map(z=>{let Y=N.parts.find(me=>me.partId===z.partId);return Y!=null&&Y.notePath?{...z,notePath:Y.notePath}:z}),annotationLinks:[...(h=N.annotationLinks)!=null?h:[]]});let U=Kq(v.settings,N.draftingInput,Tp);if(U.enabled)try{let z=await jq(U);z?(N.remoteDraft=z,N.pipeline.push({stage:"remoteDraft",durationMs:0,status:"success"})):N.pipeline.push({stage:"remoteDraft",durationMs:0,status:"skipped"})}catch(z){let Y=z instanceof Error?z.message:String(z);N.warnings=[...N.warnings,`Remote draft failed: ${Y}`],N.pipeline.push({stage:"remoteDraft",durationMs:0,status:"failed"})}else N.pipeline.push({stage:"remoteDraft",durationMs:0,status:"skipped"});if(await lw(n,R),!await uge({app:n,baseName:S,notePath:I,sourcePath:x,analysisSidecarPath:C,indexPath:y,analysis:N,preview:E,profile:T}))throw new Error(`Unable to write knowledge index: ${y}`);let ee=oZ({baseName:S,notePath:I,sourcePath:x,profile:T,preview:E,analysis:N,analysisSidecarPath:C,knowledgeIndexPath:N.knowledgeIndexPath});if(!await Qq(n,C,`${JSON.stringify(N,null,2)} +`))throw new Error(`Unable to write analysis sidecar: ${C}`);let te=await Qq(n,I,ee);if(!te)throw new Error(`Unable to write knowledge report: ${I}`);e.updateModelProfile(x,z=>({analysisVersion:Tp,registeredParts:N.parts,reportNotePath:te.path,analysisSidecarPath:C,knowledgeIndexPath:N.knowledgeIndexPath,previewImagePaths:V.paths})),e.setLastKnowledgeGeneration(ew({modelPath:x,reportNotePath:te.path,analysisSidecarPath:C,knowledgeIndexPath:N.knowledgeIndexPath,partNoteCount:(u=(d=N.partNotePaths)==null?void 0:d.length)!=null?u:0,previewImageCount:N.previewImages.length,status:"success",warningCount:N.warnings.length})),await n.workspace.getLeaf(!0).openFile(te,{active:!0}),new vl.Notice(`Knowledge note updated: ${te.path}`)}catch(v){throw r&&e.setLastKnowledgeGeneration(ew({...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(),iw=null}}var vl,U_e,Jq,eZ,rw,iw,$b=M(()=>{"use strict";vl=require("obsidian");hT();sT();An();Hs();$N();qq();U_e=Wi("knowledge-note"),Jq=8,eZ="",rw="";iw=null});function Mo(n,e,t=2.5){var i;if(typeof n=="string"){let r=(i=mw[n])!=null?i:mw.iso;return{alpha:r.alpha,beta:r.beta,radiusMultiplier:t}}return{alpha:n,beta:e!=null?e:Math.PI/3,radiusMultiplier:t}}function El(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 _w(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 mw,Md=M(()=>{"use strict";mw={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 _Z,gZ=M(()=>{"use strict";Md();_Z={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=xv(n,t),s=n.length<=3?n.length:2,a=Math.ceil(n.length/s),o=El(s,a),l=n.map((c,f)=>({modelIndex:f,camera:Mo(i),viewport:o[f]}));return{placements:r,cells:l}}}});var vZ,EZ=M(()=>{"use strict";Md();vZ={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=El(a,o),c=s.map((f,h)=>({modelIndex:0,camera:Mo(f,void 0,i),viewport:l[h]}));return{placements:r,cells:c}}}});var SZ,TZ=M(()=>{"use strict";Md();SZ={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=_w(n,t),s=Math.min(n.length,4),a=Math.ceil(n.length/s),o=El(s,a),l=n.map((c,f)=>({modelIndex:f,camera:Mo(i),viewport:o[f]}));return{placements:r,cells:l}}}});var AZ,xZ=M(()=>{"use strict";Md();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=xv(n,t),s=pw(n.length),a=n.map((o,l)=>({modelIndex:l,camera:Mo(i),viewport:s[l]}));return{placements:r,cells:a}}}});function gw(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";RZ={name:"compose",description:"Combine multiple presets into one layout",minModels:1,maxModels:32,compute(n,e,t){return null}}});var bZ,IZ=M(()=>{"use strict";Md();bZ={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=El(1,1,0),c=[{modelIndex:0,camera:Mo(i,void 0,3+Math.max(s,a)*.5),viewport:l[0]}];return{placements:o,cells:c}}}});function bp(n){MZ.set(n.name,n)}function Ew(n){return MZ.get(n)}var MZ,CZ=M(()=>{"use strict";gZ();EZ();TZ();xZ();vw();IZ();Md();vw();MZ=new Map;bp(_Z);bp(vZ);bp(SZ);bp(AZ);bp(RZ);bp(bZ)});var DZ={};tt(DZ,{registerCodeBlockProcessor:()=>Tge,registerGridCodeBlockProcessor:()=>xge});async function PZ(n,e,t,i){var h,d,u;let r=typeof e=="string"?{path:e}:e,s=Vd(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(!Sl(a))throw yp(a)?new Error(Q("codeBlock.splatDisabled")):new Error(Ki("codeBlock.unsupportedFormat",{ext:`.${a}`,formats:Tl().join(", ")}));let o=(u=rh(n,s))!=null?u:void 0,l=Sd(t),c=await xd({path:s,absolutePath:o,preferConversionExts:Rd(t),conversionManager:l,convertedAssetCache:i}),f=_v(c);return{sourcePath:s,effectivePath:f.path,effectiveExt:f.ext,warnings:f.warnings,model:{...r,path:f.path}}}async function Sge(n,e,t,i){let r=[];for(let s of e.models){let a=await PZ(n,s,t,i);r.push(a.model)}return{...e,models:r}}function LZ(n){gr()&&n.createDiv({cls:"ai3d-mobile-mode-hint ai3d-mobile-mode-hint--inline",text:Q("codeBlock.mobileHint")})}function Tge(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 L=JSON.parse(o);l=Age(L)}catch(L){let O=s.createDiv({cls:"ai3d-json-error"}),V=String(L).match(/position\s+(\d+)/),w=Ki("codeBlock.jsonParseError",{error:String(L)});if(V){let N=parseInt(V[1],10),U=o.substring(0,N).split(` +`);w+=Ki("codeBlock.jsonParseLine",{line:String(U.length)})}O.createEl("pre",{text:w});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=Vd(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(!Sl(d)){s.createDiv({cls:"ai3d-inline-empty",text:yp(d)?Q("codeBlock.splatDisabled"):Ki("codeBlock.unsupportedFormat",{ext:`.${d}`,formats:Tl().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=mv(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 L=m.querySelector(".ai3d-annotation-overlay");L&&L.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,w,N,U,H,ee;if(T||x||!h)return;T=!0;let L=bd(m);try{let q=(O=rh(n,h))!=null?O:void 0,te=Sd(u);L.setPhaseKey("loading.preparingModel");let z=await xd({path:h,absolutePath:q,preferConversionExts:Rd(u),conversionManager:te,convertedAssetCache:t}),Y=_v(z),me=(V=i==null?void 0:i(h))!=null?V:[],Re={ext:Y.ext,annotationMode:me.length>0?"readonly":"none",rendererRollout:u.previewRendererRollout,useThreeRenderer:u.useThreeRenderer},{preview:Be}=await Ed(yZ,{surface:"code-block",modelPath:h},p,Re);_=Be,E.syncCapabilities(),L.setPhaseKey("loading.loadingModel");let ae=await ka(n,Y.path),ge=async ue=>ka(n,ue);if(x){L.hide();return}let ne=await _.loadModel(ae,Y.ext,ge,Y.path);if(L.setProgress(100),Sp(m,ne),x){L.hide();return}if(((w=l.scene)==null?void 0:w.autoRotate)===void 0&&u.autoRotateDefault&&(l.scene={...l.scene,autoRotate:!0,autoRotateSpeed:u.autoRotateSpeed}),_.applyConfig(l),(N=_.setRenderQuality)==null||N.call(_,u.renderQuality,u.renderScale),E.syncCapabilities(),me.length>0&&hv(_)){let ue=_.getAnnotationProvider();ue.canvas&&(g=new Vc(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&&((H=_.setWireframe)==null||H.call(_,f.wireframe)),(ee=_.hasAnimations)!=null&&ee.call(_)&&E.showAnimButton(),L.hide()}catch(q){x=!0,S.disconnect(),I.disconnect(),L.hide(),_==null||_.destroy(),_=null,m.replaceChildren();let te=_p(q);pp(q)?console.warn("[AI3D] Inline preview blocked by converter settings:",te.message):console.error("[AI3D] Inline preview failed:",q),Ep(m,te)}}let I=new IntersectionObserver(L=>{for(let O of L)O.isIntersecting&&(I.disconnect(),R())},{rootMargin:"200px"});I.observe(m)}}}function Age(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 xge(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=bd(r);(async()=>{var S,R,I,C;let f=[];for(let y of(S=o.models)!=null?S:[])try{let L=await PZ(n,y,l,t);f.push(L)}catch(L){c.hide(),r.createDiv({cls:"ai3d-inline-empty",text:L instanceof Error?L.message:String(L)});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(wq(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;Fq(m,()=>_?null:p);let v=mv(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 T(){var y,L,O,V,w,N,U;if(!(g||_)){g=!0,c.setPhaseKey("codeBlock.renderingGrid"),c.setProgress(-1);try{let{renderer:H}=await qj(yZ,{surface:"3dgrid",preset:(y=o.preset)!=null?y:"compare",modelCount:(O=(L=o.models)==null?void 0:L.length)!=null?O:0},m);p=H,v.syncCapabilities();let ee=p,q=async te=>ka(n,te);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 te=[];for(let Y of o.sections)try{if(!d){let Re=Y.models[0];if(Re){let Be=typeof Re=="string"?Re:Re.path;d=(V=Vd(n,Be))!=null?V:Be}}let me=await Sge(n,Y,l,t);te.push(me)}catch(me){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:me instanceof Error?me.message:String(me)}),ee.destroy(),p=null;return}let z=gw(te,(w=o.direction)!=null?w:"horizontal",Number((N=o.params)==null?void 0:N.gap)||.02,Y=>typeof Y=="string"?null:Y,Ew);if(!z){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:Q("codeBlock.composeNoValidSections")}),ee.destroy(),p=null;return}await ee.loadWithPreset(z,q)}else if(o.preset){let te=Ew(o.preset);if(!te){c.hide(),u.createDiv({cls:"ai3d-inline-empty",text:Ki("codeBlock.unknownPreset",{preset:o.preset})}),ee.destroy(),p=null;return}let z=te.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(te.minModels),max:String(te.maxModels),count:String(h.length)})}),ee.destroy(),p=null;return}await ee.loadWithPreset(z,q)}else await ee.loadModels(h,o,q);if(_){c.hide();return}c.hide()}catch(H){_=!0,x.disconnect(),E.disconnect(),c.hide(),p==null||p.destroy(),p=null,console.error("[AI3D Grid] Failed:",H),u.createDiv({cls:"ai3d-inline-empty",text:Ki("codeBlock.gridFailed",{reason:String(H)})})}}}let E=new IntersectionObserver(y=>{for(let L of y)L.isIntersecting&&(E.disconnect(),T())},{rootMargin:"200px"});E.observe(u)})()}}}var yZ,OZ=M(()=>{"use strict";yo();Fv();Ib();up();Hs();CZ();FN();kb();Hb();jN();zb();Xb();vv();gp();Mn();Yb();$s();An();qb();yZ=Wi("inline-code-block")});function Rv(n){return createDiv().createDiv(n?{cls:n}:void 0)}function Sw(n,e){return createDiv().createEl(n,e?{cls:e}:void 0)}var NZ=M(()=>{"use strict"});var BZ={};tt(BZ,{registerLivePreviewExtension:()=>bge});function wZ(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 L=S.slice(I+3,C).split("|"),O=L[0].trim(),V=(x=(v=O.split(".").pop())==null?void 0:v.toLowerCase())!=null?x:"";if(!Sl(V)){R=C+2;continue}let w=400,N=300;if(L.length>1){let q=L[1].trim().match(/^(\d+)\s*x\s*(\d+)$/);q&&(w=parseInt(q[1],10),N=parseInt(q[2],10))}let U=Vd(e,O);if(!U){R=C+2;continue}let H=E.from+I,ee=E.from+C+2;g.push(Ip.Decoration.replace({widget:new Tw(e,U,w,N,t,i,r,s,a,o,l,c,f,h,d,u,m,p),block:!0}).range(H,ee)),R=C+2}}return g}function FZ(n){return n.length===0?Cd.RangeSet.empty:Cd.RangeSet.of(n,!0)}function bge(n,e,t,i){let r=Cd.StateField.define({create(s){let a=e(),o=wZ(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 FZ(o)},update(s,a){if(a.docChanged){let o=e(),l=wZ(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 FZ(l)}return s.map(a.changes)},provide:s=>Ip.EditorView.decorations.from(s)});return[Cd.Prec.highest(r)]}var Ip,Cd,Rge,Tw,UZ=M(()=>{"use strict";Ip=require("@codemirror/view"),Cd=require("@codemirror/state");yo();Fv();Ib();up();Hs();kb();Hb();zb();Xb();vv();NZ();gp();$s();Yb();Mn();An();qb();Rge=Wi("inline-live-preview"),Tw=class extends Ip.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=gr(),i=Rv("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`),Ap(r,"live-preview",this.modelPath),xp(r,()=>this.destroyed?null:this.preview),i.appendChild(r);let a=bd(i),o=Rv("ai3d-embed-error is-hidden");if(i.appendChild(o),t){let h=!1,d=Rv("ai3d-mobile-mode-bar"),u=Rv("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=rh(this.app,this.modelPath))!=null?o:void 0,m=Sd({enabledConverterIds:this.enabledConverterIds,freecadCommand:this.freecadCommand,obj2gltfCommand:this.obj2gltfCommand,fbx2gltfCommand:this.fbx2gltfCommand,freecadcmdCommand:this.freecadcmdCommand});r.setPhaseKey("loading.preparingModel");let p=await xd({path:this.modelPath,absolutePath:u,preferConversionExts:Rd({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 Ed(Rge,{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 ka(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=>ka(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&&hv(this.preview)){let E=this.preview.getAnnotationProvider();E.canvas&&(this.annotationMgr=new Vc(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 VZ(n,e){return n==="three"?{backend:n,supportedFormats:Ige,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:Mge,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 GZ(n){return n.backend==="three"?VZ("three",["annotation","animation","measurement","disassembly","focus-selection","wireframe","orientation-gizmo","bounding-box","render-scale","workbench"]):VZ("babylon",["annotation","animation","measurement","disassembly","focus-selection","wireframe","orientation-gizmo","bounding-box","render-scale","workbench"])}function kZ(n){return[`${n.backend}`,`formats=${n.supportedFormats.join("/")}`,`capabilities=${n.capabilities.join("/")||"none"}`,`role=${n.fallbackRole}`].join("; ")}var Ige,Mge,WZ=M(()=>{"use strict";up();Ige=["glb","gltf","stl","ply","obj"],Mge=["glb","gltf","stl","ply","obj","splat","converted-glb"]});var zZ={};tt(zZ,{buildDiagnosticsReport:()=>Bge});function r0(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 Cge(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 Mp(n,e,t){if(!n)return t;if(e)return n;let i=Cge(n);return i?``:""}function bv(n,e){return n?`set (${Mp(n,e,"not set")})`:"not set"}function yge(n){let e=n.settings;return e.analysisMode==="local"?"local only":[e.analysisMode,e.serviceBaseUrl.trim()?"service configured":"service missing",`geometry ${r0(e.sendGeometrySummaryToRemote)}`,`preview refs ${r0(e.sendPreviewImagesToRemote)}`,`raw model ${e.sendRawModelToRemote?"blocked if requested":"off"}`].join(", ")}function Pge(n){let e=n.currentModelPath;return e?n.modelAssetProfiles[e]:void 0}function Lge(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 wge(n){let e=new Set(n.enabledConverterIds);return Dge.map(t=>{let i=n[t.settingsKey].trim(),r=i.length===0?"command not configured":Oge.test(i)?"command configured, unsafe command rejected":"command configured, path redacted";return`${t.label}: ${e.has(t.id)?"enabled":"disabled"}, ${r}`}).join("; ")}function Fge(n){let e=n.convertedAssetRecords;if(e.length===0)return"none";let t=new Set(e.map(r=>`${r.sourcePath}:${r.sourceExt}:${r.targetExt}`)).size,i=e.filter(r=>r.warnings.length>0).length;return[`${e.length} record(s) for ${t} source(s)`,"validated before reuse for cache version, converter identity, output presence, and source freshness",i>0?`${i} record(s) carry warning text`:""].filter(Boolean).join("; ")}function Bge(n){var c,f,h,d,u,m,p,_,g;let{manifest:e,state:t}=n,i=t.settings,r=Pge(t),s=n.includeVaultPaths===!0,a=t.currentModelPath?zd({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?GZ(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: ${HZ.apiVersion}`,`- Platform: ${gr()?"mobile":"desktop"}`,`- Locale: ${i.locale}`,"","## Renderer","",`- Use Three renderer: ${r0(i.useThreeRenderer)}`,`- Preview rollout: ${i.previewRendererRollout}`,`- Experimental Three workbench: ${r0(i.experimentalThreeWorkbench)}`,`- Current route: ${a?`${a.backend} (${a.reason})`:"no current model"}`,`- Route capability profile: ${o?kZ(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: ${Mp(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: ${bv(r==null?void 0:r.reportNotePath,s)}`,`- Analysis sidecar: ${bv(r==null?void 0:r.analysisSidecarPath,s)}`,`- Knowledge index: ${bv(r==null?void 0:r.knowledgeIndexPath,s)}`,"","## Knowledge Generation","",`- Mode: ${yge(t)}`,`- Report folder: ${Mp(i.reportFolder,s,"empty")}`,`- Part notes folder: ${Mp(i.partFolder,s,"empty")}`,`- Snapshot folder: ${Mp(i.previewFolder,s,"empty")}`,`- Last generation: ${l?`${l.status} at ${l.generatedAt}`:"none"}`,`- Last generation attention: ${Lge(t)}`,`- Last generated model: ${Mp(l==null?void 0:l.modelPath,s,"none")}`,`- Last report: ${bv(l==null?void 0:l.reportNotePath,s)}`,`- Last index: ${bv(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}`,`- Converter command status: ${wge(i)}`,`- Conversion cache status: ${Fge(t)}`,`- Conversion timeout: ${Nge}ms outer budget`,"- Converter safety: missing converters report their converter id; unsafe configured commands are rejected before execution; command paths are redacted.",`- Supported direct/model extensions: ${Tl().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 HZ,Dge,Oge,Nge,XZ=M(()=>{"use strict";HZ=require("obsidian");yo();WZ();Bv();$s();Dge=[{id:"freecad",label:"Python/CadQuery",settingsKey:"freecadCommand"},{id:"obj2gltf",label:"obj2gltf",settingsKey:"obj2gltfCommand"},{id:"fbx2gltf",label:"FBX2glTF",settingsKey:"fbx2gltfCommand"},{id:"assimp",label:"Python/trimesh",settingsKey:"assimpCommand"},{id:"freecadcmd",label:"FreeCADCmd",settingsKey:"freecadcmdCommand"}],Oge=/[;|&<>$`\r\n\t]/,Nge=3e5});var Uge={};tt(Uge,{default:()=>n0});module.exports=nQ(Uge);var Gs=require("obsidian");l0();yo();yo();var Hge=new Set(Tl());var Fc={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 Lw(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 lQ={settings:{...Fc},currentModelPath:null,convertedAssetRecords:[],modelAssetProfiles:{},agentDraft:"",agentPlan:null,modelPreview:null,selectedPart:null,lastKnowledgeGeneration:null};function Ow(n){let e=Lw(lQ),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?_:f0();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:{...Fc,...(m=d.settings)!=null?m:{}},convertedAssetRecords:(p=d.convertedAssetRecords)!=null?p:[],modelAssetProfiles:cQ(d.modelAssetProfiles),agentDraft:(_=d.agentDraft)!=null?_:"",agentPlan:(g=d.agentPlan)!=null?g:null,lastKnowledgeGeneration:dQ(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 cQ(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:hQ(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 Pp(n){return Array.isArray(n)?n.filter(e=>typeof e=="string"&&e.trim().length>0):[]}function Dw(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 fQ(n){return n==="group"||n==="mesh"||n==="component"||n==="detail-cluster"?n:void 0}function hQ(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:fQ(s.source),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:Pp(s.meshRefs),childCount:Number.isFinite(s.childCount)?Math.max(0,Math.floor(Number(s.childCount))):void 0,materialRefs:Pp(s.materialRefs),bbox:Dw(s.bbox),center:Dw(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:Pp(s.observations),inferredFunctions:Pp(s.inferredFunctions),knowledgeTags:Pp(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 dQ(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 f0(){let n=new Date().toISOString();return{tags:[],notes:"",annotations:[],registeredParts:void 0,createdAt:n,updatedAt:n}}var Dc=require("obsidian");Fv();Ib();FN();kb();Hb();jN();Hs();zb();vv();Xb();gp();Mn();Yb();$s();An();$N();Mn();function x_e(n){if(!n)return"";let e=n.split("/");return e[e.length-1]||n}function Lq(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:x_e(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}Mn();qb();function Uq(n){let{contentEl:e,filePath:t,mobile:i,getPreview:r}=n,s=e.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),xp(d,r),h.appendChild(d);let u=f.createDiv();u.className="ai3d-annot-mode-overlay is-hidden",h.appendChild(u),o.appendChild(h);let m=c.createDiv({cls:"ai3d-sidebar-content"}),p=s.createDiv({cls:"ai3d-resize-handle ai3d-resize-handle-v"}),_=s.createDiv({cls:"ai3d-direct-workbench-panel is-hidden"});return i&&o.createDiv({cls:"ai3d-mobile-mode-hint ai3d-mobile-mode-hint--inline",text:Q("directView.mobileHint")}),{workspace:s,topTrack:a,mainArea:o,hHandle:l,host:h,canvas:d,modeOverlay:u,sidebarContent:m,vHandle:p,workbenchPanel:_}}Mn();function Zb(n){return Math.round(n!=null?n:0).toLocaleString()}function M_e(n){return[n.boundingSize.x,n.boundingSize.y,n.boundingSize.z].map(e=>e.toFixed(2)).join(" x ")}function C_e(n){return n==="three"?"Three.js":"Babylon.js"}function Vq(n){var f,h;let{panel:e,summary:t,route:i,registeredPartCount:r}=n;e.empty(),e.removeClass("is-hidden"),e.dataset.ai3dBackend=i.backend,e.dataset.ai3dRouteReason=i.reason;let s=e.createDiv({cls:"ai3d-direct-workbench-overview"}),a=s.createDiv({cls:"ai3d-direct-workbench-status"}),o=a.createDiv({cls:"ai3d-direct-workbench-line"});o.createSpan({cls:"ai3d-direct-workbench-label",text:Q("directWorkbench.backendLabel")}),o.createSpan({cls:"ai3d-direct-workbench-value",text:C_e(i.backend)});let l=a.createDiv({cls:"ai3d-direct-workbench-line ai3d-direct-workbench-route"});l.createSpan({cls:"ai3d-direct-workbench-label",text:Q("directWorkbench.routeLabel")}),l.createSpan({cls:"ai3d-direct-workbench-value",text:i.reason});let c=s.createDiv({cls:"ai3d-direct-workbench-metrics"});Rp(c,Q("workbench.meshesLabel"),Zb(t.meshCount)),Rp(c,Q("directWorkbench.partCandidatesLabel"),Zb(r)),Rp(c,t.splatCount!==void 0?Q("workbench.splatsLabel"):Q("workbench.trianglesLabel"),Zb((f=t.splatCount)!=null?f:t.triangleCount)),Rp(c,Q("workbench.materialsLabel"),Zb(t.materialCount)),Rp(c,Q("workbench.boundingSizeLabel"),M_e(t)),Rp(c,Q("directWorkbench.performanceLabel"),(h=t.performanceTier)!=null?h:"light")}function Rp(n,e,t){let i=n.createDiv({cls:"ai3d-direct-workbench-metric"});i.createSpan({cls:"ai3d-direct-workbench-label",text:e}),i.createSpan({cls:"ai3d-direct-workbench-value",text:t})}var Gq=new Set(["glb","gltf","stl","ply","obj"]),kq=new Set(["glb","gltf"]);function y_e(n,e){return n.experimentalThreeWorkbench&&n.useThreeRenderer&&e.strategy==="direct"&&kq.has(e.ext)&&kq.has(e.sourceExt)}function P_e(n){return n.strategy==="direct"&&Gq.has(n.ext)&&Gq.has(n.sourceExt)}function Wq(n,e){let t=y_e(n,e);return{ext:e.ext,annotationMode:"edit",allowEditModeOnThree:!0,allowWorkbenchFeaturesOnThree:t,requireWorkbenchFeatures:t||!P_e(e),rendererRollout:n.previewRendererRollout,useThreeRenderer:n.useThreeRenderer}}var e0="ai3d-direct-view",fw=Wi("direct-view");function pge(n){return n instanceof Error&&n.message.includes("Missing external model resource:")}function uZ(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 _ge(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 Jb=class extends Dc.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 e0}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 v,x,T,E,S,R,I,C,y;let i=++this.loadGeneration,r=gr();(v=this.annotationMgr)==null||v.destroy(),this.annotationMgr=null,this.workbenchPanel=null,this.workbenchSummary=null,this.workbenchRoute=null,this.workbenchModelPath=null,this.sidebarContent=null,(x=this.preview)==null||x.destroy(),this.preview=null,this.ps.setCurrentModel(t.path,null);let{workspace:s,topTrack:a,mainArea:o,hHandle:l,host:c,canvas:f,modeOverlay:h,sidebarContent:d,vHandle:u,workbenchPanel:m}=Uq({contentEl:this.contentEl,filePath:t.path,mobile:r,getPreview:()=>this.preview}),p=null,_=L=>{var O;this.annotationMode=L,r&&L&&(p==null||p.setMobileInteractionMode(!0)),(O=this.annotationMgr)==null||O.hideEditor(),h.classList.toggle("is-hidden",!L)};this.escHandler&&activeDocument.removeEventListener("keydown",this.escHandler),this.escHandler=L=>{L.key==="Escape"&&this.annotationMode&&_(!1)},activeDocument.addEventListener("keydown",this.escHandler),p=mv(o,c,this.app,()=>this.preview,()=>t.path,()=>{this.leaf.detach()},this.getSettings,()=>(_(!this.annotationMode),this.annotationMode),L=>{!L&&this.annotationMode&&_(!1)}),this.sidebarContent=d,this.workbenchPanel=m,this.setupResizeHandles(l,u,a,s);let g=bd(c);try{let L=this.getSettings(),O=Sd(L),V=(T=rh(this.app,t.path))!=null?T:void 0;g.setPhaseKey("loading.preparingModel");let w=await xd({path:t.path,absolutePath:V,preferConversionExts:Rd(L),conversionManager:O,convertedAssetCache:this.convertedAssetCache});if(i!==this.loadGeneration){new Dc.Notice(Q("directWorkbench.modelLoadInterrupted"));return}let N=_v(w),U=Wq(L,N);p==null||p.syncCapabilities(),g.setPhaseKey("loading.loadingModel");let H=await ka(this.app,N.path),ee=await this.createPreviewWithFallback(f,H,N,U,t.path);if(i!==this.loadGeneration){ee.preview.destroy(),new Dc.Notice(Q("directWorkbench.modelLoadInterrupted"));return}this.preview=ee.preview,c.dataset.ai3dBackend=ee.route.backend,c.dataset.ai3dRouteReason=ee.route.reason,p==null||p.syncCapabilities();let q=ee.summary,te=(R=(S=(E=this.preview).getModelEvidence)==null?void 0:S.call(E))!=null?R:null;this.registerModelPartsFromEvidence(t.path,te),Sp(c,q),this.workbenchPanel=m,this.workbenchSummary=q,this.workbenchRoute=ee.route,this.workbenchModelPath=t.path,this.renderWorkbenchPanel(m,q,ee.route,t.path),this.renderSidebarContent(t.path,q),this.ps.setCurrentModel(t.path,q),fw.info("direct view model loaded",{path:t.path,effectivePath:N.path,effectiveExt:N.ext,strategy:N.strategy,backend:ee.route.backend,routeReason:ee.route.reason,meshCount:q.meshCount,triangleCount:q.triangleCount}),g.setProgress(100);let z=this.preview.getAnnotationProvider();if(z.canvas){let Y=this.ps.store.getState().modelAssetProfiles[t.path],me=(I=Y==null?void 0:Y.annotations)!=null?I:[],Re=vp(this.app),Be=Iq(this.app);this.annotationMgr=new Vc(z,c,"edit",me,ae=>{this.ps.updateModelProfile(t.path,ge=>({annotations:ae})),p.updateAnnotationBadge(ae.length)},Re,Be,{app:this.app,previewMode:this.getSettings().annotationPreviewMode,displayMode:this.getSettings().annotationDisplayMode}),p.showAnnotateButton(),p.updateAnnotationBadge(me.length),this.preview.onPick(ae=>{var De,de;if(!this.annotationMode||!this.annotationMgr)return;let ge=ae.screenX,ne=ae.screenY,ue=(de=(De=this.preview)==null?void 0:De.getPickWorldPoint(ae))!=null?de:null;ue&&this.annotationMgr.showEditor(ge,ne,ue)})}g.hide()}catch(L){if(i!==this.loadGeneration)return;g.hide(),(C=this.preview)==null||C.destroy(),this.preview=null,c.replaceChildren(),(y=this.workbenchPanel)==null||y.addClass("is-hidden");let O=_p(L);pp(L)?console.warn("[AI3D] Direct view blocked by converter settings:",O.message):console.error("[AI3D] Direct view failed:",L),this.ps.store.getState().currentModelPath===t.path&&this.ps.clearModelPreview(),Ep(c,O)}}registerModelPartsFromEvidence(t,i){var c,f;if(!(i!=null&&i.parts.length))return;let r=QN(t,i.parts);if(r.length===0)return;let a=(c=this.ps.store.getState().modelAssetProfiles[t])!=null?c:f0(),o=new Map(((f=a.registeredParts)!=null?f:[]).map(h=>[uZ(h),h])),l=r.map(h=>_ge(o.get(uZ(h)),h));this.ps.updateModelProfile(t,h=>({registeredParts:l}))}renderWorkbenchPanel(t,i,r,s){var a,o;Vq({panel:t,summary:i,route:r,registeredPartCount:(o=(a=this.ps.store.getState().modelAssetProfiles[s])==null?void 0:a.registeredParts)==null?void 0:o.length})}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`},()=>{})}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(()=>($b(),Qb)).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 Dc.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 Dc.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(()=>($b(),Qb)).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=jb({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,L,O,V,w;return((L=(y=(C=I.registeredMatches)==null?void 0:C[0])==null?void 0:y.matchScore)!=null?L:0)-((w=(V=(O=R.registeredMatches)==null?void 0:O[0])==null?void 0:V.matchScore)!=null?w: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=Lq(E,R.name,I).querySelector("[data-ai3d-action='open-registered-part']");y instanceof HTMLButtonElement&&y.addEventListener("click",()=>{let L=y.getAttribute("data-ai3d-target-path")||void 0;if(!L)return;let O=this.app.vault.getAbstractFileByPath(L);O instanceof Dc.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 Ed(fw,{surface:"direct-view",modelPath:a},t,s);try{let l=await o.preview.loadModel(i.slice(0),r.ext,c=>ka(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 Ed(fw,{surface:"direct-view-fallback",modelPath:a},t,c);try{let h=await f.preview.loadModel(i.slice(0),r.ext,d=>ka(this.app,d),r.path);return{preview:f.preview,summary:h,route:f.route}}catch(h){throw f.preview.destroy(),pge(l)?l:h}}}};var mZ=require("obsidian");yo();Mn();var t0=class extends mZ.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 Sl(t)})}getItemText(e){return e.path}onChooseItem(e){this.onChoose(e)}};Mn();vv();Hs();var Tv=".markdown-preview-view, .markdown-source-view",Av=[".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 gge(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 dw(n){return n.map(e=>`${e.pinId}:${e.modelPath}:${e.color}`).sort().join("|")}function hw(n){return Array.from(n.entries()).map(([e,t])=>`${e}=>${dw(t)}`).sort().join("||")}function pZ(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=gv(C.headingRef);if(!y)continue;let L=E.get(y);L||(L=[],E.set(y,L)),L.push({pinId:C.id,modelPath:R,color:C.color})}return E},i=E=>gv(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=dw(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(N=>N.color).filter(Boolean))],L=C.createSpan({cls:"ai3d-heading-pin-badge-swatch"});if(L.style.background=gge(y),L.title=S.length>1?Q("headingPin.showMultiple"):Q("headingPin.showSingle"),L.setAttribute("role","button"),L.setAttribute("tabindex","0"),S.length>1){let N=C.createSpan({cls:"ai3d-heading-pin-badge-count"});N.textContent=`\xD7${S.length}`}let O=[...new Set(S.map(N=>Zr(N.modelPath)))];C.title=Ki("headingPin.linkedTo",{models:O.join(", ")});let V=N=>{N==null||N.stopPropagation(),N==null||N.preventDefault();for(let U of S)activeDocument.dispatchEvent(new CustomEvent("ai3d-pin-highlight",{detail:{pinId:U.pinId}}))};L.addEventListener("click",N=>{V(N)}),L.addEventListener("keydown",N=>{N.instanceOf(KeyboardEvent)&&(N.key!=="Enter"&&N.key!==" "||V(N))}),C.addEventListener("click",N=>{N.stopPropagation()}),E.appendChild(C);let w=()=>{for(let N of S)activeDocument.dispatchEvent(new CustomEvent("ai3d-pin-highlight",{detail:{pinId:N.pinId}}))};E.addEventListener("mouseover",w),e.set(E,{badge:C,handler:w,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=dw(C);(C.length===0||I.signature!==y)&&s(R,C)}},l=(E,S)=>{E.querySelectorAll(Av).forEach(R=>a(R,S))},c=()=>{let E=t();o(E),activeDocument.querySelectorAll(Tv).forEach(R=>l(R,E))},f=hw(t()),h=0,d=(E=0)=>{h&&window.clearTimeout(h),h=window.setTimeout(()=>{h=0,c()},E)},u=n.subscribeStore(()=>{let E=t(),S=hw(E);S!==f&&(f=S,d())});n.onLayoutChange(()=>{d(200)});let m=E=>E.matches(Tv)||E.matches(Av)?!0:!!E.querySelector(Tv)||!!E.querySelector(Av),p=E=>E.isConnected&&m(E),_=E=>m(E),g=new Set,v=0,x=()=>{var R,I,C,y,L,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,Av)&&a(V,S),(C=(I=V.querySelectorAll)==null?void 0:I.call(V,Av))==null||C.forEach(w=>a(w,S)),(y=V.matches)!=null&&y.call(V,Tv)&&l(V,S),(O=(L=V.querySelectorAll)==null?void 0:L.call(V,Tv))==null||O.forEach(w=>l(w,S)));f=hw(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");eh();Mn();$s();fr();var uw=Pv();function vge(){switch(uw==null?void 0:uw.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 i0=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(),Lp(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(Fc.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(Fc.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(Fc.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(Fc.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(),gr()){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=vge();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 Nb(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")}: ${Ob(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})}};eh();An();Mn();$s();var YZ=Wi("main");function Iv(n,e){return()=>{n().catch(t=>{YZ.error(`Command ${e} failed`,{error:String(t)}),new Gs.Notice(`AI3D: ${e} failed \u2014 ${String(t)}`,5e3)})}}var n0=class extends Gs.Plugin{getSettings(){return this.ps.store.getState().settings}updateSettings(e){this.ps.updateSettings(e),PN(this.getSettings().logLevel),Lp(this.getSettings().locale)}async onload(){var l;if(this.ps=Ow(this),await this.ps.load(),this.convertedAssetCache=yw(this.ps.store.getState().convertedAssetRecords,c=>this.ps.setConvertedAssetRecords(c)),PN(this.getSettings().logLevel),!this.ps.localeLoadedFromSaved){let f=((l=navigator.language)!=null?l:"en").startsWith("zh")?"zh-CN":"en";this.updateSettings({locale:f})}Lp(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:Iv(()=>this.generateNote(),"generate note")}),this.addCommand({id:"open-knowledge-index",name:Q("main.commandOpenKnowledgeIndex"),callback:Iv(()=>this.openKnowledgeIndex(),"open knowledge index")}),this.addCommand({id:"clear-conversion-cache",name:Q("main.commandClearConversionCache"),callback:Iv(()=>Promise.resolve(this.clearConversionCache()),"clear conversion cache")}),this.addCommand({id:"check-converters",name:Q("main.commandCheckConverters"),callback:Iv(()=>this.checkConverterCommands(),"check converters")}),this.addCommand({id:"copy-diagnostics-report",name:Q("main.commandCopyDiagnostics"),callback:Iv(()=>this.copyDiagnosticsReport(),"copy diagnostics")}),this.addSettingTab(new i0(this.app,this)),this.registerView(e0,c=>new Jb(c,()=>this.getSettings(),this.convertedAssetCache,this.ps)),this.registerExtensions(Tl(),e0);let{registerCodeBlockProcessor:e,registerGridCodeBlockProcessor:t}=await Promise.resolve().then(()=>(OZ(),DZ)),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(()=>(UZ(),BZ)),o=a(this.app,()=>this.getSettings(),this.convertedAssetCache,i);for(let c of o)this.registerEditorExtension(c);pZ({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 t0(this.app,e=>{let t=e.extension.toLowerCase();Sl(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(()=>($b(),Qb));await e(this.app,this.ps)}async openKnowledgeIndex(){let e=this.resolveKnowledgeIndexPath();if(!e){new Gs.Notice(Q("workbench.noIndexYet"));return}let t=this.app.vault.getAbstractFileByPath(e);t instanceof Gs.TFile?await this.app.workspace.getLeaf(!0).openFile(t,{active:!0}):new Gs.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 Gs.Notice("AI 3d conversion cache cleared.")}async checkConverterCommands(){if(gr()){new Gs.Notice(Q("main.converterDiagnosticsMobileUnavailable"),8e3);return}let e=await Nb(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 Gs.Notice(`AI 3D converter diagnostics: all commands available (${t.join(", ")}).`,8e3);return}new Gs.Notice(`AI 3D converter diagnostics: available ${t.join(", ")||"none"}; missing ${i.join(", ")}.`,1e4)}async copyDiagnosticsReport(){let{buildDiagnosticsReport:e}=await Promise.resolve().then(()=>(XZ(),zZ)),t=e({manifest:this.manifest,state:this.ps.store.getState()});try{await navigator.clipboard.writeText(t),new Gs.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 Gs.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=>{YZ.warn("Failed to create vault folder",{path:t,error:String(r)})})}}; diff --git a/src/domain/models.ts b/src/domain/models.ts index b56f2e6..8b50e4c 100644 --- a/src/domain/models.ts +++ b/src/domain/models.ts @@ -149,7 +149,7 @@ export interface ModelPreviewSummary { rootName: string; } -export type ModelPartSource = "mesh" | "group" | "component"; +export type ModelPartSource = "mesh" | "group" | "component" | "detail-cluster"; export interface ModelPartSummary { name: string; diff --git a/src/render/preview/evidence.test.ts b/src/render/preview/evidence.test.ts index 3aa4871..f6117d4 100644 --- a/src/render/preview/evidence.test.ts +++ b/src/render/preview/evidence.test.ts @@ -1,21 +1,48 @@ import { describe, expect, it } from "vitest"; import { createPreviewEvidence, createPreviewMaterialSummaryLabel } from "./evidence"; +import type { ModelPartSummary, ModelPreviewSummary } from "../../domain/models"; + +interface TestMesh { + id: string; + materialNames: Array; + size?: number; + source?: ModelPartSummary["source"]; +} + +function createSummary(span = 10): ModelPreviewSummary { + return { + meshCount: 3, + triangleCount: 42, + vertexCount: 84, + materialCount: 3, + boundingSize: { x: span, y: span, z: span }, + rootName: "assembly", + }; +} + +function createMeshPart(mesh: TestMesh): ModelPartSummary { + const size = mesh.size ?? 1; + return { + name: mesh.id, + triangleCount: 10, + vertexCount: 20, + materialName: mesh.materialNames[0] ?? null, + boundingSize: { x: size, y: size, z: size }, + center: { x: 0, y: 0, z: 0 }, + source: mesh.source ?? "mesh", + meshNames: [mesh.id], + childCount: 1, + }; +} describe("preview evidence helpers", () => { it("builds evidence from grouped and ungrouped meshes without leaving grouped meshes behind", () => { - const groupedMesh = { id: "grouped", materialNames: ["Steel", "Glass"] }; - const meshA = { id: "mesh-a", materialNames: ["Rubber", "Steel"] }; - const meshB = { id: "mesh-b", materialNames: [undefined, "Aluminum"] }; + const groupedMesh: TestMesh = { id: "grouped", materialNames: ["Steel", "Glass"] }; + const meshA: TestMesh = { id: "named-shell", materialNames: ["Rubber", "Steel"] }; + const meshB: TestMesh = { id: "named-cover", materialNames: [undefined, "Aluminum"] }; const evidence = createPreviewEvidence({ - summary: { - meshCount: 3, - triangleCount: 42, - vertexCount: 84, - materialCount: 3, - boundingSize: { x: 1, y: 2, z: 3 }, - rootName: "assembly", - }, + summary: createSummary(3), renderableMeshes: [groupedMesh, meshA, meshB], groupedPartCandidates: { parts: [{ @@ -31,26 +58,107 @@ describe("preview evidence helpers", () => { }], groupedMeshes: new Set([groupedMesh]), }, - createMeshPart: (mesh) => ({ - name: mesh.id, - triangleCount: 1, - vertexCount: 2, - materialName: mesh.materialNames[0] ?? null, - boundingSize: { x: 1, y: 1, z: 1 }, - center: { x: 0, y: 0, z: 0 }, - source: "mesh", - }), + createMeshPart, getMeshMaterialNames: (mesh) => mesh.materialNames, resourceWarnings: ["missing texture"], capturedAt: "2026-06-22T00:00:00.000Z", }); - expect(evidence.parts.map((part) => part.name)).toEqual(["Grouped Part", "mesh-a", "mesh-b"]); + expect(evidence.parts.map((part) => part.name)).toEqual(["Grouped Part", "named-shell", "named-cover"]); expect(evidence.materialNames).toEqual(["Aluminum", "Glass", "Rubber", "Steel"]); expect(evidence.resourceWarnings).toEqual(["missing texture"]); expect(evidence.capturedAt).toBe("2026-06-22T00:00:00.000Z"); }); + it("clusters generic tiny mesh fragments into a single detail part", () => { + const meshA: TestMesh = { id: "mesh-101", materialNames: ["Steel"], size: 0.2 }; + const meshB: TestMesh = { id: "points-102", materialNames: ["Steel"], size: 0.15 }; + const namedSmallPart: TestMesh = { id: "tiny_screw_01", materialNames: ["Steel"], size: 0.12 }; + + const evidence = createPreviewEvidence({ + summary: createSummary(10), + renderableMeshes: [meshA, meshB, namedSmallPart], + groupedPartCandidates: { parts: [], groupedMeshes: new Set() }, + createMeshPart, + getMeshMaterialNames: (mesh) => mesh.materialNames, + capturedAt: "2026-06-22T00:00:00.000Z", + }); + + expect(evidence.parts.map((part) => part.name)).toEqual(["Small detail cluster", "tiny_screw_01"]); + expect(evidence.parts[0]).toMatchObject({ + source: "detail-cluster", + childCount: 2, + meshNames: ["mesh-101", "points-102"], + materialName: "Steel", + }); + }); + + it("keeps semantically named tiny mesh parts separate", () => { + const screw: TestMesh = { id: "tiny_screw_01", materialNames: ["Steel"], size: 0.1 }; + const pin: TestMesh = { id: "pin_02", materialNames: ["Copper"], size: 0.1 }; + + const evidence = createPreviewEvidence({ + summary: createSummary(10), + renderableMeshes: [screw, pin], + groupedPartCandidates: { parts: [], groupedMeshes: new Set() }, + createMeshPart, + getMeshMaterialNames: (mesh) => mesh.materialNames, + capturedAt: "2026-06-22T00:00:00.000Z", + }); + + expect(evidence.parts.map((part) => part.name)).toEqual(["tiny_screw_01", "pin_02"]); + expect(evidence.parts.every((part) => part.source === "mesh")).toBe(true); + }); + + it("preserves explicit group and component candidates while clustering generic mesh fragments", () => { + const groupedMesh: TestMesh = { id: "grouped", materialNames: ["Paint"] }; + const componentMesh: TestMesh = { id: "component-mesh", materialNames: ["Copper"] }; + const meshA: TestMesh = { id: "mesh-1", materialNames: ["Plastic"], size: 0.1 }; + const meshB: TestMesh = { id: "mesh-2", materialNames: ["Plastic"], size: 0.1 }; + + const evidence = createPreviewEvidence({ + summary: createSummary(10), + renderableMeshes: [groupedMesh, componentMesh, meshA, meshB], + groupedPartCandidates: { + parts: [ + { + name: "Named Housing", + triangleCount: 30, + vertexCount: 60, + materialName: "Paint", + boundingSize: { x: 2, y: 2, z: 2 }, + center: { x: 0, y: 0, z: 0 }, + source: "group", + meshNames: ["grouped"], + childCount: 1, + }, + { + name: "Component Pin Bank", + triangleCount: 20, + vertexCount: 40, + materialName: "Copper", + boundingSize: { x: 1, y: 1, z: 1 }, + center: { x: 1, y: 1, z: 1 }, + source: "component", + meshNames: ["component-mesh"], + childCount: 1, + componentId: "pin-bank", + }, + ], + groupedMeshes: new Set([groupedMesh, componentMesh]), + }, + createMeshPart, + getMeshMaterialNames: (mesh) => mesh.materialNames, + capturedAt: "2026-06-22T00:00:00.000Z", + }); + + expect(evidence.parts.map((part) => [part.name, part.source])).toEqual([ + ["Named Housing", "group"], + ["Component Pin Bank", "component"], + ["Small detail cluster", "detail-cluster"], + ]); + }); + it("summarizes grouped material names consistently", () => { expect(createPreviewMaterialSummaryLabel(new Set())).toBeNull(); expect(createPreviewMaterialSummaryLabel(new Set(["Steel"]))).toBe("Steel"); diff --git a/src/render/preview/evidence.ts b/src/render/preview/evidence.ts index ed2ed2a..22d89f8 100644 --- a/src/render/preview/evidence.ts +++ b/src/render/preview/evidence.ts @@ -1,4 +1,10 @@ import type { ModelEvidence, ModelPartSummary, ModelPreviewSummary } from "../../domain/models"; +import { + getPreviewBoundsCenter, + getPreviewBoundsSize, + mergePreviewBounds, + type PreviewBounds, +} from "./bounds"; export interface PreviewGroupedPartCandidates { parts: readonly ModelPartSummary[]; @@ -25,6 +31,103 @@ export function createPreviewMaterialSummaryLabel(materialNames: ReadonlySet 0 && span <= modelSpan * 0.04; +} + +function createDetailClusterPart(parts: readonly ModelPartSummary[]): ModelPartSummary { + let bounds: PreviewBounds | null = null; + let triangleCount = 0; + let vertexCount = 0; + const materialNames = new Set(); + const meshNames: string[] = []; + + for (const part of parts) { + bounds = mergePreviewBounds(bounds, partToBounds(part)); + triangleCount += part.triangleCount; + vertexCount += part.vertexCount; + if (part.materialName) { + materialNames.add(part.materialName); + } + meshNames.push(...(part.meshNames?.length ? part.meshNames : [part.name])); + } + + const safeBounds = bounds ?? { + min: { x: 0, y: 0, z: 0 }, + max: { x: 0, y: 0, z: 0 }, + }; + + return { + name: "Small detail cluster", + triangleCount, + vertexCount, + materialName: createPreviewMaterialSummaryLabel(materialNames), + boundingSize: getPreviewBoundsSize(safeBounds), + center: getPreviewBoundsCenter(safeBounds), + source: "detail-cluster", + meshNames, + childCount: parts.length, + }; +} + +function refinePreviewEvidenceParts( + summary: ModelPreviewSummary, + groupedParts: readonly ModelPartSummary[], + meshParts: readonly ModelPartSummary[], +): ModelPartSummary[] { + const modelSpan = getModelSpan(summary); + const detailFragments = meshParts.filter((part) => shouldClusterTinyMeshPart(part, modelSpan)); + if (detailFragments.length < 2) { + return groupedParts.length > 0 ? [...groupedParts, ...meshParts] : [...meshParts]; + } + + const detailFragmentSet = new Set(detailFragments); + const keptMeshParts = meshParts.filter((part) => !detailFragmentSet.has(part)); + return [ + ...groupedParts, + createDetailClusterPart(detailFragments), + ...keptMeshParts, + ]; +} + export function createPreviewEvidence(input: CreatePreviewEvidenceInput): ModelEvidence { return { summary: input.summary, @@ -40,9 +143,7 @@ function createPreviewEvidenceParts(input: CreatePreviewEvidenceInput !input.groupedPartCandidates.groupedMeshes.has(mesh)) .map((mesh) => input.createMeshPart(mesh)); - return input.groupedPartCandidates.parts.length > 0 - ? [...input.groupedPartCandidates.parts, ...meshParts] - : meshParts; + return refinePreviewEvidenceParts(input.summary, input.groupedPartCandidates.parts, meshParts); } function collectPreviewMaterialNames( diff --git a/src/render/three/mesh-preview.test.ts b/src/render/three/mesh-preview.test.ts index 07c3c4d..d6056d3 100644 --- a/src/render/three/mesh-preview.test.ts +++ b/src/render/three/mesh-preview.test.ts @@ -1,9 +1,20 @@ -import { BoxGeometry, Mesh, MeshStandardMaterial, Object3D } from "three"; +import { + BoxGeometry, + BufferAttribute, + BufferGeometry, + Mesh, + MeshStandardMaterial, + Object3D, + Points, + PointsMaterial, +} from "three"; import { describe, expect, it } from "vitest"; import { createThreeGroupedPartCandidates, createThreeModelPreviewSummary, createThreePartPreviewSummary, + createThreeRenderableInfoBreakdown, + createThreeRenderablePartPreviewSummary, } from "./mesh-preview"; function createBox(name: string, materialName: string): Mesh { @@ -33,6 +44,46 @@ describe("three mesh preview helpers", () => { expect(summary.boundingSize).toEqual({ x: 2, y: 4, z: 6 }); }); + it("summarizes point clouds as renderable evidence without faking triangles", () => { + const root = new Object3D(); + root.name = "scan-root"; + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new BufferAttribute(new Float32Array([ + 0, 0, 0, + 0.01, 0, 0, + 0, 0.02, 0, + ]), 3)); + const points = new Points(geometry, new PointsMaterial({ name: "scan-points" })); + points.name = "micro-scan"; + root.add(points); + + const summary = createThreeModelPreviewSummary(root, [points]); + const part = createThreeRenderablePartPreviewSummary(points, root); + const breakdown = createThreeRenderableInfoBreakdown(points); + + expect(summary).toMatchObject({ + meshCount: 1, + triangleCount: 0, + vertexCount: 3, + materialCount: 1, + rootName: "scan-root", + }); + expect(part).toMatchObject({ + name: "micro-scan", + triangleCount: 0, + vertexCount: 3, + materialName: "scan-points", + source: "mesh", + meshNames: ["micro-scan"], + }); + expect(breakdown).toMatchObject({ + name: "micro-scan", + triangleCount: null, + vertexCount: 3, + materialName: "scan-points", + }); + }); + it("promotes explicit component metadata on individual meshes", () => { const root = new Object3D(); const mesh = createBox("pin-body", "steel"); diff --git a/src/render/three/mesh-preview.ts b/src/render/three/mesh-preview.ts index d4df20c..1b77d56 100644 --- a/src/render/three/mesh-preview.ts +++ b/src/render/three/mesh-preview.ts @@ -3,8 +3,10 @@ import { Material, Mesh, Object3D, + Points, } from "three"; import type { ModelPartSummary, ModelPreviewSummary } from "../../domain/models"; +import type { PreviewMeshBreakdownRow } from "../preview/report"; import { createPreviewBounds, getPreviewBoundsCenter, @@ -21,25 +23,36 @@ import { createPreviewPartSummary, } from "../preview/summary"; +export type ThreeRenderableObject = Mesh | Points; + export function isThreeMesh(value: unknown): value is Mesh { return value instanceof Mesh; } +export function isThreePoints(value: unknown): value is Points { + return value instanceof Points; +} + +export function isThreeRenderableObject(value: unknown): value is ThreeRenderableObject { + return isThreeMesh(value) || isThreePoints(value); +} + export function getThreeMaterialList(material: Material | Material[] | undefined | null): Material[] { if (!material) return []; return Array.isArray(material) ? material : [material]; } -export function getThreeTriangleCount(mesh: Mesh): number { - const geometry = mesh.geometry; +export function getThreeTriangleCount(object: ThreeRenderableObject): number { + if (isThreePoints(object)) return 0; + const geometry = object.geometry; const indexCount = geometry.getIndex()?.count ?? 0; if (indexCount > 0) return Math.floor(indexCount / 3); const positionCount = geometry.getAttribute("position")?.count ?? 0; return Math.floor(positionCount / 3); } -export function getThreeVertexCount(mesh: Mesh): number { - return mesh.geometry.getAttribute("position")?.count ?? 0; +export function getThreeVertexCount(object: ThreeRenderableObject): number { + return object.geometry.getAttribute("position")?.count ?? 0; } export function describeThreeMaterial(material: Material | null | undefined): string | null { @@ -76,6 +89,10 @@ export function getThreeMeshMaterialNames(mesh: Mesh): Array { return getThreeMaterialList(mesh.material).map((material) => describeThreeMaterial(material)); } +export function getThreeRenderableMaterialNames(object: ThreeRenderableObject): Array { + return getThreeMaterialList(object.material).map((material) => describeThreeMaterial(material)); +} + export function createThreeMeshInfoBreakdown(mesh: Mesh): { name: string; triangleCount: number; @@ -90,6 +107,16 @@ export function createThreeMeshInfoBreakdown(mesh: Mesh): { }; } +export function createThreeRenderableInfoBreakdown(object: ThreeRenderableObject): PreviewMeshBreakdownRow { + const name = getThreeObjectDisplayName(object, isThreePoints(object) ? `points-${object.id}` : `mesh-${object.id}`); + return { + name, + triangleCount: isThreePoints(object) ? null : getThreeTriangleCount(object), + vertexCount: getThreeVertexCount(object), + materialName: describeThreeMaterial(getThreeMaterialList(object.material)[0]), + }; +} + export function createThreePartPreviewSummary(mesh: Mesh, root: Object3D | null): ModelPartSummary { mesh.updateWorldMatrix(true, false); const bounds = getThreeObjectPreviewBounds(mesh); @@ -115,6 +142,38 @@ export function createThreePartPreviewSummary(mesh: Mesh, root: Object3D | null) }); } +export function createThreeRenderablePartPreviewSummary( + object: ThreeRenderableObject, + root: Object3D | null, +): ModelPartSummary { + if (isThreeMesh(object)) { + return createThreePartPreviewSummary(object, root); + } + + object.updateWorldMatrix(true, false); + const bounds = getThreeObjectPreviewBounds(object); + const name = getThreeObjectDisplayName(object, `points-${object.id}`); + const identity = extractPreviewComponentIdentity(object.userData, { + name, + path: root ? getThreeObjectComponentPath(root, object) : name, + }); + return createPreviewPartSummary({ + name: getPartDisplayName(identity, name), + triangleCount: 0, + vertexCount: getThreeVertexCount(object), + materialName: describeThreeMaterial(getThreeMaterialList(object.material)[0]), + boundingSize: getPreviewBoundsSize(bounds), + center: getPreviewBoundsCenter(bounds), + source: identity.hasExplicitIdentity ? "component" : "mesh", + meshNames: [name], + childCount: 1, + componentId: identity.componentId, + occurrenceId: identity.occurrenceId, + partNumber: identity.partNumber, + componentPath: identity.componentPath, + }); +} + export function createThreeGroupedPartCandidates( root: Object3D, renderableMeshes: readonly Mesh[], @@ -209,16 +268,16 @@ export function createThreeGroupedPartCandidates( export function createThreeModelPreviewSummary( root: Object3D, - renderableMeshes: readonly Mesh[], + renderableObjects: readonly ThreeRenderableObject[], resourceWarnings: readonly string[] = [], ): ModelPreviewSummary { return createPreviewModelSummary({ rootName: root.name || "__root__", boundingSize: getPreviewBoundsSize(getThreeObjectPreviewBounds(root)), - meshes: renderableMeshes.map((mesh) => ({ - triangleCount: getThreeTriangleCount(mesh), - vertexCount: getThreeVertexCount(mesh), - materialKeys: getThreeMaterialList(mesh.material).map((material) => material.uuid), + meshes: renderableObjects.map((object) => ({ + triangleCount: getThreeTriangleCount(object), + vertexCount: getThreeVertexCount(object), + materialKeys: getThreeMaterialList(object.material).map((material) => material.uuid), })), resourceWarnings, }); diff --git a/src/render/three/scene.ts b/src/render/three/scene.ts index af7334e..51ba49e 100644 --- a/src/render/three/scene.ts +++ b/src/render/three/scene.ts @@ -106,13 +106,15 @@ import { import { shouldContinueThreeRenderLoop, ThreeSmoothnessTracker } from "./smoothness"; import { createThreeGroupedPartCandidates, - createThreeMeshInfoBreakdown, createThreeModelPreviewSummary, - createThreePartPreviewSummary, + createThreeRenderableInfoBreakdown, + createThreeRenderablePartPreviewSummary, getThreeMaterialList as materialList, - getThreeMeshMaterialNames, + getThreeRenderableMaterialNames, getThreeObjectPreviewBounds as getObjectPreviewBounds, + isThreeRenderableObject, isThreeMesh as isMesh, + type ThreeRenderableObject, } from "./mesh-preview"; const DEFAULT_BACKGROUND = new Color("#20242e"); @@ -277,6 +279,8 @@ export class ThreeModelPreview implements WorkbenchPreview { private stlMaterial: MeshStandardMaterial | null = null; private cachedMeshes: Mesh[] | null = null; private cachedMeshRoot: Object3D | null = null; + private cachedRenderables: ThreeRenderableObject[] | null = null; + private cachedRenderableRoot: Object3D | null = null; private cameraAnimHandle = 0; private readonly preventCanvasWheelScroll = (event: WheelEvent) => { this.prepareInteractiveFrameBudget(); @@ -454,7 +458,7 @@ export class ThreeModelPreview implements WorkbenchPreview { this.animationPlaying = true; } - const summary = createThreeModelPreviewSummary(root, this.getRenderableMeshes(root), this.resourceWarnings); + const summary = createThreeModelPreviewSummary(root, this.getRenderableObjects(root), this.resourceWarnings); this.fitCameraToObject(root); if (this.bboxEnabled) { this.ensureBoundingBoxHelper(); @@ -554,27 +558,32 @@ export class ThreeModelPreview implements WorkbenchPreview { exportModelInfo(modelPath?: string): string { if (!this.rootObject) return ""; - const renderableMeshes = this.getRenderableMeshes(this.rootObject); - const summary = createThreeModelPreviewSummary(this.rootObject, renderableMeshes, this.resourceWarnings); + const renderableObjects = this.getRenderableObjects(this.rootObject); + const summary = createThreeModelPreviewSummary(this.rootObject, renderableObjects, this.resourceWarnings); const name = modelPath ? getPortableBasename(modelPath) || summary.rootName : summary.rootName; return createPreviewModelInfoMarkdown({ title: name, format: this.loadedExt.toUpperCase(), summary, - meshBreakdown: renderableMeshes.map(createThreeMeshInfoBreakdown), + meshBreakdown: renderableObjects.map(createThreeRenderableInfoBreakdown), }); } getModelEvidence(): ModelEvidence | null { if (!this.rootObject) return null; + const renderableObjects = this.getRenderableObjects(this.rootObject); const renderableMeshes = this.getRenderableMeshes(this.rootObject); const groupedPartCandidates = createThreeGroupedPartCandidates(this.rootObject, renderableMeshes); + const groupedRenderableCandidates = { + parts: groupedPartCandidates.parts, + groupedMeshes: new Set(groupedPartCandidates.groupedMeshes), + }; return createPreviewEvidence({ - summary: createThreeModelPreviewSummary(this.rootObject, renderableMeshes, this.resourceWarnings), - renderableMeshes, - groupedPartCandidates, - createMeshPart: (mesh) => createThreePartPreviewSummary(mesh, this.rootObject), - getMeshMaterialNames: getThreeMeshMaterialNames, + summary: createThreeModelPreviewSummary(this.rootObject, renderableObjects, this.resourceWarnings), + renderableMeshes: renderableObjects, + groupedPartCandidates: groupedRenderableCandidates, + createMeshPart: (object) => createThreeRenderablePartPreviewSummary(object, this.rootObject), + getMeshMaterialNames: getThreeRenderableMaterialNames, resourceWarnings: this.resourceWarnings, }); } @@ -582,7 +591,9 @@ export class ThreeModelPreview implements WorkbenchPreview { getSelectedPartInfo(): ModelPartSummary | null { const mesh = this.focusedMesh ?? (isMesh(this._lastPickResult.mesh) ? this._lastPickResult.mesh : null); - return mesh ? createThreePartPreviewSummary(mesh, this.rootObject) : null; + if (mesh) return createThreeRenderablePartPreviewSummary(mesh, this.rootObject); + const renderable = isThreeRenderableObject(this._lastPickResult.mesh) ? this._lastPickResult.mesh : null; + return renderable ? createThreeRenderablePartPreviewSummary(renderable, this.rootObject) : null; } exportSelectedPartInfo(): string { @@ -595,7 +606,7 @@ export class ThreeModelPreview implements WorkbenchPreview { return toPreviewWorldPoint(result.pickedPoint as { x: number; y: number; z: number }); } - if (result.mesh instanceof Mesh) { + if (isThreeRenderableObject(result.mesh)) { return getPreviewBoundsCenter(getObjectPreviewBounds(result.mesh)); } @@ -879,7 +890,7 @@ export class ThreeModelPreview implements WorkbenchPreview { adaptiveScaleChangeCount: smoothness.adaptiveScaleChangeCount, viewportVisible: this.viewportVisible, disposalAudit: { ...this.lastDisposalAudit }, - meshCount: this.rootObject ? this.getRenderableMeshes(this.rootObject).length : 0, + meshCount: this.rootObject ? this.getRenderableObjects(this.rootObject).length : 0, qualitySnapshot: this.getQualitySnapshot(), }; } @@ -1244,7 +1255,7 @@ export class ThreeModelPreview implements WorkbenchPreview { if (!this.rootObject) return 2; const bounds = getObjectPreviewBounds(this.rootObject); const size = getPreviewBoundsSize(bounds); - return Math.max(size.x, size.y, size.z, 1) * 1.2; + return Math.max(Math.max(size.x, size.y, size.z, Number.EPSILON) * 1.2, 0.001); } private updateOrthographicFrustum(aspect: number): void { @@ -1497,9 +1508,11 @@ export class ThreeModelPreview implements WorkbenchPreview { private prepareModelForQuality(root: Object3D): void { const anisotropy = this.renderer.capabilities.getMaxAnisotropy(); root.traverse((object) => { - if (!isMesh(object)) return; - object.castShadow = true; - object.receiveShadow = true; + if (!isThreeRenderableObject(object)) return; + if (isMesh(object)) { + object.castShadow = true; + object.receiveShadow = true; + } for (const material of materialList(object.material)) { this.prepareMaterialForQuality(material, anisotropy); } @@ -1528,7 +1541,8 @@ export class ThreeModelPreview implements WorkbenchPreview { const box = new Box3().setFromObject(this.rootObject); const center = box.getCenter(new Vector3()); const size = box.getSize(new Vector3()); - const radius = Math.max(size.x, size.y, size.z, 1) * 1.8; + const span = Math.max(size.x, size.y, size.z, Number.EPSILON); + const radius = Math.max(span * 1.8, 0.001); for (const light of this.allLights()) { if (!isShadowCastingLight(light) || !light.castShadow) continue; @@ -1609,8 +1623,9 @@ export class ThreeModelPreview implements WorkbenchPreview { const bounds = getObjectPreviewBounds(this.rootObject); const center = getPreviewBoundsCenter(bounds); const boundsSize = getPreviewBoundsSize(bounds); - const size = Math.max(boundsSize.x, boundsSize.z, 1) * 3; - const y = bounds.min.y - Math.max(size * 0.002, 0.002); + const span = Math.max(boundsSize.x, boundsSize.z, Number.EPSILON); + const size = Math.max(span * 3, 0.001); + const y = bounds.min.y - Math.max(size * 0.002, 0.00001); const mesh = new Mesh( new PlaneGeometry(size, size), @@ -1640,11 +1655,12 @@ export class ThreeModelPreview implements WorkbenchPreview { const bounds = getObjectPreviewBounds(this.rootObject); const center = getPreviewBoundsCenter(bounds); const boundsSize = getPreviewBoundsSize(bounds); - const size = Math.max(boundsSize.x, boundsSize.z, 1) * 2; + const span = Math.max(boundsSize.x, boundsSize.z, Number.EPSILON); + const size = Math.max(span * 2, 0.001); const grid = new GridHelper(size, 20, 0x6f7785, 0x343b46); grid.name = "ai3d-grid"; - grid.position.set(center.x, bounds.min.y - Math.max(size * 0.003, 0.003), center.z); + grid.position.set(center.x, bounds.min.y - Math.max(size * 0.003, 0.00001), center.z); for (const material of materialList(grid.material)) { material.transparent = true; material.opacity = 0.42; @@ -1672,10 +1688,11 @@ export class ThreeModelPreview implements WorkbenchPreview { this.pointer.y = -((event.clientY - rect.top) / rect.height) * 2 + 1; this.raycaster.setFromCamera(this.pointer, this.camera); - const hit = this.raycaster.intersectObjects(this.getRenderableMeshes(this.rootObject), false)[0]; - const mesh = hit?.object instanceof Mesh ? hit.object : null; + const hit = this.raycaster.intersectObjects(this.getRenderableObjects(this.rootObject), false)[0]; + const renderable = isThreeRenderableObject(hit?.object) ? hit.object : null; + const mesh = renderable instanceof Mesh ? renderable : null; const result: PreviewPickResult = { - mesh, + mesh: renderable, pickedPoint: hit?.point?.clone() ?? null, screenX: event.clientX, screenY: event.clientY, @@ -1747,8 +1764,10 @@ export class ThreeModelPreview implements WorkbenchPreview { root.traverse((object) => { objectCount++; - if (!isMesh(object)) return; - meshCount++; + if (!isThreeRenderableObject(object)) return; + if (isMesh(object)) { + meshCount++; + } const geometry = object.geometry; if (geometry && !geometryIds.has(geometry.uuid)) { @@ -1873,7 +1892,7 @@ export class ThreeModelPreview implements WorkbenchPreview { this.occlusionRaycaster.set(this.camera.position, this.annotationDirection); this.occlusionRaycaster.far = lineOfSight.distance; - const hit = this.occlusionRaycaster.intersectObjects(this.getRenderableMeshes(this.rootObject), false)[0]; + const hit = this.occlusionRaycaster.intersectObjects(this.getRenderableObjects(this.rootObject), false)[0]; return !!hit && isPreviewHitOccluded(hit.distance, lineOfSight.distance, lineOfSight.epsilon); } @@ -1891,6 +1910,19 @@ export class ThreeModelPreview implements WorkbenchPreview { return meshes; } + private getRenderableObjects(root: Object3D): ThreeRenderableObject[] { + if (this.cachedRenderables && this.cachedRenderableRoot === root) return this.cachedRenderables; + const renderables: ThreeRenderableObject[] = []; + root.traverse((object) => { + if (isThreeRenderableObject(object) && object.geometry) { + renderables.push(object); + } + }); + this.cachedRenderables = renderables; + this.cachedRenderableRoot = root; + return renderables; + } + private getGeometryQualityStats(): PreviewQualitySnapshot["geometry"] { if (!this.rootObject) { return { @@ -1909,25 +1941,22 @@ export class ThreeModelPreview implements WorkbenchPreview { let smallPartCount = 0; let smallestPartSpan = Number.POSITIVE_INFINITY; - for (const mesh of this.getRenderableMeshes(this.rootObject)) { - const size = getPreviewBoundsSize(getObjectPreviewBounds(mesh)); + for (const object of this.getRenderableObjects(this.rootObject)) { + if (object instanceof Points) { + pointCloudCount++; + } + const size = getPreviewBoundsSize(getObjectPreviewBounds(object)); 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) { + if (isMesh(object) && span <= smallPartThreshold && span < modelSpan) { smallPartCount++; } } } - this.rootObject.traverse((object) => { - if (object instanceof Points) { - pointCloudCount++; - } - }); - return { - meshCount: this.getRenderableMeshes(this.rootObject).length, + meshCount: this.getRenderableObjects(this.rootObject).length, pointCloudCount, smallPartCount, smallestPartSpan: Number.isFinite(smallestPartSpan) ? Number(smallestPartSpan.toPrecision(6)) : null, @@ -1938,6 +1967,8 @@ export class ThreeModelPreview implements WorkbenchPreview { private invalidateMeshCache(): void { this.cachedMeshes = null; this.cachedMeshRoot = null; + this.cachedRenderables = null; + this.cachedRenderableRoot = null; } private ensureBoundingBoxHelper(): void { @@ -2205,7 +2236,7 @@ export class ThreeModelPreview implements WorkbenchPreview { this.pointer.x = ((this.lastPointerClient.x - rect.left) / rect.width) * 2 - 1; this.pointer.y = -((this.lastPointerClient.y - rect.top) / rect.height) * 2 + 1; this.raycaster.setFromCamera(this.pointer, this.camera); - const hit = this.raycaster.intersectObjects(this.getRenderableMeshes(this.rootObject), false)[0]; + const hit = this.raycaster.intersectObjects(this.getRenderableObjects(this.rootObject), false)[0]; let endPoint: Vector3; if (hit?.point) { endPoint = hit.point.clone(); diff --git a/src/store/plugin-store.test.ts b/src/store/plugin-store.test.ts index 4747290..62a798a 100644 --- a/src/store/plugin-store.test.ts +++ b/src/store/plugin-store.test.ts @@ -1,5 +1,6 @@ import type { Plugin } from "obsidian"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { DEFAULT_SETTINGS } from "../domain/constants"; import type { PersistedPluginState } from "../domain/models"; import { createPluginStore } from "./plugin-store"; @@ -23,8 +24,11 @@ function cloneState(data: PersistedPluginState): PersistedPluginState { return JSON.parse(JSON.stringify(data)) as PersistedPluginState; } -function createFakePlugin(saveDataImpl?: (data: PersistedPluginState) => Promise) { - const loadData = vi.fn(async () => null); +function createFakePlugin( + saveDataImpl?: (data: PersistedPluginState) => Promise, + loadDataValue: PersistedPluginState | null = null, +) { + const loadData = vi.fn(async () => loadDataValue); const saveData = vi.fn((data: unknown) => { const snapshot = cloneState(data as PersistedPluginState); return saveDataImpl?.(snapshot) ?? Promise.resolve(); @@ -165,4 +169,49 @@ describe("createPluginStore persistence", () => { expect(errorSpy).toHaveBeenCalledWith("[AI3D] Final save on dispose failed:", error); }); + + it("preserves registered detail cluster part sources when loading saved data", async () => { + const now = "2026-06-22T00:00:00.000Z"; + const saved: PersistedPluginState = { + settings: { ...DEFAULT_SETTINGS }, + convertedAssetRecords: [], + modelAssetProfiles: { + "models/board.glb": { + tags: [], + notes: "", + annotations: [], + registeredParts: [{ + partId: "board:part:1", + assetId: "models/board.glb", + name: "Small detail cluster", + source: "detail-cluster", + meshRefs: ["mesh-1", "mesh-2"], + childCount: 2, + materialRefs: ["Plastic"], + bbox: [0.1, 0.1, 0.1], + center: [0, 0, 0], + triangleCount: 12, + vertexCount: 24, + materialName: "Plastic", + confidence: 0.48, + observations: ["Merged tiny fragments."], + inferredFunctions: [], + knowledgeTags: [], + reviewed: false, + }], + createdAt: now, + updatedAt: now, + }, + }, + agentDraft: "", + agentPlan: null, + lastKnowledgeGeneration: null, + }; + const { plugin } = createFakePlugin(undefined, saved); + const pluginStore = createPluginStore(plugin); + + await pluginStore.load(); + + expect(pluginStore.store.getState().modelAssetProfiles["models/board.glb"]?.registeredParts?.[0]?.source).toBe("detail-cluster"); + }); }); diff --git a/src/store/plugin-store.ts b/src/store/plugin-store.ts index ac3fcd9..21791bc 100644 --- a/src/store/plugin-store.ts +++ b/src/store/plugin-store.ts @@ -209,6 +209,12 @@ function normalizeNumberTuple(value: unknown): [number, number, number] | undefi return tuple.every(Number.isFinite) ? [tuple[0], tuple[1], tuple[2]] : undefined; } +function normalizePartSource(value: unknown): PartRecord["source"] { + return value === "group" || value === "mesh" || value === "component" || value === "detail-cluster" + ? value + : undefined; +} + function normalizeRegisteredParts(value: unknown, fallbackAssetId: string): PartRecord[] | undefined { if (!Array.isArray(value)) { return undefined; @@ -231,7 +237,7 @@ function normalizeRegisteredParts(value: unknown, fallbackAssetId: string): Part assetId, parentPartId: typeof record.parentPartId === "string" ? record.parentPartId : undefined, name, - source: record.source === "group" || record.source === "mesh" || record.source === "component" ? record.source : undefined, + source: normalizePartSource(record.source), componentId: typeof record.componentId === "string" ? record.componentId : undefined, occurrenceId: typeof record.occurrenceId === "string" ? record.occurrenceId : undefined, partNumber: typeof record.partNumber === "string" ? record.partNumber : undefined, diff --git a/src/view/workbench/analysis-result.ts b/src/view/workbench/analysis-result.ts index 2a94900..5e452ed 100644 --- a/src/view/workbench/analysis-result.ts +++ b/src/view/workbench/analysis-result.ts @@ -214,6 +214,7 @@ function inferPartCategory(part: ModelPartSummary): string { const name = part.name.toLowerCase(); if (part.source === "component") return "component"; if (part.source === "group") return "group"; + if (part.source === "detail-cluster") return "detail-cluster"; if (name.includes("wheel") || name.includes("gear") || name.includes("axle")) return "mechanical"; if (name.includes("shell") || name.includes("case") || name.includes("cover") || name.includes("housing")) return "enclosure"; if (name.includes("button") || name.includes("key") || name.includes("switch")) return "control"; @@ -230,6 +231,9 @@ function buildPartObservations(part: ModelPartSummary): string[] { if (part.source === "component") { observations.push(`Registered from model component metadata with ${formatObservationCount(part.childCount ?? part.meshNames?.length ?? 1, "child mesh", "child meshes")}.`); } + if (part.source === "detail-cluster") { + observations.push(`Merged from ${formatObservationCount(part.childCount ?? part.meshNames?.length ?? 0, "generic tiny mesh", "generic tiny meshes")} to avoid over-splitting renderer fragments.`); + } if (part.componentId) { observations.push(`Component ID: ${part.componentId}.`); } @@ -252,6 +256,13 @@ function buildPartObservations(part: ModelPartSummary): string[] { return observations; } +function inferPartConfidence(part: ModelPartSummary): number { + if (part.source === "component") return 0.82; + if (part.source === "group") return 0.72; + if (part.source === "detail-cluster") return 0.48; + return part.name ? 0.55 : 0.35; +} + export function buildPartRecordsFromEvidence(modelPath: string, parts: readonly ModelPartSummary[]): PartRecord[] { const seenPartIds = new Set(); return parts.map((part, index) => ({ @@ -272,7 +283,7 @@ export function buildPartRecordsFromEvidence(modelPath: string, parts: readonly triangleCount: part.triangleCount, vertexCount: part.vertexCount, materialName: part.materialName, - confidence: part.source === "component" ? 0.82 : part.source === "group" ? 0.72 : part.name ? 0.55 : 0.35, + confidence: inferPartConfidence(part), observations: buildPartObservations(part), inferredFunctions: [], knowledgeTags: [], diff --git a/src/view/workbench/knowledge-note.test.ts b/src/view/workbench/knowledge-note.test.ts index d795044..a308583 100644 --- a/src/view/workbench/knowledge-note.test.ts +++ b/src/view/workbench/knowledge-note.test.ts @@ -2,7 +2,7 @@ import type { App } from "obsidian"; import { TFile } from "obsidian"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { DEFAULT_SETTINGS } from "../../domain/constants"; -import type { KnowledgeGenerationRecord, ModelAssetProfile, PluginState } from "../../domain/models"; +import type { AnalysisResult, KnowledgeGenerationRecord, ModelAssetProfile, ModelEvidence, PluginState } from "../../domain/models"; import type { PluginStore } from "../../store/plugin-store"; import { createDefaultProfile } from "../../store/plugin-store"; import { generateKnowledgeNote } from "./knowledge-note"; @@ -239,4 +239,57 @@ describe("generateKnowledgeNote generation marker", () => { expect(files.get("Analysis/3D Reports/gear Analysis.json")).toContain("Previous knowledge generation for models/old.glb did not complete"); expect(generationRecords[1].warningCount).toBe(1); }); + + it("keeps detail clusters as evidence without drafting standalone part notes by default", async () => { + const evidence: ModelEvidence = { + summary: { + meshCount: 2, + triangleCount: 600, + vertexCount: 900, + materialCount: 1, + boundingSize: { x: 10, y: 10, z: 10 }, + rootName: "board", + }, + parts: [{ + name: "Small detail cluster", + triangleCount: 600, + vertexCount: 900, + materialName: "Plastic", + boundingSize: { x: 0.2, y: 0.2, z: 0.2 }, + center: { x: 1, y: 1, z: 1 }, + source: "detail-cluster", + meshNames: ["mesh-1", "mesh-2"], + childCount: 2, + }], + materialNames: ["Plastic"], + resourceWarnings: [], + capturedAt: "2026-06-22T00:00:00.000Z", + }; + const { app, files } = createVaultHarness(); + const { ps, generationRecords } = createPluginStoreHarness(createState({ + currentModelPath: "models/board.glb", + modelPreview: evidence.summary, + })); + + await generateKnowledgeNote(app, ps, { + preview: { + captureSnapshot: () => null, + getModelEvidence: () => evidence, + }, + }); + + const analysis = JSON.parse(files.get("Analysis/3D Reports/board Analysis.json") ?? "{}") as AnalysisResult; + expect(analysis.parts[0]).toMatchObject({ + name: "Small detail cluster", + source: "detail-cluster", + category: "detail-cluster", + confidence: 0.48, + meshRefs: ["mesh-1", "mesh-2"], + }); + expect(analysis.parts[0].observations.join(" ")).toContain("avoid over-splitting"); + expect(analysis.partNotePaths).toBeUndefined(); + expect(generationRecords[generationRecords.length - 1]?.partNoteCount).toBe(0); + expect(files.get("Analysis/3D Reports/board Report.md")).toContain("detail cluster (2)"); + expect([...files.keys()].some((path) => path.startsWith("Parts/3D Components/board/"))).toBe(false); + }); }); diff --git a/src/view/workbench/knowledge-note.ts b/src/view/workbench/knowledge-note.ts index c5e5940..d7ec5dc 100644 --- a/src/view/workbench/knowledge-note.ts +++ b/src/view/workbench/knowledge-note.ts @@ -108,6 +108,9 @@ function formatPartSource(part: PartRecord): string { if (part.source === "group") { return `group (${part.childCount ?? part.meshRefs.length})`; } + if (part.source === "detail-cluster") { + return `detail cluster (${part.childCount ?? part.meshRefs.length})`; + } return "mesh"; } @@ -849,6 +852,12 @@ function normalizeNumberTuple(value: unknown): [number, number, number] | undefi return tuple.every(Number.isFinite) ? [tuple[0], tuple[1], tuple[2]] : undefined; } +function normalizePartSource(value: unknown): PartRecord["source"] { + return value === "group" || value === "mesh" || value === "component" || value === "detail-cluster" + ? value + : undefined; +} + function normalizeRegisteredPartRecord(value: unknown, fallbackAssetId: string): PartRecord | null { if (!isRecord(value)) return null; const partId = typeof value.partId === "string" ? value.partId : ""; @@ -860,7 +869,7 @@ function normalizeRegisteredPartRecord(value: unknown, fallbackAssetId: string): assetId, parentPartId: typeof value.parentPartId === "string" ? value.parentPartId : undefined, name, - source: value.source === "group" || value.source === "mesh" || value.source === "component" ? value.source : undefined, + source: normalizePartSource(value.source), componentId: typeof value.componentId === "string" ? value.componentId : undefined, occurrenceId: typeof value.occurrenceId === "string" ? value.occurrenceId : undefined, partNumber: typeof value.partNumber === "string" ? value.partNumber : undefined, @@ -939,6 +948,7 @@ function getPartNoteCandidateIds(analysis: AnalysisResult): Set { const linkedPartIds = new Set((analysis.annotationLinks ?? []).flatMap((link) => link.nearestPartId ? [link.nearestPartId] : [])); return new Set( [...analysis.parts] + .filter((part) => part.source !== "detail-cluster" || linkedPartIds.has(part.partId) || !!part.registeredMatches?.length) .sort((left, right) => { const leftLinked = linkedPartIds.has(left.partId) ? 1 : 0; const rightLinked = linkedPartIds.has(right.partId) ? 1 : 0; @@ -1003,7 +1013,7 @@ function buildPartNoteContent(options: { ...(options.part.occurrenceId ? [`- Occurrence ID: ${options.part.occurrenceId}`] : []), ...(options.part.partNumber ? [`- Part number: ${options.part.partNumber}`] : []), ...(options.part.componentPath ? [`- Component path: ${options.part.componentPath}`] : []), - ...(options.part.source === "group" || options.part.source === "component" ? [`- Child meshes: ${formatMeshRefs(options.part.meshRefs)}`] : []), + ...(options.part.source === "group" || options.part.source === "component" || options.part.source === "detail-cluster" ? [`- Child meshes: ${formatMeshRefs(options.part.meshRefs)}`] : []), `- Triangles: ${(options.part.triangleCount ?? 0).toLocaleString()}`, `- Vertices: ${(options.part.vertexCount ?? 0).toLocaleString()}`, `- Material: ${options.part.materialName ? escapeHtml(options.part.materialName) : "-"}`,