@react-three/drei 9.89.3 → 9.90.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.
package/core/Splat.js ADDED
@@ -0,0 +1,505 @@
1
+ import _extends from '@babel/runtime/helpers/esm/extends';
2
+ import * as THREE from 'three';
3
+ import * as React from 'react';
4
+ import { extend, useThree, useLoader, useFrame } from '@react-three/fiber';
5
+ import { shaderMaterial } from './shaderMaterial.js';
6
+
7
+ const SplatMaterial = /* @__PURE__ */shaderMaterial({
8
+ alphaTest: 0,
9
+ viewport: /* @__PURE__ */new THREE.Vector2(1980, 1080),
10
+ focal: 1000.0,
11
+ centerAndScaleTexture: null,
12
+ covAndColorTexture: null
13
+ }, /*glsl*/`
14
+ precision highp sampler2D;
15
+ precision highp usampler2D;
16
+ out vec4 vColor;
17
+ out vec3 vPosition;
18
+ uniform vec2 resolution;
19
+ uniform vec2 viewport;
20
+ uniform float focal;
21
+ attribute uint splatIndex;
22
+ uniform sampler2D centerAndScaleTexture;
23
+ uniform usampler2D covAndColorTexture;
24
+
25
+ vec2 unpackInt16(in uint value) {
26
+ int v = int(value);
27
+ int v0 = v >> 16;
28
+ int v1 = (v & 0xFFFF);
29
+ if((v & 0x8000) != 0)
30
+ v1 |= 0xFFFF0000;
31
+ return vec2(float(v1), float(v0));
32
+ }
33
+
34
+ void main () {
35
+ ivec2 texSize = textureSize(centerAndScaleTexture, 0);
36
+ ivec2 texPos = ivec2(splatIndex%uint(texSize.x), splatIndex/uint(texSize.x));
37
+ vec4 centerAndScaleData = texelFetch(centerAndScaleTexture, texPos, 0);
38
+ vec4 center = vec4(centerAndScaleData.xyz, 1);
39
+ vec4 camspace = modelViewMatrix * center;
40
+ vec4 pos2d = projectionMatrix * camspace;
41
+
42
+ float bounds = 1.2 * pos2d.w;
43
+ if (pos2d.z < -pos2d.w || pos2d.x < -bounds || pos2d.x > bounds
44
+ || pos2d.y < -bounds || pos2d.y > bounds) {
45
+ gl_Position = vec4(0.0, 0.0, 2.0, 1.0);
46
+ return;
47
+ }
48
+
49
+ uvec4 covAndColorData = texelFetch(covAndColorTexture, texPos, 0);
50
+ vec2 cov3D_M11_M12 = unpackInt16(covAndColorData.x) * centerAndScaleData.w;
51
+ vec2 cov3D_M13_M22 = unpackInt16(covAndColorData.y) * centerAndScaleData.w;
52
+ vec2 cov3D_M23_M33 = unpackInt16(covAndColorData.z) * centerAndScaleData.w;
53
+ mat3 Vrk = mat3(
54
+ cov3D_M11_M12.x, cov3D_M11_M12.y, cov3D_M13_M22.x,
55
+ cov3D_M11_M12.y, cov3D_M13_M22.y, cov3D_M23_M33.x,
56
+ cov3D_M13_M22.x, cov3D_M23_M33.x, cov3D_M23_M33.y
57
+ );
58
+
59
+ mat3 J = mat3(
60
+ focal / camspace.z, 0., -(focal * camspace.x) / (camspace.z * camspace.z),
61
+ 0., focal / camspace.z, -(focal * camspace.y) / (camspace.z * camspace.z),
62
+ 0., 0., 0.
63
+ );
64
+
65
+ mat3 W = transpose(mat3(modelViewMatrix));
66
+ mat3 T = W * J;
67
+ mat3 cov = transpose(T) * Vrk * T;
68
+ vec2 vCenter = vec2(pos2d) / pos2d.w;
69
+ float diagonal1 = cov[0][0] + 0.3;
70
+ float offDiagonal = cov[0][1];
71
+ float diagonal2 = cov[1][1] + 0.3;
72
+ float mid = 0.5 * (diagonal1 + diagonal2);
73
+ float radius = length(vec2((diagonal1 - diagonal2) / 2.0, offDiagonal));
74
+ float lambda1 = mid + radius;
75
+ float lambda2 = max(mid - radius, 0.1);
76
+ vec2 diagonalVector = normalize(vec2(offDiagonal, lambda1 - diagonal1));
77
+ vec2 v1 = min(sqrt(2.0 * lambda1), 1024.0) * diagonalVector;
78
+ vec2 v2 = min(sqrt(2.0 * lambda2), 1024.0) * vec2(diagonalVector.y, -diagonalVector.x);
79
+ uint colorUint = covAndColorData.w;
80
+ vColor = vec4(
81
+ float(colorUint & uint(0xFF)) / 255.0,
82
+ float((colorUint >> uint(8)) & uint(0xFF)) / 255.0,
83
+ float((colorUint >> uint(16)) & uint(0xFF)) / 255.0,
84
+ float(colorUint >> uint(24)) / 255.0
85
+ );
86
+ vPosition = position;
87
+
88
+ gl_Position = vec4(
89
+ vCenter
90
+ + position.x * v2 / viewport * 2.0
91
+ + position.y * v1 / viewport * 2.0, pos2d.z / pos2d.w, 1.0);
92
+ }
93
+ `, /*glsl*/`
94
+ #include <alphatest_pars_fragment>
95
+ #include <alphahash_pars_fragment>
96
+ in vec4 vColor;
97
+ in vec3 vPosition;
98
+ void main () {
99
+ float A = -dot(vPosition.xy, vPosition.xy);
100
+ if (A < -4.0) discard;
101
+ float B = exp(A) * vColor.a;
102
+ vec4 diffuseColor = vec4(vColor.rgb, B);
103
+ #include <alphatest_fragment>
104
+ #include <alphahash_fragment>
105
+ gl_FragColor = diffuseColor;
106
+ #include <tonemapping_fragment>
107
+ #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>
108
+ }
109
+ `);
110
+ function createWorker(self) {
111
+ let matrices = null;
112
+ let offset = 0;
113
+ function sortSplats(view, hashed = false) {
114
+ const vertexCount = matrices.length / 16;
115
+ const threshold = -0.0001;
116
+ let maxDepth = -Infinity;
117
+ let minDepth = Infinity;
118
+ const depthList = new Float32Array(vertexCount);
119
+ const sizeList = new Int32Array(depthList.buffer);
120
+ const validIndexList = new Int32Array(vertexCount);
121
+ let validCount = 0;
122
+ for (let i = 0; i < vertexCount; i++) {
123
+ // Sign of depth is reversed
124
+ const depth = view[0] * matrices[i * 16 + 12] + view[1] * matrices[i * 16 + 13] + view[2] * matrices[i * 16 + 14] + view[3];
125
+ // Skip behind of camera and small, transparent splat
126
+ if (hashed || depth < 0 && matrices[i * 16 + 15] > threshold * depth) {
127
+ depthList[validCount] = depth;
128
+ validIndexList[validCount] = i;
129
+ validCount++;
130
+ if (depth > maxDepth) maxDepth = depth;
131
+ if (depth < minDepth) minDepth = depth;
132
+ }
133
+ }
134
+
135
+ // This is a 16 bit single-pass counting sort
136
+ const depthInv = (256 * 256 - 1) / (maxDepth - minDepth);
137
+ const counts0 = new Uint32Array(256 * 256);
138
+ for (let i = 0; i < validCount; i++) {
139
+ sizeList[i] = (depthList[i] - minDepth) * depthInv | 0;
140
+ counts0[sizeList[i]]++;
141
+ }
142
+ const starts0 = new Uint32Array(256 * 256);
143
+ for (let i = 1; i < 256 * 256; i++) starts0[i] = starts0[i - 1] + counts0[i - 1];
144
+ const depthIndex = new Uint32Array(validCount);
145
+ for (let i = 0; i < validCount; i++) depthIndex[starts0[sizeList[i]]++] = validIndexList[i];
146
+ return depthIndex;
147
+ }
148
+ self.onmessage = e => {
149
+ if (e.data.method == 'push') {
150
+ if (offset === 0) matrices = new Float32Array(e.data.length);
151
+ const new_matrices = new Float32Array(e.data.matrices);
152
+ matrices.set(new_matrices, offset);
153
+ offset += new_matrices.length;
154
+ } else if (e.data.method == 'sort') {
155
+ if (matrices !== null) {
156
+ const indices = sortSplats(new Float32Array(e.data.view), e.data.hashed);
157
+ // @ts-ignore
158
+ self.postMessage({
159
+ indices,
160
+ key: e.data.key
161
+ }, [indices.buffer]);
162
+ }
163
+ }
164
+ };
165
+ }
166
+ class SplatLoader extends THREE.Loader {
167
+ constructor(...args) {
168
+ super(...args);
169
+ // WebGLRenderer, needs to be filled out!
170
+ this.gl = null;
171
+ // Default chunk size for lazy loading
172
+ this.chunkSize = 25000;
173
+ }
174
+ load(url, onLoad, onProgress, onError) {
175
+ const shared = {
176
+ gl: this.gl,
177
+ url: this.manager.resolveURL(url),
178
+ worker: new Worker(URL.createObjectURL(new Blob(['(', createWorker.toString(), ')(self)'], {
179
+ type: 'application/javascript'
180
+ }))),
181
+ manager: this.manager,
182
+ update: (target, camera, hashed) => update(camera, shared, target, hashed),
183
+ connect: target => connect(shared, target),
184
+ loading: false,
185
+ loaded: false,
186
+ loadedVertexCount: 0,
187
+ chunkSize: this.chunkSize,
188
+ totalDownloadBytes: 0,
189
+ numVertices: 0,
190
+ rowLength: 3 * 4 + 3 * 4 + 4 + 4,
191
+ maxVertexes: 0,
192
+ bufferTextureWidth: 0,
193
+ bufferTextureHeight: 0,
194
+ stream: null,
195
+ centerAndScaleData: null,
196
+ covAndColorData: null,
197
+ covAndColorTexture: null,
198
+ centerAndScaleTexture: null,
199
+ onProgress
200
+ };
201
+ load(shared).then(onLoad).catch(e => {
202
+ onError == null || onError(e);
203
+ shared.manager.itemError(shared.url);
204
+ });
205
+ }
206
+ }
207
+ async function load(shared) {
208
+ shared.manager.itemStart(shared.url);
209
+ const data = await fetch(shared.url);
210
+ if (data.body === null) throw 'Failed to fetch file';
211
+ let _totalDownloadBytes = data.headers.get('Content-Length');
212
+ const totalDownloadBytes = _totalDownloadBytes ? parseInt(_totalDownloadBytes) : undefined;
213
+ if (totalDownloadBytes == undefined) throw 'Failed to get content length';
214
+ shared.stream = data.body.getReader();
215
+ shared.totalDownloadBytes = totalDownloadBytes;
216
+ shared.numVertices = Math.floor(shared.totalDownloadBytes / shared.rowLength);
217
+ const context = shared.gl.getContext();
218
+ let maxTextureSize = context.getParameter(context.MAX_TEXTURE_SIZE);
219
+ shared.maxVertexes = maxTextureSize * maxTextureSize;
220
+ if (shared.numVertices > shared.maxVertexes) shared.numVertices = shared.maxVertexes;
221
+ shared.bufferTextureWidth = maxTextureSize;
222
+ shared.bufferTextureHeight = Math.floor((shared.numVertices - 1) / maxTextureSize) + 1;
223
+ shared.centerAndScaleData = new Float32Array(shared.bufferTextureWidth * shared.bufferTextureHeight * 4);
224
+ shared.covAndColorData = new Uint32Array(shared.bufferTextureWidth * shared.bufferTextureHeight * 4);
225
+ shared.centerAndScaleTexture = new THREE.DataTexture(shared.centerAndScaleData, shared.bufferTextureWidth, shared.bufferTextureHeight, THREE.RGBAFormat, THREE.FloatType);
226
+ shared.centerAndScaleTexture.needsUpdate = true;
227
+ shared.covAndColorTexture = new THREE.DataTexture(shared.covAndColorData, shared.bufferTextureWidth, shared.bufferTextureHeight, THREE.RGBAIntegerFormat, THREE.UnsignedIntType);
228
+ shared.covAndColorTexture.internalFormat = 'RGBA32UI';
229
+ shared.covAndColorTexture.needsUpdate = true;
230
+ return shared;
231
+ }
232
+ async function lazyLoad(shared) {
233
+ shared.loading = true;
234
+ let bytesDownloaded = 0;
235
+ let bytesProcessed = 0;
236
+ const chunks = [];
237
+ let lastReportedProgress = 0;
238
+ const lengthComputable = shared.totalDownloadBytes !== 0;
239
+ while (true) {
240
+ try {
241
+ const {
242
+ value,
243
+ done
244
+ } = await shared.stream.read();
245
+ if (done) break;
246
+ bytesDownloaded += value.length;
247
+ if (shared.totalDownloadBytes != undefined) {
248
+ const percent = bytesDownloaded / shared.totalDownloadBytes * 100;
249
+ if (shared.onProgress && percent - lastReportedProgress > 1) {
250
+ const event = new ProgressEvent('progress', {
251
+ lengthComputable,
252
+ loaded: bytesDownloaded,
253
+ total: shared.totalDownloadBytes
254
+ });
255
+ shared.onProgress(event);
256
+ lastReportedProgress = percent;
257
+ }
258
+ }
259
+ chunks.push(value);
260
+ const bytesRemains = bytesDownloaded - bytesProcessed;
261
+ if (shared.totalDownloadBytes != undefined && bytesRemains > shared.rowLength * shared.chunkSize) {
262
+ let vertexCount = Math.floor(bytesRemains / shared.rowLength);
263
+ const concatenatedChunksbuffer = new Uint8Array(bytesRemains);
264
+ let offset = 0;
265
+ for (const chunk of chunks) {
266
+ concatenatedChunksbuffer.set(chunk, offset);
267
+ offset += chunk.length;
268
+ }
269
+ chunks.length = 0;
270
+ if (bytesRemains > vertexCount * shared.rowLength) {
271
+ const extra_data = new Uint8Array(bytesRemains - vertexCount * shared.rowLength);
272
+ extra_data.set(concatenatedChunksbuffer.subarray(bytesRemains - extra_data.length, bytesRemains), 0);
273
+ chunks.push(extra_data);
274
+ }
275
+ const buffer = new Uint8Array(vertexCount * shared.rowLength);
276
+ buffer.set(concatenatedChunksbuffer.subarray(0, buffer.byteLength), 0);
277
+ const matrices = pushDataBuffer(shared, buffer.buffer, vertexCount);
278
+ shared.worker.postMessage({
279
+ method: 'push',
280
+ src: shared.url,
281
+ length: shared.numVertices * 16,
282
+ matrices: matrices.buffer
283
+ }, [matrices.buffer]);
284
+ bytesProcessed += vertexCount * shared.rowLength;
285
+ if (shared.onProgress) {
286
+ const event = new ProgressEvent('progress', {
287
+ lengthComputable,
288
+ loaded: shared.totalDownloadBytes,
289
+ total: shared.totalDownloadBytes
290
+ });
291
+ shared.onProgress(event);
292
+ }
293
+ }
294
+ } catch (error) {
295
+ console.error(error);
296
+ break;
297
+ }
298
+ }
299
+ if (bytesDownloaded - bytesProcessed > 0) {
300
+ // Concatenate the chunks into a single Uint8Array
301
+ let concatenatedChunks = new Uint8Array(chunks.reduce((acc, chunk) => acc + chunk.length, 0));
302
+ let offset = 0;
303
+ for (const chunk of chunks) {
304
+ concatenatedChunks.set(chunk, offset);
305
+ offset += chunk.length;
306
+ }
307
+ let numVertices = Math.floor(concatenatedChunks.byteLength / shared.rowLength);
308
+ const matrices = pushDataBuffer(shared, concatenatedChunks.buffer, numVertices);
309
+ shared.worker.postMessage({
310
+ method: 'push',
311
+ src: shared.url,
312
+ length: numVertices * 16,
313
+ matrices: matrices.buffer
314
+ }, [matrices.buffer]);
315
+ }
316
+ shared.loaded = true;
317
+ shared.manager.itemEnd(shared.url);
318
+ }
319
+ function update(camera, shared, target, hashed) {
320
+ camera.updateMatrixWorld();
321
+ shared.gl.getCurrentViewport(target.viewport);
322
+ // @ts-ignore
323
+ target.material.viewport.x = target.viewport.z;
324
+ // @ts-ignore
325
+ target.material.viewport.y = target.viewport.w;
326
+ target.material.focal = target.viewport.w / 2.0 * Math.abs(camera.projectionMatrix.elements[5]);
327
+ if (target.ready) {
328
+ if (hashed && target.sorted) return;
329
+ target.ready = false;
330
+ const view = new Float32Array([target.modelViewMatrix.elements[2], -target.modelViewMatrix.elements[6], target.modelViewMatrix.elements[10], target.modelViewMatrix.elements[14]]);
331
+ shared.worker.postMessage({
332
+ method: 'sort',
333
+ src: shared.url,
334
+ key: target.uuid,
335
+ view: view.buffer,
336
+ hashed
337
+ }, [view.buffer]);
338
+ if (hashed && shared.loaded) target.sorted = true;
339
+ }
340
+ }
341
+ function connect(shared, target) {
342
+ if (!shared.loading) lazyLoad(shared);
343
+ target.ready = false;
344
+ target.pm = new THREE.Matrix4();
345
+ target.vm1 = new THREE.Matrix4();
346
+ target.vm2 = new THREE.Matrix4();
347
+ target.viewport = new THREE.Vector4();
348
+ let splatIndexArray = new Uint32Array(shared.bufferTextureWidth * shared.bufferTextureHeight);
349
+ const splatIndexes = new THREE.InstancedBufferAttribute(splatIndexArray, 1, false);
350
+ splatIndexes.setUsage(THREE.DynamicDrawUsage);
351
+ const geometry = target.geometry = new THREE.InstancedBufferGeometry();
352
+ const positionsArray = new Float32Array(6 * 3);
353
+ const positions = new THREE.BufferAttribute(positionsArray, 3);
354
+ geometry.setAttribute('position', positions);
355
+ positions.setXYZ(2, -2.0, 2.0, 0.0);
356
+ positions.setXYZ(1, 2.0, 2.0, 0.0);
357
+ positions.setXYZ(0, -2.0, -2.0, 0.0);
358
+ positions.setXYZ(5, -2.0, -2.0, 0.0);
359
+ positions.setXYZ(4, 2.0, 2.0, 0.0);
360
+ positions.setXYZ(3, 2.0, -2.0, 0.0);
361
+ positions.needsUpdate = true;
362
+ geometry.setAttribute('splatIndex', splatIndexes);
363
+ geometry.instanceCount = 1;
364
+ function listener(e) {
365
+ if (target && e.data.key === target.uuid) {
366
+ let indexes = new Uint32Array(e.data.indices);
367
+ // @ts-ignore
368
+ geometry.attributes.splatIndex.set(indexes);
369
+ geometry.attributes.splatIndex.needsUpdate = true;
370
+ geometry.instanceCount = indexes.length;
371
+ target.ready = true;
372
+ }
373
+ }
374
+ shared.worker.addEventListener('message', listener);
375
+ async function wait() {
376
+ while (true) {
377
+ const centerAndScaleTextureProperties = shared.gl.properties.get(shared.centerAndScaleTexture);
378
+ const covAndColorTextureProperties = shared.gl.properties.get(shared.covAndColorTexture);
379
+ if (centerAndScaleTextureProperties != null && centerAndScaleTextureProperties.__webglTexture && covAndColorTextureProperties != null && covAndColorTextureProperties.__webglTexture && shared.loadedVertexCount > 0) break;
380
+ await new Promise(resolve => setTimeout(resolve, 10));
381
+ }
382
+ target.ready = true;
383
+ }
384
+ wait();
385
+ return () => shared.worker.removeEventListener('message', listener);
386
+ }
387
+ function pushDataBuffer(shared, buffer, vertexCount) {
388
+ const context = shared.gl.getContext();
389
+ if (shared.loadedVertexCount + vertexCount > shared.maxVertexes) vertexCount = shared.maxVertexes - shared.loadedVertexCount;
390
+ if (vertexCount <= 0) throw 'Failed to parse file';
391
+ const u_buffer = new Uint8Array(buffer);
392
+ const f_buffer = new Float32Array(buffer);
393
+ const matrices = new Float32Array(vertexCount * 16);
394
+ const covAndColorData_uint8 = new Uint8Array(shared.covAndColorData.buffer);
395
+ const covAndColorData_int16 = new Int16Array(shared.covAndColorData.buffer);
396
+ for (let i = 0; i < vertexCount; i++) {
397
+ const quat = new THREE.Quaternion(-(u_buffer[32 * i + 28 + 1] - 128) / 128.0, (u_buffer[32 * i + 28 + 2] - 128) / 128.0, (u_buffer[32 * i + 28 + 3] - 128) / 128.0, -(u_buffer[32 * i + 28 + 0] - 128) / 128.0);
398
+ quat.invert();
399
+ const center = new THREE.Vector3(f_buffer[8 * i + 0], f_buffer[8 * i + 1], -f_buffer[8 * i + 2]);
400
+ const scale = new THREE.Vector3(f_buffer[8 * i + 3 + 0], f_buffer[8 * i + 3 + 1], f_buffer[8 * i + 3 + 2]);
401
+ const mtx = new THREE.Matrix4();
402
+ mtx.makeRotationFromQuaternion(quat);
403
+ mtx.transpose();
404
+ mtx.scale(scale);
405
+ const mtx_t = mtx.clone();
406
+ mtx.transpose();
407
+ mtx.premultiply(mtx_t);
408
+ mtx.setPosition(center);
409
+ const cov_indexes = [0, 1, 2, 5, 6, 10];
410
+ let max_value = 0.0;
411
+ for (let j = 0; j < cov_indexes.length; j++) if (Math.abs(mtx.elements[cov_indexes[j]]) > max_value) max_value = Math.abs(mtx.elements[cov_indexes[j]]);
412
+ let destOffset = shared.loadedVertexCount * 4 + i * 4;
413
+ shared.centerAndScaleData[destOffset + 0] = center.x;
414
+ shared.centerAndScaleData[destOffset + 1] = -center.y;
415
+ shared.centerAndScaleData[destOffset + 2] = center.z;
416
+ shared.centerAndScaleData[destOffset + 3] = max_value / 32767.0;
417
+ destOffset = shared.loadedVertexCount * 8 + i * 4 * 2;
418
+ for (let j = 0; j < cov_indexes.length; j++) covAndColorData_int16[destOffset + j] = mtx.elements[cov_indexes[j]] * 32767.0 / max_value;
419
+
420
+ // RGBA
421
+ destOffset = shared.loadedVertexCount * 16 + (i * 4 + 3) * 4;
422
+ const col = new THREE.Color(u_buffer[32 * i + 24 + 0] / 255, u_buffer[32 * i + 24 + 1] / 255, u_buffer[32 * i + 24 + 2] / 255);
423
+ col.convertSRGBToLinear();
424
+ covAndColorData_uint8[destOffset + 0] = col.r * 255;
425
+ covAndColorData_uint8[destOffset + 1] = col.g * 255;
426
+ covAndColorData_uint8[destOffset + 2] = col.b * 255;
427
+ covAndColorData_uint8[destOffset + 3] = u_buffer[32 * i + 24 + 3];
428
+
429
+ // Store scale and transparent to remove splat in sorting process
430
+ mtx.elements[15] = Math.max(scale.x, scale.y, scale.z) * u_buffer[32 * i + 24 + 3] / 255.0;
431
+ for (let j = 0; j < 16; j++) matrices[i * 16 + j] = mtx.elements[j];
432
+ }
433
+ while (vertexCount > 0) {
434
+ let width = 0;
435
+ let height = 0;
436
+ const xoffset = shared.loadedVertexCount % shared.bufferTextureWidth;
437
+ const yoffset = Math.floor(shared.loadedVertexCount / shared.bufferTextureWidth);
438
+ if (shared.loadedVertexCount % shared.bufferTextureWidth != 0) {
439
+ width = Math.min(shared.bufferTextureWidth, xoffset + vertexCount) - xoffset;
440
+ height = 1;
441
+ } else if (Math.floor(vertexCount / shared.bufferTextureWidth) > 0) {
442
+ width = shared.bufferTextureWidth;
443
+ height = Math.floor(vertexCount / shared.bufferTextureWidth);
444
+ } else {
445
+ width = vertexCount % shared.bufferTextureWidth;
446
+ height = 1;
447
+ }
448
+ const centerAndScaleTextureProperties = shared.gl.properties.get(shared.centerAndScaleTexture);
449
+ context.bindTexture(context.TEXTURE_2D, centerAndScaleTextureProperties.__webglTexture);
450
+ context.texSubImage2D(context.TEXTURE_2D, 0, xoffset, yoffset, width, height, context.RGBA, context.FLOAT, shared.centerAndScaleData, shared.loadedVertexCount * 4);
451
+ const covAndColorTextureProperties = shared.gl.properties.get(shared.covAndColorTexture);
452
+ context.bindTexture(context.TEXTURE_2D, covAndColorTextureProperties.__webglTexture);
453
+ context.texSubImage2D(context.TEXTURE_2D, 0, xoffset, yoffset, width, height,
454
+ // @ts-ignore
455
+ context.RGBA_INTEGER, context.UNSIGNED_INT, shared.covAndColorData, shared.loadedVertexCount * 4);
456
+ shared.gl.resetState();
457
+ shared.loadedVertexCount += width * height;
458
+ vertexCount -= width * height;
459
+ }
460
+ return matrices;
461
+ }
462
+ function Splat({
463
+ src,
464
+ toneMapped = false,
465
+ alphaTest = 0,
466
+ alphaHash = false,
467
+ chunkSize = 25000,
468
+ ...props
469
+ }) {
470
+ extend({
471
+ SplatMaterial
472
+ });
473
+ const ref = React.useRef(null);
474
+ const gl = useThree(state => state.gl);
475
+ const camera = useThree(state => state.camera);
476
+
477
+ // Shared state, globally memoized, the same url re-uses the same daza
478
+ const shared = useLoader(SplatLoader, src, loader => {
479
+ loader.gl = gl;
480
+ loader.chunkSize = chunkSize;
481
+ });
482
+
483
+ // Listen to worker results, apply them to the target mesh
484
+ React.useLayoutEffect(() => shared.connect(ref.current), [src]);
485
+ // Update the worker
486
+ useFrame(() => shared.update(ref.current, camera, alphaHash));
487
+ return /*#__PURE__*/React.createElement("mesh", _extends({
488
+ ref: ref,
489
+ frustumCulled: false
490
+ }, props), /*#__PURE__*/React.createElement("splatMaterial", {
491
+ key: `${src}/${alphaTest}/${alphaHash}${SplatMaterial.key}`,
492
+ transparent: !alphaHash,
493
+ depthTest: true,
494
+ alphaTest: alphaHash ? 0 : alphaTest,
495
+ centerAndScaleTexture: shared.centerAndScaleTexture,
496
+ covAndColorTexture: shared.covAndColorTexture,
497
+ depthWrite: alphaHash ? true : alphaTest > 0,
498
+ blending: alphaHash ? THREE.NormalBlending : THREE.CustomBlending,
499
+ blendSrcAlpha: THREE.OneFactor,
500
+ alphaHash: !!alphaHash,
501
+ toneMapped: toneMapped
502
+ }));
503
+ }
504
+
505
+ export { Splat };
package/core/index.cjs.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./Billboard.cjs.js"),r=require("./ScreenSpace.cjs.js"),s=require("./QuadraticBezierLine.cjs.js"),t=require("./CubicBezierLine.cjs.js"),o=require("./CatmullRomLine.cjs.js"),i=require("./Line.cjs.js"),a=require("./PositionalAudio.cjs.js"),u=require("./Text.cjs.js"),c=require("./Text3D.cjs.js"),n=require("./Effects.cjs.js"),j=require("./GradientTexture.cjs.js"),p=require("./Image.cjs.js"),l=require("./Edges.cjs.js"),x=require("./Outlines.cjs.js"),q=require("./Trail.cjs.js"),d=require("./Sampler.cjs.js"),m=require("./ComputedAttribute.cjs.js"),h=require("./Clone.cjs.js"),C=require("./MarchingCubes.cjs.js"),M=require("./Decal.cjs.js"),S=require("./Svg.cjs.js"),T=require("./Gltf.cjs.js"),f=require("./AsciiRenderer.cjs.js"),P=require("./OrthographicCamera.cjs.js"),b=require("./PerspectiveCamera.cjs.js"),B=require("./CubeCamera.cjs.js"),g=require("./DeviceOrientationControls.cjs.js"),v=require("./FlyControls.cjs.js"),F=require("./MapControls.cjs.js"),L=require("./OrbitControls.cjs.js"),A=require("./TrackballControls.cjs.js"),D=require("./ArcballControls.cjs.js"),k=require("./TransformControls.cjs.js"),E=require("./PointerLockControls.cjs.js"),G=require("./FirstPersonControls.cjs.js"),R=require("./CameraControls.cjs.js"),w=require("./FaceControls.cjs.js"),z=require("./MotionPathControls.cjs.js"),O=require("./GizmoHelper.cjs.js"),y=require("./GizmoViewcube.cjs.js"),I=require("./GizmoViewport.cjs.js"),H=require("./Grid.cjs.js"),V=require("./useCubeTexture.cjs.js"),W=require("./useFBX.cjs.js"),Q=require("./useGLTF.cjs.js"),X=require("./useKTX2.cjs.js"),K=require("./useProgress.cjs.js"),N=require("./useTexture.cjs.js"),U=require("./useVideoTexture.cjs.js"),_=require("./useFont.cjs.js"),J=require("./Stats.cjs.js"),Y=require("./StatsGl.cjs.js"),Z=require("./useDepthBuffer.cjs.js"),$=require("./useAspect.cjs.js"),ee=require("./useCamera.cjs.js"),re=require("./useDetectGPU.cjs.js"),se=require("./useHelper.cjs.js"),te=require("./useBVH.cjs.js"),oe=require("./useContextBridge.cjs.js"),ie=require("./useAnimations.cjs.js"),ae=require("./useFBO.cjs.js"),ue=require("./useIntersect.cjs.js"),ce=require("./useBoxProjectedEnv.cjs.js"),ne=require("./BBAnchor.cjs.js"),je=require("./useTrailTexture.cjs.js"),pe=require("./useCubeCamera.cjs.js"),le=require("./Example.cjs.js"),xe=require("./SpriteAnimator.cjs.js"),qe=require("./FaceLandmarker.cjs.js"),de=require("./CurveModifier.cjs.js"),me=require("./MeshDistortMaterial.cjs.js"),he=require("./MeshWobbleMaterial.cjs.js"),Ce=require("./MeshReflectorMaterial.cjs.js"),Me=require("./MeshRefractionMaterial.cjs.js"),Se=require("./MeshTransmissionMaterial.cjs.js"),Te=require("./MeshDiscardMaterial.cjs.js"),fe=require("./PointMaterial.cjs.js"),Pe=require("./shaderMaterial.cjs.js"),be=require("./softShadows.cjs.js"),Be=require("./shapes.cjs.js"),ge=require("./Facemesh.cjs.js"),ve=require("./RoundedBox.cjs.js"),Fe=require("./ScreenQuad.cjs.js"),Le=require("./Center.cjs.js"),Ae=require("./Resize.cjs.js"),De=require("./Bounds.cjs.js"),ke=require("./CameraShake.cjs.js"),Ee=require("./Float.cjs.js"),Ge=require("./Stage.cjs.js"),Re=require("./Backdrop.cjs.js"),we=require("./Shadow.cjs.js"),ze=require("./Caustics.cjs.js"),Oe=require("./ContactShadows.cjs.js"),ye=require("./AccumulativeShadows.cjs.js"),Ie=require("./Reflector.cjs.js"),He=require("./SpotLight.cjs.js"),Ve=require("./Environment.cjs.js"),We=require("./Lightformer.cjs.js"),Qe=require("./Sky.cjs.js"),Xe=require("./Stars.cjs.js"),Ke=require("./Cloud.cjs.js"),Ne=require("./Sparkles.cjs.js"),Ue=require("./useEnvironment.cjs.js"),_e=require("./useMatcapTexture.cjs.js"),Je=require("./useNormalTexture.cjs.js"),Ye=require("./Wireframe.cjs.js"),Ze=require("./Points.cjs.js"),$e=require("./Instances.cjs.js"),er=require("./Segments.cjs.js"),rr=require("./Detailed.cjs.js"),sr=require("./Preload.cjs.js"),tr=require("./BakeShadows.cjs.js"),or=require("./meshBounds.cjs.js"),ir=require("./AdaptiveDpr.cjs.js"),ar=require("./AdaptiveEvents.cjs.js"),ur=require("./PerformanceMonitor.cjs.js"),cr=require("./RenderTexture.cjs.js"),nr=require("./RenderCubeTexture.cjs.js"),jr=require("./Mask.cjs.js"),pr=require("./Hud.cjs.js"),lr=require("./Fisheye.cjs.js"),xr=require("./MeshPortalMaterial.cjs.js");require("@babel/runtime/helpers/extends"),require("react"),require("@react-three/fiber"),require("react-merge-refs"),require("three"),require("three-stdlib"),require("suspend-react"),require("../helpers/constants.cjs.js"),require("meshline"),require("lodash.pick"),require("lodash.omit"),require("camera-controls"),require("maath"),require("zustand"),require("stats.js"),require("../helpers/useEffectfulState.cjs.js"),require("stats-gl"),require("detect-gpu"),require("three-mesh-bvh"),require("../materials/BlurPass.cjs.js"),require("../materials/ConvolutionMaterial.cjs.js"),require("../materials/MeshReflectorMaterial.cjs.js"),require("../materials/MeshRefractionMaterial.cjs.js"),require("../materials/DiscardMaterial.cjs.js"),require("../helpers/environment-assets.cjs.js"),require("../materials/SpotLightMaterial.cjs.js"),require("uuid"),require("../materials/WireframeMaterial.cjs.js"),require("react-composer"),exports.Billboard=e.Billboard,exports.ScreenSpace=r.ScreenSpace,exports.QuadraticBezierLine=s.QuadraticBezierLine,exports.CubicBezierLine=t.CubicBezierLine,exports.CatmullRomLine=o.CatmullRomLine,exports.Line=i.Line,exports.PositionalAudio=a.PositionalAudio,exports.Text=u.Text,exports.Text3D=c.Text3D,exports.Effects=n.Effects,exports.isWebGL2Available=n.isWebGL2Available,exports.GradientTexture=j.GradientTexture,exports.GradientType=j.GradientType,exports.Image=p.Image,exports.Edges=l.Edges,exports.Outlines=x.Outlines,exports.Trail=q.Trail,exports.useTrail=q.useTrail,exports.Sampler=d.Sampler,exports.useSurfaceSampler=d.useSurfaceSampler,exports.ComputedAttribute=m.ComputedAttribute,exports.Clone=h.Clone,exports.MarchingCube=C.MarchingCube,exports.MarchingCubes=C.MarchingCubes,exports.MarchingPlane=C.MarchingPlane,exports.Decal=M.Decal,exports.Svg=S.Svg,exports.Gltf=T.Gltf,exports.AsciiRenderer=f.AsciiRenderer,exports.OrthographicCamera=P.OrthographicCamera,exports.PerspectiveCamera=b.PerspectiveCamera,exports.CubeCamera=B.CubeCamera,exports.DeviceOrientationControls=g.DeviceOrientationControls,exports.FlyControls=v.FlyControls,exports.MapControls=F.MapControls,exports.OrbitControls=L.OrbitControls,exports.TrackballControls=A.TrackballControls,exports.ArcballControls=D.ArcballControls,exports.TransformControls=k.TransformControls,exports.PointerLockControls=E.PointerLockControls,exports.FirstPersonControls=G.FirstPersonControls,exports.CameraControls=R.CameraControls,exports.FaceControls=w.FaceControls,exports.useFaceControls=w.useFaceControls,exports.MotionPathControls=z.MotionPathControls,exports.useMotion=z.useMotion,exports.GizmoHelper=O.GizmoHelper,exports.useGizmoContext=O.useGizmoContext,exports.GizmoViewcube=y.GizmoViewcube,exports.GizmoViewport=I.GizmoViewport,exports.Grid=H.Grid,exports.useCubeTexture=V.useCubeTexture,exports.useFBX=W.useFBX,exports.useGLTF=Q.useGLTF,exports.useKTX2=X.useKTX2,exports.useProgress=K.useProgress,exports.IsObject=N.IsObject,exports.useTexture=N.useTexture,exports.useVideoTexture=U.useVideoTexture,exports.useFont=_.useFont,exports.Stats=J.Stats,exports.StatsGl=Y.StatsGl,exports.useDepthBuffer=Z.useDepthBuffer,exports.useAspect=$.useAspect,exports.useCamera=ee.useCamera,exports.useDetectGPU=re.useDetectGPU,exports.useHelper=se.useHelper,exports.Bvh=te.Bvh,exports.useBVH=te.useBVH,exports.useContextBridge=oe.useContextBridge,exports.useAnimations=ie.useAnimations,exports.useFBO=ae.useFBO,exports.useIntersect=ue.useIntersect,exports.useBoxProjectedEnv=ce.useBoxProjectedEnv,exports.BBAnchor=ne.BBAnchor,exports.useTrailTexture=je.useTrailTexture,exports.useCubeCamera=pe.useCubeCamera,exports.Example=le.Example,exports.SpriteAnimator=xe.SpriteAnimator,exports.FaceLandmarker=qe.FaceLandmarker,exports.FaceLandmarkerDefaults=qe.FaceLandmarkerDefaults,exports.useFaceLandmarker=qe.useFaceLandmarker,exports.CurveModifier=de.CurveModifier,exports.MeshDistortMaterial=me.MeshDistortMaterial,exports.MeshWobbleMaterial=he.MeshWobbleMaterial,exports.MeshReflectorMaterial=Ce.MeshReflectorMaterial,exports.MeshRefractionMaterial=Me.MeshRefractionMaterial,exports.MeshTransmissionMaterial=Se.MeshTransmissionMaterial,exports.MeshDiscardMaterial=Te.MeshDiscardMaterial,exports.PointMaterial=fe.PointMaterial,exports.PointMaterialImpl=fe.PointMaterialImpl,exports.shaderMaterial=Pe.shaderMaterial,exports.SoftShadows=be.SoftShadows,exports.Box=Be.Box,exports.Capsule=Be.Capsule,exports.Circle=Be.Circle,exports.Cone=Be.Cone,exports.Cylinder=Be.Cylinder,exports.Dodecahedron=Be.Dodecahedron,exports.Extrude=Be.Extrude,exports.Icosahedron=Be.Icosahedron,exports.Lathe=Be.Lathe,exports.Octahedron=Be.Octahedron,exports.Plane=Be.Plane,exports.Polyhedron=Be.Polyhedron,exports.Ring=Be.Ring,exports.Shape=Be.Shape,exports.Sphere=Be.Sphere,exports.Tetrahedron=Be.Tetrahedron,exports.Torus=Be.Torus,exports.TorusKnot=Be.TorusKnot,exports.Tube=Be.Tube,exports.Facemesh=ge.Facemesh,exports.FacemeshDatas=ge.FacemeshDatas,exports.FacemeshEye=ge.FacemeshEye,exports.FacemeshEyeDefaults=ge.FacemeshEyeDefaults,exports.RoundedBox=ve.RoundedBox,exports.ScreenQuad=Fe.ScreenQuad,exports.Center=Le.Center,exports.Resize=Ae.Resize,exports.Bounds=De.Bounds,exports.useBounds=De.useBounds,exports.CameraShake=ke.CameraShake,exports.Float=Ee.Float,exports.Stage=Ge.Stage,exports.Backdrop=Re.Backdrop,exports.Shadow=we.Shadow,exports.Caustics=ze.Caustics,exports.ContactShadows=Oe.ContactShadows,exports.AccumulativeShadows=ye.AccumulativeShadows,exports.RandomizedLight=ye.RandomizedLight,exports.accumulativeContext=ye.accumulativeContext,exports.Reflector=Ie.Reflector,exports.SpotLight=He.SpotLight,exports.SpotLightShadow=He.SpotLightShadow,exports.Environment=Ve.Environment,exports.EnvironmentCube=Ve.EnvironmentCube,exports.EnvironmentMap=Ve.EnvironmentMap,exports.EnvironmentPortal=Ve.EnvironmentPortal,exports.Lightformer=We.Lightformer,exports.Sky=Qe.Sky,exports.calcPosFromAngles=Qe.calcPosFromAngles,exports.Stars=Xe.Stars,exports.Cloud=Ke.Cloud,exports.CloudInstance=Ke.CloudInstance,exports.Clouds=Ke.Clouds,exports.Sparkles=Ne.Sparkles,exports.useEnvironment=Ue.useEnvironment,exports.useMatcapTexture=_e.useMatcapTexture,exports.useNormalTexture=Je.useNormalTexture,exports.Wireframe=Ye.Wireframe,exports.Point=Ze.Point,exports.Points=Ze.Points,exports.PointsBuffer=Ze.PointsBuffer,exports.PositionPoint=Ze.PositionPoint,exports.Instance=$e.Instance,exports.Instances=$e.Instances,exports.Merged=$e.Merged,exports.Segment=er.Segment,exports.SegmentObject=er.SegmentObject,exports.Segments=er.Segments,exports.Detailed=rr.Detailed,exports.Preload=sr.Preload,exports.BakeShadows=tr.BakeShadows,exports.meshBounds=or.meshBounds,exports.AdaptiveDpr=ir.AdaptiveDpr,exports.AdaptiveEvents=ar.AdaptiveEvents,exports.PerformanceMonitor=ur.PerformanceMonitor,exports.usePerformanceMonitor=ur.usePerformanceMonitor,exports.RenderTexture=cr.RenderTexture,exports.RenderCubeTexture=nr.RenderCubeTexture,exports.Mask=jr.Mask,exports.useMask=jr.useMask,exports.Hud=pr.Hud,exports.Fisheye=lr.Fisheye,exports.MeshPortalMaterial=xr.MeshPortalMaterial;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./Billboard.cjs.js"),r=require("./ScreenSpace.cjs.js"),s=require("./QuadraticBezierLine.cjs.js"),t=require("./CubicBezierLine.cjs.js"),o=require("./CatmullRomLine.cjs.js"),i=require("./Line.cjs.js"),a=require("./PositionalAudio.cjs.js"),u=require("./Text.cjs.js"),c=require("./Text3D.cjs.js"),n=require("./Effects.cjs.js"),j=require("./GradientTexture.cjs.js"),p=require("./Image.cjs.js"),l=require("./Edges.cjs.js"),x=require("./Outlines.cjs.js"),q=require("./Trail.cjs.js"),d=require("./Sampler.cjs.js"),m=require("./ComputedAttribute.cjs.js"),h=require("./Clone.cjs.js"),C=require("./MarchingCubes.cjs.js"),M=require("./Decal.cjs.js"),S=require("./Svg.cjs.js"),T=require("./Gltf.cjs.js"),f=require("./AsciiRenderer.cjs.js"),P=require("./Splat.cjs.js"),b=require("./OrthographicCamera.cjs.js"),B=require("./PerspectiveCamera.cjs.js"),g=require("./CubeCamera.cjs.js"),v=require("./DeviceOrientationControls.cjs.js"),F=require("./FlyControls.cjs.js"),L=require("./MapControls.cjs.js"),A=require("./OrbitControls.cjs.js"),D=require("./TrackballControls.cjs.js"),k=require("./ArcballControls.cjs.js"),E=require("./TransformControls.cjs.js"),G=require("./PointerLockControls.cjs.js"),R=require("./FirstPersonControls.cjs.js"),w=require("./CameraControls.cjs.js"),z=require("./FaceControls.cjs.js"),O=require("./MotionPathControls.cjs.js"),y=require("./GizmoHelper.cjs.js"),I=require("./GizmoViewcube.cjs.js"),H=require("./GizmoViewport.cjs.js"),V=require("./Grid.cjs.js"),W=require("./useCubeTexture.cjs.js"),Q=require("./useFBX.cjs.js"),X=require("./useGLTF.cjs.js"),K=require("./useKTX2.cjs.js"),N=require("./useProgress.cjs.js"),U=require("./useTexture.cjs.js"),_=require("./useVideoTexture.cjs.js"),J=require("./useFont.cjs.js"),Y=require("./Stats.cjs.js"),Z=require("./StatsGl.cjs.js"),$=require("./useDepthBuffer.cjs.js"),ee=require("./useAspect.cjs.js"),re=require("./useCamera.cjs.js"),se=require("./useDetectGPU.cjs.js"),te=require("./useHelper.cjs.js"),oe=require("./useBVH.cjs.js"),ie=require("./useContextBridge.cjs.js"),ae=require("./useAnimations.cjs.js"),ue=require("./useFBO.cjs.js"),ce=require("./useIntersect.cjs.js"),ne=require("./useBoxProjectedEnv.cjs.js"),je=require("./BBAnchor.cjs.js"),pe=require("./useTrailTexture.cjs.js"),le=require("./useCubeCamera.cjs.js"),xe=require("./Example.cjs.js"),qe=require("./SpriteAnimator.cjs.js"),de=require("./FaceLandmarker.cjs.js"),me=require("./CurveModifier.cjs.js"),he=require("./MeshDistortMaterial.cjs.js"),Ce=require("./MeshWobbleMaterial.cjs.js"),Me=require("./MeshReflectorMaterial.cjs.js"),Se=require("./MeshRefractionMaterial.cjs.js"),Te=require("./MeshTransmissionMaterial.cjs.js"),fe=require("./MeshDiscardMaterial.cjs.js"),Pe=require("./PointMaterial.cjs.js"),be=require("./shaderMaterial.cjs.js"),Be=require("./softShadows.cjs.js"),ge=require("./shapes.cjs.js"),ve=require("./Facemesh.cjs.js"),Fe=require("./RoundedBox.cjs.js"),Le=require("./ScreenQuad.cjs.js"),Ae=require("./Center.cjs.js"),De=require("./Resize.cjs.js"),ke=require("./Bounds.cjs.js"),Ee=require("./CameraShake.cjs.js"),Ge=require("./Float.cjs.js"),Re=require("./Stage.cjs.js"),we=require("./Backdrop.cjs.js"),ze=require("./Shadow.cjs.js"),Oe=require("./Caustics.cjs.js"),ye=require("./ContactShadows.cjs.js"),Ie=require("./AccumulativeShadows.cjs.js"),He=require("./Reflector.cjs.js"),Ve=require("./SpotLight.cjs.js"),We=require("./Environment.cjs.js"),Qe=require("./Lightformer.cjs.js"),Xe=require("./Sky.cjs.js"),Ke=require("./Stars.cjs.js"),Ne=require("./Cloud.cjs.js"),Ue=require("./Sparkles.cjs.js"),_e=require("./useEnvironment.cjs.js"),Je=require("./useMatcapTexture.cjs.js"),Ye=require("./useNormalTexture.cjs.js"),Ze=require("./Wireframe.cjs.js"),$e=require("./Points.cjs.js"),er=require("./Instances.cjs.js"),rr=require("./Segments.cjs.js"),sr=require("./Detailed.cjs.js"),tr=require("./Preload.cjs.js"),or=require("./BakeShadows.cjs.js"),ir=require("./meshBounds.cjs.js"),ar=require("./AdaptiveDpr.cjs.js"),ur=require("./AdaptiveEvents.cjs.js"),cr=require("./PerformanceMonitor.cjs.js"),nr=require("./RenderTexture.cjs.js"),jr=require("./RenderCubeTexture.cjs.js"),pr=require("./Mask.cjs.js"),lr=require("./Hud.cjs.js"),xr=require("./Fisheye.cjs.js"),qr=require("./MeshPortalMaterial.cjs.js");require("@babel/runtime/helpers/extends"),require("react"),require("@react-three/fiber"),require("react-merge-refs"),require("three"),require("three-stdlib"),require("suspend-react"),require("../helpers/constants.cjs.js"),require("meshline"),require("lodash.pick"),require("lodash.omit"),require("camera-controls"),require("maath"),require("zustand"),require("stats.js"),require("../helpers/useEffectfulState.cjs.js"),require("stats-gl"),require("detect-gpu"),require("three-mesh-bvh"),require("../materials/BlurPass.cjs.js"),require("../materials/ConvolutionMaterial.cjs.js"),require("../materials/MeshReflectorMaterial.cjs.js"),require("../materials/MeshRefractionMaterial.cjs.js"),require("../materials/DiscardMaterial.cjs.js"),require("../helpers/environment-assets.cjs.js"),require("../materials/SpotLightMaterial.cjs.js"),require("uuid"),require("../helpers/deprecated.cjs.js"),require("../materials/WireframeMaterial.cjs.js"),require("react-composer"),exports.Billboard=e.Billboard,exports.ScreenSpace=r.ScreenSpace,exports.QuadraticBezierLine=s.QuadraticBezierLine,exports.CubicBezierLine=t.CubicBezierLine,exports.CatmullRomLine=o.CatmullRomLine,exports.Line=i.Line,exports.PositionalAudio=a.PositionalAudio,exports.Text=u.Text,exports.Text3D=c.Text3D,exports.Effects=n.Effects,exports.isWebGL2Available=n.isWebGL2Available,exports.GradientTexture=j.GradientTexture,exports.GradientType=j.GradientType,exports.Image=p.Image,exports.Edges=l.Edges,exports.Outlines=x.Outlines,exports.Trail=q.Trail,exports.useTrail=q.useTrail,exports.Sampler=d.Sampler,exports.useSurfaceSampler=d.useSurfaceSampler,exports.ComputedAttribute=m.ComputedAttribute,exports.Clone=h.Clone,exports.MarchingCube=C.MarchingCube,exports.MarchingCubes=C.MarchingCubes,exports.MarchingPlane=C.MarchingPlane,exports.Decal=M.Decal,exports.Svg=S.Svg,exports.Gltf=T.Gltf,exports.AsciiRenderer=f.AsciiRenderer,exports.Splat=P.Splat,exports.OrthographicCamera=b.OrthographicCamera,exports.PerspectiveCamera=B.PerspectiveCamera,exports.CubeCamera=g.CubeCamera,exports.DeviceOrientationControls=v.DeviceOrientationControls,exports.FlyControls=F.FlyControls,exports.MapControls=L.MapControls,exports.OrbitControls=A.OrbitControls,exports.TrackballControls=D.TrackballControls,exports.ArcballControls=k.ArcballControls,exports.TransformControls=E.TransformControls,exports.PointerLockControls=G.PointerLockControls,exports.FirstPersonControls=R.FirstPersonControls,exports.CameraControls=w.CameraControls,exports.FaceControls=z.FaceControls,exports.useFaceControls=z.useFaceControls,exports.MotionPathControls=O.MotionPathControls,exports.useMotion=O.useMotion,exports.GizmoHelper=y.GizmoHelper,exports.useGizmoContext=y.useGizmoContext,exports.GizmoViewcube=I.GizmoViewcube,exports.GizmoViewport=H.GizmoViewport,exports.Grid=V.Grid,exports.useCubeTexture=W.useCubeTexture,exports.useFBX=Q.useFBX,exports.useGLTF=X.useGLTF,exports.useKTX2=K.useKTX2,exports.useProgress=N.useProgress,exports.IsObject=U.IsObject,exports.useTexture=U.useTexture,exports.useVideoTexture=_.useVideoTexture,exports.useFont=J.useFont,exports.Stats=Y.Stats,exports.StatsGl=Z.StatsGl,exports.useDepthBuffer=$.useDepthBuffer,exports.useAspect=ee.useAspect,exports.useCamera=re.useCamera,exports.useDetectGPU=se.useDetectGPU,exports.useHelper=te.useHelper,exports.Bvh=oe.Bvh,exports.useBVH=oe.useBVH,exports.useContextBridge=ie.useContextBridge,exports.useAnimations=ae.useAnimations,exports.useFBO=ue.useFBO,exports.useIntersect=ce.useIntersect,exports.useBoxProjectedEnv=ne.useBoxProjectedEnv,exports.BBAnchor=je.BBAnchor,exports.useTrailTexture=pe.useTrailTexture,exports.useCubeCamera=le.useCubeCamera,exports.Example=xe.Example,exports.SpriteAnimator=qe.SpriteAnimator,exports.FaceLandmarker=de.FaceLandmarker,exports.FaceLandmarkerDefaults=de.FaceLandmarkerDefaults,exports.useFaceLandmarker=de.useFaceLandmarker,exports.CurveModifier=me.CurveModifier,exports.MeshDistortMaterial=he.MeshDistortMaterial,exports.MeshWobbleMaterial=Ce.MeshWobbleMaterial,exports.MeshReflectorMaterial=Me.MeshReflectorMaterial,exports.MeshRefractionMaterial=Se.MeshRefractionMaterial,exports.MeshTransmissionMaterial=Te.MeshTransmissionMaterial,exports.MeshDiscardMaterial=fe.MeshDiscardMaterial,exports.PointMaterial=Pe.PointMaterial,exports.PointMaterialImpl=Pe.PointMaterialImpl,exports.shaderMaterial=be.shaderMaterial,exports.SoftShadows=Be.SoftShadows,exports.Box=ge.Box,exports.Capsule=ge.Capsule,exports.Circle=ge.Circle,exports.Cone=ge.Cone,exports.Cylinder=ge.Cylinder,exports.Dodecahedron=ge.Dodecahedron,exports.Extrude=ge.Extrude,exports.Icosahedron=ge.Icosahedron,exports.Lathe=ge.Lathe,exports.Octahedron=ge.Octahedron,exports.Plane=ge.Plane,exports.Polyhedron=ge.Polyhedron,exports.Ring=ge.Ring,exports.Shape=ge.Shape,exports.Sphere=ge.Sphere,exports.Tetrahedron=ge.Tetrahedron,exports.Torus=ge.Torus,exports.TorusKnot=ge.TorusKnot,exports.Tube=ge.Tube,exports.Facemesh=ve.Facemesh,exports.FacemeshDatas=ve.FacemeshDatas,exports.FacemeshEye=ve.FacemeshEye,exports.FacemeshEyeDefaults=ve.FacemeshEyeDefaults,exports.RoundedBox=Fe.RoundedBox,exports.ScreenQuad=Le.ScreenQuad,exports.Center=Ae.Center,exports.Resize=De.Resize,exports.Bounds=ke.Bounds,exports.useBounds=ke.useBounds,exports.CameraShake=Ee.CameraShake,exports.Float=Ge.Float,exports.Stage=Re.Stage,exports.Backdrop=we.Backdrop,exports.Shadow=ze.Shadow,exports.Caustics=Oe.Caustics,exports.ContactShadows=ye.ContactShadows,exports.AccumulativeShadows=Ie.AccumulativeShadows,exports.RandomizedLight=Ie.RandomizedLight,exports.accumulativeContext=Ie.accumulativeContext,exports.Reflector=He.Reflector,exports.SpotLight=Ve.SpotLight,exports.SpotLightShadow=Ve.SpotLightShadow,exports.Environment=We.Environment,exports.EnvironmentCube=We.EnvironmentCube,exports.EnvironmentMap=We.EnvironmentMap,exports.EnvironmentPortal=We.EnvironmentPortal,exports.Lightformer=Qe.Lightformer,exports.Sky=Xe.Sky,exports.calcPosFromAngles=Xe.calcPosFromAngles,exports.Stars=Ke.Stars,exports.Cloud=Ne.Cloud,exports.CloudInstance=Ne.CloudInstance,exports.Clouds=Ne.Clouds,exports.Sparkles=Ue.Sparkles,exports.useEnvironment=_e.useEnvironment,exports.useMatcapTexture=Je.useMatcapTexture,exports.useNormalTexture=Ye.useNormalTexture,exports.Wireframe=Ze.Wireframe,exports.Point=$e.Point,exports.Points=$e.Points,exports.PointsBuffer=$e.PointsBuffer,exports.PositionPoint=$e.PositionPoint,exports.Instance=er.Instance,exports.Instances=er.Instances,exports.Merged=er.Merged,exports.Segment=rr.Segment,exports.SegmentObject=rr.SegmentObject,exports.Segments=rr.Segments,exports.Detailed=sr.Detailed,exports.Preload=tr.Preload,exports.BakeShadows=or.BakeShadows,exports.meshBounds=ir.meshBounds,exports.AdaptiveDpr=ar.AdaptiveDpr,exports.AdaptiveEvents=ur.AdaptiveEvents,exports.PerformanceMonitor=cr.PerformanceMonitor,exports.usePerformanceMonitor=cr.usePerformanceMonitor,exports.RenderTexture=nr.RenderTexture,exports.RenderCubeTexture=jr.RenderCubeTexture,exports.Mask=pr.Mask,exports.useMask=pr.useMask,exports.Hud=lr.Hud,exports.Fisheye=xr.Fisheye,exports.MeshPortalMaterial=qr.MeshPortalMaterial;
package/core/index.d.ts CHANGED
@@ -21,6 +21,7 @@ export * from './Decal';
21
21
  export * from './Svg';
