@headless-three/renderer 0.0.0 → 0.1.7
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/LICENSE +21 -0
- package/README.md +201 -1
- package/dist/attributes.d.ts +8 -0
- package/dist/attributes.d.ts.map +1 -0
- package/dist/attributes.js +91 -0
- package/dist/attributes.js.map +1 -0
- package/dist/camera.d.ts +8 -0
- package/dist/camera.d.ts.map +1 -0
- package/dist/camera.js +53 -0
- package/dist/camera.js.map +1 -0
- package/dist/color.d.ts +5 -0
- package/dist/color.d.ts.map +1 -0
- package/dist/color.js +36 -0
- package/dist/color.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +72 -0
- package/dist/index.js.map +1 -0
- package/dist/lights.d.ts +5 -0
- package/dist/lights.d.ts.map +1 -0
- package/dist/lights.js +186 -0
- package/dist/lights.js.map +1 -0
- package/dist/materials.d.ts +18 -0
- package/dist/materials.d.ts.map +1 -0
- package/dist/materials.js +268 -0
- package/dist/materials.js.map +1 -0
- package/dist/math.d.ts +14 -0
- package/dist/math.d.ts.map +1 -0
- package/dist/math.js +137 -0
- package/dist/math.js.map +1 -0
- package/dist/morphs.d.ts +22 -0
- package/dist/morphs.d.ts.map +1 -0
- package/dist/morphs.js +108 -0
- package/dist/morphs.js.map +1 -0
- package/dist/scene.d.ts +3 -0
- package/dist/scene.d.ts.map +1 -0
- package/dist/scene.js +220 -0
- package/dist/scene.js.map +1 -0
- package/dist/skinning.d.ts +15 -0
- package/dist/skinning.d.ts.map +1 -0
- package/dist/skinning.js +88 -0
- package/dist/skinning.js.map +1 -0
- package/dist/types.d.ts +313 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/native.d.ts +178 -0
- package/native.js +580 -0
- package/package.json +82 -3
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"}
|