@shopware-ag/dive 2.3.8 → 3.0.0-beta.1

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 (142) hide show
  1. package/build/chunks/Animator-DHnpWRt_.mjs +16 -0
  2. package/build/chunks/Animator-YDE8aFEd.cjs +1 -0
  3. package/build/chunks/AssetCache-Bk3ov4KH.cjs +1 -0
  4. package/build/chunks/{AssetCache-CJPVU7kz.mjs → AssetCache-DNcSNSJk.mjs} +6 -5
  5. package/build/chunks/AssetExporter-Cdxb04b3.cjs +1 -0
  6. package/build/chunks/AssetExporter-DLL_vJae.mjs +67 -0
  7. package/build/chunks/AssetLoader-D6ScugS-.cjs +3 -0
  8. package/build/chunks/AssetLoader-Dvq0Wk28.mjs +499 -0
  9. package/build/chunks/{ClipAnimator-keFLDMNZ.mjs → ClipAnimator-D8Gho4Ec.mjs} +2 -2
  10. package/build/chunks/ClipAnimator-SdDq2wk1.cjs +1 -0
  11. package/build/chunks/FileTypes-CGEeONh9.cjs +29 -0
  12. package/build/chunks/FileTypes-DU8bBa_V.mjs +1976 -0
  13. package/build/chunks/GridNode-0R5ZnzR6.mjs +30 -0
  14. package/build/chunks/GridNode-iqnu86_v.cjs +1 -0
  15. package/build/chunks/{PerspectiveCamera-BFzE2TQU.mjs → PerspectiveCamera-B5TvUzTa.mjs} +1 -1
  16. package/build/chunks/PerspectiveCamera-DwQUmkDv.cjs +1 -0
  17. package/build/chunks/{TargetAnimator-DuqPk2eq.cjs → TargetAnimator-D37bWNKD.cjs} +1 -1
  18. package/build/chunks/{TargetAnimator-DUqkkdVb.mjs → TargetAnimator-DL_9b921.mjs} +1 -1
  19. package/build/chunks/{isFileTypeSupported-CqzOKCiV.mjs → isFileTypeSupported-DY4QOFj7.mjs} +1 -1
  20. package/build/chunks/{isFileTypeSupported-D97zmt1P.cjs → isFileTypeSupported-DrMUwnQx.cjs} +1 -1
  21. package/build/components/boundingbox/BoundingBox.d.ts +1 -1
  22. package/build/components/floor/Floor.d.ts +1 -1
  23. package/build/components/gizmo/Gizmo.d.ts +1 -1
  24. package/build/components/gizmo/handles/AxisHandle.d.ts +1 -1
  25. package/build/components/gizmo/handles/RadialHandle.d.ts +1 -1
  26. package/build/components/gizmo/handles/ScaleHandle.d.ts +1 -1
  27. package/build/components/gizmo/plane/GizmoPlane.d.ts +1 -1
  28. package/build/components/gizmo/rotate/RotateGizmo.d.ts +1 -1
  29. package/build/components/gizmo/scale/ScaleGizmo.d.ts +1 -1
  30. package/build/components/gizmo/translate/TranslateGizmo.d.ts +1 -1
  31. package/build/components/grid/Grid.d.ts +2 -1
  32. package/build/components/group/Group.d.ts +1 -1
  33. package/build/components/light/AmbientLight.d.ts +1 -1
  34. package/build/components/light/PointLight.d.ts +1 -1
  35. package/build/components/light/SceneLight.d.ts +1 -1
  36. package/build/components/model/Model.d.ts +1 -1
  37. package/build/components/node/Node.d.ts +1 -1
  38. package/build/components/primitive/Primitive.d.ts +1 -1
  39. package/build/components/root/Root.d.ts +1 -1
  40. package/build/dive.cjs +1 -1
  41. package/build/dive.mjs +58 -60
  42. package/build/engine/Dive.d.ts +4 -31
  43. package/build/engine/camera/PerspectiveCamera.d.ts +1 -1
  44. package/build/engine/environment/Environment.d.ts +12 -27
  45. package/build/engine/renderer/Renderer.d.ts +7 -8
  46. package/build/engine/scene/Scene.d.ts +1 -1
  47. package/build/engine/scene/xrroot/XRRoot.d.ts +2 -3
  48. package/build/engine/scene/xrroot/xrlightroot/XRLightRoot.d.ts +3 -3
  49. package/build/helpers/findInterface/findInterface.d.ts +1 -1
  50. package/build/helpers/findSceneRecursive/findSceneRecursive.d.ts +1 -1
  51. package/build/helpers/implementsInterface/implementsInterface.d.ts +1 -1
  52. package/build/helpers/math/signedAngleTo/signedAngleTo.d.ts +1 -1
  53. package/build/interfaces/Hoverable.d.ts +1 -1
  54. package/build/plugins/animation/index.cjs +1 -1
  55. package/build/plugins/animation/index.mjs +12 -20
  56. package/build/plugins/animation/src/animator/Animator.d.ts +1 -1
  57. package/build/plugins/animation/src/animator/ClipAnimator.d.ts +1 -1
  58. package/build/plugins/animation/src/system/AnimationSystem.d.ts +1 -6
  59. package/build/plugins/animation/src/types/AnimatorTypes.d.ts +1 -1
  60. package/build/plugins/ar/index.cjs +1 -1
  61. package/build/plugins/ar/index.mjs +5 -4
  62. package/build/plugins/ar/src/webxr/controller/WebXRController.d.ts +1 -1
  63. package/build/plugins/ar/src/webxr/crosshair/WebXRCrosshair.d.ts +1 -1
  64. package/build/plugins/ar/src/webxr/origin/WebXROrigin.d.ts +1 -1
  65. package/build/plugins/ar/src/webxr/raycaster/WebXRRaycaster.d.ts +1 -1
  66. package/build/plugins/ar/src/webxr/touchscreencontrols/WebXRTouchscreenControls.d.ts +1 -1
  67. package/build/plugins/assetcache/index.cjs +1 -1
  68. package/build/plugins/assetcache/index.mjs +1 -1
  69. package/build/plugins/assetexporter/index.cjs +1 -1
  70. package/build/plugins/assetexporter/index.mjs +1 -1
  71. package/build/plugins/assetexporter/src/AssetExporter.d.ts +1 -1
  72. package/build/plugins/assetloader/index.cjs +1 -1
  73. package/build/plugins/assetloader/index.mjs +2 -2
  74. package/build/plugins/assetloader/src/loader/AssetLoader.d.ts +2 -2
  75. package/build/plugins/assetloader/src/step/STEPLoader.d.ts +1 -1
  76. package/build/plugins/mediacreator/index.cjs +1 -1
  77. package/build/plugins/mediacreator/index.mjs +52 -24
  78. package/build/plugins/mediacreator/src/MediaCreator.d.ts +4 -3
  79. package/build/plugins/mediacreator/types/MediaGenerationByPosition.d.ts +1 -1
  80. package/build/plugins/orbitcontroller/index.cjs +1 -1
  81. package/build/plugins/orbitcontroller/index.mjs +1 -1
  82. package/build/plugins/orbitcontroller/src/OrbitController.d.ts +1 -1
  83. package/build/plugins/orbitcontroller/types/OrbitControllerState.types.d.ts +1 -1
  84. package/build/plugins/orientationdisplay/index.cjs +1 -1
  85. package/build/plugins/orientationdisplay/index.mjs +17 -16
  86. package/build/plugins/orientationdisplay/src/axes/Axes.d.ts +1 -1
  87. package/build/plugins/quickview/index.cjs +1 -1
  88. package/build/plugins/quickview/index.mjs +9 -8
  89. package/build/plugins/shader/index.cjs +1 -1
  90. package/build/plugins/shader/index.mjs +2 -3
  91. package/build/plugins/shader/src/index.d.ts +1 -3
  92. package/build/plugins/shader/src/shaders/GridNode.d.ts +16 -0
  93. package/build/plugins/state/index.cjs +9 -9
  94. package/build/plugins/state/index.mjs +939 -936
  95. package/build/plugins/state/src/actions/camera/computeencompassingview.d.ts +1 -1
  96. package/build/plugins/state/src/actions/camera/getcameratransform.d.ts +1 -1
  97. package/build/plugins/state/src/actions/camera/movecamera.d.ts +1 -1
  98. package/build/plugins/state/src/actions/camera/setcameratransform.d.ts +1 -1
  99. package/build/plugins/state/types/StateSceneData.d.ts +1 -1
  100. package/build/plugins/toolbox/index.cjs +1 -1
  101. package/build/plugins/toolbox/index.d.ts +0 -1
  102. package/build/plugins/toolbox/index.mjs +224 -853
  103. package/build/plugins/toolbox/src/PointerContext.d.ts +1 -1
  104. package/build/plugins/toolbox/src/SelectionState.d.ts +1 -1
  105. package/build/plugins/toolbox/src/Toolbox.d.ts +0 -10
  106. package/build/plugins/toolbox/src/drag/DragTool.d.ts +1 -1
  107. package/build/plugins/toolbox/src/drag/DraggableEvent.d.ts +1 -1
  108. package/build/plugins/toolbox/src/hover/HoverTool.d.ts +1 -1
  109. package/build/plugins/toolbox/src/select/SelectTool.d.ts +1 -1
  110. package/build/plugins/toolbox/src/transform/TransformTool.d.ts +2 -1
  111. package/build/types/schema/GroupSchema.d.ts +1 -1
  112. package/build/types/schema/LightSchema.d.ts +1 -1
  113. package/build/types/schema/MaterialSchema.d.ts +1 -1
  114. package/build/types/schema/ModelSchema.d.ts +1 -1
  115. package/build/types/schema/PovSchema.d.ts +1 -1
  116. package/build/types/schema/PrimitiveSchema.d.ts +1 -1
  117. package/package.json +5 -4
  118. package/build/chunks/Animator-BGFdF70Z.mjs +0 -47
  119. package/build/chunks/Animator-Cu7NIkVg.cjs +0 -1
  120. package/build/chunks/AssetCache-B74AQgyY.cjs +0 -1
  121. package/build/chunks/AssetExporter-PFiNYi50.mjs +0 -1628
  122. package/build/chunks/AssetExporter-yVhYmVXW.cjs +0 -164
  123. package/build/chunks/AssetLoader-BCI944C9.mjs +0 -2590
  124. package/build/chunks/AssetLoader-BIU78Bv9.cjs +0 -5
  125. package/build/chunks/ClipAnimator-tjhLo851.cjs +0 -1
  126. package/build/chunks/DIVEShaderMaterial-Bt0d8oJB.mjs +0 -3468
  127. package/build/chunks/DIVEShaderMaterial-DE8YRWj9.cjs +0 -1554
  128. package/build/chunks/FileTypes-B0qjl7u2.cjs +0 -33
  129. package/build/chunks/FileTypes-DJxyD4wK.mjs +0 -2155
  130. package/build/chunks/PerspectiveCamera-iAsZqrnY.cjs +0 -1
  131. package/build/chunks/draco_decoder-Bh9flJPu.cjs +0 -1
  132. package/build/chunks/draco_decoder-CEzwqP9o.mjs +0 -38
  133. package/build/chunks/draco_decoder-DtHHc5d0.mjs +0 -4
  134. package/build/chunks/draco_decoder-DvYjcLz_.cjs +0 -35
  135. package/build/chunks/draco_wasm_wrapper-FoEVV9af.cjs +0 -118
  136. package/build/chunks/draco_wasm_wrapper-yQy2VLhb.mjs +0 -121
  137. package/build/chunks/fflate.module-DHdJvhNh.cjs +0 -6
  138. package/build/chunks/fflate.module-xyO_T3Zm.mjs +0 -602
  139. package/build/plugins/shader/src/material/DIVEShaderMaterial.d.ts +0 -5
  140. package/build/plugins/shader/src/shaders/DIVEShaderLib.d.ts +0 -2
  141. package/build/plugins/shader/src/shaders/grid/index.d.ts +0 -40
  142. package/build/plugins/toolbox/src/BaseTool.d.ts +0 -59
