@lovelace_lol/embody 0.0.14 → 0.0.15
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 +29 -0
- package/dist/index.js +80 -31
- package/dist/index.js.map +1 -1
- package/dist/three/authoring.d.ts +4 -0
- package/dist/three/authoringTypes.d.ts +7 -0
- package/dist/three/editor/morphVertexPreview.d.ts +3 -2
- package/dist/three.js +80 -31
- package/dist/three.js.map +1 -1
- package/dist/wasm/README.md +29 -0
- package/dist/wasm/embody_wasm.d.ts +62 -62
- package/dist/wasm/embody_wasm_bg.wasm +0 -0
- package/dist/wasm/embody_wasm_bg.wasm.d.ts +62 -62
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -38,6 +38,26 @@ The Rust core owns:
|
|
|
38
38
|
- profile-aware screen-space gaze geometry for eye/head AU trajectories
|
|
39
39
|
- renderer-neutral model analysis and packed live frame generation
|
|
40
40
|
|
|
41
|
+
`resolveMorphMeshSelections(profile, categories, availableNames)` resolves editor
|
|
42
|
+
mesh selections in one Rust request. It returns each requested category's effective
|
|
43
|
+
category, `hasSelection` (including explicit empty arrays), resolved loaded names,
|
|
44
|
+
and unresolved configured names. Request `viseme` for speech routing. Facial
|
|
45
|
+
categories share an authored `face` selection; body and hair stay independent.
|
|
46
|
+
Exact names take precedence over legacy mesh aliases. Consumers save concrete
|
|
47
|
+
resolved names plus unresolved names when editing, so deselecting one mesh does
|
|
48
|
+
not reactivate it through a legacy alias. This query does not change the profile.
|
|
49
|
+
|
|
50
|
+
`getAUBoneBindingStates(profile, auIds)` resolves a panel's AU bone links in one
|
|
51
|
+
Rust request and returns an object keyed by AU ID. It uses the existing
|
|
52
|
+
`getAUBoneBindingState` semantics, including custom bone names, axis/range,
|
|
53
|
+
continuum opposites and explicitly cleared bindings. Its profile input contains
|
|
54
|
+
only `auToBones`, `boneNodes`, `bonePrefix`, `boneSuffix`, `suffixPattern`,
|
|
55
|
+
`compositeRotations`, `continuumPairs` and `humanoidCharacterization`.
|
|
56
|
+
The adapter omits unrelated morph/mesh configuration, authored vertices and saved
|
|
57
|
+
clips before serialization. Mesh selection edits do not invalidate these bone
|
|
58
|
+
links; hosts can cache by those bone inputs and the requested AU IDs. This is a
|
|
59
|
+
read-only authoring query, with no rig replacement or playback effects.
|
|
60
|
+
|
|
41
61
|
The host animation library (Three `AnimationMixer`, Unity Animator, etc.) owns
|
|
42
62
|
clip playback, lerping, blending, looping, seeking, and crossfades. Rust must
|
|
43
63
|
not sample or lerp clips on the hot path.
|
|
@@ -63,9 +83,18 @@ mesh visibility and material overrides when a host binds or replaces a profile.
|
|
|
63
83
|
It applies explicit `visible: false` and `visible: true` even without a material
|
|
64
84
|
entry, and restores render order, opacity, transparency, depth flags and blending
|
|
65
85
|
from `material`. Omitted fields leave the model's current values unchanged.
|
|
86
|
+
Replaying identical material values during a mapping edit leaves the material
|
|
87
|
+
version unchanged; render-order-only edits also avoid invalidating material programs.
|
|
66
88
|
Polymer calls this adapter during model binding and profile replacement; hosts
|
|
67
89
|
do not need a separate mesh-visibility replay loop.
|
|
68
90
|
|
|
91
|
+
`MorphVertexPreview` owns the editor's affected-vertex overlay and updates from
|
|
92
|
+
the existing Three scene render callback. It reuses position/color frame arrays,
|
|
93
|
+
retains samples only for the active hover, and releases old GPU attributes before
|
|
94
|
+
replacing differently sized geometry. Hiding or changing the hover clears its
|
|
95
|
+
sample cache; an explicitly empty mesh selection produces no preview. Applications
|
|
96
|
+
forward hover/show/hide events and dispose the overlay when its scene is released.
|
|
97
|
+
|
|
69
98
|
### Annotation runtime
|
|
70
99
|
|
|
71
100
|
`AnnotationRuntime` in `src/annotation_runtime/` owns the annotation behavior
|
package/dist/index.js
CHANGED
|
@@ -2267,6 +2267,7 @@ var extendCharacterConfigWithPreset = (config) => request2("profile.extendConfig
|
|
|
2267
2267
|
var extractProfileOverrides = (config) => request2("profile.extractOverrides", { config });
|
|
2268
2268
|
var mergeCharacterRegionsByName = (base, override) => request2("profile.mergeRegions", { base, override });
|
|
2269
2269
|
var getMeshNamesForAUProfile = (profile, auId) => request2("profile.getMeshNamesForAU", { profile, auId });
|
|
2270
|
+
var resolveMorphMeshSelections = (profile, categories, availableNames) => request2("profile.resolveMorphMeshSelections", { profile, categories, availableNames });
|
|
2270
2271
|
var getHumanoidSpecification = () => request2("humanoid.getSpecification");
|
|
2271
2272
|
var setAUMorphTargets = (profile, auId, side, targets) => request2("profile.setAUMorphTargets", { profile, auId, side, targets });
|
|
2272
2273
|
var setHumanoidRoleBinding = (profile, role, boneName) => request2("profile.setHumanoidRoleBinding", { profile, role, boneName });
|
|
@@ -2288,6 +2289,19 @@ var getBoneAxisBindingState = (profile, boneName, axis) => request2("bone.getAxi
|
|
|
2288
2289
|
var resolveBoneAxisChannel = (profile, boneName, axis) => request2("bone.resolveAxisChannel", { profile, boneName, axis });
|
|
2289
2290
|
var getBilateralAxisBindingState = (profile, boneName, axis) => request2("bone.getBilateralAxisState", { profile, boneName, axis });
|
|
2290
2291
|
var getAUBoneBindingState = (profile, auId) => request2("bone.getAUBindingState", { profile, auId });
|
|
2292
|
+
var getAUBoneBindingStates = (profile, auIds) => request2("bone.getAUBindingStates", {
|
|
2293
|
+
profile: {
|
|
2294
|
+
auToBones: profile.auToBones,
|
|
2295
|
+
boneNodes: profile.boneNodes,
|
|
2296
|
+
bonePrefix: profile.bonePrefix,
|
|
2297
|
+
boneSuffix: profile.boneSuffix,
|
|
2298
|
+
suffixPattern: profile.suffixPattern,
|
|
2299
|
+
compositeRotations: profile.compositeRotations,
|
|
2300
|
+
continuumPairs: profile.continuumPairs,
|
|
2301
|
+
humanoidCharacterization: profile.humanoidCharacterization
|
|
2302
|
+
},
|
|
2303
|
+
auIds
|
|
2304
|
+
});
|
|
2291
2305
|
var inferEyeControlScope = (profile, binding) => request2("bone.inferEyeScope", { profile, binding });
|
|
2292
2306
|
var inferEyeControlFamily = (binding) => request2("bone.inferEyeFamily", { binding });
|
|
2293
2307
|
var applyBoneAxisBindingUpdate = (profile, boneName, axis, update) => request2("bone.applyAxisUpdate", { profile, boneName, axis, update });
|
|
@@ -2484,16 +2498,18 @@ function withComponentTracks(clip) {
|
|
|
2484
2498
|
if (!Number.isInteger(width) || width < 1 || euler && width !== 3) throw new Error(`Invalid component track ${JSON.stringify(track.name)}.`);
|
|
2485
2499
|
expanded = true;
|
|
2486
2500
|
return Array.from({ length: width }, (_, component) => {
|
|
2487
|
-
const
|
|
2488
|
-
|
|
2489
|
-
|
|
2490
|
-
|
|
2501
|
+
const values = track.values.slice(0, track.times.length * parts);
|
|
2502
|
+
for (let sample = 0; sample < values.length; sample += 1) values[sample] = track.values[sample * width + component];
|
|
2503
|
+
const Track = track.constructor;
|
|
2504
|
+
const scalar = new Track(`${track.name}[${euler ? ["x", "y", "z"][component] : component}]`, track.times.slice(), values);
|
|
2505
|
+
scalar.createInterpolant = track.createInterpolant;
|
|
2491
2506
|
return scalar;
|
|
2492
2507
|
});
|
|
2493
2508
|
});
|
|
2494
2509
|
if (!expanded) return clip;
|
|
2495
|
-
const
|
|
2496
|
-
indexed
|
|
2510
|
+
const Clip = clip.constructor;
|
|
2511
|
+
const indexed = new Clip(clip.name, clip.duration, tracks, clip.blendMode);
|
|
2512
|
+
indexed.userData = JSON.parse(JSON.stringify(clip.userData));
|
|
2497
2513
|
return indexed;
|
|
2498
2514
|
}
|
|
2499
2515
|
function concreteTrackName(target, inspection) {
|
|
@@ -6582,7 +6598,7 @@ function getDeltaMagnitudeAtIndex(mesh, morphAttribute, index) {
|
|
|
6582
6598
|
return Math.hypot(dx, dy, dz);
|
|
6583
6599
|
}
|
|
6584
6600
|
function resolveMorphPreviewMeshes(root, morphName, meshNames) {
|
|
6585
|
-
const nameFilter = meshNames
|
|
6601
|
+
const nameFilter = meshNames ? new Set(meshNames) : null;
|
|
6586
6602
|
const meshes = [];
|
|
6587
6603
|
root.traverse((obj) => {
|
|
6588
6604
|
const mesh = obj;
|
|
@@ -6631,7 +6647,7 @@ function writePointColor(colors, offset, intensity2) {
|
|
|
6631
6647
|
colors[offset + 1] = COLOR_LOW.g + (COLOR_HIGH.g - COLOR_LOW.g) * intensity2;
|
|
6632
6648
|
colors[offset + 2] = COLOR_LOW.b + (COLOR_HIGH.b - COLOR_LOW.b) * intensity2;
|
|
6633
6649
|
}
|
|
6634
|
-
function buildMorphVertexPreviewRenderData(meshes, morphName, cache, options = {}) {
|
|
6650
|
+
function buildMorphVertexPreviewRenderData(meshes, morphName, cache, options = {}, previous = null) {
|
|
6635
6651
|
const threshold = options.threshold ?? DEFAULT_THRESHOLD;
|
|
6636
6652
|
const maxPoints = options.maxPoints ?? DEFAULT_MAX_POINTS;
|
|
6637
6653
|
const sampledMeshes = [];
|
|
@@ -6648,8 +6664,8 @@ function buildMorphVertexPreviewRenderData(meshes, morphName, cache, options = {
|
|
|
6648
6664
|
pointCount += sample.indices.length;
|
|
6649
6665
|
}
|
|
6650
6666
|
if (pointCount === 0) return null;
|
|
6651
|
-
const positions = new Float32Array(pointCount * 3);
|
|
6652
|
-
const colors = new Float32Array(pointCount * 3);
|
|
6667
|
+
const positions = previous?.positions.length === pointCount * 3 ? previous.positions : new Float32Array(pointCount * 3);
|
|
6668
|
+
const colors = previous?.colors.length === pointCount * 3 ? previous.colors : new Float32Array(pointCount * 3);
|
|
6653
6669
|
const vertex = new THREE10.Vector3();
|
|
6654
6670
|
let cursor = 0;
|
|
6655
6671
|
for (const { mesh, sample } of sampledMeshes) {
|
|
@@ -6706,6 +6722,7 @@ var MorphVertexPreview = class {
|
|
|
6706
6722
|
__publicField(this, "cache", /* @__PURE__ */ new Map());
|
|
6707
6723
|
__publicField(this, "points", null);
|
|
6708
6724
|
__publicField(this, "active", null);
|
|
6725
|
+
__publicField(this, "renderData", null);
|
|
6709
6726
|
__publicField(this, "disposed", false);
|
|
6710
6727
|
__publicField(this, "unbindRender", null);
|
|
6711
6728
|
}
|
|
@@ -6715,12 +6732,18 @@ var MorphVertexPreview = class {
|
|
|
6715
6732
|
this.hide();
|
|
6716
6733
|
return;
|
|
6717
6734
|
}
|
|
6735
|
+
if (this.active?.morphName !== morphName || this.active?.meshNames?.length !== meshNames?.length || meshNames?.some((name, index) => name !== this.active?.meshNames?.[index])) {
|
|
6736
|
+
this.cache.clear();
|
|
6737
|
+
this.renderData = null;
|
|
6738
|
+
}
|
|
6718
6739
|
this.active = { morphName, meshNames: meshNames?.slice() };
|
|
6719
6740
|
this.unbindRender ?? (this.unbindRender = bindPreviewRender(this.scene, () => this.update()));
|
|
6720
6741
|
this.update();
|
|
6721
6742
|
}
|
|
6722
6743
|
hide() {
|
|
6723
6744
|
this.active = null;
|
|
6745
|
+
this.cache.clear();
|
|
6746
|
+
this.renderData = null;
|
|
6724
6747
|
this.unbindRender?.();
|
|
6725
6748
|
this.unbindRender = null;
|
|
6726
6749
|
if (this.points) this.points.visible = false;
|
|
@@ -6758,26 +6781,31 @@ var MorphVertexPreview = class {
|
|
|
6758
6781
|
if (this.disposed || !this.active) return;
|
|
6759
6782
|
const { morphName, meshNames } = this.active;
|
|
6760
6783
|
const meshes = resolveMorphPreviewMeshes(this.scene, morphName, meshNames);
|
|
6761
|
-
const data = buildMorphVertexPreviewRenderData(meshes, morphName, this.cache, this.options);
|
|
6784
|
+
const data = buildMorphVertexPreviewRenderData(meshes, morphName, this.cache, this.options, this.renderData);
|
|
6785
|
+
this.renderData = data;
|
|
6762
6786
|
if (!data) {
|
|
6763
6787
|
if (this.points) this.points.visible = false;
|
|
6764
6788
|
return;
|
|
6765
6789
|
}
|
|
6766
6790
|
const points = this.points ?? this.createPoints();
|
|
6767
|
-
this.
|
|
6768
|
-
this.updateAttribute(points.geometry, "color", data.colors, data.pointCount);
|
|
6791
|
+
this.updateGeometry(points.geometry, data);
|
|
6769
6792
|
points.geometry.computeBoundingSphere();
|
|
6770
6793
|
points.material.size = data.pointCount > 6e3 ? 9e-3 : 0.012;
|
|
6771
6794
|
points.visible = true;
|
|
6772
6795
|
}
|
|
6773
|
-
|
|
6774
|
-
const
|
|
6775
|
-
|
|
6776
|
-
|
|
6796
|
+
updateGeometry(geometry, data) {
|
|
6797
|
+
const position = geometry.getAttribute("position");
|
|
6798
|
+
const color = geometry.getAttribute("color");
|
|
6799
|
+
if (!position || !color || position.count !== data.pointCount || color.count !== data.pointCount) {
|
|
6800
|
+
if (position || color) geometry.dispose();
|
|
6801
|
+
geometry.setAttribute("position", new THREE10.BufferAttribute(data.positions, 3));
|
|
6802
|
+
geometry.setAttribute("color", new THREE10.BufferAttribute(data.colors, 3));
|
|
6777
6803
|
return;
|
|
6778
6804
|
}
|
|
6779
|
-
|
|
6780
|
-
|
|
6805
|
+
if (position.array !== data.positions) position.array.set(data.positions);
|
|
6806
|
+
if (color.array !== data.colors) color.array.set(data.colors);
|
|
6807
|
+
position.needsUpdate = true;
|
|
6808
|
+
color.needsUpdate = true;
|
|
6781
6809
|
}
|
|
6782
6810
|
};
|
|
6783
6811
|
|
|
@@ -7033,6 +7061,16 @@ function serializeAnimationClips(model, clips, inspection) {
|
|
|
7033
7061
|
const meshIds = new Map(Array.from(inspection.meshBindings, ([id, mesh]) => [mesh, id]));
|
|
7034
7062
|
const boneIds = new Map(Array.from(inspection.boneBindings, ([id, bone]) => [bone, id]));
|
|
7035
7063
|
const objectIds = new Map(Array.from(inspection.objectBindings, ([id, object]) => [object, id]));
|
|
7064
|
+
const morphIds = /* @__PURE__ */ new Map();
|
|
7065
|
+
for (const [id, { mesh, index }] of inspection.morphBindings) {
|
|
7066
|
+
let indices = morphIds.get(mesh);
|
|
7067
|
+
if (!indices) {
|
|
7068
|
+
indices = /* @__PURE__ */ new Map();
|
|
7069
|
+
morphIds.set(mesh, indices);
|
|
7070
|
+
}
|
|
7071
|
+
if (!indices.has(index)) indices.set(index, id);
|
|
7072
|
+
}
|
|
7073
|
+
const destinations = /* @__PURE__ */ new Map();
|
|
7036
7074
|
return clips.map((clip) => {
|
|
7037
7075
|
const tracks = [];
|
|
7038
7076
|
const channelKinds = /* @__PURE__ */ new Map();
|
|
@@ -7044,7 +7082,11 @@ function serializeAnimationClips(model, clips, inspection) {
|
|
|
7044
7082
|
return id;
|
|
7045
7083
|
};
|
|
7046
7084
|
withComponentTracks(clip).tracks.forEach((track, index) => {
|
|
7047
|
-
|
|
7085
|
+
let found = destinations.get(track.name);
|
|
7086
|
+
if (found === void 0) {
|
|
7087
|
+
found = findTrackTarget(model, track);
|
|
7088
|
+
destinations.set(track.name, found);
|
|
7089
|
+
}
|
|
7048
7090
|
if (!found?.object) return;
|
|
7049
7091
|
const { parsed, object } = found;
|
|
7050
7092
|
let target = null;
|
|
@@ -7053,8 +7095,9 @@ function serializeAnimationClips(model, clips, inspection) {
|
|
|
7053
7095
|
const mesh = object;
|
|
7054
7096
|
const requested = parsed.propertyIndex;
|
|
7055
7097
|
const indexValue = typeof requested === "number" ? requested : Number.isFinite(Number(requested)) ? Number(requested) : mesh.morphTargetDictionary?.[String(requested)];
|
|
7056
|
-
|
|
7057
|
-
|
|
7098
|
+
if (indexValue === void 0) return;
|
|
7099
|
+
const morphTargetId = morphIds.get(mesh)?.get(indexValue);
|
|
7100
|
+
if (morphTargetId !== void 0) target = { kind: "morphTarget", meshId: meshIds.get(mesh), morphTargetId };
|
|
7058
7101
|
} else if (property === "visible" && object.isMesh) {
|
|
7059
7102
|
target = { kind: "meshVisibility", meshId: meshIds.get(object) };
|
|
7060
7103
|
} else {
|
|
@@ -7068,7 +7111,7 @@ function serializeAnimationClips(model, clips, inspection) {
|
|
|
7068
7111
|
const kind = target.kind === "morphTarget" ? "face" : target.kind === "boneTransform" ? "body" : "scene";
|
|
7069
7112
|
const cubic = !!track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline;
|
|
7070
7113
|
const size = track.getValueSize() / (cubic ? 3 : 1);
|
|
7071
|
-
if (!
|
|
7114
|
+
if (!track.values.every(Number.isFinite)) {
|
|
7072
7115
|
throw new Error(`Animation track ${JSON.stringify(track.name)} contains non-finite samples.`);
|
|
7073
7116
|
}
|
|
7074
7117
|
const values = cubic ? Array.from(track.times).flatMap((_, key) => Array.from(track.values.slice((key * 3 + 1) * size, (key * 3 + 2) * size))) : Array.from(track.values);
|
|
@@ -7322,13 +7365,19 @@ var ThreeFrameApplier = class {
|
|
|
7322
7365
|
applyMaterial(mesh, config) {
|
|
7323
7366
|
if (typeof config.renderOrder === "number") mesh.renderOrder = config.renderOrder;
|
|
7324
7367
|
for (const material of materials(mesh.material)) {
|
|
7325
|
-
|
|
7326
|
-
|
|
7327
|
-
|
|
7328
|
-
|
|
7329
|
-
|
|
7330
|
-
|
|
7331
|
-
|
|
7368
|
+
let changed = false;
|
|
7369
|
+
const assign = (key, value) => {
|
|
7370
|
+
if (material[key] === value) return;
|
|
7371
|
+
material[key] = value;
|
|
7372
|
+
changed = true;
|
|
7373
|
+
};
|
|
7374
|
+
if (typeof config.opacity === "number") assign("opacity", config.opacity);
|
|
7375
|
+
if (typeof config.transparent === "boolean") assign("transparent", config.transparent);
|
|
7376
|
+
else if (typeof config.opacity === "number" && config.opacity < 1) assign("transparent", true);
|
|
7377
|
+
if (typeof config.depthWrite === "boolean") assign("depthWrite", config.depthWrite);
|
|
7378
|
+
if (typeof config.depthTest === "boolean") assign("depthTest", config.depthTest);
|
|
7379
|
+
if (config.blending) assign("blending", THREE_BLENDING_MODES[config.blending]);
|
|
7380
|
+
if (changed) material.needsUpdate = true;
|
|
7332
7381
|
}
|
|
7333
7382
|
}
|
|
7334
7383
|
visitMesh(root, name, visit) {
|
|
@@ -7345,6 +7394,6 @@ var collectMorphMeshes = (root) => {
|
|
|
7345
7394
|
return meshes;
|
|
7346
7395
|
};
|
|
7347
7396
|
|
|
7348
|
-
export { BLENDING_MODES, CHARACTER_SCENE_TYPES, CHARACTER_SCENE_TYPE_IDS, ThreeAnnotationController as CameraController, CameraDOMControls, CameraDOMControls as Controls, DEFAULT_CHARACTER_LIGHTING_PRESETS, DEFAULT_CHARACTER_LIGHTING_PRESET_ID, DEFAULT_CHARACTER_LIGHTING_PRESET_IDS, DEFAULT_CHARACTER_LIGHTING_SETTINGS, DEFAULT_CHARACTER_SCENE_TYPE_ID, DEFAULT_MARKER_AUTO_HIDE_MS, DEFAULT_PREVIEW_AUTO_CLEAR_MS, Embody, HtmlAnnotationMarkers, ThreeAnnotationMarkers as Markers3D, HtmlAnnotationMarkers as MarkersHTML, MorphVertexPreview, HtmlAnnotationMarkers as OverlayAnnotationMarkers, RUNTIME_ANNOTATION_REGION_PREFIX, RustAnnotationCameraCore, SkeletonOverlay, THREE_BLENDING_MODES, ThreeAnnotationController, ThreeAnnotationMarkers, ThreeAnnotations, ThreeFrameApplier, ThreeModelInspector, ThreeNativePlaybackConnector, analyzeModel, applyAUBoneBindingUpdate, applyBilateralAxisBindingUpdate, applyBoneAxisBindingUpdate, applyCharacterModelTransform, bindModelReferencePose, boneResolutionProfile, buildBoneAuOptions, buildMappedBoneInfo, buildMorphVertexPreviewRenderData, buildMorphVertexPreviewSample, buildRegionDisplayOptions, captureModelReferencePose, classifyAuAsJointControl, collectMorphMeshes, collectSkeletonBones, computeHumanoidSkeletonTemplateRestBounds, createAnimationClipFromClipIR, createBilateralBoneAxisAu, createBoneAxisAu, createCharacterHost, createDefaultCharacterLighting, createDefaultCharacterScene, createDefaultCharacterSceneAsync, createDefaultCharacterSceneRuntime, createMarkerLifecycleRevealOptions, createMarkerVisibilityLifecycle, createRuntimeAnnotationPreviewLifecycle, createRustAnnotationCameraCore, createRustEmbodyHost, createRustEmbodyHostUnbound, createScenePlaybackFrame, createShadowPlane, createValidationSkeletonFromHumanoidTemplate, detectAnnotationLaterality, disposeCharacterModel, ensureBilateralBoneNodeKeys, ensureBoneNodeKey, extendCharacterConfigWithPreset, extendModelReferencePose, extractHumanoidSkeletonTemplateFromModel, extractModelData, extractProfileOverrides, filterCameraViewRegions, findModelRoot, findNodeKeyForBone, formatAxisDirectionLabel, formatAxisLabel, fuzzyNameMatch, getAUBoneBindingState, getAxisFromChannel, getBilateralAxisBindingState, getBoneAxisBindingState, getDefaultAnnotationLaterality, getHumanoidSkeletonTemplate, getHumanoidSkeletonTemplateBoneNames, getHumanoidSpecification, getMeshNamesForAUProfile, getModelLocalOrbitAngle, getPreset, getRuntimeAUMeshSideOffset, getRuntimeAUMorphAnchorPoint, getRuntimeAnnotationSide, getSemanticHorizontalSign, getSemanticHorizontalSignForSide, getWorldDirectionForCameraAngle, hasLeftRightMorphs, inferChiralBoneNamePair, inferEyeControlFamily, inferEyeControlScope, inferRuntimeAnnotationPreviewSide, isJointControlAuInfo, isMaxDegreesOnlyAxisBindingUpdate, isMixedAU, isRuntimeAnnotationRegionName, loadCharacterModel, mergeCharacterRegionsByName, normalizeDefaultCharacterLightingSettings, normalizeHairColorAppearance, parseCharacterModel, passesMarkerCameraAngleGate, pickContinuumAnnotationAuId, renderScenePlayback, resolveAnnotationCharacterConfig, resolveBoneAxisChannel, resolveBoneNameForNodeKey, resolveBoneNames, resolveContinuumDisplayLabel, resolveFaceCenter, resolveHumanoidCharacterization, resolveMarkerAnchorRegion, resolveMorphPreviewMeshes, resolveRegionCameraAngle, resolveRegionVisibilityCameraAngle, resolveSkeletonOverlayStartBoneName, resolveVisemeProfile, serializeAnimationClips, setAUMorphTargets, setHumanoidRoleBinding, shouldProjectMarkerAnchorToSurface, shouldUseFaceCenterForMarkerAnchor, stripConfiguredBoneAffixes, supportsRustEmbodyPreset, toWorldDirection, validateHumanoidCharacterization, validateMappings };
|
|
7397
|
+
export { BLENDING_MODES, CHARACTER_SCENE_TYPES, CHARACTER_SCENE_TYPE_IDS, ThreeAnnotationController as CameraController, CameraDOMControls, CameraDOMControls as Controls, DEFAULT_CHARACTER_LIGHTING_PRESETS, DEFAULT_CHARACTER_LIGHTING_PRESET_ID, DEFAULT_CHARACTER_LIGHTING_PRESET_IDS, DEFAULT_CHARACTER_LIGHTING_SETTINGS, DEFAULT_CHARACTER_SCENE_TYPE_ID, DEFAULT_MARKER_AUTO_HIDE_MS, DEFAULT_PREVIEW_AUTO_CLEAR_MS, Embody, HtmlAnnotationMarkers, ThreeAnnotationMarkers as Markers3D, HtmlAnnotationMarkers as MarkersHTML, MorphVertexPreview, HtmlAnnotationMarkers as OverlayAnnotationMarkers, RUNTIME_ANNOTATION_REGION_PREFIX, RustAnnotationCameraCore, SkeletonOverlay, THREE_BLENDING_MODES, ThreeAnnotationController, ThreeAnnotationMarkers, ThreeAnnotations, ThreeFrameApplier, ThreeModelInspector, ThreeNativePlaybackConnector, analyzeModel, applyAUBoneBindingUpdate, applyBilateralAxisBindingUpdate, applyBoneAxisBindingUpdate, applyCharacterModelTransform, bindModelReferencePose, boneResolutionProfile, buildBoneAuOptions, buildMappedBoneInfo, buildMorphVertexPreviewRenderData, buildMorphVertexPreviewSample, buildRegionDisplayOptions, captureModelReferencePose, classifyAuAsJointControl, collectMorphMeshes, collectSkeletonBones, computeHumanoidSkeletonTemplateRestBounds, createAnimationClipFromClipIR, createBilateralBoneAxisAu, createBoneAxisAu, createCharacterHost, createDefaultCharacterLighting, createDefaultCharacterScene, createDefaultCharacterSceneAsync, createDefaultCharacterSceneRuntime, createMarkerLifecycleRevealOptions, createMarkerVisibilityLifecycle, createRuntimeAnnotationPreviewLifecycle, createRustAnnotationCameraCore, createRustEmbodyHost, createRustEmbodyHostUnbound, createScenePlaybackFrame, createShadowPlane, createValidationSkeletonFromHumanoidTemplate, detectAnnotationLaterality, disposeCharacterModel, ensureBilateralBoneNodeKeys, ensureBoneNodeKey, extendCharacterConfigWithPreset, extendModelReferencePose, extractHumanoidSkeletonTemplateFromModel, extractModelData, extractProfileOverrides, filterCameraViewRegions, findModelRoot, findNodeKeyForBone, formatAxisDirectionLabel, formatAxisLabel, fuzzyNameMatch, getAUBoneBindingState, getAUBoneBindingStates, getAxisFromChannel, getBilateralAxisBindingState, getBoneAxisBindingState, getDefaultAnnotationLaterality, getHumanoidSkeletonTemplate, getHumanoidSkeletonTemplateBoneNames, getHumanoidSpecification, getMeshNamesForAUProfile, getModelLocalOrbitAngle, getPreset, getRuntimeAUMeshSideOffset, getRuntimeAUMorphAnchorPoint, getRuntimeAnnotationSide, getSemanticHorizontalSign, getSemanticHorizontalSignForSide, getWorldDirectionForCameraAngle, hasLeftRightMorphs, inferChiralBoneNamePair, inferEyeControlFamily, inferEyeControlScope, inferRuntimeAnnotationPreviewSide, isJointControlAuInfo, isMaxDegreesOnlyAxisBindingUpdate, isMixedAU, isRuntimeAnnotationRegionName, loadCharacterModel, mergeCharacterRegionsByName, normalizeDefaultCharacterLightingSettings, normalizeHairColorAppearance, parseCharacterModel, passesMarkerCameraAngleGate, pickContinuumAnnotationAuId, renderScenePlayback, resolveAnnotationCharacterConfig, resolveBoneAxisChannel, resolveBoneNameForNodeKey, resolveBoneNames, resolveContinuumDisplayLabel, resolveFaceCenter, resolveHumanoidCharacterization, resolveMarkerAnchorRegion, resolveMorphMeshSelections, resolveMorphPreviewMeshes, resolveRegionCameraAngle, resolveRegionVisibilityCameraAngle, resolveSkeletonOverlayStartBoneName, resolveVisemeProfile, serializeAnimationClips, setAUMorphTargets, setHumanoidRoleBinding, shouldProjectMarkerAnchorToSurface, shouldUseFaceCenterForMarkerAnchor, stripConfiguredBoneAffixes, supportsRustEmbodyPreset, toWorldDirection, validateHumanoidCharacterization, validateMappings };
|
|
7349
7398
|
//# sourceMappingURL=index.js.map
|
|
7350
7399
|
//# sourceMappingURL=index.js.map
|