@nodetool-ai/game-renderer 0.8.3 → 0.8.4-a24.1

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 (105) hide show
  1. package/dist/.nodetool-build-stamp +1 -1
  2. package/dist/audio/music.d.ts +38 -0
  3. package/dist/audio/music.d.ts.map +1 -0
  4. package/dist/audio/music.js +186 -0
  5. package/dist/audio/music.js.map +1 -0
  6. package/dist/audio/player.d.ts +15 -1
  7. package/dist/audio/player.d.ts.map +1 -1
  8. package/dist/audio/player.js +185 -19
  9. package/dist/audio/player.js.map +1 -1
  10. package/dist/build-tauri.d.ts.map +1 -1
  11. package/dist/build-tauri.js +3 -4
  12. package/dist/build-tauri.js.map +1 -1
  13. package/dist/build3d.d.ts +1 -1
  14. package/dist/build3d.d.ts.map +1 -1
  15. package/dist/build3d.js +13 -1
  16. package/dist/build3d.js.map +1 -1
  17. package/dist/game3d-capture-page.js +328 -262
  18. package/dist/game3d-player.js +415 -311
  19. package/dist/index.d.ts +2 -0
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +2 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/node3d.d.ts +3 -0
  24. package/dist/node3d.d.ts.map +1 -1
  25. package/dist/node3d.js +27 -1
  26. package/dist/node3d.js.map +1 -1
  27. package/dist/particles/index.d.ts +1 -0
  28. package/dist/particles/index.d.ts.map +1 -1
  29. package/dist/particles/index.js +1 -0
  30. package/dist/particles/index.js.map +1 -1
  31. package/dist/particles/particles3d.d.ts +89 -0
  32. package/dist/particles/particles3d.d.ts.map +1 -0
  33. package/dist/particles/particles3d.js +176 -0
  34. package/dist/particles/particles3d.js.map +1 -0
  35. package/dist/particles/pass3d.d.ts +63 -0
  36. package/dist/particles/pass3d.d.ts.map +1 -0
  37. package/dist/particles/pass3d.js +394 -0
  38. package/dist/particles/pass3d.js.map +1 -0
  39. package/dist/particles/simulator.d.ts +4 -0
  40. package/dist/particles/simulator.d.ts.map +1 -1
  41. package/dist/particles/simulator.js +9 -1
  42. package/dist/particles/simulator.js.map +1 -1
  43. package/dist/player-v1.js +412 -353
  44. package/dist/preparation3d.d.ts +2 -0
  45. package/dist/preparation3d.d.ts.map +1 -1
  46. package/dist/preparation3d.js +1 -0
  47. package/dist/preparation3d.js.map +1 -1
  48. package/dist/renderer3d/assets/image-cache.d.ts +20 -0
  49. package/dist/renderer3d/assets/image-cache.d.ts.map +1 -0
  50. package/dist/renderer3d/assets/image-cache.js +140 -0
  51. package/dist/renderer3d/assets/image-cache.js.map +1 -0
  52. package/dist/renderer3d/assets/image-contract.d.ts +14 -0
  53. package/dist/renderer3d/assets/image-contract.d.ts.map +1 -0
  54. package/dist/renderer3d/assets/image-contract.js +2 -0
  55. package/dist/renderer3d/assets/image-contract.js.map +1 -0
  56. package/dist/renderer3d/assets/image-preparation.d.ts +18 -0
  57. package/dist/renderer3d/assets/image-preparation.d.ts.map +1 -0
  58. package/dist/renderer3d/assets/image-preparation.js +167 -0
  59. package/dist/renderer3d/assets/image-preparation.js.map +1 -0
  60. package/dist/renderer3d/capture-page.d.ts +3 -0
  61. package/dist/renderer3d/capture-page.d.ts.map +1 -1
  62. package/dist/renderer3d/capture-page.js +17 -4
  63. package/dist/renderer3d/capture-page.js.map +1 -1
  64. package/dist/renderer3d/hud/paint.d.ts +1 -0
  65. package/dist/renderer3d/hud/paint.d.ts.map +1 -1
  66. package/dist/renderer3d/hud/paint.js +7 -0
  67. package/dist/renderer3d/hud/paint.js.map +1 -1
  68. package/dist/renderer3d/index.d.ts +13 -2
  69. package/dist/renderer3d/index.d.ts.map +1 -1
  70. package/dist/renderer3d/index.js +26 -4
  71. package/dist/renderer3d/index.js.map +1 -1
  72. package/dist/renderer3d/passes/editor.d.ts +59 -0
  73. package/dist/renderer3d/passes/editor.d.ts.map +1 -0
  74. package/dist/renderer3d/passes/editor.js +290 -0
  75. package/dist/renderer3d/passes/editor.js.map +1 -0
  76. package/dist/renderer3d/passes/post-processing.d.ts +2 -0
  77. package/dist/renderer3d/passes/post-processing.d.ts.map +1 -1
  78. package/dist/renderer3d/passes/post-processing.js +3 -1
  79. package/dist/renderer3d/passes/post-processing.js.map +1 -1
  80. package/dist/renderer3d/preparation.d.ts.map +1 -1
  81. package/dist/renderer3d/preparation.js +2 -0
  82. package/dist/renderer3d/preparation.js.map +1 -1
  83. package/dist/save-storage.d.ts +19 -0
  84. package/dist/save-storage.d.ts.map +1 -0
  85. package/dist/save-storage.js +135 -0
  86. package/dist/save-storage.js.map +1 -0
  87. package/dist/smoke.d.ts.map +1 -1
  88. package/dist/smoke.js +12 -2
  89. package/dist/smoke.js.map +1 -1
  90. package/dist/standalone-player.d.ts +3 -0
  91. package/dist/standalone-player.d.ts.map +1 -1
  92. package/dist/standalone-player.js +40 -30
  93. package/dist/standalone-player.js.map +1 -1
  94. package/dist/standalone-player3d.d.ts +3 -0
  95. package/dist/standalone-player3d.d.ts.map +1 -1
  96. package/dist/standalone-player3d.js +47 -13
  97. package/dist/standalone-player3d.js.map +1 -1
  98. package/dist/ui/controller.d.ts.map +1 -1
  99. package/dist/ui/controller.js +2 -1
  100. package/dist/ui/controller.js.map +1 -1
  101. package/dist/ui/hud3d.d.ts +5 -0
  102. package/dist/ui/hud3d.d.ts.map +1 -0
  103. package/dist/ui/hud3d.js +5 -0
  104. package/dist/ui/hud3d.js.map +1 -0
  105. package/package.json +14 -6
