reze-engine 0.16.3 → 0.17.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 (50) hide show
  1. package/dist/engine.d.ts +3 -1
  2. package/dist/engine.d.ts.map +1 -1
  3. package/dist/engine.js +160 -21
  4. package/dist/model.d.ts +1 -0
  5. package/dist/model.d.ts.map +1 -1
  6. package/dist/physics/body.d.ts +3 -1
  7. package/dist/physics/body.d.ts.map +1 -1
  8. package/dist/physics/body.js +84 -20
  9. package/dist/physics/constraint.d.ts +14 -1
  10. package/dist/physics/constraint.d.ts.map +1 -1
  11. package/dist/physics/constraint.js +43 -1
  12. package/dist/physics/solver.d.ts.map +1 -1
  13. package/dist/physics/solver.js +278 -110
  14. package/dist/pmx-loader.d.ts.map +1 -1
  15. package/dist/pmx-loader.js +1 -0
  16. package/dist/shaders/materials/body.d.ts +1 -1
  17. package/dist/shaders/materials/body.d.ts.map +1 -1
  18. package/dist/shaders/materials/cloth_rough.d.ts +1 -1
  19. package/dist/shaders/materials/cloth_rough.d.ts.map +1 -1
  20. package/dist/shaders/materials/cloth_smooth.d.ts +1 -1
  21. package/dist/shaders/materials/cloth_smooth.d.ts.map +1 -1
  22. package/dist/shaders/materials/common.d.ts +1 -1
  23. package/dist/shaders/materials/common.d.ts.map +1 -1
  24. package/dist/shaders/materials/common.js +137 -122
  25. package/dist/shaders/materials/default.d.ts +1 -1
  26. package/dist/shaders/materials/default.d.ts.map +1 -1
  27. package/dist/shaders/materials/eye.d.ts +1 -1
  28. package/dist/shaders/materials/eye.d.ts.map +1 -1
  29. package/dist/shaders/materials/eye.js +14 -0
  30. package/dist/shaders/materials/face.d.ts +1 -1
  31. package/dist/shaders/materials/face.d.ts.map +1 -1
  32. package/dist/shaders/materials/hair.d.ts +1 -1
  33. package/dist/shaders/materials/hair.d.ts.map +1 -1
  34. package/dist/shaders/materials/metal.d.ts +1 -1
  35. package/dist/shaders/materials/metal.d.ts.map +1 -1
  36. package/dist/shaders/materials/mmd_classic.d.ts +2 -0
  37. package/dist/shaders/materials/mmd_classic.d.ts.map +1 -0
  38. package/dist/shaders/materials/mmd_classic.js +66 -0
  39. package/dist/shaders/materials/stockings.d.ts +1 -1
  40. package/dist/shaders/materials/stockings.d.ts.map +1 -1
  41. package/package.json +1 -1
  42. package/src/engine.ts +4198 -4045
  43. package/src/model.ts +3 -0
  44. package/src/physics/body.ts +82 -24
  45. package/src/physics/constraint.ts +74 -5
  46. package/src/physics/solver.ts +915 -752
  47. package/src/pmx-loader.ts +1 -0
  48. package/src/shaders/materials/common.ts +204 -189
  49. package/src/shaders/materials/eye.ts +14 -0
  50. package/src/shaders/materials/mmd_classic.ts +68 -0
@@ -1,4 +1,5 @@
1
1
  import { Mat4 } from "../math";
2
+ import { RigidbodyType } from "./types";
2
3
  // Stop-limit ERP. PMX rigs are tuned against MMD's stiff limit response;
3
4
  // lowering this makes cloth resting against its limits sink visibly deeper
4
5
  // (equilibrium penetration scales with 1/ERP). Rest chatter at this
