@needle-tools/usd 0.0.2-next.de2e82b → 1.0.0-next.52b4773

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 (42) hide show
  1. package/CHANGELOG.md +36 -1
  2. package/README.md +245 -28
  3. package/package.json +46 -10
  4. package/src/bindings/emHdBindings.js +5 -12227
  5. package/src/bindings/emHdBindings.wasm +0 -0
  6. package/src/bindings/index.js +130 -47
  7. package/src/bindings/openusd-build-info.json +40 -0
  8. package/src/create.three.js +368 -53
  9. package/src/hydra/ThreeJsRenderDelegate.js +1133 -80
  10. package/src/plugins/index.js +1 -2
  11. package/src/plugins/needle.js +38 -2
  12. package/src/types/bindings.d.ts +296 -3
  13. package/src/types/create.three.d.ts +87 -7
  14. package/src/types/hydra.d.ts +7 -5
  15. package/src/types/plugins.d.ts +7 -0
  16. package/src/types/usd-core-bindings.d.ts +240 -0
  17. package/src/utils.js +3 -3
  18. package/src/vite/index.js +13 -1
  19. package/examples/index.html +0 -58
  20. package/examples/package-lock.json +0 -1548
  21. package/examples/package.json +0 -24
  22. package/examples/public/HttpReferences copy.usda +0 -46
  23. package/examples/public/HttpReferences.usda +0 -44
  24. package/examples/public/gingerbread/GingerbreadHouse.usda +0 -35
  25. package/examples/public/gingerbread/house/GingerBreadHouse.usdc +0 -0
  26. package/examples/public/gingerbread/house/textures/color.jpg +0 -0
  27. package/examples/public/gingerbread/house/textures/metallic_roughness.jpg +0 -0
  28. package/examples/public/gingerbread/house/textures/normal.jpg +0 -0
  29. package/examples/public/gingerbread/snowman/Snowman.usdc +0 -0
  30. package/examples/public/gingerbread/snowman/textures/color.jpg +0 -0
  31. package/examples/public/gingerbread/snowman/textures/metallic_roughness.jpg +0 -0
  32. package/examples/public/gingerbread/snowman/textures/normal.jpg +0 -0
  33. package/examples/public/test.usdz +0 -0
  34. package/examples/public/vite.svg +0 -1
  35. package/examples/src/fileHandling.ts +0 -256
  36. package/examples/src/main.ts +0 -167
  37. package/examples/src/three.ts +0 -140
  38. package/examples/src/vite-env.d.ts +0 -1
  39. package/examples/tsconfig.json +0 -23
  40. package/examples/vite.config.js +0 -21
  41. package/src/bindings/emHdBindings.data +0 -19331
  42. package/src/bindings/emHdBindings.worker.js +0 -124
