u-space 0.0.0-alpha.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.
Files changed (96) hide show
  1. package/README.md +21 -0
  2. package/dist/index.cjs +1 -0
  3. package/dist/index.js +1374 -0
  4. package/dist/plugins/atmosphere/Atmosphere.d.ts +9 -0
  5. package/dist/plugins/atmosphere/index.cjs +1 -0
  6. package/dist/plugins/atmosphere/index.d.ts +1 -0
  7. package/dist/plugins/atmosphere/index.js +15 -0
  8. package/dist/plugins/curve-movement/CurveMovement.d.ts +78 -0
  9. package/dist/plugins/curve-movement/CurveMovementCamera.d.ts +8 -0
  10. package/dist/plugins/curve-movement/CurveMovementObject.d.ts +14 -0
  11. package/dist/plugins/curve-movement/index.cjs +1 -0
  12. package/dist/plugins/curve-movement/index.d.ts +3 -0
  13. package/dist/plugins/curve-movement/index.js +153 -0
  14. package/dist/plugins/keyboard-controls/KeyboardControls.d.ts +31 -0
  15. package/dist/plugins/keyboard-controls/index.cjs +1 -0
  16. package/dist/plugins/keyboard-controls/index.d.ts +1 -0
  17. package/dist/plugins/keyboard-controls/index.js +67 -0
  18. package/dist/plugins/minimap/Minimap.d.ts +22 -0
  19. package/dist/plugins/minimap/index.cjs +1 -0
  20. package/dist/plugins/minimap/index.d.ts +1 -0
  21. package/dist/plugins/minimap/index.js +67 -0
  22. package/dist/plugins/tiles/ArcgisTilesRenderer.d.ts +14 -0
  23. package/dist/plugins/tiles/Globe.d.ts +22 -0
  24. package/dist/plugins/tiles/index.cjs +1 -0
  25. package/dist/plugins/tiles/index.d.ts +2 -0
  26. package/dist/plugins/tiles/index.js +179 -0
  27. package/dist/plugins/tiles/plugins/TileMaterialReplacementPlugin.d.ts +11 -0
  28. package/dist/plugins/tiles/plugins/fade/FadeMaterialManager.d.ts +17 -0
  29. package/dist/plugins/tiles/plugins/fade/TilesFadePlugin.d.ts +5 -0
  30. package/dist/plugins/tiles/plugins/fade/wrapFadeNodeMaterial.d.ts +3 -0
  31. package/dist/plugins/tracking-controls/TrackingControls.d.ts +13 -0
  32. package/dist/plugins/tracking-controls/index.cjs +1 -0
  33. package/dist/plugins/tracking-controls/index.d.ts +1 -0
  34. package/dist/plugins/tracking-controls/index.js +23 -0
  35. package/dist/plugins/u-manager/Watermarker.d.ts +12 -0
  36. package/dist/plugins/u-manager/constants.d.ts +5 -0
  37. package/dist/plugins/u-manager/index.cjs +86 -0
  38. package/dist/plugins/u-manager/index.d.ts +6 -0
  39. package/dist/plugins/u-manager/index.js +20877 -0
  40. package/dist/plugins/u-manager/license/decryptUtils.d.ts +5 -0
  41. package/dist/plugins/u-manager/loaders/AnimationsLoader.d.ts +59 -0
  42. package/dist/plugins/u-manager/loaders/BaseFileLoader.d.ts +5 -0
  43. package/dist/plugins/u-manager/loaders/PropertiesLoader.d.ts +12 -0
  44. package/dist/plugins/u-manager/loaders/SceneLoader.d.ts +15 -0
  45. package/dist/plugins/u-manager/loaders/TopologiesLoader.d.ts +10 -0
  46. package/dist/plugins/u-manager/loaders/VisionsLoader.d.ts +26 -0
  47. package/dist/plugins/u-manager/types.d.ts +84 -0
  48. package/dist/src/animations/Tween.d.ts +20 -0
  49. package/dist/src/animations/index.d.ts +1 -0
  50. package/dist/src/effects/MaterialEffects.d.ts +10 -0
  51. package/dist/src/effects/TSLEffects.d.ts +24 -0
  52. package/dist/src/effects/index.d.ts +2 -0
  53. package/dist/src/index.d.ts +9 -0
  54. package/dist/src/interactions/InteractionEvent.d.ts +39 -0
  55. package/dist/src/interactions/InteractionManager.d.ts +55 -0
  56. package/dist/src/interactions/index.d.ts +2 -0
  57. package/dist/src/interfaces/base.d.ts +11 -0
  58. package/dist/src/interfaces/index.d.ts +1 -0
  59. package/dist/src/loaders/ModelLoaderManager.d.ts +40 -0
  60. package/dist/src/loaders/SBMLoader.d.ts +6 -0
  61. package/dist/src/loaders/SBMUtils.d.ts +5 -0
  62. package/dist/src/loaders/SBMXLoader.d.ts +6 -0
  63. package/dist/src/loaders/TextureLoaderManager.d.ts +11 -0
  64. package/dist/src/loaders/index.d.ts +4 -0
  65. package/dist/src/managers/ObjectManager.d.ts +60 -0
  66. package/dist/src/managers/index.d.ts +1 -0
  67. package/dist/src/objects/BaseGroup.d.ts +8 -0
  68. package/dist/src/objects/BaseMesh.d.ts +8 -0
  69. package/dist/src/objects/BaseSprite.d.ts +8 -0
  70. package/dist/src/objects/CircleMesh.d.ts +17 -0
  71. package/dist/src/objects/ExtrudeMesh.d.ts +17 -0
  72. package/dist/src/objects/Model.d.ts +17 -0
  73. package/dist/src/objects/ObjectUtils.d.ts +4 -0
  74. package/dist/src/objects/PlaneMesh.d.ts +17 -0
  75. package/dist/src/objects/Poi.d.ts +38 -0
  76. package/dist/src/objects/ShapeMesh.d.ts +17 -0
  77. package/dist/src/objects/SphereMesh.d.ts +20 -0
  78. package/dist/src/objects/Topology.d.ts +64 -0
  79. package/dist/src/objects/TubeMesh.d.ts +18 -0
  80. package/dist/src/objects/index.d.ts +13 -0
  81. package/dist/src/types.d.ts +1 -0
  82. package/dist/src/viewers/CameraControls.d.ts +19 -0
  83. package/dist/src/viewers/Info.d.ts +18 -0
  84. package/dist/src/viewers/RenderPipeline.d.ts +17 -0
  85. package/dist/src/viewers/RoomEnvironment.d.ts +11 -0
  86. package/dist/src/viewers/Viewer.d.ts +59 -0
  87. package/dist/src/viewers/ViewerHelper.d.ts +12 -0
  88. package/dist/src/viewers/index.d.ts +3 -0
  89. package/docs/api-interactions.md +64 -0
  90. package/docs/api-managers.md +54 -0
  91. package/docs/api-objects.md +65 -0
  92. package/docs/api-plugins.md +103 -0
  93. package/docs/api-viewer.md +84 -0
  94. package/docs/examples-guide.md +48 -0
  95. package/docs/getting-started.md +126 -0
  96. package/package.json +60 -0
