@aura3d/engine 4.3.0 → 4.3.2
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/aura3d-cli/cli-help.js +1 -1
- package/dist/aura3d-cli/cli.js +5 -0
- package/dist/aura3d-cli/cli.js.map +1 -1
- package/dist/aura3d-cli/index.d.ts +2 -0
- package/dist/aura3d-cli/index.d.ts.map +1 -1
- package/dist/aura3d-cli/index.js +1 -0
- package/dist/aura3d-cli/index.js.map +1 -1
- package/dist/aura3d-cli/skin/command.d.ts +5 -1
- package/dist/aura3d-cli/skin/command.d.ts.map +1 -1
- package/dist/aura3d-cli/skin/command.js +23 -1
- package/dist/aura3d-cli/skin/command.js.map +1 -1
- package/dist/aura3d-cli/skin/glbEdit.d.ts +1 -1
- package/dist/aura3d-cli/skin/glbEdit.d.ts.map +1 -1
- package/dist/aura3d-cli/skin/glbEdit.js +1 -1
- package/dist/aura3d-cli/skin/glbEdit.js.map +1 -1
- package/dist/aura3d-cli/skin/refitSkeleton.d.ts +23 -0
- package/dist/aura3d-cli/skin/refitSkeleton.d.ts.map +1 -0
- package/dist/aura3d-cli/skin/refitSkeleton.js +288 -0
- package/dist/aura3d-cli/skin/refitSkeleton.js.map +1 -0
- package/dist/aura3d-cli/skin/repair.d.ts +4 -0
- package/dist/aura3d-cli/skin/repair.d.ts.map +1 -1
- package/dist/aura3d-cli/skin/repair.js +42 -30
- package/dist/aura3d-cli/skin/repair.js.map +1 -1
- package/dist/create-aura3d/index.js +1 -1
- package/dist/engine/agent-api/camera/layers.d.ts.map +1 -1
- package/dist/engine/agent-api/camera/layers.js +6 -1
- package/dist/engine/agent-api/camera/layers.js.map +1 -1
- package/dist/engine/agent-api/compiler/lines.d.ts.map +1 -1
- package/dist/engine/agent-api/compiler/lines.js +8 -6
- package/dist/engine/agent-api/compiler/lines.js.map +1 -1
- package/dist/engine/agent-api/vfx/effects-api.d.ts.map +1 -1
- package/dist/engine/agent-api/vfx/effects-api.js +12 -3
- package/dist/engine/agent-api/vfx/effects-api.js.map +1 -1
- package/dist/engine/agent-api/vfx/gameEffects.d.ts.map +1 -1
- package/dist/engine/agent-api/vfx/gameEffects.js +20 -3
- package/dist/engine/agent-api/vfx/gameEffects.js.map +1 -1
- package/dist/engine/contracts/camera.d.ts +1 -0
- package/dist/engine/contracts/camera.d.ts.map +1 -1
- package/dist/engine/contracts/effects.d.ts +4 -2
- package/dist/engine/contracts/effects.d.ts.map +1 -1
- package/dist/engine/contracts/effects.js.map +1 -1
- package/dist/game/index.d.ts +2 -2
- package/dist/game/index.d.ts.map +1 -1
- package/dist/game/index.js +1 -1
- package/dist/game/index.js.map +1 -1
- package/dist/game/motion/facing.d.ts +30 -0
- package/dist/game/motion/facing.d.ts.map +1 -0
- package/dist/game/motion/facing.js +50 -0
- package/dist/game/motion/facing.js.map +1 -0
- package/dist/game/motion/handBounce.d.ts +50 -5
- package/dist/game/motion/handBounce.d.ts.map +1 -1
- package/dist/game/motion/handBounce.js +89 -41
- package/dist/game/motion/handBounce.js.map +1 -1
- package/dist/game/motion/index.d.ts +5 -1
- package/dist/game/motion/index.d.ts.map +1 -1
- package/dist/game/motion/index.js +3 -1
- package/dist/game/motion/index.js.map +1 -1
- package/dist/game/motion/twoHandGrip.d.ts +229 -0
- package/dist/game/motion/twoHandGrip.d.ts.map +1 -0
- package/dist/game/motion/twoHandGrip.js +413 -0
- package/dist/game/motion/twoHandGrip.js.map +1 -0
- package/dist/rendering/DepthPass.d.ts.map +1 -1
- package/dist/rendering/DepthPass.js +1 -2
- package/dist/rendering/DepthPass.js.map +1 -1
- package/dist/rendering/shadows/DirectionalCascadeFitter.d.ts +2 -0
- package/dist/rendering/shadows/DirectionalCascadeFitter.d.ts.map +1 -1
- package/dist/rendering/shadows/DirectionalCascadeFitter.js +13 -4
- package/dist/rendering/shadows/DirectionalCascadeFitter.js.map +1 -1
- package/dist/rendering/shadows/Prd02DepthShaderLibrary.d.ts +7 -0
- package/dist/rendering/shadows/Prd02DepthShaderLibrary.d.ts.map +1 -1
- package/dist/rendering/shadows/Prd02DepthShaderLibrary.js +27 -1
- package/dist/rendering/shadows/Prd02DepthShaderLibrary.js.map +1 -1
- package/dist/rendering/shadows/ShadowSystem.d.ts.map +1 -1
- package/dist/rendering/shadows/ShadowSystem.js +3 -1
- package/dist/rendering/shadows/ShadowSystem.js.map +1 -1
- package/dist/rendering/shadows/shadowLegacy.d.ts +14 -0
- package/dist/rendering/shadows/shadowLegacy.d.ts.map +1 -0
- package/dist/rendering/shadows/shadowLegacy.js +15 -0
- package/dist/rendering/shadows/shadowLegacy.js.map +1 -0
- package/dist/rendering/webgl2/LegacyPost.d.ts +11 -0
- package/dist/rendering/webgl2/LegacyPost.d.ts.map +1 -1
- package/dist/rendering/webgl2/LegacyPost.js +41 -1
- package/dist/rendering/webgl2/LegacyPost.js.map +1 -1
- package/package.json +26 -25
- package/templates/cinematic-scene/package.json +2 -2
- package/templates/mini-game/package.json +2 -2
- package/templates/product-viewer/package.json +2 -2
- package/templates/production-asset-inspector/package.json +1 -1
- package/templates/production-material-studio/package.json +1 -1
- package/templates/production-product-configurator/package.json +1 -1
- package/templates/production-product-viewer/package.json +1 -1
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Two-handed grip: a held object (bat, club, racket, staff, sword, tool) with a bottom hand at its grip point and a top hand a fixed
|
|
3
|
+
* spread up its axis. Two-bone IK puts both drawn palms on the handle, a forearm twist rolls the object onto the wanted direction,
|
|
4
|
+
* and the elbow swings around its circle of solutions until the forearm sits at the grip's own angle to that direction.
|
|
5
|
+
*
|
|
6
|
+
* Pure maths, no engine calls and no wall clock: the game feeds a pose target per fixed step and applies the returned bone
|
|
7
|
+
* rotations (`poseBonesForEngine`) and object transform itself. All vectors are in the actor's local frame (+Y up). The "R" hand
|
|
8
|
+
* is the bottom hand (at the grip point), "L" the top hand; a left-handed stance uses `mirrorTwoHandGripRig`.
|
|
9
|
+
*/
|
|
10
|
+
const clamp = (v, lo, hi) => Math.max(lo, Math.min(hi, v));
|
|
11
|
+
const lerp = (a, b, t) => a + (b - a) * t;
|
|
12
|
+
const smoothstep = (t) => (t <= 0 ? 0 : t >= 1 ? 1 : t * t * (3 - 2 * t));
|
|
13
|
+
export const GRIP_Q_ID = [0, 0, 0, 1];
|
|
14
|
+
export const gripQNorm = (q) => {
|
|
15
|
+
const l = Math.hypot(q[0], q[1], q[2], q[3]) || 1;
|
|
16
|
+
return [q[0] / l, q[1] / l, q[2] / l, q[3] / l];
|
|
17
|
+
};
|
|
18
|
+
export const gripQMul = (a, b) => {
|
|
19
|
+
const [ax, ay, az, aw] = a;
|
|
20
|
+
const [bx, by, bz, bw] = b;
|
|
21
|
+
return [aw * bx + ax * bw + ay * bz - az * by, aw * by - ax * bz + ay * bw + az * bx, aw * bz + ax * by - ay * bx + az * bw, aw * bw - ax * bx - ay * by - az * bz];
|
|
22
|
+
};
|
|
23
|
+
export const gripQConj = (q) => [-q[0], -q[1], -q[2], q[3]];
|
|
24
|
+
export const gripQAxis = (axis, angle) => {
|
|
25
|
+
const l = Math.hypot(axis[0], axis[1], axis[2]) || 1;
|
|
26
|
+
const h = angle / 2;
|
|
27
|
+
const s = Math.sin(h);
|
|
28
|
+
return gripQNorm([(axis[0] / l) * s, (axis[1] / l) * s, (axis[2] / l) * s, Math.cos(h)]);
|
|
29
|
+
};
|
|
30
|
+
export const gripQRot = (q, v) => {
|
|
31
|
+
const t = [2 * (q[1] * v[2] - q[2] * v[1]), 2 * (q[2] * v[0] - q[0] * v[2]), 2 * (q[0] * v[1] - q[1] * v[0])];
|
|
32
|
+
const c = [q[1] * t[2] - q[2] * t[1], q[2] * t[0] - q[0] * t[2], q[0] * t[1] - q[1] * t[0]];
|
|
33
|
+
return [v[0] + t[0] * q[3] + c[0], v[1] + t[1] * q[3] + c[1], v[2] + t[2] * q[3] + c[2]];
|
|
34
|
+
};
|
|
35
|
+
/** Robust rotation taking normalized vector a to normalized vector b. */
|
|
36
|
+
export const gripQFromTo = (a, b) => {
|
|
37
|
+
const d = a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
|
38
|
+
if (d > 0.99999)
|
|
39
|
+
return GRIP_Q_ID;
|
|
40
|
+
if (d < -0.99999) {
|
|
41
|
+
const axis = [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
|
|
42
|
+
const alt = Math.hypot(axis[0], axis[2]) < 1e-6 ? [0, 0, 1] : [1, 0, 0];
|
|
43
|
+
const c = [a[1] * alt[2] - a[2] * alt[1], a[2] * alt[0] - a[0] * alt[2], a[0] * alt[1] - a[1] * alt[0]];
|
|
44
|
+
return gripQAxis(c, Math.PI);
|
|
45
|
+
}
|
|
46
|
+
return gripQNorm([a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0], 1 + d]);
|
|
47
|
+
};
|
|
48
|
+
/** Quaternion to XYZ-intrinsic Euler radians (the engine's `eulerXYZFromQuat` convention). */
|
|
49
|
+
export const gripQToEulerXYZ = (q) => {
|
|
50
|
+
const [x, y, z, w] = gripQNorm(q);
|
|
51
|
+
const m13 = 2 * (x * z + y * w);
|
|
52
|
+
const pitch = Math.asin(clamp(m13, -1, 1));
|
|
53
|
+
if (Math.abs(m13) >= 0.9999999) {
|
|
54
|
+
const m32 = 2 * (y * z + x * w);
|
|
55
|
+
const m22 = 2 * (x * x + w * w);
|
|
56
|
+
return [Math.atan2(m32, m22), pitch, 0];
|
|
57
|
+
}
|
|
58
|
+
const m11 = 1 - 2 * (y * y + z * z);
|
|
59
|
+
const m12 = 2 * (x * y - z * w);
|
|
60
|
+
const m23 = 2 * (y * z - x * w);
|
|
61
|
+
const m33 = 1 - 2 * (x * x + y * y);
|
|
62
|
+
return [Math.atan2(-m23, m33), pitch, Math.atan2(-m12, m11)];
|
|
63
|
+
};
|
|
64
|
+
/** Quaternion to Euler radians for the engine's default node rotation order "ZYX" (matrix Rz*Ry*Rx), which `setRotation(x, y, z)` on a route node uses. Applying XYZ angles to a ZYX node tilts the object the wrong way. */
|
|
65
|
+
export const gripQToEulerZYX = (q) => {
|
|
66
|
+
const [x, y, z, w] = gripQNorm(q);
|
|
67
|
+
const m11 = 1 - 2 * (y * y + z * z);
|
|
68
|
+
const m21 = 2 * (x * y + z * w);
|
|
69
|
+
const m31 = 2 * (x * z - y * w);
|
|
70
|
+
const m32 = 2 * (y * z + x * w);
|
|
71
|
+
const m33 = 1 - 2 * (x * x + y * y);
|
|
72
|
+
const m12 = 2 * (x * y - z * w);
|
|
73
|
+
const m22 = 1 - 2 * (x * x + z * z);
|
|
74
|
+
const ry = Math.asin(clamp(-m31, -1, 1));
|
|
75
|
+
if (Math.abs(m31) < 0.9999999)
|
|
76
|
+
return [Math.atan2(m32, m33), ry, Math.atan2(m21, m11)];
|
|
77
|
+
return [0, ry, Math.atan2(-m12, m22)];
|
|
78
|
+
};
|
|
79
|
+
export const gripUnit = (v) => {
|
|
80
|
+
const l = Math.hypot(v[0], v[1], v[2]) || 1;
|
|
81
|
+
return [v[0] / l, v[1] / l, v[2] / l];
|
|
82
|
+
};
|
|
83
|
+
/** Rotate about +Y (positive angle turns +X toward -Z, the chest-yaw convention of the solver). */
|
|
84
|
+
export const gripRotY = (angle, v) => {
|
|
85
|
+
const c = Math.cos(angle);
|
|
86
|
+
const s = Math.sin(angle);
|
|
87
|
+
return [v[0] * c + v[2] * s, v[1], -v[0] * s + v[2] * c];
|
|
88
|
+
};
|
|
89
|
+
/** Two-bone IK: elbow position for shoulder to target with an elbow-hint pole direction; targets past the arm's reach are clamped to it. */
|
|
90
|
+
export function solveGripTwoBone(shoulder, target, pole, l1, l2) {
|
|
91
|
+
const to = [target[0] - shoulder[0], target[1] - shoulder[1], target[2] - shoulder[2]];
|
|
92
|
+
const dRaw = Math.hypot(to[0], to[1], to[2]);
|
|
93
|
+
const d = clamp(dRaw, Math.abs(l1 - l2) + 1e-4, l1 + l2 - 1e-4);
|
|
94
|
+
const n = dRaw < 1e-6 ? [0, 0, 1] : [to[0] / dRaw, to[1] / dRaw, to[2] / dRaw];
|
|
95
|
+
const a = (l1 * l1 - l2 * l2 + d * d) / (2 * d);
|
|
96
|
+
const h = Math.sqrt(Math.max(0, l1 * l1 - a * a));
|
|
97
|
+
const pd = pole[0] * n[0] + pole[1] * n[1] + pole[2] * n[2];
|
|
98
|
+
let b = [pole[0] - n[0] * pd, pole[1] - n[1] * pd, pole[2] - n[2] * pd];
|
|
99
|
+
const bl = Math.hypot(b[0], b[1], b[2]);
|
|
100
|
+
b = bl < 1e-5 ? gripUnit([n[1], n[2], n[0]]) : [b[0] / bl, b[1] / bl, b[2] / bl];
|
|
101
|
+
return [shoulder[0] + n[0] * a + b[0] * h, shoulder[1] + n[1] * a + b[1] * h, shoulder[2] + n[2] * a + b[2] * h];
|
|
102
|
+
}
|
|
103
|
+
/** Elbow for shoulder to target with the hint pole rotated by `gamma` about the shoulder-to-target axis (the elbow's circle of solutions). */
|
|
104
|
+
export function orbitGripElbow(shoulder, target, pole, l1, l2, gamma) {
|
|
105
|
+
const e0 = solveGripTwoBone(shoulder, target, pole, l1, l2);
|
|
106
|
+
if (gamma === 0)
|
|
107
|
+
return e0;
|
|
108
|
+
const to = [target[0] - shoulder[0], target[1] - shoulder[1], target[2] - shoulder[2]];
|
|
109
|
+
const n = gripUnit(to);
|
|
110
|
+
const r = [e0[0] - shoulder[0], e0[1] - shoulder[1], e0[2] - shoulder[2]];
|
|
111
|
+
const rn = r[0] * n[0] + r[1] * n[1] + r[2] * n[2];
|
|
112
|
+
const along = [n[0] * rn, n[1] * rn, n[2] * rn];
|
|
113
|
+
const perp = [r[0] - along[0], r[1] - along[1], r[2] - along[2]];
|
|
114
|
+
const cr = [n[1] * perp[2] - n[2] * perp[1], n[2] * perp[0] - n[0] * perp[2], n[0] * perp[1] - n[1] * perp[0]];
|
|
115
|
+
const c = Math.cos(gamma);
|
|
116
|
+
const sn = Math.sin(gamma);
|
|
117
|
+
return [
|
|
118
|
+
shoulder[0] + along[0] + perp[0] * c + cr[0] * sn,
|
|
119
|
+
shoulder[1] + along[1] + perp[1] * c + cr[1] * sn,
|
|
120
|
+
shoulder[2] + along[2] + perp[2] * c + cr[2] * sn
|
|
121
|
+
];
|
|
122
|
+
}
|
|
123
|
+
/** Twist (radians) about `axis` that rolls the rotated grip axis `a` onto `d`, compared as azimuths about `axis` and unwrapped against `prev`. */
|
|
124
|
+
export function gripAzimuthTwist(a, axis, d, prev) {
|
|
125
|
+
const aDot = a[0] * axis[0] + a[1] * axis[1] + a[2] * axis[2];
|
|
126
|
+
const dDot = d[0] * axis[0] + d[1] * axis[1] + d[2] * axis[2];
|
|
127
|
+
const aPerp = [a[0] - axis[0] * aDot, a[1] - axis[1] * aDot, a[2] - axis[2] * aDot];
|
|
128
|
+
const dPerp = [d[0] - axis[0] * dDot, d[1] - axis[1] * dDot, d[2] - axis[2] * dDot];
|
|
129
|
+
const cr = [aPerp[1] * dPerp[2] - aPerp[2] * dPerp[1], aPerp[2] * dPerp[0] - aPerp[0] * dPerp[2], aPerp[0] * dPerp[1] - aPerp[1] * dPerp[0]];
|
|
130
|
+
let tau = Math.atan2(cr[0] * axis[0] + cr[1] * axis[1] + cr[2] * axis[2], aPerp[0] * dPerp[0] + aPerp[1] * dPerp[1] + aPerp[2] * dPerp[2]);
|
|
131
|
+
while (tau - prev > Math.PI)
|
|
132
|
+
tau -= 2 * Math.PI;
|
|
133
|
+
while (tau - prev < -Math.PI)
|
|
134
|
+
tau += 2 * Math.PI;
|
|
135
|
+
return tau;
|
|
136
|
+
}
|
|
137
|
+
export const DEFAULT_GRIP_BONE_NAMES = {
|
|
138
|
+
hips: "Hips",
|
|
139
|
+
spine: "Spine",
|
|
140
|
+
chest: "Chest",
|
|
141
|
+
rightUpperArm: "RightUpperArm",
|
|
142
|
+
rightForearm: "RightForearm",
|
|
143
|
+
leftUpperArm: "LeftUpperArm",
|
|
144
|
+
leftForearm: "LeftForearm"
|
|
145
|
+
};
|
|
146
|
+
const flexOf = (sh, el, hand) => {
|
|
147
|
+
const ua = gripUnit([el[0] - sh[0], el[1] - sh[1], el[2] - sh[2]]);
|
|
148
|
+
const fa = gripUnit([hand[0] - el[0], hand[1] - el[1], hand[2] - el[2]]);
|
|
149
|
+
return Math.acos(clamp(ua[0] * fa[0] + ua[1] * fa[1] + ua[2] * fa[2], -1, 1));
|
|
150
|
+
};
|
|
151
|
+
/** Where the relaxed top hand hangs (actor frame), relative to its shoulder: down the arm, slightly forward. */
|
|
152
|
+
export function relaxedTopHand(rig, shoulderL) {
|
|
153
|
+
const reach = (rig.upperArm + rig.foreHand) * 0.85;
|
|
154
|
+
return [shoulderL[0] + 0.04, shoulderL[1] - reach, shoulderL[2] + 0.1];
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Calibrate the object socket from a stance: the rotation that puts the object's axis along `stanceDir` while the bottom hand holds `stanceK`
|
|
158
|
+
* with the given elbow hint, and the forearm-to-axis cosine the elbow orbit then holds for every other pose.
|
|
159
|
+
*/
|
|
160
|
+
export function calibrateGripSocket(body, stance) {
|
|
161
|
+
const sr = gripRotY(stance.phi, body.shoulderR);
|
|
162
|
+
const shoulder = [body.chestBind[0] + sr[0], body.chestBind[1] + sr[1], body.chestBind[2] + sr[2]];
|
|
163
|
+
const elbow = solveGripTwoBone(shoulder, stance.K, stance.pole, body.upperArm, body.foreHand);
|
|
164
|
+
const faDir = gripUnit([stance.K[0] - elbow[0], stance.K[1] - elbow[1], stance.K[2] - elbow[2]]);
|
|
165
|
+
const qFa = gripQFromTo(body.bindDirFA, faDir);
|
|
166
|
+
const socketRot = gripQMul(gripQConj(qFa), gripQFromTo([1, 0, 0], stance.D));
|
|
167
|
+
const coneCos = faDir[0] * stance.D[0] + faDir[1] * stance.D[1] + faDir[2] * stance.D[2];
|
|
168
|
+
return { socketRot, coneCos };
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Solve one pose. The bottom hand IKs onto `K`; the elbow is swung round its circle of solutions until the forearm sits at the grip's
|
|
172
|
+
* fixed angle to the wanted object direction `D` (preferring the elbow nearest the previous frame's, `prev.gamma`); a forearm twist rolls
|
|
173
|
+
* the socketed object onto `D`; the top hand then IKs onto the point `gripSpread` up the object's real axis and rolls onto it the same way.
|
|
174
|
+
*/
|
|
175
|
+
export function solveTwoHandGrip(rig, target, prev = {}, options = {}) {
|
|
176
|
+
const { K, D, phi, hip, pole: poleR } = target;
|
|
177
|
+
const prevTau = prev.tau ?? 0;
|
|
178
|
+
const prevTauL = prev.tauL ?? 0;
|
|
179
|
+
const prevGamma = prev.gamma ?? 0;
|
|
180
|
+
const names = rig.boneNames ?? DEFAULT_GRIP_BONE_NAMES;
|
|
181
|
+
const chest = [rig.chestBind[0] + hip[0], rig.chestBind[1] + hip[1], rig.chestBind[2] + hip[2]];
|
|
182
|
+
const sr = gripRotY(phi, rig.shoulderR);
|
|
183
|
+
const sl = gripRotY(phi, rig.shoulderL);
|
|
184
|
+
const shRt = [chest[0] + sr[0], chest[1] + sr[1], chest[2] + sr[2]];
|
|
185
|
+
const shLt = [chest[0] + sl[0], chest[1] + sl[1], chest[2] + sl[2]];
|
|
186
|
+
let gamma = prevGamma;
|
|
187
|
+
let bestCost = Infinity;
|
|
188
|
+
for (let i = 0; i < 96; i++) {
|
|
189
|
+
const g = -Math.PI + (2 * Math.PI * i) / 96;
|
|
190
|
+
const e = orbitGripElbow(shRt, K, poleR, rig.upperArm, rig.foreHand, g);
|
|
191
|
+
const f = gripUnit([K[0] - e[0], K[1] - e[1], K[2] - e[2]]);
|
|
192
|
+
const cosA = f[0] * D[0] + f[1] * D[1] + f[2] * D[2];
|
|
193
|
+
let dg = g - prevGamma;
|
|
194
|
+
while (dg > Math.PI)
|
|
195
|
+
dg -= 2 * Math.PI;
|
|
196
|
+
while (dg < -Math.PI)
|
|
197
|
+
dg += 2 * Math.PI;
|
|
198
|
+
const cost = (cosA - rig.coneCos) * (cosA - rig.coneCos) + 0.004 * dg * dg;
|
|
199
|
+
if (cost < bestCost) {
|
|
200
|
+
bestCost = cost;
|
|
201
|
+
gamma = g;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
const eR = orbitGripElbow(shRt, K, poleR, rig.upperArm, rig.foreHand, gamma);
|
|
205
|
+
const faDir = gripUnit([K[0] - eR[0], K[1] - eR[1], K[2] - eR[2]]);
|
|
206
|
+
const qUaR = gripQFromTo(rig.bindDirUA, gripUnit([eR[0] - shRt[0], eR[1] - shRt[1], eR[2] - shRt[2]]));
|
|
207
|
+
const qFaZt = gripQFromTo(rig.bindDirFA, faDir);
|
|
208
|
+
const tau = gripAzimuthTwist(gripQRot(gripQMul(qFaZt, rig.socketRot), [1, 0, 0]), faDir, D, prevTau);
|
|
209
|
+
const qFa = gripQMul(gripQAxis(faDir, tau), qFaZt);
|
|
210
|
+
const objectRot = gripQMul(qFa, rig.socketRot);
|
|
211
|
+
const objectDir = gripQRot(objectRot, [1, 0, 0]);
|
|
212
|
+
const palmOff = gripQRot(qFa, rig.palmR);
|
|
213
|
+
const palm = [eR[0] + palmOff[0], eR[1] + palmOff[1], eR[2] + palmOff[2]];
|
|
214
|
+
// The top hand grips the object where it really is (palm plus the socketed object's own direction), not where D asked for it.
|
|
215
|
+
const gripped = [palm[0] + objectDir[0] * rig.gripSpread, palm[1] + objectDir[1] * rig.gripSpread, palm[2] + objectDir[2] * rig.gripSpread];
|
|
216
|
+
const release = clamp(options.release ?? 0, 0, 1);
|
|
217
|
+
let targetL = gripped;
|
|
218
|
+
if (release > 0) {
|
|
219
|
+
const rest = relaxedTopHand(rig, shLt);
|
|
220
|
+
const u = smoothstep(release);
|
|
221
|
+
targetL = [lerp(gripped[0], rest[0], u), lerp(gripped[1], rest[1], u), lerp(gripped[2], rest[2], u)];
|
|
222
|
+
}
|
|
223
|
+
const eL = solveGripTwoBone(shLt, targetL, rig.poleL, rig.upperArm, rig.foreHand);
|
|
224
|
+
const faDirL = gripUnit([targetL[0] - eL[0], targetL[1] - eL[1], targetL[2] - eL[2]]);
|
|
225
|
+
const qFaLZt = gripQFromTo(rig.bindDirFAL, faDirL);
|
|
226
|
+
// Top hand: the mirror of the bottom hand's grip axis, rolled onto the object the same way (free-hanging when released).
|
|
227
|
+
const gripR = gripQRot(rig.socketRot, [1, 0, 0]);
|
|
228
|
+
const gripL = [-gripR[0], gripR[1], gripR[2]];
|
|
229
|
+
const tauL = release >= 1 ? prevTauL : gripAzimuthTwist(gripQRot(qFaLZt, gripL), faDirL, objectDir, prevTauL);
|
|
230
|
+
const qFaL = gripQMul(gripQAxis(faDirL, tauL), qFaLZt);
|
|
231
|
+
const qChest = gripQAxis([0, 1, 0], phi);
|
|
232
|
+
const qUaL = gripQFromTo(rig.bindDirUAL, gripUnit([eL[0] - shLt[0], eL[1] - shLt[1], eL[2] - shLt[2]]));
|
|
233
|
+
const palmLOff = gripQRot(qFaL, rig.palmL);
|
|
234
|
+
const palmL = [eL[0] + palmLOff[0], eL[1] + palmLOff[1], eL[2] + palmLOff[2]];
|
|
235
|
+
const bones = {
|
|
236
|
+
[names.hips]: { position: [rig.hipsBind[0] + hip[0], rig.hipsBind[1] + hip[1], rig.hipsBind[2] + hip[2]] },
|
|
237
|
+
// Pin the spine so the chest forward kinematics the socket was calibrated against is exact.
|
|
238
|
+
[names.spine]: { rotation: GRIP_Q_ID },
|
|
239
|
+
[names.chest]: { rotation: qChest },
|
|
240
|
+
[names.rightUpperArm]: { rotation: gripQMul(gripQConj(qChest), qUaR) },
|
|
241
|
+
[names.rightForearm]: { rotation: gripQMul(gripQConj(qUaR), qFa) },
|
|
242
|
+
[names.leftUpperArm]: { rotation: gripQMul(gripQConj(qChest), qUaL) },
|
|
243
|
+
[names.leftForearm]: { rotation: gripQMul(gripQConj(qUaL), qFaL) }
|
|
244
|
+
};
|
|
245
|
+
return {
|
|
246
|
+
bones,
|
|
247
|
+
tau,
|
|
248
|
+
tauL,
|
|
249
|
+
gamma,
|
|
250
|
+
qFa,
|
|
251
|
+
objectRot,
|
|
252
|
+
objectDir,
|
|
253
|
+
palm,
|
|
254
|
+
palmL,
|
|
255
|
+
targetL,
|
|
256
|
+
elbow: eR,
|
|
257
|
+
elbowL: eL,
|
|
258
|
+
chest,
|
|
259
|
+
shoulder: shRt,
|
|
260
|
+
shoulderL: shLt,
|
|
261
|
+
sweetPoint: [palm[0] + objectDir[0] * rig.sweetSpot, palm[1] + objectDir[1] * rig.sweetSpot, palm[2] + objectDir[2] * rig.sweetSpot],
|
|
262
|
+
tipPoint: [palm[0] + objectDir[0] * rig.objectLength, palm[1] + objectDir[1] * rig.objectLength, palm[2] + objectDir[2] * rig.objectLength],
|
|
263
|
+
flexR: flexOf(shRt, eR, palm),
|
|
264
|
+
flexL: flexOf(shLt, eL, palmL)
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
/** The same grip for the mirror-image stance (left-handed batter, golfer, hitter): x is flipped and the two arms swap roles. */
|
|
268
|
+
export function mirrorTwoHandGripBodyRig(rig) {
|
|
269
|
+
const m = (v) => [-v[0], v[1], v[2]];
|
|
270
|
+
const n = rig.boneNames ?? DEFAULT_GRIP_BONE_NAMES;
|
|
271
|
+
return {
|
|
272
|
+
...rig,
|
|
273
|
+
chestBind: m(rig.chestBind),
|
|
274
|
+
shoulderR: m(rig.shoulderL),
|
|
275
|
+
shoulderL: m(rig.shoulderR),
|
|
276
|
+
palmR: m(rig.palmL),
|
|
277
|
+
palmL: m(rig.palmR),
|
|
278
|
+
bindDirUA: m(rig.bindDirUAL),
|
|
279
|
+
bindDirFA: m(rig.bindDirFAL),
|
|
280
|
+
bindDirUAL: m(rig.bindDirUA),
|
|
281
|
+
bindDirFAL: m(rig.bindDirFA),
|
|
282
|
+
poleL: m(rig.poleL),
|
|
283
|
+
boneNames: {
|
|
284
|
+
...n,
|
|
285
|
+
rightUpperArm: n.leftUpperArm,
|
|
286
|
+
rightForearm: n.leftForearm,
|
|
287
|
+
leftUpperArm: n.rightUpperArm,
|
|
288
|
+
leftForearm: n.rightForearm
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
/** The engine's animation pose reads `{x,y,z}` and `{x,y,z,w}` objects: tuple arrays would leave every bone untouched. */
|
|
293
|
+
export function twoHandGripBonesForEngine(bones) {
|
|
294
|
+
const out = {};
|
|
295
|
+
for (const [name, b] of Object.entries(bones)) {
|
|
296
|
+
out[name] = {
|
|
297
|
+
...(b.position ? { position: { x: b.position[0], y: b.position[1], z: b.position[2] } } : {}),
|
|
298
|
+
...(b.rotation ? { rotation: { x: b.rotation[0], y: b.rotation[1], z: b.rotation[2], w: b.rotation[3] } } : {})
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
return out;
|
|
302
|
+
}
|
|
303
|
+
export function createTwoHandGrip(rig) {
|
|
304
|
+
let tau = 0;
|
|
305
|
+
let tauL = 0;
|
|
306
|
+
let gamma = 0;
|
|
307
|
+
let release = 0;
|
|
308
|
+
let steps = 0;
|
|
309
|
+
let pose = null;
|
|
310
|
+
return {
|
|
311
|
+
rig,
|
|
312
|
+
step(target, rel = 0) {
|
|
313
|
+
release = clamp(rel, 0, 1);
|
|
314
|
+
pose = solveTwoHandGrip(rig, target, { tau, tauL, gamma }, { release });
|
|
315
|
+
tau = pose.tau;
|
|
316
|
+
tauL = pose.tauL;
|
|
317
|
+
gamma = pose.gamma;
|
|
318
|
+
steps += 1;
|
|
319
|
+
return pose;
|
|
320
|
+
},
|
|
321
|
+
state: () => ({ tau, tauL, gamma, release, steps, pose }),
|
|
322
|
+
reset() {
|
|
323
|
+
tau = 0;
|
|
324
|
+
tauL = 0;
|
|
325
|
+
gamma = 0;
|
|
326
|
+
release = 0;
|
|
327
|
+
steps = 0;
|
|
328
|
+
pose = null;
|
|
329
|
+
}
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
/** Where the drawn palm centres: the mean of the hand's skinned vertices (a flat xyz array or a list of points). Use it so grip is measured against what the screen shows. */
|
|
333
|
+
export function handCentroid(vertices) {
|
|
334
|
+
const flat = vertices.length > 0 && typeof vertices[0] === "number";
|
|
335
|
+
let x = 0;
|
|
336
|
+
let y = 0;
|
|
337
|
+
let z = 0;
|
|
338
|
+
let n = 0;
|
|
339
|
+
if (flat) {
|
|
340
|
+
const f = vertices;
|
|
341
|
+
for (let i = 0; i + 2 < f.length; i += 3) {
|
|
342
|
+
x += f[i];
|
|
343
|
+
y += f[i + 1];
|
|
344
|
+
z += f[i + 2];
|
|
345
|
+
n += 1;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
for (const p of vertices) {
|
|
350
|
+
x += p[0];
|
|
351
|
+
y += p[1];
|
|
352
|
+
z += p[2];
|
|
353
|
+
n += 1;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
return n === 0 ? [0, 0, 0] : [x / n, y / n, z / n];
|
|
357
|
+
}
|
|
358
|
+
export const DEFAULT_GRIP_LIMITS = { knobToBottomPalm: 0.06, topPalmToAxis: 0.06, tailPhases: ["follow-through"], tail: 0.08 };
|
|
359
|
+
const p95 = (xs) => (xs.length === 0 ? Number.NaN : [...xs].sort((a, b) => a - b)[Math.min(xs.length - 1, Math.floor(xs.length * 0.95))]);
|
|
360
|
+
/** Per-phase grip numbers for a recorded plate appearance, round of golf, tennis point or sword exchange: palms against the object's axis. */
|
|
361
|
+
export function measureGrip(samples, limits = {}) {
|
|
362
|
+
const lim = { ...DEFAULT_GRIP_LIMITS, ...limits };
|
|
363
|
+
const groups = new Map();
|
|
364
|
+
for (const s of samples) {
|
|
365
|
+
const phase = s.phase ?? "all";
|
|
366
|
+
const g = groups.get(phase) ?? { k: [], a: [], along: [] };
|
|
367
|
+
groups.set(phase, g);
|
|
368
|
+
const ax = gripUnit([s.axis[0], s.axis[1], s.axis[2]]);
|
|
369
|
+
g.k.push(Math.hypot(s.bottomPalm[0] - s.knob[0], s.bottomPalm[1] - s.knob[1], s.bottomPalm[2] - s.knob[2]));
|
|
370
|
+
const rel = [s.topPalm[0] - s.knob[0], s.topPalm[1] - s.knob[1], s.topPalm[2] - s.knob[2]];
|
|
371
|
+
const along = rel[0] * ax[0] + rel[1] * ax[1] + rel[2] * ax[2];
|
|
372
|
+
const perp = [rel[0] - ax[0] * along, rel[1] - ax[1] * along, rel[2] - ax[2] * along];
|
|
373
|
+
g.a.push(Math.hypot(perp[0], perp[1], perp[2]));
|
|
374
|
+
g.along.push(along);
|
|
375
|
+
}
|
|
376
|
+
const phases = [];
|
|
377
|
+
const failures = [];
|
|
378
|
+
for (const [phase, g] of groups) {
|
|
379
|
+
const limit = lim.tailPhases.includes(phase) ? lim.tail : Math.max(lim.knobToBottomPalm, lim.topPalmToAxis);
|
|
380
|
+
const kLimit = lim.tailPhases.includes(phase) ? lim.tail : lim.knobToBottomPalm;
|
|
381
|
+
const aLimit = lim.tailPhases.includes(phase) ? lim.tail : lim.topPalmToAxis;
|
|
382
|
+
const kMax = Math.max(...g.k);
|
|
383
|
+
const aMax = Math.max(...g.a);
|
|
384
|
+
const ok = kMax <= kLimit && aMax <= aLimit;
|
|
385
|
+
if (kMax > kLimit)
|
|
386
|
+
failures.push(`${phase}: bottom palm ${kMax.toFixed(3)} m from the grip point > ${kLimit} m`);
|
|
387
|
+
if (aMax > aLimit)
|
|
388
|
+
failures.push(`${phase}: top palm ${aMax.toFixed(3)} m from the object axis > ${aLimit} m`);
|
|
389
|
+
phases.push({
|
|
390
|
+
phase,
|
|
391
|
+
samples: g.k.length,
|
|
392
|
+
knobToBottomPalmMax: kMax,
|
|
393
|
+
knobToBottomPalmP95: p95(g.k),
|
|
394
|
+
topPalmToAxisMax: aMax,
|
|
395
|
+
topPalmToAxisP95: p95(g.a),
|
|
396
|
+
topAlongMin: Math.min(...g.along),
|
|
397
|
+
topAlongMax: Math.max(...g.along),
|
|
398
|
+
limit,
|
|
399
|
+
ok
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
if (samples.length === 0)
|
|
403
|
+
failures.push("no grip samples");
|
|
404
|
+
return {
|
|
405
|
+
samples: samples.length,
|
|
406
|
+
phases,
|
|
407
|
+
knobToBottomPalmMax: phases.length === 0 ? Number.NaN : Math.max(...phases.map((p) => p.knobToBottomPalmMax)),
|
|
408
|
+
topPalmToAxisMax: phases.length === 0 ? Number.NaN : Math.max(...phases.map((p) => p.topPalmToAxisMax)),
|
|
409
|
+
ok: failures.length === 0,
|
|
410
|
+
failures
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
//# sourceMappingURL=twoHandGrip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"twoHandGrip.js","sourceRoot":"","sources":["../../../../../packages/game/src/motion/twoHandGrip.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DepthPass.d.ts","sourceRoot":"","sources":["../../../../packages/rendering/src/DepthPass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGtE,OAAO,EAA0D,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACjH,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAIvF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IACxC,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IACvC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,YAAY,GAAG,SAAS,MAAM,EAAE,CAAC;IACjE;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,sBAAsB,CAAC;IACxE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC/D,sEAAsE;IACtE,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAChH;AAED,qBAAa,aAAc,SAAQ,QAAQ;;CAY1C;AAID,qBAAa,SAAU,SAAQ,cAAc;IAmB/B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAlBpC;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAA8C;IAEnF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;gBAEnB,OAAO,EAAE,gBAAgB;IAKtD,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAMzC,OAAO,CAAC,UAAU;IAmClB,gFAAgF;IAChF,OAAO,CAAC,iBAAiB;
|
|
1
|
+
{"version":3,"file":"DepthPass.d.ts","sourceRoot":"","sources":["../../../../packages/rendering/src/DepthPass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGtE,OAAO,EAA0D,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACjH,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAIvF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IACxC,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IACvC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,YAAY,GAAG,SAAS,MAAM,EAAE,CAAC;IACjE;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,sBAAsB,CAAC;IACxE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC/D,sEAAsE;IACtE,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAChH;AAED,qBAAa,aAAc,SAAQ,QAAQ;;CAY1C;AAID,qBAAa,SAAU,SAAQ,cAAc;IAmB/B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAlBpC;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAA8C;IAEnF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;gBAEnB,OAAO,EAAE,gBAAgB;IAKtD,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAMzC,OAAO,CAAC,UAAU;IAmClB,gFAAgF;IAChF,OAAO,CAAC,iBAAiB;IAsFzB,OAAO,CAAC,SAAS;CAQlB"}
|
|
@@ -92,7 +92,7 @@ export class DepthPass extends BaseRenderPass {
|
|
|
92
92
|
const instanceTotal = instanceTransforms ? instanceTransforms.length / 16 : 1;
|
|
93
93
|
// More instances than the uniform array holds ride a per-instance vertex-attribute buffer: one draw for the whole set
|
|
94
94
|
// instead of ceil(n / 64) draws per cascade (a forest of 2,000 trees was 32 draws in every cascade).
|
|
95
|
-
const attributeMode = Boolean(variant.instanced && instanceTransforms && instanceTotal > PRD02_DEPTH_MAX_INSTANCES);
|
|
95
|
+
const attributeMode = Boolean(variant.instanced && instanceTransforms && instanceTotal > PRD02_DEPTH_MAX_INSTANCES && variant.features["prd02.depthInstanceAttr"] !== undefined);
|
|
96
96
|
const batchCount = variant.instanced && instanceTransforms && !attributeMode ? Math.ceil(instanceTotal / PRD02_DEPTH_MAX_INSTANCES) : 1;
|
|
97
97
|
let instanceBuffer = null;
|
|
98
98
|
let instanceAttributes = null;
|
|
@@ -111,7 +111,6 @@ export class DepthPass extends BaseRenderPass {
|
|
|
111
111
|
else {
|
|
112
112
|
const offset = batch * PRD02_DEPTH_MAX_INSTANCES;
|
|
113
113
|
const count = Math.min(PRD02_DEPTH_MAX_INSTANCES, instanceTotal - offset);
|
|
114
|
-
uniforms.set("u_instanceAttributeMode", 0);
|
|
115
114
|
uniforms.set("u_instanceMatrices", instanceTransforms.subarray(offset * 16, (offset + count) * 16));
|
|
116
115
|
uniforms.set("u_instanceCount", count);
|
|
117
116
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DepthPass.js","sourceRoot":"","sources":["../../../../packages/rendering/src/DepthPass.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"DepthPass.js","sourceRoot":"","sources":["../../../../packages/rendering/src/DepthPass.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,6 +42,8 @@ export interface DirectionalCascadeFitOptions {
|
|
|
42
42
|
* the frustum-corner interpolation.
|
|
43
43
|
*/
|
|
44
44
|
readonly maxDistance?: number;
|
|
45
|
+
/** Restore the 4.2.0 fit (casters widen the ortho, camera near/far as given). Default: `shadowFitLegacy()`. */
|
|
46
|
+
readonly legacy?: boolean;
|
|
45
47
|
}
|
|
46
48
|
type Vec3Tuple = readonly [number, number, number];
|
|
47
49
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DirectionalCascadeFitter.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/shadows/DirectionalCascadeFitter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"DirectionalCascadeFitter.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/shadows/DirectionalCascadeFitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* ortho centre snaps to the shadow-texel grid so the edge mask is stable
|
|
7
7
|
* under sub-texel camera motion (the `prd02-17` shimmer gate).
|
|
8
8
|
*/
|
|
9
|
+
import { shadowFitLegacy } from "./shadowLegacy.js";
|
|
9
10
|
import { instancedWorldBounds } from "../renderer/InstanceBounds.js";
|
|
10
11
|
import { CascadedShadowMaps } from "../CascadedShadowMaps.js";
|
|
11
12
|
import { skinnedItemLocalBounds } from "../renderer/SkinnedBounds.js";
|
|
@@ -265,7 +266,12 @@ export function isOversizeShadowCaster(item, shadowDistance) {
|
|
|
265
266
|
const b = itemWorldBounds(item);
|
|
266
267
|
if (!b)
|
|
267
268
|
return false;
|
|
268
|
-
const
|
|
269
|
+
const dx = b.max[0] - b.min[0], dy = b.max[1] - b.min[1], dz = b.max[2] - b.min[2];
|
|
270
|
+
const largest = Math.max(dx, dy, dz);
|
|
271
|
+
// A ground plane, court floor or flat terrain is a large receiver, never a shell: every real shell (sky dome, skybox, planet) is
|
|
272
|
+
// large on all three axes, a floor is thin on one.
|
|
273
|
+
if (Math.min(dx, dy, dz) < 0.2 * largest)
|
|
274
|
+
return false;
|
|
269
275
|
return largest > Math.max(OVERSIZE_CASTER_FLOOR, OVERSIZE_CASTER_FACTOR * shadowDistance);
|
|
270
276
|
}
|
|
271
277
|
const dist3 = (a, b) => Math.hypot(a[0] - b[0], a[1] - b[1], a[2] - b[2]);
|
|
@@ -302,7 +308,10 @@ export function fitDirectionalCascades(options) {
|
|
|
302
308
|
const invVp = invertMat4(vp);
|
|
303
309
|
const nearCorners = [-1, 1].flatMap((x) => [-1, 1].map((y) => ndcToWorld(invVp, x, y, -1)));
|
|
304
310
|
const farCorners = [-1, 1].flatMap((x) => [-1, 1].map((y) => ndcToWorld(invVp, x, y, 1)));
|
|
305
|
-
const
|
|
311
|
+
const legacyFit = options.legacy ?? shadowFitLegacy();
|
|
312
|
+
const clip = legacyFit
|
|
313
|
+
? { near: Math.max(1e-3, options.camera.near ?? 0.1), far: Math.max(Math.max(1e-3, options.camera.near ?? 0.1) + 1e-3, options.camera.far ?? 100) }
|
|
314
|
+
: resolveClipRange(nearCorners, farCorners, options.camera.near, options.camera.far);
|
|
306
315
|
const near = clip.near;
|
|
307
316
|
const far = clip.far;
|
|
308
317
|
const shadowFar = options.maxDistance !== undefined && Number.isFinite(options.maxDistance) && options.maxDistance > near
|
|
@@ -330,7 +339,7 @@ export function fitDirectionalCascades(options) {
|
|
|
330
339
|
// light-space footprint overlaps the slice can shadow it, so casters never widen x/y (a scene-spanning instanced set
|
|
331
340
|
// or a distant mountain used to inflate every cascade to kilometres: 1 m texels and washed-out shadows); they only
|
|
332
341
|
// extend the depth range toward the light, below.
|
|
333
|
-
const allPts = frustumPts;
|
|
342
|
+
const allPts = legacyFit ? [...frustumPts, ...casterBounds.flatMap((b) => [b.min, b.max])] : frustumPts;
|
|
334
343
|
let min = [Infinity, Infinity, Infinity];
|
|
335
344
|
let max = [-Infinity, -Infinity, -Infinity];
|
|
336
345
|
for (const p of allPts) {
|
|
@@ -365,7 +374,7 @@ export function fitDirectionalCascades(options) {
|
|
|
365
374
|
let zHi = max[2];
|
|
366
375
|
// Casters whose light-space footprint overlaps the slice extend the depth range toward the light (capped, so a huge
|
|
367
376
|
// box cannot stretch the range and cost depth precision); casters behind the slice cannot shadow it.
|
|
368
|
-
{
|
|
377
|
+
if (!legacyFit) {
|
|
369
378
|
const reach = Math.max(8 * radius, 200);
|
|
370
379
|
const rx0 = centerX - radius - padding, rx1 = centerX + radius + padding;
|
|
371
380
|
const ry0 = centerY - radius - padding, ry1 = centerY + radius + padding;
|