@aura3d/engine 4.1.2 → 4.2.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 (268) hide show
  1. package/README.md +52 -730
  2. package/dist/audio/synth/SynthCueBank.d.ts.map +1 -1
  3. package/dist/audio/synth/SynthCueBank.js +11 -2
  4. package/dist/audio/synth/SynthCueBank.js.map +1 -1
  5. package/dist/audio/synth/types.d.ts +4 -0
  6. package/dist/audio/synth/types.d.ts.map +1 -1
  7. package/dist/aura3d-cli/cli.d.ts.map +1 -1
  8. package/dist/aura3d-cli/cli.js +49 -17
  9. package/dist/aura3d-cli/cli.js.map +1 -1
  10. package/dist/aura3d-cli/commands/evidence/index.d.ts +3 -0
  11. package/dist/aura3d-cli/commands/evidence/index.d.ts.map +1 -0
  12. package/dist/aura3d-cli/commands/evidence/index.js +12 -0
  13. package/dist/aura3d-cli/commands/evidence/index.js.map +1 -0
  14. package/dist/aura3d-cli/commands/evidence/judge.d.ts +18 -0
  15. package/dist/aura3d-cli/commands/evidence/judge.d.ts.map +1 -0
  16. package/dist/aura3d-cli/commands/evidence/judge.js +194 -0
  17. package/dist/aura3d-cli/commands/evidence/judge.js.map +1 -0
  18. package/dist/aura3d-cli/commands/evidence/judgeLib.d.ts +84 -0
  19. package/dist/aura3d-cli/commands/evidence/judgeLib.d.ts.map +1 -0
  20. package/dist/aura3d-cli/commands/evidence/judgeLib.js +178 -0
  21. package/dist/aura3d-cli/commands/evidence/judgeLib.js.map +1 -0
  22. package/dist/aura3d-cli/commands/registry.d.ts +1 -0
  23. package/dist/aura3d-cli/commands/registry.d.ts.map +1 -1
  24. package/dist/aura3d-cli/commands/registry.js +1 -0
  25. package/dist/aura3d-cli/commands/registry.js.map +1 -1
  26. package/dist/aura3d-cli/look/capture.d.ts +15 -7
  27. package/dist/aura3d-cli/look/capture.d.ts.map +1 -1
  28. package/dist/aura3d-cli/look/capture.js +85 -13
  29. package/dist/aura3d-cli/look/capture.js.map +1 -1
  30. package/dist/aura3d-cli/pull-bridge/adapters.d.ts +9 -1
  31. package/dist/aura3d-cli/pull-bridge/adapters.d.ts.map +1 -1
  32. package/dist/aura3d-cli/pull-bridge/adapters.js +30 -7
  33. package/dist/aura3d-cli/pull-bridge/adapters.js.map +1 -1
  34. package/dist/aura3d-cli/pull-bridge/search.d.ts +5 -0
  35. package/dist/aura3d-cli/pull-bridge/search.d.ts.map +1 -1
  36. package/dist/aura3d-cli/pull-bridge/search.js +7 -1
  37. package/dist/aura3d-cli/pull-bridge/search.js.map +1 -1
  38. package/dist/aura3d-cli/pull-bridge.js +1 -1
  39. package/dist/aura3d-cli/pull-bridge.js.map +1 -1
  40. package/dist/aura3d-cli/resolve-ladder.d.ts +123 -0
  41. package/dist/aura3d-cli/resolve-ladder.d.ts.map +1 -0
  42. package/dist/aura3d-cli/resolve-ladder.js +410 -0
  43. package/dist/aura3d-cli/resolve-ladder.js.map +1 -0
  44. package/dist/create-aura3d/index.js +1 -1
  45. package/dist/debug/index.d.ts +2 -2
  46. package/dist/debug/index.d.ts.map +1 -1
  47. package/dist/debug/index.js +1 -1
  48. package/dist/debug/index.js.map +1 -1
  49. package/dist/debug/safety/frameBoundary.d.ts +33 -0
  50. package/dist/debug/safety/frameBoundary.d.ts.map +1 -0
  51. package/dist/debug/safety/frameBoundary.js +40 -0
  52. package/dist/debug/safety/frameBoundary.js.map +1 -0
  53. package/dist/debug/safety/index.d.ts +1 -0
  54. package/dist/debug/safety/index.d.ts.map +1 -1
  55. package/dist/debug/safety/index.js +1 -0
  56. package/dist/debug/safety/index.js.map +1 -1
  57. package/dist/engine/agent-api/app/actorBoneMatrixLookup.d.ts +22 -0
  58. package/dist/engine/agent-api/app/actorBoneMatrixLookup.d.ts.map +1 -0
  59. package/dist/engine/agent-api/app/actorBoneMatrixLookup.js +24 -0
  60. package/dist/engine/agent-api/app/actorBoneMatrixLookup.js.map +1 -0
  61. package/dist/engine/agent-api/app/canvas.d.ts +16 -0
  62. package/dist/engine/agent-api/app/canvas.d.ts.map +1 -1
  63. package/dist/engine/agent-api/app/canvas.js +15 -0
  64. package/dist/engine/agent-api/app/canvas.js.map +1 -1
  65. package/dist/engine/agent-api/app/createAuraApp.d.ts.map +1 -1
  66. package/dist/engine/agent-api/app/createAuraApp.js +21 -3
  67. package/dist/engine/agent-api/app/createAuraApp.js.map +1 -1
  68. package/dist/engine/agent-api/app/frameLoop.d.ts.map +1 -1
  69. package/dist/engine/agent-api/app/frameLoop.js +21 -3
  70. package/dist/engine/agent-api/app/frameLoop.js.map +1 -1
  71. package/dist/engine/agent-api/app/mountFailure.d.ts +6 -0
  72. package/dist/engine/agent-api/app/mountFailure.d.ts.map +1 -0
  73. package/dist/engine/agent-api/app/mountFailure.js +9 -0
  74. package/dist/engine/agent-api/app/mountFailure.js.map +1 -0
  75. package/dist/engine/agent-api/app/parentFit.d.ts +35 -0
  76. package/dist/engine/agent-api/app/parentFit.d.ts.map +1 -0
  77. package/dist/engine/agent-api/app/parentFit.js +36 -0
  78. package/dist/engine/agent-api/app/parentFit.js.map +1 -0
  79. package/dist/engine/agent-api/compiler/customMaterial.js +3 -2
  80. package/dist/engine/agent-api/compiler/customMaterial.js.map +1 -1
  81. package/dist/engine/agent-api/compiler/geometry.d.ts +13 -0
  82. package/dist/engine/agent-api/compiler/geometry.d.ts.map +1 -1
  83. package/dist/engine/agent-api/compiler/geometry.js +30 -3
  84. package/dist/engine/agent-api/compiler/geometry.js.map +1 -1
  85. package/dist/engine/agent-api/compiler/primitives.d.ts +1 -2
  86. package/dist/engine/agent-api/compiler/primitives.d.ts.map +1 -1
  87. package/dist/engine/agent-api/compiler/primitives.js +21 -4
  88. package/dist/engine/agent-api/compiler/primitives.js.map +1 -1
  89. package/dist/engine/agent-api/index.d.ts +4 -0
  90. package/dist/engine/agent-api/index.d.ts.map +1 -1
  91. package/dist/engine/agent-api/index.js +1 -0
  92. package/dist/engine/agent-api/index.js.map +1 -1
  93. package/dist/engine/agent-api/nodes/batched.d.ts +10 -0
  94. package/dist/engine/agent-api/nodes/batched.d.ts.map +1 -1
  95. package/dist/engine/agent-api/nodes/batched.js +7 -5
  96. package/dist/engine/agent-api/nodes/batched.js.map +1 -1
  97. package/dist/engine/agent-api/nodes/builder.d.ts +13 -0
  98. package/dist/engine/agent-api/nodes/builder.d.ts.map +1 -1
  99. package/dist/engine/agent-api/nodes/builder.js +7 -3
  100. package/dist/engine/agent-api/nodes/builder.js.map +1 -1
  101. package/dist/engine/agent-api/nodes/cameras.d.ts +7 -0
  102. package/dist/engine/agent-api/nodes/cameras.d.ts.map +1 -1
  103. package/dist/engine/agent-api/nodes/cameras.js +7 -0
  104. package/dist/engine/agent-api/nodes/cameras.js.map +1 -1
  105. package/dist/engine/agent-api/nodes/chaseCamera.d.ts +122 -0
  106. package/dist/engine/agent-api/nodes/chaseCamera.d.ts.map +1 -0
  107. package/dist/engine/agent-api/nodes/chaseCamera.js +130 -0
  108. package/dist/engine/agent-api/nodes/chaseCamera.js.map +1 -0
  109. package/dist/engine/agent-api/nodes/effects.composite.d.ts +1 -0
  110. package/dist/engine/agent-api/nodes/effects.composite.d.ts.map +1 -1
  111. package/dist/engine/agent-api/nodes/effects.composite.js +2 -0
  112. package/dist/engine/agent-api/nodes/effects.composite.js.map +1 -1
  113. package/dist/engine/agent-api/nodes/effects.toon.d.ts +26 -0
  114. package/dist/engine/agent-api/nodes/effects.toon.d.ts.map +1 -0
  115. package/dist/engine/agent-api/nodes/effects.toon.js +70 -0
  116. package/dist/engine/agent-api/nodes/effects.toon.js.map +1 -0
  117. package/dist/engine/agent-api/nodes/instancedMesh.d.ts +10 -0
  118. package/dist/engine/agent-api/nodes/instancedMesh.d.ts.map +1 -1
  119. package/dist/engine/agent-api/nodes/instancedMesh.js +7 -5
  120. package/dist/engine/agent-api/nodes/instancedMesh.js.map +1 -1
  121. package/dist/engine/agent-api/nodes/prefabs/index.d.ts +3 -0
  122. package/dist/engine/agent-api/nodes/prefabs/index.d.ts.map +1 -1
  123. package/dist/engine/agent-api/nodes/prefabs/index.js +3 -0
  124. package/dist/engine/agent-api/nodes/prefabs/index.js.map +1 -1
  125. package/dist/engine/agent-api/nodes/prefabs/objectiveMarker.d.ts +32 -0
  126. package/dist/engine/agent-api/nodes/prefabs/objectiveMarker.d.ts.map +1 -0
  127. package/dist/engine/agent-api/nodes/prefabs/objectiveMarker.js +77 -0
  128. package/dist/engine/agent-api/nodes/prefabs/objectiveMarker.js.map +1 -0
  129. package/dist/engine/lanes/prd06.d.ts.map +1 -1
  130. package/dist/engine/lanes/prd06.js +1 -16
  131. package/dist/engine/lanes/prd06.js.map +1 -1
  132. package/dist/engine/production-runtime/actor/ModelTextureShare.d.ts +1 -1
  133. package/dist/engine/production-runtime/actor/ModelTextureShare.d.ts.map +1 -1
  134. package/dist/engine/production-runtime/actor/ModelTextureShare.js +1 -1
  135. package/dist/engine/production-runtime/actor/ModelTextureShare.js.map +1 -1
  136. package/dist/engine/public/index.d.ts +52 -67
  137. package/dist/engine/public/index.d.ts.map +1 -1
  138. package/dist/engine/public/index.js +59 -56
  139. package/dist/engine/public/index.js.map +1 -1
  140. package/dist/engine/qa/countedRng.d.ts +2 -0
  141. package/dist/engine/qa/countedRng.d.ts.map +1 -1
  142. package/dist/engine/qa/countedRng.js +3 -0
  143. package/dist/engine/qa/countedRng.js.map +1 -1
  144. package/dist/engine/qa/fixedStepLoop.d.ts +4 -0
  145. package/dist/engine/qa/fixedStepLoop.d.ts.map +1 -1
  146. package/dist/engine/qa/fixedStepLoop.js +6 -0
  147. package/dist/engine/qa/fixedStepLoop.js.map +1 -1
  148. package/dist/engine/qa/hooks.js +1 -1
  149. package/dist/engine/qa/hooks.js.map +1 -1
  150. package/dist/game/evidence/beacon.d.ts +16 -6
  151. package/dist/game/evidence/beacon.d.ts.map +1 -1
  152. package/dist/game/evidence/beacon.js +32 -14
  153. package/dist/game/evidence/beacon.js.map +1 -1
  154. package/dist/game/evidence/textureStatus.d.ts +24 -0
  155. package/dist/game/evidence/textureStatus.d.ts.map +1 -0
  156. package/dist/game/evidence/textureStatus.js +27 -0
  157. package/dist/game/evidence/textureStatus.js.map +1 -0
  158. package/dist/game/hud/canvasMinimap.d.ts +60 -0
  159. package/dist/game/hud/canvasMinimap.d.ts.map +1 -0
  160. package/dist/game/hud/canvasMinimap.js +62 -0
  161. package/dist/game/hud/canvasMinimap.js.map +1 -0
  162. package/dist/game/hud/compass.d.ts +16 -0
  163. package/dist/game/hud/compass.d.ts.map +1 -0
  164. package/dist/game/hud/compass.js +15 -0
  165. package/dist/game/hud/compass.js.map +1 -0
  166. package/dist/game/index.d.ts +9 -0
  167. package/dist/game/index.d.ts.map +1 -1
  168. package/dist/game/index.js +5 -0
  169. package/dist/game/index.js.map +1 -1
  170. package/dist/game/motion/boneAttach.d.ts +42 -0
  171. package/dist/game/motion/boneAttach.d.ts.map +1 -0
  172. package/dist/game/motion/boneAttach.js +166 -0
  173. package/dist/game/motion/boneAttach.js.map +1 -0
  174. package/dist/game/motion/cameraClear.d.ts +35 -0
  175. package/dist/game/motion/cameraClear.d.ts.map +1 -0
  176. package/dist/game/motion/cameraClear.js +64 -0
  177. package/dist/game/motion/cameraClear.js.map +1 -0
  178. package/dist/game/motion/doubleFrame.d.ts +37 -0
  179. package/dist/game/motion/doubleFrame.d.ts.map +1 -0
  180. package/dist/game/motion/doubleFrame.js +59 -0
  181. package/dist/game/motion/doubleFrame.js.map +1 -0
  182. package/dist/game/motion/footSlide.d.ts +32 -0
  183. package/dist/game/motion/footSlide.d.ts.map +1 -0
  184. package/dist/game/motion/footSlide.js +59 -0
  185. package/dist/game/motion/footSlide.js.map +1 -0
  186. package/dist/game/motion/impact.d.ts +113 -0
  187. package/dist/game/motion/impact.d.ts.map +1 -0
  188. package/dist/game/motion/impact.js +233 -0
  189. package/dist/game/motion/impact.js.map +1 -0
  190. package/dist/game/motion/index.d.ts +19 -0
  191. package/dist/game/motion/index.d.ts.map +1 -0
  192. package/dist/game/motion/index.js +10 -0
  193. package/dist/game/motion/index.js.map +1 -0
  194. package/dist/game/motion/locomotion.d.ts +55 -0
  195. package/dist/game/motion/locomotion.d.ts.map +1 -0
  196. package/dist/game/motion/locomotion.js +107 -0
  197. package/dist/game/motion/locomotion.js.map +1 -0
  198. package/dist/game/motion/motionGate.d.ts +41 -0
  199. package/dist/game/motion/motionGate.d.ts.map +1 -0
  200. package/dist/game/motion/motionGate.js +71 -0
  201. package/dist/game/motion/motionGate.js.map +1 -0
  202. package/dist/game/motion/presenter.d.ts +37 -0
  203. package/dist/game/motion/presenter.d.ts.map +1 -0
  204. package/dist/game/motion/presenter.js +72 -0
  205. package/dist/game/motion/presenter.js.map +1 -0
  206. package/dist/game/motion/smoothing.d.ts +34 -0
  207. package/dist/game/motion/smoothing.d.ts.map +1 -0
  208. package/dist/game/motion/smoothing.js +92 -0
  209. package/dist/game/motion/smoothing.js.map +1 -0
  210. package/dist/game/session/warmPrograms.d.ts +58 -0
  211. package/dist/game/session/warmPrograms.d.ts.map +1 -0
  212. package/dist/game/session/warmPrograms.js +63 -0
  213. package/dist/game/session/warmPrograms.js.map +1 -0
  214. package/dist/math/Random.d.ts +3 -0
  215. package/dist/math/Random.d.ts.map +1 -1
  216. package/dist/math/Random.js +7 -0
  217. package/dist/math/Random.js.map +1 -1
  218. package/dist/rendering/WebGL2Device.d.ts.map +1 -1
  219. package/dist/rendering/WebGL2Device.js +3 -4
  220. package/dist/rendering/WebGL2Device.js.map +1 -1
  221. package/dist/rendering/environment/EnvironmentCache.d.ts.map +1 -1
  222. package/dist/rendering/environment/EnvironmentCache.js +6 -1
  223. package/dist/rendering/environment/EnvironmentCache.js.map +1 -1
  224. package/dist/rendering/environment/neutralEmbedded.d.ts +5 -0
  225. package/dist/rendering/environment/neutralEmbedded.d.ts.map +1 -0
  226. package/dist/rendering/environment/neutralEmbedded.js +1118 -0
  227. package/dist/rendering/environment/neutralEmbedded.js.map +1 -0
  228. package/dist/rendering/environment/neutralEmbeddedLoader.d.ts +5 -0
  229. package/dist/rendering/environment/neutralEmbeddedLoader.d.ts.map +1 -0
  230. package/dist/rendering/environment/neutralEmbeddedLoader.js +32 -0
  231. package/dist/rendering/environment/neutralEmbeddedLoader.js.map +1 -0
  232. package/dist/rendering/geometry/Primitives.d.ts +4 -1
  233. package/dist/rendering/geometry/Primitives.d.ts.map +1 -1
  234. package/dist/rendering/geometry/Primitives.js +5 -1
  235. package/dist/rendering/geometry/Primitives.js.map +1 -1
  236. package/dist/rendering/renderer/CullingBatching.d.ts.map +1 -1
  237. package/dist/rendering/renderer/CullingBatching.js +3 -7
  238. package/dist/rendering/renderer/CullingBatching.js.map +1 -1
  239. package/dist/rendering/renderer/InstanceBounds.d.ts +18 -0
  240. package/dist/rendering/renderer/InstanceBounds.d.ts.map +1 -0
  241. package/dist/rendering/renderer/InstanceBounds.js +68 -0
  242. package/dist/rendering/renderer/InstanceBounds.js.map +1 -0
  243. package/dist/rendering/renderer/RenderShared.d.ts.map +1 -1
  244. package/dist/rendering/renderer/RenderShared.js +3 -7
  245. package/dist/rendering/renderer/RenderShared.js.map +1 -1
  246. package/dist/rendering/shadows/DirectionalCascadeFitter.d.ts.map +1 -1
  247. package/dist/rendering/shadows/DirectionalCascadeFitter.js +19 -10
  248. package/dist/rendering/shadows/DirectionalCascadeFitter.js.map +1 -1
  249. package/dist/rendering/webgl2/LdrPostprocessShader.d.ts +24 -0
  250. package/dist/rendering/webgl2/LdrPostprocessShader.d.ts.map +1 -0
  251. package/dist/rendering/webgl2/LdrPostprocessShader.js +233 -0
  252. package/dist/rendering/webgl2/LdrPostprocessShader.js.map +1 -0
  253. package/dist/rendering/webgl2/LegacyPost.d.ts +5 -3
  254. package/dist/rendering/webgl2/LegacyPost.d.ts.map +1 -1
  255. package/dist/rendering/webgl2/LegacyPost.js +23 -191
  256. package/dist/rendering/webgl2/LegacyPost.js.map +1 -1
  257. package/package.json +25 -25
  258. package/templates/cinematic-scene/package.json +4 -3
  259. package/templates/mini-game/index.html +3 -1
  260. package/templates/mini-game/package.json +4 -3
  261. package/templates/mini-game/public/fonts/graphik/Graphik-Medium-Web.woff2 +0 -0
  262. package/templates/mini-game/public/fonts/graphik/Graphik-Regular-Web.woff2 +0 -0
  263. package/templates/mini-game/src/main.ts +1 -1
  264. package/templates/product-viewer/package.json +4 -3
  265. package/templates/production-asset-inspector/package.json +1 -1
  266. package/templates/production-material-studio/package.json +1 -1
  267. package/templates/production-product-configurator/package.json +1 -1
  268. package/templates/production-product-viewer/package.json +1 -1
