@openheart/tavio-renderer 2.2.9-without-wasm

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/README.md +25 -0
  2. package/build/esm/index.js +41928 -0
  3. package/build/esm/types/animation/animationController.d.ts +133 -0
  4. package/build/esm/types/camera/cameraCollider.d.ts +54 -0
  5. package/build/esm/types/camera/cameraPath.d.ts +120 -0
  6. package/build/esm/types/camera/cameraPathControls.d.ts +73 -0
  7. package/build/esm/types/camera/cameraPathManager.d.ts +67 -0
  8. package/build/esm/types/camera/flightControls.d.ts +76 -0
  9. package/build/esm/types/camera/orbitControls.d.ts +192 -0
  10. package/build/esm/types/camera/transferControls.d.ts +122 -0
  11. package/build/esm/types/editor/selector/boxSelector.d.ts +45 -0
  12. package/build/esm/types/editor/selector/selector.d.ts +145 -0
  13. package/build/esm/types/editor/selector/sphereSelector.d.ts +45 -0
  14. package/build/esm/types/extension/InstancedMeshEX.d.ts +101 -0
  15. package/build/esm/types/global.iife.d.ts +9 -0
  16. package/build/esm/types/loader/streamLoader.d.ts +21 -0
  17. package/build/esm/types/main.d.ts +0 -0
  18. package/build/esm/types/math/easing.d.ts +18 -0
  19. package/build/esm/types/math/interpolation.d.ts +70 -0
  20. package/build/esm/types/module.d.ts +5 -0
  21. package/build/esm/types/types/global.d.ts +23 -0
  22. package/build/esm/types/utility/console.d.ts +6 -0
  23. package/build/esm/types/utility/plyDecoder.d.ts +97 -0
  24. package/build/esm/types/utility/utility.d.ts +47 -0
  25. package/build/esm/types/viewer/canvas.d.ts +1108 -0
  26. package/build/esm/types/viewer/tavioMesh.d.ts +436 -0
  27. package/build/esm/types/wasm-bindings/wasm-worker-client.d.ts +57 -0
  28. package/build/esm/types/wasm-bindings/wasm-worker.d.ts +49 -0
  29. package/build/esm/types/wasm-bindings/wasm.d.ts +5 -0
  30. package/build/esm/types/worker/splatWorker.d.ts +16 -0
  31. package/build/esm/types/worker/tavioWorker.d.ts +61 -0
  32. package/package.json +46 -0