22
22
  export * from './Gltf';
23
23
  export * from './AsciiRenderer';
24
+ export * from './Splat';
24
25
  export * from './OrthographicCamera';
25
26
  export * from './PerspectiveCamera';
26
27
  export * from './CubeCamera';
package/core/index.js CHANGED
@@ -21,6 +21,7 @@ export { Decal } from './Decal.js';
21
21
  export { Svg } from './Svg.js';
22
22
  export { Gltf } from './Gltf.js';
23
23
  export { AsciiRenderer } from './AsciiRenderer.js';
24
+ export { Splat } from './Splat.js';
24
25
  export { OrthographicCamera } from './OrthographicCamera.js';
25
26
  export { PerspectiveCamera } from './PerspectiveCamera.js';
26
27
  export { CubeCamera } from './CubeCamera.js';
@@ -147,5 +148,6 @@ import '../materials/DiscardMaterial.js';
147
148
  import '../helpers/environment-assets.js';
148
149
  import '../materials/SpotLightMaterial.js';
149
150
  import 'uuid';
151
+ import '../helpers/deprecated.js';
150
152
  import '../materials/WireframeMaterial.js';
151
153
  import 'react-composer';
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.setUpdateRange=(e,t)=>{"updateRanges"in e?e.updateRanges[0]=t:e.updateRange=t};
@@ -0,0 +1,4 @@
1
+ export declare const setUpdateRange: (attribute: THREE.BufferAttribute, updateRange: {
2
+ offset: number;
3
+ count: number;
4
+ }) => void;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Sets `BufferAttribute.updateRange` since r159.
3
+ */
4
+ const setUpdateRange = (attribute, updateRange) => {
5
+ if ('updateRanges' in attribute) {
6
+ // r159
7
+ // @ts-ignore
8
+ attribute.updateRanges[0] = updateRange;
9
+ } else {
10
+ attribute.updateRange = updateRange;
11
+ }
12
+ };
13
+
14
+ export { setUpdateRange };