reze-engine 0.43.0 → 0.50.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 (135) hide show
  1. package/README.md +40 -438
  2. package/dist/camera.d.ts +3 -0
  3. package/dist/camera.d.ts.map +1 -1
  4. package/dist/camera.js +33 -8
  5. package/dist/engine.d.ts +841 -53
  6. package/dist/engine.d.ts.map +1 -1
  7. package/dist/engine.js +3498 -451
  8. package/dist/graph/registry.d.ts +2 -2
  9. package/dist/graph/registry.d.ts.map +1 -1
  10. package/dist/graph/registry.js +1 -1
  11. package/dist/graph/slots.d.ts +0 -1
  12. package/dist/graph/slots.d.ts.map +1 -1
  13. package/dist/graph/slots.js +37 -9
  14. package/dist/hdr.d.ts +18 -0
  15. package/dist/hdr.d.ts.map +1 -0
  16. package/dist/hdr.js +162 -0
  17. package/dist/ibl.d.ts +19 -0
  18. package/dist/ibl.d.ts.map +1 -0
  19. package/dist/ibl.js +113 -0
  20. package/dist/ik-solver.d.ts +2 -1
  21. package/dist/ik-solver.d.ts.map +1 -1
  22. package/dist/index.d.ts +5 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +10 -0
  25. package/dist/math.d.ts +20 -1
  26. package/dist/math.d.ts.map +1 -1
  27. package/dist/math.js +23 -16
  28. package/dist/midi-loader.d.ts +10 -0
  29. package/dist/midi-loader.d.ts.map +1 -0
  30. package/dist/midi-loader.js +247 -0
  31. package/dist/model.d.ts +2 -13
  32. package/dist/model.d.ts.map +1 -1
  33. package/dist/param-track.d.ts +48 -0
  34. package/dist/param-track.d.ts.map +1 -0
  35. package/dist/param-track.js +80 -0
  36. package/dist/physics/types.d.ts.map +1 -1
  37. package/dist/physics/types.js +3 -0
  38. package/dist/reflection.d.ts +27 -0
  39. package/dist/reflection.d.ts.map +1 -0
  40. package/dist/reflection.js +93 -0
  41. package/dist/shaders/anchor-table.d.ts +56 -0
  42. package/dist/shaders/anchor-table.d.ts.map +1 -0
  43. package/dist/shaders/anchor-table.js +128 -0
  44. package/dist/shaders/cast-api.d.ts +2 -0
  45. package/dist/shaders/cast-api.d.ts.map +1 -0
  46. package/dist/shaders/cast-api.js +121 -0
  47. package/dist/shaders/cast-layout.d.ts +21 -0
  48. package/dist/shaders/cast-layout.d.ts.map +1 -0
  49. package/dist/shaders/cast-layout.js +20 -0
  50. package/dist/shaders/lights.d.ts +79 -0
  51. package/dist/shaders/lights.d.ts.map +1 -0
  52. package/dist/shaders/lights.js +269 -0
  53. package/dist/shaders/lyrics-api.d.ts +39 -0
  54. package/dist/shaders/lyrics-api.d.ts.map +1 -0
  55. package/dist/shaders/lyrics-api.js +187 -0
  56. package/dist/shaders/materials/common.d.ts +2 -4
  57. package/dist/shaders/materials/common.d.ts.map +1 -1
  58. package/dist/shaders/materials/common.js +87 -35
  59. package/dist/shaders/midi-api.d.ts +10 -0
  60. package/dist/shaders/midi-api.d.ts.map +1 -0
  61. package/dist/shaders/midi-api.js +114 -0
  62. package/dist/shaders/passes/composite.d.ts +28 -22
  63. package/dist/shaders/passes/composite.d.ts.map +1 -1
  64. package/dist/shaders/passes/composite.js +165 -138
  65. package/dist/shaders/passes/cull.d.ts +2 -0
  66. package/dist/shaders/passes/cull.d.ts.map +1 -0
  67. package/dist/shaders/passes/cull.js +138 -0
  68. package/dist/shaders/passes/field-blit.d.ts +26 -0
  69. package/dist/shaders/passes/field-blit.d.ts.map +1 -0
  70. package/dist/shaders/passes/field-blit.js +65 -0
  71. package/dist/shaders/passes/grid.d.ts +31 -0
  72. package/dist/shaders/passes/grid.d.ts.map +1 -0
  73. package/dist/shaders/passes/grid.js +169 -0
  74. package/dist/shaders/passes/ground.d.ts +13 -1
  75. package/dist/shaders/passes/ground.d.ts.map +1 -1
  76. package/dist/shaders/passes/ground.js +170 -25
  77. package/dist/shaders/passes/hosted-api.d.ts +57 -0
  78. package/dist/shaders/passes/hosted-api.d.ts.map +1 -0
  79. package/dist/shaders/passes/hosted-api.js +166 -0
  80. package/dist/shaders/passes/id-debug.d.ts +28 -0
  81. package/dist/shaders/passes/id-debug.d.ts.map +1 -0
  82. package/dist/shaders/passes/id-debug.js +74 -0
  83. package/dist/shaders/passes/particles.d.ts +10 -2
  84. package/dist/shaders/passes/particles.d.ts.map +1 -1
  85. package/dist/shaders/passes/particles.js +37 -109
  86. package/dist/shaders/passes/scene-contract.d.ts +128 -0
  87. package/dist/shaders/passes/scene-contract.d.ts.map +1 -0
  88. package/dist/shaders/passes/scene-contract.js +207 -0
  89. package/dist/shaders/passes/sim.d.ts +34 -0
  90. package/dist/shaders/passes/sim.d.ts.map +1 -0
  91. package/dist/shaders/passes/sim.js +169 -0
  92. package/dist/shaders/passes/trails.d.ts +14 -2
  93. package/dist/shaders/passes/trails.d.ts.map +1 -1
  94. package/dist/shaders/passes/trails.js +55 -90
  95. package/dist/shaders/score-api.d.ts +10 -0
  96. package/dist/shaders/score-api.d.ts.map +1 -0
  97. package/dist/shaders/score-api.js +114 -0
  98. package/dist/shadow-cascades.d.ts +45 -0
  99. package/dist/shadow-cascades.d.ts.map +1 -0
  100. package/dist/shadow-cascades.js +70 -0
  101. package/dist/vmd-loader.d.ts +3 -2
  102. package/dist/vmd-loader.d.ts.map +1 -1
  103. package/package.json +1 -1
  104. package/src/camera.ts +31 -8
  105. package/src/engine.ts +4015 -556
  106. package/src/graph/registry.ts +2 -2
  107. package/src/graph/slots.ts +37 -9
  108. package/src/hdr.ts +156 -0
  109. package/src/ibl.ts +115 -0
  110. package/src/ik-solver.ts +1 -1
  111. package/src/index.ts +12 -0
  112. package/src/math.ts +23 -17
  113. package/src/midi-loader.ts +246 -0
  114. package/src/model.ts +3 -3
  115. package/src/param-track.ts +83 -0
  116. package/src/physics/types.ts +4 -1
  117. package/src/reflection.ts +94 -0
  118. package/src/shaders/anchor-table.ts +147 -0
  119. package/src/shaders/cast-api.ts +123 -0
  120. package/src/shaders/cast-layout.ts +20 -0
  121. package/src/shaders/lights.ts +280 -0
  122. package/src/shaders/lyrics-api.ts +202 -0
  123. package/src/shaders/materials/common.ts +89 -35
  124. package/src/shaders/midi-api.ts +116 -0
  125. package/src/shaders/passes/composite.ts +182 -139
  126. package/src/shaders/passes/cull.ts +139 -0
  127. package/src/shaders/passes/grid.ts +178 -0
  128. package/src/shaders/passes/ground.ts +172 -25
  129. package/src/shaders/passes/hosted-api.ts +171 -0
  130. package/src/shaders/passes/id-debug.ts +75 -0
  131. package/src/shaders/passes/particles.ts +54 -112
  132. package/src/shaders/passes/scene-contract.ts +266 -0
  133. package/src/shaders/passes/trails.ts +77 -93
  134. package/src/shadow-cascades.ts +97 -0
  135. package/src/vmd-loader.ts +2 -2