@@ -1,140 +0,0 @@
1
- import { WebGLRenderer, VSMShadowMap, SRGBColorSpace, NeutralToneMapping, PerspectiveCamera, Scene, GridHelper, DirectionalLight, Clock, PMREMGenerator, Texture, Vector3, Box3, Object3D } from 'three';
2
- import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
3
- import { EXRLoader } from 'three/examples/jsm/loaders/EXRLoader.js';
4
-
5
-
6
- export function loadEnvMap(url: string, renderer: WebGLRenderer): Promise<Texture | null> {
7
- return new Promise((resolve, _reject) => {
8
- const pmremGenerator = new PMREMGenerator(renderer);
9
- pmremGenerator.compileEquirectangularShader();
10
- new EXRLoader().load(url, texture => {
11
- const envMap = pmremGenerator.fromEquirectangular(texture).texture;
12
- texture.dispose();
13
- pmremGenerator.dispose();
14
- resolve(envMap);
15
- });
16
- });
17
- }
18
-
19
-
20
- export function run(config: {
21
- renderer: WebGLRenderer,
22
- scene: Scene,
23
- onRender: (dt: number) => void
24
- }) {
25
-
26
- const camera = new PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
27
- camera.position.x = 2;
28
- camera.position.y = 2;
29
- camera.position.z = 10;
30
-
31
- const { renderer, onRender, scene } = config;
32
-
33
- renderer.setPixelRatio(window.devicePixelRatio);
34
- renderer.setSize(window.innerWidth, window.innerHeight);
35
- renderer.outputColorSpace = SRGBColorSpace;
36
- // renderer.toneMapping = AgXToneMapping;
37
- // renderer.toneMappingExposure = 1;
38
- renderer.toneMapping = NeutralToneMapping;
39
- renderer.shadowMap.enabled = false;
40
- renderer.shadowMap.type = VSMShadowMap;
41
- renderer.setClearColor(0x000000, 1); // the default
42
-
43
-
44
- window.addEventListener('resize', () => {
45
- camera.aspect = window.innerWidth / window.innerHeight;
46
- camera.updateProjectionMatrix();
47
- renderer.setSize(window.innerWidth, window.innerHeight);
48
- });
49
-
50
- document.body.appendChild(renderer.domElement);
51
- const controls = new OrbitControls(camera, renderer.domElement);
52
-
53
- // controls.enableDamping = true;
54
- // controls.dampingFactor = 0.2;
55
- controls.update();
56
-
57
- const gridhelper = new GridHelper(100, 100);
58
- scene.add(gridhelper);
59
-
60
- if (!scene.environment)
61
- scene.add(new DirectionalLight(0xffffff, 1));
62
-
63
- const clock = new Clock();
64
- function render() {
65
- const dt = clock.getDelta();
66
- requestAnimationFrame(render);
67
- controls.update(dt);
68
- onRender(dt);
69
- renderer.render(scene, camera);
70
- }
71
-
72
- window.requestAnimationFrame(render);
73
-
74
- return {
75
- fitCamera: () => {
76
- setTimeout(() => {
77
- const toRemove = [ gridhelper, ];
78
- const parents = toRemove.map(x => x.parent);
79
- toRemove.forEach(x => scene.remove(x));
80
-
81
- fitCameraToSelection(camera, controls, scene.children);
82
-
83
- toRemove.forEach((x, i) => parents[i]!.add(x));
84
- }, 0);
85
- },
86
- }
87
- }
88
-
89
- // from https://discourse.threejs.org/t/camera-zoom-to-fit-object/936/24
90
- function fitCameraToSelection(camera: PerspectiveCamera, controls: OrbitControls, selection: Object3D[], fitOffset = 1.5) {
91
- const size = new Vector3();
92
- const center = new Vector3();
93
- const box = new Box3();
94
-
95
- box.makeEmpty();
96
- for(const object of selection) {
97
- box.expandByObject(object);
98
- }
99
-
100
- box.getSize(size);
101
- box.getCenter(center );
102
-
103
- if (Number.isNaN(size.x) || Number.isNaN(size.y) || Number.isNaN(size.z) ||
104
- Number.isNaN(center.x) || Number.isNaN(center.y) || Number.isNaN(center.z)) {
105
- console.warn("Fit Camera failed: NaN values found, some objects may not have any mesh data.", selection, size);
106
- if (controls)
107
- controls.update();
108
- return;
109
- }
110
-
111
- if (!controls) {
112
- console.warn("No camera controls object found, something went wrong.");
113
- return;
114
- }
115
-
116
- const maxSize = Math.max(size.x, size.y, size.z);
117
- const fitHeightDistance = maxSize / (2 * Math.atan(Math.PI * camera.fov / 360));
118
- const fitWidthDistance = fitHeightDistance / camera.aspect;
119
- const distance = fitOffset * Math.max(fitHeightDistance, fitWidthDistance);
120
-
121
- if (distance == 0) {
122
- console.warn("Fit Camera failed: distance is 0, some objects may not have any mesh data.");
123
- return;
124
- }
125
-
126
- const direction = controls.target.clone()
127
- .sub(camera.position)
128
- .normalize()
129
- .multiplyScalar(distance);
130
-
131
- controls.maxDistance = distance * 10;
132
- controls.target.copy(center);
133
-
134
- camera.near = distance / 100;
135
- camera.far = distance * 100;
136
- camera.updateProjectionMatrix();
137
-
138
- camera.position.copy(controls.target).sub(direction);
139
- controls.update();
140
- }
@@ -1 +0,0 @@
1
- /// <reference types="vite/client" />
@@ -1,23 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2020",
4
- "useDefineForClassFields": true,
5
- "module": "ESNext",
6
- "lib": ["ES2020", "DOM", "DOM.Iterable"],
7
- "skipLibCheck": true,
8
-
9
- /* Bundler mode */
10
- "moduleResolution": "bundler",
11
- "allowImportingTsExtensions": true,
12
- "resolveJsonModule": true,
13
- "isolatedModules": true,
14
- "noEmit": true,
15
-
16
- /* Linting */
17
- "strict": true,
18
- "noUnusedLocals": true,
19
- "noUnusedParameters": true,
20
- "noFallthroughCasesInSwitch": true
21
- },
22
- "include": ["src"]
23
- }
@@ -1,21 +0,0 @@
1
- import { defineConfig } from 'vite';
2
- import { viteStaticCopy } from 'vite-plugin-static-copy';
3
-
4
-
5
- export default defineConfig({
6
- // plugins: [
7
- // viteStaticCopy({
8
- // targets: [
9
- // { src: '../src/bindings/*', dest: 'public' },
10
- // ]
11
- // }),
12
- // ],
13
- // enable COEP etc
14
- appType: 'mpa',
15
- server: {
16
- headers: {
17
- 'Cross-Origin-Embedder-Policy': 'require-corp',
18
- 'Cross-Origin-Opener-Policy': 'same-origin',
19
- }
20
- },
21
- });