@@ -1,1628 +0,0 @@
1
- var Me = Object.defineProperty;
2
- var ye = (n, e, s) => e in n ? Me(n, e, { enumerable: !0, configurable: !0, writable: !0, value: s }) : n[e] = s;
3
- var Y = (n, e, s) => ye(n, typeof e != "symbol" ? e + "" : e, s);
4
- import { PlaneGeometry as we, ShaderMaterial as Ee, Uniform as Ae, SRGBColorSpace as ue, Mesh as le, PerspectiveCamera as Ie, Scene as Z, WebGLRenderer as be, CanvasTexture as Re, Color as _e, Matrix4 as fe, Vector3 as B, Quaternion as Se, BufferAttribute as v, CompressedTexture as K, Source as Ne, NoColorSpace as pe, MathUtils as q, RGBAFormat as ve, DoubleSide as he, PropertyBinding as H, InterpolateDiscrete as Le, NearestFilter as Ce, NearestMipmapNearestFilter as Ue, NearestMipmapLinearFilter as Fe, LinearFilter as $e, LinearMipmapNearestFilter as Oe, LinearMipmapLinearFilter as Pe, ClampToEdgeWrapping as De, RepeatWrapping as Ge, MirroredRepeatWrapping as ke, InterpolateLinear as ze } from "three";
5
- import { s as de, z as Be } from "./fflate.module-xyO_T3Zm.mjs";
6
- import { F as He, P as N } from "./parse-error-DfOPyLWM.mjs";
7
- let O, W, C, G;
8
- function z(n, e = 1 / 0, s = null) {
9
- W || (W = new we(2, 2, 1, 1)), C || (C = new Ee({
10
- uniforms: { blitTexture: new Ae(n) },
11
- vertexShader: `
12
- varying vec2 vUv;
13
- void main(){
14
- vUv = uv;
15
- gl_Position = vec4(position.xy * 1.0,0.,.999999);
16
- }`,
17
- fragmentShader: `
18
- uniform sampler2D blitTexture;
19
- varying vec2 vUv;
20
-
21
- void main(){
22
- gl_FragColor = vec4(vUv.xy, 0, 1);
23
-
24
- #ifdef IS_SRGB
25
- gl_FragColor = LinearTosRGB( texture2D( blitTexture, vUv) );
26
- #else
27
- gl_FragColor = texture2D( blitTexture, vUv);
28
- #endif
29
- }`
30
- })), C.uniforms.blitTexture.value = n, C.defines.IS_SRGB = n.colorSpace == ue, C.needsUpdate = !0, G || (G = new le(W, C), G.frustumCulled = !1);
31
- const t = new Ie(), i = new Z();
32
- i.add(G), s === null && (s = O = new be({ antialias: !1 }));
33
- const r = Math.min(n.image.width, e), o = Math.min(n.image.height, e);
34
- s.setSize(r, o), s.clear(), s.render(i, t);
35
- const a = document.createElement("canvas"), c = a.getContext("2d");
36
- a.width = r, a.height = o, c.drawImage(s.domElement, 0, 0, r, o);
37
- const u = new Re(a);
38
- return u.minFilter = n.minFilter, u.magFilter = n.magFilter, u.wrapS = n.wrapS, u.wrapT = n.wrapT, u.name = n.name, O && (O.forceContextLoss(), O.dispose(), O = null), u;
39
- }
40
- const te = {
41
- POSITION: [
42
- "byte",
43
- "byte normalized",
44
- "unsigned byte",
45
- "unsigned byte normalized",
46
- "short",
47
- "short normalized",
48
- "unsigned short",
49
- "unsigned short normalized"
50
- ],
51
- NORMAL: [
52
- "byte normalized",
53
- "short normalized"
54
- ],
55
- TANGENT: [
56
- "byte normalized",
57
- "short normalized"
58
- ],
59
- TEXCOORD: [
60
- "byte",
61
- "byte normalized",
62
- "unsigned byte",
63
- "short",
64
- "short normalized",
65
- "unsigned short"
66
- ]
67
- };
68
- class Q {
69
- constructor() {
70
- this.pluginCallbacks = [], this.register(function(e) {
71
- return new Qe(e);
72
- }), this.register(function(e) {
73
- return new et(e);
74
- }), this.register(function(e) {
75
- return new nt(e);
76
- }), this.register(function(e) {
77
- return new it(e);
78
- }), this.register(function(e) {
79
- return new rt(e);
80
- }), this.register(function(e) {
81
- return new ot(e);
82
- }), this.register(function(e) {
83
- return new tt(e);
84
- }), this.register(function(e) {
85
- return new st(e);
86
- }), this.register(function(e) {
87
- return new at(e);
88
- }), this.register(function(e) {
89
- return new ct(e);
90
- }), this.register(function(e) {
91
- return new ut(e);
92
- }), this.register(function(e) {
93
- return new lt(e);
94
- }), this.register(function(e) {
95
- return new ft(e);
96
- });
97
- }
98
- register(e) {
99
- return this.pluginCallbacks.indexOf(e) === -1 && this.pluginCallbacks.push(e), this;
100
- }
101
- unregister(e) {
102
- return this.pluginCallbacks.indexOf(e) !== -1 && this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e), 1), this;
103
- }
104
- /**
105
- * Parse scenes and generate GLTF output
106
- * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes
107
- * @param {Function} onDone Callback on completed
108
- * @param {Function} onError Callback on errors
109
- * @param {Object} options options
110
- */
111
- parse(e, s, t, i) {
112
- const r = new Je(), o = [];
113
- for (let a = 0, c = this.pluginCallbacks.length; a < c; a++)
114
- o.push(this.pluginCallbacks[a](r));
115
- r.setPlugins(o), r.write(e, s, i).catch(t);
116
- }
117
- parseAsync(e, s) {
118
- const t = this;
119
- return new Promise(function(i, r) {
120
- t.parse(e, i, r, s);
121
- });
122
- }
123
- }
124
- const T = {
125
- POINTS: 0,
126
- LINES: 1,
127
- LINE_LOOP: 2,
128
- LINE_STRIP: 3,
129
- TRIANGLES: 4,
130
- BYTE: 5120,
131
- UNSIGNED_BYTE: 5121,
132
- SHORT: 5122,
133
- UNSIGNED_SHORT: 5123,
134
- INT: 5124,
135
- UNSIGNED_INT: 5125,
136
- FLOAT: 5126,
137
- ARRAY_BUFFER: 34962,
138
- ELEMENT_ARRAY_BUFFER: 34963,
139
- NEAREST: 9728,
140
- LINEAR: 9729,
141
- NEAREST_MIPMAP_NEAREST: 9984,
142
- LINEAR_MIPMAP_NEAREST: 9985,
143
- NEAREST_MIPMAP_LINEAR: 9986,
144
- LINEAR_MIPMAP_LINEAR: 9987,
145
- CLAMP_TO_EDGE: 33071,
146
- MIRRORED_REPEAT: 33648,
147
- REPEAT: 10497
148
- }, j = "KHR_mesh_quantization", R = {};
149
- R[Ce] = T.NEAREST;
150
- R[Ue] = T.NEAREST_MIPMAP_NEAREST;
151
- R[Fe] = T.NEAREST_MIPMAP_LINEAR;
152
- R[$e] = T.LINEAR;
153
- R[Oe] = T.LINEAR_MIPMAP_NEAREST;
154
- R[Pe] = T.LINEAR_MIPMAP_LINEAR;
155
- R[De] = T.CLAMP_TO_EDGE;
156
- R[Ge] = T.REPEAT;
157
- R[ke] = T.MIRRORED_REPEAT;
158
- const se = {
159
- scale: "scale",
160
- position: "translation",
161
- quaternion: "rotation",
162
- morphTargetInfluences: "weights"
163
- }, Ve = new _e(), ne = 12, Ye = 1179937895, Ke = 2, ie = 8, We = 1313821514, je = 5130562;
164
- function P(n, e) {
165
- return n.length === e.length && n.every(function(s, t) {
166
- return s === e[t];
167
- });
168
- }
169
- function Xe(n) {
170
- return new TextEncoder().encode(n).buffer;
171
- }
172
- function Ze(n) {
173
- return P(n.elements, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
174
- }
175
- function qe(n, e, s) {
176
- const t = {
177
- min: new Array(n.itemSize).fill(Number.POSITIVE_INFINITY),
178
- max: new Array(n.itemSize).fill(Number.NEGATIVE_INFINITY)
179
- };
180
- for (let i = e; i < e + s; i++)
181
- for (let r = 0; r < n.itemSize; r++) {
182
- let o;
183
- n.itemSize > 4 ? o = n.array[i * n.itemSize + r] : (r === 0 ? o = n.getX(i) : r === 1 ? o = n.getY(i) : r === 2 ? o = n.getZ(i) : r === 3 && (o = n.getW(i)), n.normalized === !0 && (o = q.normalize(o, n.array))), t.min[r] = Math.min(t.min[r], o), t.max[r] = Math.max(t.max[r], o);
184
- }
185
- return t;
186
- }
187
- function xe(n) {
188
- return Math.ceil(n / 4) * 4;
189
- }
190
- function X(n, e = 0) {
191
- const s = xe(n.byteLength);
192
- if (s !== n.byteLength) {
193
- const t = new Uint8Array(s);
194
- if (t.set(new Uint8Array(n)), e !== 0)
195
- for (let i = n.byteLength; i < s; i++)
196
- t[i] = e;
197
- return t.buffer;
198
- }
199
- return n;
200
- }
201
- function re() {
202
- return typeof document > "u" && typeof OffscreenCanvas < "u" ? new OffscreenCanvas(1, 1) : document.createElement("canvas");
203
- }
204
- function oe(n, e) {
205
- if (n.toBlob !== void 0)
206
- return new Promise((t) => n.toBlob(t, e));
207
- let s;
208
- return e === "image/jpeg" ? s = 0.92 : e === "image/webp" && (s = 0.8), n.convertToBlob({
209
- type: e,
210
- quality: s
211
- });
212
- }
213
- class Je {
214
- constructor() {
215
- this.plugins = [], this.options = {}, this.pending = [], this.buffers = [], this.byteOffset = 0, this.buffers = [], this.nodeMap = /* @__PURE__ */ new Map(), this.skins = [], this.extensionsUsed = {}, this.extensionsRequired = {}, this.uids = /* @__PURE__ */ new Map(), this.uid = 0, this.json = {
216
- asset: {
217
- version: "2.0",
218
- generator: "THREE.GLTFExporter"
219
- }
220
- }, this.cache = {
221
- meshes: /* @__PURE__ */ new Map(),
222
- attributes: /* @__PURE__ */ new Map(),
223
- attributesNormalized: /* @__PURE__ */ new Map(),
224
- materials: /* @__PURE__ */ new Map(),
225
- textures: /* @__PURE__ */ new Map(),
226
- images: /* @__PURE__ */ new Map()
227
- };
228
- }
229
- setPlugins(e) {
230
- this.plugins = e;
231
- }
232
- /**
233
- * Parse scenes and generate GLTF output
234
- * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes
235
- * @param {Function} onDone Callback on completed
236
- * @param {Object} options options
237
- */
238
- async write(e, s, t = {}) {
239
- this.options = Object.assign({
240
- // default options
241
- binary: !1,
242
- trs: !1,
243
- onlyVisible: !0,
244
- maxTextureSize: 1 / 0,
245
- animations: [],
246
- includeCustomExtensions: !1
247
- }, t), this.options.animations.length > 0 && (this.options.trs = !0), this.processInput(e), await Promise.all(this.pending);
248
- const i = this, r = i.buffers, o = i.json;
249
- t = i.options;
250
- const a = i.extensionsUsed, c = i.extensionsRequired, u = new Blob(r, { type: "application/octet-stream" }), p = Object.keys(a), l = Object.keys(c);
251
- 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) {
252
- const x = new FileReader();
253
- x.readAsArrayBuffer(u), x.onloadend = function() {
254
- const f = X(x.result), h = new DataView(new ArrayBuffer(ie));
255
- h.setUint32(0, f.byteLength, !0), h.setUint32(4, je, !0);
256
- const d = X(Xe(JSON.stringify(o)), 32), g = new DataView(new ArrayBuffer(ie));
257
- g.setUint32(0, d.byteLength, !0), g.setUint32(4, We, !0);
258
- const y = new ArrayBuffer(ne), _ = new DataView(y);
259
- _.setUint32(0, Ye, !0), _.setUint32(4, Ke, !0);
260
- const D = ne + g.byteLength + d.byteLength + h.byteLength + f.byteLength;
261
- _.setUint32(8, D, !0);
262
- const m = new Blob([
263
- y,
264
- g,
265
- d,
266
- h,
267
- f
268
- ], { type: "application/octet-stream" }), M = new FileReader();
269
- M.readAsArrayBuffer(m), M.onloadend = function() {
270
- s(M.result);
271
- };
272
- };
273
- } else if (o.buffers && o.buffers.length > 0) {
274
- const x = new FileReader();
275
- x.readAsDataURL(u), x.onloadend = function() {
276
- const f = x.result;
277
- o.buffers[0].uri = f, s(o);
278
- };
279
- } else
280
- s(o);
281
- }
282
- /**
283
- * Serializes a userData.
284
- *
285
- * @param {THREE.Object3D|THREE.Material} object
286
- * @param {Object} objectDef
287
- */
288
- serializeUserData(e, s) {
289
- if (Object.keys(e.userData).length === 0) return;
290
- const t = this.options, i = this.extensionsUsed;
291
- try {
292
- const r = JSON.parse(JSON.stringify(e.userData));
293
- if (t.includeCustomExtensions && r.gltfExtensions) {
294
- s.extensions === void 0 && (s.extensions = {});
295
- for (const o in r.gltfExtensions)
296
- s.extensions[o] = r.gltfExtensions[o], i[o] = !0;
297
- delete r.gltfExtensions;
298
- }
299
- Object.keys(r).length > 0 && (s.extras = r);
300
- } catch (r) {
301
- console.warn("THREE.GLTFExporter: userData of '" + e.name + "' won't be serialized because of JSON.stringify error - " + r.message);
302
- }
303
- }
304
- /**
305
- * Returns ids for buffer attributes.
306
- * @param {Object} object
307
- * @return {Integer}
308
- */
309
- getUID(e, s = !1) {
310
- if (this.uids.has(e) === !1) {
311
- const i = /* @__PURE__ */ new Map();
312
- i.set(!0, this.uid++), i.set(!1, this.uid++), this.uids.set(e, i);
313
- }
314
- return this.uids.get(e).get(s);
315
- }
316
- /**
317
- * Checks if normal attribute values are normalized.
318
- *
319
- * @param {BufferAttribute} normal
320
- * @returns {Boolean}
321
- */
322
- isNormalizedNormalAttribute(e) {
323
- if (this.cache.attributesNormalized.has(e)) return !1;
324
- const t = new B();
325
- for (let i = 0, r = e.count; i < r; i++)
326
- if (Math.abs(t.fromBufferAttribute(e, i).length() - 1) > 5e-4) return !1;
327
- return !0;
328
- }
329
- /**
330
- * Creates normalized normal buffer attribute.
331
- *
332
- * @param {BufferAttribute} normal
333
- * @returns {BufferAttribute}
334
- *
335
- */
336
- createNormalizedNormalAttribute(e) {
337
- const s = this.cache;
338
- if (s.attributesNormalized.has(e)) return s.attributesNormalized.get(e);
339
- const t = e.clone(), i = new B();
340
- for (let r = 0, o = t.count; r < o; r++)
341
- i.fromBufferAttribute(t, r), i.x === 0 && i.y === 0 && i.z === 0 ? i.setX(1) : i.normalize(), t.setXYZ(r, i.x, i.y, i.z);
342
- return s.attributesNormalized.set(e, t), t;
343
- }
344
- /**
345
- * Applies a texture transform, if present, to the map definition. Requires
346
- * the KHR_texture_transform extension.
347
- *
348
- * @param {Object} mapDef
349
- * @param {THREE.Texture} texture
350
- */
351
- applyTextureTransform(e, s) {
352
- let t = !1;
353
- const i = {};
354
- (s.offset.x !== 0 || s.offset.y !== 0) && (i.offset = s.offset.toArray(), t = !0), s.rotation !== 0 && (i.rotation = s.rotation, t = !0), (s.repeat.x !== 1 || s.repeat.y !== 1) && (i.scale = s.repeat.toArray(), t = !0), t && (e.extensions = e.extensions || {}, e.extensions.KHR_texture_transform = i, this.extensionsUsed.KHR_texture_transform = !0);
355
- }
356
- buildMetalRoughTexture(e, s) {
357
- if (e === s) return e;
358
- function t(f) {
359
- return f.colorSpace === ue ? function(d) {
360
- return d < 0.04045 ? d * 0.0773993808 : Math.pow(d * 0.9478672986 + 0.0521327014, 2.4);
361
- } : function(d) {
362
- return d;
363
- };
364
- }
365
- console.warn("THREE.GLTFExporter: Merged metalnessMap and roughnessMap textures."), e instanceof K && (e = z(e)), s instanceof K && (s = z(s));
366
- const i = e ? e.image : null, r = s ? s.image : null, o = Math.max(i ? i.width : 0, r ? r.width : 0), a = Math.max(i ? i.height : 0, r ? r.height : 0), c = re();
367
- c.width = o, c.height = a;
368
- const u = c.getContext("2d");
369
- u.fillStyle = "#00ffff", u.fillRect(0, 0, o, a);
370
- const p = u.getImageData(0, 0, o, a);
371
- if (i) {
372
- u.drawImage(i, 0, 0, o, a);
373
- const f = t(e), h = u.getImageData(0, 0, o, a).data;
374
- for (let d = 2; d < h.length; d += 4)
375
- p.data[d] = f(h[d] / 256) * 256;
376
- }
377
- if (r) {
378
- u.drawImage(r, 0, 0, o, a);
379
- const f = t(s), h = u.getImageData(0, 0, o, a).data;
380
- for (let d = 1; d < h.length; d += 4)
381
- p.data[d] = f(h[d] / 256) * 256;
382
- }
383
- u.putImageData(p, 0, 0);
384
- const x = (e || s).clone();
385
- return x.source = new Ne(c), x.colorSpace = pe, x.channel = (e || s).channel, e && s && e.channel !== s.channel && console.warn("THREE.GLTFExporter: UV channels for metalnessMap and roughnessMap textures must match."), x;
386
- }
387
- /**
388
- * Process a buffer to append to the default one.
389
- * @param {ArrayBuffer} buffer
390
- * @return {Integer}
391
- */
392
- processBuffer(e) {
393
- const s = this.json, t = this.buffers;
394
- return s.buffers || (s.buffers = [{ byteLength: 0 }]), t.push(e), 0;
395
- }
396
- /**
397
- * Process and generate a BufferView
398
- * @param {BufferAttribute} attribute
399
- * @param {number} componentType
400
- * @param {number} start
401
- * @param {number} count
402
- * @param {number} target (Optional) Target usage of the BufferView
403
- * @return {Object}
404
- */
405
- processBufferView(e, s, t, i, r) {
406
- const o = this.json;
407
- o.bufferViews || (o.bufferViews = []);
408
- let a;
409
- switch (s) {
410
- case T.BYTE:
411
- case T.UNSIGNED_BYTE:
412
- a = 1;
413
- break;
414
- case T.SHORT:
415
- case T.UNSIGNED_SHORT:
416
- a = 2;
417
- break;
418
- default:
419
- a = 4;
420
- }
421
- let c = e.itemSize * a;
422
- r === T.ARRAY_BUFFER && (c = Math.ceil(c / 4) * 4);
423
- const u = xe(i * c), p = new DataView(new ArrayBuffer(u));
424
- let l = 0;
425
- for (let h = t; h < t + i; h++) {
426
- for (let d = 0; d < e.itemSize; d++) {
427
- let g;
428
- e.itemSize > 4 ? g = e.array[h * e.itemSize + d] : (d === 0 ? g = e.getX(h) : d === 1 ? g = e.getY(h) : d === 2 ? g = e.getZ(h) : d === 3 && (g = e.getW(h)), e.normalized === !0 && (g = q.normalize(g, e.array))), s === T.FLOAT ? p.setFloat32(l, g, !0) : s === T.INT ? p.setInt32(l, g, !0) : s === T.UNSIGNED_INT ? p.setUint32(l, g, !0) : s === T.SHORT ? p.setInt16(l, g, !0) : s === T.UNSIGNED_SHORT ? p.setUint16(l, g, !0) : s === T.BYTE ? p.setInt8(l, g) : s === T.UNSIGNED_BYTE && p.setUint8(l, g), l += a;
429
- }
430
- l % c !== 0 && (l += c - l % c);
431
- }
432
- const x = {
433
- buffer: this.processBuffer(p.buffer),
434
- byteOffset: this.byteOffset,
435
- byteLength: u
436
- };
437
- return r !== void 0 && (x.target = r), r === T.ARRAY_BUFFER && (x.byteStride = c), this.byteOffset += u, o.bufferViews.push(x), {
438
- id: o.bufferViews.length - 1,
439
- byteLength: 0
440
- };
441
- }
442
- /**
443
- * Process and generate a BufferView from an image Blob.
444
- * @param {Blob} blob
445
- * @return {Promise<Integer>}
446
- */
447
- processBufferViewImage(e) {
448
- const s = this, t = s.json;
449
- return t.bufferViews || (t.bufferViews = []), new Promise(function(i) {
450
- const r = new FileReader();
451
- r.readAsArrayBuffer(e), r.onloadend = function() {
452
- const o = X(r.result), a = {
453
- buffer: s.processBuffer(o),
454
- byteOffset: s.byteOffset,
455
- byteLength: o.byteLength
456
- };
457
- s.byteOffset += o.byteLength, i(t.bufferViews.push(a) - 1);
458
- };
459
- });
460
- }
461
- /**
462
- * Process attribute to generate an accessor
463
- * @param {BufferAttribute} attribute Attribute to process
464
- * @param {THREE.BufferGeometry} geometry (Optional) Geometry used for truncated draw range
465
- * @param {Integer} start (Optional)
466
- * @param {Integer} count (Optional)
467
- * @return {Integer|null} Index of the processed accessor on the "accessors" array
468
- */
469
- processAccessor(e, s, t, i) {
470
- const r = this.json, o = {
471
- 1: "SCALAR",
472
- 2: "VEC2",
473
- 3: "VEC3",
474
- 4: "VEC4",
475
- 9: "MAT3",
476
- 16: "MAT4"
477
- };
478
- let a;
479
- if (e.array.constructor === Float32Array)
480
- a = T.FLOAT;
481
- else if (e.array.constructor === Int32Array)
482
- a = T.INT;
483
- else if (e.array.constructor === Uint32Array)
484
- a = T.UNSIGNED_INT;
485
- else if (e.array.constructor === Int16Array)
486
- a = T.SHORT;
487
- else if (e.array.constructor === Uint16Array)
488
- a = T.UNSIGNED_SHORT;
489
- else if (e.array.constructor === Int8Array)
490
- a = T.BYTE;
491
- else if (e.array.constructor === Uint8Array)
492
- a = T.UNSIGNED_BYTE;
493
- else
494
- throw new Error("THREE.GLTFExporter: Unsupported bufferAttribute component type: " + e.array.constructor.name);
495
- if (t === void 0 && (t = 0), (i === void 0 || i === 1 / 0) && (i = e.count), i === 0) return null;
496
- const c = qe(e, t, i);
497
- let u;
498
- s !== void 0 && (u = e === s.index ? T.ELEMENT_ARRAY_BUFFER : T.ARRAY_BUFFER);
499
- const p = this.processBufferView(e, a, t, i, u), l = {
500
- bufferView: p.id,
501
- byteOffset: p.byteOffset,
502
- componentType: a,
503
- count: i,
504
- max: c.max,
505
- min: c.min,
506
- type: o[e.itemSize]
507
- };
508
- return e.normalized === !0 && (l.normalized = !0), r.accessors || (r.accessors = []), r.accessors.push(l) - 1;
509
- }
510
- /**
511
- * Process image
512
- * @param {Image} image to process
513
- * @param {Integer} format of the image (RGBAFormat)
514
- * @param {Boolean} flipY before writing out the image
515
- * @param {String} mimeType export format
516
- * @return {Integer} Index of the processed texture in the "images" array
517
- */
518
- processImage(e, s, t, i = "image/png") {
519
- if (e !== null) {
520
- const r = this, o = r.cache, a = r.json, c = r.options, u = r.pending;
521
- o.images.has(e) || o.images.set(e, {});
522
- const p = o.images.get(e), l = i + ":flipY/" + t.toString();
523
- if (p[l] !== void 0) return p[l];
524
- a.images || (a.images = []);
525
- const x = { mimeType: i }, f = re();
526
- f.width = Math.min(e.width, c.maxTextureSize), f.height = Math.min(e.height, c.maxTextureSize);
527
- const h = f.getContext("2d");
528
- if (t === !0 && (h.translate(0, f.height), h.scale(1, -1)), e.data !== void 0) {
529
- s !== ve && 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);
530
- const g = new Uint8ClampedArray(e.height * e.width * 4);
531
- for (let y = 0; y < g.length; y += 4)
532
- g[y + 0] = e.data[y + 0], g[y + 1] = e.data[y + 1], g[y + 2] = e.data[y + 2], g[y + 3] = e.data[y + 3];
533
- h.putImageData(new ImageData(g, e.width, e.height), 0, 0);
534
- } 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)
535
- h.drawImage(e, 0, 0, f.width, f.height);
536
- else
537
- throw new Error("THREE.GLTFExporter: Invalid image type. Use HTMLImageElement, HTMLCanvasElement, ImageBitmap or OffscreenCanvas.");
538
- c.binary === !0 ? u.push(
539
- oe(f, i).then((g) => r.processBufferViewImage(g)).then((g) => {
540
- x.bufferView = g;
541
- })
542
- ) : f.toDataURL !== void 0 ? x.uri = f.toDataURL(i) : u.push(
543
- oe(f, i).then((g) => new FileReader().readAsDataURL(g)).then((g) => {
544
- x.uri = g;
545
- })
546
- );
547
- const d = a.images.push(x) - 1;
548
- return p[l] = d, d;
549
- } else
550
- throw new Error("THREE.GLTFExporter: No valid image data found. Unable to process texture.");
551
- }
552
- /**
553
- * Process sampler
554
- * @param {Texture} map Texture to process
555
- * @return {Integer} Index of the processed texture in the "samplers" array
556
- */
557
- processSampler(e) {
558
- const s = this.json;
559
- s.samplers || (s.samplers = []);
560
- const t = {
561
- magFilter: R[e.magFilter],
562
- minFilter: R[e.minFilter],
563
- wrapS: R[e.wrapS],
564
- wrapT: R[e.wrapT]
565
- };
566
- return s.samplers.push(t) - 1;
567
- }
568
- /**
569
- * Process texture
570
- * @param {Texture} map Map to process
571
- * @return {Integer} Index of the processed texture in the "textures" array
572
- */
573
- processTexture(e) {
574
- const t = this.options, i = this.cache, r = this.json;
575
- if (i.textures.has(e)) return i.textures.get(e);
576
- r.textures || (r.textures = []), e instanceof K && (e = z(e, t.maxTextureSize));
577
- let o = e.userData.mimeType;
578
- o === "image/webp" && (o = "image/png");
579
- const a = {
580
- sampler: this.processSampler(e),
581
- source: this.processImage(e.image, e.format, e.flipY, o)
582
- };
583
- e.name && (a.name = e.name), this._invokeAll(function(u) {
584
- u.writeTexture && u.writeTexture(e, a);
585
- });
586
- const c = r.textures.push(a) - 1;
587
- return i.textures.set(e, c), c;
588
- }
589
- /**
590
- * Process material
591
- * @param {THREE.Material} material Material to process
592
- * @return {Integer|null} Index of the processed material in the "materials" array
593
- */
594
- processMaterial(e) {
595
- const s = this.cache, t = this.json;
596
- if (s.materials.has(e)) return s.materials.get(e);
597
- if (e.isShaderMaterial)
598
- return console.warn("GLTFExporter: THREE.ShaderMaterial not supported."), null;
599
- t.materials || (t.materials = []);
600
- const i = { pbrMetallicRoughness: {} };
601
- e.isMeshStandardMaterial !== !0 && e.isMeshBasicMaterial !== !0 && console.warn("GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.");
602
- const r = e.color.toArray().concat([e.opacity]);
603
- if (P(r, [1, 1, 1, 1]) || (i.pbrMetallicRoughness.baseColorFactor = r), e.isMeshStandardMaterial ? (i.pbrMetallicRoughness.metallicFactor = e.metalness, i.pbrMetallicRoughness.roughnessFactor = e.roughness) : (i.pbrMetallicRoughness.metallicFactor = 0.5, i.pbrMetallicRoughness.roughnessFactor = 0.5), e.metalnessMap || e.roughnessMap) {
604
- const a = this.buildMetalRoughTexture(e.metalnessMap, e.roughnessMap), c = {
605
- index: this.processTexture(a),
606
- channel: a.channel
607
- };
608
- this.applyTextureTransform(c, a), i.pbrMetallicRoughness.metallicRoughnessTexture = c;
609
- }
610
- if (e.map) {
611
- const a = {
612
- index: this.processTexture(e.map),
613
- texCoord: e.map.channel
614
- };
615
- this.applyTextureTransform(a, e.map), i.pbrMetallicRoughness.baseColorTexture = a;
616
- }
617
- if (e.emissive) {
618
- const a = e.emissive;
619
- if (Math.max(a.r, a.g, a.b) > 0 && (i.emissiveFactor = e.emissive.toArray()), e.emissiveMap) {
620
- const u = {
621
- index: this.processTexture(e.emissiveMap),
622
- texCoord: e.emissiveMap.channel
623
- };
624
- this.applyTextureTransform(u, e.emissiveMap), i.emissiveTexture = u;
625
- }
626
- }
627
- if (e.normalMap) {
628
- const a = {
629
- index: this.processTexture(e.normalMap),
630
- texCoord: e.normalMap.channel
631
- };
632
- e.normalScale && e.normalScale.x !== 1 && (a.scale = e.normalScale.x), this.applyTextureTransform(a, e.normalMap), i.normalTexture = a;
633
- }
634
- if (e.aoMap) {
635
- const a = {
636
- index: this.processTexture(e.aoMap),
637
- texCoord: e.aoMap.channel
638
- };
639
- e.aoMapIntensity !== 1 && (a.strength = e.aoMapIntensity), this.applyTextureTransform(a, e.aoMap), i.occlusionTexture = a;
640
- }
641
- e.transparent ? i.alphaMode = "BLEND" : e.alphaTest > 0 && (i.alphaMode = "MASK", i.alphaCutoff = e.alphaTest), e.side === he && (i.doubleSided = !0), e.name !== "" && (i.name = e.name), this.serializeUserData(e, i), this._invokeAll(function(a) {
642
- a.writeMaterial && a.writeMaterial(e, i);
643
- });
644
- const o = t.materials.push(i) - 1;
645
- return s.materials.set(e, o), o;
646
- }
647
- /**
648
- * Process mesh
649
- * @param {THREE.Mesh} mesh Mesh to process
650
- * @return {Integer|null} Index of the processed mesh in the "meshes" array
651
- */
652
- processMesh(e) {
653
- const s = this.cache, t = this.json, i = [e.geometry.uuid];
654
- if (Array.isArray(e.material))
655
- for (let m = 0, M = e.material.length; m < M; m++)
656
- i.push(e.material[m].uuid);
657
- else
658
- i.push(e.material.uuid);
659
- const r = i.join(":");
660
- if (s.meshes.has(r)) return s.meshes.get(r);
661
- const o = e.geometry;
662
- let a;
663
- e.isLineSegments ? a = T.LINES : e.isLineLoop ? a = T.LINE_LOOP : e.isLine ? a = T.LINE_STRIP : e.isPoints ? a = T.POINTS : a = e.material.wireframe ? T.LINES : T.TRIANGLES;
664
- const c = {}, u = {}, p = [], l = [], x = {
665
- uv: "TEXCOORD_0",
666
- uv1: "TEXCOORD_1",
667
- uv2: "TEXCOORD_2",
668
- uv3: "TEXCOORD_3",
669
- color: "COLOR_0",
670
- skinWeight: "WEIGHTS_0",
671
- skinIndex: "JOINTS_0"
672
- }, f = o.getAttribute("normal");
673
- 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)));
674
- let h = null;
675
- for (let m in o.attributes) {
676
- if (m.slice(0, 5) === "morph") continue;
677
- const M = o.attributes[m];
678
- if (m = x[m] || m.toUpperCase(), /^(POSITION|NORMAL|TANGENT|TEXCOORD_\d+|COLOR_\d+|JOINTS_\d+|WEIGHTS_\d+)$/.test(m) || (m = "_" + m), s.attributes.has(this.getUID(M))) {
679
- u[m] = s.attributes.get(this.getUID(M));
680
- continue;
681
- }
682
- h = null;
683
- const A = M.array;
684
- m === "JOINTS_0" && !(A instanceof Uint16Array) && !(A instanceof Uint8Array) && (console.warn('GLTFExporter: Attribute "skinIndex" converted to type UNSIGNED_SHORT.'), h = new v(new Uint16Array(A), M.itemSize, M.normalized));
685
- const b = this.processAccessor(h || M, o);
686
- b !== null && (m.startsWith("_") || this.detectMeshQuantization(m, M), u[m] = b, s.attributes.set(this.getUID(M), b));
687
- }
688
- if (f !== void 0 && o.setAttribute("normal", f), Object.keys(u).length === 0) return null;
689
- if (e.morphTargetInfluences !== void 0 && e.morphTargetInfluences.length > 0) {
690
- const m = [], M = [], E = {};
691
- if (e.morphTargetDictionary !== void 0)
692
- for (const A in e.morphTargetDictionary)
693
- E[e.morphTargetDictionary[A]] = A;
694
- for (let A = 0; A < e.morphTargetInfluences.length; ++A) {
695
- const b = {};
696
- let ee = !1;
697
- for (const U in o.morphAttributes) {
698
- if (U !== "position" && U !== "normal") {
699
- ee || (console.warn("GLTFExporter: Only POSITION and NORMAL morph are supported."), ee = !0);
700
- continue;
701
- }
702
- const S = o.morphAttributes[U][A], V = U.toUpperCase(), F = o.attributes[U];
703
- if (s.attributes.has(this.getUID(S, !0))) {
704
- b[V] = s.attributes.get(this.getUID(S, !0));
705
- continue;
706
- }
707
- const $ = S.clone();
708
- if (!o.morphTargetsRelative)
709
- for (let I = 0, Te = S.count; I < Te; I++)
710
- for (let L = 0; L < S.itemSize; L++)
711
- L === 0 && $.setX(I, S.getX(I) - F.getX(I)), L === 1 && $.setY(I, S.getY(I) - F.getY(I)), L === 2 && $.setZ(I, S.getZ(I) - F.getZ(I)), L === 3 && $.setW(I, S.getW(I) - F.getW(I));
712
- b[V] = this.processAccessor($, o), s.attributes.set(this.getUID(F, !0), b[V]);
713
- }
714
- l.push(b), m.push(e.morphTargetInfluences[A]), e.morphTargetDictionary !== void 0 && M.push(E[A]);
715
- }
716
- c.weights = m, M.length > 0 && (c.extras = {}, c.extras.targetNames = M);
717
- }
718
- const d = Array.isArray(e.material);
719
- if (d && o.groups.length === 0) return null;
720
- let g = !1;
721
- if (d && o.index === null) {
722
- const m = [];
723
- for (let M = 0, E = o.attributes.position.count; M < E; M++)
724
- m[M] = M;
725
- o.setIndex(m), g = !0;
726
- }
727
- const y = d ? e.material : [e.material], _ = d ? o.groups : [{ materialIndex: 0, start: void 0, count: void 0 }];
728
- for (let m = 0, M = _.length; m < M; m++) {
729
- const E = {
730
- mode: a,
731
- attributes: u
732
- };
733
- if (this.serializeUserData(o, E), l.length > 0 && (E.targets = l), o.index !== null) {
734
- let b = this.getUID(o.index);
735
- (_[m].start !== void 0 || _[m].count !== void 0) && (b += ":" + _[m].start + ":" + _[m].count), s.attributes.has(b) ? E.indices = s.attributes.get(b) : (E.indices = this.processAccessor(o.index, o, _[m].start, _[m].count), s.attributes.set(b, E.indices)), E.indices === null && delete E.indices;
736
- }
737
- const A = this.processMaterial(y[_[m].materialIndex]);
738
- A !== null && (E.material = A), p.push(E);
739
- }
740
- g === !0 && o.setIndex(null), c.primitives = p, t.meshes || (t.meshes = []), this._invokeAll(function(m) {
741
- m.writeMesh && m.writeMesh(e, c);
742
- });
743
- const D = t.meshes.push(c) - 1;
744
- return s.meshes.set(r, D), D;
745
- }
746
- /**
747
- * If a vertex attribute with a
748
- * [non-standard data type](https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#meshes-overview)
749
- * is used, it is checked whether it is a valid data type according to the
750
- * [KHR_mesh_quantization](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_mesh_quantization/README.md)
751
- * extension.
752
- * In this case the extension is automatically added to the list of used extensions.
753
- *
754
- * @param {string} attributeName
755
- * @param {THREE.BufferAttribute} attribute
756
- */
757
- detectMeshQuantization(e, s) {
758
- if (this.extensionsUsed[j]) return;
759
- let t;
760
- switch (s.array.constructor) {
761
- case Int8Array:
762
- t = "byte";
763
- break;
764
- case Uint8Array:
765
- t = "unsigned byte";
766
- break;
767
- case Int16Array:
768
- t = "short";
769
- break;
770
- case Uint16Array:
771
- t = "unsigned short";
772
- break;
773
- default:
774
- return;
775
- }
776
- s.normalized && (t += " normalized");
777
- const i = e.split("_", 1)[0];
778
- te[i] && te[i].includes(t) && (this.extensionsUsed[j] = !0, this.extensionsRequired[j] = !0);
779
- }
780
- /**
781
- * Process camera
782
- * @param {THREE.Camera} camera Camera to process
783
- * @return {Integer} Index of the processed mesh in the "camera" array
784
- */
785
- processCamera(e) {
786
- const s = this.json;
787
- s.cameras || (s.cameras = []);
788
- const t = e.isOrthographicCamera, i = {
789
- type: t ? "orthographic" : "perspective"
790
- };
791
- return t ? i.orthographic = {
792
- xmag: e.right * 2,
793
- ymag: e.top * 2,
794
- zfar: e.far <= 0 ? 1e-3 : e.far,
795
- znear: e.near < 0 ? 0 : e.near
796
- } : i.perspective = {
797
- aspectRatio: e.aspect,
798
- yfov: q.degToRad(e.fov),
799
- zfar: e.far <= 0 ? 1e-3 : e.far,
800
- znear: e.near < 0 ? 0 : e.near
801
- }, e.name !== "" && (i.name = e.type), s.cameras.push(i) - 1;
802
- }
803
- /**
804
- * Creates glTF animation entry from AnimationClip object.
805
- *
806
- * Status:
807
- * - Only properties listed in PATH_PROPERTIES may be animated.
808
- *
809
- * @param {THREE.AnimationClip} clip
810
- * @param {THREE.Object3D} root
811
- * @return {number|null}
812
- */
813
- processAnimation(e, s) {
814
- const t = this.json, i = this.nodeMap;
815
- t.animations || (t.animations = []), e = Q.Utils.mergeMorphTargetTracks(e.clone(), s);
816
- const r = e.tracks, o = [], a = [];
817
- for (let c = 0; c < r.length; ++c) {
818
- const u = r[c], p = H.parseTrackName(u.name);
819
- let l = H.findNode(s, p.nodeName);
820
- const x = se[p.propertyName];
821
- if (p.objectName === "bones" && (l.isSkinnedMesh === !0 ? l = l.skeleton.getBoneByName(p.objectIndex) : l = void 0), !l || !x)
822
- return console.warn('THREE.GLTFExporter: Could not export animation track "%s".', u.name), null;
823
- const f = 1;
824
- let h = u.values.length / u.times.length;
825
- x === se.morphTargetInfluences && (h /= l.morphTargetInfluences.length);
826
- let d;
827
- u.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === !0 ? (d = "CUBICSPLINE", h /= 3) : u.getInterpolation() === Le ? d = "STEP" : d = "LINEAR", a.push({
828
- input: this.processAccessor(new v(u.times, f)),
829
- output: this.processAccessor(new v(u.values, h)),
830
- interpolation: d
831
- }), o.push({
832
- sampler: a.length - 1,
833
- target: {
834
- node: i.get(l),
835
- path: x
836
- }
837
- });
838
- }
839
- return t.animations.push({
840
- name: e.name || "clip_" + t.animations.length,
841
- samplers: a,
842
- channels: o
843
- }), t.animations.length - 1;
844
- }
845
- /**
846
- * @param {THREE.Object3D} object
847
- * @return {number|null}
848
- */
849
- processSkin(e) {
850
- const s = this.json, t = this.nodeMap, i = s.nodes[t.get(e)], r = e.skeleton;
851
- if (r === void 0) return null;
852
- const o = e.skeleton.bones[0];
853
- if (o === void 0) return null;
854
- const a = [], c = new Float32Array(r.bones.length * 16), u = new fe();
855
- for (let l = 0; l < r.bones.length; ++l)
856
- a.push(t.get(r.bones[l])), u.copy(r.boneInverses[l]), u.multiply(e.bindMatrix).toArray(c, l * 16);
857
- return s.skins === void 0 && (s.skins = []), s.skins.push({
858
- inverseBindMatrices: this.processAccessor(new v(c, 16)),
859
- joints: a,
860
- skeleton: t.get(o)
861
- }), i.skin = s.skins.length - 1;
862
- }
863
- /**
864
- * Process Object3D node
865
- * @param {THREE.Object3D} node Object3D to processNode
866
- * @return {Integer} Index of the node in the nodes list
867
- */
868
- processNode(e) {
869
- const s = this.json, t = this.options, i = this.nodeMap;
870
- s.nodes || (s.nodes = []);
871
- const r = {};
872
- if (t.trs) {
873
- const a = e.quaternion.toArray(), c = e.position.toArray(), u = e.scale.toArray();
874
- P(a, [0, 0, 0, 1]) || (r.rotation = a), P(c, [0, 0, 0]) || (r.translation = c), P(u, [1, 1, 1]) || (r.scale = u);
875
- } else
876
- e.matrixAutoUpdate && e.updateMatrix(), Ze(e.matrix) === !1 && (r.matrix = e.matrix.elements);
877
- if (e.name !== "" && (r.name = String(e.name)), this.serializeUserData(e, r), e.isMesh || e.isLine || e.isPoints) {
878
- const a = this.processMesh(e);
879
- a !== null && (r.mesh = a);
880
- } else e.isCamera && (r.camera = this.processCamera(e));
881
- if (e.isSkinnedMesh && this.skins.push(e), e.children.length > 0) {
882
- const a = [];
883
- for (let c = 0, u = e.children.length; c < u; c++) {
884
- const p = e.children[c];
885
- if (p.visible || t.onlyVisible === !1) {
886
- const l = this.processNode(p);
887
- l !== null && a.push(l);
888
- }
889
- }
890
- a.length > 0 && (r.children = a);
891
- }
892
- this._invokeAll(function(a) {
893
- a.writeNode && a.writeNode(e, r);
894
- });
895
- const o = s.nodes.push(r) - 1;
896
- return i.set(e, o), o;
897
- }
898
- /**
899
- * Process Scene
900
- * @param {Scene} node Scene to process
901
- */
902
- processScene(e) {
903
- const s = this.json, t = this.options;
904
- s.scenes || (s.scenes = [], s.scene = 0);
905
- const i = {};
906
- e.name !== "" && (i.name = e.name), s.scenes.push(i);
907
- const r = [];
908
- for (let o = 0, a = e.children.length; o < a; o++) {
909
- const c = e.children[o];
910
- if (c.visible || t.onlyVisible === !1) {
911
- const u = this.processNode(c);
912
- u !== null && r.push(u);
913
- }
914
- }
915
- r.length > 0 && (i.nodes = r), this.serializeUserData(e, i);
916
- }
917
- /**
918
- * Creates a Scene to hold a list of objects and parse it
919
- * @param {Array} objects List of objects to process
920
- */
921
- processObjects(e) {
922
- const s = new Z();
923
- s.name = "AuxScene";
924
- for (let t = 0; t < e.length; t++)
925
- s.children.push(e[t]);
926
- this.processScene(s);
927
- }
928
- /**
929
- * @param {THREE.Object3D|Array<THREE.Object3D>} input
930
- */
931
- processInput(e) {
932
- const s = this.options;
933
- e = e instanceof Array ? e : [e], this._invokeAll(function(i) {
934
- i.beforeParse && i.beforeParse(e);
935
- });
936
- const t = [];
937
- for (let i = 0; i < e.length; i++)
938
- e[i] instanceof Z ? this.processScene(e[i]) : t.push(e[i]);
939
- t.length > 0 && this.processObjects(t);
940
- for (let i = 0; i < this.skins.length; ++i)
941
- this.processSkin(this.skins[i]);
942
- for (let i = 0; i < s.animations.length; ++i)
943
- this.processAnimation(s.animations[i], e[0]);
944
- this._invokeAll(function(i) {
945
- i.afterParse && i.afterParse(e);
946
- });
947
- }
948
- _invokeAll(e) {
949
- for (let s = 0, t = this.plugins.length; s < t; s++)
950
- e(this.plugins[s]);
951
- }
952
- }
953
- class Qe {
954
- constructor(e) {
955
- this.writer = e, this.name = "KHR_lights_punctual";
956
- }
957
- writeNode(e, s) {
958
- if (!e.isLight) return;
959
- if (!e.isDirectionalLight && !e.isPointLight && !e.isSpotLight) {
960
- console.warn("THREE.GLTFExporter: Only directional, point, and spot lights are supported.", e);
961
- return;
962
- }
963
- const t = this.writer, i = t.json, r = t.extensionsUsed, o = {};
964
- 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."), r[this.name] || (i.extensions = i.extensions || {}, i.extensions[this.name] = { lights: [] }, r[this.name] = !0);
965
- const a = i.extensions[this.name].lights;
966
- a.push(o), s.extensions = s.extensions || {}, s.extensions[this.name] = { light: a.length - 1 };
967
- }
968
- }
969
- class et {
970
- constructor(e) {
971
- this.writer = e, this.name = "KHR_materials_unlit";
972
- }
973
- writeMaterial(e, s) {
974
- if (!e.isMeshBasicMaterial) return;
975
- const i = this.writer.extensionsUsed;
976
- s.extensions = s.extensions || {}, s.extensions[this.name] = {}, i[this.name] = !0, s.pbrMetallicRoughness.metallicFactor = 0, s.pbrMetallicRoughness.roughnessFactor = 0.9;
977
- }
978
- }
979
- class tt {
980
- constructor(e) {
981
- this.writer = e, this.name = "KHR_materials_clearcoat";
982
- }
983
- writeMaterial(e, s) {
984
- if (!e.isMeshPhysicalMaterial || e.clearcoat === 0) return;
985
- const t = this.writer, i = t.extensionsUsed, r = {};
986
- if (r.clearcoatFactor = e.clearcoat, e.clearcoatMap) {
987
- const o = {
988
- index: t.processTexture(e.clearcoatMap),
989
- texCoord: e.clearcoatMap.channel
990
- };
991
- t.applyTextureTransform(o, e.clearcoatMap), r.clearcoatTexture = o;
992
- }
993
- if (r.clearcoatRoughnessFactor = e.clearcoatRoughness, e.clearcoatRoughnessMap) {
994
- const o = {
995
- index: t.processTexture(e.clearcoatRoughnessMap),
996
- texCoord: e.clearcoatRoughnessMap.channel
997
- };
998
- t.applyTextureTransform(o, e.clearcoatRoughnessMap), r.clearcoatRoughnessTexture = o;
999
- }
1000
- if (e.clearcoatNormalMap) {
1001
- const o = {
1002
- index: t.processTexture(e.clearcoatNormalMap),
1003
- texCoord: e.clearcoatNormalMap.channel
1004
- };
1005
- t.applyTextureTransform(o, e.clearcoatNormalMap), r.clearcoatNormalTexture = o;
1006
- }
1007
- s.extensions = s.extensions || {}, s.extensions[this.name] = r, i[this.name] = !0;
1008
- }
1009
- }
1010
- class st {
1011
- constructor(e) {
1012
- this.writer = e, this.name = "KHR_materials_iridescence";
1013
- }
1014
- writeMaterial(e, s) {
1015
- if (!e.isMeshPhysicalMaterial || e.iridescence === 0) return;
1016
- const t = this.writer, i = t.extensionsUsed, r = {};
1017
- if (r.iridescenceFactor = e.iridescence, e.iridescenceMap) {
1018
- const o = {
1019
- index: t.processTexture(e.iridescenceMap),
1020
- texCoord: e.iridescenceMap.channel
1021
- };
1022
- t.applyTextureTransform(o, e.iridescenceMap), r.iridescenceTexture = o;
1023
- }
1024
- if (r.iridescenceIor = e.iridescenceIOR, r.iridescenceThicknessMinimum = e.iridescenceThicknessRange[0], r.iridescenceThicknessMaximum = e.iridescenceThicknessRange[1], e.iridescenceThicknessMap) {
1025
- const o = {
1026
- index: t.processTexture(e.iridescenceThicknessMap),
1027
- texCoord: e.iridescenceThicknessMap.channel
1028
- };
1029
- t.applyTextureTransform(o, e.iridescenceThicknessMap), r.iridescenceThicknessTexture = o;
1030
- }
1031
- s.extensions = s.extensions || {}, s.extensions[this.name] = r, i[this.name] = !0;
1032
- }
1033
- }
1034
- class nt {
1035
- constructor(e) {
1036
- this.writer = e, this.name = "KHR_materials_transmission";
1037
- }
1038
- writeMaterial(e, s) {
1039
- if (!e.isMeshPhysicalMaterial || e.transmission === 0) return;
1040
- const t = this.writer, i = t.extensionsUsed, r = {};
1041
- if (r.transmissionFactor = e.transmission, e.transmissionMap) {
1042
- const o = {
1043
- index: t.processTexture(e.transmissionMap),
1044
- texCoord: e.transmissionMap.channel
1045
- };
1046
- t.applyTextureTransform(o, e.transmissionMap), r.transmissionTexture = o;
1047
- }
1048
- s.extensions = s.extensions || {}, s.extensions[this.name] = r, i[this.name] = !0;
1049
- }
1050
- }
1051
- class it {
1052
- constructor(e) {
1053
- this.writer = e, this.name = "KHR_materials_volume";
1054
- }
1055
- writeMaterial(e, s) {
1056
- if (!e.isMeshPhysicalMaterial || e.transmission === 0) return;
1057
- const t = this.writer, i = t.extensionsUsed, r = {};
1058
- if (r.thicknessFactor = e.thickness, e.thicknessMap) {
1059
- const o = {
1060
- index: t.processTexture(e.thicknessMap),
1061
- texCoord: e.thicknessMap.channel
1062
- };
1063
- t.applyTextureTransform(o, e.thicknessMap), r.thicknessTexture = o;
1064
- }
1065
- r.attenuationDistance = e.attenuationDistance, r.attenuationColor = e.attenuationColor.toArray(), s.extensions = s.extensions || {}, s.extensions[this.name] = r, i[this.name] = !0;
1066
- }
1067
- }
1068
- class rt {
1069
- constructor(e) {
1070
- this.writer = e, this.name = "KHR_materials_ior";
1071
- }
1072
- writeMaterial(e, s) {
1073
- if (!e.isMeshPhysicalMaterial || e.ior === 1.5) return;
1074
- const i = this.writer.extensionsUsed, r = {};
1075
- r.ior = e.ior, s.extensions = s.extensions || {}, s.extensions[this.name] = r, i[this.name] = !0;
1076
- }
1077
- }
1078
- class ot {
1079
- constructor(e) {
1080
- this.writer = e, this.name = "KHR_materials_specular";
1081
- }
1082
- writeMaterial(e, s) {
1083
- if (!e.isMeshPhysicalMaterial || e.specularIntensity === 1 && e.specularColor.equals(Ve) && !e.specularIntensityMap && !e.specularColorMap) return;
1084
- const t = this.writer, i = t.extensionsUsed, r = {};
1085
- if (e.specularIntensityMap) {
1086
- const o = {
1087
- index: t.processTexture(e.specularIntensityMap),
1088
- texCoord: e.specularIntensityMap.channel
1089
- };
1090
- t.applyTextureTransform(o, e.specularIntensityMap), r.specularTexture = o;
1091
- }
1092
- if (e.specularColorMap) {
1093
- const o = {
1094
- index: t.processTexture(e.specularColorMap),
1095
- texCoord: e.specularColorMap.channel
1096
- };
1097
- t.applyTextureTransform(o, e.specularColorMap), r.specularColorTexture = o;
1098
- }
1099
- r.specularFactor = e.specularIntensity, r.specularColorFactor = e.specularColor.toArray(), s.extensions = s.extensions || {}, s.extensions[this.name] = r, i[this.name] = !0;
1100
- }
1101
- }
1102
- class at {
1103
- constructor(e) {
1104
- this.writer = e, this.name = "KHR_materials_sheen";
1105
- }
1106
- writeMaterial(e, s) {
1107
- if (!e.isMeshPhysicalMaterial || e.sheen == 0) return;
1108
- const t = this.writer, i = t.extensionsUsed, r = {};
1109
- if (e.sheenRoughnessMap) {
1110
- const o = {
1111
- index: t.processTexture(e.sheenRoughnessMap),
1112
- texCoord: e.sheenRoughnessMap.channel
1113
- };
1114
- t.applyTextureTransform(o, e.sheenRoughnessMap), r.sheenRoughnessTexture = o;
1115
- }
1116
- if (e.sheenColorMap) {
1117
- const o = {
1118
- index: t.processTexture(e.sheenColorMap),
1119
- texCoord: e.sheenColorMap.channel
1120
- };
1121
- t.applyTextureTransform(o, e.sheenColorMap), r.sheenColorTexture = o;
1122
- }
1123
- r.sheenRoughnessFactor = e.sheenRoughness, r.sheenColorFactor = e.sheenColor.toArray(), s.extensions = s.extensions || {}, s.extensions[this.name] = r, i[this.name] = !0;
1124
- }
1125
- }
1126
- class ct {
1127
- constructor(e) {
1128
- this.writer = e, this.name = "KHR_materials_anisotropy";
1129
- }
1130
- writeMaterial(e, s) {
1131
- if (!e.isMeshPhysicalMaterial || e.anisotropy == 0) return;
1132
- const t = this.writer, i = t.extensionsUsed, r = {};
1133
- if (e.anisotropyMap) {
1134
- const o = { index: t.processTexture(e.anisotropyMap) };
1135
- t.applyTextureTransform(o, e.anisotropyMap), r.anisotropyTexture = o;
1136
- }
1137
- r.anisotropyStrength = e.anisotropy, r.anisotropyRotation = e.anisotropyRotation, s.extensions = s.extensions || {}, s.extensions[this.name] = r, i[this.name] = !0;
1138
- }
1139
- }
1140
- class ut {
1141
- constructor(e) {
1142
- this.writer = e, this.name = "KHR_materials_emissive_strength";
1143
- }
1144
- writeMaterial(e, s) {
1145
- if (!e.isMeshStandardMaterial || e.emissiveIntensity === 1) return;
1146
- const i = this.writer.extensionsUsed, r = {};
1147
- r.emissiveStrength = e.emissiveIntensity, s.extensions = s.extensions || {}, s.extensions[this.name] = r, i[this.name] = !0;
1148
- }
1149
- }
1150
- class lt {
1151
- constructor(e) {
1152
- this.writer = e, this.name = "EXT_materials_bump";
1153
- }
1154
- writeMaterial(e, s) {
1155
- if (!e.isMeshStandardMaterial || e.bumpScale === 1 && !e.bumpMap) return;
1156
- const t = this.writer, i = t.extensionsUsed, r = {};
1157
- if (e.bumpMap) {
1158
- const o = {
1159
- index: t.processTexture(e.bumpMap),
1160
- texCoord: e.bumpMap.channel
1161
- };
1162
- t.applyTextureTransform(o, e.bumpMap), r.bumpTexture = o;
1163
- }
1164
- r.bumpFactor = e.bumpScale, s.extensions = s.extensions || {}, s.extensions[this.name] = r, i[this.name] = !0;
1165
- }
1166
- }
1167
- class ft {
1168
- constructor(e) {
1169
- this.writer = e, this.name = "EXT_mesh_gpu_instancing";
1170
- }
1171
- writeNode(e, s) {
1172
- if (!e.isInstancedMesh) return;
1173
- const t = this.writer, i = e, r = new Float32Array(i.count * 3), o = new Float32Array(i.count * 4), a = new Float32Array(i.count * 3), c = new fe(), u = new B(), p = new Se(), l = new B();
1174
- for (let f = 0; f < i.count; f++)
1175
- i.getMatrixAt(f, c), c.decompose(u, p, l), u.toArray(r, f * 3), p.toArray(o, f * 4), l.toArray(a, f * 3);
1176
- const x = {
1177
- TRANSLATION: t.processAccessor(new v(r, 3)),
1178
- ROTATION: t.processAccessor(new v(o, 4)),
1179
- SCALE: t.processAccessor(new v(a, 3))
1180
- };
1181
- i.instanceColor && (x._COLOR_0 = t.processAccessor(i.instanceColor)), s.extensions = s.extensions || {}, s.extensions[this.name] = { attributes: x }, t.extensionsUsed[this.name] = !0, t.extensionsRequired[this.name] = !0;
1182
- }
1183
- }
1184
- Q.Utils = {
1185
- insertKeyframe: function(n, e) {
1186
- const t = n.getValueSize(), i = new n.TimeBufferType(n.times.length + 1), r = new n.ValueBufferType(n.values.length + t), o = n.createInterpolant(new n.ValueBufferType(t));
1187
- let a;
1188
- if (n.times.length === 0) {
1189
- i[0] = e;
1190
- for (let c = 0; c < t; c++)
1191
- r[c] = 0;
1192
- a = 0;
1193
- } else if (e < n.times[0]) {
1194
- if (Math.abs(n.times[0] - e) < 1e-3) return 0;
1195
- i[0] = e, i.set(n.times, 1), r.set(o.evaluate(e), 0), r.set(n.values, t), a = 0;
1196
- } else if (e > n.times[n.times.length - 1]) {
1197
- if (Math.abs(n.times[n.times.length - 1] - e) < 1e-3)
1198
- return n.times.length - 1;
1199
- i[i.length - 1] = e, i.set(n.times, 0), r.set(n.values, 0), r.set(o.evaluate(e), n.values.length), a = i.length - 1;
1200
- } else
1201
- for (let c = 0; c < n.times.length; c++) {
1202
- if (Math.abs(n.times[c] - e) < 1e-3) return c;
1203
- if (n.times[c] < e && n.times[c + 1] > e) {
1204
- i.set(n.times.slice(0, c + 1), 0), i[c + 1] = e, i.set(n.times.slice(c + 1), c + 2), r.set(n.values.slice(0, (c + 1) * t), 0), r.set(o.evaluate(e), (c + 1) * t), r.set(n.values.slice((c + 1) * t), (c + 2) * t), a = c + 1;
1205
- break;
1206
- }
1207
- }
1208
- return n.times = i, n.values = r, a;
1209
- },
1210
- mergeMorphTargetTracks: function(n, e) {
1211
- const s = [], t = {}, i = n.tracks;
1212
- for (let r = 0; r < i.length; ++r) {
1213
- let o = i[r];
1214
- const a = H.parseTrackName(o.name), c = H.findNode(e, a.nodeName);
1215
- if (a.propertyName !== "morphTargetInfluences" || a.propertyIndex === void 0) {
1216
- s.push(o);
1217
- continue;
1218
- }
1219
- if (o.createInterpolant !== o.InterpolantFactoryMethodDiscrete && o.createInterpolant !== o.InterpolantFactoryMethodLinear) {
1220
- if (o.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline)
1221
- throw new Error("THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation.");
1222
- console.warn("THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead."), o = o.clone(), o.setInterpolation(ze);
1223
- }
1224
- const u = c.morphTargetInfluences.length, p = c.morphTargetDictionary[a.propertyIndex];
1225
- if (p === void 0)
1226
- throw new Error("THREE.GLTFExporter: Morph target name not found: " + a.propertyIndex);
1227
- let l;
1228
- if (t[c.uuid] === void 0) {
1229
- l = o.clone();
1230
- const f = new l.ValueBufferType(u * l.times.length);
1231
- for (let h = 0; h < l.times.length; h++)
1232
- f[h * u + p] = l.values[h];
1233
- l.name = (a.nodeName || "") + ".morphTargetInfluences", l.values = f, t[c.uuid] = l, s.push(l);
1234
- continue;
1235
- }
1236
- const x = o.createInterpolant(new o.ValueBufferType(1));
1237
- l = t[c.uuid];
1238
- for (let f = 0; f < l.times.length; f++)
1239
- l.values[f * u + p] = x.evaluate(l.times[f]);
1240
- for (let f = 0; f < o.times.length; f++) {
1241
- const h = this.insertKeyframe(l, o.times[f]);
1242
- l.values[h * u + p] = o.values[f];
1243
- }
1244
- }
1245
- return n.tracks = s, n;
1246
- }
1247
- };
1248
- class pt {
1249
- async parse(e, s = {}) {
1250
- s = Object.assign({
1251
- ar: {
1252
- anchoring: { type: "plane" },
1253
- planeAnchoring: { alignment: "horizontal" }
1254
- },
1255
- quickLookCompatible: !1,
1256
- maxTextureSize: 1024
1257
- }, s);
1258
- const t = {}, i = "model.usda";
1259
- t[i] = null;
1260
- let r = ge();
1261
- r += dt(s);
1262
- const o = {}, a = {};
1263
- e.traverseVisible((u) => {
1264
- if (u.isMesh) {
1265
- const p = u.geometry, l = u.material;
1266
- if (l.isMeshStandardMaterial) {
1267
- const x = "geometries/Geometry_" + p.id + ".usda";
1268
- if (!(x in t)) {
1269
- const f = Tt(p);
1270
- t[x] = gt(f);
1271
- }
1272
- l.uuid in o || (o[l.uuid] = l), r += mt(u, p, l);
1273
- } else
1274
- console.warn("THREE.USDZExporter: Unsupported material type (USDZ only supports MeshStandardMaterial)", u);
1275
- } else u.isCamera && (r += _t(u));
1276
- }), r += xt(), r += It(o, a, s.quickLookCompatible), t[i] = de(r), r = null;
1277
- for (const u in a) {
1278
- let p = a[u];
1279
- p.isCompressedTexture === !0 && (p = z(p));
1280
- const l = ht(p.image, p.flipY, s.maxTextureSize), x = await new Promise((f) => l.toBlob(f, "image/png", 1));
1281
- t[`textures/Texture_${u}.png`] = new Uint8Array(await x.arrayBuffer());
1282
- }
1283
- let c = 0;
1284
- for (const u in t) {
1285
- const p = t[u], l = 34 + u.length;
1286
- c += l;
1287
- const x = c & 63;
1288
- if (x !== 4) {
1289
- const f = 64 - x, h = new Uint8Array(f);
1290
- t[u] = [p, { extra: { 12345: h } }];
1291
- }
1292
- c = p.length;
1293
- }
1294
- return Be(t, { level: 0 });
1295
- }
1296
- }
1297
- function ht(n, e, s) {
1298
- 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) {
1299
- const t = s / Math.max(n.width, n.height), i = document.createElement("canvas");
1300
- i.width = n.width * Math.min(1, t), i.height = n.height * Math.min(1, t);
1301
- const r = i.getContext("2d");
1302
- return e === !0 && (r.translate(0, i.height), r.scale(1, -1)), r.drawImage(n, 0, 0, i.width, i.height), i;
1303
- } else
1304
- throw new Error("THREE.USDZExporter: No valid image data found. Unable to process texture.");
1305
- }
1306
- const w = 7;
1307
- function ge() {
1308
- return `#usda 1.0
1309
- (
1310
- customLayerData = {
1311
- string creator = "Three.js USDZExporter"
1312
- }
1313
- defaultPrim = "Root"
1314
- metersPerUnit = 1
1315
- upAxis = "Y"
1316
- )
1317
-
1318
- `;
1319
- }
1320
- function dt(n) {
1321
- return `def Xform "Root"
1322
- {
1323
- def Scope "Scenes" (
1324
- kind = "sceneLibrary"
1325
- )
1326
- {
1327
- def Xform "Scene" (
1328
- customData = {
1329
- bool preliminary_collidesWithEnvironment = 0
1330
- string sceneName = "Scene"
1331
- }
1332
- sceneName = "Scene"
1333
- )
1334
- {
1335
- token preliminary:anchoring:type = "${n.ar.anchoring.type}"
1336
- token preliminary:planeAnchoring:alignment = "${n.ar.planeAnchoring.alignment}"
1337
-
1338
- `;
1339
- }
1340
- function xt() {
1341
- return `
1342
- }
1343
- }
1344
- }
1345
-
1346
- `;
1347
- }
1348
- function gt(n) {
1349
- let e = ge();
1350
- return e += n, de(e);
1351
- }
1352
- function mt(n, e, s) {
1353
- const t = "Object_" + n.id, i = me(n.matrixWorld);
1354
- return n.matrixWorld.determinant() < 0 && console.warn("THREE.USDZExporter: USDZ does not support negative scales", n), `def Xform "${t}" (
1355
- prepend references = @./geometries/Geometry_${e.id}.usda@</Geometry>
1356
- prepend apiSchemas = ["MaterialBindingAPI"]
1357
- )
1358
- {
1359
- matrix4d xformOp:transform = ${i}
1360
- uniform token[] xformOpOrder = ["xformOp:transform"]
1361
-
1362
- rel material:binding = </Materials/Material_${s.id}>
1363
- }
1364
-
1365
- `;
1366
- }
1367
- function me(n) {
1368
- const e = n.elements;
1369
- return `( ${k(e, 0)}, ${k(e, 4)}, ${k(e, 8)}, ${k(e, 12)} )`;
1370
- }
1371
- function k(n, e) {
1372
- return `(${n[e + 0]}, ${n[e + 1]}, ${n[e + 2]}, ${n[e + 3]})`;
1373
- }
1374
- function Tt(n) {
1375
- return `
1376
- def "Geometry"
1377
- {
1378
- ${Mt(n)}
1379
- }
1380
- `;
1381
- }
1382
- function Mt(n) {
1383
- const e = "Geometry", s = n.attributes, t = s.position.count;
1384
- return `
1385
- def Mesh "${e}"
1386
- {
1387
- int[] faceVertexCounts = [${yt(n)}]
1388
- int[] faceVertexIndices = [${wt(n)}]
1389
- normal3f[] normals = [${J(s.normal, t)}] (
1390
- interpolation = "vertex"
1391
- )
1392
- point3f[] points = [${J(s.position, t)}]
1393
- ${At(s)}
1394
- uniform token subdivisionScheme = "none"
1395
- }
1396
- `;
1397
- }
1398
- function yt(n) {
1399
- const e = n.index !== null ? n.index.count : n.attributes.position.count;
1400
- return Array(e / 3).fill(3).join(", ");
1401
- }
1402
- function wt(n) {
1403
- const e = n.index, s = [];
1404
- if (e !== null)
1405
- for (let t = 0; t < e.count; t++)
1406
- s.push(e.getX(t));
1407
- else {
1408
- const t = n.attributes.position.count;
1409
- for (let i = 0; i < t; i++)
1410
- s.push(i);
1411
- }
1412
- return s.join(", ");
1413
- }
1414
- function J(n, e) {
1415
- if (n === void 0)
1416
- return console.warn("USDZExporter: Normals missing."), Array(e).fill("(0, 0, 0)").join(", ");
1417
- const s = [];
1418
- for (let t = 0; t < n.count; t++) {
1419
- const i = n.getX(t), r = n.getY(t), o = n.getZ(t);
1420
- s.push(`(${i.toPrecision(w)}, ${r.toPrecision(w)}, ${o.toPrecision(w)})`);
1421
- }
1422
- return s.join(", ");
1423
- }
1424
- function Et(n) {
1425
- const e = [];
1426
- for (let s = 0; s < n.count; s++) {
1427
- const t = n.getX(s), i = n.getY(s);
1428
- e.push(`(${t.toPrecision(w)}, ${1 - i.toPrecision(w)})`);
1429
- }
1430
- return e.join(", ");
1431
- }
1432
- function At(n) {
1433
- let e = "";
1434
- for (let t = 0; t < 4; t++) {
1435
- const i = t > 0 ? t : "", r = n["uv" + i];
1436
- r !== void 0 && (e += `
1437
- texCoord2f[] primvars:st${i} = [${Et(r)}] (
1438
- interpolation = "vertex"
1439
- )`);
1440
- }
1441
- const s = n.color;
1442
- if (s !== void 0) {
1443
- const t = s.count;
1444
- e += `
1445
- color3f[] primvars:displayColor = [${J(s, t)}] (
1446
- interpolation = "vertex"
1447
- )`;
1448
- }
1449
- return e;
1450
- }
1451
- function It(n, e, s = !1) {
1452
- const t = [];
1453
- for (const i in n) {
1454
- const r = n[i];
1455
- t.push(bt(r, e, s));
1456
- }
1457
- return `def "Materials"
1458
- {
1459
- ${t.join("")}
1460
- }
1461
-
1462
- `;
1463
- }
1464
- function bt(n, e, s = !1) {
1465
- const t = " ", i = [], r = [];
1466
- function o(a, c, u) {
1467
- const p = a.source.id + "_" + a.flipY;
1468
- e[p] = a;
1469
- const l = a.channel > 0 ? "st" + a.channel : "st", x = {
1470
- 1e3: "repeat",
1471
- // RepeatWrapping
1472
- 1001: "clamp",
1473
- // ClampToEdgeWrapping
1474
- 1002: "mirror"
1475
- // MirroredRepeatWrapping
1476
- }, f = a.repeat.clone(), h = a.offset.clone(), d = a.rotation, g = Math.sin(d), y = Math.cos(d);
1477
- return h.y = 1 - h.y - f.y, s ? (h.x = h.x / f.x, h.y = h.y / f.y, h.x += g / f.x, h.y += y - 1) : (h.x += g * f.x, h.y += (1 - y) * f.y), `
1478
- def Shader "PrimvarReader_${c}"
1479
- {
1480
- uniform token info:id = "UsdPrimvarReader_float2"
1481
- float2 inputs:fallback = (0.0, 0.0)
1482
- token inputs:varname = "${l}"
1483
- float2 outputs:result
1484
- }
1485
-
1486
- def Shader "Transform2d_${c}"
1487
- {
1488
- uniform token info:id = "UsdTransform2d"
1489
- token inputs:in.connect = </Materials/Material_${n.id}/PrimvarReader_${c}.outputs:result>
1490
- float inputs:rotation = ${(d * (180 / Math.PI)).toFixed(w)}
1491
- float2 inputs:scale = ${ce(f)}
1492
- float2 inputs:translation = ${ce(h)}
1493
- float2 outputs:result
1494
- }
1495
-
1496
- def Shader "Texture_${a.id}_${c}"
1497
- {
1498
- uniform token info:id = "UsdUVTexture"
1499
- asset inputs:file = @textures/Texture_${p}.png@
1500
- float2 inputs:st.connect = </Materials/Material_${n.id}/Transform2d_${c}.outputs:result>
1501
- ${u !== void 0 ? "float4 inputs:scale = " + Rt(u) : ""}
1502
- token inputs:sourceColorSpace = "${a.colorSpace === pe ? "raw" : "sRGB"}"
1503
- token inputs:wrapS = "${x[a.wrapS]}"
1504
- token inputs:wrapT = "${x[a.wrapT]}"
1505
- float outputs:r
1506
- float outputs:g
1507
- float outputs:b
1508
- float3 outputs:rgb
1509
- ${n.transparent || n.alphaTest > 0 ? "float outputs:a" : ""}
1510
- }`;
1511
- }
1512
- return n.side === he && console.warn("THREE.USDZExporter: USDZ does not support double sided materials", n), n.map !== null ? (i.push(`${t}color3f inputs:diffuseColor.connect = </Materials/Material_${n.id}/Texture_${n.map.id}_diffuse.outputs:rgb>`), n.transparent ? i.push(`${t}float inputs:opacity.connect = </Materials/Material_${n.id}/Texture_${n.map.id}_diffuse.outputs:a>`) : n.alphaTest > 0 && (i.push(`${t}float inputs:opacity.connect = </Materials/Material_${n.id}/Texture_${n.map.id}_diffuse.outputs:a>`), i.push(`${t}float inputs:opacityThreshold = ${n.alphaTest}`)), r.push(o(n.map, "diffuse", n.color))) : i.push(`${t}color3f inputs:diffuseColor = ${ae(n.color)}`), n.emissiveMap !== null ? (i.push(`${t}color3f inputs:emissiveColor.connect = </Materials/Material_${n.id}/Texture_${n.emissiveMap.id}_emissive.outputs:rgb>`), r.push(o(n.emissiveMap, "emissive"))) : n.emissive.getHex() > 0 && i.push(`${t}color3f inputs:emissiveColor = ${ae(n.emissive)}`), n.normalMap !== null && (i.push(`${t}normal3f inputs:normal.connect = </Materials/Material_${n.id}/Texture_${n.normalMap.id}_normal.outputs:rgb>`), r.push(o(n.normalMap, "normal"))), n.aoMap !== null && (i.push(`${t}float inputs:occlusion.connect = </Materials/Material_${n.id}/Texture_${n.aoMap.id}_occlusion.outputs:r>`), r.push(o(n.aoMap, "occlusion"))), n.roughnessMap !== null && n.roughness === 1 ? (i.push(`${t}float inputs:roughness.connect = </Materials/Material_${n.id}/Texture_${n.roughnessMap.id}_roughness.outputs:g>`), r.push(o(n.roughnessMap, "roughness"))) : i.push(`${t}float inputs:roughness = ${n.roughness}`), n.metalnessMap !== null && n.metalness === 1 ? (i.push(`${t}float inputs:metallic.connect = </Materials/Material_${n.id}/Texture_${n.metalnessMap.id}_metallic.outputs:b>`), r.push(o(n.metalnessMap, "metallic"))) : i.push(`${t}float inputs:metallic = ${n.metalness}`), n.alphaMap !== null ? (i.push(`${t}float inputs:opacity.connect = </Materials/Material_${n.id}/Texture_${n.alphaMap.id}_opacity.outputs:r>`), i.push(`${t}float inputs:opacityThreshold = 0.0001`), r.push(o(n.alphaMap, "opacity"))) : i.push(`${t}float inputs:opacity = ${n.opacity}`), n.isMeshPhysicalMaterial && (i.push(`${t}float inputs:clearcoat = ${n.clearcoat}`), i.push(`${t}float inputs:clearcoatRoughness = ${n.clearcoatRoughness}`), i.push(`${t}float inputs:ior = ${n.ior}`)), `
1513
- def Material "Material_${n.id}"
1514
- {
1515
- def Shader "PreviewSurface"
1516
- {
1517
- uniform token info:id = "UsdPreviewSurface"
1518
- ${i.join(`
1519
- `)}
1520
- int inputs:useSpecularWorkflow = 0
1521
- token outputs:surface
1522
- }
1523
-
1524
- token outputs:surface.connect = </Materials/Material_${n.id}/PreviewSurface.outputs:surface>
1525
-
1526
- ${r.join(`
1527
- `)}
1528
-
1529
- }
1530
- `;
1531
- }
1532
- function ae(n) {
1533
- return `(${n.r}, ${n.g}, ${n.b})`;
1534
- }
1535
- function Rt(n) {
1536
- return `(${n.r}, ${n.g}, ${n.b}, 1.0)`;
1537
- }
1538
- function ce(n) {
1539
- return `(${n.x}, ${n.y})`;
1540
- }
1541
- function _t(n) {
1542
- const e = n.name ? n.name : "Camera_" + n.id, s = me(n.matrixWorld);
1543
- return n.matrixWorld.determinant() < 0 && console.warn("THREE.USDZExporter: USDZ does not support negative scales", n), n.isOrthographicCamera ? `def Camera "${e}"
1544
- {
1545
- matrix4d xformOp:transform = ${s}
1546
- uniform token[] xformOpOrder = ["xformOp:transform"]
1547
-
1548
- float2 clippingRange = (${n.near.toPrecision(w)}, ${n.far.toPrecision(w)})
1549
- float horizontalAperture = ${((Math.abs(n.left) + Math.abs(n.right)) * 10).toPrecision(w)}
1550
- float verticalAperture = ${((Math.abs(n.top) + Math.abs(n.bottom)) * 10).toPrecision(w)}
1551
- token projection = "orthographic"
1552
- }
1553
-
1554
- ` : `def Camera "${e}"
1555
- {
1556
- matrix4d xformOp:transform = ${s}
1557
- uniform token[] xformOpOrder = ["xformOp:transform"]
1558
-
1559
- float2 clippingRange = (${n.near.toPrecision(w)}, ${n.far.toPrecision(w)})
1560
- float focalLength = ${n.getFocalLength().toPrecision(w)}
1561
- float focusDistance = ${n.focus.toPrecision(w)}
1562
- float horizontalAperture = ${n.getFilmWidth().toPrecision(w)}
1563
- token projection = "perspective"
1564
- float verticalAperture = ${n.getFilmHeight().toPrecision(w)}
1565
- }
1566
-
1567
- `;
1568
- }
1569
- class Ct {
1570
- constructor() {
1571
- Y(this, "_gltfExporter");
1572
- Y(this, "_usdzExporter");
1573
- this._gltfExporter = new Q(), this._usdzExporter = new pt();
1574
- }
1575
- async export(e, s, t) {
1576
- switch (this._computeNormals(e), s) {
1577
- case "glb":
1578
- return this._exportGlb(e, t);
1579
- case "gltf":
1580
- return this._exportGltf(e, t);
1581
- case "usdz":
1582
- return this._exportUsdz(e, t);
1583
- default:
1584
- throw new He(`Unsupported file type: ${s}`, s);
1585
- }
1586
- }
1587
- async _exportGlb(e, s) {
1588
- try {
1589
- const t = await this._gltfExporter.parseAsync(e, {
1590
- animations: e.animations.length > 0 ? e.animations : void 0,
1591
- ...s,
1592
- binary: !0
1593
- });
1594
- if (t instanceof ArrayBuffer)
1595
- return t;
1596
- throw new N("Failed to export GLB: expected ArrayBuffer");
1597
- } catch (t) {
1598
- throw t instanceof N ? t : new N("Failed to export GLB", t);
1599
- }
1600
- }
1601
- async _exportGltf(e, s) {
1602
- try {
1603
- const t = await this._gltfExporter.parseAsync(e, {
1604
- animations: e.animations.length > 0 ? e.animations : void 0,
1605
- ...s,
1606
- binary: !1
1607
- }), i = JSON.stringify(t);
1608
- return new TextEncoder().encode(i).buffer;
1609
- } catch (t) {
1610
- throw t instanceof N ? t : new N("Failed to export GLTF", t);
1611
- }
1612
- }
1613
- async _exportUsdz(e, s) {
1614
- try {
1615
- return (await this._usdzExporter.parseAsync(e, s)).buffer;
1616
- } catch (t) {
1617
- throw t instanceof N ? t : new N("Failed to export USDZ", t);
1618
- }
1619
- }
1620
- _computeNormals(e) {
1621
- e.traverse((s) => {
1622
- s instanceof le && s.geometry && (s.geometry.getAttribute("normal") || s.geometry.computeVertexNormals());
1623
- });
1624
- }
1625
- }
1626
- export {
1627
- Ct as A
1628
- };