package/dist/camera.js CHANGED
@@ -2,11 +2,25 @@ import { Mat4, Quat, Vec3 } from "./math";
2
2
  /** Far cap / zoom limit; large enough for wide shots without clipping distant ground */
3
3
  const FAR_CAP = 8000;
4
4
  const FAR_MIN = 200;
5
- /** The character-framing value the cloth z-fighting fix settled on — never go below it. */
6
- const NEAR_MIN = 0.5;
7
- /** ~40cm in MMD units. Past this the near plane would start clipping geometry a
8
- * user has deliberately pushed the camera up against. */
9
- const NEAR_MAX = 5;
5
+ /**
6
+ * Near-plane floor and cap, in two sets, because what a near plane costs depends
7
+ * entirely on the depth buffer underneath it.
8
+ *
9
+ * The single set that used to live here was written against a projection that
10
+ * silently doubled it (see Mat4.perspectiveInto), so the real clip was at 1.0 and
11
+ * 10 rather than the 0.5 and 5 stated. UNORM keeps exactly that behaviour, now
12
+ * said out loud: identical precision, identical z-fighting margin on coplanar
13
+ * cloth, no change to any scene that renders correctly today.
14
+ *
15
+ * REVERSED gets the floor the content actually wants. Float depth read backwards
16
+ * holds roughly constant RELATIVE precision across the range, so pulling the near
17
+ * plane in by twenty times costs almost nothing — and a 4 mm near plane is closer
18
+ * than any camera VMD will ever push.
19
+ */
20
+ const NEAR_MIN_UNORM = 1.0;
21
+ const NEAR_MAX_UNORM = 10;
22
+ const NEAR_MIN_REVERSED = 0.05;
23
+ const NEAR_MAX_REVERSED = 5;
10
24
  export class Camera {
11
25
  constructor(alpha, beta, radius, target, fov = Math.PI / 4) {
12
26
  this.aspect = 1;
@@ -14,8 +28,11 @@ export class Camera {
14
28
  * nearly all of it within a hand's reach and coplanar cloth/body layers z-fought
15
29
  * (white crack flashes, worse the further the camera). 0.5 MMD units ≈ 4 cm —
16
30
  * closer than any real framing — and buys 10× precision at character range. */
17
- this.near = 0.5;
31
+ this.near = NEAR_MIN_UNORM;
18
32
  this.far = FAR_CAP;
33
+ /** Set once by the engine, from whether it got a float depth format. Decides
34
+ * both the near-plane floor and which way round the projection maps z. */
35
+ this.reversedZ = false;
19
36
  // Input state
20
37
  this.canvas = null;
21
38
  this.inputLocked = false;
@@ -228,12 +245,20 @@ export class Camera {
228
245
  * user is deliberately close to.
229
246
  */
230
247
  updateNearFromRadius() {
231
- this.near = Math.min(NEAR_MAX, Math.max(NEAR_MIN, this.radius / 50));
248
+ const lo = this.reversedZ ? NEAR_MIN_REVERSED : NEAR_MIN_UNORM;
249
+ const hi = this.reversedZ ? NEAR_MAX_REVERSED : NEAR_MAX_UNORM;
250
+ this.near = Math.min(hi, Math.max(lo, this.radius / 50));
232
251
  }
233
252
  getProjectionMatrix() {
234
253
  this.updateFarFromRadius();
235
254
  this.updateNearFromRadius();
236
- Mat4.perspectiveInto(this._projMat.values, this.fov, this.aspect, this.near, this.far);
255
+ // Reversed-Z is the same matrix with near and far handed over the other way
256
+ // round — near → 1, far → 0. One projection function, and the reversal is a
257
+ // property of the depth buffer rather than a second matrix to keep in step.
258
+ if (this.reversedZ)
259
+ Mat4.perspectiveInto(this._projMat.values, this.fov, this.aspect, this.far, this.near);
260
+ else
261
+ Mat4.perspectiveInto(this._projMat.values, this.fov, this.aspect, this.near, this.far);
237
262
  return this._projMat;
238
263
  }
239
264
  attachControl(canvas) {