@shopware-ag/dive 1.19.1-beta.2 → 1.19.1-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/README.md +295 -362
  2. package/build/chunks/PerspectiveCamera-ACx6umAu.mjs +38 -0
  3. package/build/chunks/PerspectiveCamera-ACx6umAu.mjs.map +1 -0
  4. package/build/chunks/PerspectiveCamera-BXPNOM71.cjs +2 -0
  5. package/build/chunks/PerspectiveCamera-BXPNOM71.cjs.map +1 -0
  6. package/build/chunks/fflate.module-DHdJvhNh.cjs +7 -0
  7. package/build/chunks/fflate.module-DHdJvhNh.cjs.map +1 -0
  8. package/build/chunks/fflate.module-DkZg07PZ.mjs +603 -0
  9. package/build/chunks/fflate.module-DkZg07PZ.mjs.map +1 -0
  10. package/build/chunks/file-type-error-D6aWGgyc.mjs +15 -0
  11. package/build/chunks/file-type-error-D6aWGgyc.mjs.map +1 -0
  12. package/build/chunks/file-type-error-DtvBgs64.cjs +2 -0
  13. package/build/chunks/file-type-error-DtvBgs64.cjs.map +1 -0
  14. package/build/chunks/index-C7Wx_9uY.mjs +34 -0
  15. package/build/chunks/index-C7Wx_9uY.mjs.map +1 -0
  16. package/build/chunks/index-MNP0K5dt.cjs +2 -0
  17. package/build/chunks/index-MNP0K5dt.cjs.map +1 -0
  18. package/build/chunks/network-error-C2ZDC8qS.cjs +2 -0
  19. package/build/chunks/network-error-C2ZDC8qS.cjs.map +1 -0
  20. package/build/chunks/network-error-DgecatEk.mjs +27 -0
  21. package/build/chunks/network-error-DgecatEk.mjs.map +1 -0
  22. package/build/index.cjs +57 -0
  23. package/build/index.cjs.map +1 -0
  24. package/build/index.d.ts +6 -0
  25. package/build/index.mjs +6884 -0
  26. package/build/index.mjs.map +1 -0
  27. package/build/src/animation/AnimationSystem.d.ts +1 -1
  28. package/build/src/axiscamera/AxisCamera.d.ts +2 -2
  29. package/build/src/com/Communication.d.ts +5 -8
  30. package/build/src/com/actions/scene/exportscene.d.ts +1 -1
  31. package/build/src/com/actions/scene/launchar.d.ts +1 -1
  32. package/build/src/controls/OrbitControls.d.ts +2 -2
  33. package/build/src/dive.d.ts +12 -29
  34. package/build/src/engine/Engine.d.ts +32 -0
  35. package/build/src/{camera → engine/camera}/PerspectiveCamera.d.ts +1 -1
  36. package/build/src/{scene → engine/scene}/Scene.d.ts +4 -4
  37. package/build/src/{scene → engine/scene}/root/Root.d.ts +2 -3
  38. package/build/src/error/ar-compatibility/ar-compatibility-error.d.ts +12 -0
  39. package/build/src/error/file-type/file-type-error.d.ts +4 -0
  40. package/build/src/error/index.d.ts +4 -0
  41. package/build/src/error/network/network-error.d.ts +5 -0
  42. package/build/src/error/parse/parse-error.d.ts +4 -0
  43. package/build/src/helper/findSceneRecursive/findSceneRecursive.d.ts +1 -1
  44. package/build/src/helper/getFileTypeFromUri/getFileTypeFromUri.d.ts +6 -0
  45. package/build/src/helper/index.d.ts +7 -0
  46. package/build/src/helper/isFileTypeSupported/isFileTypeSupported.d.ts +7 -0
  47. package/build/src/index.d.ts +2 -0
  48. package/build/src/math/index.d.ts +1 -1
  49. package/build/src/modules/_system/Module.d.ts +13 -0
  50. package/build/src/modules/_system/ModuleRegistry.d.ts +29 -0
  51. package/build/src/modules/ar/ARSystem.cjs +2 -0
  52. package/build/src/modules/ar/ARSystem.cjs.map +1 -0
  53. package/build/src/{ar/AR.d.ts → modules/ar/ARSystem.d.ts} +26 -0
  54. package/build/src/modules/ar/ARSystem.mjs +164 -0
  55. package/build/src/modules/ar/ARSystem.mjs.map +1 -0
  56. package/build/src/{ar → modules/ar}/arquicklook/ARQuickLook.d.ts +2 -1
  57. package/build/src/{ar → modules/ar}/sceneviewer/SceneViewer.d.ts +1 -1
  58. package/build/src/{ar → modules/ar}/webxr/WebXR.d.ts +3 -3
  59. package/build/src/{ar → modules/ar}/webxr/controller/WebXRController.d.ts +2 -2
  60. package/build/src/{ar → modules/ar}/webxr/origin/WebXROrigin.d.ts +1 -1
  61. package/build/src/{ar → modules/ar}/webxr/raycaster/WebXRRaycaster.d.ts +3 -3
  62. package/build/src/{ar → modules/ar}/webxr/raycaster/ar/WebXRRaycasterAR.d.ts +1 -1
  63. package/build/src/{ar → modules/ar}/webxr/raycaster/three/WebXRRaycasterTHREE.d.ts +2 -2
  64. package/build/src/{ar → modules/ar}/webxr/touchscreencontrols/WebXRTouchscreenControls.d.ts +1 -1
  65. package/build/src/modules/asset/converter/AssetConverter.cjs +2 -0
  66. package/build/src/modules/asset/converter/AssetConverter.cjs.map +1 -0
  67. package/build/src/modules/asset/converter/AssetConverter.d.ts +29 -0
  68. package/build/src/modules/asset/converter/AssetConverter.mjs +22 -0
  69. package/build/src/modules/asset/converter/AssetConverter.mjs.map +1 -0
  70. package/build/src/modules/asset/exporter/AssetExporter.cjs +165 -0
  71. package/build/src/modules/asset/exporter/AssetExporter.cjs.map +1 -0
  72. package/build/src/{exporter/Exporter.d.ts → modules/asset/exporter/AssetExporter.d.ts} +7 -2
  73. package/build/src/modules/asset/exporter/AssetExporter.mjs +1622 -0
  74. package/build/src/modules/asset/exporter/AssetExporter.mjs.map +1 -0
  75. package/build/src/modules/asset/loader/AssetLoader.cjs +3 -0
  76. package/build/src/modules/asset/loader/AssetLoader.cjs.map +1 -0
  77. package/build/src/modules/asset/loader/AssetLoader.d.ts +33 -0
  78. package/build/src/modules/asset/loader/AssetLoader.mjs +1924 -0
  79. package/build/src/modules/asset/loader/AssetLoader.mjs.map +1 -0
  80. package/build/src/modules/index.d.ts +10 -0
  81. package/build/src/modules/mediacreator/MediaCreator.cjs +2 -0
  82. package/build/src/modules/mediacreator/MediaCreator.cjs.map +1 -0
  83. package/build/src/modules/mediacreator/MediaCreator.d.ts +40 -0
  84. package/build/src/modules/mediacreator/MediaCreator.mjs +28 -0
  85. package/build/src/modules/mediacreator/MediaCreator.mjs.map +1 -0
  86. package/build/src/modules/systeminfo/SystemInfo.cjs +2 -0
  87. package/build/src/modules/systeminfo/SystemInfo.cjs.map +1 -0
  88. package/build/src/{info/Info.d.ts → modules/systeminfo/SystemInfo.d.ts} +40 -7
  89. package/build/src/modules/systeminfo/SystemInfo.mjs +115 -0
  90. package/build/src/modules/systeminfo/SystemInfo.mjs.map +1 -0
  91. package/build/src/toolbox/BaseTool.d.ts +1 -1
  92. package/build/src/toolbox/Toolbox.d.ts +1 -1
  93. package/build/src/toolbox/select/SelectTool.d.ts +1 -1
  94. package/build/src/toolbox/transform/TransformTool.d.ts +1 -1
  95. package/build/src/types/file/FileTypes.d.ts +1 -2
  96. package/build/src/types/index.d.ts +1 -0
  97. package/package.json +17 -21
  98. package/build/dive.cjs +0 -4025
  99. package/build/dive.cjs.map +0 -1
  100. package/build/dive.d.ts +0 -6
  101. package/build/dive.js +0 -4025
  102. package/build/dive.js.map +0 -1
  103. package/build/dive.mjs +0 -28200
  104. package/build/dive.mjs.map +0 -1
  105. package/build/src/converter/Converter.d.ts +0 -12
  106. package/build/src/io/IO.d.ts +0 -10
  107. package/build/src/io/gltf/GLTFIO.d.ts +0 -12
  108. package/build/src/loader/Loader.d.ts +0 -7
  109. package/build/src/mediacreator/MediaCreator.d.ts +0 -17
  110. package/build/src/module/Module.d.ts +0 -8
  111. package/build/src/types/error/index.d.ts +0 -12
  112. /package/build/src/{renderer → engine/renderer}/Renderer.d.ts +0 -0
  113. /package/build/src/{scene → engine/scene}/xrroot/XRRoot.d.ts +0 -0
  114. /package/build/src/{scene → engine/scene}/xrroot/xrlightroot/XRLightRoot.d.ts +0 -0
  115. /package/build/src/{ar → modules/ar}/webxr/crosshair/WebXRCrosshair.d.ts +0 -0
  116. /package/build/src/{ar → modules/ar}/webxr/overlay/Overlay.d.ts +0 -0