package/dist/index.d.ts CHANGED
@@ -50,5 +50,7 @@ export { browserGamepads, GameInput, type GamepadLike, type TouchInputState } fr
50
50
  export * from "./ui/layout.js";
51
51
  export * from "./ui/paint.js";
52
52
  export * from "./ui/hud2d.js";
53
+ export * from "./ui/hud3d.js";
53
54
  export * from "./ui/controller.js";
55
+ export { createIndexedDbGameSaveStorage, createLocalGameSaveStorage, loadQuickSave, type GameSaveWebStorage } from "./save-storage.js";
54
56
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -8,5 +8,7 @@ export { browserGamepads, GameInput } from "./input-bindings.js";
8
8
  export * from "./ui/layout.js";
9
9
  export * from "./ui/paint.js";
10
10
  export * from "./ui/hud2d.js";
11
+ export * from "./ui/hud3d.js";
11
12
  export * from "./ui/controller.js";
13
+ export { createIndexedDbGameSaveStorage, createLocalGameSaveStorage, loadQuickSave } from "./save-storage.js";
12
14
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AA4ClC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,SAAS,EAA0C,MAAM,qBAAqB,CAAC;AACzG,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AA4ClC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,SAAS,EAA0C,MAAM,qBAAqB,CAAC;AACzG,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,8BAA8B,EAAE,0BAA0B,EAAE,aAAa,EAA2B,MAAM,mBAAmB,CAAC"}
package/dist/node3d.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { type GameRenderFrame3D } from "@nodetool-ai/protocol";
2
2
  import type { GameModelSource3D } from "./renderer3d/index.js";
3
3
  import type { GameCapturePageReport3D } from "./renderer3d/capture-page.js";
