incanto 0.38.0 → 0.40.0

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.
Files changed (41) hide show
  1. package/dist/2d.d.ts +2 -2
  2. package/dist/2d.js +3 -3
  3. package/dist/3d.d.ts +83 -3
  4. package/dist/3d.js +4 -4
  5. package/dist/{behavior-B5PJ32eu.d.ts → behavior-TA8nySqb.d.ts} +61 -1
  6. package/dist/{create-game-DqY2lMBc.js → create-game-CEKCtnKw.js} +13 -6
  7. package/dist/{create-game-C4t5gVhc.js → create-game-Dc2CEFtD.js} +4 -4
  8. package/dist/debug.d.ts +1 -1
  9. package/dist/{environment-presets-C0Axpfth.js → environment-presets-Z0PkDH62.js} +2 -2
  10. package/dist/{gameplay-CsJDUQh_.js → gameplay-CqNfawyn.js} +135 -15
  11. package/dist/gameplay.d.ts +1 -1
  12. package/dist/gameplay.js +1 -1
  13. package/dist/index.d.ts +4 -4
  14. package/dist/index.js +3 -3
  15. package/dist/{loader-DSMdqasu.d.ts → loader-CvSDKC3v.d.ts} +1 -1
  16. package/dist/net.d.ts +1 -1
  17. package/dist/net.js +2 -2
  18. package/dist/{pathfinding-BrE5Uec6.d.ts → pathfinding-_UlKUoox.d.ts} +1 -1
  19. package/dist/{physics-2d-OfKb0PV_.js → physics-2d-CxIqR1cW.js} +1 -1
  20. package/dist/{physics-3d-C8242nXr.js → physics-3d-CcUaeJXq.js} +2 -2
  21. package/dist/react.d.ts +1 -1
  22. package/dist/react.js +1 -1
  23. package/dist/{register-DnB9m7Rl.js → register-CgMO5JBY.js} +1 -1
  24. package/dist/{register-B4RRQbyq.js → register-D5v8iqjZ.js} +1 -1
  25. package/dist/{register-Dm7nrd-E.js → register-DMFJI-c_.js} +23 -11
  26. package/dist/{replay-Cxrr-ApH.d.ts → replay-DN-kG4va.d.ts} +1 -1
  27. package/dist/{replay-DH0UOuZ-.js → replay-D_QY5Xm3.js} +1 -1
  28. package/dist/{test-CoDPWx-m.js → test-CFhY8No9.js} +10 -10
  29. package/dist/test.d.ts +3 -3
  30. package/dist/test.js +2 -2
  31. package/dist/vite.js +1 -1
  32. package/editor/assets/{agent8-BtIlblPm.js → agent8-COwolmAe.js} +1 -1
  33. package/editor/assets/{debug-BvTmHXI7.js → debug-DJSCLmsL.js} +1 -1
  34. package/editor/assets/{index-BS01WWgM.js → index-tRXhfJEm.js} +91 -91
  35. package/editor/index.html +1 -1
  36. package/package.json +1 -1
  37. package/skills/incanto-environment.md +32 -0
  38. package/skills/incanto-performance.md +23 -0
  39. package/templates-app/beacon-isle-3d/package.json +1 -1
  40. package/templates-app/tps-3d/package.json +1 -1
  41. package/templates-app/village-quest-3d/package.json +1 -1
package/editor/index.html CHANGED
@@ -5,7 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>Incanto Scene Editor</title>
7
7
  <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><rect width='16' height='16' rx='3' fill='%236ee7dc'/><text x='8' y='12' text-anchor='middle' font-size='11' font-family='monospace' fill='%230e1018'>i</text></svg>" />
8
- <script type="module" crossorigin src="./assets/index-BS01WWgM.js"></script>
8
+ <script type="module" crossorigin src="./assets/index-tRXhfJEm.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="./assets/GameServer-C56iOUgF.js">
10
10
  </head>
11
11
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "incanto",
3
- "version": "0.38.0",
3
+ "version": "0.40.0",
4
4
  "description": "Vibe-coding-first web game engine SDK — JSON-driven scenes on three.js",