@@ -1,6 +1,6 @@
1
- import { default as DIVEOrbitControls } from '../../controls/OrbitControls';
2
- import { DIVERenderer } from '../../renderer/Renderer';
3
- import { DIVEScene } from '../../scene/Scene';
1
+ import { default as DIVEOrbitControls } from '../../../controls/OrbitControls';
2
+ import { DIVERenderer } from '../../../engine/renderer/Renderer';
3
+ import { DIVEScene } from '../../../engine/scene/Scene';
4
4
  export declare class DIVEWebXR {
5
5
  private static _renderer;
6
6
  private static _scene;
@@ -1,6 +1,6 @@
1
1
  import { Object3D } from 'three';
2
- import { DIVERenderer } from '../../../renderer/Renderer';
3
- import { DIVEScene } from '../../../scene/Scene';
2
+ import { DIVERenderer } from '../../../../engine/renderer/Renderer';
3
+ import { DIVEScene } from '../../../../engine/scene/Scene';
4
4
  export declare class DIVEWebXRController extends Object3D {
5
5
  private _renderer;
6
6
  private _scene;
@@ -1,5 +1,5 @@
1
1
  import { Matrix4, Quaternion, Vector3 } from 'three';
2
- import { DIVERenderer } from '../../../renderer/Renderer';
2
+ import { DIVERenderer } from '../../../../engine/renderer/Renderer';
3
3
  export declare class DIVEWebXROrigin {
4
4
  private _renderer;
5
5
  private _session;
@@ -1,7 +1,7 @@
1
1
  import { Matrix4, Mesh, Vector3 } from 'three';
2
- import { DIVERenderer } from '../../../renderer/Renderer';
3
- import { DIVEScene } from '../../../scene/Scene';
4
- import { DIVEEventExecutor } from '../../../events/EventExecutor';
2
+ import { DIVERenderer } from '../../../../engine/renderer/Renderer';
3
+ import { DIVEScene } from '../../../../engine/scene/Scene';
4
+ import { DIVEEventExecutor } from '../../../../events/EventExecutor';
5
5
  /**
6
6
  * object is undefined when AR world is hit.
7
7
  */
@@ -1,4 +1,4 @@
1
- import { DIVERenderer } from '../../../../renderer/Renderer';
1
+ import { DIVERenderer } from '../../../../../engine/renderer/Renderer';
2
2
  import { DIVEHitResult } from '../WebXRRaycaster';
3
3
  export declare class DIVEWebXRRaycasterAR {
4
4
  private _session;
@@ -1,5 +1,5 @@
1
- import { DIVERenderer } from '../../../../renderer/Renderer';
2
- import { DIVEScene } from '../../../../scene/Scene';
1
+ import { DIVERenderer } from '../../../../../engine/renderer/Renderer';
2
+ import { DIVEScene } from '../../../../../engine/scene/Scene';
3
3
  import { DIVEHitResult } from '../WebXRRaycaster';
4
4
  export declare class DIVEWebXRRaycasterTHREE {
5
5
  private _renderer;
@@ -1,5 +1,5 @@
1
1
  import { Vector2 } from 'three';
2
- import { DIVEEventExecutor } from '../../../events/EventExecutor';
2
+ import { DIVEEventExecutor } from '../../../../events/EventExecutor';
3
3
  export type DIVETouchscreenEvents = {
4
4
  TOUCH_START: {
5
5
  touches: {
@@ -0,0 +1,2 @@
1
+ "use strict";var i=Object.defineProperty;var n=(e,t,r)=>t in e?i(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var o=(e,t,r)=>n(e,typeof t!="symbol"?t+"":t,r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class a{constructor(t,r){o(this,"_uri","");this._loader=t,this._exporter=r}convert(t){return this._uri=t,{to:this._to.bind(this)}}async _to(t,r){const s=await this._loader.load(this._uri);return this._exporter.export(s,t,r)}}exports.AssetConverter=a;
2
+ //# sourceMappingURL=AssetConverter.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssetConverter.cjs","sources":["../../../../../src/modules/asset/converter/AssetConverter.ts"],"sourcesContent":["import { AssetLoader } from '../loader/AssetLoader';\nimport {\n AssetExporter,\n type FileTypeToExporterOptions,\n} from '../exporter/AssetExporter';\nimport { type FileType } from '../../../types/file';\n\ndeclare global {\n interface ModuleClasses {\n AssetConverter: AssetConverter;\n }\n}\n\n/**\n * @module AssetConverter\n *\n * Converts between different 3D file formats:\n *\n * ```ts\n * import { AssetConverter } from '@shopware-ag/dive/modules/asset/converter';\n * const assetConverter = new AssetConverter();\n * const usdzBuffer = await assetConverter.convert('input.glb').to('usdz');\n * ```\n */\n\nexport class AssetConverter {\n private _uri: string = '';\n\n constructor(\n private _loader: AssetLoader,\n private _exporter: AssetExporter,\n ) {}\n\n public convert(uri: string): {\n to: <T extends FileType>(\n type: T,\n options?: FileTypeToExporterOptions[T],\n ) => Promise<ArrayBuffer>;\n } {\n this._uri = uri;\n return {\n to: this._to.bind(this),\n };\n }\n\n private async _to<T extends FileType>(\n type: T,\n options?: FileTypeToExporterOptions[T],\n ): Promise<ArrayBuffer> {\n const object3D = await this._loader.load(this._uri);\n return this._exporter.export(object3D, type, options);\n }\n}\n"],"names":["AssetConverter","_loader","_exporter","__publicField","uri","type","options","object3D"],"mappings":"oPAyBO,MAAMA,CAAe,CAGxB,YACYC,EACAC,EACV,CALMC,EAAA,YAAe,IAGX,KAAA,QAAAF,EACA,KAAA,UAAAC,CAAA,CAGL,QAAQE,EAKb,CACE,YAAK,KAAOA,EACL,CACH,GAAI,KAAK,IAAI,KAAK,IAAI,CAC1B,CAAA,CAGJ,MAAc,IACVC,EACAC,EACoB,CACpB,MAAMC,EAAW,MAAM,KAAK,QAAQ,KAAK,KAAK,IAAI,EAClD,OAAO,KAAK,UAAU,OAAOA,EAAUF,EAAMC,CAAO,CAAA,CAE5D"}
@@ -0,0 +1,29 @@
1
+ import { AssetLoader } from '../loader/AssetLoader';
2
+ import { AssetExporter, FileTypeToExporterOptions } from '../exporter/AssetExporter';
3
+ import { FileType } from '../../../types/file';
4
+ declare global {
5
+ interface ModuleClasses {
6
+ AssetConverter: AssetConverter;
7
+ }
8
+ }
9
+ /**
10
+ * @module AssetConverter
11
+ *
12
+ * Converts between different 3D file formats:
13
+ *
14
+ * ```ts
15
+ * import { AssetConverter } from '@shopware-ag/dive/modules/asset/converter';
16
+ * const assetConverter = new AssetConverter();
17
+ * const usdzBuffer = await assetConverter.convert('input.glb').to('usdz');
18
+ * ```
19
+ */
20
+ export declare class AssetConverter {
21
+ private _loader;
22
+ private _exporter;
23
+ private _uri;
24
+ constructor(_loader: AssetLoader, _exporter: AssetExporter);
25
+ convert(uri: string): {
26
+ to: <T extends FileType>(type: T, options?: FileTypeToExporterOptions[T]) => Promise<ArrayBuffer>;
27
+ };
28
+ private _to;
29
+ }
@@ -0,0 +1,22 @@
1
+ var i = Object.defineProperty;
2
+ var _ = (o, t, r) => t in o ? i(o, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : o[t] = r;
3
+ var e = (o, t, r) => _(o, typeof t != "symbol" ? t + "" : t, r);
4
+ class n {
5
+ constructor(t, r) {
6
+ e(this, "_uri", "");
7
+ this._loader = t, this._exporter = r;
8
+ }
9
+ convert(t) {
10
+ return this._uri = t, {
11
+ to: this._to.bind(this)
12
+ };
13
+ }
14
+ async _to(t, r) {
15
+ const s = await this._loader.load(this._uri);
16
+ return this._exporter.export(s, t, r);
17
+ }
18
+ }
19
+ export {
20
+ n as AssetConverter
21
+ };
22
+ //# sourceMappingURL=AssetConverter.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssetConverter.mjs","sources":["../../../../../src/modules/asset/converter/AssetConverter.ts"],"sourcesContent":["import { AssetLoader } from '../loader/AssetLoader';\nimport {\n AssetExporter,\n type FileTypeToExporterOptions,\n} from '../exporter/AssetExporter';\nimport { type FileType } from '../../../types/file';\n\ndeclare global {\n interface ModuleClasses {\n AssetConverter: AssetConverter;\n }\n}\n\n/**\n * @module AssetConverter\n *\n * Converts between different 3D file formats:\n *\n * ```ts\n * import { AssetConverter } from '@shopware-ag/dive/modules/asset/converter';\n * const assetConverter = new AssetConverter();\n * const usdzBuffer = await assetConverter.convert('input.glb').to('usdz');\n * ```\n */\n\nexport class AssetConverter {\n private _uri: string = '';\n\n constructor(\n private _loader: AssetLoader,\n private _exporter: AssetExporter,\n ) {}\n\n public convert(uri: string): {\n to: <T extends FileType>(\n type: T,\n options?: FileTypeToExporterOptions[T],\n ) => Promise<ArrayBuffer>;\n } {\n this._uri = uri;\n return {\n to: this._to.bind(this),\n };\n }\n\n private async _to<T extends FileType>(\n type: T,\n options?: FileTypeToExporterOptions[T],\n ): Promise<ArrayBuffer> {\n const object3D = await this._loader.load(this._uri);\n return this._exporter.export(object3D, type, options);\n }\n}\n"],"names":["AssetConverter","_loader","_exporter","__publicField","uri","type","options","object3D"],"mappings":";;;AAyBO,MAAMA,EAAe;AAAA,EAGxB,YACYC,GACAC,GACV;AALM,IAAAC,EAAA,cAAe;AAGX,SAAA,UAAAF,GACA,KAAA,YAAAC;AAAA,EAAA;AAAA,EAGL,QAAQE,GAKb;AACE,gBAAK,OAAOA,GACL;AAAA,MACH,IAAI,KAAK,IAAI,KAAK,IAAI;AAAA,IAC1B;AAAA,EAAA;AAAA,EAGJ,MAAc,IACVC,GACAC,GACoB;AACpB,UAAMC,IAAW,MAAM,KAAK,QAAQ,KAAK,KAAK,IAAI;AAClD,WAAO,KAAK,UAAU,OAAOA,GAAUF,GAAMC,CAAO;AAAA,EAAA;AAE5D;"}
@@ -0,0 +1,165 @@
1
+ "use strict";var ue=Object.defineProperty;var le=(n,e,s)=>e in n?ue(n,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):n[e]=s;var H=(n,e,s)=>le(n,typeof e!="symbol"?e+"":e,s);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("three"),K=require("../../../../chunks/fflate.module-DHdJvhNh.cjs"),L=require("../../../../chunks/file-type-error-DtvBgs64.cjs");let $,V,C,D;function k(n,e=1/0,s=null){V||(V=new d.PlaneGeometry(2,2,1,1)),C||(C=new d.ShaderMaterial({uniforms:{blitTexture:new d.Uniform(n)},vertexShader:`
2
+ varying vec2 vUv;
3
+ void main(){
4
+ vUv = uv;
5
+ gl_Position = vec4(position.xy * 1.0,0.,.999999);
6
+ }`,fragmentShader:`
7
+ uniform sampler2D blitTexture;
8
+ varying vec2 vUv;
9
+
10
+ void main(){
11
+ gl_FragColor = vec4(vUv.xy, 0, 1);
12
+
13
+ #ifdef IS_SRGB
14
+ gl_FragColor = LinearTosRGB( texture2D( blitTexture, vUv) );
15
+ #else
16
+ gl_FragColor = texture2D( blitTexture, vUv);
17
+ #endif
18
+ }`})),C.uniforms.blitTexture.value=n,C.defines.IS_SRGB=n.colorSpace==d.SRGBColorSpace,C.needsUpdate=!0,D||(D=new d.Mesh(V,C),D.frustumCulled=!1);const t=new d.PerspectiveCamera,r=new d.Scene;r.add(D),s===null&&(s=$=new d.WebGLRenderer({antialias:!1}));const i=Math.min(n.image.width,e),o=Math.min(n.image.height,e);s.setSize(i,o),s.clear(),s.render(r,t);const a=document.createElement("canvas"),c=a.getContext("2d");a.width=i,a.height=o,c.drawImage(s.domElement,0,0,i,o);const u=new d.CanvasTexture(a);return u.minFilter=n.minFilter,u.magFilter=n.magFilter,u.wrapS=n.wrapS,u.wrapT=n.wrapT,u.name=n.name,$&&($.forceContextLoss(),$.dispose(),$=null),u}const Z={POSITION:["byte","byte normalized","unsigned byte","unsigned byte normalized","short","short normalized","unsigned short","unsigned short normalized"],NORMAL:["byte normalized","short normalized"],TANGENT:["byte normalized","short normalized"],TEXCOORD:["byte","byte normalized","unsigned byte","short","short normalized","unsigned short"]};class X{constructor(){this.pluginCallbacks=[],this.register(function(e){return new ye(e)}),this.register(function(e){return new we(e)}),this.register(function(e){return new Ae(e)}),this.register(function(e){return new Ie(e)}),this.register(function(e){return new Se(e)}),this.register(function(e){return new Re(e)}),this.register(function(e){return new Ee(e)}),this.register(function(e){return new be(e)}),this.register(function(e){return new _e(e)}),this.register(function(e){return new Ne(e)}),this.register(function(e){return new Le(e)}),this.register(function(e){return new ve(e)}),this.register(function(e){return new Ce(e)})}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,s,t,r){const i=new Me,o=[];for(let a=0,c=this.pluginCallbacks.length;a<c;a++)o.push(this.pluginCallbacks[a](i));i.setPlugins(o),i.write(e,s,r).catch(t)}parseAsync(e,s){const t=this;return new Promise(function(r,i){t.parse(e,r,i,s)})}}const M={POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,BYTE:5120,UNSIGNED_BYTE:5121,SHORT:5122,UNSIGNED_SHORT:5123,INT:5124,UNSIGNED_INT:5125,FLOAT:5126,ARRAY_BUFFER:34962,ELEMENT_ARRAY_BUFFER:34963,NEAREST:9728,LINEAR:9729,NEAREST_MIPMAP_NEAREST:9984,LINEAR_MIPMAP_NEAREST:9985,NEAREST_MIPMAP_LINEAR:9986,LINEAR_MIPMAP_LINEAR:9987,CLAMP_TO_EDGE:33071,MIRRORED_REPEAT:33648,REPEAT:10497},Y="KHR_mesh_quantization",R={};R[d.NearestFilter]=M.NEAREST;R[d.NearestMipmapNearestFilter]=M.NEAREST_MIPMAP_NEAREST;R[d.NearestMipmapLinearFilter]=M.NEAREST_MIPMAP_LINEAR;R[d.LinearFilter]=M.LINEAR;R[d.LinearMipmapNearestFilter]=M.LINEAR_MIPMAP_NEAREST;R[d.LinearMipmapLinearFilter]=M.LINEAR_MIPMAP_LINEAR;R[d.ClampToEdgeWrapping]=M.CLAMP_TO_EDGE;R[d.RepeatWrapping]=M.REPEAT;R[d.MirroredRepeatWrapping]=M.MIRRORED_REPEAT;const J={scale:"scale",position:"translation",quaternion:"rotation",morphTargetInfluences:"weights"},fe=new d.Color,Q=12,pe=1179937895,he=2,ee=8,de=1313821514,xe=5130562;function P(n,e){return n.length===e.length&&n.every(function(s,t){return s===e[t]})}function ge(n){return new TextEncoder().encode(n).buffer}function me(n){return P(n.elements,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function Te(n,e,s){const t={min:new Array(n.itemSize).fill(Number.POSITIVE_INFINITY),max:new Array(n.itemSize).fill(Number.NEGATIVE_INFINITY)};for(let r=e;r<e+s;r++)for(let i=0;i<n.itemSize;i++){let o;n.itemSize>4?o=n.array[r*n.itemSize+i]:(i===0?o=n.getX(r):i===1?o=n.getY(r):i===2?o=n.getZ(r):i===3&&(o=n.getW(r)),n.normalized===!0&&(o=d.MathUtils.normalize(o,n.array))),t.min[i]=Math.min(t.min[i],o),t.max[i]=Math.max(t.max[i],o)}return t}function ie(n){return Math.ceil(n/4)*4}function j(n,e=0){const s=ie(n.byteLength);if(s!==n.byteLength){const t=new Uint8Array(s);if(t.set(new Uint8Array(n)),e!==0)for(let r=n.byteLength;r<s;r++)t[r]=e;return t.buffer}return n}function te(){return typeof document>"u"&&typeof OffscreenCanvas<"u"?new OffscreenCanvas(1,1):document.createElement("canvas")}function se(n,e){if(n.toBlob!==void 0)return new Promise(t=>n.toBlob(t,e));let s;return e==="image/jpeg"?s=.92:e==="image/webp"&&(s=.8),n.convertToBlob({type:e,quality:s})}class Me{constructor(){this.plugins=[],this.options={},this.pending=[],this.buffers=[],this.byteOffset=0,this.buffers=[],this.nodeMap=new Map,this.skins=[],this.extensionsUsed={},this.extensionsRequired={},this.uids=new Map,this.uid=0,this.json={asset:{version:"2.0",generator:"THREE.GLTFExporter"}},this.cache={meshes:new Map,attributes:new Map,attributesNormalized:new Map,materials:new Map,textures:new Map,images:new Map}}setPlugins(e){this.plugins=e}async write(e,s,t={}){this.options=Object.assign({binary:!1,trs:!1,onlyVisible:!0,maxTextureSize:1/0,animations:[],includeCustomExtensions:!1},t),this.options.animations.length>0&&(this.options.trs=!0),this.processInput(e),await Promise.all(this.pending);const r=this,i=r.buffers,o=r.json;t=r.options;const a=r.extensionsUsed,c=r.extensionsRequired,u=new Blob(i,{type:"application/octet-stream"}),p=Object.keys(a),l=Object.keys(c);if(p.length>0&&(o.extensionsUsed=p),l.length>0&&(o.extensionsRequired=l),o.buffers&&o.buffers.length>0&&(o.buffers[0].byteLength=u.size),t.binary===!0){const g=new FileReader;g.readAsArrayBuffer(u),g.onloadend=function(){const f=j(g.result),h=new DataView(new ArrayBuffer(ee));h.setUint32(0,f.byteLength,!0),h.setUint32(4,xe,!0);const x=j(ge(JSON.stringify(o)),32),m=new DataView(new ArrayBuffer(ee));m.setUint32(0,x.byteLength,!0),m.setUint32(4,de,!0);const w=new ArrayBuffer(Q),_=new DataView(w);_.setUint32(0,pe,!0),_.setUint32(4,he,!0);const B=Q+m.byteLength+x.byteLength+h.byteLength+f.byteLength;_.setUint32(8,B,!0);const T=new Blob([w,m,x,h,f],{type:"application/octet-stream"}),y=new FileReader;y.readAsArrayBuffer(T),y.onloadend=function(){s(y.result)}}}else if(o.buffers&&o.buffers.length>0){const g=new FileReader;g.readAsDataURL(u),g.onloadend=function(){const f=g.result;o.buffers[0].uri=f,s(o)}}else s(o)}serializeUserData(e,s){if(Object.keys(e.userData).length===0)return;const t=this.options,r=this.extensionsUsed;try{const i=JSON.parse(JSON.stringify(e.userData));if(t.includeCustomExtensions&&i.gltfExtensions){s.extensions===void 0&&(s.extensions={});for(const o in i.gltfExtensions)s.extensions[o]=i.gltfExtensions[o],r[o]=!0;delete i.gltfExtensions}Object.keys(i).length>0&&(s.extras=i)}catch(i){console.warn("THREE.GLTFExporter: userData of '"+e.name+"' won't be serialized because of JSON.stringify error - "+i.message)}}getUID(e,s=!1){if(this.uids.has(e)===!1){const r=new Map;r.set(!0,this.uid++),r.set(!1,this.uid++),this.uids.set(e,r)}return this.uids.get(e).get(s)}isNormalizedNormalAttribute(e){if(this.cache.attributesNormalized.has(e))return!1;const t=new d.Vector3;for(let r=0,i=e.count;r<i;r++)if(Math.abs(t.fromBufferAttribute(e,r).length()-1)>5e-4)return!1;return!0}createNormalizedNormalAttribute(e){const s=this.cache;if(s.attributesNormalized.has(e))return s.attributesNormalized.get(e);const t=e.clone(),r=new d.Vector3;for(let i=0,o=t.count;i<o;i++)r.fromBufferAttribute(t,i),r.x===0&&r.y===0&&r.z===0?r.setX(1):r.normalize(),t.setXYZ(i,r.x,r.y,r.z);return s.attributesNormalized.set(e,t),t}applyTextureTransform(e,s){let t=!1;const r={};(s.offset.x!==0||s.offset.y!==0)&&(r.offset=s.offset.toArray(),t=!0),s.rotation!==0&&(r.rotation=s.rotation,t=!0),(s.repeat.x!==1||s.repeat.y!==1)&&(r.scale=s.repeat.toArray(),t=!0),t&&(e.extensions=e.extensions||{},e.extensions.KHR_texture_transform=r,this.extensionsUsed.KHR_texture_transform=!0)}buildMetalRoughTexture(e,s){if(e===s)return e;function t(f){return f.colorSpace===d.SRGBColorSpace?function(x){return x<.04045?x*.0773993808:Math.pow(x*.9478672986+.0521327014,2.4)}:function(x){return x}}console.warn("THREE.GLTFExporter: Merged metalnessMap and roughnessMap textures."),e instanceof d.CompressedTexture&&(e=k(e)),s instanceof d.CompressedTexture&&(s=k(s));const r=e?e.image:null,i=s?s.image:null,o=Math.max(r?r.width:0,i?i.width:0),a=Math.max(r?r.height:0,i?i.height:0),c=te();c.width=o,c.height=a;const u=c.getContext("2d");u.fillStyle="#00ffff",u.fillRect(0,0,o,a);const p=u.getImageData(0,0,o,a);if(r){u.drawImage(r,0,0,o,a);const f=t(e),h=u.getImageData(0,0,o,a).data;for(let x=2;x<h.length;x+=4)p.data[x]=f(h[x]/256)*256}if(i){u.drawImage(i,0,0,o,a);const f=t(s),h=u.getImageData(0,0,o,a).data;for(let x=1;x<h.length;x+=4)p.data[x]=f(h[x]/256)*256}u.putImageData(p,0,0);const g=(e||s).clone();return g.source=new d.Source(c),g.colorSpace=d.NoColorSpace,g.channel=(e||s).channel,e&&s&&e.channel!==s.channel&&console.warn("THREE.GLTFExporter: UV channels for metalnessMap and roughnessMap textures must match."),g}processBuffer(e){const s=this.json,t=this.buffers;return s.buffers||(s.buffers=[{byteLength:0}]),t.push(e),0}processBufferView(e,s,t,r,i){const o=this.json;o.bufferViews||(o.bufferViews=[]);let a;switch(s){case M.BYTE:case M.UNSIGNED_BYTE:a=1;break;case M.SHORT:case M.UNSIGNED_SHORT:a=2;break;default:a=4}let c=e.itemSize*a;i===M.ARRAY_BUFFER&&(c=Math.ceil(c/4)*4);const u=ie(r*c),p=new DataView(new ArrayBuffer(u));let l=0;for(let h=t;h<t+r;h++){for(let x=0;x<e.itemSize;x++){let m;e.itemSize>4?m=e.array[h*e.itemSize+x]:(x===0?m=e.getX(h):x===1?m=e.getY(h):x===2?m=e.getZ(h):x===3&&(m=e.getW(h)),e.normalized===!0&&(m=d.MathUtils.normalize(m,e.array))),s===M.FLOAT?p.setFloat32(l,m,!0):s===M.INT?p.setInt32(l,m,!0):s===M.UNSIGNED_INT?p.setUint32(l,m,!0):s===M.SHORT?p.setInt16(l,m,!0):s===M.UNSIGNED_SHORT?p.setUint16(l,m,!0):s===M.BYTE?p.setInt8(l,m):s===M.UNSIGNED_BYTE&&p.setUint8(l,m),l+=a}l%c!==0&&(l+=c-l%c)}const g={buffer:this.processBuffer(p.buffer),byteOffset:this.byteOffset,byteLength:u};return i!==void 0&&(g.target=i),i===M.ARRAY_BUFFER&&(g.byteStride=c),this.byteOffset+=u,o.bufferViews.push(g),{id:o.bufferViews.length-1,byteLength:0}}processBufferViewImage(e){const s=this,t=s.json;return t.bufferViews||(t.bufferViews=[]),new Promise(function(r){const i=new FileReader;i.readAsArrayBuffer(e),i.onloadend=function(){const o=j(i.result),a={buffer:s.processBuffer(o),byteOffset:s.byteOffset,byteLength:o.byteLength};s.byteOffset+=o.byteLength,r(t.bufferViews.push(a)-1)}})}processAccessor(e,s,t,r){const i=this.json,o={1:"SCALAR",2:"VEC2",3:"VEC3",4:"VEC4",9:"MAT3",16:"MAT4"};let a;if(e.array.constructor===Float32Array)a=M.FLOAT;else if(e.array.constructor===Int32Array)a=M.INT;else if(e.array.constructor===Uint32Array)a=M.UNSIGNED_INT;else if(e.array.constructor===Int16Array)a=M.SHORT;else if(e.array.constructor===Uint16Array)a=M.UNSIGNED_SHORT;else if(e.array.constructor===Int8Array)a=M.BYTE;else if(e.array.constructor===Uint8Array)a=M.UNSIGNED_BYTE;else throw new Error("THREE.GLTFExporter: Unsupported bufferAttribute component type: "+e.array.constructor.name);if(t===void 0&&(t=0),(r===void 0||r===1/0)&&(r=e.count),r===0)return null;const c=Te(e,t,r);let u;s!==void 0&&(u=e===s.index?M.ELEMENT_ARRAY_BUFFER:M.ARRAY_BUFFER);const p=this.processBufferView(e,a,t,r,u),l={bufferView:p.id,byteOffset:p.byteOffset,componentType:a,count:r,max:c.max,min:c.min,type:o[e.itemSize]};return e.normalized===!0&&(l.normalized=!0),i.accessors||(i.accessors=[]),i.accessors.push(l)-1}processImage(e,s,t,r="image/png"){if(e!==null){const i=this,o=i.cache,a=i.json,c=i.options,u=i.pending;o.images.has(e)||o.images.set(e,{});const p=o.images.get(e),l=r+":flipY/"+t.toString();if(p[l]!==void 0)return p[l];a.images||(a.images=[]);const g={mimeType:r},f=te();f.width=Math.min(e.width,c.maxTextureSize),f.height=Math.min(e.height,c.maxTextureSize);const h=f.getContext("2d");if(t===!0&&(h.translate(0,f.height),h.scale(1,-1)),e.data!==void 0){s!==d.RGBAFormat&&console.error("GLTFExporter: Only RGBAFormat is supported.",s),(e.width>c.maxTextureSize||e.height>c.maxTextureSize)&&console.warn("GLTFExporter: Image size is bigger than maxTextureSize",e);const m=new Uint8ClampedArray(e.height*e.width*4);for(let w=0;w<m.length;w+=4)m[w+0]=e.data[w+0],m[w+1]=e.data[w+1],m[w+2]=e.data[w+2],m[w+3]=e.data[w+3];h.putImageData(new ImageData(m,e.width,e.height),0,0)}else if(typeof HTMLImageElement<"u"&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&e instanceof ImageBitmap||typeof OffscreenCanvas<"u"&&e instanceof OffscreenCanvas)h.drawImage(e,0,0,f.width,f.height);else throw new Error("THREE.GLTFExporter: Invalid image type. Use HTMLImageElement, HTMLCanvasElement, ImageBitmap or OffscreenCanvas.");c.binary===!0?u.push(se(f,r).then(m=>i.processBufferViewImage(m)).then(m=>{g.bufferView=m})):f.toDataURL!==void 0?g.uri=f.toDataURL(r):u.push(se(f,r).then(m=>new FileReader().readAsDataURL(m)).then(m=>{g.uri=m}));const x=a.images.push(g)-1;return p[l]=x,x}else throw new Error("THREE.GLTFExporter: No valid image data found. Unable to process texture.")}processSampler(e){const s=this.json;s.samplers||(s.samplers=[]);const t={magFilter:R[e.magFilter],minFilter:R[e.minFilter],wrapS:R[e.wrapS],wrapT:R[e.wrapT]};return s.samplers.push(t)-1}processTexture(e){const t=this.options,r=this.cache,i=this.json;if(r.textures.has(e))return r.textures.get(e);i.textures||(i.textures=[]),e instanceof d.CompressedTexture&&(e=k(e,t.maxTextureSize));let o=e.userData.mimeType;o==="image/webp"&&(o="image/png");const a={sampler:this.processSampler(e),source:this.processImage(e.image,e.format,e.flipY,o)};e.name&&(a.name=e.name),this._invokeAll(function(u){u.writeTexture&&u.writeTexture(e,a)});const c=i.textures.push(a)-1;return r.textures.set(e,c),c}processMaterial(e){const s=this.cache,t=this.json;if(s.materials.has(e))return s.materials.get(e);if(e.isShaderMaterial)return console.warn("GLTFExporter: THREE.ShaderMaterial not supported."),null;t.materials||(t.materials=[]);const r={pbrMetallicRoughness:{}};e.isMeshStandardMaterial!==!0&&e.isMeshBasicMaterial!==!0&&console.warn("GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.");const i=e.color.toArray().concat([e.opacity]);if(P(i,[1,1,1,1])||(r.pbrMetallicRoughness.baseColorFactor=i),e.isMeshStandardMaterial?(r.pbrMetallicRoughness.metallicFactor=e.metalness,r.pbrMetallicRoughness.roughnessFactor=e.roughness):(r.pbrMetallicRoughness.metallicFactor=.5,r.pbrMetallicRoughness.roughnessFactor=.5),e.metalnessMap||e.roughnessMap){const a=this.buildMetalRoughTexture(e.metalnessMap,e.roughnessMap),c={index:this.processTexture(a),channel:a.channel};this.applyTextureTransform(c,a),r.pbrMetallicRoughness.metallicRoughnessTexture=c}if(e.map){const a={index:this.processTexture(e.map),texCoord:e.map.channel};this.applyTextureTransform(a,e.map),r.pbrMetallicRoughness.baseColorTexture=a}if(e.emissive){const a=e.emissive;if(Math.max(a.r,a.g,a.b)>0&&(r.emissiveFactor=e.emissive.toArray()),e.emissiveMap){const u={index:this.processTexture(e.emissiveMap),texCoord:e.emissiveMap.channel};this.applyTextureTransform(u,e.emissiveMap),r.emissiveTexture=u}}if(e.normalMap){const a={index:this.processTexture(e.normalMap),texCoord:e.normalMap.channel};e.normalScale&&e.normalScale.x!==1&&(a.scale=e.normalScale.x),this.applyTextureTransform(a,e.normalMap),r.normalTexture=a}if(e.aoMap){const a={index:this.processTexture(e.aoMap),texCoord:e.aoMap.channel};e.aoMapIntensity!==1&&(a.strength=e.aoMapIntensity),this.applyTextureTransform(a,e.aoMap),r.occlusionTexture=a}e.transparent?r.alphaMode="BLEND":e.alphaTest>0&&(r.alphaMode="MASK",r.alphaCutoff=e.alphaTest),e.side===d.DoubleSide&&(r.doubleSided=!0),e.name!==""&&(r.name=e.name),this.serializeUserData(e,r),this._invokeAll(function(a){a.writeMaterial&&a.writeMaterial(e,r)});const o=t.materials.push(r)-1;return s.materials.set(e,o),o}processMesh(e){const s=this.cache,t=this.json,r=[e.geometry.uuid];if(Array.isArray(e.material))for(let T=0,y=e.material.length;T<y;T++)r.push(e.material[T].uuid);else r.push(e.material.uuid);const i=r.join(":");if(s.meshes.has(i))return s.meshes.get(i);const o=e.geometry;let a;e.isLineSegments?a=M.LINES:e.isLineLoop?a=M.LINE_LOOP:e.isLine?a=M.LINE_STRIP:e.isPoints?a=M.POINTS:a=e.material.wireframe?M.LINES:M.TRIANGLES;const c={},u={},p=[],l=[],g={uv:"TEXCOORD_0",uv1:"TEXCOORD_1",uv2:"TEXCOORD_2",uv3:"TEXCOORD_3",color:"COLOR_0",skinWeight:"WEIGHTS_0",skinIndex:"JOINTS_0"},f=o.getAttribute("normal");f!==void 0&&!this.isNormalizedNormalAttribute(f)&&(console.warn("THREE.GLTFExporter: Creating normalized normal attribute from the non-normalized one."),o.setAttribute("normal",this.createNormalizedNormalAttribute(f)));let h=null;for(let T in o.attributes){if(T.slice(0,5)==="morph")continue;const y=o.attributes[T];if(T=g[T]||T.toUpperCase(),/^(POSITION|NORMAL|TANGENT|TEXCOORD_\d+|COLOR_\d+|JOINTS_\d+|WEIGHTS_\d+)$/.test(T)||(T="_"+T),s.attributes.has(this.getUID(y))){u[T]=s.attributes.get(this.getUID(y));continue}h=null;const A=y.array;T==="JOINTS_0"&&!(A instanceof Uint16Array)&&!(A instanceof Uint8Array)&&(console.warn('GLTFExporter: Attribute "skinIndex" converted to type UNSIGNED_SHORT.'),h=new d.BufferAttribute(new Uint16Array(A),y.itemSize,y.normalized));const S=this.processAccessor(h||y,o);S!==null&&(T.startsWith("_")||this.detectMeshQuantization(T,y),u[T]=S,s.attributes.set(this.getUID(y),S))}if(f!==void 0&&o.setAttribute("normal",f),Object.keys(u).length===0)return null;if(e.morphTargetInfluences!==void 0&&e.morphTargetInfluences.length>0){const T=[],y=[],b={};if(e.morphTargetDictionary!==void 0)for(const A in e.morphTargetDictionary)b[e.morphTargetDictionary[A]]=A;for(let A=0;A<e.morphTargetInfluences.length;++A){const S={};let q=!1;for(const U in o.morphAttributes){if(U!=="position"&&U!=="normal"){q||(console.warn("GLTFExporter: Only POSITION and NORMAL morph are supported."),q=!0);continue}const N=o.morphAttributes[U][A],z=U.toUpperCase(),F=o.attributes[U];if(s.attributes.has(this.getUID(N,!0))){S[z]=s.attributes.get(this.getUID(N,!0));continue}const O=N.clone();if(!o.morphTargetsRelative)for(let I=0,ce=N.count;I<ce;I++)for(let v=0;v<N.itemSize;v++)v===0&&O.setX(I,N.getX(I)-F.getX(I)),v===1&&O.setY(I,N.getY(I)-F.getY(I)),v===2&&O.setZ(I,N.getZ(I)-F.getZ(I)),v===3&&O.setW(I,N.getW(I)-F.getW(I));S[z]=this.processAccessor(O,o),s.attributes.set(this.getUID(F,!0),S[z])}l.push(S),T.push(e.morphTargetInfluences[A]),e.morphTargetDictionary!==void 0&&y.push(b[A])}c.weights=T,y.length>0&&(c.extras={},c.extras.targetNames=y)}const x=Array.isArray(e.material);if(x&&o.groups.length===0)return null;let m=!1;if(x&&o.index===null){const T=[];for(let y=0,b=o.attributes.position.count;y<b;y++)T[y]=y;o.setIndex(T),m=!0}const w=x?e.material:[e.material],_=x?o.groups:[{materialIndex:0,start:void 0,count:void 0}];for(let T=0,y=_.length;T<y;T++){const b={mode:a,attributes:u};if(this.serializeUserData(o,b),l.length>0&&(b.targets=l),o.index!==null){let S=this.getUID(o.index);(_[T].start!==void 0||_[T].count!==void 0)&&(S+=":"+_[T].start+":"+_[T].count),s.attributes.has(S)?b.indices=s.attributes.get(S):(b.indices=this.processAccessor(o.index,o,_[T].start,_[T].count),s.attributes.set(S,b.indices)),b.indices===null&&delete b.indices}const A=this.processMaterial(w[_[T].materialIndex]);A!==null&&(b.material=A),p.push(b)}m===!0&&o.setIndex(null),c.primitives=p,t.meshes||(t.meshes=[]),this._invokeAll(function(T){T.writeMesh&&T.writeMesh(e,c)});const B=t.meshes.push(c)-1;return s.meshes.set(i,B),B}detectMeshQuantization(e,s){if(this.extensionsUsed[Y])return;let t;switch(s.array.constructor){case Int8Array:t="byte";break;case Uint8Array:t="unsigned byte";break;case Int16Array:t="short";break;case Uint16Array:t="unsigned short";break;default:return}s.normalized&&(t+=" normalized");const r=e.split("_",1)[0];Z[r]&&Z[r].includes(t)&&(this.extensionsUsed[Y]=!0,this.extensionsRequired[Y]=!0)}processCamera(e){const s=this.json;s.cameras||(s.cameras=[]);const t=e.isOrthographicCamera,r={type:t?"orthographic":"perspective"};return t?r.orthographic={xmag:e.right*2,ymag:e.top*2,zfar:e.far<=0?.001:e.far,znear:e.near<0?0:e.near}:r.perspective={aspectRatio:e.aspect,yfov:d.MathUtils.degToRad(e.fov),zfar:e.far<=0?.001:e.far,znear:e.near<0?0:e.near},e.name!==""&&(r.name=e.type),s.cameras.push(r)-1}processAnimation(e,s){const t=this.json,r=this.nodeMap;t.animations||(t.animations=[]),e=X.Utils.mergeMorphTargetTracks(e.clone(),s);const i=e.tracks,o=[],a=[];for(let c=0;c<i.length;++c){const u=i[c],p=d.PropertyBinding.parseTrackName(u.name);let l=d.PropertyBinding.findNode(s,p.nodeName);const g=J[p.propertyName];if(p.objectName==="bones"&&(l.isSkinnedMesh===!0?l=l.skeleton.getBoneByName(p.objectIndex):l=void 0),!l||!g)return console.warn('THREE.GLTFExporter: Could not export animation track "%s".',u.name),null;const f=1;let h=u.values.length/u.times.length;g===J.morphTargetInfluences&&(h/=l.morphTargetInfluences.length);let x;u.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline===!0?(x="CUBICSPLINE",h/=3):u.getInterpolation()===d.InterpolateDiscrete?x="STEP":x="LINEAR",a.push({input:this.processAccessor(new d.BufferAttribute(u.times,f)),output:this.processAccessor(new d.BufferAttribute(u.values,h)),interpolation:x}),o.push({sampler:a.length-1,target:{node:r.get(l),path:g}})}return t.animations.push({name:e.name||"clip_"+t.animations.length,samplers:a,channels:o}),t.animations.length-1}processSkin(e){const s=this.json,t=this.nodeMap,r=s.nodes[t.get(e)],i=e.skeleton;if(i===void 0)return null;const o=e.skeleton.bones[0];if(o===void 0)return null;const a=[],c=new Float32Array(i.bones.length*16),u=new d.Matrix4;for(let l=0;l<i.bones.length;++l)a.push(t.get(i.bones[l])),u.copy(i.boneInverses[l]),u.multiply(e.bindMatrix).toArray(c,l*16);return s.skins===void 0&&(s.skins=[]),s.skins.push({inverseBindMatrices:this.processAccessor(new d.BufferAttribute(c,16)),joints:a,skeleton:t.get(o)}),r.skin=s.skins.length-1}processNode(e){const s=this.json,t=this.options,r=this.nodeMap;s.nodes||(s.nodes=[]);const i={};if(t.trs){const a=e.quaternion.toArray(),c=e.position.toArray(),u=e.scale.toArray();P(a,[0,0,0,1])||(i.rotation=a),P(c,[0,0,0])||(i.translation=c),P(u,[1,1,1])||(i.scale=u)}else e.matrixAutoUpdate&&e.updateMatrix(),me(e.matrix)===!1&&(i.matrix=e.matrix.elements);if(e.name!==""&&(i.name=String(e.name)),this.serializeUserData(e,i),e.isMesh||e.isLine||e.isPoints){const a=this.processMesh(e);a!==null&&(i.mesh=a)}else e.isCamera&&(i.camera=this.processCamera(e));if(e.isSkinnedMesh&&this.skins.push(e),e.children.length>0){const a=[];for(let c=0,u=e.children.length;c<u;c++){const p=e.children[c];if(p.visible||t.onlyVisible===!1){const l=this.processNode(p);l!==null&&a.push(l)}}a.length>0&&(i.children=a)}this._invokeAll(function(a){a.writeNode&&a.writeNode(e,i)});const o=s.nodes.push(i)-1;return r.set(e,o),o}processScene(e){const s=this.json,t=this.options;s.scenes||(s.scenes=[],s.scene=0);const r={};e.name!==""&&(r.name=e.name),s.scenes.push(r);const i=[];for(let o=0,a=e.children.length;o<a;o++){const c=e.children[o];if(c.visible||t.onlyVisible===!1){const u=this.processNode(c);u!==null&&i.push(u)}}i.length>0&&(r.nodes=i),this.serializeUserData(e,r)}processObjects(e){const s=new d.Scene;s.name="AuxScene";for(let t=0;t<e.length;t++)s.children.push(e[t]);this.processScene(s)}processInput(e){const s=this.options;e=e instanceof Array?e:[e],this._invokeAll(function(r){r.beforeParse&&r.beforeParse(e)});const t=[];for(let r=0;r<e.length;r++)e[r]instanceof d.Scene?this.processScene(e[r]):t.push(e[r]);t.length>0&&this.processObjects(t);for(let r=0;r<this.skins.length;++r)this.processSkin(this.skins[r]);for(let r=0;r<s.animations.length;++r)this.processAnimation(s.animations[r],e[0]);this._invokeAll(function(r){r.afterParse&&r.afterParse(e)})}_invokeAll(e){for(let s=0,t=this.plugins.length;s<t;s++)e(this.plugins[s])}}class ye{constructor(e){this.writer=e,this.name="KHR_lights_punctual"}writeNode(e,s){if(!e.isLight)return;if(!e.isDirectionalLight&&!e.isPointLight&&!e.isSpotLight){console.warn("THREE.GLTFExporter: Only directional, point, and spot lights are supported.",e);return}const t=this.writer,r=t.json,i=t.extensionsUsed,o={};e.name&&(o.name=e.name),o.color=e.color.toArray(),o.intensity=e.intensity,e.isDirectionalLight?o.type="directional":e.isPointLight?(o.type="point",e.distance>0&&(o.range=e.distance)):e.isSpotLight&&(o.type="spot",e.distance>0&&(o.range=e.distance),o.spot={},o.spot.innerConeAngle=(1-e.penumbra)*e.angle,o.spot.outerConeAngle=e.angle),e.decay!==void 0&&e.decay!==2&&console.warn("THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, and expects light.decay=2."),e.target&&(e.target.parent!==e||e.target.position.x!==0||e.target.position.y!==0||e.target.position.z!==-1)&&console.warn("THREE.GLTFExporter: Light direction may be lost. For best results, make light.target a child of the light with position 0,0,-1."),i[this.name]||(r.extensions=r.extensions||{},r.extensions[this.name]={lights:[]},i[this.name]=!0);const a=r.extensions[this.name].lights;a.push(o),s.extensions=s.extensions||{},s.extensions[this.name]={light:a.length-1}}}class we{constructor(e){this.writer=e,this.name="KHR_materials_unlit"}writeMaterial(e,s){if(!e.isMeshBasicMaterial)return;const r=this.writer.extensionsUsed;s.extensions=s.extensions||{},s.extensions[this.name]={},r[this.name]=!0,s.pbrMetallicRoughness.metallicFactor=0,s.pbrMetallicRoughness.roughnessFactor=.9}}class Ee{constructor(e){this.writer=e,this.name="KHR_materials_clearcoat"}writeMaterial(e,s){if(!e.isMeshPhysicalMaterial||e.clearcoat===0)return;const t=this.writer,r=t.extensionsUsed,i={};if(i.clearcoatFactor=e.clearcoat,e.clearcoatMap){const o={index:t.processTexture(e.clearcoatMap),texCoord:e.clearcoatMap.channel};t.applyTextureTransform(o,e.clearcoatMap),i.clearcoatTexture=o}if(i.clearcoatRoughnessFactor=e.clearcoatRoughness,e.clearcoatRoughnessMap){const o={index:t.processTexture(e.clearcoatRoughnessMap),texCoord:e.clearcoatRoughnessMap.channel};t.applyTextureTransform(o,e.clearcoatRoughnessMap),i.clearcoatRoughnessTexture=o}if(e.clearcoatNormalMap){const o={index:t.processTexture(e.clearcoatNormalMap),texCoord:e.clearcoatNormalMap.channel};t.applyTextureTransform(o,e.clearcoatNormalMap),i.clearcoatNormalTexture=o}s.extensions=s.extensions||{},s.extensions[this.name]=i,r[this.name]=!0}}class be{constructor(e){this.writer=e,this.name="KHR_materials_iridescence"}writeMaterial(e,s){if(!e.isMeshPhysicalMaterial||e.iridescence===0)return;const t=this.writer,r=t.extensionsUsed,i={};if(i.iridescenceFactor=e.iridescence,e.iridescenceMap){const o={index:t.processTexture(e.iridescenceMap),texCoord:e.iridescenceMap.channel};t.applyTextureTransform(o,e.iridescenceMap),i.iridescenceTexture=o}if(i.iridescenceIor=e.iridescenceIOR,i.iridescenceThicknessMinimum=e.iridescenceThicknessRange[0],i.iridescenceThicknessMaximum=e.iridescenceThicknessRange[1],e.iridescenceThicknessMap){const o={index:t.processTexture(e.iridescenceThicknessMap),texCoord:e.iridescenceThicknessMap.channel};t.applyTextureTransform(o,e.iridescenceThicknessMap),i.iridescenceThicknessTexture=o}s.extensions=s.extensions||{},s.extensions[this.name]=i,r[this.name]=!0}}class Ae{constructor(e){this.writer=e,this.name="KHR_materials_transmission"}writeMaterial(e,s){if(!e.isMeshPhysicalMaterial||e.transmission===0)return;const t=this.writer,r=t.extensionsUsed,i={};if(i.transmissionFactor=e.transmission,e.transmissionMap){const o={index:t.processTexture(e.transmissionMap),texCoord:e.transmissionMap.channel};t.applyTextureTransform(o,e.transmissionMap),i.transmissionTexture=o}s.extensions=s.extensions||{},s.extensions[this.name]=i,r[this.name]=!0}}class Ie{constructor(e){this.writer=e,this.name="KHR_materials_volume"}writeMaterial(e,s){if(!e.isMeshPhysicalMaterial||e.transmission===0)return;const t=this.writer,r=t.extensionsUsed,i={};if(i.thicknessFactor=e.thickness,e.thicknessMap){const o={index:t.processTexture(e.thicknessMap),texCoord:e.thicknessMap.channel};t.applyTextureTransform(o,e.thicknessMap),i.thicknessTexture=o}i.attenuationDistance=e.attenuationDistance,i.attenuationColor=e.attenuationColor.toArray(),s.extensions=s.extensions||{},s.extensions[this.name]=i,r[this.name]=!0}}class Se{constructor(e){this.writer=e,this.name="KHR_materials_ior"}writeMaterial(e,s){if(!e.isMeshPhysicalMaterial||e.ior===1.5)return;const r=this.writer.extensionsUsed,i={};i.ior=e.ior,s.extensions=s.extensions||{},s.extensions[this.name]=i,r[this.name]=!0}}class Re{constructor(e){this.writer=e,this.name="KHR_materials_specular"}writeMaterial(e,s){if(!e.isMeshPhysicalMaterial||e.specularIntensity===1&&e.specularColor.equals(fe)&&!e.specularIntensityMap&&!e.specularColorMap)return;const t=this.writer,r=t.extensionsUsed,i={};if(e.specularIntensityMap){const o={index:t.processTexture(e.specularIntensityMap),texCoord:e.specularIntensityMap.channel};t.applyTextureTransform(o,e.specularIntensityMap),i.specularTexture=o}if(e.specularColorMap){const o={index:t.processTexture(e.specularColorMap),texCoord:e.specularColorMap.channel};t.applyTextureTransform(o,e.specularColorMap),i.specularColorTexture=o}i.specularFactor=e.specularIntensity,i.specularColorFactor=e.specularColor.toArray(),s.extensions=s.extensions||{},s.extensions[this.name]=i,r[this.name]=!0}}class _e{constructor(e){this.writer=e,this.name="KHR_materials_sheen"}writeMaterial(e,s){if(!e.isMeshPhysicalMaterial||e.sheen==0)return;const t=this.writer,r=t.extensionsUsed,i={};if(e.sheenRoughnessMap){const o={index:t.processTexture(e.sheenRoughnessMap),texCoord:e.sheenRoughnessMap.channel};t.applyTextureTransform(o,e.sheenRoughnessMap),i.sheenRoughnessTexture=o}if(e.sheenColorMap){const o={index:t.processTexture(e.sheenColorMap),texCoord:e.sheenColorMap.channel};t.applyTextureTransform(o,e.sheenColorMap),i.sheenColorTexture=o}i.sheenRoughnessFactor=e.sheenRoughness,i.sheenColorFactor=e.sheenColor.toArray(),s.extensions=s.extensions||{},s.extensions[this.name]=i,r[this.name]=!0}}class Ne{constructor(e){this.writer=e,this.name="KHR_materials_anisotropy"}writeMaterial(e,s){if(!e.isMeshPhysicalMaterial||e.anisotropy==0)return;const t=this.writer,r=t.extensionsUsed,i={};if(e.anisotropyMap){const o={index:t.processTexture(e.anisotropyMap)};t.applyTextureTransform(o,e.anisotropyMap),i.anisotropyTexture=o}i.anisotropyStrength=e.anisotropy,i.anisotropyRotation=e.anisotropyRotation,s.extensions=s.extensions||{},s.extensions[this.name]=i,r[this.name]=!0}}class Le{constructor(e){this.writer=e,this.name="KHR_materials_emissive_strength"}writeMaterial(e,s){if(!e.isMeshStandardMaterial||e.emissiveIntensity===1)return;const r=this.writer.extensionsUsed,i={};i.emissiveStrength=e.emissiveIntensity,s.extensions=s.extensions||{},s.extensions[this.name]=i,r[this.name]=!0}}class ve{constructor(e){this.writer=e,this.name="EXT_materials_bump"}writeMaterial(e,s){if(!e.isMeshStandardMaterial||e.bumpScale===1&&!e.bumpMap)return;const t=this.writer,r=t.extensionsUsed,i={};if(e.bumpMap){const o={index:t.processTexture(e.bumpMap),texCoord:e.bumpMap.channel};t.applyTextureTransform(o,e.bumpMap),i.bumpTexture=o}i.bumpFactor=e.bumpScale,s.extensions=s.extensions||{},s.extensions[this.name]=i,r[this.name]=!0}}class Ce{constructor(e){this.writer=e,this.name="EXT_mesh_gpu_instancing"}writeNode(e,s){if(!e.isInstancedMesh)return;const t=this.writer,r=e,i=new Float32Array(r.count*3),o=new Float32Array(r.count*4),a=new Float32Array(r.count*3),c=new d.Matrix4,u=new d.Vector3,p=new d.Quaternion,l=new d.Vector3;for(let f=0;f<r.count;f++)r.getMatrixAt(f,c),c.decompose(u,p,l),u.toArray(i,f*3),p.toArray(o,f*4),l.toArray(a,f*3);const g={TRANSLATION:t.processAccessor(new d.BufferAttribute(i,3)),ROTATION:t.processAccessor(new d.BufferAttribute(o,4)),SCALE:t.processAccessor(new d.BufferAttribute(a,3))};r.instanceColor&&(g._COLOR_0=t.processAccessor(r.instanceColor)),s.extensions=s.extensions||{},s.extensions[this.name]={attributes:g},t.extensionsUsed[this.name]=!0,t.extensionsRequired[this.name]=!0}}X.Utils={insertKeyframe:function(n,e){const t=n.getValueSize(),r=new n.TimeBufferType(n.times.length+1),i=new n.ValueBufferType(n.values.length+t),o=n.createInterpolant(new n.ValueBufferType(t));let a;if(n.times.length===0){r[0]=e;for(let c=0;c<t;c++)i[c]=0;a=0}else if(e<n.times[0]){if(Math.abs(n.times[0]-e)<.001)return 0;r[0]=e,r.set(n.times,1),i.set(o.evaluate(e),0),i.set(n.values,t),a=0}else if(e>n.times[n.times.length-1]){if(Math.abs(n.times[n.times.length-1]-e)<.001)return n.times.length-1;r[r.length-1]=e,r.set(n.times,0),i.set(n.values,0),i.set(o.evaluate(e),n.values.length),a=r.length-1}else for(let c=0;c<n.times.length;c++){if(Math.abs(n.times[c]-e)<.001)return c;if(n.times[c]<e&&n.times[c+1]>e){r.set(n.times.slice(0,c+1),0),r[c+1]=e,r.set(n.times.slice(c+1),c+2),i.set(n.values.slice(0,(c+1)*t),0),i.set(o.evaluate(e),(c+1)*t),i.set(n.values.slice((c+1)*t),(c+2)*t),a=c+1;break}}return n.times=r,n.values=i,a},mergeMorphTargetTracks:function(n,e){const s=[],t={},r=n.tracks;for(let i=0;i<r.length;++i){let o=r[i];const a=d.PropertyBinding.parseTrackName(o.name),c=d.PropertyBinding.findNode(e,a.nodeName);if(a.propertyName!=="morphTargetInfluences"||a.propertyIndex===void 0){s.push(o);continue}if(o.createInterpolant!==o.InterpolantFactoryMethodDiscrete&&o.createInterpolant!==o.InterpolantFactoryMethodLinear){if(o.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline)throw new Error("THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation.");console.warn("THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead."),o=o.clone(),o.setInterpolation(d.InterpolateLinear)}const u=c.morphTargetInfluences.length,p=c.morphTargetDictionary[a.propertyIndex];if(p===void 0)throw new Error("THREE.GLTFExporter: Morph target name not found: "+a.propertyIndex);let l;if(t[c.uuid]===void 0){l=o.clone();const f=new l.ValueBufferType(u*l.times.length);for(let h=0;h<l.times.length;h++)f[h*u+p]=l.values[h];l.name=(a.nodeName||"")+".morphTargetInfluences",l.values=f,t[c.uuid]=l,s.push(l);continue}const g=o.createInterpolant(new o.ValueBufferType(1));l=t[c.uuid];for(let f=0;f<l.times.length;f++)l.values[f*u+p]=g.evaluate(l.times[f]);for(let f=0;f<o.times.length;f++){const h=this.insertKeyframe(l,o.times[f]);l.values[h*u+p]=o.values[f]}}return n.tracks=s,n}};class Ue{async parse(e,s={}){s=Object.assign({ar:{anchoring:{type:"plane"},planeAnchoring:{alignment:"horizontal"}},quickLookCompatible:!1,maxTextureSize:1024},s);const t={},r="model.usda";t[r]=null;let i=oe();i+=Oe(s);const o={},a={};e.traverseVisible(u=>{if(u.isMesh){const p=u.geometry,l=u.material;if(l.isMeshStandardMaterial){const g="geometries/Geometry_"+p.id+".usda";if(!(g in t)){const f=De(p);t[g]=Pe(f)}l.uuid in o||(o[l.uuid]=l),i+=Be(u,p,l)}else console.warn("THREE.USDZExporter: Unsupported material type (USDZ only supports MeshStandardMaterial)",u)}else u.isCamera&&(i+=We(u))}),i+=$e(),i+=Ye(o,a,s.quickLookCompatible),t[r]=K.strToU8(i),i=null;for(const u in a){let p=a[u];p.isCompressedTexture===!0&&(p=k(p));const l=Fe(p.image,p.flipY,s.maxTextureSize),g=await new Promise(f=>l.toBlob(f,"image/png",1));t[`textures/Texture_${u}.png`]=new Uint8Array(await g.arrayBuffer())}let c=0;for(const u in t){const p=t[u],l=34+u.length;c+=l;const g=c&63;if(g!==4){const f=64-g,h=new Uint8Array(f);t[u]=[p,{extra:{12345:h}}]}c=p.length}return K.zipSync(t,{level:0})}}function Fe(n,e,s){if(typeof HTMLImageElement<"u"&&n instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&n instanceof HTMLCanvasElement||typeof OffscreenCanvas<"u"&&n instanceof OffscreenCanvas||typeof ImageBitmap<"u"&&n instanceof ImageBitmap){const t=s/Math.max(n.width,n.height),r=document.createElement("canvas");r.width=n.width*Math.min(1,t),r.height=n.height*Math.min(1,t);const i=r.getContext("2d");return e===!0&&(i.translate(0,r.height),i.scale(1,-1)),i.drawImage(n,0,0,r.width,r.height),r}else throw new Error("THREE.USDZExporter: No valid image data found. Unable to process texture.")}const E=7;function oe(){return`#usda 1.0
19
+ (
20
+ customLayerData = {
21
+ string creator = "Three.js USDZExporter"
22
+ }
23
+ defaultPrim = "Root"
24
+ metersPerUnit = 1
25
+ upAxis = "Y"
26
+ )
27
+
28
+ `}function Oe(n){return`def Xform "Root"
29
+ {
30
+ def Scope "Scenes" (
31
+ kind = "sceneLibrary"
32
+ )
33
+ {
34
+ def Xform "Scene" (
35
+ customData = {
36
+ bool preliminary_collidesWithEnvironment = 0
37
+ string sceneName = "Scene"
38
+ }
39
+ sceneName = "Scene"
40
+ )
41
+ {
42
+ token preliminary:anchoring:type = "${n.ar.anchoring.type}"
43
+ token preliminary:planeAnchoring:alignment = "${n.ar.planeAnchoring.alignment}"
44
+
45
+ `}function $e(){return`
46
+ }
47
+ }
48
+ }
49
+
50
+ `}function Pe(n){let e=oe();return e+=n,K.strToU8(e)}function Be(n,e,s){const t="Object_"+n.id,r=ae(n.matrixWorld);return n.matrixWorld.determinant()<0&&console.warn("THREE.USDZExporter: USDZ does not support negative scales",n),`def Xform "${t}" (
51
+ prepend references = @./geometries/Geometry_${e.id}.usda@</Geometry>
52
+ prepend apiSchemas = ["MaterialBindingAPI"]
53
+ )
54
+ {
55
+ matrix4d xformOp:transform = ${r}
56
+ uniform token[] xformOpOrder = ["xformOp:transform"]
57
+
58
+ rel material:binding = </Materials/Material_${s.id}>
59
+ }
60
+
61
+ `}function ae(n){const e=n.elements;return`( ${G(e,0)}, ${G(e,4)}, ${G(e,8)}, ${G(e,12)} )`}function G(n,e){return`(${n[e+0]}, ${n[e+1]}, ${n[e+2]}, ${n[e+3]})`}function De(n){return`
62
+ def "Geometry"
63
+ {
64
+ ${Ge(n)}
65
+ }
66
+ `}function Ge(n){const e="Geometry",s=n.attributes,t=s.position.count;return`
67
+ def Mesh "${e}"
68
+ {
69
+ int[] faceVertexCounts = [${ke(n)}]
70
+ int[] faceVertexIndices = [${ze(n)}]
71
+ normal3f[] normals = [${W(s.normal,t)}] (
72
+ interpolation = "vertex"
73
+ )
74
+ point3f[] points = [${W(s.position,t)}]
75
+ ${Ve(s)}
76
+ uniform token subdivisionScheme = "none"
77
+ }
78
+ `}function ke(n){const e=n.index!==null?n.index.count:n.attributes.position.count;return Array(e/3).fill(3).join(", ")}function ze(n){const e=n.index,s=[];if(e!==null)for(let t=0;t<e.count;t++)s.push(e.getX(t));else{const t=n.attributes.position.count;for(let r=0;r<t;r++)s.push(r)}return s.join(", ")}function W(n,e){if(n===void 0)return console.warn("USDZExporter: Normals missing."),Array(e).fill("(0, 0, 0)").join(", ");const s=[];for(let t=0;t<n.count;t++){const r=n.getX(t),i=n.getY(t),o=n.getZ(t);s.push(`(${r.toPrecision(E)}, ${i.toPrecision(E)}, ${o.toPrecision(E)})`)}return s.join(", ")}function He(n){const e=[];for(let s=0;s<n.count;s++){const t=n.getX(s),r=n.getY(s);e.push(`(${t.toPrecision(E)}, ${1-r.toPrecision(E)})`)}return e.join(", ")}function Ve(n){let e="";for(let t=0;t<4;t++){const r=t>0?t:"",i=n["uv"+r];i!==void 0&&(e+=`
79
+ texCoord2f[] primvars:st${r} = [${He(i)}] (
80
+ interpolation = "vertex"
81
+ )`)}const s=n.color;if(s!==void 0){const t=s.count;e+=`
82
+ color3f[] primvars:displayColor = [${W(s,t)}] (
83
+ interpolation = "vertex"
84
+ )`}return e}function Ye(n,e,s=!1){const t=[];for(const r in n){const i=n[r];t.push(je(i,e,s))}return`def "Materials"
85
+ {
86
+ ${t.join("")}
87
+ }
88
+
89
+ `}function je(n,e,s=!1){const t=" ",r=[],i=[];function o(a,c,u){const p=a.source.id+"_"+a.flipY;e[p]=a;const l=a.channel>0?"st"+a.channel:"st",g={1e3:"repeat",1001:"clamp",1002:"mirror"},f=a.repeat.clone(),h=a.offset.clone(),x=a.rotation,m=Math.sin(x),w=Math.cos(x);return h.y=1-h.y-f.y,s?(h.x=h.x/f.x,h.y=h.y/f.y,h.x+=m/f.x,h.y+=w-1):(h.x+=m*f.x,h.y+=(1-w)*f.y),`
90
+ def Shader "PrimvarReader_${c}"
91
+ {
92
+ uniform token info:id = "UsdPrimvarReader_float2"
93
+ float2 inputs:fallback = (0.0, 0.0)
94
+ token inputs:varname = "${l}"
95
+ float2 outputs:result
96
+ }
97
+
98
+ def Shader "Transform2d_${c}"
99
+ {
100
+ uniform token info:id = "UsdTransform2d"
101
+ token inputs:in.connect = </Materials/Material_${n.id}/PrimvarReader_${c}.outputs:result>
102
+ float inputs:rotation = ${(x*(180/Math.PI)).toFixed(E)}
103
+ float2 inputs:scale = ${re(f)}
104
+ float2 inputs:translation = ${re(h)}
105
+ float2 outputs:result
106
+ }
107
+
108
+ def Shader "Texture_${a.id}_${c}"
109
+ {
110
+ uniform token info:id = "UsdUVTexture"
111
+ asset inputs:file = @textures/Texture_${p}.png@
112
+ float2 inputs:st.connect = </Materials/Material_${n.id}/Transform2d_${c}.outputs:result>
113
+ ${u!==void 0?"float4 inputs:scale = "+Ke(u):""}
114
+ token inputs:sourceColorSpace = "${a.colorSpace===d.NoColorSpace?"raw":"sRGB"}"
115
+ token inputs:wrapS = "${g[a.wrapS]}"
116
+ token inputs:wrapT = "${g[a.wrapT]}"
117
+ float outputs:r
118
+ float outputs:g
119
+ float outputs:b
120
+ float3 outputs:rgb
121
+ ${n.transparent||n.alphaTest>0?"float outputs:a":""}
122
+ }`}return n.side===d.DoubleSide&&console.warn("THREE.USDZExporter: USDZ does not support double sided materials",n),n.map!==null?(r.push(`${t}color3f inputs:diffuseColor.connect = </Materials/Material_${n.id}/Texture_${n.map.id}_diffuse.outputs:rgb>`),n.transparent?r.push(`${t}float inputs:opacity.connect = </Materials/Material_${n.id}/Texture_${n.map.id}_diffuse.outputs:a>`):n.alphaTest>0&&(r.push(`${t}float inputs:opacity.connect = </Materials/Material_${n.id}/Texture_${n.map.id}_diffuse.outputs:a>`),r.push(`${t}float inputs:opacityThreshold = ${n.alphaTest}`)),i.push(o(n.map,"diffuse",n.color))):r.push(`${t}color3f inputs:diffuseColor = ${ne(n.color)}`),n.emissiveMap!==null?(r.push(`${t}color3f inputs:emissiveColor.connect = </Materials/Material_${n.id}/Texture_${n.emissiveMap.id}_emissive.outputs:rgb>`),i.push(o(n.emissiveMap,"emissive"))):n.emissive.getHex()>0&&r.push(`${t}color3f inputs:emissiveColor = ${ne(n.emissive)}`),n.normalMap!==null&&(r.push(`${t}normal3f inputs:normal.connect = </Materials/Material_${n.id}/Texture_${n.normalMap.id}_normal.outputs:rgb>`),i.push(o(n.normalMap,"normal"))),n.aoMap!==null&&(r.push(`${t}float inputs:occlusion.connect = </Materials/Material_${n.id}/Texture_${n.aoMap.id}_occlusion.outputs:r>`),i.push(o(n.aoMap,"occlusion"))),n.roughnessMap!==null&&n.roughness===1?(r.push(`${t}float inputs:roughness.connect = </Materials/Material_${n.id}/Texture_${n.roughnessMap.id}_roughness.outputs:g>`),i.push(o(n.roughnessMap,"roughness"))):r.push(`${t}float inputs:roughness = ${n.roughness}`),n.metalnessMap!==null&&n.metalness===1?(r.push(`${t}float inputs:metallic.connect = </Materials/Material_${n.id}/Texture_${n.metalnessMap.id}_metallic.outputs:b>`),i.push(o(n.metalnessMap,"metallic"))):r.push(`${t}float inputs:metallic = ${n.metalness}`),n.alphaMap!==null?(r.push(`${t}float inputs:opacity.connect = </Materials/Material_${n.id}/Texture_${n.alphaMap.id}_opacity.outputs:r>`),r.push(`${t}float inputs:opacityThreshold = 0.0001`),i.push(o(n.alphaMap,"opacity"))):r.push(`${t}float inputs:opacity = ${n.opacity}`),n.isMeshPhysicalMaterial&&(r.push(`${t}float inputs:clearcoat = ${n.clearcoat}`),r.push(`${t}float inputs:clearcoatRoughness = ${n.clearcoatRoughness}`),r.push(`${t}float inputs:ior = ${n.ior}`)),`
123
+ def Material "Material_${n.id}"
124
+ {
125
+ def Shader "PreviewSurface"
126
+ {
127
+ uniform token info:id = "UsdPreviewSurface"
128
+ ${r.join(`
129
+ `)}
130
+ int inputs:useSpecularWorkflow = 0
131
+ token outputs:surface
132
+ }
133
+
134
+ token outputs:surface.connect = </Materials/Material_${n.id}/PreviewSurface.outputs:surface>
135
+
136
+ ${i.join(`
137
+ `)}
138
+
139
+ }
140
+ `}function ne(n){return`(${n.r}, ${n.g}, ${n.b})`}function Ke(n){return`(${n.r}, ${n.g}, ${n.b}, 1.0)`}function re(n){return`(${n.x}, ${n.y})`}function We(n){const e=n.name?n.name:"Camera_"+n.id,s=ae(n.matrixWorld);return n.matrixWorld.determinant()<0&&console.warn("THREE.USDZExporter: USDZ does not support negative scales",n),n.isOrthographicCamera?`def Camera "${e}"
141
+ {
142
+ matrix4d xformOp:transform = ${s}
143
+ uniform token[] xformOpOrder = ["xformOp:transform"]
144
+
145
+ float2 clippingRange = (${n.near.toPrecision(E)}, ${n.far.toPrecision(E)})
146
+ float horizontalAperture = ${((Math.abs(n.left)+Math.abs(n.right))*10).toPrecision(E)}
147
+ float verticalAperture = ${((Math.abs(n.top)+Math.abs(n.bottom))*10).toPrecision(E)}
148
+ token projection = "orthographic"
149
+ }
150
+
151
+ `:`def Camera "${e}"
152
+ {
153
+ matrix4d xformOp:transform = ${s}
154
+ uniform token[] xformOpOrder = ["xformOp:transform"]
155
+
156
+ float2 clippingRange = (${n.near.toPrecision(E)}, ${n.far.toPrecision(E)})
157
+ float focalLength = ${n.getFocalLength().toPrecision(E)}
158
+ float focusDistance = ${n.focus.toPrecision(E)}
159
+ float horizontalAperture = ${n.getFilmWidth().toPrecision(E)}
160
+ token projection = "perspective"
161
+ float verticalAperture = ${n.getFilmHeight().toPrecision(E)}
162
+ }
163
+
164
+ `}class Xe{constructor(){H(this,"_gltfExporter");H(this,"_usdzExporter");this._gltfExporter=new X,this._usdzExporter=new Ue}async export(e,s,t){switch(s){case"glb":return this._exportGlb(e,t);case"gltf":return this._exportGltf(e,t);case"usdz":return this._exportUsdz(e,t);default:throw new L.FileTypeError(`Unsupported file type: ${s}`,s)}}async _exportGlb(e,s){try{const t=await this._gltfExporter.parseAsync(e,{...s,binary:!0});if(t instanceof ArrayBuffer)return t;throw new L.ParseError("Failed to export GLB: expected ArrayBuffer")}catch(t){throw t instanceof L.ParseError?t:new L.ParseError("Failed to export GLB",t)}}async _exportGltf(e,s){try{const t=await this._gltfExporter.parseAsync(e,{...s,binary:!1}),r=JSON.stringify(t);return new TextEncoder().encode(r).buffer}catch(t){throw t instanceof L.ParseError?t:new L.ParseError("Failed to export GLTF",t)}}async _exportUsdz(e,s){try{return(await this._usdzExporter.parse(e,s)).buffer}catch(t){throw t instanceof L.ParseError?t:new L.ParseError("Failed to export USDZ",t)}}}exports.AssetExporter=Xe;
165
+ //# sourceMappingURL=AssetExporter.cjs.map