@call-me-sensei/toonlab 0.3.1 → 0.4.20
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 +225 -0
- package/README.md +588 -184
- package/agents/PROMPTS.md +87 -0
- package/agents/README.md +54 -0
- package/agents/claude/CLAUDE.md +8 -0
- package/agents/codex/AGENTS.md +159 -0
- package/agents/cursor/toonlab.mdc +37 -0
- package/agents/references/anime-art-direction.md +24 -0
- package/agents/references/asset-sourcing-policy.md +23 -0
- package/agents/references/custom-gap-report.md +16 -0
- package/agents/references/mcp-asset-discovery.md +104 -0
- package/agents/references/runtime-entry-points.md +175 -0
- package/agents/references/style-bundles.md +71 -0
- package/agents/skills/claude/asset-sourcing/SKILL.md +275 -0
- package/agents/skills/claude/environment/SKILL.md +59 -0
- package/agents/skills/claude/game-dev/SKILL.md +100 -0
- package/agents/skills/claude/post-processing/SKILL.md +44 -0
- package/agents/skills/claude/rock-ground-shaders/SKILL.md +134 -0
- package/agents/skills/claude/rockgen/SKILL.md +30 -0
- package/agents/skills/claude/scene-style-application/SKILL.md +74 -0
- package/agents/skills/claude/style-presets/SKILL.md +101 -0
- package/agents/skills/claude/toon-shading/SKILL.md +44 -0
- package/agents/skills/claude/vegetation-sky/SKILL.md +167 -0
- package/agents/skills/claude/visual-verification/SKILL.md +136 -0
- package/agents/skills/claude/water/SKILL.md +105 -0
- package/agents/skills/codex/asset-sourcing/SKILL.md +275 -0
- package/agents/skills/codex/environment/SKILL.md +59 -0
- package/agents/skills/codex/game-dev/SKILL.md +100 -0
- package/agents/skills/codex/post-processing/SKILL.md +44 -0
- package/agents/skills/codex/rock-ground-shaders/SKILL.md +134 -0
- package/agents/skills/codex/rockgen/SKILL.md +30 -0
- package/agents/skills/codex/scene-style-application/SKILL.md +74 -0
- package/agents/skills/codex/style-presets/SKILL.md +101 -0
- package/agents/skills/codex/toon-shading/SKILL.md +44 -0
- package/agents/skills/codex/vegetation-sky/SKILL.md +167 -0
- package/agents/skills/codex/visual-verification/SKILL.md +136 -0
- package/agents/skills/codex/water/SKILL.md +105 -0
- package/cli/toonlab.mjs +53 -0
- package/compose.yaml +20 -0
- package/database/apply-sql.mjs +141 -0
- package/database/client.mjs +39 -0
- package/database/creation-tags.mjs +23 -0
- package/database/env.mjs +16 -0
- package/database/fal-patina.mjs +131 -0
- package/database/generation-service.mjs +415 -0
- package/database/migrations/0001_local_workspace.sql +120 -0
- package/database/migrations/0002_file_ownership.sql +11 -0
- package/database/migrations/0003_remove_autosaves_from_library.sql +7 -0
- package/database/migrations/0004_catalog_asset_packs.sql +39 -0
- package/database/migrations/0005_creation_tag_discovery.sql +1 -0
- package/database/migrations/0006_normalize_creation_tags.sql +28 -0
- 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 +644 -0
- package/database/repository.mjs +1073 -0
- package/database/seeds/catalog/0001_empty_official_catalog.sql +4 -0
- package/database/seeds/catalog/0002_2026-08.sql +19454 -0
- 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/lab-management.mjs +629 -0
- package/mcp/public-catalog.mjs +168 -0
- package/mcp/server.mjs +1044 -63
- package/mcp/vite-plugin.mjs +519 -26
- package/mcp/workspace.mjs +26 -1
- package/package.json +334 -46
- package/scripts/generate-catalog-seed.mjs +324 -0
- package/scripts/setup-local.mjs +128 -0
- package/src/agents/index.js +7 -0
- package/src/agents/sceneStyleOperations.js +169 -0
- package/src/asset-policy/catalogLicenses.js +102 -0
- package/src/asset-policy/index.js +315 -0
- package/src/assetlib/assetRef.js +1 -1
- package/src/assetlib/galleryMaterialFamily.js +165 -0
- package/src/assetlib/index.js +6 -2
- package/src/assetlib/loadImported.js +15 -1
- package/src/assetlib/plateau.js +188 -0
- package/src/assetlib/plateauLandmarks.js +144 -0
- package/src/assetlib/plateauViewer.js +348 -0
- package/src/assetlib/sources.js +16 -2
- package/src/catalog/manifest.js +11 -1
- package/src/catalog/officialCatalog.js +4 -0
- package/src/catalog/officialCatalogAssetRuntime.js +324 -0
- package/src/catalog/officialCatalogLod.js +183 -0
- package/src/catalog/officialCatalogPlacement.js +243 -0
- package/src/catalog/officialCatalogProvider.js +334 -0
- package/src/character/animationRetarget.js +1084 -0
- package/src/character/characterRig.js +6 -1
- package/src/character/characterRuntime.js +544 -0
- package/src/character/groundStabilizer.js +137 -0
- package/src/character/index.js +8 -0
- package/src/character/locomotionActions.js +74 -0
- package/src/character/locomotionStateMachine.js +241 -0
- package/src/character/mannequinAsset.js +15 -0
- package/src/character/mannequinAssetUrl.browser.js +4 -0
- package/src/character/mannequinAssetUrl.node.js +3 -0
- package/src/character/modelLoader.js +92 -12
- package/src/character/walkableCharacterRuntime.js +284 -0
- package/src/character/waterInteractionController.js +217 -0
- package/src/cloud/ambientSkyBaker.js +248 -0
- package/src/cloud/cloudLighting.js +1114 -0
- package/src/cloud/cloudParams.js +819 -0
- package/src/cloud/cloudReprojection.js +563 -0
- package/src/cloud/cloudStyle.js +780 -0
- package/src/cloud/cloudStyleSnapshots.js +387 -0
- package/src/cloud/cloudVolume.js +1903 -0
- package/src/cloud/heroCloudRecipe.js +404 -0
- package/src/cloud/index.js +42 -0
- package/src/cloud/noise/baseShapeVolume.js +331 -0
- package/src/cloud/noise/cirrusMap.js +131 -0
- package/src/cloud/noise/curlNoise.js +289 -0
- package/src/cloud/noise/erosionVolume.js +188 -0
- package/src/cloud/noise/noiseVolume.js +202 -0
- package/src/cloud/noise/periodicNoise3.js +295 -0
- package/src/cloud/noise/weatherMap.js +470 -0
- package/src/cloud/paramSchema.js +458 -0
- package/src/collisionMetadata.js +320 -0
- package/src/core/systemStylePolicy.js +32 -0
- package/src/environment/dayCurves.js +146 -0
- package/src/environment/environmentGroundFieldPass.js +354 -0
- package/src/environment/environmentMaterialAdapter.js +144 -6
- package/src/environment/environmentPresets.js +486 -90
- package/src/environment/environmentRigs.js +17 -2
- package/src/environment/environmentSettings.js +37 -1
- package/src/environment/environmentShaderMaterials.js +37 -6
- package/src/environment/environmentState.js +133 -0
- package/src/environment/environmentSunShadowPass.js +399 -6
- package/src/environment/environmentTextureResolver.js +7 -0
- package/src/environment/index.js +51 -0
- package/src/environment/manufacturedMaterialContract.js +837 -0
- package/src/environment/manufacturedReflectionProvider.js +114 -0
- package/src/environment/scanAssetStylize.js +4 -4
- package/src/environment/surfaceMaterialModes.js +71 -0
- package/src/environment/toonLabEnvironmentMaterials.js +353 -0
- package/src/environment/toonLabMaterialPassCoupling.js +347 -0
- package/src/environment/toonLabNormalIntegration.js +171 -0
- package/src/environment/toonLabRockMaterialResolver.js +592 -0
- package/src/environment/toonLabSourceDefaultLit.js +444 -0
- package/src/environment/toonLabSourceLibrary.js +762 -0
- package/src/environment/toonLabSourceMaterials.js +3718 -0
- package/src/environment/toonLabSourceSubsurfaceLighting.js +415 -0
- package/src/environment/toonLabSourceTemporal.js +717 -0
- package/src/environment/toonLabSurfaceLighting.js +462 -0
- package/src/environment/toonLabTextureReadiness.js +105 -0
- package/src/environment/toonLabTreeMaterials.js +450 -0
- package/src/environment/transparentMaterialProfile.js +87 -0
- package/src/environment/urbanPropMaterial.js +2976 -0
- package/src/ground-shader/groundPrintLayer.js +375 -0
- package/src/ground-shader/groundShaderMaterial.js +851 -0
- package/src/ground-shader/groundShaderSettings.js +468 -0
- package/src/ground-shader/index.js +3 -0
- package/src/index.js +52 -22
- package/src/lighting/callMeSenseiLightingContract.js +163 -0
- package/src/lighting/index.js +14 -7
- package/src/lighting/lightingCapabilities.js +2 -2
- package/src/lighting/lightingPresets.js +6 -3
- package/src/lighting/lightingStyle.js +41 -6
- package/src/lighting/lightingSystem.js +200 -6
- package/src/lighting/{unrealExport.js → toonLabExport.js} +40 -41
- package/src/post/postProcessing.js +71 -12
- package/src/react/index.js +66 -0
- package/src/renderer/index.js +16 -0
- package/src/renderer/rendererConfiguration.js +250 -0
- package/src/renderer/styleComparison.js +985 -0
- package/src/rock-shader/index.js +8 -0
- package/src/rock-shader/rockGeometryDetail.js +701 -0
- package/src/rock-shader/rockMaterial.js +2586 -0
- package/src/rock-shader/rockRegionRuntime.js +185 -0
- package/src/rock-shader/rockSemanticMaterialRuntime.js +337 -0
- package/src/rock-shader/rockShaderRuntime.js +781 -0
- package/src/rock-shader/rockShaderSettings.js +1099 -0
- package/src/rock-shader/rockTangentIntegrity.js +136 -0
- package/src/rock-shader/rockTextureIntegrity.js +115 -0
- package/src/rockgen/export/glbExport.js +104 -14
- package/src/rockgen/index.js +5 -3
- package/src/rockgen/lod/index.js +6 -0
- package/src/rockgen/lod/rockLodMetrics.js +168 -0
- package/src/rockgen/lod/rockLodPlanner.js +372 -0
- package/src/rockgen/lod/rockLodPolicy.js +235 -0
- package/src/rockgen/lod/rockLodRuntime.js +124 -0
- package/src/rockgen/lod/rockLodSimplifier.js +173 -0
- package/src/rockgen/lod/rockLodValidation.js +113 -0
- package/src/rockgen/mesh/meshAttributes.js +17 -0
- package/src/rockgen/mesh/meshDocument.js +6 -0
- package/src/rockgen/rockDocument.js +376 -9
- package/src/rockgen/rockgenPresets.js +114 -13
- package/src/rockgen/rockgenSettings.js +62 -11
- package/src/rockgen/surface/c7GeologySurface.js +372 -0
- package/src/runtime/index.js +14 -0
- package/src/runtime/sceneCollisionRuntime.js +317 -0
- package/src/runtime/sceneSurfaceRuntime.js +451 -0
- package/src/runtime/sceneUpdateScheduler.js +203 -0
- package/src/shaders-tsl/anime.js +9 -2
- package/src/shaders-tsl/chunks/environment-ground-field.js +174 -0
- package/src/shaders-tsl/chunks/environment-state.js +79 -0
- package/src/shaders-tsl/chunks/environment-sun-shadow.js +99 -32
- package/src/shaders-tsl/chunks/normalized-hue.js +41 -0
- package/src/shaders-tsl/chunks/pass-depth-color.js +4 -2
- package/src/shaders-tsl/chunks/scene-depth-color-pass.js +273 -0
- package/src/shaders-tsl/chunks/vegetation-style.js +116 -8
- package/src/shaders-tsl/chunks/water-color.js +19 -5
- package/src/shaders-tsl/chunks/water-shore-state.js +8 -1
- package/src/shaders-tsl/chunks/world-noise.js +30 -0
- package/src/shaders-tsl/environment.js +123 -17
- package/src/shaders-tsl/flower.js +51 -8
- package/src/shaders-tsl/grass.js +194 -29
- package/src/shaders-tsl/post-composite.js +83 -2
- package/src/shaders-tsl/tree-leaf.js +107 -16
- package/src/shaders-tsl/water-breaker.js +18 -4
- package/src/shaders-tsl/water.js +51 -3
- package/src/shaders-tsl/woody-surface.js +59 -7
- package/src/sky/atmosphereDome.js +193 -0
- package/src/sky/atmosphereParams.js +396 -0
- package/src/sky/atmosphereScattering.js +593 -0
- package/src/sky/atmosphereSky.js +371 -0
- package/src/sky/cloudShadow.js +379 -0
- package/src/sky/godRays.js +257 -0
- package/src/sky/index.js +55 -1
- package/src/sky/nightSky.js +1190 -0
- package/src/sky/renderLayers.js +120 -0
- package/src/sky/skyColor.js +582 -0
- package/src/sky/skyDayCycle.js +244 -0
- package/src/sky/skyParams.js +661 -0
- package/src/sky/skyPresets.js +772 -0
- package/src/sky/skyQualityTiers.js +383 -0
- package/src/sky/skyShaderSettings.js +699 -0
- package/src/sky/skyStyleSnapshots.js +211 -0
- package/src/sky/skySystem.js +1447 -0
- package/src/sky/skyTimeKeyframes.js +361 -0
- package/src/sky/stylizedSky.js +405 -116
- package/src/sky/sunDriver.js +499 -0
- package/src/sky/timeOfDay.js +335 -0
- package/src/styles/animeGameProfile.js +44 -0
- package/src/styles/index.js +157 -0
- package/src/styles/manufacturedStyleLabeling.js +204 -0
- package/src/styles/neutralStylePresets.js +712 -0
- package/src/styles/sceneLayerDocuments.js +185 -0
- package/src/styles/sceneLookComposition.js +156 -0
- package/src/styles/sceneQualityApplication.js +152 -0
- package/src/styles/sceneQualityProfiles.js +268 -0
- package/src/styles/sceneStyleAudit.js +512 -0
- package/src/styles/sceneStyleRuntime.js +923 -0
- package/src/styles/styleAdapters.js +177 -0
- package/src/styles/styleApplication.js +369 -0
- package/src/styles/styleBundle.js +445 -92
- package/src/styles/styleBundleProvider.js +83 -0
- package/src/styles/styleDomains.js +21 -0
- package/src/styles/styleInspector.js +262 -0
- package/src/styles/styleMaterialContract.js +375 -0
- package/src/styles/styleMetadata.js +73 -0
- package/src/styles/styleTargetDiscovery.js +162 -0
- package/src/styles/styleTargetLabels.js +206 -0
- package/src/styles/styleTargetMaterialCoverage.js +137 -0
- package/src/styles/styleTransaction.js +272 -0
- package/src/texgen/evaluateTexture.js +30 -3
- package/src/texgen/textureGenerators.js +83 -35
- package/src/texgen/textureSettings.js +25 -8
- package/src/toon/toonSettings.js +100 -2
- package/src/vegetation/branchTree.js +587 -0
- package/src/vegetation/callMeSenseiGrass.js +183 -0
- package/src/vegetation/compiledTree.js +506 -0
- package/src/vegetation/contactShadowField.js +107 -0
- package/src/vegetation/flowerSpecies.js +10 -2
- package/src/vegetation/grass.js +13 -0
- package/src/vegetation/grassClump.js +1179 -0
- package/src/vegetation/importedVegetationMaterial.js +183 -0
- package/src/vegetation/index.js +17 -1
- package/src/vegetation/legacyTreePresets.js +120 -0
- package/src/vegetation/scatter.js +688 -3
- package/src/vegetation/stylizedBush.js +14 -0
- package/src/vegetation/stylizedFlower.js +31 -0
- package/src/vegetation/stylizedFlowers.js +59 -7
- package/src/vegetation/stylizedForest.js +455 -147
- package/src/vegetation/stylizedGrass.js +188 -24
- package/src/vegetation/stylizedTree.js +676 -54
- package/src/vegetation/stylizedTreeFoliage.js +1111 -38
- package/src/vegetation/stylizedUnderstory.js +230 -0
- package/src/vegetation/treeExport.js +262 -47
- package/src/vegetation/treeSurfaceTextures.js +665 -0
- package/src/vegetation/vegetationShaders.js +617 -28
- package/src/version.js +3 -0
- package/src/water/water.js +2 -0
- package/src/water/waterBreakerSystem.js +2 -0
- package/src/water/waterCurrentField.js +1 -0
- package/src/water/waterMaterial.js +3 -0
- package/src/water/waterRain.js +2 -0
- package/src/water/waterScenePasses.js +170 -7
- package/src/water/waterSettings.js +250 -50
- package/src/water/waterShoreMaterial.js +16 -2
- package/src/water/waterShoreStateField.js +1 -1
- package/src/water/waterSplashSystem.js +2 -0
- package/src/water/waterStageSettings.js +60 -0
- package/src/water/waterSurface.js +144 -4
- package/src/water/waterUnderwaterAtmosphere.js +288 -0
- package/src/water/waterVegetation.js +20 -4
- package/src/worldCollision.js +64 -9
- package/types/agents/index.d.ts +1 -0
- package/types/agents/sceneStyleOperations.d.ts +484 -0
- package/types/asset-policy/catalogLicenses.d.ts +7 -0
- package/types/asset-policy/index.d.ts +20 -0
- package/types/assetlib/ambientcg.d.ts +81 -0
- package/types/assetlib/assetRef.d.ts +26 -0
- package/types/assetlib/galleryMaterialFamily.d.ts +13 -0
- package/types/assetlib/importedEntry.d.ts +18 -0
- package/types/assetlib/index.d.ts +16 -0
- package/types/assetlib/kaykit.d.ts +112 -0
- package/types/assetlib/kaykitStaticIndex.d.ts +38 -0
- package/types/assetlib/loadImported.d.ts +56 -0
- package/types/assetlib/opensource3d.d.ts +55 -0
- package/types/assetlib/plateau.d.ts +67 -0
- package/types/assetlib/plateauLandmarks.d.ts +238 -0
- package/types/assetlib/plateauViewer.d.ts +3 -0
- package/types/assetlib/polyhaven.d.ts +90 -0
- package/types/assetlib/polypizza.d.ts +10 -0
- package/types/assetlib/smithsonian.d.ts +9 -0
- package/types/assetlib/sources.d.ts +22 -0
- package/types/assetlib/zip.d.ts +8 -0
- package/types/catalog/manifest.d.ts +26 -0
- package/types/catalog/officialCatalog.d.ts +4 -0
- package/types/catalog/officialCatalogAssetRuntime.d.ts +2 -0
- package/types/catalog/officialCatalogLod.d.ts +63 -0
- package/types/catalog/officialCatalogPlacement.d.ts +49 -0
- package/types/catalog/officialCatalogProvider.d.ts +7 -0
- package/types/character/animationRetarget.d.ts +20 -0
- package/types/character/characterRig.d.ts +87 -0
- package/types/character/characterRuntime.d.ts +5 -0
- package/types/character/freestyleSwimClip.d.ts +5 -0
- package/types/character/groundStabilizer.d.ts +55 -0
- package/types/character/index.d.ts +10 -0
- package/types/character/locomotionActions.d.ts +4 -0
- package/types/character/locomotionStateMachine.d.ts +62 -0
- package/types/character/mannequinAsset.d.ts +12 -0
- package/types/character/mannequinAssetUrl.node.d.ts +1 -0
- package/types/character/modelLoader.d.ts +7 -0
- package/types/character/walkableCharacterRuntime.d.ts +343 -0
- package/types/character/waterInteractionController.d.ts +114 -0
- package/types/cloud/ambientSkyBaker.d.ts +18 -0
- package/types/cloud/cloudLighting.d.ts +38 -0
- package/types/cloud/cloudParams.d.ts +18 -0
- package/types/cloud/cloudReprojection.d.ts +15 -0
- package/types/cloud/cloudStyle.d.ts +1380 -0
- package/types/cloud/cloudStyleSnapshots.d.ts +10 -0
- package/types/cloud/cloudVolume.d.ts +43 -0
- package/types/cloud/heroCloudRecipe.d.ts +167 -0
- package/types/cloud/index.d.ts +12 -0
- package/types/cloud/noise/baseShapeVolume.d.ts +86 -0
- package/types/cloud/noise/cirrusMap.d.ts +24 -0
- package/types/cloud/noise/curlNoise.d.ts +106 -0
- package/types/cloud/noise/erosionVolume.d.ts +58 -0
- package/types/cloud/noise/noiseVolume.d.ts +63 -0
- package/types/cloud/noise/periodicNoise3.d.ts +75 -0
- package/types/cloud/noise/weatherMap.d.ts +227 -0
- package/types/cloud/paramSchema.d.ts +142 -0
- package/types/collisionMetadata.d.ts +11 -0
- package/types/core/generation.d.ts +95 -0
- package/types/core/materialRoles.d.ts +102 -0
- package/types/core/presetDocuments.d.ts +25 -0
- package/types/core/systemStylePolicy.d.ts +4 -0
- package/types/environment/dayCurves.d.ts +47 -0
- package/types/environment/environmentAmbientProbe.d.ts +2 -0
- package/types/environment/environmentGroundFieldPass.d.ts +2 -0
- package/types/environment/environmentMaterialAdapter.d.ts +44 -0
- package/types/environment/environmentMaterialClassifier.d.ts +26 -0
- package/types/environment/environmentPlanarReflection.d.ts +3 -0
- package/types/environment/environmentPresets.d.ts +171 -0
- package/types/environment/environmentRigs.d.ts +13 -0
- package/types/environment/environmentSettings.d.ts +161 -0
- package/types/environment/environmentShaderMaterials.d.ts +14 -0
- package/types/environment/environmentState.d.ts +6 -0
- package/types/environment/environmentSunShadowPass.d.ts +2 -0
- package/types/environment/environmentTextureResolver.d.ts +30 -0
- package/types/environment/environmentTimeOfDay.d.ts +25 -0
- package/types/environment/environmentVertexAo.d.ts +18 -0
- package/types/environment/index.d.ts +27 -0
- package/types/environment/manufacturedMaterialContract.d.ts +129 -0
- package/types/environment/manufacturedReflectionProvider.d.ts +3 -0
- package/types/environment/scanAssetStylize.d.ts +43 -0
- package/types/environment/surfaceMaterialModes.d.ts +14 -0
- package/types/environment/toonLabEnvironmentMaterials.d.ts +139 -0
- package/types/environment/toonLabMaterialPassCoupling.d.ts +7 -0
- package/types/environment/toonLabNormalIntegration.d.ts +29 -0
- package/types/environment/toonLabRockMaterialResolver.d.ts +270 -0
- package/types/environment/toonLabSourceDefaultLit.d.ts +136 -0
- package/types/environment/toonLabSourceLibrary.d.ts +19 -0
- package/types/environment/toonLabSourceMaterials.d.ts +14 -0
- package/types/environment/toonLabSourceSubsurfaceLighting.d.ts +85 -0
- package/types/environment/toonLabSourceTemporal.d.ts +20 -0
- package/types/environment/toonLabSurfaceLighting.d.ts +153 -0
- package/types/environment/toonLabTextureReadiness.d.ts +8 -0
- package/types/environment/toonLabTreeMaterials.d.ts +7 -0
- package/types/environment/transparentMaterialProfile.d.ts +76 -0
- package/types/environment/urbanPropMaterial.d.ts +25 -0
- package/types/ground-shader/groundPrintLayer.d.ts +4 -0
- package/types/ground-shader/groundShaderMaterial.d.ts +11 -0
- package/types/ground-shader/groundShaderSettings.d.ts +90 -0
- package/types/ground-shader/index.d.ts +3 -0
- package/types/index.d.ts +1591 -0
- package/types/lighting/callMeSenseiLightingContract.d.ts +14 -0
- package/types/lighting/colorIntensity.d.ts +44 -0
- package/types/lighting/index.d.ts +12 -0
- package/types/lighting/lightDescriptors.d.ts +803 -0
- package/types/lighting/lightingCapabilities.d.ts +85 -0
- package/types/lighting/lightingDocuments.d.ts +140 -0
- package/types/lighting/lightingFixtures.d.ts +171 -0
- package/types/lighting/lightingGenerator.d.ts +403 -0
- package/types/lighting/lightingPresets.d.ts +264 -0
- package/types/lighting/lightingRuntime.d.ts +401 -0
- package/types/lighting/lightingStyle.d.ts +156 -0
- package/types/lighting/lightingSystem.d.ts +440 -0
- package/types/lighting/toonLabExport.d.ts +46 -0
- package/types/lighting/utils.d.ts +18 -0
- package/types/loaders/index.d.ts +1 -0
- package/types/post/index.d.ts +2 -0
- package/types/post/postGenerator.d.ts +282 -0
- package/types/post/postProcessing.d.ts +16 -0
- package/types/react/index.d.ts +1785 -0
- package/types/renderer/index.d.ts +2 -0
- package/types/renderer/rendererConfiguration.d.ts +8 -0
- package/types/renderer/styleComparison.d.ts +409 -0
- package/types/rock-shader/index.d.ts +8 -0
- package/types/rock-shader/rockGeometryDetail.d.ts +300 -0
- package/types/rock-shader/rockMaterial.d.ts +21 -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 +10 -0
- package/types/rock-shader/rockShaderSettings.d.ts +184 -0
- package/types/rock-shader/rockTangentIntegrity.d.ts +51 -0
- package/types/rock-shader/rockTextureIntegrity.d.ts +61 -0
- package/types/rockgen/export/glbExport.d.ts +58 -0
- package/types/rockgen/heightfield/heightfieldErosion.d.ts +10 -0
- package/types/rockgen/heightfield/heightfieldPatch.d.ts +15 -0
- package/types/rockgen/heightfield/stylizedErosionSim.d.ts +41 -0
- package/types/rockgen/index.d.ts +12 -0
- package/types/rockgen/lod/index.d.ts +6 -0
- package/types/rockgen/lod/rockLodMetrics.d.ts +62 -0
- package/types/rockgen/lod/rockLodPlanner.d.ts +86 -0
- package/types/rockgen/lod/rockLodPolicy.d.ts +76 -0
- package/types/rockgen/lod/rockLodRuntime.d.ts +95 -0
- package/types/rockgen/lod/rockLodSimplifier.d.ts +15 -0
- package/types/rockgen/lod/rockLodValidation.d.ts +16 -0
- package/types/rockgen/mesh/meshAttributes.d.ts +32 -0
- package/types/rockgen/mesh/meshDocument.d.ts +40 -0
- package/types/rockgen/mesh/surfaceNets.d.ts +42 -0
- package/types/rockgen/noise/cellularNoise3.d.ts +24 -0
- package/types/rockgen/noise/prng.d.ts +16 -0
- package/types/rockgen/noise/simplexNoise3.d.ts +2 -0
- package/types/rockgen/noise/valueNoise3.d.ts +12 -0
- package/types/rockgen/rockDocument.d.ts +243 -0
- package/types/rockgen/rockHelpers.d.ts +2 -0
- package/types/rockgen/rockgenPresets.d.ts +10 -0
- package/types/rockgen/rockgenSettings.d.ts +531 -0
- package/types/rockgen/sdf/fieldCompiler.d.ts +20 -0
- package/types/rockgen/sdf/sculptEdits.d.ts +30 -0
- package/types/rockgen/sdf/sdfModifiers.d.ts +19 -0
- package/types/rockgen/sdf/sdfOps.d.ts +8 -0
- package/types/rockgen/sdf/sdfPrimitives.d.ts +22 -0
- package/types/rockgen/surface/c7GeologySurface.d.ts +8 -0
- package/types/runtime/index.d.ts +3 -0
- package/types/runtime/sceneCollisionRuntime.d.ts +94 -0
- package/types/runtime/sceneSurfaceRuntime.d.ts +90 -0
- package/types/runtime/sceneUpdateScheduler.d.ts +28 -0
- package/types/shaders-tsl/anime.d.ts +9 -0
- package/types/shaders-tsl/chunks/character-color.d.ts +6 -0
- package/types/shaders-tsl/chunks/character-highlights.d.ts +12 -0
- package/types/shaders-tsl/chunks/character-lighting.d.ts +20 -0
- package/types/shaders-tsl/chunks/character-material-maps.d.ts +18 -0
- package/types/shaders-tsl/chunks/character-roles.d.ts +21 -0
- package/types/shaders-tsl/chunks/character-scene-lights.d.ts +48 -0
- package/types/shaders-tsl/chunks/character-shadow-color.d.ts +5 -0
- package/types/shaders-tsl/chunks/character-skinning.d.ts +23 -0
- package/types/shaders-tsl/chunks/environment-color.d.ts +9 -0
- package/types/shaders-tsl/chunks/environment-debug.d.ts +24 -0
- package/types/shaders-tsl/chunks/environment-ground-field.d.ts +40 -0
- package/types/shaders-tsl/chunks/environment-lighting.d.ts +22 -0
- package/types/shaders-tsl/chunks/environment-state.d.ts +42 -0
- package/types/shaders-tsl/chunks/environment-sun-shadow.d.ts +19 -0
- package/types/shaders-tsl/chunks/foliage-fog.d.ts +21 -0
- package/types/shaders-tsl/chunks/normalized-hue.d.ts +1 -0
- package/types/shaders-tsl/chunks/pass-depth-color.d.ts +20 -0
- package/types/shaders-tsl/chunks/projected-water-caustics.d.ts +24 -0
- package/types/shaders-tsl/chunks/scene-depth-color-pass.d.ts +39 -0
- package/types/shaders-tsl/chunks/stylized-cloud-shadow.d.ts +9 -0
- package/types/shaders-tsl/chunks/vegetation-style.d.ts +60 -0
- package/types/shaders-tsl/chunks/water-color.d.ts +15 -0
- package/types/shaders-tsl/chunks/water-common.d.ts +9 -0
- package/types/shaders-tsl/chunks/water-foam.d.ts +8 -0
- package/types/shaders-tsl/chunks/water-lighting.d.ts +9 -0
- package/types/shaders-tsl/chunks/water-ripple.d.ts +8 -0
- package/types/shaders-tsl/chunks/water-shore-state.d.ts +7 -0
- package/types/shaders-tsl/chunks/water-waves.d.ts +18 -0
- package/types/shaders-tsl/chunks/world-noise.d.ts +4 -0
- package/types/shaders-tsl/environment-ao-overlay.d.ts +5 -0
- package/types/shaders-tsl/environment.d.ts +34 -0
- package/types/shaders-tsl/flower.d.ts +6 -0
- package/types/shaders-tsl/grass.d.ts +4 -0
- package/types/shaders-tsl/post-composite.d.ts +25 -0
- package/types/shaders-tsl/sky.d.ts +4 -0
- package/types/shaders-tsl/tree-leaf.d.ts +2 -0
- package/types/shaders-tsl/water-breaker.d.ts +15 -0
- package/types/shaders-tsl/water-kelp.d.ts +5 -0
- package/types/shaders-tsl/water-rain.d.ts +10 -0
- package/types/shaders-tsl/water-shore-state-simulation.d.ts +12 -0
- package/types/shaders-tsl/water-simulation.d.ts +5 -0
- package/types/shaders-tsl/water-splash.d.ts +12 -0
- package/types/shaders-tsl/water.d.ts +22 -0
- package/types/shaders-tsl/woody-surface.d.ts +3 -0
- package/types/sky/atmosphereDome.d.ts +2 -0
- package/types/sky/atmosphereParams.d.ts +185 -0
- package/types/sky/atmosphereScattering.d.ts +11 -0
- package/types/sky/atmosphereSky.d.ts +2 -0
- package/types/sky/cloudShadow.d.ts +69 -0
- package/types/sky/godRays.d.ts +5 -0
- package/types/sky/index.d.ts +18 -0
- package/types/sky/nightSky.d.ts +22 -0
- package/types/sky/renderLayers.d.ts +59 -0
- package/types/sky/sceneOverrideLayers.d.ts +10 -0
- package/types/sky/skyColor.d.ts +704 -0
- package/types/sky/skyDayCycle.d.ts +86 -0
- package/types/sky/skyParams.d.ts +3407 -0
- package/types/sky/skyPresets.d.ts +160 -0
- package/types/sky/skyQuality.d.ts +21 -0
- package/types/sky/skyQualityTiers.d.ts +223 -0
- package/types/sky/skyShaderSettings.d.ts +152 -0
- package/types/sky/skyStyleSnapshots.d.ts +11 -0
- package/types/sky/skySystem.d.ts +3 -0
- package/types/sky/skyTimeKeyframes.d.ts +230 -0
- package/types/sky/stylizedSky.d.ts +341 -0
- package/types/sky/sunDriver.d.ts +15 -0
- package/types/sky/timeOfDay.d.ts +145 -0
- package/types/styles/animeGameProfile.d.ts +27 -0
- package/types/styles/index.d.ts +18 -0
- package/types/styles/manufacturedStyleLabeling.d.ts +119 -0
- package/types/styles/neutralStylePresets.d.ts +944 -0
- package/types/styles/sceneLayerDocuments.d.ts +145 -0
- package/types/styles/sceneLookComposition.d.ts +53 -0
- package/types/styles/sceneQualityApplication.d.ts +34 -0
- package/types/styles/sceneQualityProfiles.d.ts +13 -0
- package/types/styles/sceneStyleAudit.d.ts +80 -0
- package/types/styles/sceneStyleRuntime.d.ts +1802 -0
- package/types/styles/styleAdapters.d.ts +14 -0
- package/types/styles/styleApplication.d.ts +47 -0
- package/types/styles/styleBundle.d.ts +19 -0
- package/types/styles/styleBundleProvider.d.ts +44 -0
- package/types/styles/styleDomains.d.ts +18 -0
- package/types/styles/styleInspector.d.ts +59 -0
- package/types/styles/styleMaterialContract.d.ts +46 -0
- package/types/styles/styleMetadata.d.ts +11 -0
- package/types/styles/styleTargetDiscovery.d.ts +48 -0
- package/types/styles/styleTargetLabels.d.ts +32 -0
- package/types/styles/styleTargetMaterialCoverage.d.ts +20 -0
- package/types/styles/styleTransaction.d.ts +10 -0
- package/types/styles/styleTypes.d.ts +66 -0
- package/types/texgen/evaluateTexture.d.ts +40 -0
- package/types/texgen/index.d.ts +7 -0
- package/types/texgen/noise2.d.ts +46 -0
- package/types/texgen/textureAi.d.ts +6 -0
- package/types/texgen/textureGenerators.d.ts +261 -0
- package/types/texgen/texturePresets.d.ts +45 -0
- package/types/texgen/textureSettings.d.ts +121 -0
- package/types/texgen/textureThree.d.ts +13 -0
- package/types/toon/characterRenderPasses.d.ts +3 -0
- package/types/toon/index.d.ts +3 -0
- package/types/toon/settings/alphaSettings.d.ts +125 -0
- package/types/toon/settings/averageShadowSettings.d.ts +39 -0
- package/types/toon/settings/baseTextureSettings.d.ts +39 -0
- package/types/toon/settings/celShadeSettings.d.ts +37 -0
- package/types/toon/settings/contactShadowSettings.d.ts +30 -0
- package/types/toon/settings/eyeHighlightSettings.d.ts +55 -0
- package/types/toon/settings/faceLightingSettings.d.ts +32 -0
- package/types/toon/settings/furSettings.d.ts +23 -0
- package/types/toon/settings/glitterSettings.d.ts +43 -0
- package/types/toon/settings/hairHighlightSettings.d.ts +89 -0
- package/types/toon/settings/indirectLightSettings.d.ts +43 -0
- package/types/toon/settings/localLightSettings.d.ts +46 -0
- package/types/toon/settings/materialMapSettings.d.ts +86 -0
- package/types/toon/settings/outlineSettings.d.ts +125 -0
- package/types/toon/settings/perspectiveRemovalSettings.d.ts +14 -0
- package/types/toon/settings/rimLightSettings.d.ts +79 -0
- package/types/toon/settings/sceneShadowSettings.d.ts +32 -0
- package/types/toon/settings/selfShadowSettings.d.ts +44 -0
- package/types/toon/settings/shadowColorSettings.d.ts +77 -0
- package/types/toon/settings/skinToneSettings.d.ts +30 -0
- package/types/toon/settings/specularSettings.d.ts +96 -0
- package/types/toon/settings/stickerSettings.d.ts +40 -0
- package/types/toon/toonMaterialAdapter.d.ts +883 -0
- package/types/toon/toonSettings.d.ts +1182 -0
- package/types/vegetation/branchTree.d.ts +14 -0
- package/types/vegetation/callMeSenseiGrass.d.ts +8 -0
- package/types/vegetation/compiledTree.d.ts +75 -0
- package/types/vegetation/contactShadowField.d.ts +26 -0
- package/types/vegetation/flowerSpecies.d.ts +107 -0
- package/types/vegetation/grass.d.ts +4 -0
- package/types/vegetation/grassClump.d.ts +7 -0
- package/types/vegetation/grassPalettes.d.ts +29 -0
- package/types/vegetation/importedVegetationMaterial.d.ts +13 -0
- package/types/vegetation/index.d.ts +225 -0
- package/types/vegetation/legacyTreePresets.d.ts +22 -0
- package/types/vegetation/scatter.d.ts +13 -0
- package/types/vegetation/stylizedBush.d.ts +2 -0
- package/types/vegetation/stylizedFlower.d.ts +2 -0
- package/types/vegetation/stylizedFlowers.d.ts +8 -0
- package/types/vegetation/stylizedForest.d.ts +3 -0
- package/types/vegetation/stylizedGrass.d.ts +21 -0
- package/types/vegetation/stylizedTree.d.ts +20 -0
- package/types/vegetation/stylizedTreeFoliage.d.ts +19 -0
- package/types/vegetation/stylizedUnderstory.d.ts +50 -0
- package/types/vegetation/treeExport.d.ts +6 -0
- package/types/vegetation/treeSurfaceTextures.d.ts +72 -0
- package/types/vegetation/vegetationShaders.d.ts +74 -0
- package/types/version.d.ts +1 -0
- package/types/water/index.d.ts +1 -0
- package/types/water/sceneOverrideLayers.d.ts +16 -0
- package/types/water/water.d.ts +17 -0
- package/types/water/waterBreakerSystem.d.ts +46 -0
- package/types/water/waterCurrentField.d.ts +115 -0
- package/types/water/waterInteraction.d.ts +21 -0
- package/types/water/waterMaterial.d.ts +60 -0
- package/types/water/waterNearshorePhase.d.ts +5 -0
- package/types/water/waterRain.d.ts +17 -0
- package/types/water/waterRippleSimulation.d.ts +52 -0
- package/types/water/waterScenePasses.d.ts +70 -0
- package/types/water/waterSettings.d.ts +648 -0
- package/types/water/waterShoreMaterial.d.ts +3 -0
- package/types/water/waterShoreStateField.d.ts +2 -0
- package/types/water/waterSplashSystem.d.ts +2 -0
- package/types/water/waterStageSettings.d.ts +9 -0
- package/types/water/waterSurface.d.ts +2 -0
- package/types/water/waterUnderwaterAtmosphere.d.ts +103 -0
- package/types/water/waterVegetation.d.ts +16 -0
- package/types/worldCollision.d.ts +22 -0
- package/AGENTS.md +0 -254
- package/ATTRIBUTION.md +0 -78
- package/docs/characters.md +0 -144
- package/docs/debug-panel.md +0 -126
- package/docs/docs.css +0 -589
- package/docs/environment.md +0 -186
- package/docs/getting-started.md +0 -180
- package/docs/index.html +0 -14
- package/docs/lab-architecture.md +0 -100
- package/docs/lighting.md +0 -825
- package/docs/main.jsx +0 -752
- package/docs/mcp.md +0 -97
- package/docs/post-processing.md +0 -98
- package/docs/settings-reference.md +0 -1878
- package/docs/shader-constants.md +0 -77
- package/docs/sky.md +0 -182
- package/docs/style-labs.md +0 -309
- package/docs/texture-lab.md +0 -135
- package/docs/toon-shading.md +0 -183
- package/docs/tsl-conventions.md +0 -167
- package/docs/vegetation-sky.md +0 -275
- package/docs/water.md +0 -430
- package/docs/weather.md +0 -200
- package/docs/world-scale.md +0 -111
- package/mcp/style-lab-tools.mjs +0 -371
- package/src/ambientfx/INTEGRATION.md +0 -164
- package/src/ambientfx/ambientFxPresets.js +0 -83
- package/src/ambientfx/ambientFxSettings.js +0 -368
- package/src/ambientfx/emitters.js +0 -169
- package/src/ambientfx/index.js +0 -5
- package/src/ambientfx/particleBackbone.js +0 -493
- package/src/ambientfx/stylizedAmbientFx.js +0 -450
- package/src/biome/biomeGenerator.js +0 -385
- package/src/biome/biomeRuntime.js +0 -299
- package/src/biome/index.js +0 -2
- package/src/buildinggen/buildingAsset.js +0 -44
- package/src/buildinggen/buildingGrammar.js +0 -311
- package/src/buildinggen/buildingMesh.js +0 -451
- package/src/buildinggen/buildingPresets.js +0 -46
- package/src/buildinggen/buildingRecipe.js +0 -100
- package/src/buildinggen/buildingSettings.js +0 -238
- package/src/buildinggen/index.js +0 -6
- package/src/camera/cameraDirector.js +0 -157
- package/src/camera/cameraGenerator.js +0 -367
- package/src/camera/cameraRig.js +0 -570
- package/src/camera/cameraSettings.js +0 -236
- package/src/camera/index.js +0 -7
- package/src/catalog/builtinEntries.js +0 -245
- package/src/catalog/catalog.js +0 -210
- package/src/catalog/index.js +0 -3
- package/src/core/shaderBackend.js +0 -24
- package/src/debrisgen/debrisFields.js +0 -544
- package/src/debrisgen/debrisGenerator.js +0 -1929
- package/src/debrisgen/debrisPalettes.js +0 -71
- package/src/debrisgen/debrisPhysics.js +0 -198
- package/src/debrisgen/debrisPresets.js +0 -162
- package/src/debrisgen/debrisSettings.js +0 -333
- package/src/debrisgen/debrisTextures.js +0 -380
- package/src/debrisgen/index.js +0 -5
- package/src/debug/fieldValues.js +0 -95
- package/src/debug/index.js +0 -7
- package/src/debug/settingsPanel.js +0 -170
- package/src/fauna/INTEGRATION.md +0 -174
- package/src/fauna/boids.js +0 -861
- package/src/fauna/faunaBodies.js +0 -492
- package/src/fauna/faunaPresets.js +0 -52
- package/src/fauna/faunaSettings.js +0 -525
- package/src/fauna/index.js +0 -5
- package/src/fauna/stylizedFauna.js +0 -395
- package/src/game-feel/gameFeelGenerator.js +0 -402
- package/src/game-feel/gameFeelRuntime.js +0 -549
- package/src/game-feel/index.js +0 -2
- package/src/motion/index.js +0 -5
- package/src/motion/motionClip.js +0 -441
- package/src/motion/motionController.js +0 -628
- package/src/motion/motionDocuments.js +0 -225
- package/src/motion/motionGraph.js +0 -307
- package/src/motion/motionSettings.js +0 -222
- package/src/pathgen/index.js +0 -7
- package/src/pathgen/pathBridge.js +0 -232
- package/src/pathgen/pathPresets.js +0 -35
- package/src/pathgen/pathRibbon.js +0 -410
- package/src/pathgen/pathRouter.js +0 -380
- package/src/pathgen/pathSettings.js +0 -335
- package/src/pathgen/pathTextures.js +0 -123
- package/src/pathgen/stylizedPaths.js +0 -453
- package/src/propgen/generatorsWave1.js +0 -379
- package/src/propgen/generatorsWave2.js +0 -462
- package/src/propgen/index.js +0 -5
- package/src/propgen/propAsset.js +0 -323
- package/src/propgen/propParts.js +0 -170
- package/src/propgen/propPlacement.js +0 -459
- package/src/propgen/propPresets.js +0 -82
- package/src/propgen/propSettings.js +0 -395
- package/src/soundscape/index.js +0 -4
- package/src/soundscape/soundscapeGenerator.js +0 -179
- package/src/soundscape/soundscapeRuntime.js +0 -806
- package/src/soundscape/soundscapeSettings.js +0 -292
- package/src/stylizedTerrain.js +0 -631
- package/src/stylizedWorld.js +0 -903
- package/src/vegetation/treeRecipe.js +0 -647
- package/src/vfxgen/INTEGRATION.md +0 -145
- package/src/vfxgen/core/burstBackbone.js +0 -380
- package/src/vfxgen/core/projectileCore.js +0 -92
- package/src/vfxgen/core/spriteShapes.js +0 -98
- package/src/vfxgen/core/trailRibbon.js +0 -272
- package/src/vfxgen/core/vfxRandom.js +0 -29
- package/src/vfxgen/effects/emitHelpers.js +0 -37
- package/src/vfxgen/effects/magicEffects.js +0 -162
- package/src/vfxgen/effects/movementEffects.js +0 -87
- package/src/vfxgen/effects/weaponEffects.js +0 -118
- package/src/vfxgen/index.js +0 -18
- package/src/vfxgen/moves/moveController.js +0 -146
- package/src/vfxgen/moves/moveLibrary.js +0 -335
- package/src/vfxgen/vfxPresets.js +0 -98
- package/src/vfxgen/vfxSettings.js +0 -384
- package/src/vfxgen/vfxSystem.js +0 -449
- package/src/vfxgen/weapons/stylizedWeapons.js +0 -137
- package/src/villagegen/index.js +0 -4
- package/src/villagegen/stylizedVillage.js +0 -490
- package/src/villagegen/villageArchetypes.js +0 -160
- package/src/villagegen/villageNames.js +0 -40
- package/src/villagegen/villageSites.js +0 -105
- package/src/weather/index.js +0 -6
- package/src/weather/weatherPrecipitation.js +0 -221
- package/src/weather/weatherPresets.js +0 -258
- package/src/weather/weatherSettings.js +0 -269
- package/src/weather/weatherSystem.js +0 -871
- package/src/worldMinimap.js +0 -214
- package/src/worldPresets.js +0 -125
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: scene-style-application
|
|
3
|
+
description: Inspect, plan, apply, and verify ToonLab style bundles on labeled scenes without copying Lab or showcase code.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Scene style application
|
|
7
|
+
|
|
8
|
+
Ask the developer whether application should be **strict** or **advisory** before
|
|
9
|
+
changing the scene. Strict mode stops on unlabeled, invalid, or unsupported
|
|
10
|
+
targets. Advisory mode applies valid labeled targets and reports every gap.
|
|
11
|
+
|
|
12
|
+
Use the package contract in this order:
|
|
13
|
+
|
|
14
|
+
1. Label host-owned objects with `createStyleTargetLabel()` and
|
|
15
|
+
`labelStyleTarget()` from `@call-me-sensei/toonlab/styles`.
|
|
16
|
+
For every newly modeled, generated, or imported renderable, assign a stable
|
|
17
|
+
material ID and at least one valid semantic material role to **every material
|
|
18
|
+
slot** in the label's versioned `materials` contract. A root domain label by
|
|
19
|
+
itself is incomplete for a multi-material object. Split incompatible surface
|
|
20
|
+
regions or provide an explicit material-ID mask; never guess a production
|
|
21
|
+
role from names or RGB values.
|
|
22
|
+
For an imported manufactured asset, call
|
|
23
|
+
`proposeManufacturedStyleTargetLabel()` first. Review every generic,
|
|
24
|
+
conflicting, or low-confidence entry, supply explicit `materialOverrides`,
|
|
25
|
+
then call `applyManufacturedStyleTargetLabelProposal()`. Never lower the
|
|
26
|
+
confidence threshold merely to make strict application pass.
|
|
27
|
+
2. Run `toonlab inspect`, `toonlab audit`, then `toonlab plan` against a portable
|
|
28
|
+
`toonlab/scene-style-manifest` document. The OSS MCP tools with the same names
|
|
29
|
+
are equivalent when MCP is available.
|
|
30
|
+
3. Show the plan, including unsupported domains and custom-material exemptions.
|
|
31
|
+
4. Run `toonlab apply` only after the strict/advisory choice is known.
|
|
32
|
+
5. Run `toonlab verify`, the consumer build, and visual checks for every camera,
|
|
33
|
+
renderer, quality profile, and scenario affected.
|
|
34
|
+
|
|
35
|
+
When the scene combines ground-bound content with shoreline water, use one
|
|
36
|
+
`createSceneSurfaceRuntime()` from `@call-me-sensei/toonlab/runtime` before
|
|
37
|
+
creating grass, water, or derived object Y positions. Its `createGrassField()`,
|
|
38
|
+
`createWaterSurface()`, and `place()` methods are the default integration path.
|
|
39
|
+
After rendering the shared shadow pass, its strict readiness audit must pass;
|
|
40
|
+
do not hand off a page that merely built or set shadow flags.
|
|
41
|
+
|
|
42
|
+
For a package-generated `StylizedTree`, preserve an authored `trunkMap`; when
|
|
43
|
+
it is absent, let Call Me Sensei select `call-me-sensei-bark-v1` or choose an
|
|
44
|
+
explicit registered ID from `getTreeSurfaceProfileOptions()`. Never leave bark
|
|
45
|
+
flat because no one chose a texture. Verify every trunk is both a shared-pass
|
|
46
|
+
caster and receiver. `trunkSurfaceProfile: 'none'` is a deliberate opt-out,
|
|
47
|
+
not a fallback.
|
|
48
|
+
|
|
49
|
+
Do not hand off an authored 3D object while any render material is absent from
|
|
50
|
+
the contract. In strict mode, missing material IDs/roles or a mixed atlas
|
|
51
|
+
without a split/mask is a blocking failure; fix the asset metadata before
|
|
52
|
+
applying the bundle. In advisory mode, report the same gap explicitly and do
|
|
53
|
+
not describe the object as style-bundle-ready.
|
|
54
|
+
|
|
55
|
+
`applyStyleBundle({ mode: 'strict' })` reconciles the declared material
|
|
56
|
+
contract against the live material slots before mutation. Keep the broader
|
|
57
|
+
scene audit as the reporting gate, but do not bypass a direct strict rejection
|
|
58
|
+
by calling a lower-level shader adapter.
|
|
59
|
+
|
|
60
|
+
Never import from a ToonLab `labs/` directory, copy a showcase scene, or depend
|
|
61
|
+
on a retained reference-scene implementation. Labs are authoring/test clients;
|
|
62
|
+
public package exports are the runtime authority. If a needed behavior is not a
|
|
63
|
+
public export, record the package gap rather than copying private code.
|
|
64
|
+
|
|
65
|
+
The host owns authored XZ layout, terrain shape/sampler, gameplay, dynamic
|
|
66
|
+
physics, navigation, and content identity. The shared surface runtime owns
|
|
67
|
+
derived ground heights and terrain/water coordination. The scene style runtime
|
|
68
|
+
owns conservative static collision for labeled manufactured, rock, prop, and
|
|
69
|
+
tree targets unless the label declares another policy. Call
|
|
70
|
+
`styleRuntime.collision.assertReady()` before handoff and report its per-target
|
|
71
|
+
plan. Do not add scene-local tree/rock/bench blocker lists. Use explicit
|
|
72
|
+
`none`, `blockers`, `convex`, or `trimesh` metadata when bounds are wrong; use
|
|
73
|
+
`createRapierCollisionAdapter()` for an existing Rapier world. A style bundle
|
|
74
|
+
owns visual treatment and package-managed systems.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: style-presets
|
|
3
|
+
description: Explicitly select and record the intended ToonLab style or preset at every style-aware call site, distinguish neutral-default factories from Call Me Sensei-default factories, and audit overrides before reporting a custom integration note. Use before authoring environment, vegetation, grass, water, rock, ground, sky, cloud, or post settings, and whenever a subsystem looks unexpectedly unstyled.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Name the preset
|
|
7
|
+
|
|
8
|
+
This skill makes an individual call site explicit; it does not imply that every
|
|
9
|
+
listed subsystem is part of a live Lab. Sky and Cloud focused authoring is live.
|
|
10
|
+
Weather, Climate, and automatic full-world composition remain lower-level APIs
|
|
11
|
+
for users who want to assemble those systems in their own application.
|
|
12
|
+
|
|
13
|
+
Style-aware ToonLab factories take a `preset`, a `style`, or both. Some
|
|
14
|
+
factories intentionally resolve a neutral/default treatment when the selector
|
|
15
|
+
is omitted; Rock and Ground already default to Call Me Sensei, while
|
|
16
|
+
Cloud has no named style at all since the volumetric rebuild retired them.
|
|
17
|
+
Always pass the intended selector anyway so the call site and capture manifest
|
|
18
|
+
are auditable. Never claim that every omitted selector falls back to neutral.
|
|
19
|
+
|
|
20
|
+
Omitting a selector on the neutral-default factories is one of the most
|
|
21
|
+
expensive mistakes a ToonLab agent can make. In one capability test it hit
|
|
22
|
+
three independent subsystems, each investigated as a custom integration note when the
|
|
23
|
+
actual cause was a missing selector or an overridden preset field.
|
|
24
|
+
|
|
25
|
+
## The rule
|
|
26
|
+
|
|
27
|
+
```js
|
|
28
|
+
// WRONG for a Call Me Sensei scene — resolves the vegetation baseline.
|
|
29
|
+
createVegetationShaderScopeSettings('tree', { foliage: { ... } });
|
|
30
|
+
|
|
31
|
+
// RIGHT
|
|
32
|
+
createVegetationShaderScopeSettings('tree', {
|
|
33
|
+
preset: 'call_me_sensei',
|
|
34
|
+
foliage: { ... },
|
|
35
|
+
});
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Do this for every domain, on the **first** call, not as a later refinement.
|
|
39
|
+
|
|
40
|
+
## Where it bites
|
|
41
|
+
|
|
42
|
+
| Factory | Name this | Actual default behavior |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| `applyEnvironmentShader` | `preset: 'call_me_sensei'`, plus the intended `scenario` | The adapter accepts the selectors directly and composes preset, `settings`, then explicit overrides. `resolveEnvironmentPreset` remains available when plain settings data is needed elsewhere. |
|
|
45
|
+
| `createVegetationShaderScopeSettings` | `preset: 'call_me_sensei'` | Omitting it resolves the neutral vegetation baseline. |
|
|
46
|
+
| `createGrassSettings` / grass fields | `preset: 'call_me_sensei_clump'` for the first-party meadow, or `'anime_clump'` for the short narrow tuft recipe | Omitting it resolves neutral grass settings. These presets differ in geometry/coverage, not only colour. `createCallMeSenseiGrassField` defaults to the meadow and honors an explicit alternate preset. |
|
|
47
|
+
| `createWaterSettings` | `preset: <water body>` **and** `style: 'call_me_sensei'` | Omitting selectors resolves Lake with the default rendition. The Call Me Sensei style owns `colorTone: 'anime'`; any non-`classic` tone intentionally owns its palette/fade/reflection block, while `classic` leaves those per-key values authorable. |
|
|
48
|
+
| `createRockShaderSettings` / `applyRockShader` | `preset: 'call_me_sensei'` | Already defaults to Call Me Sensei. Textures are optional: the fallback is first-party generated 256 px data and the application report identifies its source. |
|
|
49
|
+
| `createGroundShaderSettings` | `preset: 'call_me_sensei'` | Already defaults to Call Me Sensei. |
|
|
50
|
+
| `createSkySettings` | `style: 'call_me_sensei'`, plus the intended `scenario` | Omitting style resolves the default sky rendition. |
|
|
51
|
+
| `createCloudParams` / `SkySystem.applyPreset` | no preset id | The volumetric rebuild retired the named cloud styles; the eight replacement looks are whole-sky presets. Omitting parameters resolves the published schema defaults. |
|
|
52
|
+
| `createPostProcessingSettings` | `preset: 'call_me_sensei'` | Omitting it resolves `off`. |
|
|
53
|
+
|
|
54
|
+
## Overriding a preset field is a deliberate act
|
|
55
|
+
|
|
56
|
+
Changing one key of a first-party preset is indistinguishable, at the call site,
|
|
57
|
+
from configuring an unstyled system. Real examples, all of which produced a bug
|
|
58
|
+
report against ToonLab before the cause was found:
|
|
59
|
+
|
|
60
|
+
- `groundAdoptStrength: 0.04` over the shipped meadow's `1` — grass then never adopted
|
|
61
|
+
the ground colour, and the *mechanism* was reported as broken.
|
|
62
|
+
- `colorTone: 'classic'` over the studio `'anime'` — the lagoon deliberately
|
|
63
|
+
left the studio tone, after which its palette/fade/reflection values needed
|
|
64
|
+
explicit authorship.
|
|
65
|
+
- A bare `createVegetationShaderScopeSettings()` plus ~25 hand-authored fields —
|
|
66
|
+
three revisions of look development on the wrong base.
|
|
67
|
+
|
|
68
|
+
So: **before overriding a preset field, state why the shipped value is wrong for
|
|
69
|
+
this scene**, in a comment, naming the scene fact the shared IP treatment cannot
|
|
70
|
+
know — plane extent, bed depth, camera distance, a specific art-direction target
|
|
71
|
+
with a measured value. If you cannot name one, do not override it.
|
|
72
|
+
|
|
73
|
+
## When a subsystem looks wrong
|
|
74
|
+
|
|
75
|
+
Before concluding that ToonLab lacks a capability, check, in this order:
|
|
76
|
+
|
|
77
|
+
1. **Was a preset named?** Not "is a preset applied somewhere" — was one passed
|
|
78
|
+
to *this* factory, at *this* call site.
|
|
79
|
+
2. **Was a preset field overridden?** Diff your options against the shipped
|
|
80
|
+
preset's settings in the package source.
|
|
81
|
+
3. **Does the package or repository lab do it differently?** Inspect the
|
|
82
|
+
installed preset registry/source first. If working in a ToonLab repository
|
|
83
|
+
checkout, open the matching lab and compare the public API call and values it
|
|
84
|
+
boots. Labs are not present in the npm tarball and are never runtime imports.
|
|
85
|
+
4. **Only then** record a custom integration note.
|
|
86
|
+
|
|
87
|
+
Steps 1–3 take minutes. Skipping them cost, in one run, several days of agent
|
|
88
|
+
time and produced register entries claiming gaps that did not exist.
|
|
89
|
+
|
|
90
|
+
## Introspection is limited, so be explicit
|
|
91
|
+
|
|
92
|
+
Not every resolved settings object records which preset produced it. Water and
|
|
93
|
+
Rock retain selector identity, while scoped vegetation, Grass, Ground, and
|
|
94
|
+
Cloud settings are normalized value objects. A few options are
|
|
95
|
+
**compile flags** rather than settings and never appear on the resolved object
|
|
96
|
+
at all — `groundField` on grass is one, so `'groundField' in settings` reports
|
|
97
|
+
`false` in a fully working scene.
|
|
98
|
+
|
|
99
|
+
Therefore: log the preset id you passed, at construction, next to the subsystem
|
|
100
|
+
name. It is the only durable record, and it makes a wrong base obvious in the
|
|
101
|
+
console instead of three revisions later in a render.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: toon-shading
|
|
3
|
+
description: Help developers use ToonLab character toon shading, toon settings, presets, material roles, outlines, shadows, highlights, fur, or stickers.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Toon Shading
|
|
7
|
+
|
|
8
|
+
Use this skill when a developer wants ToonLab character toon materials, toon
|
|
9
|
+
settings, preset documents, material-role handling, outlines, hair highlights,
|
|
10
|
+
rim light, shadows, stickers, glitter, fur, or debug views in their app.
|
|
11
|
+
|
|
12
|
+
Public imports:
|
|
13
|
+
- `@call-me-sensei/toonlab/toon`
|
|
14
|
+
- `@call-me-sensei/toonlab/toon-settings`
|
|
15
|
+
|
|
16
|
+
Read first:
|
|
17
|
+
- `agents/references/anime-art-direction.md`
|
|
18
|
+
- `agents/references/style-bundles.md`
|
|
19
|
+
- `agents/references/runtime-entry-points.md`
|
|
20
|
+
|
|
21
|
+
Developer guidance:
|
|
22
|
+
- Apply toon shading to app-owned Three.js character roots and meshes.
|
|
23
|
+
- The host app owns character loading, animation, input, camera, persistence,
|
|
24
|
+
and asset URLs.
|
|
25
|
+
- The optional CC0 qualification mannequin is not bundled in npm. Load the
|
|
26
|
+
immutable public-R2 URL and provenance from `TOONLAB_MANNEQUIN_ASSET` in
|
|
27
|
+
`@call-me-sensei/toonlab/character`, or use the host project's own mannequin.
|
|
28
|
+
Never substitute a repository `public/characters/mannequin.glb` path when
|
|
29
|
+
testing an installed package. After downloading, verify its byte count,
|
|
30
|
+
SHA-256, and 46 clips before applying the toon shader.
|
|
31
|
+
- Use settings and preset documents for portable looks instead of lab HUD
|
|
32
|
+
state.
|
|
33
|
+
- Use ToonLab's TSL/NodeMaterial path; do not advise raw GLSL or
|
|
34
|
+
`ShaderMaterial` forks for ToonLab toon features.
|
|
35
|
+
- Do not rely on `assets-local/` or lab-only model discovery.
|
|
36
|
+
|
|
37
|
+
Verify:
|
|
38
|
+
- Run the consumer app's normal build and inspect the character under at least
|
|
39
|
+
one lit and one shadowed view.
|
|
40
|
+
- Record `applyToonShader()`'s converted mesh count, material-role summary,
|
|
41
|
+
shader mode, and selected preset. A loaded GLB is not proof that cel shading
|
|
42
|
+
was applied.
|
|
43
|
+
- Toggle the relevant setting or preset to confirm the app is not hard-coded to
|
|
44
|
+
lab defaults.
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vegetation-sky
|
|
3
|
+
description: Help users apply ToonLab grass, flowers, trees, Tree/Grass/Flower shader profiles, and the live Sky/Cloud authoring surfaces to an existing scene.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Vegetation, Sky, and Cloud
|
|
7
|
+
|
|
8
|
+
Use these focused systems on an existing scene with host-supplied placements,
|
|
9
|
+
terrain, lighting coordination, and current conditions. The Sky and Cloud Labs
|
|
10
|
+
are live authoring tools; they do not replace whole-scene composition.
|
|
11
|
+
|
|
12
|
+
Public imports:
|
|
13
|
+
- `@call-me-sensei/toonlab/vegetation`
|
|
14
|
+
- `@call-me-sensei/toonlab/vegetation-shaders`
|
|
15
|
+
- `@call-me-sensei/toonlab/grass-palettes`
|
|
16
|
+
- `@call-me-sensei/toonlab/sky`
|
|
17
|
+
- `@call-me-sensei/toonlab/cloud`
|
|
18
|
+
- `@call-me-sensei/toonlab/grass`
|
|
19
|
+
|
|
20
|
+
Read first:
|
|
21
|
+
- `agents/references/anime-art-direction.md`
|
|
22
|
+
- `agents/references/style-bundles.md`
|
|
23
|
+
- `agents/references/runtime-entry-points.md`
|
|
24
|
+
|
|
25
|
+
User guidance:
|
|
26
|
+
- Add vegetation and sky objects to app-owned scenes, terrain, and render loops.
|
|
27
|
+
- Produce `placements` with the scatter helpers rather than by hand. Across the
|
|
28
|
+
ground heightfield use `scatterInRect`, `scatterGrassAround` or
|
|
29
|
+
`scatterForest`. For a surface that is **not single-valued in y** — a cliff
|
|
30
|
+
cap, a ledge, a shelf, a rock platform, anything with terrain both above and
|
|
31
|
+
below it — those cannot express the placement at all; use
|
|
32
|
+
`scatterOnSurface({ surfaces, density | count, minSpacing, mask, weightAt,
|
|
33
|
+
normalBlend })`. Surfaces are discs in world space,
|
|
34
|
+
`{ center, radius, normal?, seed? }`, which is the shape a rock or cliff
|
|
35
|
+
module already publishes for its caps. Spacing is measured in 3D so stacked
|
|
36
|
+
caps do not starve each other, each surface has its own deterministic stream
|
|
37
|
+
so adding one does not reshuffle the rest, and the returned placements carry
|
|
38
|
+
`normal`, `forward` and `yaw` so an aligned field does not have to derive
|
|
39
|
+
orientation itself. The `(x, z)` mask factories and `combineMasks` compose
|
|
40
|
+
with it unchanged.
|
|
41
|
+
- Pair it with `createCapEdgeWeight({ rimBias: 0.05, falloff, break })`. A cap that
|
|
42
|
+
stays dense all the way to its rim reads as a flat green disc stuck onto the
|
|
43
|
+
rock; real soil caps thin toward a broken, slightly overhanging edge. Keep
|
|
44
|
+
`rimBias` near zero for soil: high values push coverage into an outer annulus
|
|
45
|
+
and work against the edge falloff. Use `falloff` and `break` for the ragged
|
|
46
|
+
transition.
|
|
47
|
+
- Use async `createCallMeSenseiGrassField({ placements, variant })` for
|
|
48
|
+
ToonLab's first-party procedural grass. `primary` is the accepted default;
|
|
49
|
+
`secondary` is the denser alternate. Both generate deterministic LOD0/1/2
|
|
50
|
+
geometry and the material directly from package code. They have no GLB,
|
|
51
|
+
image, or package-owned URL dependency. The returned default is a
|
|
52
|
+
`StylizedGrassClumpField`; use `RetainedGrassClumpField` only when the caller
|
|
53
|
+
deliberately supplies custom geometry or material.
|
|
54
|
+
- Keep the field's package-default spatial frustum culling enabled for outdoor
|
|
55
|
+
scenes. It chunks placements, rejects offscreen chunks/records, and compacts
|
|
56
|
+
visible records into the existing three LOD buffers. Read `cullingStats` for
|
|
57
|
+
visible/culled counts; tune `chunkSize` or `cullPadding` only for a measured
|
|
58
|
+
world-scale need. Never set `frustumCulling: false` as a meadow default.
|
|
59
|
+
- Keep the factory's default `call_me_sensei_clump` preset unless the developer
|
|
60
|
+
explicitly requests another style. It is the accepted meadow preset: 40
|
|
61
|
+
upright overlapping blades per primary clump, full ground-field adoption,
|
|
62
|
+
texture-free watercolor lift, translucent stroke layering, and three LODs
|
|
63
|
+
without an implicit terminal hard cull. Do not replace it with a generic
|
|
64
|
+
single-blade field, a repository asset, or example-local material settings.
|
|
65
|
+
Reject dark or dirty roots, isolated patches, tangled silhouettes,
|
|
66
|
+
bare-ground pinholes at normal density, and straight coverage boundaries.
|
|
67
|
+
Compare both composition and grass-close views against the frozen controlled
|
|
68
|
+
source mode.
|
|
69
|
+
- Preserve ground hue in the Call Me Sensei default. Its neutral
|
|
70
|
+
`groundAdoptTint` may lift exposure uniformly, but `tipHueShift` and
|
|
71
|
+
`tipDesaturation` remain zero: green ground produces only shades of green.
|
|
72
|
+
Hue shifts remain public profile parameters for explicitly authored styles.
|
|
73
|
+
LOD0/1/2 reduce 40/14/6 primary blades and widen retained strokes to keep
|
|
74
|
+
integrated coverage within 2% of LOD0. Reject any camera-distance change
|
|
75
|
+
that makes the terrain appear to change color.
|
|
76
|
+
- Ground-field sampling is a compile option; the source is the shared
|
|
77
|
+
environment ground-field pass. Prefer `createSceneStyleRuntime()` and label
|
|
78
|
+
terrain `terrain.ground` plus grass `vegetation.grass`; the bundle then marks
|
|
79
|
+
writers and owns the pass automatically. For a manual subsystem integration,
|
|
80
|
+
create the pass after all writer meshes exist, call its `update()` every frame before grass, require
|
|
81
|
+
`writerCount > 0` and `ready`, and call `invalidate()` after repainting a
|
|
82
|
+
writer without a transform change.
|
|
83
|
+
- In the public package, use `LEGACY_TREE_PRESETS` and `createLegacyTree()` for the 12
|
|
84
|
+
supported pre-species silhouettes. Use `BranchTree` when the developer wants
|
|
85
|
+
recursive branching, five broadleaf silhouettes, leaf color/texture plus a
|
|
86
|
+
portable lit/shadow/crown palette, independent leaf `coverageScale`, bark
|
|
87
|
+
color/texture, authored trunk bend/twist/taper, roots, portable documents,
|
|
88
|
+
and the shared Tree Shader. `branches.children` counts lateral children;
|
|
89
|
+
the generator also continues the leader so the trunk does not end in a stump.
|
|
90
|
+
`BranchTree` is the focused portable wrapper around `StylizedTree` with
|
|
91
|
+
`skeleton.generator: 'branching'`; choose the normal blob-crown tree when a
|
|
92
|
+
solid anime foliage mass matters more than a visible recursive skeleton.
|
|
93
|
+
Its current crown is tip-driven: `canopyWidth`, `canopyDepth`, and
|
|
94
|
+
`leafPlacement` are fixed by the wrapper, while `coverageScale` remains the
|
|
95
|
+
supported density control. Use `StylizedTree` directly when the crown
|
|
96
|
+
geometry itself must be authored; do not pass ignored BranchTree options.
|
|
97
|
+
Preserve an authored `trunkMap`. If it is absent, the Call Me Sensei preset
|
|
98
|
+
and bundle select `call-me-sensei-bark-v1` automatically. Use
|
|
99
|
+
`getTreeSurfaceProfileOptions()` when the developer asks the agent to choose
|
|
100
|
+
another registered bark surface; never leave the trunk bare by accident,
|
|
101
|
+
and use `trunkSurfaceProfile: 'none'` only for a deliberate flat-color art
|
|
102
|
+
direction. Verify every trunk both casts and receives in shared-pass
|
|
103
|
+
coverage telemetry.
|
|
104
|
+
Do not select, invent, or claim support for a botanical species. The large
|
|
105
|
+
taxonomy/species roster visible in repository labs is experimental and is
|
|
106
|
+
not a package API.
|
|
107
|
+
- Author and route the independent `TREE_SHADER_PROFILE`,
|
|
108
|
+
`GRASS_SHADER_PROFILE`, and `FLOWER_SHADER_PROFILE` through the bundle's
|
|
109
|
+
`treeShader`, `grassShader`, and `flowerShader` slots. They share a renderer
|
|
110
|
+
family and semantic material contract, but serialize and apply independently.
|
|
111
|
+
Keep asset albedo and legacy/BranchTree geometry/material inputs separate from all
|
|
112
|
+
three shader treatments.
|
|
113
|
+
- Grass palettes update base, tip, and shadow tint together; they do not change
|
|
114
|
+
shadow strength, wind, or current weather.
|
|
115
|
+
- Use the public versioned Grass, vegetation-shader, legacy/BranchTree/flower recipe, and Sky
|
|
116
|
+
preset document APIs for portable data; do not copy lab-local validators.
|
|
117
|
+
- Treat Sky as one integrated World System, not a separate Shader Lab. Its
|
|
118
|
+
shader, sun, clouds, stars, and procedural motion form one system preset with
|
|
119
|
+
exactly 46 portable art fields; dome radius and quality are not in it.
|
|
120
|
+
- Cloud is a raymarched volumetric deck. The painted source/composition/card
|
|
121
|
+
pipeline was replaced outright: `createCloudSourceDocument`,
|
|
122
|
+
`createCloudCompositionDocument`, `createCloudField` and
|
|
123
|
+
`createCloudShaderSettings` no longer exist. Build the sky with
|
|
124
|
+
`SkySystem.create({ renderer, scene, camera })` and author it with
|
|
125
|
+
`applyPreset(skyParams)`, whose `cloud` block is the six groups shape,
|
|
126
|
+
lighting, wind, cirrus, haze and fade. `applyPreset` fully replaces sky
|
|
127
|
+
state; omitted fields fall back to the schema default, not to what is on
|
|
128
|
+
screen.
|
|
129
|
+
- `sky.settings` is the authored baseline and `sky.renderedSettings` is the
|
|
130
|
+
current named-layer composition. Give Lighting, Weather, and other scene
|
|
131
|
+
owners unique `setSceneOverrideLayer` ids and clear only their own id.
|
|
132
|
+
- For world integration, let the host game own the sun/light adapter. Lighting
|
|
133
|
+
is not a stable public package or bundle domain; coordinate project-local
|
|
134
|
+
lighting through explicit Sky, Weather, Water, and vegetation adapters.
|
|
135
|
+
- The composed-world sun adapter is `setSun({ direction, color, sky })`; it
|
|
136
|
+
keeps the real light/shadows and Grass, Flower, Forest, Ambient FX, Sky, and
|
|
137
|
+
Water scene inputs aligned without changing their portable presets.
|
|
138
|
+
- Sky quality is compile-time: low/medium/high compile 2/3/4 cloud octaves,
|
|
139
|
+
custom `{ cloudOctaves: 1..5 }` is supported, and `sky.setQuality()` rebuilds
|
|
140
|
+
the material while preserving authored settings and active layers.
|
|
141
|
+
- Keep current wind, wetness, snow, interaction targets, weather, lighting,
|
|
142
|
+
camera, and export destinations owned by the host app.
|
|
143
|
+
- **Start from a public package preset or a portable Lab export.** The browser
|
|
144
|
+
Labs author and preview settings, while the package registry and imported
|
|
145
|
+
documents are the runtime sources of truth. Never import Lab UI code into an
|
|
146
|
+
application. Water and Sky keep their controls inside their complete system
|
|
147
|
+
documents rather than requiring hidden companion settings.
|
|
148
|
+
- **Always name the preset.** `createVegetationShaderScopeSettings(scope, {...})`
|
|
149
|
+
with no `preset` silently resolves an anonymous `default` — not the studio
|
|
150
|
+
look — and does not warn. Pass `preset: 'call_me_sensei'` explicitly on the
|
|
151
|
+
first call. See the `style-presets` skill; this single omission has taken a
|
|
152
|
+
whole vegetation look onto the wrong base for several revisions.
|
|
153
|
+
- Grass presets differ in **shape**, not only colour: `call_me_sensei_clump` is
|
|
154
|
+
the wide dense meadow clump, while `anime_clump` is the shorter narrow six-
|
|
155
|
+
blade tuft with a far smaller clump radius. Choose deliberately when coverage
|
|
156
|
+
and silhouette matter. `createCallMeSenseiGrassField()` defaults to the
|
|
157
|
+
meadow and honors an explicit alternate `preset`; verify the resolved id in
|
|
158
|
+
`field.userData.callMeSenseiGrass.preset`.
|
|
159
|
+
- Do not rely on repository sample meshes, textures, or generated manifests.
|
|
160
|
+
A clean npm tarball contains no grass media files; test the generated
|
|
161
|
+
topology, blade attributes, LOD counts, and material in a clean consumer.
|
|
162
|
+
|
|
163
|
+
Verify:
|
|
164
|
+
- Run the consumer app's normal build and inspect near/far vegetation plus sky
|
|
165
|
+
under the target camera.
|
|
166
|
+
- For exported trees, reload the generated asset in the consumer app or asset
|
|
167
|
+
pipeline.
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: visual-verification
|
|
3
|
+
description: How to prove a ToonLab scene actually looks right — settling the scene before screenshotting, isolating a subsystem to attribute a defect, measuring colour against sampled targets with CIEDE2000, scanning the scene graph for outliers, and running an adversarial critic loop. Use whenever judging, reviewing, or iterating on a rendered scene, and before reporting that any visual defect is a ToonLab limitation.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Verifying that it looks right
|
|
7
|
+
|
|
8
|
+
A passing build is not visual approval, and a screenshot is not evidence unless
|
|
9
|
+
you know what was in the frame when it was taken. This skill is the measurement
|
|
10
|
+
discipline that turns "it looks wrong" into "this surface, this value, this
|
|
11
|
+
owner".
|
|
12
|
+
|
|
13
|
+
## Settle the scene before you screenshot
|
|
14
|
+
|
|
15
|
+
ToonLab subsystems keep resolving work **after their factory returns** — GLB
|
|
16
|
+
loads, render-target passes, texture uploads. Screenshotting on a fixed frame
|
|
17
|
+
count produces frames with whole subsystems missing while your manifest happily
|
|
18
|
+
reports them as present.
|
|
19
|
+
|
|
20
|
+
Observed: the same command produced 273,520 triangles with the entire lagoon
|
|
21
|
+
absent on one run and 606,056 on the next.
|
|
22
|
+
|
|
23
|
+
So: await every readiness promise the host exposes, render through the real
|
|
24
|
+
pipeline, and re-read the scene graph until triangle and drawable counts are
|
|
25
|
+
**unchanged across several consecutive reads**. Treat count stability as a
|
|
26
|
+
necessary signal, not proof that GPU compilation, render targets, or external
|
|
27
|
+
loads succeeded. Then screenshot. Report `settled`, the readiness signals, and
|
|
28
|
+
a non-zero rendered frame count in the capture manifest, and **fail the
|
|
29
|
+
capture** if any required signal is wrong. A black or half-built frame must
|
|
30
|
+
never be able to pass as a render.
|
|
31
|
+
|
|
32
|
+
Before accepting the final frame, inspect pixels from the real output (a
|
|
33
|
+
small `readPixels` grid or the captured image). Fail when nearly every sample
|
|
34
|
+
matches the renderer clear/background color, when useful RGB variance or
|
|
35
|
+
non-background coverage is effectively zero, or when alpha is invalid. Do not
|
|
36
|
+
hardcode black as the only empty-frame value: sky blue, transparent, and custom
|
|
37
|
+
clear colors can hide the same failure. Record the distinct-color count or
|
|
38
|
+
coverage ratio with the capture.
|
|
39
|
+
|
|
40
|
+
Also fail on any browser console error. A texture that failed to decode is a
|
|
41
|
+
defect, not a warning.
|
|
42
|
+
|
|
43
|
+
## Isolate before you blame
|
|
44
|
+
|
|
45
|
+
Render subsystems alone to attribute a defect — and include the light rig, or
|
|
46
|
+
you get a black frame and learn nothing.
|
|
47
|
+
|
|
48
|
+
A "flowing water" texture smeared over every cliff was investigated as a
|
|
49
|
+
waterfall bug for two review cycles. One isolated capture of terrain plus its
|
|
50
|
+
lighting settled it in a minute: the ground shader was painting it.
|
|
51
|
+
|
|
52
|
+
Support a query flag that takes a **list** (`?only=terrain,lighting,sky`), and a
|
|
53
|
+
flag that bypasses post. Most attribution questions collapse to two captures.
|
|
54
|
+
|
|
55
|
+
## Measure colour, do not argue about it
|
|
56
|
+
|
|
57
|
+
Sample the frame at fixed points and compare against your target values in
|
|
58
|
+
**CIEDE2000**, not by eye and not by RGB distance. Average a small patch rather
|
|
59
|
+
than a single pixel so dithering does not decide the answer.
|
|
60
|
+
|
|
61
|
+
Two disciplines that matter more than the metric:
|
|
62
|
+
|
|
63
|
+
- **Probe the right surface.** A probe that lands on terrain when you think it
|
|
64
|
+
is on rock will report a rock defect that does not exist. Prove it: change the
|
|
65
|
+
suspected material's value and re-measure. If the probe does not move, it is
|
|
66
|
+
not on that material. This exact check revealed that two "rock" probes were
|
|
67
|
+
reading the ground shader.
|
|
68
|
+
- **Probe where the reference has that material.** A probe placed at coordinates
|
|
69
|
+
the reference fills with sky, on a frame where your scene has a cliff, measures
|
|
70
|
+
a composition difference and reports it as a colour failure.
|
|
71
|
+
|
|
72
|
+
Keep a second sampler for arbitrary points, so a question like "is the shaded
|
|
73
|
+
wall darker than the lit one, and by how much" is one command.
|
|
74
|
+
|
|
75
|
+
## Scan the scene graph for outliers
|
|
76
|
+
|
|
77
|
+
Traverse for meshes above a size threshold and print path, world-space extent
|
|
78
|
+
and position. This catches the things nobody sees because they read as
|
|
79
|
+
background:
|
|
80
|
+
|
|
81
|
+
- a 104 m slab lying across a 72 m channel, damming it;
|
|
82
|
+
- "cliff-top caps" built at 70–90 m across when the tower crown is 20 m.
|
|
83
|
+
|
|
84
|
+
Both survived several visual reviews. A ten-line traversal found each in
|
|
85
|
+
seconds.
|
|
86
|
+
|
|
87
|
+
Audit transforms the same way. Report per-role mean and max uniform scale and
|
|
88
|
+
the worst axis ratio; a mean scale of 6× with a max of 22× is a stretched
|
|
89
|
+
surface, and it is visible long before anyone can articulate why.
|
|
90
|
+
|
|
91
|
+
## Judge from every approved camera
|
|
92
|
+
|
|
93
|
+
A formation can read as one coherent mass from the hero camera and as a kit row
|
|
94
|
+
from above. Fix a small set of cameras — hero, wide, close, flyover, top-down —
|
|
95
|
+
and require all of them before approving a change. Never approve from one view.
|
|
96
|
+
|
|
97
|
+
## Run an adversarial critic
|
|
98
|
+
|
|
99
|
+
Separate the builder from the judge. When the active tool surface and developer
|
|
100
|
+
authorization permit an independent agent/thread, have that critic capture its
|
|
101
|
+
**own** fresh evidence rather than trusting the builder's screenshots. Otherwise
|
|
102
|
+
perform a separate critic pass after clearing builder assumptions. Read the
|
|
103
|
+
module source and return structured blockers: region, expected, actual, fix,
|
|
104
|
+
owner.
|
|
105
|
+
|
|
106
|
+
Make the critic's standard a specific shipped frame, not "good". Give it the
|
|
107
|
+
sampled palette and an explicit auto-fail list, and require a verdict field that
|
|
108
|
+
is hard to fudge — a boolean like `readsAsOneMass` forces a judgement that a
|
|
109
|
+
score can blur.
|
|
110
|
+
|
|
111
|
+
Then feed the blockers back to the builder with instructions not to argue but to
|
|
112
|
+
disprove with a capture if it disagrees. Loop until the critic passes it.
|
|
113
|
+
|
|
114
|
+
In the qualifying run, independent critics scored subsystems 1.5–3.0 out of 10
|
|
115
|
+
with 9–11 blockers each and drove the useful visual fixes. Code inspection
|
|
116
|
+
still found contract defects; rendered evidence determined whether they were
|
|
117
|
+
visible and whether a correction actually improved the target frame.
|
|
118
|
+
|
|
119
|
+
## Keep the harness honest under parallelism
|
|
120
|
+
|
|
121
|
+
If several agents capture at once:
|
|
122
|
+
|
|
123
|
+
- give each run its own port, or they fight over a fixed one;
|
|
124
|
+
- serialise the browser through a small semaphore — GPU-backed browsers
|
|
125
|
+
exhaust WASM memory a few instances in, and the failure surfaces to an agent
|
|
126
|
+
as a broken module rather than as machine pressure;
|
|
127
|
+
- expect transient failures from another agent's mid-edit file, and retry rather
|
|
128
|
+
than "fixing" a module you do not own.
|
|
129
|
+
|
|
130
|
+
## Record the measurement, not the conclusion
|
|
131
|
+
|
|
132
|
+
Write down the number and the command that produced it. "The wall is too blue"
|
|
133
|
+
ages badly; "left wall `#4B6E97` L105 against target `#93A9C6` L168, from
|
|
134
|
+
`capture --view hero` then a point sample at 300,250" can be re-checked after
|
|
135
|
+
the scene has moved on — and it repeatedly turned out that the conclusion was
|
|
136
|
+
wrong while the measurement was still useful.
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: water
|
|
3
|
+
description: Help developers use ToonLab water materials, waves, ripple simulation, breakers, splashes, rain, kelp, or water settings.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Water
|
|
7
|
+
|
|
8
|
+
Use this skill when a developer wants WaterSurface, water material settings,
|
|
9
|
+
Gerstner waves, CPU buoyancy mirrors, ripple simulation, refraction, foam,
|
|
10
|
+
breakers, wakes, splashes, rain, kelp, underwater view, or water preset
|
|
11
|
+
documents.
|
|
12
|
+
|
|
13
|
+
Public imports:
|
|
14
|
+
- `@call-me-sensei/toonlab/water`
|
|
15
|
+
- `@call-me-sensei/toonlab/water-settings`
|
|
16
|
+
|
|
17
|
+
Read first:
|
|
18
|
+
- `agents/references/anime-art-direction.md`
|
|
19
|
+
- `agents/references/style-bundles.md`
|
|
20
|
+
- `agents/references/runtime-entry-points.md`
|
|
21
|
+
|
|
22
|
+
Developer guidance:
|
|
23
|
+
- Add water surfaces and update hooks to the host app's scene and render loop.
|
|
24
|
+
- For a standalone controlled coast, construct `WaterSurface` with a world-space
|
|
25
|
+
`bedHeight(x, z)` sampler so shoaling and shoreline depth use the same beach
|
|
26
|
+
geometry, enable `shoreState` when wet-sand/foam memory is under test, keep
|
|
27
|
+
the surface axis-aligned, and call `water.update(renderer, scene, camera,
|
|
28
|
+
delta)` before the host render.
|
|
29
|
+
- Cover the full water tile and every allowed camera footprint with closed
|
|
30
|
+
seabed geometry. Dress visible underwater areas with package `WaterKelpField`
|
|
31
|
+
vegetation and licensed/package rock clusters, including partially buried
|
|
32
|
+
and partially submerged transitions. An empty bed, visible terrain underside,
|
|
33
|
+
open world edge, or sky showing below the bed is a release failure.
|
|
34
|
+
- Treat Water as one integrated World System. Surface shading, waves, foam,
|
|
35
|
+
reflections, interaction, and quality belong to the complete Water preset;
|
|
36
|
+
do not invent a separate Water Shader document or runtime dependency.
|
|
37
|
+
- Keep `WaterSurface`'s default `underwaterAtmosphere` scene adapter enabled.
|
|
38
|
+
Its update restores the host's air-side background/fog for water capture
|
|
39
|
+
passes, then applies body-color fog and background when the camera is below
|
|
40
|
+
and inside the surface footprint. Its capture-excluded color veil also
|
|
41
|
+
grades ToonLab TSL materials that opt out of scene fog. Do not duplicate
|
|
42
|
+
Water Lab fog-swapping in a host app. Disable or override this adapter only
|
|
43
|
+
when a complete replacement underwater post stack owns the same transition.
|
|
44
|
+
- Keep the three authored axes explicit: `preset` selects the body/motion
|
|
45
|
+
recipe (`coast`, `ocean`, `lake`, and so on), `style: 'call_me_sensei'`
|
|
46
|
+
selects the studio rendition, and `colorTone` selects `classic`, `anime`,
|
|
47
|
+
`teal`, `caribbean`, `lagoon`, or `deepOcean`. Do not replace a coast preset
|
|
48
|
+
with an "Anime" preset; Anime is a tone selected by the style.
|
|
49
|
+
- A non-`classic` tone owns its coherent optical block:
|
|
50
|
+
`shallowColor`, `midColor`, `deepColor`, `depthFadeDistance`,
|
|
51
|
+
`deepFadeDistance`, `fresnelBias`, `fresnelColor`, `reflectionStrength`,
|
|
52
|
+
`reflectionSoftness`, `causticsStrength`, and `detailNormalStrength`.
|
|
53
|
+
Supplying those keys alongside a named tone does not override the tone.
|
|
54
|
+
Choose `classic` when the caller needs full per-key control instead.
|
|
55
|
+
- Choose the tone from captures made with the real bed depth and approved
|
|
56
|
+
cameras, not from its label or palette table alone. Grazing views tend toward
|
|
57
|
+
`deepColor`; overhead shallow views expose more `shallowColor`.
|
|
58
|
+
- `opacity` controls only the fallback path without a scene-color capture.
|
|
59
|
+
With the normal WaterSurface scene-color pass bound, the body composites as
|
|
60
|
+
the integrated refractive surface and that setting is intentionally inactive.
|
|
61
|
+
- Keep interaction targets, camera mode, resize handling, and physics/buoyancy
|
|
62
|
+
integration owned by the app.
|
|
63
|
+
- Use `water.settings` for the portable authored baseline and
|
|
64
|
+
`water.renderedSettings` when inspecting the current Lighting/Weather
|
|
65
|
+
composition. Live scene owners use unique `setSceneOverrideLayer` ids and
|
|
66
|
+
clear only their own id; they must not write composed values back to a preset.
|
|
67
|
+
- In a composed world, let the host game own lighting and pass current light
|
|
68
|
+
state through Water's explicit scene adapters. Lighting is not a stable
|
|
69
|
+
public package or bundle domain.
|
|
70
|
+
- Preserve the host renderer's depth convention. Water supports both standard
|
|
71
|
+
and reversed depth; qualify contact foam and refraction using the host's
|
|
72
|
+
actual `reversedDepthBuffer` setting rather than silently changing it.
|
|
73
|
+
- Choose Water's compile-time quality when constructing `WaterSurface`.
|
|
74
|
+
Changing low/medium/high or custom quality requires replacing/rebuilding the
|
|
75
|
+
surface; `applySettings()` edits authored art/simulation values, not quality.
|
|
76
|
+
- Use documented settings and presets for portable water looks.
|
|
77
|
+
- When using buoyancy, sample or mirror the same wave configuration the visible
|
|
78
|
+
water uses.
|
|
79
|
+
- Treat ToonLab playground scenes as examples, not runtime dependencies.
|
|
80
|
+
- Size finite water surfaces from the union of every approved camera frustum's
|
|
81
|
+
intersection with the water plane, then add margin for orbit, shake, and
|
|
82
|
+
wave displacement. A visible rectangular boundary is a release failure;
|
|
83
|
+
increasing width and depth is the correction.
|
|
84
|
+
|
|
85
|
+
Verify:
|
|
86
|
+
- Run the consumer app's normal build and inspect calm, moving, and interaction
|
|
87
|
+
states relevant to the game.
|
|
88
|
+
- If buoyancy is used, check that objects match the visible water height closely
|
|
89
|
+
enough for the app's camera distance.
|
|
90
|
+
- Inspect the water from the cliff camera, a low shore camera, and a downward
|
|
91
|
+
reveal. Verify the shoreline has no hovering terrain, dry gaps, hard surface
|
|
92
|
+
edge, or water slivers, and record `nearshorePhaseStatus` plus the ship's
|
|
93
|
+
sampled `getHeightAt()` result when a vessel is present. Treat an inactive
|
|
94
|
+
nearshore phase as diagnostic, not automatically as a shader failure: the
|
|
95
|
+
mild-slope path cannot activate on a vertical wall or deep gorge that never
|
|
96
|
+
presents a qualifying bank to the bed sampler.
|
|
97
|
+
- Add two underwater inspections: one looking up through the surface and one
|
|
98
|
+
looking across the floor toward the shore. Verify real above-water
|
|
99
|
+
transmission, readable depth tint/haze, a continuous closed bed, caustic or
|
|
100
|
+
light response, submerged rocks, moving vegetation, and no hollow terrain.
|
|
101
|
+
Assert `water.underwaterAtmosphereState.active` in both submerged views and
|
|
102
|
+
verify that the original host background/fog return above the surface.
|
|
103
|
+
- When the host uses reversed depth, inspect the foam debug view as well:
|
|
104
|
+
open water must remain dark and contact foam must stay localized to shore
|
|
105
|
+
and piercing objects.
|