4
+ import type { GameParticleField } from "./particles/render2d.js";
4
5
  export declare class GameRendererUnavailableError3D extends Error {
5
6
  readonly missingFeatures: readonly string[];
6
7
  readonly code = "renderer_unavailable";
@@ -18,6 +19,8 @@ export interface CaptureGameFrame3DOptions {
18
19
  readonly benchmarkFrames?: number;
19
20
  readonly timeoutMs?: number;
20
21
  readonly executablePath?: string;
22
+ /** Particles to draw, such as a `GameParticles3D` ticked beside the session up to the captured tick. */
23
+ readonly particles?: GameParticleField;
21
24
  }
22
25
  export interface CapturedGameFrame3D extends GameCapturePageReport3D {
23
26
  readonly png: Uint8Array;
@@ -1 +1 @@
1
- {"version":3,"file":"node3d.d.ts","sourceRoot":"","sources":["../src/node3d.ts"],"names":[],"mappings":"AAMA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAA0B,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEpG,qBAAa,8BAA+B,SAAQ,KAAK;IAE1B,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE;IADxE,QAAQ,CAAC,IAAI,0BAA0B;IACvC,YAAY,OAAO,EAAE,MAAM,EAAW,eAAe,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,EAA4E;CAC7K;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,iBAAiB,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC;IACnH,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC9C,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AACD,MAAM,WAAW,mBAAoB,SAAQ,uBAAuB;IAClE,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAsBD,kFAAkF;AAClF,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,GAAE,yBAA8B,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAsFxI"}
1
+ {"version":3,"file":"node3d.d.ts","sourceRoot":"","sources":["../src/node3d.ts"],"names":[],"mappings":"AAMA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAA0B,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,qBAAa,8BAA+B,SAAQ,KAAK;IAE1B,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE;IADxE,QAAQ,CAAC,IAAI,0BAA0B;IACvC,YAAY,OAAO,EAAE,MAAM,EAAW,eAAe,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,EAA4E;CAC7K;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,iBAAiB,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC;IACnH,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC9C,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,wGAAwG;IACxG,QAAQ,CAAC,SAAS,CAAC,EAAE,iBAAiB,CAAC;CACxC;AACD,MAAM,WAAW,mBAAoB,SAAQ,uBAAuB;IAClE,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAsBD,kFAAkF;AAClF,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,GAAE,yBAA8B,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAqGxI"}
package/dist/node3d.js CHANGED
@@ -4,6 +4,7 @@ import { fileURLToPath } from "node:url";
4
4
  import { build } from "esbuild";
5
5
  import { importOptionalModule, resolvePackageAssetPath } from "@nodetool-ai/config";
6
6
  import { gameRenderFrame3D } from "@nodetool-ai/protocol";
7
+ import { gameParticleSamples3D } from "./particles/particles3d.js";
7
8
  export class GameRendererUnavailableError3D extends Error {
8
9
  missingFeatures;
9
10
  code = "renderer_unavailable";
@@ -67,8 +68,30 @@ export async function captureGameFrame3D(value, options = {}) {
67
68
  const bundle = await loadCaptureBundle();
68
69
  const assets = {};
69
70
  let totalBytes = 0;
70
- for (const logicalId of new Set([...frame.entities.flatMap((entity) => entity.model ? [entity.model.assetId] : []), ...Object.keys(frame.fonts ?? {})])) {
71
+ const imageIds = new Set();
72
+ for (const entity of frame.entities) {
73
+ const component = entity.primitive ?? entity.model;
74
+ if (!component) {
75
+ continue;
76
+ }
77
+ let material = component.material;
78
+ if (component.materialId) {
79
+ if (!frame.materials || !Object.hasOwn(frame.materials, component.materialId)) {
80
+ throw new Error(`Missing capture material ${component.materialId}`);
81
+ }
82
+ material = frame.materials[component.materialId];
83
+ }
84
+ for (const slot of [material?.baseColorTexture, material?.normalTexture, material?.ormTexture, material?.emissiveTexture]) {
85
+ if (slot) {
86
+ imageIds.add(slot.assetId);
87
+ }
88
+ }
89
+ }
90
+ for (const logicalId of new Set([...frame.entities.flatMap((entity) => entity.model ? [entity.model.assetId] : []), ...Object.keys(frame.fonts ?? {}), ...imageIds])) {
71
91
  controller.signal.throwIfAborted();
92
+ if (imageIds.has(logicalId) && (!frame.images || !Object.hasOwn(frame.images, logicalId))) {
93
+ throw new Error(`Missing capture image binding ${logicalId}`);
94
+ }
72
95
  const source = await options.resolveAsset?.(logicalId, controller.signal);
73
96
  if (!source) {
74
97
  if (frame.fonts?.[logicalId]?.required === false) {
@@ -132,6 +155,9 @@ export async function captureGameFrame3D(value, options = {}) {
132
155
  if (options.boundsOverlay) {
133
156
  input.boundsOverlay = true;
134
157
  }
158
+ if (options.particles) {
159
+ input.particles = gameParticleSamples3D(options.particles);
160
+ }
135
161
  const report = await page.evaluate(async (request) => window.captureNativeGame3D(request), input);
136
162
  const png = await page.locator("canvas").screenshot({ type: "png" });
137
163
  return { ...report, png: new Uint8Array(png), tick: frame.tick, stateHash: options.stateHash ?? null };
@@ -1 +1 @@
1
- {"version":3,"file":"node3d.js","sourceRoot":"","sources":["../src/node3d.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node3d.js","sourceRoot":"","sources":["../src/node3d.ts"],"names":[],"mappings":"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"}
@@ -3,4 +3,5 @@ export { ParticleRandom, particleSeed } from "./random.js";
3
3
  export { sampleParticleShape, type ParticleDimension, type ParticleShapeSample } from "./shapes.js";
4
4
  export { DEFAULT_MAX_SCENE_PARTICLES, MAX_PARTICLE_STEP_SECONDS, ParticleSimulator, particleSourcesFromFrame, type ParticleEmitterSource, type ParticleQuaternion, type ParticleSimulatorOptions, type ParticleVector, type ParticleView } from "./simulator.js";
5
5
  export { CANVAS2D_MAX_PARTICLES, GameParticles2D, PARTICLE_DOT_ASSET, PARTICLE_DOT_SIZE, particleCell, particleDotPixels, type GameParticleField, type ParticleCell } from "./render2d.js";
6
+ export { GameParticles3D, PARTICLE_INSTANCE_STRIDE_3D, gameParticleFieldFromSamples3D, gameParticleSamples3D, packParticleBatches3D, srgbToLinear, type GameParticleSample3D, type PackedParticles3D, type ParticleBatch3D, type ParticleBatchShape3D, type ParticleViewer3D } from "./particles3d.js";
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/particles/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3I,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACpG,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,iBAAiB,EACjB,wBAAwB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,cAAc,EACnB,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/particles/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3I,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACpG,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,iBAAiB,EACjB,wBAAwB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,cAAc,EACnB,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,2BAA2B,EAC3B,8BAA8B,EAC9B,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,EACZ,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACtB,MAAM,kBAAkB,CAAC"}
@@ -3,4 +3,5 @@ export { ParticleRandom, particleSeed } from "./random.js";
3
3
  export { sampleParticleShape } from "./shapes.js";
4
4
  export { DEFAULT_MAX_SCENE_PARTICLES, MAX_PARTICLE_STEP_SECONDS, ParticleSimulator, particleSourcesFromFrame } from "./simulator.js";
5
5
  export { CANVAS2D_MAX_PARTICLES, GameParticles2D, PARTICLE_DOT_ASSET, PARTICLE_DOT_SIZE, particleCell, particleDotPixels } from "./render2d.js";
6
+ export { GameParticles3D, PARTICLE_INSTANCE_STRIDE_3D, gameParticleFieldFromSamples3D, gameParticleSamples3D, packParticleBatches3D, srgbToLinear } from "./particles3d.js";
6
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/particles/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,mBAAmB,EAAsB,MAAM,aAAa,CAAC;AAC3I,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAoD,MAAM,aAAa,CAAC;AACpG,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,iBAAiB,EACjB,wBAAwB,EAMzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EAGlB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/particles/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,mBAAmB,EAAsB,MAAM,aAAa,CAAC;AAC3I,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAoD,MAAM,aAAa,CAAC;AACpG,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,iBAAiB,EACjB,wBAAwB,EAMzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EAGlB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,2BAA2B,EAC3B,8BAA8B,EAC9B,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,EAMb,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,89 @@
1
+ import type { GameEvent3D, GameParticleEmission, GameParticleEmitter, GameRenderFrame3D } from "@nodetool-ai/protocol";
2
+ import type { GameParticleField } from "./render2d.js";
3
+ import { ParticleSimulator, type ParticleView } from "./simulator.js";
4
+ /**
5
+ * Runs 3D particles beside a game session. Call `tick` after every session step with that step's frame and
6
+ * the session's presentation events, and pass the instance to the 3D renderer. It reads the session and never
7
+ * writes to it, so particles stay out of snapshots and replay.
8
+ */
9
+ export declare class GameParticles3D implements GameParticleField {
10
+ readonly simulator: ParticleSimulator;
11
+ private readonly tickSeconds;
12
+ constructor(tickRate: number, maxSceneParticles?: number);
13
+ /** Live particles, for the frame budget. */
14
+ get count(): number;
15
+ tick(frame: GameRenderFrame3D, events: readonly (GameEvent3D | GameParticleEmission)[]): void;
16
+ forEachParticle(visit: (particle: Readonly<ParticleView>) => void): void;
17
+ clear(): void;
18
+ }
19
+ /** One live particle as plain data, for handing a particle field to a renderer in another realm such as a capture page. */
20
+ export interface GameParticleSample3D {
21
+ readonly entityId: string;
22
+ readonly emitterId: string;
23
+ readonly emitter?: GameParticleEmitter;
24
+ readonly x: number;
25
+ readonly y: number;
26
+ readonly z: number;
27
+ readonly vx: number;
28
+ readonly vy: number;
29
+ readonly vz: number;
30
+ readonly size: number;
31
+ readonly rotation: number;
32
+ readonly r: number;
33
+ readonly g: number;
34
+ readonly b: number;
35
+ readonly opacity: number;
36
+ readonly life: number;
37
+ }
38
+ /** Copies every live particle of a field, in the field's order. */
39
+ export declare function gameParticleSamples3D(field: GameParticleField): GameParticleSample3D[];
40
+ /**
41
+ * A particle field over copied samples, including world particles whose emitter has left the frame.
42
+ * Older payloads resolve their emitter definition from the frame.
43
+ */
44
+ export declare function gameParticleFieldFromSamples3D(samples: readonly GameParticleSample3D[], frame: GameRenderFrame3D): GameParticleField;
45
+ /** What a 3D particle batch draws: a camera-facing quad or one of the mesh shapes. */
46
+ export type ParticleBatchShape3D = "quad" | "box" | "sphere" | "tetrahedron" | "octahedron";
47
+ /**
48
+ * Floats per particle in a batch: position (3), velocity (3), linear colour and opacity (4), size, rotation,
49
+ * stretch length, stretch speed scale, softness and mode. Mode is 1 for a stretched quad or a velocity-aligned mesh.
50
+ */
51
+ export declare const PARTICLE_INSTANCE_STRIDE_3D = 16;
52
+ /** Particles that share one draw call: the same shape, blend and lighting. */
53
+ export interface ParticleBatch3D {
54
+ readonly key: string;
55
+ readonly shape: ParticleBatchShape3D;
56
+ readonly blend: "normal" | "additive";
57
+ /** Mesh particles take scene lighting unless their emitter is `unlit`. Quads are always unlit. */
58
+ readonly lit: boolean;
59
+ count: number;
60
+ data: Float32Array;
61
+ /** Second buffer the farthest-first sort writes into before swapping it with `data`, kept so sorting does not allocate. */
62
+ spare: Float32Array | null;
63
+ }
64
+ /** The camera position and view direction, used to sort alpha-blended particles back to front. */
65
+ export interface ParticleViewer3D {
66
+ readonly x: number;
67
+ readonly y: number;
68
+ readonly z: number;
69
+ readonly forwardX: number;
70
+ readonly forwardY: number;
71
+ readonly forwardZ: number;
72
+ }
73
+ export interface PackedParticles3D {
74
+ /** Batches in the order their first particle appeared in the field. */
75
+ readonly batches: readonly ParticleBatch3D[];
76
+ /** Particles packed across every batch. */
77
+ readonly drawn: number;
78
+ /** True when a packed quad has a softness distance, so the renderer needs scene depth. */
79
+ readonly soft: boolean;
80
+ }
81
+ /** Converts an sRGB channel in [0, 1] to linear light, which is the colour space three.js shades in. */
82
+ export declare function srgbToLinear(channel: number): number;
83
+ /**
84
+ * Packs a particle field into per-batch instance data. Particles with no size or no opacity are skipped. Batches of
85
+ * alpha-blended particles are sorted farthest first, keeping field order between particles at the same depth, so
86
+ * the result depends only on the field and the viewer. `previous` batches are reused when their capacity fits.
87
+ */
88
+ export declare function packParticleBatches3D(field: GameParticleField, viewer: ParticleViewer3D, previous?: readonly ParticleBatch3D[]): PackedParticles3D;
89
+ //# sourceMappingURL=particles3d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"particles3d.d.ts","sourceRoot":"","sources":["../../src/particles/particles3d.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,176 @@
1
+ import { ParticleSimulator, particleSourcesFromFrame } from "./simulator.js";
2
+ /**
3
+ * Runs 3D particles beside a game session. Call `tick` after every session step with that step's frame and
4
+ * the session's presentation events, and pass the instance to the 3D renderer. It reads the session and never
5
+ * writes to it, so particles stay out of snapshots and replay.
6
+ */
7
+ export class GameParticles3D {
8
+ simulator;
9
+ tickSeconds;
10
+ constructor(tickRate, maxSceneParticles) {
11
+ if (!(tickRate > 0)) {
12
+ throw new Error("Particle tick rate must be positive");
13
+ }
14
+ this.tickSeconds = 1 / tickRate;
15
+ this.simulator = new ParticleSimulator({ dimension: "3d", maxSceneParticles });
16
+ }
17
+ /** Live particles, for the frame budget. */
18
+ get count() {
19
+ return this.simulator.count;
20
+ }
21
+ tick(frame, events) {
22
+ this.simulator.sync(particleSourcesFromFrame(frame));
23
+ this.simulator.emit(events);
24
+ this.simulator.step(this.tickSeconds);
25
+ }
26
+ forEachParticle(visit) {
27
+ this.simulator.forEachParticle(visit);
28
+ }
29
+ clear() {
30
+ this.simulator.clear();
31
+ }
32
+ }
33
+ /** Copies every live particle of a field, in the field's order. */
34
+ export function gameParticleSamples3D(field) {
35
+ const samples = [];
36
+ field.forEachParticle((particle) => {
37
+ samples.push({ emitter: particle.emitter, entityId: particle.entityId, emitterId: particle.emitterId, x: particle.x, y: particle.y, z: particle.z,
38
+ vx: particle.vx, vy: particle.vy, vz: particle.vz, size: particle.size, rotation: particle.rotation,
39
+ r: particle.r, g: particle.g, b: particle.b, opacity: particle.opacity, life: particle.life });
40
+ });
41
+ return samples;
42
+ }
43
+ /**
44
+ * A particle field over copied samples, including world particles whose emitter has left the frame.
45
+ * Older payloads resolve their emitter definition from the frame.
46
+ */
47
+ export function gameParticleFieldFromSamples3D(samples, frame) {
48
+ const emitters = new Map();
49
+ for (const entity of frame.entities) {
50
+ for (const emitter of entity.particles?.emitters ?? []) {
51
+ emitters.set(`${entity.entityId}\u0000${emitter.id}`, emitter);
52
+ }
53
+ }
54
+ return {
55
+ forEachParticle(visit) {
56
+ for (const sample of samples) {
57
+ const emitter = sample.emitter ?? emitters.get(`${sample.entityId}\u0000${sample.emitterId}`);
58
+ if (emitter) {
59
+ visit({ ...sample, emitter });
60
+ }
61
+ }
62
+ }
63
+ };
64
+ }
65
+ /**
66
+ * Floats per particle in a batch: position (3), velocity (3), linear colour and opacity (4), size, rotation,
67
+ * stretch length, stretch speed scale, softness and mode. Mode is 1 for a stretched quad or a velocity-aligned mesh.
68
+ */
69
+ export const PARTICLE_INSTANCE_STRIDE_3D = 16;
70
+ /** Converts an sRGB channel in [0, 1] to linear light, which is the colour space three.js shades in. */
71
+ export function srgbToLinear(channel) {
72
+ return channel <= 0.04045 ? channel / 12.92 : Math.pow((channel + 0.055) / 1.055, 2.4);
73
+ }
74
+ function batchKey(emitter) {
75
+ const blend = emitter.blend ?? "normal";
76
+ const render = emitter.render;
77
+ if (render?.kind === "mesh") {
78
+ const lit = emitter.unlit !== true;
79
+ return { key: `${render.shape}:${blend}:${lit ? "lit" : "unlit"}`, shape: render.shape, blend, lit };
80
+ }
81
+ return { key: `quad:${blend}`, shape: "quad", blend, lit: false };
82
+ }
83
+ /**
84
+ * Packs a particle field into per-batch instance data. Particles with no size or no opacity are skipped. Batches of
85
+ * alpha-blended particles are sorted farthest first, keeping field order between particles at the same depth, so
86
+ * the result depends only on the field and the viewer. `previous` batches are reused when their capacity fits.
87
+ */
88
+ export function packParticleBatches3D(field, viewer, previous = []) {
89
+ // A scene has a handful of batches, so linear lookups beat building maps every frame.
90
+ const batches = [];
91
+ let drawn = 0;
92
+ let soft = false;
93
+ field.forEachParticle((particle) => {
94
+ if (!(particle.size > 0) || !(particle.opacity > 0)) {
95
+ return;
96
+ }
97
+ const emitter = particle.emitter;
98
+ const kind = batchKey(emitter);
99
+ let batch = batches.find((entry) => entry.key === kind.key);
100
+ if (!batch) {
101
+ batch = previous.find((entry) => entry.key === kind.key) ?? { ...kind, count: 0, data: new Float32Array(PARTICLE_INSTANCE_STRIDE_3D * 64), spare: null };
102
+ batch.count = 0;
103
+ batches.push(batch);
104
+ }
105
+ if ((batch.count + 1) * PARTICLE_INSTANCE_STRIDE_3D > batch.data.length) {
106
+ const grown = new Float32Array(batch.data.length * 2);
107
+ grown.set(batch.data);
108
+ batch.data = grown;
109
+ }
110
+ const render = emitter.render;
111
+ const softness = kind.shape === "quad" ? emitter.softness ?? 0 : 0;
112
+ const data = batch.data;
113
+ const base = batch.count * PARTICLE_INSTANCE_STRIDE_3D;
114
+ data[base] = particle.x;
115
+ data[base + 1] = particle.y;
116
+ data[base + 2] = particle.z;
117
+ data[base + 3] = particle.vx;
118
+ data[base + 4] = particle.vy;
119
+ data[base + 5] = particle.vz;
120
+ data[base + 6] = srgbToLinear(particle.r);
121
+ data[base + 7] = srgbToLinear(particle.g);
122
+ data[base + 8] = srgbToLinear(particle.b);
123
+ data[base + 9] = Math.min(1, particle.opacity);
124
+ data[base + 10] = particle.size;
125
+ data[base + 11] = particle.rotation;
126
+ data[base + 12] = render?.kind === "stretched" ? render.length : 0;
127
+ data[base + 13] = render?.kind === "stretched" ? render.speedScale : 0;
128
+ data[base + 14] = softness;
129
+ data[base + 15] = render?.kind === "stretched" || (render?.kind === "mesh" && render.align === "velocity") ? 1 : 0;
130
+ batch.count += 1;
131
+ drawn += 1;
132
+ soft ||= softness > 0;
133
+ });
134
+ for (const batch of batches) {
135
+ if (batch.blend === "normal" && batch.count > 1) {
136
+ sortFarthestFirst(batch, viewer);
137
+ }
138
+ }
139
+ return { batches, drawn, soft };
140
+ }
141
+ /** Sort scratch shared by every batch. Packing is synchronous, so one set of arrays serves all of them. */
142
+ let sortDepths = new Float64Array(0);
143
+ let sortOrder = new Uint32Array(0);
144
+ function sortFarthestFirst(batch, viewer) {
145
+ const stride = PARTICLE_INSTANCE_STRIDE_3D;
146
+ const count = batch.count;
147
+ const source = batch.data;
148
+ if (sortDepths.length < count) {
149
+ sortDepths = new Float64Array(Math.max(count, sortDepths.length * 2));
150
+ sortOrder = new Uint32Array(sortDepths.length);
151
+ }
152
+ const depths = sortDepths;
153
+ let sorted = true;
154
+ for (let index = 0; index < count; index += 1) {
155
+ const base = index * stride;
156
+ depths[index] = (source[base] - viewer.x) * viewer.forwardX + (source[base + 1] - viewer.y) * viewer.forwardY + (source[base + 2] - viewer.z) * viewer.forwardZ;
157
+ sortOrder[index] = index;
158
+ sorted &&= index === 0 || depths[index] <= depths[index - 1];
159
+ }
160
+ if (sorted) {
161
+ return;
162
+ }
163
+ // The index tie-break keeps field order between equal depths whatever the engine's sort does.
164
+ const order = sortOrder.subarray(0, count).sort((first, second) => depths[second] - depths[first] || first - second);
165
+ let target = batch.spare;
166
+ if (!target || target.length < source.length) {
167
+ target = new Float32Array(source.length);
168
+ }
169
+ for (let to = 0; to < count; to += 1) {
170
+ const from = order[to] * stride;
171
+ target.set(source.subarray(from, from + stride), to * stride);
172
+ }
173
+ batch.spare = source;
174
+ batch.data = target;
175
+ }
176
+ //# sourceMappingURL=particles3d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"particles3d.js","sourceRoot":"","sources":["../../src/particles/particles3d.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAqB,MAAM,gBAAgB,CAAC;AAEhG;;;;GAIG;AACH,MAAM,OAAO,eAAe;IACjB,SAAS,CAAoB;IACrB,WAAW,CAAS;IAErC,YAAY,QAAgB,EAAE,iBAA0B;QACtD,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,QAAQ,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,iBAAiB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,4CAA4C;IAC5C,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC,KAAwB,EAAE,MAAuD;QACpF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxC,CAAC;IAED,eAAe,CAAC,KAAiD;QAC/D,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACF;AAsBD,mEAAmE;AACnE,MAAM,UAAU,qBAAqB,CAAC,KAAwB;IAC5D,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE,EAAE;QACjC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC/I,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YACnG,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACnG,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,8BAA8B,CAAC,OAAwC,EAAE,KAAwB;IAC/G,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA+B,CAAC;IACxD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,SAAS,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC;YACvD,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,SAAS,OAAO,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IACD,OAAO;QACL,eAAe,CAAC,KAAK;YACnB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,SAAS,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC9F,IAAI,OAAO,EAAE,CAAC;oBACZ,KAAK,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAKD;;;GAGG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,CAAC;AAkC9C,wGAAwG;AACxG,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,QAAQ,CAAC,OAA4B;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC;IACxC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,IAAI,MAAM,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC;QACnC,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACvG,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,QAAQ,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AACpE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAwB,EAAE,MAAwB,EAAE,QAAQ,GAA+B,EAAE;IACjI,sFAAsF;IACtF,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE,EAAE;QACjC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC;YACpD,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,YAAY,CAAC,2BAA2B,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YACzJ,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,2BAA2B,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACxE,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACtD,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACtB,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;QACrB,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,2BAA2B,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,MAAM,EAAE,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,MAAM,EAAE,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,MAAM,EAAE,IAAI,KAAK,WAAW,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnH,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;QACjB,KAAK,IAAI,CAAC,CAAC;QACX,IAAI,KAAK,QAAQ,GAAG,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IACH,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YAChD,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAClC,CAAC;AAED,2GAA2G;AAC3G,IAAI,UAAU,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;AACrC,IAAI,SAAS,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;AAEnC,SAAS,iBAAiB,CAAC,KAAsB,EAAE,MAAwB;IACzE,MAAM,MAAM,GAAG,2BAA2B,CAAC;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;IAC1B,IAAI,UAAU,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QAC9B,UAAU,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACtE,SAAS,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC;IAC1B,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,KAAK,GAAG,MAAM,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChK,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QACzB,MAAM,KAAK,KAAK,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO;IACT,CAAC;IACD,8FAA8F;IAC9F,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC;IACrH,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;IACzB,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAC7C,MAAM,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IACD,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC;IAChE,CAAC;IACD,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;IACrB,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC;AACtB,CAAC"}
@@ -0,0 +1,63 @@
1
+ import * as THREE from "three";
2
+ import type { RenderPipeline3D } from "../renderer3d/pipeline.js";
3
+ import type { GameParticleField } from "./render2d.js";
4
+ /** Pass name in `RenderPipeline3D`. It runs before the scene pass so particles draw with the scene and its post-processing. */
5
+ export declare const GAME_PARTICLE_PASS_3D = "particles";
6
+ export declare const GAME_PARTICLE_PASS_ORDER_3D = -0.5;
7
+ /** Renderer state the particle pass reads. Nothing here reaches simulation. */
8
+ export interface GameParticlePassHost3D {
9
+ readonly scene: THREE.Scene;
10
+ /** The particles to draw this frame, or null to draw none. */
11
+ particles(): GameParticleField | null;
12
+ }
13
+ /**
14
+ * Draws 3D particles: camera-facing and stretched billboards and instanced mesh shapes, one draw call per batch of
15
+ * shape, blend and lighting. The pass runs before the scene pass and puts its meshes in the scene, so particles depth
16
+ * test against the scene and take its fog and post-processing. When a billboard has a softness distance, the pass
17
+ * first renders the scene's depth into a texture and the billboard fades out where it nears the geometry behind it.
18
+ */
19
+ export declare class GameParticlePass3D {
20
+ private readonly host;
21
+ private readonly group;
22
+ private readonly draws;
23
+ private batches;
24
+ private readonly quadGeometry;
25
+ /** Depth-only stand-ins for scene materials, so the depth pre-pass keeps each material's cut-outs and skips what never writes depth. */
26
+ private readonly depthMaterials;
27
+ private readonly depthSeen;
28
+ private readonly swapped;
29
+ private depthTarget;
30
+ private frame;
31
+ private readonly size;
32
+ private readonly cameraPosition;
33
+ private readonly cameraForward;
34
+ private readonly matrix;
35
+ private readonly position;
36
+ private readonly velocity;
37
+ private readonly scale;
38
+ private readonly turn;
39
+ private readonly spin;
40
+ private readonly color;
41
+ /** Particles drawn in the last frame. */
42
+ drawn: number;
43
+ constructor(pipeline: RenderPipeline3D, host: GameParticlePassHost3D);
44
+ /** Bytes of the scene depth target soft particles read. It stays allocated once made, until the pass is disposed. */
45
+ get targetBytes(): number;
46
+ dispose(): void;
47
+ private prepare;
48
+ /**
49
+ * Renders the scene's depth without particles into a texture, keeping every renderer and scene setting it changes.
50
+ * Each mesh draws with a depth-only copy of its material, so alpha-tested cut-outs keep their holes, and transparent
51
+ * or non-depth-writing materials are skipped as they write no depth in the scene pass either. The pre-pass draws are
52
+ * taken back out of the renderer's counters, so frame stats and budgets count only what the player sees.
53
+ */
54
+ private renderDepth;
55
+ private swapDepthMaterials;
56
+ private depthVariant;
57
+ private updateQuads;
58
+ private createQuads;
59
+ private updateMeshes;
60
+ private createMeshes;
61
+ private release;
62
+ }
63
+ //# sourceMappingURL=pass3d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pass3d.d.ts","sourceRoot":"","sources":["../../src/particles/pass3d.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAEnF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvD,+HAA+H;AAC/H,eAAO,MAAM,qBAAqB,cAAc,CAAC;AACjD,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAEhD,+EAA+E;AAC/E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;IAC5B,8DAA8D;IAC9D,SAAS,IAAI,iBAAiB,GAAG,IAAI,CAAC;CACvC;AA6GD;;;;;GAKG;AACH,qBAAa,kBAAkB;IAwBW,OAAO,CAAC,QAAQ,CAAC,IAAI;IAvB7D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2B;IACjD,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiC;IAC9D,wIAAwI;IACxI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsD;IACrF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8D;IACtF,OAAO,CAAC,WAAW,CAAwC;IAC3D,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuB;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAuB;IACtD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuB;IACrD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAChD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAChD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0B;IAC/C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0B;IAC/C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAC3C,yCAAyC;IACzC,KAAK,SAAK;IAEV,YAAY,QAAQ,EAAE,gBAAgB,EAAmB,IAAI,EAAE,sBAAsB,EAIpF;IAED,qHAAqH;IACrH,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,OAAO,IAAI,IAAI,CASd;IAED,OAAO,CAAC,OAAO;IA+Bf;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAqCnB,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,WAAW;IAkCnB,OAAO,CAAC,YAAY;IAmCpB,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,OAAO;CAMhB"}