@headless-three/renderer 0.0.0 → 0.1.0

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 (49) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +201 -1
  3. package/dist/attributes.d.ts +8 -0
  4. package/dist/attributes.d.ts.map +1 -0
  5. package/dist/attributes.js +91 -0
  6. package/dist/attributes.js.map +1 -0
  7. package/dist/camera.d.ts +8 -0
  8. package/dist/camera.d.ts.map +1 -0
  9. package/dist/camera.js +53 -0
  10. package/dist/camera.js.map +1 -0
  11. package/dist/color.d.ts +5 -0
  12. package/dist/color.d.ts.map +1 -0
  13. package/dist/color.js +36 -0
  14. package/dist/color.js.map +1 -0
  15. package/dist/index.d.ts +9 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +72 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/lights.d.ts +5 -0
  20. package/dist/lights.d.ts.map +1 -0
  21. package/dist/lights.js +186 -0
  22. package/dist/lights.js.map +1 -0
  23. package/dist/materials.d.ts +18 -0
  24. package/dist/materials.d.ts.map +1 -0
  25. package/dist/materials.js +268 -0
  26. package/dist/materials.js.map +1 -0
  27. package/dist/math.d.ts +14 -0
  28. package/dist/math.d.ts.map +1 -0
  29. package/dist/math.js +137 -0
  30. package/dist/math.js.map +1 -0
  31. package/dist/morphs.d.ts +22 -0
  32. package/dist/morphs.d.ts.map +1 -0
  33. package/dist/morphs.js +108 -0
  34. package/dist/morphs.js.map +1 -0
  35. package/dist/scene.d.ts +3 -0
  36. package/dist/scene.d.ts.map +1 -0
  37. package/dist/scene.js +220 -0
  38. package/dist/scene.js.map +1 -0
  39. package/dist/skinning.d.ts +15 -0
  40. package/dist/skinning.d.ts.map +1 -0
  41. package/dist/skinning.js +88 -0
  42. package/dist/skinning.js.map +1 -0
  43. package/dist/types.d.ts +313 -0
  44. package/dist/types.d.ts.map +1 -0
  45. package/dist/types.js +4 -0
  46. package/dist/types.js.map +1 -0
  47. package/native.d.ts +178 -0
  48. package/native.js +580 -0
  49. package/package.json +83 -4