5
5
  "keywords": [
6
6
  "game-engine",
@@ -700,6 +700,38 @@ non-default composition.
700
700
 
701
701
  ## Water3D
702
702
 
703
+ ### The player's graphics setting reaches this node
704
+
705
+ At **quality `low`** a fancy surface collapses to the single-pass lake shader —
706
+ automatically, at runtime, no props involved. That turns several full scene
707
+ re-renders a frame (planar mirror, reflection cube, refraction grab, depth
708
+ completion) into **none**, which is the largest single saving available on a
709
+ weak device.
710
+
711
+ At **`medium`** the surface keeps the fancy shader and loses only the planar
712
+ `mirror` — the most expensive single thing it does, a whole extra render of the
713
+ scene per frame. It still reflects sky and far shore through the cube; what goes
714
+ is the sharp reflection of nearby geometry. So a mirror lake still reads as a
715
+ lake on a mid-range phone. See `incanto-performance.md`.
716
+
717
+ Two rules you can rely on:
718
+
719
+ - **A tier only ever takes away.** Water authored `quality: 'simple'` stays
720
+ simple at `high` — a tier never upgrades a scene into something it did not
721
+ ask for. And the cap is not an edit: the scene file still says what you wrote.
722
+ - **`heightAt()` follows what is actually drawn**, so buoyancy and interaction
723
+ ripples match the surface on every device.
724
+
725
+ A big surface (over ~110 m a side — an ocean, not a lake) stays on the fancy
726
+ shader at `low` and takes `medium`'s behaviour instead. The simple shader's only
727
+ waterline is a fade of its own rectangle, which lands hundreds of metres out to
728
+ sea on an ocean plane; without this it met the beach in a razor-straight line.
729
+
730
+ It is not free: the simple shader has no samplers, so at low the shoreline
731
+ dissolve, contact foam and depth absorption go away. If your game's look depends
732
+ on them — a resort pool, a mirror lake — say so in the scene by pinning
733
+ `quality`, and accept the cost on low-end devices.
734
+
703
735
  A commercial-quality water surface (in `incanto/3d`, registered by
704
736
  `registerNodes3D`). **Four curated water types are one prop away:**
705
737
  `preset: 'ocean' | 'pool' | 'lake' | 'pond'` — see the prop table; the four
@@ -43,6 +43,29 @@ Every one of those is written to the save store and comes back on the next launc
43
43
 
44
44
  ### quality
45
45
 
46
+ **Water follows the tier too, and it is the biggest single saving.**
47
+
48
+ | tier | what water does |
49
+ | --- | --- |
50
+ | `high` | everything the scene asked for |
51
+ | `medium` | fancy shader, **no planar mirror** (the cube still gives it sky and far shore) |
52
+ | `low` | single-pass lake shader — no mirror, no cube, no grab, no depth pass |
53
+
54
+ **Big water does not collapse at `low`.** The simple shader's only waterline is
55
+ a fade of its own rectangle's outer 18%, so a surface that does not fill its
56
+ basin — an ocean plane with an island in the middle — would meet the beach in a
57
+ razor-straight line with no surf. Above a ~110 m plane the tier keeps the fancy
58
+ shader and takes `medium`'s behaviour instead (no mirror). Small water, which is
59
+ what most games have, still gets the full saving.
60
+
61
+ At `low` several full scene re-renders a frame become **none**, and the render
62
+ targets are released rather than held. At `medium` the mirror — a whole extra
63
+ render of the scene, per water node, per frame — goes, and the reflection cube
64
+ is held to a 2 s floor so the saving is not handed straight back to it.
65
+
66
+ A surface the scene authored as `simple`, or one that never asked for a mirror,
67
+ is untouched — a tier only ever takes away.
68
+
46
69
  `low` turns off shadows, bloom, post and clouds. `medium` keeps shadows but makes them
47
70
  **static** (they render once instead of every frame — the measured 42% of a shadow's
48
71
  cost is re-rendering it) and drops post. `high` is everything.
@@ -14,7 +14,7 @@
14
14
  "@dimforge/rapier2d-compat": "0.19.3",
15
15
  "@dimforge/rapier3d-compat": "0.19.3",
16
16
  "@pixiv/three-vrm": "^3.5.3",
17
- "incanto": "^0.38.0",
17
+ "incanto": "^0.40.0",
18
18
  "three": "^0.184.0"
19
19
  },
20
20
  "devDependencies": {
@@ -13,7 +13,7 @@
13
13
  "@dimforge/rapier2d-compat": "0.19.3",
14
14
  "@dimforge/rapier3d-compat": "0.19.3",
15
15
  "@pixiv/three-vrm": "^3.5.3",
16
- "incanto": "^0.38.0",
16
+ "incanto": "^0.40.0",
17
17
  "three": "^0.184.0"
18
18
  },
19
19
  "devDependencies": {
@@ -13,7 +13,7 @@
13
13
  "@dimforge/rapier2d-compat": "0.19.3",
14
14
  "@dimforge/rapier3d-compat": "0.19.3",
15
15
  "@pixiv/three-vrm": "^3.5.3",
16
- "incanto": "^0.38.0",
16
+ "incanto": "^0.40.0",
17
17
  "three": "^0.184.0"
18
18
  },
19
19
  "devDependencies": {