@@ -69,6 +70,7 @@ export function buildConstraints(rigidbodies, joints) {
69
70
  springEnabled,
70
71
  springStiffness,
71
72
  equilibriumPoint: new Float32Array(6),
73
+ isLoop: false,
72
74
  cacheSkip: false,
73
75
  cacheLeverA: new Float32Array(3),
74
76
  cacheLeverB: new Float32Array(3),
@@ -80,17 +82,57 @@ export function buildConstraints(rigidbodies, joints) {
80
82
  cacheLinActive: new Uint8Array(3),
81
83
  cacheLinLimitImp: new Float32Array(3),
82
84
  cacheLinSpringTarget: new Float32Array(3),
85
+ cacheLinSpringMaxImp: new Float32Array(3),
86
+ cacheLinSpringImp: new Float32Array(3),
83
87
  cacheLinSpringActive: new Uint8Array(3),
84
88
  cacheAngAxes: new Float32Array(9),
85
89
  cacheAngTargetVel: new Float32Array(3),
86
90
  cacheAngActive: new Uint8Array(3),
87
- cacheAngJacInv: 0,
91
+ cacheAngJacInv: new Float32Array(3),
92
+ cacheAngSpringMaxImp: new Float32Array(3),
93
+ cacheAngSpringImp: new Float32Array(3),
94
+ cacheAngWA: new Float32Array(9),
95
+ cacheAngWB: new Float32Array(9),
88
96
  cacheAngLimAxis: new Float32Array(3),
97
+ cacheAngLimWA: new Float32Array(3),
98
+ cacheAngLimWB: new Float32Array(3),
99
+ cacheAngLimJacInv: 0,
89
100
  cacheAngLimTarget: 0,
90
101
  cacheAngLimActive: 0,
91
102
  cacheAngLimImp: 0,
103
+ cacheAngPATarget: new Float32Array(3),
104
+ cacheAngPAActive: new Uint8Array(3),
105
+ cacheAngPAImp: new Float32Array(3),
92
106
  });
93
107
  }
108
+ // Mark loop-closing joints via union-find over the joint graph. All
109
+ // bone-follow bodies count as one "world" component (they're each anchored
110
+ // to the skeleton), so a joint bridging two separately anchored subtrees
111
+ // also closes a kinematic cycle. One edge per cycle gets softened, which
112
+ // releases the over-determination regardless of which edge it is.
113
+ const parent = new Int32Array(rigidbodies.length + 1);
114
+ for (let i = 0; i < parent.length; i++)
115
+ parent[i] = i;
116
+ const find = (x) => {
117
+ while (parent[x] !== x) {
118
+ parent[x] = parent[parent[x]];
119
+ x = parent[x];
120
+ }
121
+ return x;
122
+ };
123
+ const world = rigidbodies.length;
124
+ for (let i = 0; i < rigidbodies.length; i++) {
125
+ if (rigidbodies[i].type !== RigidbodyType.Dynamic)
126
+ parent[find(i)] = find(world);
127
+ }
128
+ for (const con of out) {
129
+ const ra = find(con.bodyA);
130
+ const rb = find(con.bodyB);
131
+ if (ra === rb)
132
+ con.isLoop = true;
133
+ else
134
+ parent[ra] = rb;
135
+ }
94
136
  return out;
95
137
  }
96
138
  // frame = bodyWorldBind^-1 · jointWorld. False if bodyWorldBind is singular.
@@ -1 +1 @@
1
- {"version":3,"file":"solver.d.ts","sourceRoot":"","sources":["../../src/physics/solver.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAA;AAC5C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAE1D,OAAO,KAAK,EAAW,WAAW,EAAE,MAAM,WAAW,CAAA;AA6BrD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,EACrB,WAAW,EAAE,sBAAsB,EAAE,EACrC,QAAQ,EAAE,WAAW,EACrB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,GACjB,IAAI,CAyBN"}
1
+ {"version":3,"file":"solver.d.ts","sourceRoot":"","sources":["../../src/physics/solver.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAA;AAC5C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAE1D,OAAO,KAAK,EAAW,WAAW,EAAE,MAAM,WAAW,CAAA;AAyDrD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,EACrB,WAAW,EAAE,sBAAsB,EAAE,EACrC,QAAQ,EAAE,WAAW,EACrB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,GACjB,IAAI,CA4BN"}