@call-me-sensei/toonlab 0.4.19 → 0.4.21
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/NPM-LIBRARY.md +230 -0
- package/README.md +78 -36
- package/agents/PROMPTS.md +91 -0
- package/agents/README.md +9 -14
- package/agents/claude/CLAUDE.md +8 -0
- package/agents/codex/AGENTS.md +161 -0
- package/agents/cursor/toonlab.mdc +37 -0
- package/agents/references/mcp-asset-discovery.md +12 -9
- package/agents/references/runtime-entry-points.md +5 -4
- package/agents/skills/claude/asset-sourcing/SKILL.md +9 -6
- package/agents/skills/claude/rock-ground-shaders/SKILL.md +16 -0
- package/agents/skills/claude/vegetation-sky/SKILL.md +7 -4
- package/agents/skills/codex/asset-sourcing/SKILL.md +9 -6
- package/agents/skills/codex/rock-ground-shaders/SKILL.md +16 -0
- package/agents/skills/codex/vegetation-sky/SKILL.md +7 -4
- package/cli/toonlab.mjs +3 -2
- package/database/fal-patina.mjs +131 -0
- package/database/generation-service.mjs +108 -7
- package/database/migrations/0007_creation_revisions.sql +80 -0
- package/database/migrations/0008_creation_revision_hardening.sql +98 -0
- package/database/migrations/0009_creation_revision_delete_integrity.sql +11 -0
- package/database/migrations/0010_external_catalog_assets.sql +28 -0
- package/database/providers.mjs +195 -16
- package/database/repository.mjs +518 -70
- package/database/seeds/catalog/0003_2026-08-open-assets.sql +159086 -0
- package/database/seeds/catalog/0004_2026-08-c7-rocks.sql +39405 -0
- package/mcp/public-catalog.mjs +4 -52
- package/mcp/server.mjs +175 -12
- package/mcp/vite-plugin.mjs +78 -2
- package/package.json +32 -12
- package/scripts/generate-catalog-seed.mjs +34 -7
- package/src/asset-policy/catalogLicenses.js +64 -6
- package/src/assetlib/loadImported.js +15 -1
- package/src/catalog/officialCatalogAssetRuntime.js +13 -2
- package/src/catalog/officialCatalogLod.js +34 -1
- package/src/catalog/officialCatalogPlacement.js +29 -14
- package/src/character/animationRetarget.js +2 -0
- package/src/character/characterRig.js +6 -1
- package/src/character/characterRuntime.js +175 -7
- package/src/environment/environmentMaterialAdapter.js +30 -0
- package/src/environment/environmentPresets.js +90 -0
- package/src/environment/environmentSunShadowPass.js +42 -0
- package/src/environment/toonLabSurfaceLighting.js +108 -10
- package/src/environment/urbanPropMaterial.js +104 -2
- package/src/lighting/lightingSystem.js +65 -10
- package/src/renderer/index.js +7 -0
- package/src/renderer/styleComparison.js +985 -0
- package/src/rock-shader/index.js +5 -0
- package/src/rock-shader/rockGeometryDetail.js +701 -0
- package/src/rock-shader/rockMaterial.js +782 -39
- package/src/rock-shader/rockRegionRuntime.js +185 -0
- package/src/rock-shader/rockSemanticMaterialRuntime.js +337 -0
- package/src/rock-shader/rockShaderRuntime.js +354 -67
- package/src/rock-shader/rockShaderSettings.js +246 -16
- package/src/rock-shader/rockTangentIntegrity.js +136 -0
- package/src/rock-shader/rockTextureIntegrity.js +115 -0
- package/src/rockgen/index.js +1 -0
- package/src/rockgen/rockDocument.js +27 -3
- package/src/rockgen/surface/c7GeologySurface.js +372 -0
- package/src/shaders-tsl/water.js +8 -0
- package/src/sky/cloudShadow.js +25 -1
- package/src/sky/skySystem.js +9 -0
- package/src/styles/index.js +23 -0
- package/src/styles/neutralStylePresets.js +712 -0
- package/src/styles/sceneStyleRuntime.js +51 -4
- package/src/styles/styleAdapters.js +13 -2
- package/src/styles/styleBundle.js +1 -1
- package/src/texgen/evaluateTexture.js +30 -3
- package/src/texgen/textureGenerators.js +63 -31
- package/src/texgen/textureSettings.js +25 -8
- package/src/toon/toonSettings.js +96 -2
- package/src/vegetation/branchTree.js +327 -42
- package/src/vegetation/index.js +24 -2
- package/src/vegetation/scatter.js +372 -1
- package/src/vegetation/stylizedTree.js +312 -126
- package/src/vegetation/stylizedTreeFoliage.js +229 -7
- package/src/vegetation/treeSurfaceTextures.js +328 -0
- package/src/version.js +1 -1
- package/src/water/waterSettings.js +15 -7
- package/types/asset-policy/catalogLicenses.d.ts +2 -0
- package/types/asset-policy/index.d.ts +2 -0
- package/types/assetlib/loadImported.d.ts +3 -1
- package/types/catalog/officialCatalogLod.d.ts +63 -5
- package/types/character/characterRig.d.ts +59 -0
- package/types/character/characterRuntime.d.ts +1 -0
- package/types/environment/environmentMaterialAdapter.d.ts +3 -1
- package/types/environment/toonLabSurfaceLighting.d.ts +20 -3
- package/types/index.d.ts +89 -7
- package/types/lighting/lightingSystem.d.ts +7 -0
- package/types/react/index.d.ts +20 -0
- package/types/renderer/index.d.ts +1 -0
- package/types/renderer/styleComparison.d.ts +409 -0
- package/types/rock-shader/index.d.ts +5 -0
- package/types/rock-shader/rockGeometryDetail.d.ts +300 -0
- package/types/rock-shader/rockMaterial.d.ts +3 -0
- package/types/rock-shader/rockRegionRuntime.d.ts +86 -0
- package/types/rock-shader/rockSemanticMaterialRuntime.d.ts +29 -0
- package/types/rock-shader/rockShaderRuntime.d.ts +2 -0
- package/types/rock-shader/rockShaderSettings.d.ts +19 -5
- package/types/rock-shader/rockTangentIntegrity.d.ts +51 -0
- package/types/rock-shader/rockTextureIntegrity.d.ts +61 -0
- package/types/rockgen/index.d.ts +1 -0
- package/types/rockgen/rockDocument.d.ts +29 -1
- package/types/rockgen/surface/c7GeologySurface.d.ts +8 -0
- package/types/sky/cloudShadow.d.ts +1 -0
- package/types/styles/index.d.ts +1 -0
- package/types/styles/neutralStylePresets.d.ts +944 -0
- package/types/styles/sceneStyleRuntime.d.ts +20 -0
- package/types/vegetation/branchTree.d.ts +4 -0
- package/types/vegetation/index.d.ts +9 -7
- package/types/vegetation/scatter.d.ts +1 -0
- package/types/vegetation/stylizedTree.d.ts +1 -2
- package/types/vegetation/stylizedTreeFoliage.d.ts +1 -0
- package/types/version.d.ts +1 -1
- package/agents/references/geology-playbook.md +0 -118
- package/agents/skills/claude/karst-cliff-construction/SKILL.md +0 -258
- package/agents/skills/claude/outdoor-world/SKILL.md +0 -492
- package/agents/skills/claude/outdoor-world/references/coastal-landform-formation.md +0 -100
- package/agents/skills/codex/karst-cliff-construction/SKILL.md +0 -258
- package/agents/skills/codex/outdoor-world/SKILL.md +0 -492
- package/agents/skills/codex/outdoor-world/references/coastal-landform-formation.md +0 -100
- package/src/vegetation/legacyTreePresets.js +0 -120
- package/types/vegetation/legacyTreePresets.d.ts +0 -22
|
@@ -597,6 +597,14 @@ export function createWaterSettings(options = {}) {
|
|
|
597
597
|
const colorTone = resolveWaterColorToneName(source.colorTone ?? base.colorTone);
|
|
598
598
|
// A chosen tone forces its palette (see WATER_COLOR_TONES).
|
|
599
599
|
const tone = WATER_COLOR_TONES[colorTone];
|
|
600
|
+
// ...but only the *palette*. The tone's non-colour scalars (clarity
|
|
601
|
+
// distances, caustic/reflection/detail gains) are its recommended defaults,
|
|
602
|
+
// not a lock: an explicit caller value wins over them. Before this, passing
|
|
603
|
+
// `detailNormalStrength` or `reflectionStrength` alongside `colorTone:
|
|
604
|
+
// 'anime'` was silently inert, which is exactly what §6.4 of the launch spec
|
|
605
|
+
// asks for and could not get (D19-005). Callers that pass nothing are
|
|
606
|
+
// unaffected — they still resolve to the tone value, byte for byte.
|
|
607
|
+
const toneScalar = (key) => (source[key] === undefined ? tone[key] : source[key]);
|
|
600
608
|
|
|
601
609
|
const quality = WATER_QUALITY_LEVELS.includes(String(source.quality).toLowerCase())
|
|
602
610
|
? String(source.quality).toLowerCase()
|
|
@@ -633,7 +641,7 @@ export function createWaterSettings(options = {}) {
|
|
|
633
641
|
waveSetPeriod: clampedNumber(source.waveSetPeriod, base.waveSetPeriod, 8, 600),
|
|
634
642
|
waveSetStrength: clampedNumber(source.waveSetStrength, base.waveSetStrength, 0, 1),
|
|
635
643
|
|
|
636
|
-
detailNormalStrength: clampedNumber(
|
|
644
|
+
detailNormalStrength: clampedNumber(toneScalar('detailNormalStrength'), base.detailNormalStrength, 0, 2),
|
|
637
645
|
detailScale: clampedNumber(source.detailScale, base.detailScale, 0.05, 12),
|
|
638
646
|
flowDirection: vector2Array(source.flowDirection, base.flowDirection),
|
|
639
647
|
flowSpeed: clampedNumber(source.flowSpeed, base.flowSpeed, 0, 8),
|
|
@@ -641,8 +649,8 @@ export function createWaterSettings(options = {}) {
|
|
|
641
649
|
shallowColor: colorArray(tone.shallowColor ?? source.shallowColor, base.shallowColor),
|
|
642
650
|
midColor: colorArray(tone.midColor ?? source.midColor, base.midColor),
|
|
643
651
|
deepColor: colorArray(tone.deepColor ?? source.deepColor, base.deepColor),
|
|
644
|
-
depthFadeDistance: clampedNumber(
|
|
645
|
-
deepFadeDistance: clampedNumber(
|
|
652
|
+
depthFadeDistance: clampedNumber(toneScalar('depthFadeDistance'), base.depthFadeDistance, 0.01, 60),
|
|
653
|
+
deepFadeDistance: clampedNumber(toneScalar('deepFadeDistance'), base.deepFadeDistance, 0.01, 120),
|
|
646
654
|
opacity: clampedNumber(source.opacity, base.opacity, 0, 1),
|
|
647
655
|
refractionStrength: clampedNumber(source.refractionStrength, base.refractionStrength, 0, 3),
|
|
648
656
|
indexOfRefraction: clampedNumber(
|
|
@@ -654,7 +662,7 @@ export function createWaterSettings(options = {}) {
|
|
|
654
662
|
underwaterTintStrength: clampedNumber(
|
|
655
663
|
source.underwaterTintStrength, base.underwaterTintStrength, 0, 1,
|
|
656
664
|
),
|
|
657
|
-
causticsStrength: clampedNumber(
|
|
665
|
+
causticsStrength: clampedNumber(toneScalar('causticsStrength'), base.causticsStrength, 0, 4),
|
|
658
666
|
causticsScale: clampedNumber(source.causticsScale, base.causticsScale, 0.02, 12),
|
|
659
667
|
causticsSpeed: clampedNumber(source.causticsSpeed, base.causticsSpeed, 0, 8),
|
|
660
668
|
|
|
@@ -690,13 +698,13 @@ export function createWaterSettings(options = {}) {
|
|
|
690
698
|
sceneShadowStrength: clampedNumber(source.sceneShadowStrength, base.sceneShadowStrength, 0, 1),
|
|
691
699
|
fresnelStrength: clampedNumber(source.fresnelStrength, base.fresnelStrength, 0, 2),
|
|
692
700
|
fresnelPower: clampedNumber(source.fresnelPower, base.fresnelPower, 0.5, 16),
|
|
693
|
-
fresnelBias: clampedNumber(
|
|
701
|
+
fresnelBias: clampedNumber(toneScalar('fresnelBias'), base.fresnelBias, 0, 0.6),
|
|
694
702
|
fresnelColor: colorArray(tone.fresnelColor ?? source.fresnelColor, base.fresnelColor),
|
|
695
703
|
skyZenithColor: colorArray(source.skyZenithColor, base.skyZenithColor),
|
|
696
704
|
skyHorizonColor: colorArray(source.skyHorizonColor, base.skyHorizonColor),
|
|
697
|
-
reflectionStrength: clampedNumber(
|
|
705
|
+
reflectionStrength: clampedNumber(toneScalar('reflectionStrength'), base.reflectionStrength, 0, 1.5),
|
|
698
706
|
reflectionDistortion: clampedNumber(source.reflectionDistortion, base.reflectionDistortion, 0, 0.5),
|
|
699
|
-
reflectionSoftness: clampedNumber(
|
|
707
|
+
reflectionSoftness: clampedNumber(toneScalar('reflectionSoftness'), base.reflectionSoftness, 0, 1),
|
|
700
708
|
|
|
701
709
|
rippleStrength: clampedNumber(source.rippleStrength, base.rippleStrength, 0, 8),
|
|
702
710
|
rippleDamping: clampedNumber(source.rippleDamping, base.rippleDamping, 0.8, 0.9995),
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
// Source inference fallback: public names retained with permissive signatures.
|
|
2
2
|
export const APPROVED_CATALOG_SPDX_LICENSES: any;
|
|
3
|
+
export const CATALOG_LICENSE_UNSPECIFIED: any;
|
|
3
4
|
export const REVIEWED_CATALOG_LICENSES: any;
|
|
4
5
|
export function assertCatalogLicenseRelease(...args: any[]): any;
|
|
6
|
+
export function describeCatalogLicense(...args: any[]): any;
|
|
5
7
|
export function resolveCatalogLicense(...args: any[]): any;
|
|
@@ -7,11 +7,13 @@ export const ASSET_SOURCE_CLASSES: any;
|
|
|
7
7
|
export const ASSET_SOURCING_POLICY_DOCUMENT_TYPE: any;
|
|
8
8
|
export const ASSET_SOURCING_POLICY_SCHEMA_VERSION: any;
|
|
9
9
|
export const CALL_ME_SENSEI_STRICT_ASSET_POLICY: any;
|
|
10
|
+
export const CATALOG_LICENSE_UNSPECIFIED: any;
|
|
10
11
|
export const DEFAULT_ASSET_SOURCE_ORDER: any;
|
|
11
12
|
export const REVIEWED_CATALOG_LICENSES: any;
|
|
12
13
|
export function assertCatalogLicenseRelease(...args: any[]): any;
|
|
13
14
|
export function createAssetGapRecord(...args: any[]): any;
|
|
14
15
|
export function createAssetSourcingPolicy(...args: any[]): any;
|
|
16
|
+
export function describeCatalogLicense(...args: any[]): any;
|
|
15
17
|
export function evaluateAssetCandidate(...args: any[]): any;
|
|
16
18
|
export function renderAssetGapReport(...args: any[]): any;
|
|
17
19
|
export function resolveCatalogLicense(...args: any[]): any;
|
|
@@ -5,10 +5,12 @@
|
|
|
5
5
|
* LoadingManager URL modifier rewrites each request by suffix match, which
|
|
6
6
|
* also covers URL-encoded variants.
|
|
7
7
|
*/
|
|
8
|
-
export function loadImportedModel({ url, resources, dracoDecoderPath }: {
|
|
8
|
+
export function loadImportedModel({ url, resources, dracoDecoderPath, ktx2TranscoderPath, renderer, }: {
|
|
9
9
|
url: any;
|
|
10
10
|
resources?: {};
|
|
11
11
|
dracoDecoderPath?: string;
|
|
12
|
+
ktx2TranscoderPath?: string;
|
|
13
|
+
renderer?: any;
|
|
12
14
|
}): Promise<THREE.Group<THREE.Object3DEventMap>>;
|
|
13
15
|
/**
|
|
14
16
|
* PBR texture-set maps → a tiling MeshStandardMaterial. Prefers the packed
|
|
@@ -1,5 +1,63 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import type { Camera, Mesh, Object3D } from 'three';
|
|
2
|
+
|
|
3
|
+
export interface CatalogLodBinding {
|
|
4
|
+
readonly level: number;
|
|
5
|
+
readonly mesh: Mesh;
|
|
6
|
+
readonly originalVisible: boolean;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface CatalogLodSelectionOptions {
|
|
10
|
+
readonly availableLevels?: readonly number[];
|
|
11
|
+
readonly distance?: number;
|
|
12
|
+
readonly distances?: readonly number[];
|
|
13
|
+
readonly maxLevel?: number;
|
|
14
|
+
readonly currentLevel?: number | null;
|
|
15
|
+
readonly hysteresis?: number;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface CatalogLodRuntimeOptions {
|
|
19
|
+
readonly distances?: readonly number[];
|
|
20
|
+
readonly hysteresis?: number;
|
|
21
|
+
readonly maxLevel?: number;
|
|
22
|
+
readonly namePattern?: RegExp;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface CatalogLodUpdateOptions {
|
|
26
|
+
readonly camera?: Camera | null;
|
|
27
|
+
readonly distance?: number | null;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface CatalogLodUpdateResult {
|
|
31
|
+
readonly changed: boolean;
|
|
32
|
+
readonly distance: number;
|
|
33
|
+
readonly level: number;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface CatalogLodRuntime {
|
|
37
|
+
readonly availableLevels: readonly number[];
|
|
38
|
+
readonly bindings: readonly Readonly<CatalogLodBinding>[];
|
|
39
|
+
readonly disposed: boolean;
|
|
40
|
+
readonly level: number | null;
|
|
41
|
+
readonly thresholds: readonly number[];
|
|
42
|
+
readonly hysteresis: number;
|
|
43
|
+
dispose(): void;
|
|
44
|
+
setLevel(level: number): boolean;
|
|
45
|
+
update(options?: CatalogLodUpdateOptions): Readonly<CatalogLodUpdateResult> | null;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function collectCatalogLodBindings(
|
|
49
|
+
root: Object3D,
|
|
50
|
+
options?: Readonly<{ namePattern?: RegExp }>,
|
|
51
|
+
): readonly Readonly<CatalogLodBinding>[];
|
|
52
|
+
|
|
53
|
+
export function normalizeCatalogLodDistances(
|
|
54
|
+
distances: readonly number[] | null | undefined,
|
|
55
|
+
levelCount?: number | null,
|
|
56
|
+
): readonly number[];
|
|
57
|
+
|
|
58
|
+
export function selectCatalogLodLevel(options?: CatalogLodSelectionOptions): number | null;
|
|
59
|
+
|
|
60
|
+
export function createCatalogLodRuntime(
|
|
61
|
+
root: Object3D,
|
|
62
|
+
options?: CatalogLodRuntimeOptions,
|
|
63
|
+
): Readonly<CatalogLodRuntime>;
|
|
@@ -9,6 +9,65 @@ export function resolveCharacterRig(targetMesh: any, { vrm }?: {
|
|
|
9
9
|
};
|
|
10
10
|
export function targetBoneNameForRole(rig: any, role: any): any;
|
|
11
11
|
export function targetBoneNamesForRole(rig: any, role: any): any[];
|
|
12
|
+
/**
|
|
13
|
+
* The humanoid contract itself: role -> canonical Mixamo bone name. Exported so
|
|
14
|
+
* a host can audit a rig against it (which roles resolved, which are missing)
|
|
15
|
+
* rather than inferring the answer from a bone count.
|
|
16
|
+
*/
|
|
17
|
+
export const MIXAMO_BONE_BY_ROLE: Readonly<{
|
|
18
|
+
hips: "mixamorigHips";
|
|
19
|
+
spine: "mixamorigSpine";
|
|
20
|
+
chest: "mixamorigSpine1";
|
|
21
|
+
upperChest: "mixamorigSpine2";
|
|
22
|
+
neck: "mixamorigNeck";
|
|
23
|
+
head: "mixamorigHead";
|
|
24
|
+
leftShoulder: "mixamorigLeftShoulder";
|
|
25
|
+
leftUpperArm: "mixamorigLeftArm";
|
|
26
|
+
leftLowerArm: "mixamorigLeftForeArm";
|
|
27
|
+
leftHand: "mixamorigLeftHand";
|
|
28
|
+
rightShoulder: "mixamorigRightShoulder";
|
|
29
|
+
rightUpperArm: "mixamorigRightArm";
|
|
30
|
+
rightLowerArm: "mixamorigRightForeArm";
|
|
31
|
+
rightHand: "mixamorigRightHand";
|
|
32
|
+
leftThumbMetacarpal: "mixamorigLeftHandThumb1";
|
|
33
|
+
leftThumbProximal: "mixamorigLeftHandThumb2";
|
|
34
|
+
leftThumbDistal: "mixamorigLeftHandThumb3";
|
|
35
|
+
leftIndexProximal: "mixamorigLeftHandIndex1";
|
|
36
|
+
leftIndexIntermediate: "mixamorigLeftHandIndex2";
|
|
37
|
+
leftIndexDistal: "mixamorigLeftHandIndex3";
|
|
38
|
+
leftMiddleProximal: "mixamorigLeftHandMiddle1";
|
|
39
|
+
leftMiddleIntermediate: "mixamorigLeftHandMiddle2";
|
|
40
|
+
leftMiddleDistal: "mixamorigLeftHandMiddle3";
|
|
41
|
+
leftRingProximal: "mixamorigLeftHandRing1";
|
|
42
|
+
leftRingIntermediate: "mixamorigLeftHandRing2";
|
|
43
|
+
leftRingDistal: "mixamorigLeftHandRing3";
|
|
44
|
+
leftLittleProximal: "mixamorigLeftHandPinky1";
|
|
45
|
+
leftLittleIntermediate: "mixamorigLeftHandPinky2";
|
|
46
|
+
leftLittleDistal: "mixamorigLeftHandPinky3";
|
|
47
|
+
rightThumbMetacarpal: "mixamorigRightHandThumb1";
|
|
48
|
+
rightThumbProximal: "mixamorigRightHandThumb2";
|
|
49
|
+
rightThumbDistal: "mixamorigRightHandThumb3";
|
|
50
|
+
rightIndexProximal: "mixamorigRightHandIndex1";
|
|
51
|
+
rightIndexIntermediate: "mixamorigRightHandIndex2";
|
|
52
|
+
rightIndexDistal: "mixamorigRightHandIndex3";
|
|
53
|
+
rightMiddleProximal: "mixamorigRightHandMiddle1";
|
|
54
|
+
rightMiddleIntermediate: "mixamorigRightHandMiddle2";
|
|
55
|
+
rightMiddleDistal: "mixamorigRightHandMiddle3";
|
|
56
|
+
rightRingProximal: "mixamorigRightHandRing1";
|
|
57
|
+
rightRingIntermediate: "mixamorigRightHandRing2";
|
|
58
|
+
rightRingDistal: "mixamorigRightHandRing3";
|
|
59
|
+
rightLittleProximal: "mixamorigRightHandPinky1";
|
|
60
|
+
rightLittleIntermediate: "mixamorigRightHandPinky2";
|
|
61
|
+
rightLittleDistal: "mixamorigRightHandPinky3";
|
|
62
|
+
leftUpperLeg: "mixamorigLeftUpLeg";
|
|
63
|
+
leftLowerLeg: "mixamorigLeftLeg";
|
|
64
|
+
leftFoot: "mixamorigLeftFoot";
|
|
65
|
+
leftToes: "mixamorigLeftToeBase";
|
|
66
|
+
rightUpperLeg: "mixamorigRightUpLeg";
|
|
67
|
+
rightLowerLeg: "mixamorigRightLeg";
|
|
68
|
+
rightFoot: "mixamorigRightFoot";
|
|
69
|
+
rightToes: "mixamorigRightToeBase";
|
|
70
|
+
}>;
|
|
12
71
|
export const HUMANOID_ROLES: readonly string[];
|
|
13
72
|
export const MIXAMO_CHAIN_CHILD: Readonly<{
|
|
14
73
|
mixamorigLeftShoulder: "mixamorigLeftArm";
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// Source inference fallback: public names retained with permissive signatures.
|
|
2
|
+
export const CHARACTER_MATERIAL_MODES: any;
|
|
2
3
|
export const CHARACTER_RUNTIME_STAGE: any;
|
|
3
4
|
export const DEFAULT_CHARACTER_ANIMATION_ROLES: any;
|
|
4
5
|
export function createCharacterRuntime(...args: any[]): any;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export function applyEnvironmentShader(root: any, { assetId, bakeVertexAo, debugOutputMode, environmentBox, features, hasSun, materialLook, materialManifest, objectClass, parameters, preset, roleOverrides, scanStylize, scanStylizeParams, scenario, settings, shaderMode, openWindows, vertexAoOptions, }?: {
|
|
1
|
+
export function applyEnvironmentShader(root: any, { assetId, bakeVertexAo, debugOutputMode, environmentBox, features, hasSun, materialLook, materialManifest, objectClass, parameters, preset, roleOverrides, scanStylize, scanStylizeParams, scenario, settings, shaderMode, surfaceLighting, openWindows, vertexAoOptions, }?: {
|
|
2
2
|
assetId?: string;
|
|
3
3
|
bakeVertexAo?: string;
|
|
4
4
|
debugOutputMode?: string;
|
|
@@ -16,12 +16,14 @@ export function applyEnvironmentShader(root: any, { assetId, bakeVertexAo, debug
|
|
|
16
16
|
scenario?: any;
|
|
17
17
|
settings?: {};
|
|
18
18
|
shaderMode?: string;
|
|
19
|
+
surfaceLighting?: {};
|
|
19
20
|
openWindows?: boolean;
|
|
20
21
|
vertexAoOptions?: {};
|
|
21
22
|
}): Promise<{
|
|
22
23
|
aoOverlayMeshCount: number;
|
|
23
24
|
classification: any[];
|
|
24
25
|
convertedMeshCount: number;
|
|
26
|
+
surfaceLightingMaterialCount: number;
|
|
25
27
|
manifestWarnings: any[];
|
|
26
28
|
manufacturedAssetId: string;
|
|
27
29
|
manufacturedObjectClass: any;
|
|
@@ -12,8 +12,9 @@ export function resolveToonLabSurfaceInputAdapter(inputAdapter?: "toonlab-stage"
|
|
|
12
12
|
indirectNormalization: number;
|
|
13
13
|
}>;
|
|
14
14
|
/** CPU oracle for the diffuse-only direct/indirect input decomposition. */
|
|
15
|
-
export function evaluateToonLabSurfaceDiffuseDecomposition({ brdfDiffuse, directInput, indirectInput, inputAdapter, nDotL, }?: {
|
|
15
|
+
export function evaluateToonLabSurfaceDiffuseDecomposition({ brdfDiffuse, directStrength, directInput, indirectInput, inputAdapter, nDotL, }?: {
|
|
16
16
|
brdfDiffuse?: number[];
|
|
17
|
+
directStrength?: number;
|
|
17
18
|
directInput?: number[];
|
|
18
19
|
indirectInput?: number[];
|
|
19
20
|
inputAdapter?: "toonlab-stage";
|
|
@@ -82,6 +83,7 @@ export const TOONLAB_SURFACE_LIGHTING_CONTRACT: Readonly<{
|
|
|
82
83
|
directDiffuse: "radiance * BRDFData.diffuse (no 1/PI)";
|
|
83
84
|
indirectDiffuse: "bakedGI * BRDFData.diffuse (no 1/PI)";
|
|
84
85
|
directSpecular: "TOONLAB DirectBRDFSpecular optimized GGX";
|
|
86
|
+
shadowFill: "authored fraction of the sun retained where the package sun-shadow pass reports occlusion (0 = TOONLAB literal)";
|
|
85
87
|
defaultInputAdapter: "toonlab-stage";
|
|
86
88
|
inputNormalization: "direct radiance and cosine-convolved indirect irradiance are normalized independently";
|
|
87
89
|
threeLightInputScaleInverse: number;
|
|
@@ -96,18 +98,30 @@ export const TOONLAB_SURFACE_LIGHTING_CONTRACT: Readonly<{
|
|
|
96
98
|
}>;
|
|
97
99
|
}>;
|
|
98
100
|
export class ToonLabSurfaceLightingModel extends PhysicalLightingModel {
|
|
99
|
-
constructor({ diffuseAlphaNode, indirectStrength, indirectTint, inputAdapter, perceptualRoughnessNode, specularF0Node, workflow, }?: {
|
|
101
|
+
constructor({ diffuseAlphaNode, directStrength, indirectStrength, indirectTint, indirectTintNode, indirectReplaceTintNode, indirectTintBlendNode, indirectTintMode, inputAdapter, perceptualRoughnessNode, shadowFill, shadowFillTint, useSharedSunShadow, specularF0Node, workflow, }?: {
|
|
100
102
|
diffuseAlphaNode?: import("three/webgpu").VarNode<"float", import("three/webgpu").ConstNode<"float", number>>;
|
|
103
|
+
directStrength?: number;
|
|
101
104
|
indirectStrength?: number;
|
|
102
105
|
indirectTint?: number[];
|
|
106
|
+
indirectTintNode?: any;
|
|
107
|
+
indirectReplaceTintNode?: any;
|
|
108
|
+
indirectTintBlendNode?: any;
|
|
109
|
+
indirectTintMode?: string;
|
|
103
110
|
inputAdapter?: "toonlab-stage";
|
|
104
111
|
perceptualRoughnessNode?: import("three/webgpu").MaterialNode;
|
|
112
|
+
shadowFill?: number;
|
|
113
|
+
shadowFillTint?: number[];
|
|
114
|
+
useSharedSunShadow?: boolean;
|
|
105
115
|
specularF0Node?: import("three/webgpu").MaterialNode;
|
|
106
116
|
workflow?: string;
|
|
107
117
|
});
|
|
108
118
|
diffuseAlphaNode: import("three/webgpu").VarNode<"float", import("three/webgpu").ConstNode<"float", number>>;
|
|
119
|
+
directStrength: import("three/webgpu").VarNode<"float", import("three/webgpu").ConstNode<"float", number>>;
|
|
109
120
|
indirectStrength: import("three/webgpu").VarNode<"float", import("three/webgpu").ConstNode<"float", number>>;
|
|
110
121
|
indirectTint: import("three/webgpu").VarNode<"vec3", import("three/webgpu").ConstNode<"vec3", import("three").Vector3>>;
|
|
122
|
+
indirectReplaceTint: import("three/webgpu").VarNode<"vec3", import("three/webgpu").ConstNode<"vec3", import("three").Vector3>>;
|
|
123
|
+
indirectTintBlend: any;
|
|
124
|
+
indirectTintMode: string;
|
|
111
125
|
inputAdapter: Readonly<{
|
|
112
126
|
directInput: "ToonLab Light radiance pre-multiplied by PI for stock Three Lambert coexistence";
|
|
113
127
|
directNormalization: number;
|
|
@@ -122,8 +136,11 @@ export class ToonLabSurfaceLightingModel extends PhysicalLightingModel {
|
|
|
122
136
|
indirectNormalization: number;
|
|
123
137
|
}>;
|
|
124
138
|
perceptualRoughnessNode: import("three/webgpu").MaterialNode;
|
|
125
|
-
|
|
139
|
+
shadowFill: number;
|
|
140
|
+
shadowFillTint: number[];
|
|
141
|
+
useSharedSunShadow: boolean;
|
|
126
142
|
workflow: string;
|
|
143
|
+
specularF0Node: import("three/webgpu").MaterialNode;
|
|
127
144
|
direct({ lightDirection, lightColor, lightNode, reflectedLight }: {
|
|
128
145
|
lightDirection: any;
|
|
129
146
|
lightColor: any;
|