@call-me-sensei/toonlab 0.4.21 → 0.4.23
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 +87 -27
- package/README.md +11 -10
- package/agents/PROMPTS.md +17 -3
- package/agents/README.md +13 -3
- package/agents/claude/CLAUDE.md +3 -0
- package/agents/codex/AGENTS.md +112 -159
- package/agents/cursor/toonlab.mdc +7 -3
- package/agents/examples/game-foundation.mjs +104 -0
- package/agents/references/game-lifecycle.md +57 -0
- package/agents/references/runtime-entry-points.md +26 -0
- package/agents/references/style-bundles.md +4 -1
- package/agents/skills/claude/asset-sourcing/SKILL.md +7 -4
- package/agents/skills/claude/environment/SKILL.md +4 -0
- package/agents/skills/claude/game-dev/SKILL.md +63 -87
- package/agents/skills/claude/lighting/SKILL.md +36 -0
- package/agents/skills/claude/post-processing/SKILL.md +8 -3
- package/agents/skills/claude/rock-ground-shaders/SKILL.md +10 -15
- package/agents/skills/claude/rockgen/SKILL.md +52 -21
- package/agents/skills/claude/scene-style-application/SKILL.md +4 -0
- package/agents/skills/claude/style-presets/SKILL.md +11 -8
- package/agents/skills/claude/toon-shading/SKILL.md +4 -0
- package/agents/skills/claude/vegetation-sky/SKILL.md +13 -7
- package/agents/skills/claude/visual-verification/SKILL.md +45 -119
- package/agents/skills/claude/water/SKILL.md +6 -2
- package/agents/skills/codex/asset-sourcing/SKILL.md +7 -4
- package/agents/skills/codex/environment/SKILL.md +4 -0
- package/agents/skills/codex/game-dev/SKILL.md +63 -87
- package/agents/skills/codex/lighting/SKILL.md +36 -0
- package/agents/skills/codex/post-processing/SKILL.md +8 -3
- package/agents/skills/codex/rock-ground-shaders/SKILL.md +10 -15
- package/agents/skills/codex/rockgen/SKILL.md +52 -21
- package/agents/skills/codex/scene-style-application/SKILL.md +4 -0
- package/agents/skills/codex/style-presets/SKILL.md +11 -8
- package/agents/skills/codex/toon-shading/SKILL.md +4 -0
- package/agents/skills/codex/vegetation-sky/SKILL.md +13 -7
- package/agents/skills/codex/visual-verification/SKILL.md +45 -119
- package/agents/skills/codex/water/SKILL.md +6 -2
- package/database/apply-one-catalog-seed.mjs +63 -0
- package/database/providers.mjs +1 -0
- package/database/seeds/catalog/0005_2026-08-c8-first12.sql +1101 -0
- package/database/seeds/catalog/0006_2026-09-c8-first100.sql +14245 -0
- package/database/seeds/catalog/0007_2026-09-c8-first100-primary-model.sql +14845 -0
- package/mcp/lab-management.mjs +11 -8
- package/mcp/public-catalog.mjs +0 -16
- package/mcp/tree-lab-contract.mjs +2381 -0
- package/mcp/vite-plugin.mjs +5 -1
- package/package.json +29 -18
- package/src/catalog/officialCatalog.js +1 -0
- package/src/catalog/officialCatalogAssetRuntime.js +98 -1
- package/src/catalog/officialCatalogLod.js +160 -16
- package/src/catalog/officialCatalogPlacement.js +52 -12
- package/src/catalog/officialCatalogProvider.js +79 -8
- package/src/catalog/officialCatalogRockPackage.js +172 -0
- package/src/cloud/cloudReprojection.js +40 -7
- package/src/cloud/cloudVolume.js +44 -7
- package/src/cloud/noise/baseShapeVolume.js +8 -6
- package/src/cloud/noise/cirrusMap.js +2 -1
- package/src/cloud/noise/curlNoise.js +2 -1
- package/src/cloud/noise/erosionVolume.js +2 -1
- package/src/cloud/noise/textureCache.js +77 -0
- package/src/cloud/noise/weatherMap.js +2 -1
- package/src/core/sha256.js +83 -0
- package/src/ground-shader/groundShaderMaterial.js +12 -3
- package/src/rock-shader/rockMaterial.js +205 -28
- package/src/rock-shader/rockShaderRuntime.js +17 -1
- package/src/rock-shader/rockShaderSettings.js +16 -0
- package/src/rockgen/index.js +9 -0
- package/src/rockgen/lod/index.js +1 -0
- package/src/rockgen/lod/rockDenseFieldPolicy.js +143 -0
- package/src/rockgen/rockDocument.js +899 -35
- package/src/rockgen/surface/c7GeologySurface.js +39 -9
- package/src/rockgen/surface/naturalRockSurface.js +1948 -0
- package/src/shaders-tsl/chunks/projected-water-caustics.js +14 -2
- package/src/shaders-tsl/chunks/water-foam.js +6 -6
- package/src/shaders-tsl/chunks/water-lighting.js +28 -5
- package/src/shaders-tsl/chunks/water-shore-state.js +5 -2
- package/src/shaders-tsl/chunks/water-waves.js +10 -5
- package/src/shaders-tsl/flower.js +7 -4
- package/src/shaders-tsl/grass.js +4 -3
- package/src/shaders-tsl/water-shore-state-simulation.js +3 -2
- package/src/shaders-tsl/water.js +209 -41
- package/src/sky/skySystem.js +30 -7
- package/src/toon/settings/perspectiveRemovalSettings.js +1 -1
- package/src/toon/toonSettings.js +74 -0
- package/src/vegetation/stylizedFlower.js +6 -0
- package/src/version.js +1 -1
- package/src/water/waterDetailSpectrum.js +91 -0
- package/src/water/waterDynamics.js +422 -0
- package/src/water/waterFoamParticles.js +196 -0
- package/src/water/waterFoamTexture.js +57 -0
- package/src/water/waterHydrodynamics.js +209 -0
- package/src/water/waterMaterial.js +1 -0
- package/src/water/waterRenderExtension.js +107 -0
- package/src/water/waterScenePasses.js +14 -6
- package/src/water/waterSettings.js +53 -26
- package/src/water/waterShoreMaterial.js +38 -14
- package/src/water/waterSpectralOcean.js +137 -0
- package/src/water/waterStageSettings.js +19 -1
- package/src/water/waterSurface.js +62 -18
- package/src/water/waterUnderwaterAtmosphere.js +30 -3
- package/types/catalog/officialCatalog.d.ts +1 -0
- package/types/catalog/officialCatalogPlacement.d.ts +4 -0
- package/types/catalog/officialCatalogRockPackage.d.ts +68 -0
- package/types/cloud/noise/baseShapeVolume.d.ts +1 -1
- package/types/cloud/noise/textureCache.d.ts +12 -0
- package/types/core/sha256.d.ts +2 -0
- package/types/index.d.ts +30 -0
- package/types/rock-shader/rockMaterial.d.ts +3 -0
- package/types/rock-shader/rockShaderSettings.d.ts +2 -0
- package/types/rockgen/index.d.ts +1 -0
- package/types/rockgen/lod/index.d.ts +1 -0
- package/types/rockgen/lod/rockDenseFieldPolicy.d.ts +181 -0
- package/types/rockgen/rockDocument.d.ts +654 -71
- package/types/rockgen/surface/naturalRockSurface.d.ts +100 -0
- package/types/shaders-tsl/chunks/projected-water-caustics.d.ts +7 -1
- package/types/shaders-tsl/chunks/water-lighting.d.ts +4 -3
- package/types/shaders-tsl/water.d.ts +2 -1
- package/types/version.d.ts +1 -1
- package/types/water/waterDetailSpectrum.d.ts +13 -0
- package/types/water/waterDynamics.d.ts +89 -0
- package/types/water/waterFoamParticles.d.ts +32 -0
- package/types/water/waterFoamTexture.d.ts +1 -0
- package/types/water/waterHydrodynamics.d.ts +49 -0
- package/types/water/waterRenderExtension.d.ts +16 -0
- package/types/water/waterScenePasses.d.ts +1 -1
- package/types/water/waterSettings.d.ts +1 -0
- package/types/water/waterSpectralOcean.d.ts +17 -0
- package/types/water/waterStageSettings.d.ts +1 -1
- package/types/water/waterUnderwaterAtmosphere.d.ts +19 -4
package/mcp/lab-management.mjs
CHANGED
|
@@ -39,11 +39,7 @@ import {
|
|
|
39
39
|
createToonPresetDocument,
|
|
40
40
|
TOON_SETTING_FIELD_SCHEMA,
|
|
41
41
|
} from '../src/toon/index.js';
|
|
42
|
-
import {
|
|
43
|
-
recipeFromSettings,
|
|
44
|
-
TREE_SETTING_DEFAULTS,
|
|
45
|
-
TREE_SETTING_FIELD_SCHEMA,
|
|
46
|
-
} from '../src/vegetation/treeRecipe.js';
|
|
42
|
+
import { treeContract } from './tree-lab-contract.mjs';
|
|
47
43
|
import {
|
|
48
44
|
createVegetationShaderScopePresetDocument,
|
|
49
45
|
getVegetationShaderScopeFieldSchema,
|
|
@@ -100,7 +96,7 @@ const STARTER_DOCUMENTS = Object.freeze({
|
|
|
100
96
|
'cloud-shader': createSkyParamsDocument(STARTER_ID, { label: STARTER_LABEL }),
|
|
101
97
|
'sky-cloud': createSkyParamsDocument(STARTER_ID, { label: STARTER_LABEL }),
|
|
102
98
|
rock: createRockDocument({ name: STARTER_LABEL, preset: 'boulder', seed: 0, style: 'default' }),
|
|
103
|
-
tree: Object.assign(
|
|
99
|
+
tree: Object.assign(structuredClone(treeContract.starter), { id: STARTER_ID, label: STARTER_LABEL }),
|
|
104
100
|
grass: createGrassPresetDocument(STARTER_ID, { label: STARTER_LABEL }),
|
|
105
101
|
texture: Object.assign(createTextureRecipeDocument(undefined, { name: STARTER_LABEL }), { id: STARTER_ID }),
|
|
106
102
|
});
|
|
@@ -306,7 +302,7 @@ const FEATURE_SCHEMAS = Object.freeze({
|
|
|
306
302
|
'sky-cloud': Object.freeze(Object.fromEntries(['cloud', 'noise', 'sun', 'time']
|
|
307
303
|
.flatMap((key) => SKY_PARAMS_FIELD_SCHEMA[key] ? [[key, SKY_PARAMS_FIELD_SCHEMA[key]]] : []))),
|
|
308
304
|
rock: ROCKGEN_SETTING_FIELD_SCHEMA,
|
|
309
|
-
tree:
|
|
305
|
+
tree: treeContract.fields,
|
|
310
306
|
grass: GRASS_SETTING_FIELD_SCHEMA,
|
|
311
307
|
texture: TEXTURE_SETTING_FIELD_SCHEMA,
|
|
312
308
|
});
|
|
@@ -384,6 +380,7 @@ export function createRockCatalogStartDocument(source, options = {}) {
|
|
|
384
380
|
const variationIndex = Math.max(0, Math.round(Number(options.variation) || 0));
|
|
385
381
|
const variationSeed = hash32(`${sourceId}:${variationIndex}`);
|
|
386
382
|
const label = String(options.label ?? source.label ?? source.name ?? sourceId).trim();
|
|
383
|
+
const surfacePackage = sourceValue(source, 'surfacePackage');
|
|
387
384
|
const document = createRockDocument({
|
|
388
385
|
name: label,
|
|
389
386
|
preset: 'boulder',
|
|
@@ -395,7 +392,8 @@ export function createRockCatalogStartDocument(source, options = {}) {
|
|
|
395
392
|
role: Array.isArray(source.tags) ? String(source.tags[0] ?? 'rock') : 'rock',
|
|
396
393
|
series: String(sourceValue(source, 'releaseWave') ?? ''),
|
|
397
394
|
sourceMode: 'mesh-template',
|
|
398
|
-
surfaceMode: 'source',
|
|
395
|
+
surfaceMode: surfacePackage ? 'generated' : 'source',
|
|
396
|
+
surfacePackage: surfacePackage ? structuredClone(surfacePackage) : null,
|
|
399
397
|
topFinish: 'source',
|
|
400
398
|
variation: Math.min(Math.max(Number(options.strength ?? 0.3) || 0, 0), 1),
|
|
401
399
|
variationSeed,
|
|
@@ -403,6 +401,9 @@ export function createRockCatalogStartDocument(source, options = {}) {
|
|
|
403
401
|
seed: variationSeed,
|
|
404
402
|
style: 'call_me_sensei',
|
|
405
403
|
});
|
|
404
|
+
if (surfacePackage && !document.reference?.surfacePackage) {
|
|
405
|
+
throw new Error("Catalog source has an invalid realistic surface recipe.");
|
|
406
|
+
}
|
|
406
407
|
Object.assign(document.surface, {
|
|
407
408
|
lichenCoverage: 0,
|
|
408
409
|
mossCoverage: 0,
|
|
@@ -561,11 +562,13 @@ function applyRockOperation(document, operation, args) {
|
|
|
561
562
|
`Rock mesh edits are limited to ${ROCKGEN_MAX_MESH_EDIT_OPERATIONS} operations and ${ROCKGEN_MAX_MESH_EDIT_DELTAS} vertex deltas per portable project.`,
|
|
562
563
|
);
|
|
563
564
|
}
|
|
565
|
+
next.reference.meshOperationOrder.push({ type: 'sculpt', index: next.reference.meshEdits.length });
|
|
564
566
|
next.reference.meshEdits.push(edit);
|
|
565
567
|
bumpDocumentRevision(next);
|
|
566
568
|
} else if (operation === 'clear_mesh_edits') {
|
|
567
569
|
if (next.reference?.sourceMode !== 'mesh-template') throw new Error('Mesh edits require a source-mesh rock project.');
|
|
568
570
|
next.reference.meshEdits = [];
|
|
571
|
+
next.reference.meshOperationOrder = next.reference.meshOperationOrder.filter((entry) => entry.type !== 'sculpt');
|
|
569
572
|
bumpDocumentRevision(next);
|
|
570
573
|
} else if (operation === 'set_source') {
|
|
571
574
|
return deserializeRockDocument(createRockCatalogStartDocument(args.source ?? args.value, args));
|
package/mcp/public-catalog.mjs
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
// stable public domains only; repository-only generators and pre-beta systems
|
|
3
3
|
// are never pulled into the npm tarball through the MCP dependency graph.
|
|
4
4
|
|
|
5
|
-
import { BUILT_IN_DEBRIS_PRESETS } from '../src/debrisgen/debrisPresets.js';
|
|
6
5
|
import { POST_PROCESSING_PRESETS } from '../src/post/postProcessing.js';
|
|
7
6
|
import { getRockgenPresetOptions } from '../src/rockgen/rockgenPresets.js';
|
|
8
7
|
import { getSkyPresetOptions } from '../src/sky/stylizedSky.js';
|
|
@@ -49,21 +48,6 @@ export function publicMcpCatalogEntries() {
|
|
|
49
48
|
}));
|
|
50
49
|
}
|
|
51
50
|
|
|
52
|
-
for (const preset of BUILT_IN_DEBRIS_PRESETS) {
|
|
53
|
-
const id = `debris/${slug(preset.id)}`;
|
|
54
|
-
entries.push(entry({
|
|
55
|
-
cluster: 'debrisgen',
|
|
56
|
-
description: preset.description,
|
|
57
|
-
id,
|
|
58
|
-
kind: 'recipe',
|
|
59
|
-
label: preset.label,
|
|
60
|
-
recipe: { schema: 'debrisSettings', settings: preset.settings, version: 1 },
|
|
61
|
-
spawn: 'createDebrisAsset(entry.recipe.settings)',
|
|
62
|
-
tags: ['debris', preset.type, slug(preset.variant)],
|
|
63
|
-
thumbnail: thumbnailFor(id),
|
|
64
|
-
}));
|
|
65
|
-
}
|
|
66
|
-
|
|
67
51
|
for (const option of getWaterPresetOptions()) {
|
|
68
52
|
entries.push(entry({
|
|
69
53
|
cluster: 'water',
|