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.
- package/dist/engine.d.ts +3 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +160 -21
- package/dist/model.d.ts +1 -0
- package/dist/model.d.ts.map +1 -1
- package/dist/physics/body.d.ts +3 -1
- package/dist/physics/body.d.ts.map +1 -1
- package/dist/physics/body.js +84 -20
- package/dist/physics/constraint.d.ts +14 -1
- package/dist/physics/constraint.d.ts.map +1 -1
- package/dist/physics/constraint.js +43 -1
- package/dist/physics/solver.d.ts.map +1 -1
- package/dist/physics/solver.js +278 -110
- package/dist/pmx-loader.d.ts.map +1 -1
- package/dist/pmx-loader.js +1 -0
- package/dist/shaders/materials/body.d.ts +1 -1
- package/dist/shaders/materials/body.d.ts.map +1 -1
- package/dist/shaders/materials/cloth_rough.d.ts +1 -1
- package/dist/shaders/materials/cloth_rough.d.ts.map +1 -1
- package/dist/shaders/materials/cloth_smooth.d.ts +1 -1
- package/dist/shaders/materials/cloth_smooth.d.ts.map +1 -1
- package/dist/shaders/materials/common.d.ts +1 -1
- package/dist/shaders/materials/common.d.ts.map +1 -1
- package/dist/shaders/materials/common.js +137 -122
- package/dist/shaders/materials/default.d.ts +1 -1
- package/dist/shaders/materials/default.d.ts.map +1 -1
- package/dist/shaders/materials/eye.d.ts +1 -1
- package/dist/shaders/materials/eye.d.ts.map +1 -1
- package/dist/shaders/materials/eye.js +14 -0
- package/dist/shaders/materials/face.d.ts +1 -1
- package/dist/shaders/materials/face.d.ts.map +1 -1
- package/dist/shaders/materials/hair.d.ts +1 -1
- package/dist/shaders/materials/hair.d.ts.map +1 -1
- package/dist/shaders/materials/metal.d.ts +1 -1
- package/dist/shaders/materials/metal.d.ts.map +1 -1
- package/dist/shaders/materials/mmd_classic.d.ts +2 -0
- package/dist/shaders/materials/mmd_classic.d.ts.map +1 -0
- package/dist/shaders/materials/mmd_classic.js +66 -0
- package/dist/shaders/materials/stockings.d.ts +1 -1
- package/dist/shaders/materials/stockings.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/engine.ts +4198 -4045
- package/src/model.ts +3 -0
- package/src/physics/body.ts +82 -24
- package/src/physics/constraint.ts +74 -5
- package/src/physics/solver.ts +915 -752
- package/src/pmx-loader.ts +1 -0
- package/src/shaders/materials/common.ts +204 -189
- package/src/shaders/materials/eye.ts +14 -0
- 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:
|
|
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;
|
|
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"}
|