@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/README.md +46 -5
- package/core/Cloud.cjs.js +1 -1
- package/core/Cloud.js +17 -5
- package/core/Instances.cjs.js +1 -1
- package/core/Instances.js +14 -7
- package/core/Splat.cjs.js +1 -0
- package/core/Splat.d.ts +58 -0
- package/core/Splat.js +505 -0
- package/core/index.cjs.js +1 -1
- package/core/index.d.ts +1 -0
- package/core/index.js +2 -0
- package/helpers/deprecated.cjs.js +1 -0
- package/helpers/deprecated.d.ts +4 -0
- package/helpers/deprecated.js +14 -0
- package/index.cjs.js +1 -1
- package/index.js +1 -0
- package/native/index.cjs.js +1 -1
- package/native/index.js +2 -0
- package/package.json +1 -1
- package/react-three-drei-0.0.0-semantic-release.tgz +0 -0
- package/web/index.cjs.js +1 -1
- package/web/index.js +2 -0
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
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,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 };
|