@jfk-solutions/demo3d-file-format 1.8.0 → 1.10.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.
- package/README.md +225 -0
- package/dist/examples/export-embedded-viewer-standalone.html +1 -1
- package/dist/examples/three-render-smoke-standalone.html +295 -231
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/model.d.ts +1 -0
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +6 -0
- package/dist/model.js.map +1 -1
- package/dist/raw3d-animation.d.ts +63 -0
- package/dist/raw3d-animation.d.ts.map +1 -0
- package/dist/raw3d-animation.js +200 -0
- package/dist/raw3d-animation.js.map +1 -0
- package/dist/raw3d-effects.d.ts +66 -0
- package/dist/raw3d-effects.d.ts.map +1 -0
- package/dist/raw3d-effects.js +172 -0
- package/dist/raw3d-effects.js.map +1 -0
- package/dist/raw3d-skinning.d.ts +8 -0
- package/dist/raw3d-skinning.d.ts.map +1 -0
- package/dist/raw3d-skinning.js +37 -0
- package/dist/raw3d-skinning.js.map +1 -0
- package/dist/raw3d.d.ts +77 -2
- package/dist/raw3d.d.ts.map +1 -1
- package/dist/raw3d.js +103 -7
- package/dist/raw3d.js.map +1 -1
- package/dist/rigid-interpolation.d.ts +16 -0
- package/dist/rigid-interpolation.d.ts.map +1 -0
- package/dist/rigid-interpolation.js +52 -0
- package/dist/rigid-interpolation.js.map +1 -0
- package/dist/three/backend.d.ts +13 -0
- package/dist/three/backend.d.ts.map +1 -0
- package/dist/three/backend.js +9 -0
- package/dist/three/backend.js.map +1 -0
- package/dist/three/effects.d.ts +7 -0
- package/dist/three/effects.d.ts.map +1 -0
- package/dist/three/effects.js +127 -0
- package/dist/three/effects.js.map +1 -0
- package/dist/three/index.d.ts +2 -1
- package/dist/three/index.d.ts.map +1 -1
- package/dist/three/index.js +72 -14
- package/dist/three/index.js.map +1 -1
- package/dist/three/native-lighting.d.ts +5 -0
- package/dist/three/native-lighting.d.ts.map +1 -0
- package/dist/three/native-lighting.js +86 -0
- package/dist/three/native-lighting.js.map +1 -0
- package/dist/three/parallax.d.ts +5 -0
- package/dist/three/parallax.d.ts.map +1 -0
- package/dist/three/parallax.js +63 -0
- package/dist/three/parallax.js.map +1 -0
- package/dist/three/raw3d.d.ts +25 -0
- package/dist/three/raw3d.d.ts.map +1 -1
- package/dist/three/raw3d.js +404 -16
- package/dist/three/raw3d.js.map +1 -1
- package/dist/three/renderer.d.ts.map +1 -1
- package/dist/three/renderer.js +3 -0
- package/dist/three/renderer.js.map +1 -1
- package/dist/three/skinning.d.ts +11 -0
- package/dist/three/skinning.d.ts.map +1 -0
- package/dist/three/skinning.js +92 -0
- package/dist/three/skinning.js.map +1 -0
- package/dist/three/tsl.d.ts +60 -0
- package/dist/three/tsl.d.ts.map +1 -0
- package/dist/three/tsl.js +3 -0
- package/dist/three/tsl.js.map +1 -0
- package/dist/three/webgpu-native.d.ts +3 -0
- package/dist/three/webgpu-native.d.ts.map +1 -0
- package/dist/three/webgpu-native.js +58 -0
- package/dist/three/webgpu-native.js.map +1 -0
- package/dist/three/webgpu-relief.d.ts +3 -0
- package/dist/three/webgpu-relief.d.ts.map +1 -0
- package/dist/three/webgpu-relief.js +61 -0
- package/dist/three/webgpu-relief.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type * as Three from "three";
|
|
2
|
+
import type { Raw3DThreeModule } from "./raw3d.js";
|
|
3
|
+
/** Public WebGL shader hooks adapt native constant/linear/quadratic attenuation. */
|
|
4
|
+
export declare function configureRaw3DLightMaterial(material: Three.Material, three: Raw3DThreeModule): void;
|
|
5
|
+
//# sourceMappingURL=native-lighting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-lighting.d.ts","sourceRoot":"","sources":["../../src/three/native-lighting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AASnD,oFAAoF;AACpF,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAiEnG"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
const configured = new WeakSet();
|
|
2
|
+
const frames = new WeakMap();
|
|
3
|
+
/** Public WebGL shader hooks adapt native constant/linear/quadratic attenuation. */
|
|
4
|
+
export function configureRaw3DLightMaterial(material, three) {
|
|
5
|
+
if (configured.has(material) || !(material instanceof three.MeshStandardMaterial))
|
|
6
|
+
return;
|
|
7
|
+
configured.add(material);
|
|
8
|
+
const point = { value: [] }, pointNative = { value: [] };
|
|
9
|
+
const spot = { value: [] }, cone = { value: [] };
|
|
10
|
+
const compile = material.onBeforeCompile, render = material.onBeforeRender;
|
|
11
|
+
material.customProgramCacheKey = () => "raw3d-native-lighting-v1";
|
|
12
|
+
material.onBeforeRender = function (...args) {
|
|
13
|
+
render.apply(this, args);
|
|
14
|
+
const [renderer, scene, camera] = args;
|
|
15
|
+
if ("isWebGPURenderer" in renderer)
|
|
16
|
+
return;
|
|
17
|
+
const cached = frames.get(renderer);
|
|
18
|
+
if (cached?.frame === renderer.info.render.frame && cached.scene === scene && cached.camera === camera) {
|
|
19
|
+
point.value = cached.points;
|
|
20
|
+
pointNative.value = cached.pointFlags;
|
|
21
|
+
spot.value = cached.spots;
|
|
22
|
+
cone.value = cached.cones;
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const lights = [];
|
|
26
|
+
scene.traverseVisible(object => {
|
|
27
|
+
if ((object instanceof three.PointLight || object instanceof three.SpotLight) && object.layers.test(camera.layers))
|
|
28
|
+
lights.push(object);
|
|
29
|
+
});
|
|
30
|
+
// Keep the same light order as Three.js, including shadow/map priorities.
|
|
31
|
+
const priority = (light) => (light.castShadow ? 2 : 0) + (light instanceof three.SpotLight && light.map ? 1 : 0);
|
|
32
|
+
lights.sort((a, b) => priority(b) - priority(a));
|
|
33
|
+
point.value = [];
|
|
34
|
+
pointNative.value = [];
|
|
35
|
+
spot.value = [];
|
|
36
|
+
cone.value = [];
|
|
37
|
+
for (const light of lights) {
|
|
38
|
+
const state = light.userData.raw3d?.parameters;
|
|
39
|
+
const vector = state ? new three.Vector4(state.attenuationConstant, state.attenuationLinear, state.attenuationQuadratic, state.attenuationRange) : new three.Vector4();
|
|
40
|
+
if (light instanceof three.PointLight) {
|
|
41
|
+
point.value.push(vector);
|
|
42
|
+
pointNative.value.push(state ? 1 : 0);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
spot.value.push(vector);
|
|
46
|
+
cone.value.push(state ? new three.Vector4(Math.cos(state.spotlightInnerAngle / 2), Math.cos(state.spotlightOuterAngle / 2), state.spotlightFalloff, 1) : new three.Vector4());
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
frames.set(renderer, { frame: renderer.info.render.frame, scene, camera, points: point.value, pointFlags: pointNative.value, spots: spot.value, cones: cone.value });
|
|
50
|
+
};
|
|
51
|
+
material.onBeforeCompile = function (shader, renderer) {
|
|
52
|
+
compile.call(this, shader, renderer);
|
|
53
|
+
Object.assign(shader.uniforms, { raw3DPoint: point, raw3DPointNative: pointNative, raw3DSpot: spot, raw3DCone: cone });
|
|
54
|
+
shader.fragmentShader = shader.fragmentShader.replace("#include <lights_pars_begin>", `#include <lights_pars_begin>
|
|
55
|
+
float raw3DFalloff(float distance, vec4 coefficients) {
|
|
56
|
+
if (coefficients.w > 0.0 && distance > coefficients.w) return 0.0;
|
|
57
|
+
return 1.0 / max(0.000001, coefficients.x + distance*coefficients.y + distance*distance*coefficients.z);
|
|
58
|
+
}
|
|
59
|
+
#if NUM_POINT_LIGHTS > 0
|
|
60
|
+
uniform vec4 raw3DPoint[NUM_POINT_LIGHTS];
|
|
61
|
+
uniform float raw3DPointNative[NUM_POINT_LIGHTS];
|
|
62
|
+
#endif
|
|
63
|
+
#if NUM_SPOT_LIGHTS > 0
|
|
64
|
+
uniform vec4 raw3DSpot[NUM_SPOT_LIGHTS];
|
|
65
|
+
uniform vec4 raw3DCone[NUM_SPOT_LIGHTS];
|
|
66
|
+
#endif
|
|
67
|
+
`);
|
|
68
|
+
let fragment = three.ShaderChunk.lights_fragment_begin;
|
|
69
|
+
fragment = fragment.replace("getPointLightInfo( pointLight, geometryPosition, directLight );", `getPointLightInfo( pointLight, geometryPosition, directLight );
|
|
70
|
+
if (raw3DPointNative[ i ] > 0.5) {
|
|
71
|
+
directLight.color = pointLight.color * raw3DFalloff(length(pointLight.position - geometryPosition), raw3DPoint[ i ]);
|
|
72
|
+
directLight.visible = any(greaterThan(directLight.color, vec3(0.0)));
|
|
73
|
+
}`);
|
|
74
|
+
fragment = fragment.replace("getSpotLightInfo( spotLight, geometryPosition, directLight );", `getSpotLightInfo( spotLight, geometryPosition, directLight );
|
|
75
|
+
if (raw3DCone[ i ].w > 0.5) {
|
|
76
|
+
float cosine = dot(directLight.direction, spotLight.direction);
|
|
77
|
+
float width = raw3DCone[ i ].x - raw3DCone[ i ].y;
|
|
78
|
+
float factor = width > 0.000001 ? clamp((cosine - raw3DCone[ i ].y)/width, 0.0, 1.0) : step(raw3DCone[ i ].y, cosine);
|
|
79
|
+
float angular = cosine < raw3DCone[ i ].y ? 0.0 : pow(factor, max(0.000001, raw3DCone[ i ].z));
|
|
80
|
+
directLight.color = spotLight.color * angular * raw3DFalloff(length(spotLight.position-geometryPosition), raw3DSpot[ i ]);
|
|
81
|
+
directLight.visible = any(greaterThan(directLight.color, vec3(0.0)));
|
|
82
|
+
}`);
|
|
83
|
+
shader.fragmentShader = shader.fragmentShader.replace("#include <lights_fragment_begin>", fragment);
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=native-lighting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-lighting.js","sourceRoot":"","sources":["../../src/three/native-lighting.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type * as Three from "three";
|
|
2
|
+
import type { Raw3DThreeModule } from "./raw3d.js";
|
|
3
|
+
/** Layered height ray-marching with binary refinement; height is packed in the normal image. */
|
|
4
|
+
export declare function configureRaw3DRelief(source: Three.Material, three: Raw3DThreeModule): void;
|
|
5
|
+
//# sourceMappingURL=parallax.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallax.d.ts","sourceRoot":"","sources":["../../src/three/parallax.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAInD,gGAAgG;AAChG,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAuD1F"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
const configured = new WeakSet();
|
|
2
|
+
/** Layered height ray-marching with binary refinement; height is packed in the normal image. */
|
|
3
|
+
export function configureRaw3DRelief(source, three) {
|
|
4
|
+
if (!(source instanceof three.MeshStandardMaterial) || configured.has(source) || !source.normalMap)
|
|
5
|
+
return;
|
|
6
|
+
const material = source;
|
|
7
|
+
configured.add(material);
|
|
8
|
+
const channel = String(material.userData.raw3DHeightChannel ?? "a");
|
|
9
|
+
if (!["r", "g", "b", "a"].includes(channel))
|
|
10
|
+
throw new Error("A relief height channel must be r, g, b or a.");
|
|
11
|
+
const depth = { value: Number(material.userData.raw3dNormalDepth ?? 0) };
|
|
12
|
+
const height = { value: material.normalMap };
|
|
13
|
+
const compile = material.onBeforeCompile, render = material.onBeforeRender, cacheKey = material.customProgramCacheKey;
|
|
14
|
+
const previousKey = cacheKey.call(material);
|
|
15
|
+
material.customProgramCacheKey = () => `${previousKey}:raw3d-relief-${channel}`;
|
|
16
|
+
material.onBeforeRender = function (...args) {
|
|
17
|
+
render.apply(this, args);
|
|
18
|
+
depth.value = Number(material.userData.raw3dNormalDepth ?? 0);
|
|
19
|
+
height.value = material.normalMap;
|
|
20
|
+
};
|
|
21
|
+
material.onBeforeCompile = function (shader, renderer) {
|
|
22
|
+
compile.call(this, shader, renderer);
|
|
23
|
+
Object.assign(shader.uniforms, { raw3DReliefDepth: depth, raw3DReliefHeight: height });
|
|
24
|
+
shader.fragmentShader = shader.fragmentShader.replace("#include <common>", `#include <common>
|
|
25
|
+
uniform float raw3DReliefDepth;
|
|
26
|
+
uniform sampler2D raw3DReliefHeight;
|
|
27
|
+
vec2 raw3DRelief(vec2 initial, vec3 viewDirection, vec3 position) {
|
|
28
|
+
if (abs(raw3DReliefDepth) < 0.000001) return initial;
|
|
29
|
+
vec3 dx = dFdx(position), dy = dFdy(position);
|
|
30
|
+
vec2 ux = dFdx(initial), uy = dFdy(initial);
|
|
31
|
+
vec3 tangent = normalize(dx * uy.y - dy * ux.y);
|
|
32
|
+
vec3 bitangent = normalize(dy * ux.x - dx * uy.x);
|
|
33
|
+
vec3 normal = normalize(cross(dx, dy));
|
|
34
|
+
vec3 ray = vec3(dot(viewDirection, tangent), dot(viewDirection, bitangent), dot(viewDirection, normal));
|
|
35
|
+
vec2 stepUV = ray.xy / max(abs(ray.z), 0.05) * raw3DReliefDepth / 32.0;
|
|
36
|
+
vec2 current = initial, previous = initial;
|
|
37
|
+
float layer = 0.0, prior = 0.0;
|
|
38
|
+
for (int layerIndex = 0; layerIndex < 32; layerIndex++) {
|
|
39
|
+
float surface = 1.0 - textureLod(raw3DReliefHeight, current, 0.0).${channel};
|
|
40
|
+
if (layer >= surface) break;
|
|
41
|
+
previous = current;prior = layer;current -= stepUV;layer += 1.0/32.0;
|
|
42
|
+
}
|
|
43
|
+
for (int refinement = 0; refinement < 5; refinement++) {
|
|
44
|
+
vec2 middle = (current+previous)*0.5;
|
|
45
|
+
float middleDepth = (layer+prior)*0.5;
|
|
46
|
+
float surface = 1.0 - textureLod(raw3DReliefHeight, middle, 0.0).${channel};
|
|
47
|
+
if (middleDepth < surface) { previous = middle;prior = middleDepth; }
|
|
48
|
+
else { current = middle;layer = middleDepth; }
|
|
49
|
+
}
|
|
50
|
+
return (current+previous)*0.5;
|
|
51
|
+
}
|
|
52
|
+
`);
|
|
53
|
+
let map = three.ShaderChunk.map_fragment.replace(/\bvMapUv\b/g, "( vMapUv + raw3DReliefOffset )");
|
|
54
|
+
map = `vec2 raw3DReliefOffset = vec2(0.0);
|
|
55
|
+
#ifdef USE_NORMALMAP
|
|
56
|
+
raw3DReliefOffset = raw3DRelief(vNormalMapUv, normalize(vViewPosition), -vViewPosition) - vNormalMapUv;
|
|
57
|
+
#endif
|
|
58
|
+
${map}`;
|
|
59
|
+
shader.fragmentShader = shader.fragmentShader.replace("#include <map_fragment>", map);
|
|
60
|
+
shader.fragmentShader = shader.fragmentShader.replace("#include <normal_fragment_maps>", three.ShaderChunk.normal_fragment_maps.replace(/\bvNormalMapUv\b/g, "( vNormalMapUv + raw3DReliefOffset )"));
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=parallax.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallax.js","sourceRoot":"","sources":["../../src/three/parallax.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,GAAG,IAAI,OAAO,EAAkB,CAAC;AAEjD,gGAAgG;AAChG,MAAM,UAAU,oBAAoB,CAAC,MAAsB,EAAE,KAAuB;IAClF,IAAI,CAAC,CAAC,MAAM,YAAY,KAAK,CAAC,oBAAoB,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS;QAAE,OAAO;IAC3G,MAAM,QAAQ,GAAG,MAAM,CAAC;IACxB,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzB,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,IAAI,GAAG,CAAC,CAAC;IACpE,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IAC9G,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC;IACzE,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,QAAQ,CAAC,cAAc,EAAE,QAAQ,GAAG,QAAQ,CAAC,qBAAqB,CAAC;IACtH,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5C,QAAQ,CAAC,qBAAqB,GAAG,GAAG,EAAE,CAAC,GAAG,WAAW,iBAAiB,OAAO,EAAE,CAAC;IAChF,QAAQ,CAAC,cAAc,GAAG,UAAS,GAAG,IAAI;QACxC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAAA,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC;QAAA,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;IAC3H,CAAC,CAAC;IACF,QAAQ,CAAC,eAAe,GAAG,UAAS,MAAM,EAAE,QAAQ;QAClD,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC,CAAC;QACvF,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,mBAAmB,EAAE;;;;;;;;;;;;;;;8EAeD,OAAO;;;;;;;6EAOR,OAAO;;;;;;KAM/E,CAAC,CAAC;QACH,IAAI,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,gCAAgC,CAAC,CAAC;QAClG,GAAG,GAAG;;;;QAIF,GAAG,EAAE,CAAC;QACV,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;QACtF,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,iCAAiC,EAAE,KAAK,CAAC,WAAW,CAAC,oBAAoB,CAAC,OAAO,CAAC,mBAAmB,EAAE,sCAAsC,CAAC,CAAC,CAAC;IACxM,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/three/raw3d.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type * as Three from "three";
|
|
2
|
+
import type { Raw3DAnimation } from "../raw3d-animation.js";
|
|
2
3
|
import { Raw3DMesh, Raw3DPackage, Raw3DProject } from "../raw3d.js";
|
|
4
|
+
import type { Raw3DStreamableTexture } from "../raw3d.js";
|
|
3
5
|
export type Raw3DThreeModule = typeof Three;
|
|
4
6
|
export interface Raw3DThreeWarning {
|
|
5
7
|
readonly code: string;
|
|
@@ -9,6 +11,15 @@ export interface Raw3DThreeWarning {
|
|
|
9
11
|
readonly path?: string;
|
|
10
12
|
}
|
|
11
13
|
export interface Raw3DThreeOptions {
|
|
14
|
+
/** Returned textures remain caller-owned. Use seekAsync() for time-indexed frames. */
|
|
15
|
+
readonly resolveStreamTexture?: (request: {
|
|
16
|
+
readonly index: number;
|
|
17
|
+
readonly time: number;
|
|
18
|
+
readonly source?: Raw3DStreamableTexture;
|
|
19
|
+
readonly signal: AbortSignal;
|
|
20
|
+
}) => Three.Texture | undefined | Promise<Three.Texture | undefined>;
|
|
21
|
+
/** Packed height channel in normal textures; opaque alpha defaults to a flat top surface. */
|
|
22
|
+
readonly parallaxHeightChannel?: "r" | "g" | "b" | "a";
|
|
12
23
|
readonly three?: Raw3DThreeModule;
|
|
13
24
|
readonly loadThree?: () => Promise<Raw3DThreeModule>;
|
|
14
25
|
readonly onWarning?: (warning: Raw3DThreeWarning) => void;
|
|
@@ -34,5 +45,19 @@ export interface Raw3DThreeScene {
|
|
|
34
45
|
}
|
|
35
46
|
export declare function createRaw3DThreeScene(parsed: Raw3DPackage | Raw3DProject, options?: Raw3DThreeOptions): Promise<Raw3DThreeScene>;
|
|
36
47
|
export declare function createRaw3DThreeGroup(parsed: Raw3DPackage | Raw3DProject, options?: Raw3DThreeOptions): Promise<Three.Group>;
|
|
48
|
+
export interface Raw3DThreePlayback {
|
|
49
|
+
readonly group: Three.Group;
|
|
50
|
+
readonly animation: Raw3DAnimation;
|
|
51
|
+
readonly duration: number;
|
|
52
|
+
readonly state: ReturnType<Raw3DAnimation["sampleFrame"]>;
|
|
53
|
+
/** Apply an absolute simulation time. The host owns play/pause and its clock. */
|
|
54
|
+
seek(time: number): void;
|
|
55
|
+
/** Resolve external frames before applying time; false means a newer seek superseded this one. */
|
|
56
|
+
seekAsync(time: number): Promise<boolean>;
|
|
57
|
+
/** Release this playback's resources. The caller may then remove the group. */
|
|
58
|
+
dispose(): void;
|
|
59
|
+
}
|
|
60
|
+
/** Optional Three.js binding. Animation data and interpolation live in the core. */
|
|
61
|
+
export declare function createRaw3DThreePlayback(parsed: Raw3DPackage | Raw3DProject, options?: Raw3DThreeOptions): Promise<Raw3DThreePlayback>;
|
|
37
62
|
export declare function decodeRaw3DThreeGeometry(mesh: Raw3DMesh, project: Raw3DProject, three: Raw3DThreeModule): Three.BufferGeometry;
|
|
38
63
|
//# sourceMappingURL=raw3d.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raw3d.d.ts","sourceRoot":"","sources":["../../src/three/raw3d.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,EAEL,SAAS,EACT,YAAY,EACZ,YAAY,EAGb,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"raw3d.d.ts","sourceRoot":"","sources":["../../src/three/raw3d.ts"],"names":[],"mappings":"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"}
|