tosijs-3d 0.11.2 → 0.11.3
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/CHANGELOG.md +6 -8
- package/changelog/v0.11.3.md +21 -0
- package/dist/b3d-biped.d.ts +9 -0
- package/dist/b3d-biped.d.ts.map +1 -1
- package/dist/b3d-biped.js +73 -4
- package/dist/b3d-biped.js.map +1 -1
- package/dist/b3d-panel.d.ts.map +1 -1
- package/dist/b3d-panel.js +6 -4
- package/dist/b3d-panel.js.map +1 -1
- package/dist/b3d-shadows.d.ts +11 -17
- package/dist/b3d-shadows.d.ts.map +1 -1
- package/dist/b3d-shadows.js +15 -21
- package/dist/b3d-shadows.js.map +1 -1
- package/dist/glass-gamepad.d.ts.map +1 -1
- package/dist/glass-gamepad.js +7 -4
- package/dist/glass-gamepad.js.map +1 -1
- package/dist/hardware-gamepad.d.ts +2 -0
- package/dist/hardware-gamepad.d.ts.map +1 -1
- package/dist/hardware-gamepad.js +2 -1
- package/dist/hardware-gamepad.js.map +1 -1
- package/dist/playground.d.ts.map +1 -1
- package/dist/playground.js +5 -3
- package/dist/playground.js.map +1 -1
- package/dist/scene-schemas.js +2 -2
- package/dist/scene-schemas.js.map +1 -1
- package/dist/virtual-gamepad.d.ts.map +1 -1
- package/dist/virtual-gamepad.js +3 -1
- package/dist/virtual-gamepad.js.map +1 -1
- package/dist/xr-gamepad.d.ts.map +1 -1
- package/dist/xr-gamepad.js +12 -4
- package/dist/xr-gamepad.js.map +1 -1
- package/package.json +1 -1
- package/static/attributes.json +9 -4
- package/static/attributes.txt +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -12,19 +12,17 @@ Upgrading across a minor? Start with [Migration](/Migration/).
|
|
|
12
12
|
|
|
13
13
|
## Unreleased
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
## 0.11.3
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
headset's thumbsticks now report too; view and menu on the headset's system bar
|
|
22
|
-
when a scene asks for them; and the full-screen button on an iPhone.
|
|
23
|
-
[Read 0.11.2](/v0.11.2/).
|
|
17
|
+
The latest release. The biped eases between animations instead of cutting
|
|
18
|
+
(`blendSeconds`, a quarter of a second by default), R3 toggles its weapon, XR
|
|
19
|
+
thumbsticks get a deadzone so the aim no longer drifts, and the sun's shadow
|
|
20
|
+
bias defaults clear acne stripes. [Read 0.11.3](/v0.11.3/).
|
|
24
21
|
|
|
25
22
|
## Every version
|
|
26
23
|
|
|
27
24
|
<!-- toc -->
|
|
25
|
+
- [0.11.3](/v0.11.3/)
|
|
28
26
|
- [0.11.2](/v0.11.2/)
|
|
29
27
|
- [0.11.1](/v0.11.1/)
|
|
30
28
|
- [0.11.0](/v0.11.0/)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# 0.11.3
|
|
2
|
+
|
|
3
|
+
<!--{ "parent": "CHANGELOG", "order": 9988997 }-->
|
|
4
|
+
|
|
5
|
+
## Added
|
|
6
|
+
|
|
7
|
+
- **`blendSeconds` on `<tosi-b3d-biped>`** (default 0.25): how long each animation change eases over. `0` cuts.
|
|
8
|
+
- The panel page's system-bar demo has a "New journal entry" button that blinks the Journal button (`attention()`).
|
|
9
|
+
|
|
10
|
+
## Changed
|
|
11
|
+
|
|
12
|
+
- **The biped eases every animation change** instead of cutting: walk to run, standing to crouch, the gun coming up and going down, aim up/level/down. The blend is timed, so it lasts the same at any frame rate. A crouch at rest plays a transition clip if the states name one (`sneakEnter` / `sneakExit`, e.g. UAL's `Crouch_Enter` / `Crouch_Exit`); the defaults have none, so it blends.
|
|
13
|
+
- **The sun's shadow bias defaults are now `shadowBias` 0.002 and `shadowNormalBias` 0.04**, which clears the fine acne stripes on plain lit surfaces. If a small caster's shadow detaches, set them lower on your `<tosi-b3d-sun>`.
|
|
14
|
+
- **In the biped mapping, clicking the right stick (R3) toggles the weapon**, as the right bumper does. The playground's glass pad shows both stick clicks.
|
|
15
|
+
|
|
16
|
+
## Fixed
|
|
17
|
+
|
|
18
|
+
- **XR thumbsticks have the hardware pad's 0.15 per-axis deadzone**, so a stick pushed sideways to turn no longer drifts the biped's look pitch (its aim). Raising the weapon now levels the aim in a headset too.
|
|
19
|
+
- In the glass gamepad demo, the cube moves away from you on left stick up, and the readout sits top centre, clear of the system bar.
|
|
20
|
+
|
|
21
|
+
Size: barrel (min, packages external) 1245.8 KB raw / 426.2 KB gz, +0.08% on 0.11.2.
|
package/dist/b3d-biped.d.ts
CHANGED
|
@@ -49,6 +49,7 @@ export declare class B3dBiped extends B3dControllable {
|
|
|
49
49
|
static preferredTagName: string;
|
|
50
50
|
url: string;
|
|
51
51
|
player: boolean;
|
|
52
|
+
blendSeconds: number;
|
|
52
53
|
static initAttributes: {
|
|
53
54
|
url: string;
|
|
54
55
|
skin: string;
|
|
@@ -57,6 +58,7 @@ export declare class B3dBiped extends B3dControllable {
|
|
|
57
58
|
cameraType: string;
|
|
58
59
|
animation: string;
|
|
59
60
|
animationSpeed: number;
|
|
61
|
+
blendSeconds: number;
|
|
60
62
|
initialState: string;
|
|
61
63
|
turnSpeed: number;
|
|
62
64
|
forwardSpeed: number;
|
|
@@ -513,6 +515,9 @@ export declare class B3dBiped extends B3dControllable {
|
|
|
513
515
|
*/
|
|
514
516
|
private _clipSeconds;
|
|
515
517
|
private _sneakWas;
|
|
518
|
+
/** The stance-change clip playing (`sneakEnter`/`sneakExit`), and its seconds left. */
|
|
519
|
+
private _stanceClip;
|
|
520
|
+
private _stanceLeft;
|
|
516
521
|
/** Zoom 0..1, now integrated from the d-pad rather than read off a stick. */
|
|
517
522
|
private _camZoom;
|
|
518
523
|
private _waterEl;
|
|
@@ -661,6 +666,10 @@ export declare class B3dBiped extends B3dControllable {
|
|
|
661
666
|
private _updateAimLayer;
|
|
662
667
|
/** Seconds left of the one-shot fire pose. */
|
|
663
668
|
private _shootFor;
|
|
669
|
+
private _eased;
|
|
670
|
+
private _blendStep;
|
|
671
|
+
private _ease;
|
|
672
|
+
private _paceBlends;
|
|
664
673
|
setAnimationState(name: string, speed?: number): void;
|
|
665
674
|
getCameraTarget(): BABYLON.Node | null;
|
|
666
675
|
applyInput(input: ControlInput, dt: number): void;
|
package/dist/b3d-biped.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"b3d-biped.d.ts","sourceRoot":"","sources":["../src/b3d-biped.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"b3d-biped.d.ts","sourceRoot":"","sources":["../src/b3d-biped.ts"],"names":[],"mappings":"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"}
|
package/dist/b3d-biped.js
CHANGED
|
@@ -184,6 +184,7 @@ preview.append(
|
|
|
184
184
|
| `scale` | `1` | Uniform scale applied to the loaded model |
|
|
185
185
|
| `animation` | `''` | Current animation state name |
|
|
186
186
|
| `animationSpeed` | `1` | Playback speed multiplier (0–2) |
|
|
187
|
+
| `blendSeconds` | `0.25` | Seconds each animation change eases over (walk to run, crouching, the gun coming up). `0` cuts |
|
|
187
188
|
| `player` | `false` | Whether this biped receives input |
|
|
188
189
|
| `cameraType` | `'none'` | `'follow'`, `'xr'`, or `'none'` |
|
|
189
190
|
| `turnSpeed` | `180` | Degrees per second |
|
|
@@ -374,6 +375,9 @@ export function ualAnimationStates(extra = []) {
|
|
|
374
375
|
{ name: 'sneakIdle', animation: 'Crouch_Idle_Loop', loop: true },
|
|
375
376
|
{ name: 'sneakLeft', animation: 'Crouch_Left_Loop', loop: true },
|
|
376
377
|
{ name: 'sneakRight', animation: 'Crouch_Right_Loop', loop: true },
|
|
378
|
+
// No `sneakEnter` / `sneakExit`: UAL's `Crouch_Enter` / `Crouch_Exit` are
|
|
379
|
+
// slower than the blend between the loops, which reads better. Add them to
|
|
380
|
+
// your states to have a crouch at rest play them.
|
|
377
381
|
// One clip per phase, which is why the jump can be done properly here:
|
|
378
382
|
// `jump` is the wind-up, and the loop and landing are addressable.
|
|
379
383
|
{ name: 'jump', animation: 'Jump_Start', loop: false },
|
|
@@ -481,6 +485,8 @@ export class B3dBiped extends B3dControllable {
|
|
|
481
485
|
cameraType: 'none',
|
|
482
486
|
animation: '',
|
|
483
487
|
animationSpeed: 1,
|
|
488
|
+
// Seconds every animation change eases over (see `_ease`).
|
|
489
|
+
blendSeconds: 0.25,
|
|
484
490
|
initialState: 'idle',
|
|
485
491
|
turnSpeed: 180,
|
|
486
492
|
forwardSpeed: 2,
|
|
@@ -818,10 +824,10 @@ export class B3dBiped extends B3dControllable {
|
|
|
818
824
|
look pitch is whatever it was left at: walking around looking at the
|
|
819
825
|
ground, or the last dive, so the gun came up pointing at your feet. Tonio:
|
|
820
826
|
"It seems quite common for it to be aiming at your feet which is weird."
|
|
821
|
-
Levelled only on the way UP (lowering it leaves the view alone) and
|
|
822
|
-
|
|
827
|
+
Levelled only on the way UP (lowering it leaves the view alone), and in a
|
|
828
|
+
headset too: there the right stick still sets the look pitch the aim reads.
|
|
823
829
|
*/
|
|
824
|
-
if (on && !this.gunplay
|
|
830
|
+
if (on && !this.gunplay)
|
|
825
831
|
this._lookPitch = 0;
|
|
826
832
|
this.gunplay = on;
|
|
827
833
|
this._showWeapons(on);
|
|
@@ -1269,6 +1275,9 @@ export class B3dBiped extends B3dControllable {
|
|
|
1269
1275
|
return (g.to - g.from) / fps / ratio;
|
|
1270
1276
|
}
|
|
1271
1277
|
_sneakWas = false;
|
|
1278
|
+
/** The stance-change clip playing (`sneakEnter`/`sneakExit`), and its seconds left. */
|
|
1279
|
+
_stanceClip = '';
|
|
1280
|
+
_stanceLeft = 0;
|
|
1272
1281
|
/** Zoom 0..1, now integrated from the d-pad rather than read off a stick. */
|
|
1273
1282
|
_camZoom = 0;
|
|
1274
1283
|
_waterEl;
|
|
@@ -1392,7 +1401,9 @@ export class B3dBiped extends B3dControllable {
|
|
|
1392
1401
|
* immediately and merely gets better; it is committed to the cache once the
|
|
1393
1402
|
* window closes.
|
|
1394
1403
|
*/
|
|
1395
|
-
_currentPose(
|
|
1404
|
+
_currentPose(
|
|
1405
|
+
// Past the blend, so a pose is never measured mid-blend.
|
|
1406
|
+
settle = Math.max(0.25, Number(this.blendSeconds) + 0.1), window = 2, interval = 0.08) {
|
|
1396
1407
|
const key = this.animationState?.animation ?? this.animationState?.name;
|
|
1397
1408
|
if (key == null)
|
|
1398
1409
|
return null;
|
|
@@ -1693,12 +1704,45 @@ export class B3dBiped extends B3dControllable {
|
|
|
1693
1704
|
const layerGroup = groups.find((g) => g.name.replace(/^Clone of /, '') === layerClip);
|
|
1694
1705
|
if (layerGroup == null)
|
|
1695
1706
|
return;
|
|
1707
|
+
this._ease(baseGroup);
|
|
1708
|
+
this._ease(layerGroup);
|
|
1696
1709
|
baseGroup.stop();
|
|
1697
1710
|
this._aimLayer = layerOnUpperBody(scene, skeleton, baseGroup, layerGroup);
|
|
1698
1711
|
this._aimLayer?.play(layerClip !== 'Pistol_Shoot');
|
|
1699
1712
|
}
|
|
1700
1713
|
/** Seconds left of the one-shot fire pose. */
|
|
1701
1714
|
_shootFor = 0;
|
|
1715
|
+
/*
|
|
1716
|
+
EVERY CLIP CHANGE IS EASED, not cut. Babylon's animation blending starts a
|
|
1717
|
+
clip from wherever each bone is now and eases it in, so standing to crouch,
|
|
1718
|
+
walk to run and the gun coming up all move rather than pop. It is set on the
|
|
1719
|
+
ANIMATIONS (an AnimationGroup passes it down), which the upper-body layer's
|
|
1720
|
+
tiers share, so the layer is eased too.
|
|
1721
|
+
|
|
1722
|
+
Babylon's `blendingSpeed` is a step PER FRAME, so a fixed value is slower the
|
|
1723
|
+
slower the frame rate (0.2 took 300 ms at 20 fps). `_paceBlends` resets it
|
|
1724
|
+
from each frame's dt so a blend takes `blendSeconds` at any frame rate.
|
|
1725
|
+
`_currentPose` waits past it, so a pose is not measured mid-blend.
|
|
1726
|
+
*/
|
|
1727
|
+
_eased = new Set();
|
|
1728
|
+
_blendStep = 0;
|
|
1729
|
+
_ease(group) {
|
|
1730
|
+
if (group == null || this._eased.has(group))
|
|
1731
|
+
return;
|
|
1732
|
+
this._eased.add(group);
|
|
1733
|
+
group.enableBlending = true;
|
|
1734
|
+
group.blendingSpeed = this._blendStep || 0.2;
|
|
1735
|
+
}
|
|
1736
|
+
_paceBlends(dt) {
|
|
1737
|
+
const seconds = Number(this.blendSeconds);
|
|
1738
|
+
const step = seconds > 0 ? Math.min(1, dt / seconds) : 1;
|
|
1739
|
+
// Only when it moves noticeably: the setter walks every animation.
|
|
1740
|
+
if (Math.abs(step - this._blendStep) < this._blendStep * 0.1)
|
|
1741
|
+
return;
|
|
1742
|
+
this._blendStep = step;
|
|
1743
|
+
for (const group of this._eased)
|
|
1744
|
+
group.blendingSpeed = step;
|
|
1745
|
+
}
|
|
1702
1746
|
setAnimationState(name, speed = 1) {
|
|
1703
1747
|
name = this._gunplayState(name);
|
|
1704
1748
|
if (name == null) {
|
|
@@ -1752,6 +1796,7 @@ export class B3dBiped extends B3dControllable {
|
|
|
1752
1796
|
}
|
|
1753
1797
|
}
|
|
1754
1798
|
const animationGroup = this.entries.animationGroups[idx];
|
|
1799
|
+
this._ease(animationGroup);
|
|
1755
1800
|
if (newState.backwards) {
|
|
1756
1801
|
animationGroup.start(loop, speed, animationGroup.to, animationGroup.from, additive);
|
|
1757
1802
|
}
|
|
@@ -1936,8 +1981,23 @@ export class B3dBiped extends B3dControllable {
|
|
|
1936
1981
|
const sneakDown = (input.sneak ?? 0) > 0.5;
|
|
1937
1982
|
if (!this._swimming && sneakDown && !this._sneakWas) {
|
|
1938
1983
|
this._sneaking = !this._sneaking;
|
|
1984
|
+
/*
|
|
1985
|
+
A TRANSITION CLIP if the states name one (`sneakEnter` / `sneakExit`,
|
|
1986
|
+
none by default); a blend otherwise. Such clips are drawn standing
|
|
1987
|
+
still, so they play only while you are at rest (see the idle branch
|
|
1988
|
+
below); moving, the stance change is the ordinary blend between loops.
|
|
1989
|
+
*/
|
|
1990
|
+
const clip = this._sneaking ? 'sneakEnter' : 'sneakExit';
|
|
1991
|
+
this._stanceClip = this.animationStates.some((st) => st.name === clip)
|
|
1992
|
+
? clip
|
|
1993
|
+
: '';
|
|
1994
|
+
this._stanceLeft = this._stanceClip
|
|
1995
|
+
? this._clipSeconds(this._stanceClip)
|
|
1996
|
+
: 0;
|
|
1939
1997
|
}
|
|
1940
1998
|
this._sneakWas = sneakDown;
|
|
1999
|
+
this._stanceLeft = Math.max(0, this._stanceLeft - dt);
|
|
2000
|
+
this._paceBlends(dt);
|
|
1941
2001
|
const speed = input.forward;
|
|
1942
2002
|
/*
|
|
1943
2003
|
STRAFING IS OPTIONAL, AND OFF BY DEFAULT.
|
|
@@ -2911,6 +2971,9 @@ export class B3dBiped extends B3dControllable {
|
|
|
2911
2971
|
else if (speed < -0.1) {
|
|
2912
2972
|
this.setAnimationState('walkBackwards', Math.abs(speed) + 0.25);
|
|
2913
2973
|
}
|
|
2974
|
+
else if (this._stanceLeft > 0 && Math.abs(rotation) <= 0.1) {
|
|
2975
|
+
this.setAnimationState(this._stanceClip);
|
|
2976
|
+
}
|
|
2914
2977
|
else if (this._sneaking &&
|
|
2915
2978
|
this.animationStates.some((st) => st.name === 'sneakIdle')) {
|
|
2916
2979
|
// A crouch that HOLDS at rest — the stock rig had no such clip, so
|
|
@@ -2923,6 +2986,10 @@ export class B3dBiped extends B3dControllable {
|
|
|
2923
2986
|
else {
|
|
2924
2987
|
this.setAnimationState('idle');
|
|
2925
2988
|
}
|
|
2989
|
+
// Anything else chosen (moving, a jump) ends the transition clip, so
|
|
2990
|
+
// stopping again later does not replay half of it.
|
|
2991
|
+
if (this.animationState?.name !== this._stanceClip)
|
|
2992
|
+
this._stanceLeft = 0;
|
|
2926
2993
|
}
|
|
2927
2994
|
}
|
|
2928
2995
|
setupXRInput(xr) {
|
|
@@ -3217,6 +3284,7 @@ export class B3dBiped extends B3dControllable {
|
|
|
3217
3284
|
const attrs = this;
|
|
3218
3285
|
if (attrs.url !== '' && !this.entries) {
|
|
3219
3286
|
this.loadAssetContainer(scene, attrs.url, (container) => {
|
|
3287
|
+
this._eased.clear();
|
|
3220
3288
|
this.entries = container.instantiateModelsToScene(undefined, false, {
|
|
3221
3289
|
doNotInstantiate: true,
|
|
3222
3290
|
});
|
|
@@ -3321,6 +3389,7 @@ export class B3dBiped extends B3dControllable {
|
|
|
3321
3389
|
ag.dispose();
|
|
3322
3390
|
}
|
|
3323
3391
|
this.entries = undefined;
|
|
3392
|
+
this._eased.clear();
|
|
3324
3393
|
}
|
|
3325
3394
|
this.gameController = undefined;
|
|
3326
3395
|
this.inputProvider = null;
|