package/dist/lights.js ADDED
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractLights = extractLights;
4
+ exports.extractAmbientLight = extractAmbientLight;
5
+ exports.extractAmbientIntensity = extractAmbientIntensity;
6
+ const color_1 = require("./color");
7
+ function extractLights(scene) {
8
+ const lights = [];
9
+ visitLights(scene, lights);
10
+ return lights.length > 0 ? lights : undefined;
11
+ }
12
+ function visitLights(object, lights) {
13
+ if (!object)
14
+ return;
15
+ if (object.visible === false)
16
+ return;
17
+ if (object.isLight === true) {
18
+ const light = extractLight(object);
19
+ if (light)
20
+ lights.push(light);
21
+ }
22
+ const children = Array.isArray(object.children) ? object.children : [];
23
+ for (const child of children) {
24
+ visitLights(child, lights);
25
+ }
26
+ }
27
+ function extractLight(light) {
28
+ const color = (0, color_1.colorLikeToArray)(light.color) ?? [1, 1, 1, 1];
29
+ const intensity = Number.isFinite(light.intensity) ? light.intensity : 1;
30
+ if (light.isDirectionalLight === true) {
31
+ const pos = light.matrixWorld
32
+ ? [light.matrixWorld.elements[12], light.matrixWorld.elements[13], light.matrixWorld.elements[14]]
33
+ : [0, 10, 0];
34
+ let targetPos = [0, 0, 0];
35
+ if (light.target?.matrixWorld) {
36
+ const te = light.target.matrixWorld.elements;
37
+ targetPos = [te[12], te[13], te[14]];
38
+ }
39
+ const direction = [
40
+ targetPos[0] - pos[0],
41
+ targetPos[1] - pos[1],
42
+ targetPos[2] - pos[2],
43
+ ];
44
+ const len = Math.sqrt(direction[0] ** 2 + direction[1] ** 2 + direction[2] ** 2);
45
+ if (len > 0) {
46
+ direction[0] /= len;
47
+ direction[1] /= len;
48
+ direction[2] /= len;
49
+ }
50
+ const out = {
51
+ lightType: 'directional',
52
+ color: [color[0], color[1], color[2]],
53
+ intensity,
54
+ position: pos,
55
+ direction,
56
+ };
57
+ if (light.castShadow === true) {
58
+ const shadow = light.shadow;
59
+ const mapSize = shadow?.mapSize;
60
+ const size = Math.max(32, Math.floor(mapSize?.x ?? mapSize?.width ?? 512));
61
+ const cam = shadow?.camera;
62
+ out.castShadow = true;
63
+ out.shadowMapSize = size;
64
+ if (Number.isFinite(shadow?.bias))
65
+ out.shadowBias = shadow.bias;
66
+ if (Number.isFinite(shadow?.normalBias))
67
+ out.shadowNormalBias = shadow.normalBias;
68
+ if (cam) {
69
+ if (Number.isFinite(cam.left))
70
+ out.shadowCameraLeft = cam.left;
71
+ if (Number.isFinite(cam.right))
72
+ out.shadowCameraRight = cam.right;
73
+ if (Number.isFinite(cam.top))
74
+ out.shadowCameraTop = cam.top;
75
+ if (Number.isFinite(cam.bottom))
76
+ out.shadowCameraBottom = cam.bottom;
77
+ if (Number.isFinite(cam.near))
78
+ out.shadowCameraNear = cam.near;
79
+ if (Number.isFinite(cam.far))
80
+ out.shadowCameraFar = cam.far;
81
+ }
82
+ }
83
+ return out;
84
+ }
85
+ if (light.isPointLight === true) {
86
+ const pos = light.matrixWorld
87
+ ? [light.matrixWorld.elements[12], light.matrixWorld.elements[13], light.matrixWorld.elements[14]]
88
+ : [0, 0, 0];
89
+ return {
90
+ lightType: 'point',
91
+ color: [color[0], color[1], color[2]],
92
+ intensity,
93
+ position: pos,
94
+ distance: Number.isFinite(light.distance) ? light.distance : 0,
95
+ decay: Number.isFinite(light.decay) ? light.decay : 2,
96
+ };
97
+ }
98
+ if (light.isSpotLight === true) {
99
+ const pos = light.matrixWorld
100
+ ? [light.matrixWorld.elements[12], light.matrixWorld.elements[13], light.matrixWorld.elements[14]]
101
+ : [0, 0, 0];
102
+ let targetPos = [0, 0, 0];
103
+ if (light.target?.matrixWorld) {
104
+ const te = light.target.matrixWorld.elements;
105
+ targetPos = [te[12], te[13], te[14]];
106
+ }
107
+ const direction = [
108
+ targetPos[0] - pos[0],
109
+ targetPos[1] - pos[1],
110
+ targetPos[2] - pos[2],
111
+ ];
112
+ const len = Math.sqrt(direction[0] ** 2 + direction[1] ** 2 + direction[2] ** 2);
113
+ if (len > 0) {
114
+ direction[0] /= len;
115
+ direction[1] /= len;
116
+ direction[2] /= len;
117
+ }
118
+ return {
119
+ lightType: 'spot',
120
+ color: [color[0], color[1], color[2]],
121
+ intensity,
122
+ position: pos,
123
+ direction,
124
+ distance: Number.isFinite(light.distance) ? light.distance : 0,
125
+ decay: Number.isFinite(light.decay) ? light.decay : 2,
126
+ angle: Number.isFinite(light.angle) ? light.angle : Math.PI / 3,
127
+ penumbra: Number.isFinite(light.penumbra) ? light.penumbra : 0,
128
+ };
129
+ }
130
+ if (light.isHemisphereLight === true) {
131
+ const groundColor = (0, color_1.colorLikeToArray)(light.groundColor) ?? [0.04, 0.02, 0.0, 1];
132
+ let direction = [0, 1, 0];
133
+ if (light.matrixWorld) {
134
+ const e = light.matrixWorld.elements;
135
+ const ux = e[4], uy = e[5], uz = e[6];
136
+ const ulen = Math.sqrt(ux * ux + uy * uy + uz * uz);
137
+ if (ulen > 0) {
138
+ direction = [ux / ulen, uy / ulen, uz / ulen];
139
+ }
140
+ }
141
+ return {
142
+ lightType: 'hemisphere',
143
+ color: [color[0], color[1], color[2]],
144
+ intensity,
145
+ direction,
146
+ groundColor: [groundColor[0], groundColor[1], groundColor[2]],
147
+ };
148
+ }
149
+ // AmbientLight is handled separately
150
+ return null;
151
+ }
152
+ function extractAmbientLight(scene) {
153
+ let color = null;
154
+ visitForAmbient(scene, (light) => {
155
+ const c = (0, color_1.colorLikeToArray)(light.color) ?? [1, 1, 1, 1];
156
+ if (!color) {
157
+ color = [c[0], c[1], c[2]];
158
+ }
159
+ else {
160
+ color[0] = Math.min(1, color[0] + c[0]);
161
+ color[1] = Math.min(1, color[1] + c[1]);
162
+ color[2] = Math.min(1, color[2] + c[2]);
163
+ }
164
+ });
165
+ return color;
166
+ }
167
+ function extractAmbientIntensity(scene) {
168
+ let intensity = 0;
169
+ visitForAmbient(scene, (light) => {
170
+ intensity += Number.isFinite(light.intensity) ? light.intensity : 1;
171
+ });
172
+ return intensity > 0 ? intensity : undefined;
173
+ }
174
+ function visitForAmbient(object, callback) {
175
+ if (!object)
176
+ return;
177
+ if (object.visible === false)
178
+ return;
179
+ if (object.isAmbientLight === true)
180
+ callback(object);
181
+ const children = Array.isArray(object.children) ? object.children : [];
182
+ for (const child of children) {
183
+ visitForAmbient(child, callback);
184
+ }
185
+ }
186
+ //# sourceMappingURL=lights.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lights.js","sourceRoot":"","sources":["../api/lights.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Color4, ThreeMaterialLike, PbrProperties, TextureInfo, ThreeSceneLike } from './types';
2
+ export interface EnvironmentMapInfo {
3
+ data: Buffer;
4
+ width: number;
5
+ height: number;
6
+ intensity: number;
7
+ }
8
+ /**
9
+ * Extract environment map data from scene.environment.
10
+ * Supports DataTexture (equirectangular) with Uint8, Float16, Float32 pixel data.
11
+ * Passes raw typed-array bytes to Rust which handles format detection.
12
+ */
13
+ export declare function extractEnvironmentMap(scene: ThreeSceneLike): EnvironmentMapInfo | null;
14
+ export declare function materialForGroup(material: ThreeMaterialLike | ThreeMaterialLike[] | undefined, materialIndex: number): ThreeMaterialLike | undefined;
15
+ export declare function materialColor(material: ThreeMaterialLike | undefined): Color4;
16
+ export declare function extractPbrProperties(material: ThreeMaterialLike | undefined): PbrProperties;
17
+ export declare function extractTextureData(material: ThreeMaterialLike | undefined): TextureInfo | null;
18
+ //# sourceMappingURL=materials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"materials.d.ts","sourceRoot":"","sources":["../api/materials.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,aAAa,EAAE,WAAW,EAAoB,cAAc,EAAE,MAAM,SAAS,CAAA;AAkBtH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,kBAAkB,GAAG,IAAI,CAsEtF;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,GAAG,SAAS,EAC7D,aAAa,EAAE,MAAM,GACpB,iBAAiB,GAAG,SAAS,CAK/B;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,GAAG,MAAM,CAI7E;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,GAAG,aAAa,CAyE3F;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,GAAG,WAAW,GAAG,IAAI,CAU9F"}
@@ -0,0 +1,268 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractEnvironmentMap = extractEnvironmentMap;
4
+ exports.materialForGroup = materialForGroup;
5
+ exports.materialColor = materialColor;
6
+ exports.extractPbrProperties = extractPbrProperties;
7
+ exports.extractTextureData = extractTextureData;
8
+ const math_1 = require("./math");
9
+ const color_1 = require("./color");
10
+ // Three.js wrapping constants
11
+ const RepeatWrapping = 1000;
12
+ const MirroredRepeatWrapping = 1002;
13
+ // Three.js side constants
14
+ const FrontSide = 0;
15
+ const BackSide = 1;
16
+ const DoubleSide = 2;
17
+ // Three.js texture type constants
18
+ const UnsignedByteType = 1009;
19
+ const HalfFloatType = 1016;
20
+ const FloatType = 1015;
21
+ /**
22
+ * Extract environment map data from scene.environment.
23
+ * Supports DataTexture (equirectangular) with Uint8, Float16, Float32 pixel data.
24
+ * Passes raw typed-array bytes to Rust which handles format detection.
25
+ */
26
+ function extractEnvironmentMap(scene) {
27
+ const envTex = scene.environment;
28
+ if (!envTex)
29
+ return null;
30
+ const image = envTex.image ?? envTex.source?.data;
31
+ if (!image)
32
+ return null;
33
+ const intensity = scene.environmentIntensity ?? 1.0;
34
+ // DataTexture: { data, width, height }
35
+ if (image.data && image.width > 0 && image.height > 0) {
36
+ const texType = envTex.type ?? UnsignedByteType;
37
+ const rawData = image.data;
38
+ if (texType === HalfFloatType && rawData instanceof Uint16Array) {
39
+ // Pass raw half-float bytes — Rust ibl.rs decodes them
40
+ const channels = rawData.length / (image.width * image.height);
41
+ let buf;
42
+ if (channels === 3) {
43
+ // Expand RGB16F → RGBA16F (half=0x3C00 is 1.0 for alpha)
44
+ const pixels = image.width * image.height;
45
+ const out = new Uint16Array(pixels * 4);
46
+ for (let i = 0; i < pixels; i++) {
47
+ out[i * 4] = rawData[i * 3];
48
+ out[i * 4 + 1] = rawData[i * 3 + 1];
49
+ out[i * 4 + 2] = rawData[i * 3 + 2];
50
+ out[i * 4 + 3] = 0x3C00; // 1.0 in half-float
51
+ }
52
+ buf = Buffer.from(out.buffer, out.byteOffset, out.byteLength);
53
+ }
54
+ else {
55
+ buf = Buffer.from(rawData.buffer, rawData.byteOffset, rawData.byteLength);
56
+ }
57
+ return { data: buf, width: image.width, height: image.height, intensity };
58
+ }
59
+ if (texType === FloatType && rawData instanceof Float32Array) {
60
+ const channels = rawData.length / (image.width * image.height);
61
+ let buf;
62
+ if (channels === 3) {
63
+ const pixels = image.width * image.height;
64
+ const out = new Float32Array(pixels * 4);
65
+ for (let i = 0; i < pixels; i++) {
66
+ out[i * 4] = rawData[i * 3];
67
+ out[i * 4 + 1] = rawData[i * 3 + 1];
68
+ out[i * 4 + 2] = rawData[i * 3 + 2];
69
+ out[i * 4 + 3] = 1.0;
70
+ }
71
+ buf = Buffer.from(out.buffer, out.byteOffset, out.byteLength);
72
+ }
73
+ else {
74
+ buf = Buffer.from(rawData.buffer, rawData.byteOffset, rawData.byteLength);
75
+ }
76
+ return { data: buf, width: image.width, height: image.height, intensity };
77
+ }
78
+ // UnsignedByteType / default: convert to RGBA8
79
+ const rgba = toRgba8(rawData, image.width, image.height);
80
+ if (rgba) {
81
+ return { data: Buffer.from(rgba.buffer, rgba.byteOffset, rgba.byteLength), width: image.width, height: image.height, intensity };
82
+ }
83
+ }
84
+ // Encoded image buffer (e.g. loaded HDR encoded as PNG/EXR)
85
+ if (Buffer.isBuffer(image)) {
86
+ return { data: image, width: 0, height: 0, intensity };
87
+ }
88
+ if (image instanceof Uint8Array && !(image.width > 0)) {
89
+ return { data: Buffer.from(image.buffer, image.byteOffset, image.byteLength), width: 0, height: 0, intensity };
90
+ }
91
+ return null;
92
+ }
93
+ function materialForGroup(material, materialIndex) {
94
+ if (Array.isArray(material)) {
95
+ return material[materialIndex] ?? material[0];
96
+ }
97
+ return material;
98
+ }
99
+ function materialColor(material) {
100
+ const color = (0, color_1.colorLikeToArray)(material?.color) ?? [1, 1, 1, 1];
101
+ color[3] = (0, math_1.clamp01)(material?.opacity ?? color[3] ?? 1);
102
+ return color;
103
+ }
104
+ function extractPbrProperties(material) {
105
+ if (!material)
106
+ return {};
107
+ const props = {};
108
+ if (Number.isFinite(material.metalness)) {
109
+ props.metallic = (0, math_1.clamp01)(material.metalness);
110
+ }
111
+ if (Number.isFinite(material.roughness)) {
112
+ props.roughness = (0, math_1.clamp01)(material.roughness);
113
+ }
114
+ const emissive = (0, color_1.colorLikeToArray)(material.emissive);
115
+ if (emissive) {
116
+ props.emissive = [emissive[0], emissive[1], emissive[2]];
117
+ props.emissiveIntensity = Number.isFinite(material.emissiveIntensity) ? material.emissiveIntensity : 1;
118
+ }
119
+ const normalMapInfo = extractTextureFromSlot(material.normalMap);
120
+ if (normalMapInfo) {
121
+ props.normalMap = normalMapInfo.data;
122
+ props.normalMapWidth = normalMapInfo.width;
123
+ props.normalMapHeight = normalMapInfo.height;
124
+ }
125
+ if (material.normalScale) {
126
+ props.normalScale = [material.normalScale.x ?? 1, material.normalScale.y ?? 1];
127
+ }
128
+ const mrMapInfo = extractTextureFromSlot(material.metalnessMap ?? material.roughnessMap);
129
+ if (mrMapInfo) {
130
+ props.metallicRoughnessTexture = mrMapInfo.data;
131
+ props.metallicRoughnessTextureWidth = mrMapInfo.width;
132
+ props.metallicRoughnessTextureHeight = mrMapInfo.height;
133
+ }
134
+ const emissiveMapInfo = extractTextureFromSlot(material.emissiveMap);
135
+ if (emissiveMapInfo) {
136
+ props.emissiveMap = emissiveMapInfo.data;
137
+ props.emissiveMapWidth = emissiveMapInfo.width;
138
+ props.emissiveMapHeight = emissiveMapInfo.height;
139
+ }
140
+ const aoMapInfo = extractTextureFromSlot(material.aoMap);
141
+ if (aoMapInfo) {
142
+ props.aoMap = aoMapInfo.data;
143
+ props.aoMapWidth = aoMapInfo.width;
144
+ props.aoMapHeight = aoMapInfo.height;
145
+ props.aoMapIntensity = Number.isFinite(material.aoMapIntensity) ? material.aoMapIntensity : 1;
146
+ }
147
+ if (Number.isFinite(material.alphaTest) && material.alphaTest > 0) {
148
+ props.alphaTest = (0, math_1.clamp01)(material.alphaTest);
149
+ }
150
+ if (typeof material.transparent === 'boolean') {
151
+ props.transparent = material.transparent;
152
+ }
153
+ if (material.side === BackSide) {
154
+ props.side = 'back';
155
+ }
156
+ else if (material.side === DoubleSide) {
157
+ props.side = 'double';
158
+ }
159
+ else if (material.side === FrontSide) {
160
+ props.side = 'front';
161
+ }
162
+ // Shading model: MeshBasicMaterial is unlit, MeshLambertMaterial is diffuse-only.
163
+ // Everything else (MeshStandardMaterial / MeshPhysicalMaterial / unknown) uses the
164
+ // default PBR path.
165
+ if (material.isMeshBasicMaterial) {
166
+ props.shadingModel = 'basic';
167
+ }
168
+ else if (material.isMeshLambertMaterial) {
169
+ props.shadingModel = 'lambert';
170
+ }
171
+ return props;
172
+ }
173
+ function extractTextureData(material) {
174
+ const base = extractTextureFromSlot(material?.map);
175
+ if (!base)
176
+ return null;
177
+ const map = material.map;
178
+ return {
179
+ ...base,
180
+ wrapS: wrapModeToString(map?.wrapS),
181
+ wrapT: wrapModeToString(map?.wrapT),
182
+ };
183
+ }
184
+ function wrapModeToString(mode) {
185
+ if (mode === RepeatWrapping)
186
+ return 'repeat';
187
+ if (mode === MirroredRepeatWrapping)
188
+ return 'mirror';
189
+ return undefined; // default = clamp
190
+ }
191
+ function extractTextureFromSlot(map) {
192
+ if (!map)
193
+ return null;
194
+ const image = map.image ?? map.source?.data;
195
+ if (!image)
196
+ return null;
197
+ // DataTexture style: { data: TypedArray, width, height }
198
+ if (image.data && image.width > 0 && image.height > 0) {
199
+ const rgba = toRgba8(image.data, image.width, image.height);
200
+ if (rgba) {
201
+ return { data: Buffer.from(rgba.buffer, rgba.byteOffset, rgba.byteLength), width: image.width, height: image.height };
202
+ }
203
+ }
204
+ // Encoded image (PNG/JPEG/WebP Buffer from file loaders)
205
+ if (Buffer.isBuffer(image)) {
206
+ return { data: image, width: 0, height: 0 };
207
+ }
208
+ if (image instanceof Uint8Array && !(image.width > 0)) {
209
+ return { data: Buffer.from(image.buffer, image.byteOffset, image.byteLength), width: 0, height: 0 };
210
+ }
211
+ // ImageData (canvas-based polyfill): { data: Uint8ClampedArray, width, height }
212
+ if (image.data instanceof Uint8ClampedArray && image.width > 0 && image.height > 0) {
213
+ return {
214
+ data: Buffer.from(image.data.buffer, image.data.byteOffset, image.data.byteLength),
215
+ width: image.width,
216
+ height: image.height,
217
+ };
218
+ }
219
+ return null;
220
+ }
221
+ function toRgba8(data, width, height) {
222
+ const pixels = width * height;
223
+ if (data instanceof Uint8Array || data instanceof Uint8ClampedArray) {
224
+ if (data.length === pixels * 4)
225
+ return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
226
+ if (data.length === pixels * 3) {
227
+ const out = new Uint8Array(pixels * 4);
228
+ for (let i = 0; i < pixels; i++) {
229
+ out[i * 4] = data[i * 3];
230
+ out[i * 4 + 1] = data[i * 3 + 1];
231
+ out[i * 4 + 2] = data[i * 3 + 2];
232
+ out[i * 4 + 3] = 255;
233
+ }
234
+ return out;
235
+ }
236
+ return null;
237
+ }
238
+ if (data instanceof Float32Array || data instanceof Float64Array) {
239
+ if (data.length === pixels * 4) {
240
+ const out = new Uint8Array(pixels * 4);
241
+ for (let i = 0; i < pixels * 4; i++) {
242
+ out[i] = Math.max(0, Math.min(255, Math.round(data[i] * 255)));
243
+ }
244
+ return out;
245
+ }
246
+ if (data.length === pixels * 3) {
247
+ const out = new Uint8Array(pixels * 4);
248
+ for (let i = 0; i < pixels; i++) {
249
+ out[i * 4] = Math.max(0, Math.min(255, Math.round(data[i * 3] * 255)));
250
+ out[i * 4 + 1] = Math.max(0, Math.min(255, Math.round(data[i * 3 + 1] * 255)));
251
+ out[i * 4 + 2] = Math.max(0, Math.min(255, Math.round(data[i * 3 + 2] * 255)));
252
+ out[i * 4 + 3] = 255;
253
+ }
254
+ return out;
255
+ }
256
+ return null;
257
+ }
258
+ // Uint16Array or other numeric typed arrays — treat as 8-bit range after clamping
259
+ if (ArrayBuffer.isView(data) && data.length === pixels * 4) {
260
+ const out = new Uint8Array(pixels * 4);
261
+ for (let i = 0; i < pixels * 4; i++) {
262
+ out[i] = Math.max(0, Math.min(255, data[i]));
263
+ }
264
+ return out;
265
+ }
266
+ return null;
267
+ }
268
+ //# sourceMappingURL=materials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"materials.js","sourceRoot":"","sources":["../api/materials.ts"],"names":[],"mappings":"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"}
package/dist/math.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ import type { Mat4, ThreeMatrix4Like } from './types';
2
+ export declare const IDENTITY_4X4: Mat4;
3
+ export declare const OPENGL_TO_WGPU_CLIP: Mat4;
4
+ export declare function multiplyMatrices(a: Mat4, b: Mat4): Mat4;
5
+ export declare function invertMatrix4(m: Mat4): Mat4;
6
+ export declare function blendBoneMatrices(boneMatrices: Mat4[], boneCount: number, ji0: number, ji1: number, ji2: number, ji3: number, jw0: number, jw1: number, jw2: number, jw3: number): Mat4;
7
+ export declare function matrixElements(matrix: ThreeMatrix4Like, label: string): Mat4;
8
+ export declare function clampInteger(value: number, min: number, max: number): number;
9
+ export declare function numberOrUndefined(value: unknown): number | undefined;
10
+ export declare function isFinitePositive(value: unknown): value is number;
11
+ export declare function assertFinite(value: number, label: string): number;
12
+ export declare function areFiniteNumbers(...values: unknown[]): boolean;
13
+ export declare function clamp01(value: number): number;
14
+ //# sourceMappingURL=math.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../api/math.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAErD,eAAO,MAAM,YAAY,EAAE,IAAuD,CAAA;AAIlF,eAAO,MAAM,mBAAmB,EAAE,IAKjC,CAAA;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAYvD;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAyC3C;AAED,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,IAAI,EAAE,EACpB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAClD,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GACjD,IAAI,CA6BN;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAM5E;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAG5E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEpE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEhE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAKjE;AAED,wBAAgB,gBAAgB,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAE9D;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7C"}