@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.
- package/CHANGELOG.md +36 -1
- package/README.md +245 -28
- package/package.json +46 -10
- package/src/bindings/emHdBindings.js +5 -12227
- package/src/bindings/emHdBindings.wasm +0 -0
- package/src/bindings/index.js +130 -47
- package/src/bindings/openusd-build-info.json +40 -0
- package/src/create.three.js +368 -53
- package/src/hydra/ThreeJsRenderDelegate.js +1133 -80
- package/src/plugins/index.js +1 -2
- package/src/plugins/needle.js +38 -2
- package/src/types/bindings.d.ts +296 -3
- package/src/types/create.three.d.ts +87 -7
- package/src/types/hydra.d.ts +7 -5
- package/src/types/plugins.d.ts +7 -0
- package/src/types/usd-core-bindings.d.ts +240 -0
- package/src/utils.js +3 -3
- package/src/vite/index.js +13 -1
- package/examples/index.html +0 -58
- package/examples/package-lock.json +0 -1548
- package/examples/package.json +0 -24
- package/examples/public/HttpReferences copy.usda +0 -46
- package/examples/public/HttpReferences.usda +0 -44
- package/examples/public/gingerbread/GingerbreadHouse.usda +0 -35
- package/examples/public/gingerbread/house/GingerBreadHouse.usdc +0 -0
- package/examples/public/gingerbread/house/textures/color.jpg +0 -0
- package/examples/public/gingerbread/house/textures/metallic_roughness.jpg +0 -0
- package/examples/public/gingerbread/house/textures/normal.jpg +0 -0
- package/examples/public/gingerbread/snowman/Snowman.usdc +0 -0
- package/examples/public/gingerbread/snowman/textures/color.jpg +0 -0
- package/examples/public/gingerbread/snowman/textures/metallic_roughness.jpg +0 -0
- package/examples/public/gingerbread/snowman/textures/normal.jpg +0 -0
- package/examples/public/test.usdz +0 -0
- package/examples/public/vite.svg +0 -1
- package/examples/src/fileHandling.ts +0 -256
- package/examples/src/main.ts +0 -167
- package/examples/src/three.ts +0 -140
- package/examples/src/vite-env.d.ts +0 -1
- package/examples/tsconfig.json +0 -23
- package/examples/vite.config.js +0 -21
- package/src/bindings/emHdBindings.data +0 -19331
- package/src/bindings/emHdBindings.worker.js +0 -124
package/examples/src/three.ts
DELETED
|
@@ -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" />
|
package/examples/tsconfig.json
DELETED
|
@@ -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
|
-
}
|
package/examples/vite.config.js
DELETED
|
@@ -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
|
-
});
|