three-blocks-benchmark 0.6.1 → 0.6.2
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/CHANGELOG.md +13 -0
- package/README.md +6 -1
- package/browser/harness.js +25 -1
- package/lib/run.mjs +12 -3
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# three-blocks-benchmark
|
|
2
2
|
|
|
3
|
+
## 0.6.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- ec85229: Website: Gaussian benchmarks compare raster and compute tiles with fresh Node.js measurements.
|
|
8
|
+
- Updated dependencies [ec85229]
|
|
9
|
+
- Updated dependencies [ec85229]
|
|
10
|
+
- Updated dependencies [ec85229]
|
|
11
|
+
- Updated dependencies [ec85229]
|
|
12
|
+
- Updated dependencies [ec85229]
|
|
13
|
+
- three-blocks@0.14.0
|
|
14
|
+
- @three-blocks/devtools@13.0.0
|
|
15
|
+
|
|
3
16
|
## 0.6.1
|
|
4
17
|
|
|
5
18
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -13,6 +13,11 @@ It uses full-precision depth keys and wider Gaussian support cropped at the
|
|
|
13
13
|
fragment alpha threshold. Load, frame time, memory, and image quality all use
|
|
14
14
|
that same configuration.
|
|
15
15
|
|
|
16
|
+
The default raster path and the opt-in compute-tile path have separate results.
|
|
17
|
+
Compute tiles use premultiplied alpha and cached SH refreshed on every camera
|
|
18
|
+
change, with the same quality preset and native resolution. Cold load includes
|
|
19
|
+
tile capacity validation; measured frames must use compute tiles without raster fallback.
|
|
20
|
+
|
|
16
21
|
Published results and methodology:
|
|
17
22
|
<https://threejs-blocks.com/benchmark/gaussian>
|
|
18
23
|
|
|
@@ -81,7 +86,7 @@ shared SH3 PLY; its effective degree is recorded and labeled on the website.
|
|
|
81
86
|
The Editor 3.0 column runs its verbatim projector, radix sorter and draw shaders
|
|
82
87
|
with sorted transparency and fp16 accumulation; it excludes editor UI and the
|
|
83
88
|
motion-adaptive stochastic mode. It consumes resident PLY bytes using the
|
|
84
|
-
loader's `MemoryReadFileSystem`, so
|
|
89
|
+
loader's `MemoryReadFileSystem`, so process memory includes the retained source
|
|
85
90
|
PLY. This does not reproduce the editor's file-backed memory figures. See
|
|
86
91
|
`vendor/README.md` for provenance. The viewer is a separate product and column.
|
|
87
92
|
|
package/browser/harness.js
CHANGED
|
@@ -91,9 +91,18 @@ async function createThreeBlocks( bytes ) {
|
|
|
91
91
|
// compositing (the 3DGS training convention), classic uncompensated 0.3 screen-space
|
|
92
92
|
// dilation, and reference view-Z ordering.
|
|
93
93
|
const standard = suiteId === 'standard';
|
|
94
|
+
const computeTiles = rendererId === 'three-blocks-compute';
|
|
94
95
|
const compositing = query.get( 'compositing' ) ?? ( standard ? 'display' : 'linear' );
|
|
95
96
|
const sortPrecision = query.get( 'sortprec' );
|
|
96
97
|
const parseOptions = {
|
|
98
|
+
...( computeTiles ? {
|
|
99
|
+
rendererMode: 'compute-tiles',
|
|
100
|
+
alphaMode: 'premultiplied',
|
|
101
|
+
shColorMode: 'cached',
|
|
102
|
+
shColorUpdateAngle: 0,
|
|
103
|
+
shColorUpdateDistance: 0,
|
|
104
|
+
computeTiles: { allowRasterFallback: false },
|
|
105
|
+
} : {} ),
|
|
97
106
|
enableSH: standard,
|
|
98
107
|
shDegree: query.has( 'shdegree' ) ? Number( query.get( 'shdegree' ) ) : ( standard ? 3 : 0 ),
|
|
99
108
|
coordinateSystem: 'threejs',
|
|
@@ -204,9 +213,23 @@ async function createThreeBlocks( bytes ) {
|
|
|
204
213
|
|
|
205
214
|
setThreeCamera( camera, pose );
|
|
206
215
|
await renderScene( scene3d );
|
|
216
|
+
if ( computeTiles && benchmarkPhase === 'measure' && splats.stats.rendererMode !== 'compute-tiles' ) {
|
|
217
|
+
|
|
218
|
+
throw new Error( `Compute tiles unavailable during measurement: ${splats.stats.computeTiles?.fallbackReason}` );
|
|
219
|
+
|
|
220
|
+
}
|
|
207
221
|
|
|
208
222
|
};
|
|
209
223
|
await render( benchmarkPose );
|
|
224
|
+
// Include capacity validation and compilation in cold load, before timing any frames.
|
|
225
|
+
const readyDeadline = performance.now() + 30_000;
|
|
226
|
+
while ( computeTiles && splats.stats.rendererMode !== 'compute-tiles' ) {
|
|
227
|
+
|
|
228
|
+
if ( performance.now() > readyDeadline ) throw new Error( `Compute tiles failed to initialize: ${splats.stats.computeTiles?.fallbackReason}` );
|
|
229
|
+
await new Promise( resolve => setTimeout( resolve, 0 ) );
|
|
230
|
+
await render( benchmarkPose );
|
|
231
|
+
|
|
232
|
+
}
|
|
210
233
|
loadMarks.firstFrame = performance.now();
|
|
211
234
|
return {
|
|
212
235
|
backend: 'WebGPU',
|
|
@@ -218,6 +241,7 @@ async function createThreeBlocks( bytes ) {
|
|
|
218
241
|
reportedGpuBytes: stats.gpuBytes,
|
|
219
242
|
reportedGpuBytesScope: 'Three Blocks Gaussian resources',
|
|
220
243
|
rendererMode: stats.rendererMode,
|
|
244
|
+
...( computeTiles ? { computeTiles: stats.computeTiles } : {} ),
|
|
221
245
|
loadTimings: stats.loadTimings,
|
|
222
246
|
loadMarks: { ...loadMarks },
|
|
223
247
|
};
|
|
@@ -714,7 +738,7 @@ async function measureBrowserMemory() {
|
|
|
714
738
|
async function run() {
|
|
715
739
|
|
|
716
740
|
if ( ! [ 'standard', 'micro' ].includes( suiteId ) ) throw new Error( `Unknown suite: ${suiteId}` );
|
|
717
|
-
if ( ! [ 'three-blocks', 'three-gs', 'spark', 'supersplat', 'supersplat-editor', 'gs3d', 'babylon' ].includes( rendererId ) ) {
|
|
741
|
+
if ( ! [ 'three-blocks', 'three-blocks-compute', 'three-gs', 'spark', 'supersplat', 'supersplat-editor', 'gs3d', 'babylon' ].includes( rendererId ) ) {
|
|
718
742
|
|
|
719
743
|
throw new Error( `Unknown renderer: ${rendererId}` );
|
|
720
744
|
|
package/lib/run.mjs
CHANGED
|
@@ -51,6 +51,14 @@ const RENDERERS = [
|
|
|
51
51
|
backend: 'WebGPU',
|
|
52
52
|
source: 'https://www.npmjs.com/package/three-blocks',
|
|
53
53
|
},
|
|
54
|
+
{
|
|
55
|
+
id: 'three-blocks-compute',
|
|
56
|
+
label: 'Three Blocks compute tiles',
|
|
57
|
+
profile: 'quality · compute tiles',
|
|
58
|
+
version: threeBlocksManifest.version,
|
|
59
|
+
backend: 'WebGPU',
|
|
60
|
+
source: 'https://www.npmjs.com/package/three-blocks',
|
|
61
|
+
},
|
|
54
62
|
{
|
|
55
63
|
id: 'three-gs',
|
|
56
64
|
label: 'three.js splats',
|
|
@@ -715,11 +723,12 @@ export async function runBenchmark( options ) {
|
|
|
715
723
|
},
|
|
716
724
|
limitations: suiteId === 'standard'
|
|
717
725
|
? [
|
|
718
|
-
'The three-view
|
|
726
|
+
'The three-view Node renderer subset is not the canonical 37-view aggregate.',
|
|
727
|
+
'Three Blocks is measured in separate raster and compute-tile configurations. Compute tiles use premultiplied alpha and cached SH refreshed for every camera change; both retain the quality preset and native resolution.',
|
|
719
728
|
'Frame timing serializes a complete current-camera sort and draw, including worker round trips in GaussianSplats3D and Babylon.js. It measures frame latency, not pipelined interactive FPS. Both SuperSplat columns use GPU sorting.',
|
|
720
729
|
'GaussianSplats3D 0.4.7 supports SH2 maximum; it receives the same SH3 PLY but omits the third band. Its lower feature ceiling remains reflected in the quality scores.',
|
|
721
|
-
'SuperSplat Editor 3.0 is its renderer and loader in a neutral scene, without editor UI or motion-adaptive stochastic transparency. Its resident PLY source counts towards
|
|
722
|
-
'The
|
|
730
|
+
'SuperSplat Editor 3.0 is its renderer and loader in a neutral scene, without editor UI or motion-adaptive stochastic transparency. Its resident PLY source counts towards process memory; this is not the editor file-backed memory workload.',
|
|
731
|
+
'The Three.js-based columns use three.js 0.186.0; this is a product comparison, not an isolated rendering-algorithm experiment.',
|
|
723
732
|
'Quick mode is one-view validation evidence, not publication evidence.',
|
|
724
733
|
'Standard captures and downloaded reference images are local-only unless redistribution rights are cleared.',
|
|
725
734
|
]
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "three-blocks-benchmark",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.2",
|
|
4
4
|
"description": "Reproducible Gaussian splat benchmarks for Three Blocks, three.js r186, Spark, SuperSplat Viewer and Editor 3, GaussianSplats3D, and Babylon.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"three",
|
|
@@ -51,11 +51,11 @@
|
|
|
51
51
|
"@playcanvas/splat-transform": "3.3.3",
|
|
52
52
|
"@playcanvas/supersplat-viewer": "1.31.2",
|
|
53
53
|
"@sparkjsdev/spark": "2.1.0",
|
|
54
|
-
"@three-blocks/devtools": "
|
|
54
|
+
"@three-blocks/devtools": "13.0.0",
|
|
55
55
|
"playcanvas": "2.22.0",
|
|
56
56
|
"pngjs": "7.0.0",
|
|
57
57
|
"three": "0.186.0",
|
|
58
|
-
"three-blocks": "0.
|
|
58
|
+
"three-blocks": "0.14.0",
|
|
59
59
|
"three-r186": "npm:three@0.186.0",
|
|
60
60
|
"vite": "8.1.3"
|
|
61
61
|
}
|