@@ -0,0 +1,84 @@
1
+ # Viewer API
2
+
3
+ The `Viewer` is the core class of `u-space`. It encapsulates the WebGPU Renderer, Scene, Camera, Controls, and various managers into an easy-to-use interface.
4
+
5
+ ## Constructor
6
+
7
+ ```typescript
8
+ new Viewer(options: ViewerOptions)
9
+ ```
10
+
11
+ ### `ViewerOptions`
12
+
13
+ | Property | Type | Required | Description |
14
+ | :---------------- | :------------------------ | :------- | :-------------------------------------------------------------------------------------------------------------------- |
15
+ | `el` | `HTMLElement` | Yes | The DOM element where the WebGPURenderer's canvas will be injected. |
16
+ | `rendererOptions` | `WebGLRendererParameters` | No | Options passed directly to the underlying `WebGPURenderer`. By default, it uses high-performance settings for WebGPU. |
17
+
18
+ ## Properties
19
+
20
+ The `Viewer` instance exposes several core Three.js and `u-space` components.
21
+
22
+ | Property | Type | Description |
23
+ | :------------------- | :------------------------------------------ | :---------------------------------------------------------------------------------------------------------------------- |
24
+ | `el` | `HTMLElement` | The container element. |
25
+ | `renderer` | `WebGPURenderer` | The underlying WebGPU renderer instance. |
26
+ | `scene` | `Scene` | The main Three.js scene. |
27
+ | `camera` | `PerspectiveCamera` \| `OrthographicCamera` | The active camera. |
28
+ | `controls` | `CameraControls` | Camera controls (powered by `camera-controls` library). |
29
+ | `interactionManager` | `InteractionManager` | Manages pointer events and raycasting on objects. |
30
+ | `objectManager` | `ObjectManager` | A utility for registering and retrieving objects by ID or name. |
31
+ | `frameloop` | `'always'` \| `'demand'` | Sets the rendering mode. Default is `'demand'` (render only when required). Set to `'always'` for continuous rendering. |
32
+
33
+ ## Methods
34
+
35
+ ### `init()`
36
+
37
+ Initializes the renderer asynchronously. This must be called if you need to ensure the renderer (like setting up environments or plugins) is fully ready.
38
+
39
+ ```typescript
40
+ await viewer.init();
41
+ ```
42
+
43
+ ### `render(frame?: number)`
44
+
45
+ Requests a render frame. In `'demand'` frameloop mode, this must be called whenever the scene changes visually to update the canvas. `frame` specifies how many frames to render.
46
+
47
+ ```typescript
48
+ viewer.render();
49
+ ```
50
+
51
+ ### `setCamera(camera: PerspectiveCamera | OrthographicCamera)`
52
+
53
+ Sets a custom camera for the viewer and automatically updates the controls and interaction manager to use it.
54
+
55
+ ```typescript
56
+ const customCamera = new PerspectiveCamera(75, width / height, 0.1, 1000);
57
+ viewer.setCamera(customCamera);
58
+ ```
59
+
60
+ ### `setCameraByType(type: 'perspective' | 'orthographic')`
61
+
62
+ Convenience method to switch the camera type while maintaining the viewer context.
63
+
64
+ ```typescript
65
+ viewer.setCameraByType('orthographic');
66
+ ```
67
+
68
+ ### `dispose()`
69
+
70
+ Cleans up the viewer, removing the canvas from the DOM, removing event listeners, and disposing of the renderer and environment maps to prevent memory leaks.
71
+
72
+ ```typescript
73
+ viewer.dispose();
74
+ ```
75
+
76
+ ## Events
77
+
78
+ The viewer extends `EventDispatcher` and fires the following events:
79
+
80
+ - `beforeControlsUpdate`: Fired before `CameraControls` update. Emitter provides `{ time: number }`.
81
+ - `afterControlsUpdate`: Fired after `CameraControls` update. Emitter provides `{ time: number }`.
82
+ - `beforeRender`: Fired immediately before `renderer.render` is called. Emitter provides `{ time: number }`.
83
+ - `afterRender`: Fired immediately after `renderer.render` completes. Emitter provides `{ time: number }`.
84
+ - `cameraChange`: Fired when `setCamera` is called. Emitter provides `{ camera: Camera }`.
@@ -0,0 +1,48 @@
1
+ # Examples Guide
2
+
3
+ `u-space` contains an extensive `examples/` directory that demonstrates the engine's capabilities. Below are a few key examples and what they teach you about the system.
4
+
5
+ ## 1. `demo01.html`: Basic Setup & Interactivity
6
+
7
+ This example demonstrates the absolute bare-minimum setup required to get a 3D scene rendering via WebGPU, as covered in the [Getting Started](./getting-started.md) guide.
8
+
9
+ ### Key Takeaways:
10
+
11
+ - Injecting the `Viewer` into a DOM element.
12
+ - Setting the scene background using WebGPU `Color`.
13
+ - Adding primitive geometries (like `BoxGeometry`).
14
+ - Enabling global interaction via `viewer.interactionManager.pointerMoveEventsEnabled`.
15
+ - Attaching DOM-style event listeners (`click`, `pointerenter`, `pointerleave`) natively to 3D meshes.
16
+
17
+ ## 2. `test_loader.html`: Model Caching Mechanics
18
+
19
+ This example dives deep into the `u-space` Model Loader pipeline and explains the differences between runtime cache and browser persistent cache.
20
+
21
+ ### Key Takeaways:
22
+
23
+ - Utilizing the global `Model` class to load `.glb` files asynchronously via `Model.prototype.loadAsync()`.
24
+ - Demystifying `cache: true` (which retains the model node in RAM for instant cloning/instantiation).
25
+ - Demystifying `persistent: true` (which uses the Service Worker / Cache Storage API to cache the actual network request bytes).
26
+ - Demonstrates how to register these loaded asynchronous assets into the `viewer.objectManager` securely.
27
+ - Provides examples on programmatically flushing the caches using `Model.clearMemoryCache()` and `Model.clearPersistentCache()`.
28
+
29
+ ## 3. `load_tiles.html`: GIS & Earth Rendering
30
+
31
+ This example uses the external `3d-tiles-renderer` peer dependency securely wrapped by a `u-space` plugin to render massive level-of-detail GIS globes.
32
+
33
+ ### Key Takeaways:
34
+
35
+ - Instantiating complex plugins (`ArcgisTilesRenderer`) dynamically passing the core viewer reference.
36
+ - Using `viewer.frameloop = 'always'` since tiles stream asynchronously and continuously update the viewport.
37
+ - Fetching specific Longitude and Latitude positions using the plugin's `invalidate(lon, lat, zoom)` method.
38
+
39
+ ## 4. `test_umanager.html`: Scene Compositions & Parsers
40
+
41
+ This robust example combines multiple tools, illustrating how to build complete applications instead of just placing single models.
42
+
43
+ ### Key Takeaways:
44
+
45
+ - Initializing multiple Plugins concurrently (minimap, tracking, keyboard-controls) and toggling their state via `.enable()` / `.disable()`.
46
+ - Streaming structured scene layouts, parsing scene descriptions (`SceneLoader`, `TopologiesLoader`).
47
+ - Working with camera animations (`VisionsLoader` and `VisionsParser`) to choreograph pre-defined flight paths securely within the scene.
48
+ - Retrieving complex Node materials and customizing WebGPU specific TSL (Three Shading Language) nodes like `TSLEffects.fluid()`.
@@ -0,0 +1,126 @@
1
+ # Getting Started with `u-space`
2
+
3
+ `u-space` is a WebGPU-ready 3D engine built on top of Three.js. This guide will show you how to set up a basic `u-space` application.
4
+
5
+ ## Installation
6
+
7
+ Ensure you have `@types/three` and `three` installed as peer dependencies. If you plan to use interactions, you might also need `camera-controls`.
8
+
9
+ ```bash
10
+ pnpm install three camera-controls
11
+ ```
12
+
13
+ ## Basic Setup
14
+
15
+ Here is a minimal example of setting up a `u-space` `Viewer` and adding an interactive object to the scene.
16
+
17
+ ### 1. HTML Structure
18
+
19
+ Create an element to house your 3D viewer.
20
+
21
+ ```html
22
+ <!DOCTYPE html>
23
+ <html lang="en">
24
+ <head>
25
+ <meta charset="UTF-8" />
26
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
27
+ <title>u-space App</title>
28
+ </head>
29
+ <body style="margin: 0">
30
+ <div id="app" style="width: 100vw; height: 100vh"></div>
31
+ <!-- Script goes here -->
32
+ </body>
33
+ </html>
34
+ ```
35
+
36
+ ### 2. Import Maps
37
+
38
+ Since `u-space` relies on Three.js WebGPU features, it's recommended to set up an import map to resolve the WebGPU build of Three.js.
39
+
40
+ ```html
41
+ <script type="importmap">
42
+ {
43
+ "imports": {
44
+ "three": "/node_modules/three/build/three.webgpu.js",
45
+ "three/webgpu": "/node_modules/three/build/three.webgpu.js",
46
+ "three/addons/": "/node_modules/three/examples/jsm/",
47
+ "camera-controls": "/node_modules/camera-controls/dist/camera-controls.module.js",
48
+ "u-space": "path/to/u-space/dist/index.js"
49
+ }
50
+ }
51
+ </script>
52
+ ```
53
+
54
+ ### 3. Initialize Viewer & Add Objects
55
+
56
+ Now, initialize the `Viewer` and add a basic Three.js object to the scene.
57
+
58
+ ```html
59
+ <script type="module">
60
+ import { Color, GridHelper, Mesh, BoxGeometry, MeshBasicMaterial } from 'three/webgpu';
61
+ import { Viewer } from 'u-space';
62
+
63
+ const app = document.getElementById('app');
64
+
65
+ // Initialize the viewer
66
+ const viewer = new Viewer({
67
+ el: app,
68
+ rendererOptions: { forceWebGL: false }, // Prefer WebGPU
69
+ });
70
+
71
+ // Set background color
72
+ viewer.scene.background = new Color(0x666666);
73
+
74
+ // Add a grid
75
+ const gridHelper = new GridHelper(10, 10);
76
+ viewer.scene.add(gridHelper);
77
+
78
+ // Add a Box
79
+ const geometry = new BoxGeometry(1, 1, 1);
80
+ const material = new MeshBasicMaterial({ color: 0xff0000 });
81
+ const box = new Mesh(geometry, material);
82
+ box.position.set(0, 0.5, 0);
83
+ viewer.scene.add(box);
84
+
85
+ // Render the scene
86
+ viewer.render();
87
+ </script>
88
+ ```
89
+
90
+ ### 4. Enable Interactions
91
+
92
+ `u-space` has a built-in `InteractionManager`. You can easily add event listeners to your 3D objects.
93
+
94
+ ```javascript
95
+ // Enable pointer move events
96
+ viewer.interactionManager.targetObjects = [];
97
+ viewer.interactionManager.pointerMoveEventsEnabled = true;
98
+
99
+ // Add click event
100
+ box.addEventListener('click', (e) => {
101
+ console.log('Clicked at:', e.event.intersect.point);
102
+ material.color.set(Math.random() * 0xffffff);
103
+ viewer.render(); // Request a new frame
104
+ });
105
+
106
+ // Add hover events
107
+ box.addEventListener('pointerenter', (e) => {
108
+ document.body.style.cursor = 'pointer';
109
+ material.color.set(0x00ff00);
110
+ viewer.render();
111
+ });
112
+
113
+ box.addEventListener('pointerleave', (e) => {
114
+ document.body.style.cursor = 'default';
115
+ material.color.set(0xff0000);
116
+ viewer.render();
117
+ });
118
+ ```
119
+
120
+ And that's it! You now have a basic `u-space` application up and running.
121
+
122
+ ## Next Steps
123
+
124
+ - Learn more about the [Viewer API](./api-viewer.md)
125
+ - Explore how to [load Models](./api-objects.md)
126
+ - Understand the [Interaction System](./api-interactions.md)
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "u-space",
3
+ "version": "0.0.0-alpha.1",
4
+ "type": "module",
5
+ "types": "dist/src/index.d.ts",
6
+ "module": "dist/index.js",
7
+ "main": "dist/index.cjs",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/src/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "require": "./dist/index.cjs"
13
+ },
14
+ "./plugins/*": "./dist/plugins/*/index.js"
15
+ },
16
+ "typesVersions": {
17
+ "*": {
18
+ "plugins/*": [
19
+ "./dist/plugins/*/index.d.ts"
20
+ ]
21
+ }
22
+ },
23
+ "files": [
24
+ "dist",
25
+ "package.json",
26
+ "README.md",
27
+ "docs"
28
+ ],
29
+ "keywords": [
30
+ "u-space",
31
+ "space",
32
+ "3d",
33
+ "webgpu",
34
+ "threejs",
35
+ "three",
36
+ "camera-controls"
37
+ ],
38
+ "devDependencies": {
39
+ "@types/node-rsa": "^1.1.4",
40
+ "cross-env": "^10.1.0",
41
+ "crypto-browserify": "^3.12.1",
42
+ "node-rsa": "^1.1.1",
43
+ "typescript": "~5.9.3",
44
+ "vite": "^7.3.1",
45
+ "vite-plugin-node-polyfills": "^0.24.0"
46
+ },
47
+ "peerDependencies": {
48
+ "3d-tiles-renderer": "^0.4.19",
49
+ "@takram/three-geospatial": "^0.6.0",
50
+ "@types/three": "^0.183.1",
51
+ "camera-controls": "^3.1.2",
52
+ "three": "^0.183.1"
53
+ },
54
+ "scripts": {
55
+ "build:dev": "vite build --mode development && tsc",
56
+ "build:u-space": "cross-env BUILD_TARGET=u-space vite build --mode development",
57
+ "build:plugins": "cross-env BUILD_TARGET=plugins vite build --mode development",
58
+ "build": "cross-env BUILD_TARGET=all vite build --mode production && tsc"
59
+ }
60
+ }