@@ -5,10 +5,13 @@ export class AuraNodeBuilder {
5
5
  this.value = value;
6
6
  }
7
7
  position(x, y, z) {
8
- return this.with({ position: [x, y, z] });
8
+ const v = typeof x === "number" ? [x, y, z] : [x[0], x[1], x[2]];
9
+ return this.with({ position: v });
9
10
  }
10
11
  rotate(x, y, z, order) {
11
- return this.with(order === undefined ? { rotation: [x, y, z] } : { rotation: [x, y, z], rotationOrder: order });
12
+ const vec = typeof x === "number" ? [x, y, z] : [x[0], x[1], x[2]];
13
+ const eulerOrder = typeof x === "number" ? order : y;
14
+ return this.with(eulerOrder === undefined ? { rotation: vec } : { rotation: vec, rotationOrder: eulerOrder });
12
15
  }
13
16
  /** C-06 (PR 0a): quaternion rotation; wins over `rotation` in the compiled transform. */
14
17
  quaternion(x, y, z, w) {
@@ -18,7 +21,8 @@ export class AuraNodeBuilder {
18
21
  return this.with({ scale: value });
19
22
  }
20
23
  lookAt(x, y, z) {
21
- return this.with({ lookAt: [x, y, z] });
24
+ const v = typeof x === "number" ? [x, y, z] : [x[0], x[1], x[2]];
25
+ return this.with({ lookAt: v });
22
26
  }
23
27
  material(material) {
24
28
  return this.with({ material });
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/builder.ts"],"names":[],"mappings":"AAAA,+GAA+G;AAI/G,MAAM,OAAO,eAAe;IACG;IAA7B,YAA6B,KAAY;QAAZ,UAAK,GAAL,KAAK,CAAO;IAAG,CAAC;IAE7C,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QACtC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAU,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,KAA2D;QACjG,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAU,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAU,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;IACpI,CAAC;IAED,yFAAyF;IACzF,UAAU,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;QACnD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAU,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,KAAwB;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QACpC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAU,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,QAAQ,CAAC,QAA0B;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,CAAC,SAA4B;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,SAAS,CAAC,WAAgC;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,CAAC,IAAyB;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,IAAyB;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEO,IAAI,CAAwC,KAAa;QAC/D,OAAO,IAAI,eAAe,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,EAAoB,CAAC,CAAC;IAC5E,CAAC;CACF"}
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/builder.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@
10
10
  */
11
11
  import type { AuraCameraSpec, AuraSceneNode, AuraTransformSpec, AuraVec3 } from "./types.js";
12
12
  import { AuraNodeBuilder } from "./builder.js";
13
+ import { type ChaseOptions, type ChaseRig } from "./chaseCamera.js";
13
14
  export type AuraStereoLayout = "side-by-side" | "over-under";
14
15
  /** Normalized viewport in [0, 1] of the render target, origin bottom-left (three/WebGL convention). */
15
16
  export interface AuraCameraViewport {
@@ -90,6 +91,12 @@ export declare function isAuraCubeCameraNode(node: {
90
91
  readonly kind: "cube-camera";
91
92
  };
92
93
  export declare const cameras: {
94
+ /**
95
+ * Gameplay chase camera rig (runtime controller, not a scene node): feed it the followed target each frame and apply
96
+ * the returned pose with `app.camera.setPose`. Offset mode places the eye behind and the look target ahead; framed mode
97
+ * (`wantEye`/`wantLook`) only smooths. See `docs/api/camera-rig.md`.
98
+ */
99
+ readonly chase: (options?: ChaseOptions) => ChaseRig;
93
100
  /**
94
101
  * three's `new CubeCamera(near, far, renderTarget)` — cube render target via
95
102
  * `Renderer.renderProbeFace`; consume the capture through
@@ -1 +1 @@
1
- {"version":3,"file":"cameras.d.ts","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/cameras.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cameras.d.ts","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/cameras.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@
11
11
  import { AuraNodeBuilder } from "./builder.js";
12
12
  import { AuraRuntimeError } from "../compiler/errors.js";
13
13
  import { STEREO_DEFAULT_EYE_SEPARATION, STEREO_DEFAULT_FOCUS } from "../stereoMath.js";
14
+ import { createChaseRig } from "./chaseCamera.js";
14
15
  export function isAuraCameraArrayNode(node) {
15
16
  return node.kind === "camera-array";
16
17
  }
@@ -37,6 +38,12 @@ export function isAuraCubeCameraNode(node) {
37
38
  return node.kind === "cube-camera";
38
39
  }
39
40
  export const cameras = {
41
+ /**
42
+ * Gameplay chase camera rig (runtime controller, not a scene node): feed it the followed target each frame and apply
43
+ * the returned pose with `app.camera.setPose`. Offset mode places the eye behind and the look target ahead; framed mode
44
+ * (`wantEye`/`wantLook`) only smooths. See `docs/api/camera-rig.md`.
45
+ */
46
+ chase: (options = {}) => createChaseRig(options),
40
47
  /**
41
48
  * three's `new CubeCamera(near, far, renderTarget)` — cube render target via
42
49
  * `Renderer.renderProbeFace`; consume the capture through
@@ -1 +1 @@
1
- {"version":3,"file":"cameras.js","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/cameras.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cameras.js","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/cameras.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * `cameras.chase`: the gameplay chase camera rig shared by the Crayon ports.
3
+ *
4
+ * Pure, deterministic math (no DOM, no clock, no randomness): the caller feeds the followed target each frame and
5
+ * applies the returned pose with `app.camera.setPose`. Two ways to drive it:
6
+ * - offset mode: pass `position`, `heading`, `speed` and the rig places the eye behind and the look target ahead using
7
+ * `offset`, smooths the follow heading, eye, look and fov with `lag`, opens the fov with `fovKick` and adds shake;
8
+ * - framed mode: pass `wantEye` / `wantLook` (and optionally `fovTarget`) computed on a road frame, a rail or a menu orbit,
9
+ * and the rig only does the exponential smoothing, the first-frame snap and the cut flag.
10
+ * A lag rate is a per-second exponential rate (`1 - exp(-rate * dt)`); `Infinity` (or an absent lag) follows exactly.
11
+ */
12
+ export type ChaseVec3 = readonly [number, number, number];
13
+ export interface ChaseOffset {
14
+ /** Distance behind the target along the follow heading. */
15
+ readonly back?: number;
16
+ readonly backPerSpeed?: number;
17
+ /** Extra distance while `boosting`. */
18
+ readonly backBoost?: number;
19
+ /** Eye height above the target. */
20
+ readonly up?: number;
21
+ readonly upPerSpeed?: number;
22
+ /** The eye never drops below `groundAt(x, z) + minAboveGround` when the target supplies `groundAt`. */
23
+ readonly minAboveGround?: number;
24
+ /** Look target lead ahead of the target. */
25
+ readonly lead?: number;
26
+ readonly leadPerSpeed?: number;
27
+ /** Look target height above the target. */
28
+ readonly lookUp?: number;
29
+ }
30
+ export interface ChaseLag {
31
+ readonly eye?: number;
32
+ readonly look?: number;
33
+ readonly fov?: number;
34
+ /** Follow-heading rate at full speed (offset mode). */
35
+ readonly heading?: number;
36
+ /** Fraction of the heading rate applied at standstill (default 1: no speed ramp). */
37
+ readonly headingMinFollow?: number;
38
+ /** Speed at which the heading follow reaches its full rate (default 15). */
39
+ readonly headingFullSpeed?: number;
40
+ }
41
+ export interface ChaseFovKick {
42
+ readonly base?: number;
43
+ readonly perSpeed?: number;
44
+ /** Cap on the speed-driven opening. */
45
+ readonly maxSpeedKick?: number;
46
+ /** Extra fov while `boosting`. */
47
+ readonly boost?: number;
48
+ }
49
+ export interface ChaseShake {
50
+ /** Amplitude per unit of the target's `shake` value. */
51
+ readonly perShake?: number;
52
+ /** Speed above which a speed-driven shake begins, the speed span to full strength and its amplitude. */
53
+ readonly speedStart?: number;
54
+ readonly speedRange?: number;
55
+ readonly speedAmp?: number;
56
+ readonly boostAmp?: number;
57
+ /** Target `shake` values at or below this (with no speed shake) add nothing. */
58
+ readonly threshold?: number;
59
+ /** Vertical share of the amplitude and the wobble phase of the vertical axis. */
60
+ readonly verticalScale?: number;
61
+ readonly verticalPhase?: number;
62
+ /** `accumulate` adds the wobble into the smoothed eye state (a low-passed shake); `overlay` adds it to the output only. */
63
+ readonly mode?: "accumulate" | "overlay";
64
+ }
65
+ export interface ChaseOptions {
66
+ readonly offset?: ChaseOffset;
67
+ readonly lag?: ChaseLag;
68
+ readonly fovKick?: ChaseFovKick;
69
+ readonly shake?: ChaseShake;
70
+ /** Pose used by `snap` in offset mode. */
71
+ readonly snapOffset?: {
72
+ readonly back: number;
73
+ readonly up: number;
74
+ readonly lead: number;
75
+ readonly lookUp: number;
76
+ readonly fov: number;
77
+ };
78
+ }
79
+ export interface ChaseTarget {
80
+ readonly position?: ChaseVec3;
81
+ /** Heading in radians; forward is `(sin h, cos h)` on x/z. */
82
+ readonly heading?: number;
83
+ readonly speed?: number;
84
+ readonly boosting?: boolean;
85
+ /** Target shake amount, scaled by `shake.perShake`. */
86
+ readonly shake?: number;
87
+ readonly groundAt?: (x: number, z: number) => number;
88
+ /** Framed mode: desired eye and look (replace the offset placement). */
89
+ readonly wantEye?: ChaseVec3;
90
+ readonly wantLook?: ChaseVec3;
91
+ /** Desired fov (replaces the base + kick formula). */
92
+ readonly fovTarget?: number;
93
+ /** Per-step lag override (kid-goku style per-phase rates). */
94
+ readonly lag?: ChaseLag;
95
+ /** Added to the eye after smoothing, never stored (damage shake, camera bob). */
96
+ readonly shakeOffset?: ChaseVec3;
97
+ /** Snap eye, look and fov to their targets this step. */
98
+ readonly cut?: boolean;
99
+ }
100
+ export interface ChasePose {
101
+ eye: [number, number, number];
102
+ look: [number, number, number];
103
+ fov: number;
104
+ /** Smoothed follow heading. */
105
+ heading: number;
106
+ /** Rig clock (sum of dt), drives the shake wobble. */
107
+ time: number;
108
+ /** True when this step snapped instead of smoothing: pass it as `setPose`'s `cut`. */
109
+ cut: boolean;
110
+ }
111
+ export interface ChaseRig {
112
+ readonly pose: ChasePose;
113
+ /** Place the rig exactly on its targets with no smoothing. */
114
+ snap(target: ChaseTarget): ChasePose;
115
+ step(target: ChaseTarget, dt: number): ChasePose;
116
+ /** Forget the pose: the next `step` snaps. */
117
+ reset(): void;
118
+ }
119
+ export declare function approach(current: number, target: number, rate: number, dt: number): number;
120
+ export declare function approachAngle(current: number, target: number, rate: number, dt: number): number;
121
+ export declare function createChaseRig(options?: ChaseOptions): ChaseRig;
122
+ //# sourceMappingURL=chaseCamera.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chaseCamera.d.ts","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/chaseCamera.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * `cameras.chase`: the gameplay chase camera rig shared by the Crayon ports.
3
+ *
4
+ * Pure, deterministic math (no DOM, no clock, no randomness): the caller feeds the followed target each frame and
5
+ * applies the returned pose with `app.camera.setPose`. Two ways to drive it:
6
+ * - offset mode: pass `position`, `heading`, `speed` and the rig places the eye behind and the look target ahead using
7
+ * `offset`, smooths the follow heading, eye, look and fov with `lag`, opens the fov with `fovKick` and adds shake;
8
+ * - framed mode: pass `wantEye` / `wantLook` (and optionally `fovTarget`) computed on a road frame, a rail or a menu orbit,
9
+ * and the rig only does the exponential smoothing, the first-frame snap and the cut flag.
10
+ * A lag rate is a per-second exponential rate (`1 - exp(-rate * dt)`); `Infinity` (or an absent lag) follows exactly.
11
+ */
12
+ export function approach(current, target, rate, dt) {
13
+ if (!(rate < Infinity))
14
+ return target;
15
+ return current + (target - current) * (1 - Math.exp(-rate * dt));
16
+ }
17
+ export function approachAngle(current, target, rate, dt) {
18
+ let d = target - current;
19
+ while (d > Math.PI)
20
+ d -= 2 * Math.PI;
21
+ while (d < -Math.PI)
22
+ d += 2 * Math.PI;
23
+ return current + d * (rate < Infinity ? 1 - Math.exp(-rate * dt) : 1);
24
+ }
25
+ const clamp = (v, lo, hi) => Math.min(hi, Math.max(lo, v));
26
+ const wobble = (t, amp, phase) => (0.62 * Math.sin(t * (6.1 + phase)) + 0.38 * Math.sin(t * (11.3 + 1.7 * phase))) * amp;
27
+ export function createChaseRig(options = {}) {
28
+ const o = options.offset ?? {};
29
+ const baseLag = options.lag ?? {};
30
+ const kick = options.fovKick ?? {};
31
+ const sh = options.shake;
32
+ const snapO = options.snapOffset ?? { back: (o.back ?? 6) + 4.7, up: (o.up ?? 2.5) + 1.8, lead: o.lead ?? 5, lookUp: o.lookUp ?? 1.25, fov: kick.base ?? 56 };
33
+ const pose = { eye: [0, 0, 0], look: [0, 0, 0], fov: kick.base ?? 56, heading: 0, time: 0, cut: true };
34
+ let live = false;
35
+ const wantFov = (t, speed) => t.fovTarget ?? (kick.base ?? 56) + clamp((kick.perSpeed ?? 0) * speed, 0, kick.maxSpeedKick ?? Infinity) + (t.boosting ? kick.boost ?? 0 : 0);
36
+ const snap = (t) => {
37
+ const p = t.position ?? [0, 0, 0];
38
+ const h = t.heading ?? 0;
39
+ const s = Math.sin(h);
40
+ const c = Math.cos(h);
41
+ pose.heading = h;
42
+ pose.time = 0;
43
+ pose.cut = true;
44
+ if (t.wantEye && t.wantLook) {
45
+ pose.eye = [t.wantEye[0], t.wantEye[1], t.wantEye[2]];
46
+ pose.look = [t.wantLook[0], t.wantLook[1], t.wantLook[2]];
47
+ pose.fov = wantFov(t, Math.abs(t.speed ?? 0));
48
+ }
49
+ else {
50
+ pose.eye = [p[0] - snapO.back * s, p[1] + snapO.up, p[2] - snapO.back * c];
51
+ pose.look = [p[0] + snapO.lead * s, p[1] + snapO.lookUp, p[2] + snapO.lead * c];
52
+ pose.fov = snapO.fov;
53
+ }
54
+ live = true;
55
+ return pose;
56
+ };
57
+ const step = (t, dt) => {
58
+ if (!live || t.cut) {
59
+ snap(t);
60
+ return finish(t);
61
+ }
62
+ pose.cut = false;
63
+ pose.time += dt;
64
+ const lag = t.lag ? { ...baseLag, ...t.lag } : baseLag;
65
+ const speed = Math.abs(t.speed ?? 0);
66
+ let wantEye;
67
+ let wantLook;
68
+ if (t.wantEye && t.wantLook) {
69
+ wantEye = t.wantEye;
70
+ wantLook = t.wantLook;
71
+ }
72
+ else {
73
+ const p = t.position ?? [0, 0, 0];
74
+ const follow = (lag.headingMinFollow ?? 1) + (1 - (lag.headingMinFollow ?? 1)) * clamp(speed / (lag.headingFullSpeed ?? 15), 0, 1);
75
+ pose.heading = approachAngle(pose.heading, t.heading ?? 0, (lag.heading ?? Infinity) * follow, dt);
76
+ const sn = Math.sin(pose.heading);
77
+ const cs = Math.cos(pose.heading);
78
+ const back = (o.back ?? 6) + (o.backPerSpeed ?? 0) * speed + (t.boosting ? o.backBoost ?? 0 : 0);
79
+ let ey = p[1] + (o.up ?? 2.5) + (o.upPerSpeed ?? 0) * speed;
80
+ const tx = p[0] - sn * back;
81
+ const tz = p[2] - cs * back;
82
+ if (t.groundAt && o.minAboveGround !== undefined)
83
+ ey = Math.max(ey, t.groundAt(tx, tz) + o.minAboveGround);
84
+ const lead = (o.lead ?? 5) + (o.leadPerSpeed ?? 0) * speed;
85
+ wantEye = [tx, ey, tz];
86
+ wantLook = [p[0] + sn * lead, p[1] + (o.lookUp ?? 1.25), p[2] + cs * lead];
87
+ }
88
+ const eyeRate = lag.eye ?? Infinity;
89
+ const lookRate = lag.look ?? Infinity;
90
+ pose.eye = [approach(pose.eye[0], wantEye[0], eyeRate, dt), approach(pose.eye[1], wantEye[1], eyeRate, dt), approach(pose.eye[2], wantEye[2], eyeRate, dt)];
91
+ if (sh && (sh.mode ?? "accumulate") === "accumulate") {
92
+ const speedShake = (sh.speedAmp ?? 0) * clamp((speed - (sh.speedStart ?? 0)) / (sh.speedRange ?? 1), 0, 1) + (t.boosting ? sh.boostAmp ?? 0 : 0);
93
+ const shake = t.shake ?? 0;
94
+ if (shake > (sh.threshold ?? 0) || speedShake > 0) {
95
+ const amp = (sh.perShake ?? 1) * shake + speedShake;
96
+ pose.eye[0] += wobble(pose.time, amp, 0);
97
+ pose.eye[1] += wobble(pose.time, (sh.verticalScale ?? 0.7) * amp, sh.verticalPhase ?? 1.3);
98
+ }
99
+ }
100
+ pose.look = [approach(pose.look[0], wantLook[0], lookRate, dt), approach(pose.look[1], wantLook[1], lookRate, dt), approach(pose.look[2], wantLook[2], lookRate, dt)];
101
+ pose.fov = approach(pose.fov, wantFov(t, speed), lag.fov ?? Infinity, dt);
102
+ return finish(t);
103
+ };
104
+ const finish = (t) => {
105
+ if (sh && sh.mode === "overlay") {
106
+ const speed = Math.abs(t.speed ?? 0);
107
+ const speedShake = (sh.speedAmp ?? 0) * clamp((speed - (sh.speedStart ?? 0)) / (sh.speedRange ?? 1), 0, 1) + (t.boosting ? sh.boostAmp ?? 0 : 0);
108
+ const shake = t.shake ?? 0;
109
+ if (shake > (sh.threshold ?? 0) || speedShake > 0) {
110
+ const amp = (sh.perShake ?? 1) * shake + speedShake;
111
+ const out = { ...pose, eye: [pose.eye[0] + wobble(pose.time, amp, 0), pose.eye[1] + wobble(pose.time, (sh.verticalScale ?? 0.7) * amp, sh.verticalPhase ?? 1.3), pose.eye[2]] };
112
+ if (t.shakeOffset)
113
+ out.eye = [out.eye[0] + t.shakeOffset[0], out.eye[1] + t.shakeOffset[1], out.eye[2] + t.shakeOffset[2]];
114
+ return out;
115
+ }
116
+ }
117
+ if (t.shakeOffset)
118
+ return { ...pose, eye: [pose.eye[0] + t.shakeOffset[0], pose.eye[1] + t.shakeOffset[1], pose.eye[2] + t.shakeOffset[2]] };
119
+ return pose;
120
+ };
121
+ return {
122
+ pose,
123
+ snap: (t) => (snap(t), finish(t)),
124
+ step,
125
+ reset() {
126
+ live = false;
127
+ }
128
+ };
129
+ }
130
+ //# sourceMappingURL=chaseCamera.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chaseCamera.js","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/chaseCamera.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  export declare const effects: {
2
2
  readonly contactShadows: (options?: import("./effects.lighting.js").AuraContactShadowOptions) => import("./builder.js").AuraNodeBuilder<import("./types.js").AuraEffectNode>;
3
+ readonly toon: (options?: import("./effects.toon.js").AuraToonOptions) => import("../publishedUnion.js").AuraCustomPostPass;
3
4
  readonly bloom: (options?: Omit<import("./types.js").AuraEffectNode, "kind" | "effect">) => import("./builder.js").AuraNodeBuilder<import("./types.js").AuraEffectNode>;
4
5
  readonly neonBloom: (options?: Omit<import("./types.js").AuraEffectNode, "kind" | "effect">) => import("./builder.js").AuraNodeBuilder<import("./types.js").AuraEffectNode>;
5
6
  readonly ambientOcclusion: (options?: Omit<import("./types.js").AuraEffectNode, "kind" | "effect">) => import("./builder.js").AuraNodeBuilder<import("./types.js").AuraEffectNode>;
@@ -1 +1 @@
1
- {"version":3,"file":"effects.composite.d.ts","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/effects.composite.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;sBAK0mR,CAAC;qBAAkC,CAAC;qBAAuD,CAAC;qBAA2B,CAAC;wBAA+B,CAAC;uBAA6B,CAAC;;;;;;;;;CADxyR,CAAC"}
1
+ {"version":3,"file":"effects.composite.d.ts","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/effects.composite.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;sBAMyhR,CAAC;qBAAkC,CAAC;qBAAuD,CAAC;qBAA2B,CAAC;wBAA+B,CAAC;uBAA6B,CAAC;;;;;;;;;CADvtR,CAAC"}
@@ -2,10 +2,12 @@
2
2
  import { lightingEffectBuilders } from "./effects.lighting.js";
3
3
  import { postEffectBuilders } from "./effects.post.js";
4
4
  import { vfxEffectBuilders } from "./effects.js";
5
+ import { toonEffectBuilders } from "./effects.toon.js";
5
6
  import { lazyNamespace } from "../lazyNamespace.js";
6
7
  export const effects = lazyNamespace(() => ({
7
8
  ...vfxEffectBuilders,
8
9
  ...postEffectBuilders,
10
+ ...toonEffectBuilders,
9
11
  ...lightingEffectBuilders
10
12
  }));
11
13
  //# sourceMappingURL=effects.composite.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"effects.composite.js","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/effects.composite.ts"],"names":[],"mappings":"AAAA,+GAA+G;AAE/G,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,MAAM,CAAC,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1C,GAAG,iBAAiB;IACpB,GAAG,kBAAkB;IACrB,GAAG,sBAAsB;CAChB,CAAA,CAAC,CAAC"}
1
+ {"version":3,"file":"effects.composite.js","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/effects.composite.ts"],"names":[],"mappings":"AAAA,+GAA+G;AAE/G,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,MAAM,CAAC,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1C,GAAG,iBAAiB;IACpB,GAAG,kBAAkB;IACrB,GAAG,kBAAkB;IACrB,GAAG,sBAAsB;CAChB,CAAA,CAAC,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { AuraCustomPostPass, AuraPostPassOrder } from "../../contracts/post.js";
2
+ export interface AuraToonOptions {
3
+ readonly name?: string;
4
+ /** Luma steps (>= 2). Default 5. */
5
+ readonly bands?: number;
6
+ /** 0 keeps the smooth image, 1 is fully banded. Default 0.75. */
7
+ readonly bandMix?: number;
8
+ /** Outline strength 0..1; 0 disables the Sobel outline. Default 0.75. */
9
+ readonly outline?: number;
10
+ /** Outline colour, linear RGB 0..1. Default [0.05, 0.09, 0.11]. */
11
+ readonly ink?: readonly [number, number, number];
12
+ /** Sobel magnitude where the outline starts and where it is fully on. Defaults 0.26 and 0.6. */
13
+ readonly edgeStart?: number;
14
+ readonly edgeEnd?: number;
15
+ /** Render-target size in device px; sets `u_texel`. Update on resize with `toonTexel`. */
16
+ readonly size?: readonly [number, number];
17
+ readonly order?: AuraPostPassOrder;
18
+ }
19
+ export declare const TOON_FRAGMENT = "\nuniform vec2 u_texel;\nuniform float u_bands;\nuniform float u_band_mix;\nuniform float u_outline;\nuniform vec3 u_ink;\nuniform vec2 u_edge;\nfloat lum(vec3 c) { return dot(c, vec3(0.2126, 0.7152, 0.0722)); }\nvoid main() {\n vec4 c = texture(u_color, v_uv);\n float l = lum(c.rgb);\n float banded = floor(l * u_bands + 0.5) / u_bands;\n float target = mix(l, banded, u_band_mix);\n vec3 col = c.rgb * (target / max(l, 0.02));\n float tl = lum(texture(u_color, v_uv + u_texel * vec2(-1.0, 1.0)).rgb);\n float t = lum(texture(u_color, v_uv + u_texel * vec2(0.0, 1.0)).rgb);\n float tr = lum(texture(u_color, v_uv + u_texel * vec2(1.0, 1.0)).rgb);\n float lf = lum(texture(u_color, v_uv + u_texel * vec2(-1.0, 0.0)).rgb);\n float rt = lum(texture(u_color, v_uv + u_texel * vec2(1.0, 0.0)).rgb);\n float bl = lum(texture(u_color, v_uv + u_texel * vec2(-1.0, -1.0)).rgb);\n float b = lum(texture(u_color, v_uv + u_texel * vec2(0.0, -1.0)).rgb);\n float br = lum(texture(u_color, v_uv + u_texel * vec2(1.0, -1.0)).rgb);\n float gx = (tr + 2.0 * rt + br) - (tl + 2.0 * lf + bl);\n float gy = (tl + 2.0 * t + tr) - (bl + 2.0 * b + br);\n float edge = smoothstep(u_edge.x, u_edge.y, sqrt(gx * gx + gy * gy));\n outColor = vec4(mix(col, u_ink, edge * u_outline), c.a);\n}";
20
+ /** `u_texel` value for a render target of `width` x `height` device px; pass it to `app.post.setPassUniform(name, "u_texel", ...)` on resize. */
21
+ export declare function toonTexel(width: number, height: number): number[];
22
+ export declare const toonEffectBuilders: {
23
+ /** Cel pass over the final image: luma banding plus a Sobel outline. Returns a post pass for `app.post.addPostPass(...)`. */
24
+ readonly toon: (options?: AuraToonOptions) => AuraCustomPostPass;
25
+ };
26
+ //# sourceMappingURL=effects.toon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effects.toon.d.ts","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/effects.toon.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAGrF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,mEAAmE;IACnE,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,gGAAgG;IAChG,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,0FAA0F;IAC1F,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC;CACpC;AAED,eAAO,MAAM,aAAa,uwCA0BxB,CAAC;AAEH,iJAAiJ;AACjJ,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAEjE;AASD,eAAO,MAAM,kBAAkB;IAC7B,6HAA6H;8BAC7G,eAAe,KAAQ,kBAAkB;CAyBjD,CAAC"}
@@ -0,0 +1,70 @@
1
+ import { AuraRuntimeError } from "../compiler/errors.js";
2
+ import { postEffectBuilders } from "./effects.post.js";
3
+ export const TOON_FRAGMENT = /* glsl */ `
4
+ uniform vec2 u_texel;
5
+ uniform float u_bands;
6
+ uniform float u_band_mix;
7
+ uniform float u_outline;
8
+ uniform vec3 u_ink;
9
+ uniform vec2 u_edge;
10
+ float lum(vec3 c) { return dot(c, vec3(0.2126, 0.7152, 0.0722)); }
11
+ void main() {
12
+ vec4 c = texture(u_color, v_uv);
13
+ float l = lum(c.rgb);
14
+ float banded = floor(l * u_bands + 0.5) / u_bands;
15
+ float target = mix(l, banded, u_band_mix);
16
+ vec3 col = c.rgb * (target / max(l, 0.02));
17
+ float tl = lum(texture(u_color, v_uv + u_texel * vec2(-1.0, 1.0)).rgb);
18
+ float t = lum(texture(u_color, v_uv + u_texel * vec2(0.0, 1.0)).rgb);
19
+ float tr = lum(texture(u_color, v_uv + u_texel * vec2(1.0, 1.0)).rgb);
20
+ float lf = lum(texture(u_color, v_uv + u_texel * vec2(-1.0, 0.0)).rgb);
21
+ float rt = lum(texture(u_color, v_uv + u_texel * vec2(1.0, 0.0)).rgb);
22
+ float bl = lum(texture(u_color, v_uv + u_texel * vec2(-1.0, -1.0)).rgb);
23
+ float b = lum(texture(u_color, v_uv + u_texel * vec2(0.0, -1.0)).rgb);
24
+ float br = lum(texture(u_color, v_uv + u_texel * vec2(1.0, -1.0)).rgb);
25
+ float gx = (tr + 2.0 * rt + br) - (tl + 2.0 * lf + bl);
26
+ float gy = (tl + 2.0 * t + tr) - (bl + 2.0 * b + br);
27
+ float edge = smoothstep(u_edge.x, u_edge.y, sqrt(gx * gx + gy * gy));
28
+ outColor = vec4(mix(col, u_ink, edge * u_outline), c.a);
29
+ }`;
30
+ /** `u_texel` value for a render target of `width` x `height` device px; pass it to `app.post.setPassUniform(name, "u_texel", ...)` on resize. */
31
+ export function toonTexel(width, height) {
32
+ return [1 / Math.max(1, width), 1 / Math.max(1, height)];
33
+ }
34
+ function finiteIn(label, value, min, max) {
35
+ if (!Number.isFinite(value) || value < min || value > max) {
36
+ throw new AuraRuntimeError("invalid-material-spec", `effects.toon ${label} must be a finite number in [${min}, ${max}], got ${String(value)}`);
37
+ }
38
+ return value;
39
+ }
40
+ export const toonEffectBuilders = {
41
+ /** Cel pass over the final image: luma banding plus a Sobel outline. Returns a post pass for `app.post.addPostPass(...)`. */
42
+ toon: (options = {}) => {
43
+ const bands = finiteIn("bands", options.bands ?? 5, 2, 64);
44
+ const bandMix = finiteIn("bandMix", options.bandMix ?? 0.75, 0, 1);
45
+ const outline = finiteIn("outline", options.outline ?? 0.75, 0, 1);
46
+ const ink = options.ink ?? [0.05, 0.09, 0.11];
47
+ if (ink.length !== 3)
48
+ throw new AuraRuntimeError("invalid-material-spec", "effects.toon ink must be [r, g, b]");
49
+ ink.forEach((v) => finiteIn("ink channel", v, 0, 1));
50
+ const edgeStart = finiteIn("edgeStart", options.edgeStart ?? 0.26, 0, 4);
51
+ const edgeEnd = finiteIn("edgeEnd", options.edgeEnd ?? 0.6, 0, 4);
52
+ if (edgeEnd <= edgeStart)
53
+ throw new AuraRuntimeError("invalid-material-spec", "effects.toon edgeEnd must be greater than edgeStart");
54
+ const size = options.size ?? [1280, 720];
55
+ return postEffectBuilders.shaderPass({
56
+ name: options.name ?? "toon",
57
+ order: options.order ?? "after-tonemap",
58
+ glsl: TOON_FRAGMENT,
59
+ uniforms: {
60
+ u_texel: toonTexel(size[0], size[1]),
61
+ u_bands: bands,
62
+ u_band_mix: bandMix,
63
+ u_outline: outline,
64
+ u_ink: [...ink],
65
+ u_edge: [edgeStart, edgeEnd]
66
+ }
67
+ });
68
+ }
69
+ };
70
+ //# sourceMappingURL=effects.toon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effects.toon.js","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/effects.toon.ts"],"names":[],"mappings":"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"}
@@ -39,10 +39,17 @@ export declare class AuraInstancedMeshHandle extends AuraNodeBuilder<AuraBatched
39
39
  position(x: number, y: number, z: number): AuraNodeBuilder<AuraBatchedNode & {
40
40
  readonly position: import("./types.js").AuraVec3;
41
41
  }>;
42
+ position(value: import("./types.js").AuraVec3): AuraNodeBuilder<AuraBatchedNode & {
43
+ readonly position: import("./types.js").AuraVec3;
44
+ }>;
42
45
  rotate(x: number, y: number, z: number, order?: import("../../contracts/sceneGraph.js").AuraEulerOrder): AuraNodeBuilder<AuraBatchedNode & {
43
46
  readonly rotation: import("./types.js").AuraVec3;
44
47
  readonly rotationOrder?: import("../../contracts/sceneGraph.js").AuraEulerOrder;
45
48
  }>;
49
+ rotate(value: import("./types.js").AuraVec3, order?: import("../../contracts/sceneGraph.js").AuraEulerOrder): AuraNodeBuilder<AuraBatchedNode & {
50
+ readonly rotation: import("./types.js").AuraVec3;
51
+ readonly rotationOrder?: import("../../contracts/sceneGraph.js").AuraEulerOrder;
52
+ }>;
46
53
  quaternion(x: number, y: number, z: number, w: number): AuraNodeBuilder<AuraBatchedNode & {
47
54
  readonly quaternion: import("../../contracts/sceneGraph.js").AuraQuat;
48
55
  }>;
@@ -52,6 +59,9 @@ export declare class AuraInstancedMeshHandle extends AuraNodeBuilder<AuraBatched
52
59
  lookAt(x: number, y: number, z: number): AuraNodeBuilder<AuraBatchedNode & {
53
60
  readonly lookAt: import("./types.js").AuraVec3;
54
61
  }>;
62
+ lookAt(value: import("./types.js").AuraVec3): AuraNodeBuilder<AuraBatchedNode & {
63
+ readonly lookAt: import("./types.js").AuraVec3;
64
+ }>;
55
65
  material(spec: AuraMaterialSpec): AuraNodeBuilder<AuraBatchedNode & {
56
66
  readonly material: AuraMaterialSpec;
57
67
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"instancedMesh.d.ts","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/instancedMesh.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instancedMesh.d.ts","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/instancedMesh.ts"],"names":[],"mappings":"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"}