@@ -0,0 +1,436 @@
1
+ import { CubeTexture, DataTexture, Euler, PerspectiveCamera, Points, RawShaderMaterial, Texture, Vector3, WebGLRenderer } from 'three';
2
+ import { default as EventEmitter } from 'eventemitter3';
3
+ import { iLoadingOption, iViewerOption, iHeaderInfo, iTransform } from './canvas';
4
+ import { iCollisionTarget } from '../worker/tavioWorker';
5
+ import { InstancedMeshEX } from '../extension/InstancedMeshEX';
6
+ export declare class TavioMesh extends EventEmitter {
7
+ private perspectiveCamera;
8
+ private worker;
9
+ private featureBits;
10
+ private majorVersionNumber;
11
+ private minorVersionNumber;
12
+ private backgroundExists;
13
+ private containmentRadius;
14
+ private sourceProperty;
15
+ private viewerOption;
16
+ private sharedData;
17
+ private usingSharedArrayBuffer;
18
+ private usingSphericalHarmonics;
19
+ private sphericalHarmonicsData;
20
+ private gaussianCount;
21
+ private gaussianDataLengthInChunk;
22
+ private gaussianCountInChunk;
23
+ private gaussianData;
24
+ private gaussianIndexData;
25
+ private gaussianOrderData;
26
+ private gaussianGeneralData;
27
+ private gaussianTransformData;
28
+ private transformTextureWidth;
29
+ private currentSelectionCount;
30
+ private gaussianDataTexture;
31
+ private gaussianCompressedDataTexture0;
32
+ private gaussianCompressedDataTexture1;
33
+ private gaussianCompressedDataTexture2;
34
+ private gaussianCompressedDataTexture3;
35
+ private currentVertexCount;
36
+ private maxDistance;
37
+ private gaussianGeneralDataTexture;
38
+ private gaussianTransformDataTexture;
39
+ private initializedTexture;
40
+ private initializedColorTexture;
41
+ initialized: boolean;
42
+ initializedPoints: boolean;
43
+ initializedBackground: boolean;
44
+ private positionAttribute;
45
+ private indexAttribute;
46
+ private gaussianGeometry;
47
+ private gaussianMaterial;
48
+ private gaussianPickingMaterial;
49
+ private gaussianMesh;
50
+ private gaussianPickingMesh;
51
+ private gaussianPoints;
52
+ private gaussianPointGeometry;
53
+ private gaussianPointMaterial;
54
+ private gaussianPointUniforms;
55
+ private mainProperties;
56
+ private backgroundTexture;
57
+ private environmentTexture;
58
+ private listenerInitializedTexture;
59
+ private useWasmSort;
60
+ private wasmSortClient;
61
+ private isSorting;
62
+ private lastViewProjectionMatrix;
63
+ private depthRenderTarget;
64
+ private depthRenderScene;
65
+ private depthRenderCamera;
66
+ private depthRenderGeometry;
67
+ private depthRenderMaterial;
68
+ private depthRenderPlane;
69
+ /**
70
+ * this.gaussianGeneralData についての覚書
71
+ * RGBA がそれぞれ Uint8 で1つのガウシアンに対応するデータであるため、常に4の倍数の長さとなる
72
+ * R は選択されているかどうかを意味し、Uint8 の各ビットがどのセレクターによるものかを意味する
73
+ * G は削除されているかどうかを意味し、将来的に undo/redo に対応するため削除操作のたびにインクリメントする
74
+ * B は tavio 形式時の生アルファを保持し、min-max で復元する前の状態のままシェーダに送る
75
+ * A は 複数のデータを統合する際に何番目のデータであるかの整数インデックスを保持する
76
+ */
77
+ /**
78
+ * this.gaussianTransformData についての覚書
79
+ * RGBA がそれぞれ Uint32 で1つのファイルに対応するデータであるため、常に4の倍数の長さとなる
80
+ * 1つの画素に、16bit の浮動小数点を合計8個格納し内訳は以下のとおり(ガウシアン単位ではなく、ファイル単位)
81
+ * R: 平行移動成分の XY
82
+ * G: 平行移動成分の Z と、全体のスケール係数 S
83
+ * B: クォータニオンの WX
84
+ * A: クォータニオンの YZ
85
+ */
86
+ /**
87
+ * インスタンスが発火するイベント
88
+ */
89
+ static EVENTS: string[];
90
+ /**
91
+ * @constructor
92
+ * @param camera - worker の更新のためにカメラのインスタンスが必要
93
+ * @param material - メッシュの生成に使うマテリアルは上の層から指定されたものを使う
94
+ * @param pickingMaterial - メッシュの生成に使うマテリアルは上の層から指定されたものを使う
95
+ */
96
+ constructor(camera: PerspectiveCamera, material: RawShaderMaterial, pinckingMaterial: RawShaderMaterial, viewerOption: iViewerOption);
97
+ /**
98
+ * ==========================================================================
99
+ * loader
100
+ * ==========================================================================
101
+ */
102
+ /**
103
+ * tavio 形式のリソースをロードする
104
+ * @param url - 読み込む .tavio ファイル
105
+ * @param option - ロード・パース関連のオプション
106
+ */
107
+ loadTavio(url: string, option?: iLoadingOption): Promise<void>;
108
+ /**
109
+ * ply 形式のリソースをロードする
110
+ * @param url - 読み込む .ply ファイル
111
+ * @param option - ロード・パース関連のオプション
112
+ */
113
+ loadPly(url: string, option?: iLoadingOption): Promise<void>;
114
+ /**
115
+ * splat 形式のリソースをロードする
116
+ * @param url - 読み込む .splat ファイル
117
+ */
118
+ loadSplat(url: string): Promise<void>;
119
+ /**
120
+ * tavio 形式のリソースをロードする
121
+ * @param url - 読み込む .tavio ファイル
122
+ * @param option - ロード・パース関連のオプション
123
+ * @param options.decodeMode - デコードモード. "sync", "concurrent", "parallel" を指定
124
+ * @param options.maxThreads - decodeMode が "parallel" のときに使用されるスレッド数の上限
125
+ * @param options.maxDecodePoints - 最大デコード点数. これを超える点は読み込まれない
126
+ * @param options.useSphericalHarmonics - 球面調和関数を使用
127
+ * @param options.isEncodeEnabled - エンコードを有効にする. 有効にするとエンコード時に必要なデータを読み込む
128
+ */
129
+ loadTavioWasm(url: string, options?: ({
130
+ decodeMode?: "sync";
131
+ } | {
132
+ decodeMode: "parallel";
133
+ maxThreads?: number;
134
+ }) & {
135
+ maxDecodePoints?: number;
136
+ useSphericalHarmonics?: boolean;
137
+ isEncodeEnabled?: boolean;
138
+ }): Promise<void>;
139
+ /**
140
+ * ply 形式のリソースをロードする
141
+ * @param url - 読み込む .ply ファイル
142
+ * @param option - ロード・パース関連のオプション
143
+ * @param options.decodeMode - デコードモード. "sync", "concurrent", "parallel" を指定
144
+ * @param options.maxThreads - decodeMode が "parallel" のときに使用されるスレッド数の上限
145
+ * @param options.maxDecodePoints - 最大デコード点数. これを超える点は読み込まれない
146
+ * @param options.useSphericalHarmonics - 球面調和関数を使用
147
+ */
148
+ loadPlyWasm(url: string, options?: ({
149
+ decodeMode?: "sync" | "concurrent";
150
+ } | {
151
+ decodeMode: "parallel";
152
+ maxThreads?: number;
153
+ }) & {
154
+ maxDecodePoints?: number;
155
+ useSphericalHarmonics?: boolean;
156
+ }): Promise<void>;
157
+ /**
158
+ * tavio 形式のリソースをセーブする
159
+ * @param filename - 保存する .tavio ファイル名
160
+ * @param option - セーブ関連のオプション
161
+ * @param option.version - バージョン番号
162
+ * @param option.useSphericalHarmonics - 球面調和関数を使用する
163
+ * @param option.useGeneralData - 編集データを反映する
164
+ * @param option.featureFlags - tavio形式のフィーチャーフラグ
165
+ */
166
+ saveTavioWasm(filename: string, options?: {
167
+ version?: String;
168
+ useSphericalHarmonics?: boolean;
169
+ useGeneralData?: boolean;
170
+ featureFlags?: number;
171
+ }): Promise<void>;
172
+ /**
173
+ * ==========================================================================
174
+ * getter / setter
175
+ * ==========================================================================
176
+ */
177
+ /**
178
+ * 点描画用の Points インスタンスを返す
179
+ */
180
+ getPoints(): Points;
181
+ /**
182
+ * メッシュのインスタンスで解決する Promise を返す
183
+ */
184
+ getMesh(): Promise<InstancedMeshEX>;
185
+ /**
186
+ * ピッキング用メッシュのインスタンスで解決する Promise を返す
187
+ */
188
+ getPickingMesh(): Promise<InstancedMeshEX>;
189
+ /**
190
+ * 背景用テクスチャを返す
191
+ */
192
+ getBackgroundTexture(): Texture;
193
+ /**
194
+ * 環境マップ用テクスチャを返す
195
+ */
196
+ getEnvironmentTexture(): CubeTexture;
197
+ /**
198
+ * 含まれる全ガウシアンの最大距離を返す
199
+ */
200
+ getMaxDistance(): number;
201
+ /**
202
+ * ファイルヘッダおよび頂点の含まれる距離などの諸情報を返す
203
+ */
204
+ getHeaderInfo(): iHeaderInfo;
205
+ /**
206
+ * uniform 変数を返す
207
+ */
208
+ getUniforms(): any;
209
+ /**
210
+ * uniform 変数を設定する
211
+ * @param values - 設定する uniform 変数をキーとするオブジェクト
212
+ */
213
+ setUniforms(values: any): void;
214
+ /**
215
+ * 点描画用のマテリアルに紐づいている uniform 変数を返す
216
+ */
217
+ getPointsUniforms(): any;
218
+ /**
219
+ * 点描画用のマテリアルに uniform 変数を設定する
220
+ * @param values - 設定する uniform 変数をキーとするオブジェクト
221
+ */
222
+ setPointUniforms(values: any): void;
223
+ /**
224
+ * カメラ関係のパラメータを深度書き込み用に設定する
225
+ * @param viewProjectionMatrix - 要素の配列
226
+ * @param cameraPosition - 要素の配列
227
+ * @param renderer - レンダラー
228
+ * @param isForce - 視野が動いたかどうかにかかわらず強制更新する
229
+ */
230
+ setCameraParameterForDepthRenderTarget(viewProjectionMatrix: number[], cameraPosition: number[], renderer: WebGLRenderer, isForce?: boolean): Promise<void>;
231
+ /**
232
+ * 環境マップ用のテクスチャをインスタンスに設定する
233
+ * @param environment - PMREMGenerator で生成した環境マップ
234
+ */
235
+ setEnvironmentTexture(environment: CubeTexture): void;
236
+ /**
237
+ * ソートに WASM 版を利用するかどうかを設定する
238
+ * @param isUsing - 利用するかどうかのフラグ
239
+ */
240
+ setUsingWasmSort(isUsing: boolean): void;
241
+ /**
242
+ * 球面調和関数の交流成分を利用するかどうかを設定する
243
+ * @param isUsing - 利用するかどうかのフラグ
244
+ */
245
+ setUsingSphericalHarmonics(isUsing: boolean): void;
246
+ /**
247
+ * 球面調和関数の交流成分に対する係数を設定する(0.0 ~ 1.0)
248
+ * @param intensity - 0.0 で交流成分の効果が完全に不可視化される
249
+ */
250
+ setSphericalHarmonicsIntensity(intensity: number): void;
251
+ /**
252
+ * 点描画用ジオメトリに色を設定する
253
+ * @param color - 色のデータ
254
+ */
255
+ setColorIntoPoints(color: Uint8ClampedArray): void;
256
+ /**
257
+ * インデックスを指定して座標変換を設定する
258
+ * @param index - インデックス
259
+ * @param translation - 平行移動
260
+ * @param rotation - 回転(オイラー角)
261
+ * @param scale - 拡大縮小(XYZ で統一のスケール)
262
+ */
263
+ setTransform(index: number, translation: Vector3, rotation: Euler, scale: number): void;
264
+ /**
265
+ * 指定されたインデックスの座標変換情報を返す
266
+ * @param index - インデックス
267
+ */
268
+ getTransform(index: number): iTransform;
269
+ /**
270
+ * 自身のプロパティの状態に応じて球面調和関数に関連する uniform 変数の更新を行う
271
+ * @private
272
+ */
273
+ private _updateUniformsForSphericalHarmonics;
274
+ /**
275
+ * tavio 形式の特性フラグを取得する
276
+ * @private
277
+ * @param featureBits - tavio 形式ファイルのヘッダにある Uint32 の特性フラグ
278
+ */
279
+ private _getFeatureBits;
280
+ /**
281
+ * ==========================================================================
282
+ * general
283
+ * ==========================================================================
284
+ */
285
+ /**
286
+ * picking 用マテリアルに uniform 変数を同期する
287
+ * @param div - ピッキング用フレームバッファの大きさに対する除数
288
+ */
289
+ syncPinckingMaterial(div: number): void;
290
+ /**
291
+ * ソートを実行する
292
+ */
293
+ runSort(): void;
294
+ /**
295
+ * 各種リソースを解放する
296
+ */
297
+ dispose(): void;
298
+ /**
299
+ * SharedArrayBuffer 用のデータ領域を確保または統合する
300
+ * @param index - これが何番目のデータ(ファイル)か
301
+ * @param offset - 開始位置(最初のファイルならゼロ、二番目以降なら直前までのガウシアンの個数)
302
+ * @param chunkCount - 該当ファイルのチャンクの個数
303
+ * @param pointCount - 該当ファイルのガウシアンの個数
304
+ * @param isEncodeEnable - エンコード可能とするかどうか(WASM 用)
305
+ */
306
+ allocateSharedData(index: number, offset: number, chunkCount: number, pointCount: number, isEncodeEnabled: Boolean): SharedData;
307
+ /**
308
+ * テクスチャのセットアップが完了しているかどうかを返す
309
+ * @private
310
+ */
311
+ private _getInitialized;
312
+ /**
313
+ * ソートが終わったあとの共通処理を行う
314
+ * @private
315
+ * @param count - 処理した頂点の個数
316
+ * @param time - 処理に要した時間(ms)
317
+ */
318
+ private _onSort;
319
+ /**
320
+ * ==========================================================================
321
+ * setup
322
+ * ==========================================================================
323
+ */
324
+ /**
325
+ * tavio 形式用の worker をセットアップする
326
+ */
327
+ setupTavioWorker(): void;
328
+ /**
329
+ * 点描画用の頂点情報をセットアップする
330
+ * @param position - 座標を意味するデータ
331
+ */
332
+ setupPoints(position: Float32Array): void;
333
+ /**
334
+ * 頂点情報をセットアップする
335
+ * @param count - 頂点の総個数(想定される頂点の最大個数)
336
+ */
337
+ setupGeometry(count: number): void;
338
+ /**
339
+ * ファイルごとに個別に transform するためのデータ領域を確保する
340
+ * @param index - これが何番目のデータ(ファイル)か
341
+ * @param offset - 開始位置(最初のファイルならゼロ、二番目以降なら直前までのガウシアンの個数)
342
+ * @param totalCount - ガウシアンの総個数
343
+ */
344
+ setupTransformData(index: number, offset: number, totalCount: number): void;
345
+ /**
346
+ * gaussian のデータを書き込んだデータテクスチャを生成する
347
+ * @param data - 書き込むデータ
348
+ * @param width - テクスチャの幅
349
+ * @param height - テクスチャの高さ
350
+ */
351
+ setupDataTexture(data: Uint32Array, width: number, height: number): DataTexture;
352
+ /**
353
+ * 球面調和関数の交流成分由来となる色のデータを書き込んだデータテクスチャを生成する
354
+ * @param data - 書き込むデータ
355
+ * @param width - テクスチャの幅
356
+ * @param height - テクスチャの高さ
357
+ */
358
+ setupColorDataTexture(data: Uint8Array, width: number, height: number): DataTexture;
359
+ /**
360
+ * 球面調和関数の交流成分由来を圧縮したデータを下記のだデータテクスチャを生成する
361
+ * @param data - 書き込むデータ
362
+ * @param width - テクスチャの幅
363
+ * @param height - テクスチャの高さ
364
+ */
365
+ setupCompressedColorDataTexture(data: Uint32Array, width: number, height: number): DataTexture;
366
+ /**
367
+ * セレクターとの交差など汎用データ用のデータテクスチャを生成する
368
+ * @param data - 書き込むデータ
369
+ * @param width - テクスチャの幅
370
+ * @param height - テクスチャの高さ
371
+ */
372
+ setupGeneralDataTexture(data: Uint8Array, width: number, height: number): DataTexture;
373
+ /**
374
+ * 頂点属性を全走査し原点からの最大距離を求める
375
+ * @private
376
+ * @param position - 全 3DGS のワールド空間上の位置
377
+ */
378
+ private _getMaxDistance;
379
+ /**
380
+ * ファイルごとの座標変換情報を格納するデータ用のデータテクスチャを生成する
381
+ * @param data - 書き込むデータ
382
+ * @param width - テクスチャの幅
383
+ * @param height - テクスチャの高さ
384
+ */
385
+ setupTransformDataTexture(data: Uint32Array, width: number, height: number): DataTexture;
386
+ /**
387
+ * ==========================================================================
388
+ * collision / selection
389
+ * ==========================================================================
390
+ */
391
+ /**
392
+ * 衝突判定を設定する
393
+ * @param collision - 設定する衝突判定、またはその配列
394
+ */
395
+ setCollision(collision: iCollisionTarget | iCollisionTarget[]): void;
396
+ /**
397
+ * 現在の衝突判定を解除する
398
+ */
399
+ resetCollision(): void;
400
+ /**
401
+ * 現在選択しているガウシアンを削除状態とする
402
+ */
403
+ deleteSelectedGaussian(): void;
404
+ /**
405
+ * 削除状態を一世代前に戻す
406
+ */
407
+ undoDeletedGaussian(): void;
408
+ /**
409
+ * すべての削除状態をリセットする
410
+ */
411
+ resetDeletedGaussian(): void;
412
+ /**
413
+ * 衝突判定用のリソースを設定する
414
+ * @private
415
+ */
416
+ private _updateCollisionResource;
417
+ }
418
+ declare class SharedData {
419
+ sharedGaussianData: SharedArrayBuffer;
420
+ sharedGaussianIndexData: SharedArrayBuffer;
421
+ sharedGaussianOrderData: SharedArrayBuffer;
422
+ sharedGaussianGeneralData: SharedArrayBuffer;
423
+ sharedSphericalHarmonicsData: SharedArrayBuffer;
424
+ sharedSphericalHarmonicsLabel: SharedArrayBuffer;
425
+ sharedSphericalHarmonicsMaxQuantizationIndex: SharedArrayBuffer;
426
+ constructor(gaussianDataSize: number, gaussianGeneralDataSize: number, chunkCount: number, pointCount: number, isEncodeEnabled: Boolean);
427
+ get gaussianData(): Uint8Array;
428
+ get gaussianIndexData(): Uint32Array;
429
+ get gaussianOrderData(): Uint8Array;
430
+ get gaussianGeneralData(): Uint8Array;
431
+ get sphericalHarmonicsData(): Float32Array;
432
+ get sphericalHarmonicsLabel(): Uint16Array;
433
+ get sphericalHarmonicsMaxQuantizationIndex(): Uint32Array;
434
+ get isEncodeEnabled(): boolean;
435
+ }
436
+ export {};
@@ -0,0 +1,57 @@
1
+ import { WasmFnMap, WasmWorkerInitOptions } from './wasm-worker';
2
+ type AsyncWasmFnMap = {
3
+ [K in Exclude<keyof WasmFnMap, "registerEventHandler">]: WasmFnMap[K] extends (...args: infer A) => infer R ? (...args: A) => Promise<Awaited<R>> : never;
4
+ };
5
+ type WasmEvent = {
6
+ type: "decode:fileSize";
7
+ fileSize: number;
8
+ } | {
9
+ type: "decode:header";
10
+ data: any;
11
+ } | {
12
+ type: "decode:chunkMain";
13
+ chunkIndex: number;
14
+ pointCount: number;
15
+ data: Uint8Array;
16
+ scaleMinValues: Float32Array[];
17
+ scaleMaxValues: Float32Array[];
18
+ alphaMinValues: Float32Array[];
19
+ alphaMaxValues: Float32Array[];
20
+ } | {
21
+ type: "decode:chunkMainHeader";
22
+ chunkIndex: number;
23
+ data: any;
24
+ } | {
25
+ type: "decode:chunkMainSphericalHarmonics";
26
+ chunkIndex: number;
27
+ data: any;
28
+ } | {
29
+ type: "decode:chunkCelestialSphere";
30
+ chunkIndex: number;
31
+ data: ImageBitmap;
32
+ } | {
33
+ type: "decode:point";
34
+ chunkIndex: number;
35
+ data: Float32Array;
36
+ } | {
37
+ type: "decode:color";
38
+ chunkIndex: number;
39
+ data: Uint8Array;
40
+ };
41
+ type WasmEventHandler = (e: WasmEvent) => void;
42
+ export declare class TavioWasmWorkerClient {
43
+ private worker;
44
+ private readyResolve;
45
+ private readyPromise;
46
+ private resolverId;
47
+ private resolvers;
48
+ private eventHandler;
49
+ constructor(options?: WasmWorkerInitOptions);
50
+ dispose(): void;
51
+ static create(options?: WasmWorkerInitOptions): Promise<TavioWasmWorkerClient>;
52
+ get api(): AsyncWasmFnMap;
53
+ registerEventHandler(eventHandler: WasmEventHandler): void;
54
+ private handleMessage;
55
+ private call;
56
+ }
57
+ export {};
@@ -0,0 +1,49 @@
1
+ /// <reference lib="webworker" />
2
+ type TavioWasmThread = typeof import("@wasm/thread");
3
+ type TavioWasmNoThread = typeof import("@wasm/no-thread");
4
+ type WasmExports = TavioWasmThread | TavioWasmNoThread;
5
+ type WasmFnKeys = Exclude<keyof {
6
+ [K in keyof WasmExports as WasmExports[K] extends (...args: any[]) => any ? K : never]: unknown;
7
+ }, "default" | "initSync" | "main" | "IntoUnderlyingByteSource" | "IntoUnderlyingSink" | "IntoUnderlyingSource">;
8
+ export type WasmFnMap = {
9
+ [K in WasmFnKeys]: WasmExports[K];
10
+ };
11
+ export type WasmWorkerInitRequest = {
12
+ kind: "init";
13
+ options?: {
14
+ useSharedArrayBuffer?: boolean;
15
+ threadCount?: number;
16
+ };
17
+ };
18
+ export type WasmWorkerRegisterEventHandlerRequest = {
19
+ kind: "registerEventHandler";
20
+ };
21
+ export type WasmWorkerRequest = WasmWorkerInitRequest | WasmWorkerRegisterEventHandlerRequest | {
22
+ [K in WasmFnKeys]: {
23
+ kind: K;
24
+ id: number;
25
+ args: Parameters<WasmFnMap[K]>;
26
+ };
27
+ }[WasmFnKeys];
28
+ export type WasmWorkerResponse = {
29
+ [K in WasmFnKeys]: {
30
+ kind: K;
31
+ id: number;
32
+ result: ReturnType<WasmFnMap[K]>;
33
+ };
34
+ }[WasmFnKeys];
35
+ export type WasmWorkerInitOptions = WasmWorkerInitRequest["options"];
36
+ export type WasmLoadedEvent = {
37
+ category: "wasmLoaded";
38
+ };
39
+ export type WasmErrorEvent = {
40
+ category: "wasmError";
41
+ id: number;
42
+ error: Error;
43
+ };
44
+ export type WasmCallbackEvent = {
45
+ category: "wasmCallback";
46
+ data: unknown;
47
+ };
48
+ export type WasmWorkerMessage = WasmWorkerResponse | WasmLoadedEvent | WasmErrorEvent | WasmCallbackEvent;
49
+ export {};
@@ -0,0 +1,5 @@
1
+ type TavioWasmThread = typeof import("@wasm/thread");
2
+ type TavioWasmNoThread = typeof import("@wasm/no-thread");
3
+ type TavioWasmModule = Omit<TavioWasmThread | TavioWasmNoThread, "default" | "main" | "initSync" | "IntoUnderlyingByteSource" | "IntoUnderlyingSink" | "IntoUnderlyingSource">;
4
+ export declare const TavioWasm: () => Promise<TavioWasmModule>;
5
+ export {};
@@ -0,0 +1,16 @@
1
+ /**
2
+ * # sorter
3
+ *
4
+ * ## receive
5
+ * buffer {ArrayBufferLike} - Uint8Array の buffer プロパティ
6
+ * vertexCount {number} - 現在の頂点(splat)の個数(buffer の長さによらず、これを上限としてループを回す)
7
+ * viewProjectionMatrix - view * projection 行列
8
+ *
9
+ * ## post
10
+ * depthIndex {number[]} - 手前から順にソートされたインデックス
11
+ * currentVertexCount {number} - 現在の頂点の個数
12
+ * textureData {Uint32Array} - テクスチャを生成するためのデータ
13
+ * textureWidth {number} - テクスチャの幅
14
+ * textureHeight {number} - テクスチャの高さ
15
+ */
16
+ export {};
@@ -0,0 +1,61 @@
1
+ /**
2
+ * # sorter
3
+ *
4
+ * ## receive
5
+ * buffer {SharedArrayBuffer} - 3DGS の情報を含む整形済みデータ
6
+ * indexBuffer {SharedArrayBuffer} - 並び順のデータ
7
+ * orderBuffer {SharedArrayBuffer} - 深度のデータ
8
+ * generalBuffer {SharedArrayBuffer} - セレクターとの衝突判定、raw-alpha など、汎用バッファ
9
+ * shBuffer {SharedArrayBuffer} - 球面調和関数用の交流成分のデータ
10
+ * vertexCount {number} - 現在の頂点(splat)の個数(buffer の長さによらず、これを上限としてループを回す)
11
+ * properties {any} - プロパティ(position, scale, rotation, alpha, sh0)
12
+ * shProperty {any} - プロパティ(shN)
13
+ * updateTexture {boolean} - 頂点の情報が更新されたのでテクスチャを更新する、を意味するフラグ
14
+ * updateOrder {boolean} - 深度情報が更新されたのでソートを行う、を意味するフラグ
15
+ * usingSphericalHarmonics {boolean} - 交流成分を利用するかどうか
16
+ * collision {iCollisionTarget} - 衝突判定用のデータ構造(単体または配列)
17
+ *
18
+ * ## post
19
+ * updateIndex {boolean} - 並び順を更新したことを意味するフラグ
20
+ * depthIndex {ArrayBufferLike} - ソートしたインデックス(SharedArrayBuffer 無効時のみ)
21
+ * generalBuffer {ArrayBufferLike} - 同期用(SharedArrayBuffer 無効時のみ)
22
+ * currentVertexCount {number} - 現在の頂点の個数
23
+ * time {number} - 並び順の更新に掛かった時間(ms)
24
+ * textureData {Uint32Array} - テクスチャを生成するためのデータ
25
+ * textureWidth {number} - テクスチャの幅
26
+ * textureHeight {number} - テクスチャの高さ
27
+ * compressed0 {Uint32Array} - 交流成分を分割して格納したデータ
28
+ * compressed1 {Uint32Array} - 交流成分を分割して格納したデータ
29
+ * compressed2 {Uint32Array} - 交流成分を分割して格納したデータ
30
+ * compressed3 {Uint32Array} - 交流成分を分割して格納したデータ
31
+ * compressedSH {number} - データ変換時、交流成分を圧縮して格納したかどうか
32
+ * updateCollision {boolean} - 衝突判定の更新があった
33
+ *
34
+ * SharedArrayBuffer が無効な場合、それぞれにメモリを保持しながらデータをコピーしつつ動作する
35
+ * SharedArrayBuffer が有効な場合はメインスレッド側と worker 側で同じメモリ領域を参照する
36
+ * | main (TypedArray view) | worker |
37
+ * | ------------------------------------------ | ---------------------|
38
+ * | this.gaussianData (Uint8Array) | currentBuffer |
39
+ * | this.gaussianIndexData (Uint32Array) | currentIndexBuffer |
40
+ * | this.gaussianOrderData (Uint16Array) | currentOrderBuffer |
41
+ * | this.gaussianGeneralData (Uint8Array) | currentGeneralBuffer |
42
+ * | this.sphericalHarmonicsData (Float32Array) | currentSHBuffer |
43
+ */
44
+ export type tCollisionType = "sphere" | "box";
45
+ export interface iSphereCollision {
46
+ radius: number;
47
+ position: number[];
48
+ scale: number[];
49
+ inverse4x4: number[];
50
+ }
51
+ export interface iBoxCollision {
52
+ width: number;
53
+ position: number[];
54
+ scale: number[];
55
+ inverse4x4: number[];
56
+ }
57
+ export interface iCollisionTarget {
58
+ type: tCollisionType;
59
+ target: iSphereCollision | iBoxCollision;
60
+ reversed?: boolean;
61
+ }
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@openheart/tavio-renderer",
3
+ "version": "2.2.9-without-wasm",
4
+ "author": "OpenHeart Inc.",
5
+ "license": "UNLICENSED",
6
+ "description": "Rendering Engine for Tavio Format 3D data",
7
+ "main": "./build/esm/index.js",
8
+ "module": "./build/esm/index.js",
9
+ "types": "./build/esm/types/module.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./build/esm/types/module.d.ts",
13
+ "import": "./build/esm/index.js",
14
+ "default": "./build/esm/index.js"
15
+ }
16
+ },
17
+ "files": [
18
+ "build/esm/**"
19
+ ],
20
+ "scripts": {
21
+ "build": "yarn clean && yarn build:wasm && yarn build:esm && yarn build:iife",
22
+ "build:esm": "vite build -c vite.config.esm.ts",
23
+ "build:iife": "vite build -c vite.config.iife.ts",
24
+ "build:wasm": "wasm/build.sh $@",
25
+ "start": "vite -c vite.config.demo.ts",
26
+ "clean": "(test -d build && rm -r build) || true",
27
+ "prepublishOnly": "cp README.md .README.md.bak && cp npm/README.md README.md",
28
+ "postpublish": "mv .README.md.bak README.md"
29
+ },
30
+ "devDependencies": {
31
+ "@lunapaint/png-codec": "^0.2.0",
32
+ "@tweakpane/core": "^2.0.4",
33
+ "@types/node": "24.8.1",
34
+ "@types/pako": "^2.0.3",
35
+ "@types/three": "^0.175.0",
36
+ "eventemitter3": "^5.0.0",
37
+ "pako": "^2.1.0",
38
+ "terser": "5.44.0",
39
+ "three": "^0.175.0",
40
+ "tweakpane": "^4.0.4",
41
+ "typescript": "^4.4.3",
42
+ "vite": "7.1.10",
43
+ "vite-plugin-dts": "4.5.4",
44
+ "vite-plugin-string": "1.2.3"
45
+ }
46
+ }