@lovelace_lol/loom3 1.0.26 → 1.0.28
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 +9 -0
- package/dist/index.cjs +355 -21
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +138 -224
- package/dist/index.d.ts +138 -224
- package/dist/index.js +349 -21
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -2984,6 +2984,9 @@ function resolveProfile(base, override) {
|
|
|
2984
2984
|
hairPhysics: mergeHairPhysicsConfig(base.hairPhysics, override.hairPhysics)
|
|
2985
2985
|
};
|
|
2986
2986
|
}
|
|
2987
|
+
function applyProfileToPreset(base, override) {
|
|
2988
|
+
return override ? resolveProfile(base, override) : base;
|
|
2989
|
+
}
|
|
2987
2990
|
|
|
2988
2991
|
// src/presets/bettaFish.ts
|
|
2989
2992
|
var BONES = [
|
|
@@ -3656,6 +3659,9 @@ var MESHES = {
|
|
|
3656
3659
|
morphCount: 0,
|
|
3657
3660
|
// Fish model has no morphs
|
|
3658
3661
|
material: {
|
|
3662
|
+
renderOrder: 20,
|
|
3663
|
+
transparent: true,
|
|
3664
|
+
opacity: 1,
|
|
3659
3665
|
depthWrite: true,
|
|
3660
3666
|
depthTest: true,
|
|
3661
3667
|
blending: "Normal"
|
|
@@ -3666,29 +3672,126 @@ var MESHES = {
|
|
|
3666
3672
|
category: "eye",
|
|
3667
3673
|
morphCount: 0,
|
|
3668
3674
|
material: {
|
|
3669
|
-
renderOrder:
|
|
3670
|
-
|
|
3675
|
+
renderOrder: 17,
|
|
3676
|
+
transparent: true,
|
|
3677
|
+
opacity: 1,
|
|
3678
|
+
depthWrite: true,
|
|
3679
|
+
depthTest: true,
|
|
3680
|
+
blending: "Normal"
|
|
3681
|
+
}
|
|
3682
|
+
},
|
|
3683
|
+
// Hidden helper shell from the source asset; keep it suppressed by default
|
|
3684
|
+
// so Betta does not rely on a Firestore-only mesh override.
|
|
3685
|
+
"Cube_0": {
|
|
3686
|
+
category: "body",
|
|
3687
|
+
morphCount: 0,
|
|
3688
|
+
material: {
|
|
3689
|
+
renderOrder: -20,
|
|
3690
|
+
transparent: true,
|
|
3691
|
+
opacity: 0,
|
|
3671
3692
|
depthWrite: true,
|
|
3672
3693
|
depthTest: true,
|
|
3673
3694
|
blending: "Normal"
|
|
3674
3695
|
}
|
|
3675
3696
|
}
|
|
3676
3697
|
};
|
|
3677
|
-
var
|
|
3678
|
-
|
|
3679
|
-
|
|
3680
|
-
|
|
3681
|
-
|
|
3682
|
-
|
|
3683
|
-
|
|
3684
|
-
|
|
3685
|
-
|
|
3686
|
-
|
|
3687
|
-
|
|
3688
|
-
|
|
3689
|
-
|
|
3690
|
-
|
|
3691
|
-
|
|
3698
|
+
var ANNOTATION_REGIONS = [
|
|
3699
|
+
{
|
|
3700
|
+
name: "full_body",
|
|
3701
|
+
objects: ["*"],
|
|
3702
|
+
paddingFactor: 2.5
|
|
3703
|
+
},
|
|
3704
|
+
{
|
|
3705
|
+
name: "head",
|
|
3706
|
+
bones: ["HEAD"],
|
|
3707
|
+
paddingFactor: 1.8,
|
|
3708
|
+
children: ["left_eye", "right_eye", "mouth"],
|
|
3709
|
+
expandAnimation: "staggered"
|
|
3710
|
+
},
|
|
3711
|
+
{
|
|
3712
|
+
name: "left_eye",
|
|
3713
|
+
meshes: ["EYES_0"],
|
|
3714
|
+
parent: "head",
|
|
3715
|
+
paddingFactor: 1.4,
|
|
3716
|
+
cameraAngle: 270
|
|
3717
|
+
},
|
|
3718
|
+
{
|
|
3719
|
+
name: "right_eye",
|
|
3720
|
+
meshes: ["EYES_0"],
|
|
3721
|
+
parent: "head",
|
|
3722
|
+
paddingFactor: 1.4,
|
|
3723
|
+
cameraAngle: 90
|
|
3724
|
+
},
|
|
3725
|
+
{
|
|
3726
|
+
name: "mouth",
|
|
3727
|
+
bones: ["HEAD"],
|
|
3728
|
+
parent: "head",
|
|
3729
|
+
paddingFactor: 1.5
|
|
3730
|
+
},
|
|
3731
|
+
{
|
|
3732
|
+
name: "body",
|
|
3733
|
+
bones: ["BODY_FRONT", "BODY_MID", "BODY_BACK"],
|
|
3734
|
+
paddingFactor: 1.8
|
|
3735
|
+
},
|
|
3736
|
+
{
|
|
3737
|
+
name: "tail",
|
|
3738
|
+
bones: ["TAIL_BASE", "TAIL_TOP", "TAIL_MID"],
|
|
3739
|
+
paddingFactor: 1.6
|
|
3740
|
+
},
|
|
3741
|
+
{
|
|
3742
|
+
name: "dorsal_fin",
|
|
3743
|
+
bones: ["DORSAL_ROOT", "DORSAL_L", "DORSAL_R"],
|
|
3744
|
+
paddingFactor: 1.8
|
|
3745
|
+
},
|
|
3746
|
+
{
|
|
3747
|
+
name: "pectoral_fins",
|
|
3748
|
+
bones: ["PECTORAL_L_ROOT", "PECTORAL_R_ROOT"],
|
|
3749
|
+
paddingFactor: 1.8,
|
|
3750
|
+
children: ["pectoral_fin_left", "pectoral_fin_right"],
|
|
3751
|
+
expandAnimation: "outward"
|
|
3752
|
+
},
|
|
3753
|
+
{
|
|
3754
|
+
name: "pectoral_fin_left",
|
|
3755
|
+
bones: ["PECTORAL_L_ROOT", "PECTORAL_L_CHAIN1", "PECTORAL_L_CHAIN2"],
|
|
3756
|
+
parent: "pectoral_fins",
|
|
3757
|
+
paddingFactor: 1.6,
|
|
3758
|
+
cameraAngle: 270
|
|
3759
|
+
},
|
|
3760
|
+
{
|
|
3761
|
+
name: "pectoral_fin_right",
|
|
3762
|
+
bones: ["PECTORAL_R_ROOT", "PECTORAL_R_CHAIN1", "PECTORAL_R_ROOT2"],
|
|
3763
|
+
parent: "pectoral_fins",
|
|
3764
|
+
paddingFactor: 1.6,
|
|
3765
|
+
cameraAngle: 90
|
|
3766
|
+
},
|
|
3767
|
+
{
|
|
3768
|
+
name: "ventral_fins",
|
|
3769
|
+
bones: ["VENTRAL_L", "VENTRAL_R"],
|
|
3770
|
+
paddingFactor: 1.6
|
|
3771
|
+
},
|
|
3772
|
+
{
|
|
3773
|
+
name: "gills",
|
|
3774
|
+
bones: ["GILL_L", "GILL_R"],
|
|
3775
|
+
paddingFactor: 1.6,
|
|
3776
|
+
children: ["throat", "gill"],
|
|
3777
|
+
expandAnimation: "outward"
|
|
3778
|
+
},
|
|
3779
|
+
{
|
|
3780
|
+
name: "throat",
|
|
3781
|
+
bones: ["GILL_L", "GILL_L_MID", "GILL_L_TIP"],
|
|
3782
|
+
parent: "gills",
|
|
3783
|
+
paddingFactor: 1.4,
|
|
3784
|
+
cameraAngle: 270
|
|
3785
|
+
},
|
|
3786
|
+
{
|
|
3787
|
+
name: "gill",
|
|
3788
|
+
bones: ["GILL_R", "GILL_R_MID", "GILL_R_TIP"],
|
|
3789
|
+
parent: "gills",
|
|
3790
|
+
paddingFactor: 1.4,
|
|
3791
|
+
cameraAngle: 90
|
|
3792
|
+
}
|
|
3793
|
+
];
|
|
3794
|
+
var BETTA_FISH_PROFILE = {
|
|
3692
3795
|
name: "Betta Fish",
|
|
3693
3796
|
animalType: "fish",
|
|
3694
3797
|
emoji: "\u{1F41F}",
|
|
@@ -3706,18 +3809,27 @@ var AU_MAPPING_CONFIG = {
|
|
|
3706
3809
|
compositeRotations: COMPOSITE_ROTATIONS2,
|
|
3707
3810
|
eyeMeshNodes: EYE_MESH_NODES,
|
|
3708
3811
|
meshes: MESHES,
|
|
3812
|
+
annotationRegions: ANNOTATION_REGIONS,
|
|
3709
3813
|
auMixDefaults: {},
|
|
3710
3814
|
// No mixed AUs (morph+bone) in this model
|
|
3711
3815
|
continuumPairs: CONTINUUM_PAIRS_MAP2,
|
|
3712
3816
|
continuumLabels: CONTINUUM_LABELS2
|
|
3713
3817
|
};
|
|
3818
|
+
var BETTA_FISH_PRESET = {
|
|
3819
|
+
...BETTA_FISH_PROFILE,
|
|
3820
|
+
bones: BONES,
|
|
3821
|
+
boneBindings: BONE_BINDINGS,
|
|
3822
|
+
actionInfo: AU_INFO2
|
|
3823
|
+
};
|
|
3824
|
+
var AU_MAPPING_CONFIG = BETTA_FISH_PRESET;
|
|
3825
|
+
var FISH_AU_MAPPING_CONFIG = BETTA_FISH_PRESET;
|
|
3714
3826
|
|
|
3715
3827
|
// src/presets/index.ts
|
|
3716
3828
|
function resolvePreset(presetType) {
|
|
3717
3829
|
switch (presetType) {
|
|
3718
3830
|
case "fish":
|
|
3719
3831
|
case "skeletal":
|
|
3720
|
-
return
|
|
3832
|
+
return BETTA_FISH_PRESET;
|
|
3721
3833
|
case "cc4":
|
|
3722
3834
|
case "custom":
|
|
3723
3835
|
default:
|
|
@@ -3726,7 +3838,7 @@ function resolvePreset(presetType) {
|
|
|
3726
3838
|
}
|
|
3727
3839
|
function resolvePresetWithOverrides(presetType, overrides) {
|
|
3728
3840
|
const base = resolvePreset(presetType);
|
|
3729
|
-
return
|
|
3841
|
+
return applyProfileToPreset(base, overrides);
|
|
3730
3842
|
}
|
|
3731
3843
|
|
|
3732
3844
|
// src/engines/three/Loom3.ts
|
|
@@ -3803,7 +3915,7 @@ var _Loom3 = class _Loom3 {
|
|
|
3803
3915
|
/** Store original emissive colors for highlight reset */
|
|
3804
3916
|
__publicField(this, "originalEmissive", /* @__PURE__ */ new Map());
|
|
3805
3917
|
const basePreset = config.presetType ? resolvePreset(config.presetType) : CC4_PRESET;
|
|
3806
|
-
this.config =
|
|
3918
|
+
this.config = applyProfileToPreset(basePreset, config.profile);
|
|
3807
3919
|
this.mixWeights = { ...this.config.auMixDefaults };
|
|
3808
3920
|
this.animation = animation || new AnimationThree();
|
|
3809
3921
|
this.compositeRotations = this.config.compositeRotations || COMPOSITE_ROTATIONS;
|
|
@@ -5211,6 +5323,206 @@ var BLENDING_MODES = {
|
|
|
5211
5323
|
"None": 0
|
|
5212
5324
|
// THREE.NoBlending
|
|
5213
5325
|
};
|
|
5326
|
+
|
|
5327
|
+
// src/characters/resolveCharacterConfig.ts
|
|
5328
|
+
var PROFILE_OVERRIDE_KEYS = [
|
|
5329
|
+
"name",
|
|
5330
|
+
"animalType",
|
|
5331
|
+
"emoji",
|
|
5332
|
+
"auToMorphs",
|
|
5333
|
+
"auToBones",
|
|
5334
|
+
"boneNodes",
|
|
5335
|
+
"bonePrefix",
|
|
5336
|
+
"boneSuffix",
|
|
5337
|
+
"morphPrefix",
|
|
5338
|
+
"morphSuffix",
|
|
5339
|
+
"suffixPattern",
|
|
5340
|
+
"leftMorphSuffixes",
|
|
5341
|
+
"rightMorphSuffixes",
|
|
5342
|
+
"morphToMesh",
|
|
5343
|
+
"auFacePartToMeshCategory",
|
|
5344
|
+
"visemeKeys",
|
|
5345
|
+
"visemeMeshCategory",
|
|
5346
|
+
"visemeJawAmounts",
|
|
5347
|
+
"auMixDefaults",
|
|
5348
|
+
"auInfo",
|
|
5349
|
+
"eyeMeshNodes",
|
|
5350
|
+
"compositeRotations",
|
|
5351
|
+
"meshes",
|
|
5352
|
+
"continuumPairs",
|
|
5353
|
+
"continuumLabels",
|
|
5354
|
+
"annotationRegions",
|
|
5355
|
+
"hairPhysics"
|
|
5356
|
+
];
|
|
5357
|
+
function isPlainObject2(value) {
|
|
5358
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
5359
|
+
}
|
|
5360
|
+
function cloneArray(value) {
|
|
5361
|
+
return value ? value.map((entry) => cloneValue2(entry)) : void 0;
|
|
5362
|
+
}
|
|
5363
|
+
function cloneValue2(value) {
|
|
5364
|
+
if (Array.isArray(value)) {
|
|
5365
|
+
return value.map((entry) => cloneValue2(entry));
|
|
5366
|
+
}
|
|
5367
|
+
if (isPlainObject2(value)) {
|
|
5368
|
+
const next = {};
|
|
5369
|
+
for (const [key, entry] of Object.entries(value)) {
|
|
5370
|
+
next[key] = cloneValue2(entry);
|
|
5371
|
+
}
|
|
5372
|
+
return next;
|
|
5373
|
+
}
|
|
5374
|
+
return value;
|
|
5375
|
+
}
|
|
5376
|
+
function mergeProfileOverrideValue(base, override) {
|
|
5377
|
+
if (override === void 0) {
|
|
5378
|
+
return base === void 0 ? void 0 : cloneValue2(base);
|
|
5379
|
+
}
|
|
5380
|
+
if (Array.isArray(override)) {
|
|
5381
|
+
return cloneValue2(override);
|
|
5382
|
+
}
|
|
5383
|
+
if (isPlainObject2(base) && isPlainObject2(override)) {
|
|
5384
|
+
return {
|
|
5385
|
+
...cloneValue2(base),
|
|
5386
|
+
...cloneValue2(override)
|
|
5387
|
+
};
|
|
5388
|
+
}
|
|
5389
|
+
return cloneValue2(override);
|
|
5390
|
+
}
|
|
5391
|
+
function cloneVector3(value) {
|
|
5392
|
+
return value ? { ...value } : void 0;
|
|
5393
|
+
}
|
|
5394
|
+
function cloneRegion(region) {
|
|
5395
|
+
return {
|
|
5396
|
+
...region,
|
|
5397
|
+
bones: cloneArray(region.bones),
|
|
5398
|
+
meshes: cloneArray(region.meshes),
|
|
5399
|
+
objects: cloneArray(region.objects),
|
|
5400
|
+
children: cloneArray(region.children),
|
|
5401
|
+
cameraOffset: cloneVector3(region.cameraOffset),
|
|
5402
|
+
customPosition: region.customPosition ? { ...region.customPosition } : void 0,
|
|
5403
|
+
style: region.style ? {
|
|
5404
|
+
...region.style,
|
|
5405
|
+
line: region.style.line ? { ...region.style.line } : void 0
|
|
5406
|
+
} : void 0
|
|
5407
|
+
};
|
|
5408
|
+
}
|
|
5409
|
+
function mergeRegion(base, override) {
|
|
5410
|
+
return {
|
|
5411
|
+
...base,
|
|
5412
|
+
...override,
|
|
5413
|
+
bones: override.bones !== void 0 ? [...override.bones] : base.bones ? [...base.bones] : void 0,
|
|
5414
|
+
meshes: override.meshes !== void 0 ? [...override.meshes] : base.meshes ? [...base.meshes] : void 0,
|
|
5415
|
+
objects: override.objects !== void 0 ? [...override.objects] : base.objects ? [...base.objects] : void 0,
|
|
5416
|
+
children: override.children !== void 0 ? [...override.children] : base.children ? [...base.children] : void 0,
|
|
5417
|
+
cameraOffset: override.cameraOffset ? { ...base.cameraOffset, ...override.cameraOffset } : cloneVector3(base.cameraOffset),
|
|
5418
|
+
customPosition: override.customPosition ? { ...override.customPosition } : base.customPosition ? { ...base.customPosition } : void 0,
|
|
5419
|
+
style: override.style ? {
|
|
5420
|
+
...base.style,
|
|
5421
|
+
...override.style,
|
|
5422
|
+
line: override.style.line ? { ...base.style?.line, ...override.style.line } : base.style?.line ? { ...base.style.line } : void 0
|
|
5423
|
+
} : base.style ? {
|
|
5424
|
+
...base.style,
|
|
5425
|
+
line: base.style.line ? { ...base.style.line } : void 0
|
|
5426
|
+
} : void 0
|
|
5427
|
+
};
|
|
5428
|
+
}
|
|
5429
|
+
function mergeStringRecord(base, override) {
|
|
5430
|
+
if (!base && !override) return void 0;
|
|
5431
|
+
return {
|
|
5432
|
+
...base ? { ...base } : {},
|
|
5433
|
+
...override ? { ...override } : {}
|
|
5434
|
+
};
|
|
5435
|
+
}
|
|
5436
|
+
function mergeRegionsByName(base, override) {
|
|
5437
|
+
if (!base && !override) return void 0;
|
|
5438
|
+
const merged = /* @__PURE__ */ new Map();
|
|
5439
|
+
for (const region of base ?? []) {
|
|
5440
|
+
merged.set(region.name, cloneRegion(region));
|
|
5441
|
+
}
|
|
5442
|
+
for (const region of override ?? []) {
|
|
5443
|
+
const existing = merged.get(region.name);
|
|
5444
|
+
merged.set(region.name, existing ? mergeRegion(existing, region) : cloneRegion(region));
|
|
5445
|
+
}
|
|
5446
|
+
return Array.from(merged.values());
|
|
5447
|
+
}
|
|
5448
|
+
function extractProfileOverrides(config) {
|
|
5449
|
+
const topLevelConfig = config;
|
|
5450
|
+
const legacyNestedOverrides = isPlainObject2(config.profile) ? config.profile : {};
|
|
5451
|
+
const overrides = {};
|
|
5452
|
+
for (const key of PROFILE_OVERRIDE_KEYS) {
|
|
5453
|
+
if (key === "annotationRegions") {
|
|
5454
|
+
const topLevelAnnotationRegions = Array.isArray(topLevelConfig.annotationRegions) ? topLevelConfig.annotationRegions : void 0;
|
|
5455
|
+
const legacyAnnotationRegions = Array.isArray(legacyNestedOverrides.annotationRegions) ? legacyNestedOverrides.annotationRegions : void 0;
|
|
5456
|
+
const presetOverrideRegions = mergeRegionsByName(legacyAnnotationRegions, topLevelAnnotationRegions);
|
|
5457
|
+
const regions = mergeRegionsByName(
|
|
5458
|
+
presetOverrideRegions,
|
|
5459
|
+
Array.isArray(config.regions) && config.regions.length > 0 ? config.regions : void 0
|
|
5460
|
+
);
|
|
5461
|
+
if (regions) {
|
|
5462
|
+
overrides.annotationRegions = regions.map((region) => cloneRegion(region));
|
|
5463
|
+
}
|
|
5464
|
+
continue;
|
|
5465
|
+
}
|
|
5466
|
+
const topLevelValue = topLevelConfig[key];
|
|
5467
|
+
const legacyValue = legacyNestedOverrides[key];
|
|
5468
|
+
const mergedValue = mergeProfileOverrideValue(legacyValue, topLevelValue);
|
|
5469
|
+
if (mergedValue !== void 0) {
|
|
5470
|
+
overrides[key] = mergedValue;
|
|
5471
|
+
}
|
|
5472
|
+
}
|
|
5473
|
+
return overrides;
|
|
5474
|
+
}
|
|
5475
|
+
function applyCharacterProfileToPreset(config) {
|
|
5476
|
+
const presetType = config.auPresetType;
|
|
5477
|
+
if (!presetType) {
|
|
5478
|
+
return null;
|
|
5479
|
+
}
|
|
5480
|
+
return applyProfileToPreset(resolvePreset(presetType), extractProfileOverrides(config));
|
|
5481
|
+
}
|
|
5482
|
+
function orderResolvedRegions(resolvedRegions, prioritizedLists) {
|
|
5483
|
+
if (!resolvedRegions) return void 0;
|
|
5484
|
+
const resolvedByName = new Map(resolvedRegions.map((region) => [region.name, region]));
|
|
5485
|
+
const orderedNames = [];
|
|
5486
|
+
const seen = /* @__PURE__ */ new Set();
|
|
5487
|
+
for (const regions of prioritizedLists) {
|
|
5488
|
+
for (const region of regions ?? []) {
|
|
5489
|
+
if (seen.has(region.name)) continue;
|
|
5490
|
+
seen.add(region.name);
|
|
5491
|
+
orderedNames.push(region.name);
|
|
5492
|
+
}
|
|
5493
|
+
}
|
|
5494
|
+
for (const region of resolvedRegions) {
|
|
5495
|
+
if (seen.has(region.name)) continue;
|
|
5496
|
+
seen.add(region.name);
|
|
5497
|
+
orderedNames.push(region.name);
|
|
5498
|
+
}
|
|
5499
|
+
return orderedNames.map((name) => resolvedByName.get(name)).filter((region) => Boolean(region));
|
|
5500
|
+
}
|
|
5501
|
+
function resolveCharacterConfig(config) {
|
|
5502
|
+
const presetType = config.auPresetType;
|
|
5503
|
+
if (!presetType || presetType === "custom") {
|
|
5504
|
+
return config;
|
|
5505
|
+
}
|
|
5506
|
+
const profileOverrides = extractProfileOverrides(config);
|
|
5507
|
+
const presetResolvedProfile = applyCharacterProfileToPreset(config);
|
|
5508
|
+
if (!presetResolvedProfile) {
|
|
5509
|
+
return config;
|
|
5510
|
+
}
|
|
5511
|
+
const presetRegions = presetResolvedProfile.annotationRegions;
|
|
5512
|
+
const mergedRegions = mergeRegionsByName(presetRegions, config.regions);
|
|
5513
|
+
const resolvedRegions = orderResolvedRegions(
|
|
5514
|
+
mergedRegions,
|
|
5515
|
+
[config.regions, profileOverrides.annotationRegions, presetRegions]
|
|
5516
|
+
);
|
|
5517
|
+
return {
|
|
5518
|
+
...config,
|
|
5519
|
+
bonePrefix: config.bonePrefix ?? presetResolvedProfile.bonePrefix,
|
|
5520
|
+
boneSuffix: config.boneSuffix ?? presetResolvedProfile.boneSuffix,
|
|
5521
|
+
boneNodes: mergeStringRecord(presetResolvedProfile.boneNodes, config.boneNodes),
|
|
5522
|
+
suffixPattern: config.suffixPattern ?? presetResolvedProfile.suffixPattern,
|
|
5523
|
+
regions: resolvedRegions ?? config.regions
|
|
5524
|
+
};
|
|
5525
|
+
}
|
|
5214
5526
|
var DEFAULT_HEAD_BONE_NAMES = ["CC_Base_Head", "Head", "head", "Bip01_Head"];
|
|
5215
5527
|
var DEFAULT_REFERENCE_HEIGHT = 1.8;
|
|
5216
5528
|
var DEFAULT_FORWARD_OFFSET = 0.08;
|
|
@@ -5395,6 +5707,9 @@ function detectFacingDirection(model, eyeBoneNames = {
|
|
|
5395
5707
|
}
|
|
5396
5708
|
|
|
5397
5709
|
// src/regions/regionMapping.ts
|
|
5710
|
+
function normalizeLooseName(value) {
|
|
5711
|
+
return value.replace(/\./g, "");
|
|
5712
|
+
}
|
|
5398
5713
|
function resolveBoneName(semanticName, config) {
|
|
5399
5714
|
if (!config) return semanticName;
|
|
5400
5715
|
const { bonePrefix, boneSuffix, boneNodes } = config;
|
|
@@ -5415,6 +5730,7 @@ function resolveBoneNames(names, config) {
|
|
|
5415
5730
|
}
|
|
5416
5731
|
function fuzzyNameMatch(objectName, targetName, suffixPattern) {
|
|
5417
5732
|
if (objectName === targetName) return true;
|
|
5733
|
+
if (normalizeLooseName(objectName) === normalizeLooseName(targetName)) return true;
|
|
5418
5734
|
if (!objectName.startsWith(targetName)) return false;
|
|
5419
5735
|
const suffix = objectName.slice(targetName.length);
|
|
5420
5736
|
if (suffix === "") return true;
|
|
@@ -5561,6 +5877,9 @@ var HairPhysics = class {
|
|
|
5561
5877
|
|
|
5562
5878
|
// src/validation/generateMappingCorrections.ts
|
|
5563
5879
|
var DEFAULT_MIN_CONFIDENCE = 0.6;
|
|
5880
|
+
function normalizeLooseName2(value) {
|
|
5881
|
+
return value.replace(/\./g, "");
|
|
5882
|
+
}
|
|
5564
5883
|
function levenshteinDistance(a, b) {
|
|
5565
5884
|
const matrix = [];
|
|
5566
5885
|
const aLen = a.length;
|
|
@@ -5597,6 +5916,9 @@ function scoreCandidate(targetBase, candidate, fullTarget, suffixPattern) {
|
|
|
5597
5916
|
if (candidate === fullTarget) {
|
|
5598
5917
|
return { score: 1, reason: "exact match" };
|
|
5599
5918
|
}
|
|
5919
|
+
if (normalizeLooseName2(candidate) === normalizeLooseName2(fullTarget)) {
|
|
5920
|
+
return { score: 1, reason: "separator-normalized exact match" };
|
|
5921
|
+
}
|
|
5600
5922
|
if (suffixPattern && candidate.startsWith(fullTarget)) {
|
|
5601
5923
|
const suffix = candidate.slice(fullTarget.length);
|
|
5602
5924
|
if (suffix === "" || suffixPattern.test(suffix)) {
|
|
@@ -5785,11 +6107,17 @@ function generateMappingCorrections(meshes, skeleton, config, options = {}) {
|
|
|
5785
6107
|
}
|
|
5786
6108
|
|
|
5787
6109
|
// src/validation/validateMappings.ts
|
|
6110
|
+
function normalizeLooseName3(value) {
|
|
6111
|
+
return value.replace(/\./g, "");
|
|
6112
|
+
}
|
|
5788
6113
|
function fuzzyMatch(targetName, candidateName, prefix, suffix, suffixPattern) {
|
|
5789
6114
|
const fullTarget = prefix + targetName + suffix;
|
|
5790
6115
|
if (candidateName === fullTarget) {
|
|
5791
6116
|
return true;
|
|
5792
6117
|
}
|
|
6118
|
+
if (normalizeLooseName3(candidateName) === normalizeLooseName3(fullTarget)) {
|
|
6119
|
+
return true;
|
|
6120
|
+
}
|
|
5793
6121
|
if (suffixPattern && candidateName.startsWith(fullTarget)) {
|
|
5794
6122
|
const suffix2 = candidateName.slice(fullTarget.length);
|
|
5795
6123
|
return suffix2 === "" || suffixPattern.test(suffix2);
|
|
@@ -6504,6 +6832,6 @@ async function analyzeModel(options) {
|
|
|
6504
6832
|
};
|
|
6505
6833
|
}
|
|
6506
6834
|
|
|
6507
|
-
export { AU_INFO, AU_MIX_DEFAULTS, AU_TO_MORPHS, AnimationThree, BETTA_FISH_PRESET, BLENDING_MODES, BONE_AU_TO_BINDINGS, CC4_BONE_NODES, CC4_BONE_PREFIX, CC4_EYE_MESH_NODES, CC4_MESHES, CC4_PRESET, CC4_SUFFIX_PATTERN, COMPOSITE_ROTATIONS, CONTINUUM_LABELS, CONTINUUM_PAIRS_MAP, DEFAULT_HAIR_PHYSICS_CONFIG,
|
|
6835
|
+
export { AU_INFO, AU_MAPPING_CONFIG, AU_MIX_DEFAULTS, AU_TO_MORPHS, AnimationThree, BETTA_FISH_PRESET, BLENDING_MODES, BONE_AU_TO_BINDINGS, CC4_BONE_NODES, CC4_BONE_PREFIX, CC4_EYE_MESH_NODES, CC4_MESHES, CC4_PRESET, CC4_SUFFIX_PATTERN, COMPOSITE_ROTATIONS, CONTINUUM_LABELS, CONTINUUM_PAIRS_MAP, DEFAULT_HAIR_PHYSICS_CONFIG, FISH_AU_MAPPING_CONFIG, HairPhysics, Loom3, Loom3 as Loom3Three, Loom3 as LoomLargeThree, MORPH_TO_MESH, VISEME_JAW_AMOUNTS, VISEME_KEYS, analyzeModel, applyCharacterProfileToPreset, applyProfileToPreset, collectMorphMeshes, detectFacingDirection, extractFromGLTF, extractModelData, extractProfileOverrides, findFaceCenter, fuzzyNameMatch, generateMappingCorrections, getModelForwardDirection, hasLeftRightMorphs, isMixedAU, isPresetCompatible, mergeRegionsByName as mergeCharacterRegionsByName, resolveBoneName, resolveBoneNames, resolveCharacterConfig, resolveFaceCenter, resolvePreset, resolvePresetWithOverrides, resolveProfile, suggestBestPreset, validateMappingConfig, validateMappings };
|
|
6508
6836
|
//# sourceMappingURL=index.js.map
|
|
6509
6837
|
//# sourceMappingURL=index.js.map
|