three-blocks-benchmark 0.2.0-alpha.280.g945a5d860d58

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 ADDED
@@ -0,0 +1,86 @@
1
+ # three-blocks-benchmark
2
+
3
+ ## 0.2.0-alpha.280.g945a5d860d58
4
+
5
+ - CLI: New projects return to the shell and prefer Bun for the development command.
6
+
7
+ - Devtools: Development stays available when compatible shader receipts predate a version bump.
8
+
9
+ - Devtools: Headless shader checks ignore automatic favicon misses and allow slow screenshots.
10
+
11
+ - Library: Gaussian splats now promote still scenes to the fast tile compositor automatically.
12
+
13
+ - Library: Gaussian splats now stage tile-compositor promotion to avoid frame spikes.
14
+
15
+ - Library: Gaussian splats now use faster subgroup sorting when the GPU supports it.
16
+
17
+ - Packages: Benchmarks settle each frame lane before sampling steady-state performance.
18
+
19
+ - Packages: Benchmarks now compare GaussianSplats3D under the same standard protocol.
20
+
21
+ - Website: Agent docs and llms.txt match the shipped release and cover Baked Motion format 3.
22
+
23
+ - Website: Example search now connects every showcased feature to its matching library blocks.
24
+
25
+ - Packages: Built from `945a5d860d58`.
26
+
27
+
28
+ ## 0.1.1
29
+
30
+ ### Patch Changes
31
+
32
+ - Updated dependencies [22be294]
33
+ - three-blocks@0.3.1
34
+
35
+ ## 0.1.0
36
+
37
+ ### Minor Changes
38
+
39
+ - 96be509: Packages: Splat benchmarks compare Three Blocks, Spark, and SuperSplat on canonical scenes.
40
+ - 8bd64d6: Standard suite: the Three Blocks viewer now runs the Graphdeco-faithful configuration — display-space compositing (the 3DGS training convention), classic uncompensated 0.3 screen-space dilation, reference view-Z ordering, and a half-float accumulation target resolved to the canvas once — and streams the PLY read through the library's Response-based parse API so fetch and parsing overlap. Query parameters can override every knob for local experiments; harness diagnostics now include loader phase timings and load-waterfall marks.
41
+
42
+ ### Patch Changes
43
+
44
+ - Updated dependencies [beb026f]
45
+ - Updated dependencies [967a0ee]
46
+ - Updated dependencies [967a0ee]
47
+ - Updated dependencies [96be509]
48
+ - Updated dependencies [96be509]
49
+ - Updated dependencies [967a0ee]
50
+ - Updated dependencies [96be509]
51
+ - Updated dependencies [96be509]
52
+ - Updated dependencies [96be509]
53
+ - Updated dependencies [967a0ee]
54
+ - Updated dependencies [96be509]
55
+ - Updated dependencies [967a0ee]
56
+ - Updated dependencies [beb026f]
57
+ - Updated dependencies [0c23333]
58
+ - Updated dependencies [e8e7e30]
59
+ - Updated dependencies [a59c7b8]
60
+ - Updated dependencies [beb026f]
61
+ - Updated dependencies [967a0ee]
62
+ - Updated dependencies [8bd64d6]
63
+ - Updated dependencies [a59c7b8]
64
+ - Updated dependencies [967a0ee]
65
+ - Updated dependencies [b328fab]
66
+ - Updated dependencies [0ca530e]
67
+ - Updated dependencies [beb026f]
68
+ - Updated dependencies [8bd64d6]
69
+ - Updated dependencies [e8e7e30]
70
+ - Updated dependencies [967a0ee]
71
+ - Updated dependencies [0ca530e]
72
+ - Updated dependencies [967a0ee]
73
+ - Updated dependencies [9daa49d]
74
+ - Updated dependencies [9daa49d]
75
+ - Updated dependencies [beb026f]
76
+ - Updated dependencies [9daa49d]
77
+ - Updated dependencies [967a0ee]
78
+ - Updated dependencies [967a0ee]
79
+ - Updated dependencies [74a7597]
80
+ - Updated dependencies [0c23333]
81
+ - Updated dependencies [e8e7e30]
82
+ - three-blocks@0.3.0
83
+
84
+ ## 0.0.0
85
+
86
+ - Reserved for the first public release.
package/LICENSE ADDED
@@ -0,0 +1,75 @@
1
+ Required Notice: Copyright (c) 2025-2026 ロリンジャー株式会社 (Rohlinger K.K.), doing business as Three.js Blocks (https://threejs-blocks.com)
2
+
3
+ # PolyForm Noncommercial License 1.0.0
4
+
5
+ <https://polyformproject.org/licenses/noncommercial/1.0.0>
6
+
7
+ ## Acceptance
8
+
9
+ In order to get any license under these terms, you must agree to them as both strict obligations and conditions to all your licenses.
10
+
11
+ ## Copyright License
12
+
13
+ The licensor grants you a copyright license for the software to do everything you might do with the software that would otherwise infringe the licensor's copyright in it for any permitted purpose. However, you may only distribute the software according to [Distribution License](#distribution-license) and make changes or new works based on the software according to [Changes and New Works License](#changes-and-new-works-license).
14
+
15
+ ## Distribution License
16
+
17
+ The licensor grants you an additional copyright license to distribute copies of the software. Your license to distribute covers distributing the software with changes and new works permitted by [Changes and New Works License](#changes-and-new-works-license).
18
+
19
+ ## Notices
20
+
21
+ You must ensure that anyone who gets a copy of any part of the software from you also gets a copy of these terms or the URL for them above, as well as copies of any plain-text lines beginning with `Required Notice:` that the licensor provided with the software. For example:
22
+
23
+ > Required Notice: Copyright Yoyodyne, Inc. (http://example.com)
24
+
25
+ ## Changes and New Works License
26
+
27
+ The licensor grants you an additional copyright license to make changes and new works based on the software for any permitted purpose.
28
+
29
+ ## Patent License
30
+
31
+ The licensor grants you a patent license for the software that covers patent claims the licensor can license, or becomes able to license, that you would infringe by using the software.
32
+
33
+ ## Noncommercial Purposes
34
+
35
+ Any noncommercial purpose is a permitted purpose.
36
+
37
+ ## Personal Uses
38
+
39
+ Personal use for research, experiment, and testing for the benefit of public knowledge, personal study, private entertainment, hobby projects, amateur pursuits, or religious observance, without any anticipated commercial application, is use for a permitted purpose.
40
+
41
+ ## Noncommercial Organizations
42
+
43
+ Use by any charitable organization, educational institution, public research organization, public safety or health organization, environmental protection organization, or government institution is use for a permitted purpose regardless of the source of funding or obligations resulting from the funding.
44
+
45
+ ## Fair Use
46
+
47
+ You may have "fair use" rights for the software under the law. These terms do not limit them.
48
+
49
+ ## No Other Rights
50
+
51
+ These terms do not allow you to sublicense or transfer any of your licenses to anyone else, or prevent the licensor from granting licenses to anyone else. These terms do not imply any other licenses.
52
+
53
+ ## Patent Defense
54
+
55
+ If you make any written claim that the software infringes or contributes to infringement of any patent, your patent license for the software granted under these terms ends immediately. If your company makes such a claim, your patent license ends immediately for work on behalf of your company.
56
+
57
+ ## Violations
58
+
59
+ The first time you are notified in writing that you have violated these terms, or done anything with the software not covered by your licenses, your licenses can nonetheless continue if you come into full compliance with these terms, and take practical steps to correct past violations, within 32 days of receiving notice. Otherwise, all your licenses end immediately.
60
+
61
+ ## No Liability
62
+
63
+ ***As far as the law allows, the software comes as is, without any warranty or condition, and the licensor will not be liable to you for any damages arising out of these terms or the use or nature of the software, under any kind of legal claim.***
64
+
65
+ ## Definitions
66
+
67
+ The **licensor** is the individual or entity offering these terms, and the **software** is the software the licensor makes available under these terms.
68
+
69
+ **You** refers to the individual or entity agreeing to these terms.
70
+
71
+ **Your company** is any legal entity, sole proprietorship, or other kind of organization that you work for, plus all organizations that have control over, are under the control of, or are under common control with that organization. **Control** means ownership of substantially all the assets of an entity, or the power to direct its management and policies by vote, contract, or otherwise. Control can be direct or indirect.
72
+
73
+ **Your licenses** are all the licenses granted to you for the software under these terms.
74
+
75
+ **Use** means anything you do with the software requiring one of your licenses.
package/NOTICE ADDED
@@ -0,0 +1,11 @@
1
+ Required Notice: Copyright (c) 2025-2026 ロリンジャー株式会社 (Rohlinger K.K.), doing business as Three.js Blocks (https://threejs-blocks.com)
2
+
3
+ Three.js Blocks licensing notice
4
+ ================================
5
+
6
+ This software is offered under the PolyForm Noncommercial License 1.0.0:
7
+ https://polyformproject.org/licenses/noncommercial/1.0.0/
8
+
9
+ LICENSE contains the controlling noncommercial terms. Commercial customers
10
+ receive separate rights under the agreement they accept:
11
+ https://threejs-blocks.com/license
package/README.md ADDED
@@ -0,0 +1,65 @@
1
+ # three-blocks-benchmark
2
+
3
+ Reproducible browser benchmarks for Three Blocks, Spark, and SuperSplat.
4
+ The default `standard` suite uses fixed held-out cameras from Mip-NeRF 360
5
+ Bonsai and a pinned NerfBaselines Graphdeco 30K artifact. The synthetic
6
+ `micro` suite is performance-only.
7
+
8
+ Published results and methodology:
9
+ <https://threejs-blocks.com/benchmark/gaussian>
10
+
11
+ ## Run
12
+
13
+ Install Chromium once:
14
+
15
+ ```sh
16
+ npx playwright install chromium
17
+ ```
18
+
19
+ Run the one-view standard validation from npm:
20
+
21
+ ```sh
22
+ npx three-blocks-benchmark --suite standard --quick --output ./benchmark-results
23
+ ```
24
+
25
+ Or run it with Bun:
26
+
27
+ ```sh
28
+ bunx three-blocks-benchmark --suite standard --quick --output ./benchmark-results
29
+ ```
30
+
31
+ Remove `--quick` for the publication run. Publication evidence requires headed
32
+ Chromium on a physical GPU:
33
+
34
+ ```sh
35
+ npx three-blocks-benchmark --suite standard --headed --output ./benchmark-results
36
+ ```
37
+
38
+ The standard suite range-downloads and caches only the stored PLY, selected
39
+ cameras, ground truth, upstream predictions, and provenance JSON. Use
40
+ `--cache <directory>` to choose the cache. The output directory receives local
41
+ renderer captures and `benchmark.json`; upstream and ground-truth PNGs stay in
42
+ the cache. Use `--omit-captures` for metrics-only output. Standard inputs,
43
+ references, and captures must not be redistributed without rights clearance.
44
+ The package contains no Bonsai dataset or model bytes; runtime downloads remain
45
+ subject to their upstream terms.
46
+
47
+ Run the generated performance microbenchmarks without network data:
48
+
49
+ ```sh
50
+ bunx three-blocks-benchmark --suite micro --quick --output ./micro-results
51
+ ```
52
+
53
+ Use `--report <file>` to place the JSON elsewhere and `--scene <id>` to select
54
+ a micro scene.
55
+ `--revision <value>` and `--dirty` add optional repository metadata; neither
56
+ Git nor a checkout is required.
57
+
58
+ The CLI uses headed Chromium by default on macOS so WebGPU captures reach the
59
+ physical GPU. `--headless` is available where the browser exposes a working
60
+ WebGPU adapter in headless mode.
61
+
62
+ Standard reports contain neutral PSNR and dm_pix-compatible SSIM versus ground
63
+ truth. Metrics versus the pinned NerfBaselines Graphdeco 30K prediction are
64
+ separately labeled renderer conformance and only verify camera/projection
65
+ alignment. The three-view subset is not the canonical 37-view aggregate.
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/env node
2
+ import { readFile } from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ import process from 'node:process';
5
+ import { fileURLToPath } from 'node:url';
6
+ import { runBenchmark } from '../lib/run.mjs';
7
+
8
+ const packageRoot = path.resolve( path.dirname( fileURLToPath( import.meta.url ) ), '..' );
9
+ const { version } = JSON.parse( await readFile( path.join( packageRoot, 'package.json' ), 'utf8' ) );
10
+ const HELP = `three-blocks-benchmark ${version}
11
+
12
+ Usage:
13
+ three-blocks-benchmark --output <directory> [options]
14
+
15
+ Options:
16
+ --suite <standard|micro> Run canonical Bonsai quality or synthetic performance
17
+ --output <directory> Write captures and the default benchmark.json here
18
+ --cache <directory> Cache selectively downloaded standard-suite members
19
+ --report <file> Write the JSON report to a different path
20
+ --capture-url-prefix <url> Prefix capture paths stored in the report
21
+ --scene <id> Select a micro scene
22
+ --quick Use one view/scene and short measurements
23
+ --omit-captures Write metrics JSON without renderer captures
24
+ --headed Show Chromium
25
+ --headless Hide Chromium
26
+ --revision <value> Record an optional source revision
27
+ --dirty Record that the source tree had changes
28
+ --clean Record that the source tree was clean
29
+ --help Show this help
30
+ --version Print the package version
31
+ `;
32
+
33
+ function parseArgs( rawArgs ) {
34
+
35
+ const options = {};
36
+ for ( let index = 0; index < rawArgs.length; index ++ ) {
37
+
38
+ const argument = rawArgs[ index ];
39
+ if ( argument === '--quick' ) options.quick = true;
40
+ else if ( argument === '--omit-captures' ) options.omitCaptures = true;
41
+ else if ( argument === '--headed' ) options.headed = true;
42
+ else if ( argument === '--headless' ) options.headed = false;
43
+ else if ( argument === '--dirty' ) options.workingTreeDirty = true;
44
+ else if ( argument === '--clean' ) options.workingTreeDirty = false;
45
+ else if ( [ '--suite', '--output', '--cache', '--report', '--capture-url-prefix', '--scene', '--revision' ].includes( argument ) ) {
46
+
47
+ const value = rawArgs[ ++ index ];
48
+ if ( ! value || value.startsWith( '--' ) ) throw new Error( `${argument} requires a value.` );
49
+ const key = {
50
+ '--suite': 'suite',
51
+ '--output': 'output',
52
+ '--cache': 'cache',
53
+ '--report': 'report',
54
+ '--capture-url-prefix': 'captureUrlPrefix',
55
+ '--scene': 'scene',
56
+ '--revision': 'revision',
57
+ }[ argument ];
58
+ options[ key ] = value;
59
+
60
+ } else {
61
+
62
+ throw new Error( `Unknown option: ${argument}` );
63
+
64
+ }
65
+
66
+ }
67
+ if ( ! options.output ) throw new Error( '--output is required.' );
68
+ return options;
69
+
70
+ }
71
+
72
+ const args = process.argv.slice( 2 );
73
+ if ( args.includes( '--help' ) ) {
74
+
75
+ process.stdout.write( HELP );
76
+
77
+ } else if ( args.includes( '--version' ) ) {
78
+
79
+ process.stdout.write( `${version}\n` );
80
+
81
+ } else {
82
+
83
+ runBenchmark( parseArgs( args ) ).catch( error => {
84
+
85
+ console.error( error );
86
+ process.exitCode = 1;
87
+
88
+ } );
89
+
90
+ }