@genex-ai/cli-demo 0.70.0-dev.182 → 0.71.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/index.js +8 -354
- package/package.json +1 -2
- package/templates/controllers/character/vrm/vrm-loader.ts +11 -74
- package/templates/skills/genex-ai-menu/SKILL.md +1 -7
- package/templates/skills/genex-ai-skybox/SKILL.md +4 -15
- package/templates/skills/genex-ai-texture/SKILL.md +1 -1
- package/templates/skills/genex-ai-video/SKILL.md +1 -1
- package/templates/skills/genex-explore/SKILL.md +1 -1
- package/templates/skills/genex-getting-started/SKILL.md +2 -2
- package/templates/skills/genex-threejs-bloom/SKILL.md +1 -4
- package/templates/skills/genex-threejs-bloom/references/bloom.md +1 -1
- package/templates/skills/genex-threejs-camera-direction/SKILL.md +8 -48
- package/templates/skills/genex-threejs-camera-direction/references/camera-rigs.md +0 -62
- package/templates/skills/genex-threejs-embed-auth/SKILL.md +1 -4
- package/templates/skills/genex-threejs-game-feel/SKILL.md +1 -4
- package/templates/skills/genex-threejs-game-ui/SKILL.md +8 -42
- package/templates/skills/genex-threejs-image-pipeline/SKILL.md +0 -5
- package/templates/skills/genex-threejs-image-pipeline/references/image-pipeline.md +1 -1
- package/templates/skills/genex-threejs-lighting-design/SKILL.md +1 -5
- package/templates/skills/genex-threejs-multiplayer/SKILL.md +1 -7
- package/templates/skills/genex-threejs-multiplayer/references/host-physics.md +3 -6
- package/templates/skills/genex-threejs-physics-rapier/references/colliders-from-assets.md +0 -1
- package/templates/skills/genex-threejs-screen-space-ambient-occlusion/references/ambient-occlusion.md +1 -1
- package/templates/skills/genex-threejs-shadow-systems/SKILL.md +0 -6
- package/templates/skills/genex-threejs-shadow-systems/references/shadow-systems.md +1 -1
- package/templates/skills/genex-threejs-skill-router/SKILL.md +5 -26
- package/templates/skills/genex-threejs-skill-router/references/routing-map.md +7 -21
- package/templates/skills/genex-threejs-spectral-ocean/references/spectral-ocean.md +1 -1
- package/templates/skills/genex-threejs-touch-controls/SKILL.md +0 -11
- package/templates/skills/genex-threejs-visual-validation/SKILL.md +12 -29
- package/templates/skills/genex-threejs-water-optics/references/water-optics.md +1 -1
- package/templates/skills/genex-updates/SKILL.md +1 -1
- package/templates/controllers/quality/governor.ts +0 -147
- package/templates/controllers/quality/pick-asset.ts +0 -57
- package/templates/controllers/quality/tier.ts +0 -170
- package/templates/skills/genex-threejs-adaptive-quality/SKILL.md +0 -141
- package/templates/skills/genex-threejs-adaptive-quality/references/adaptive-quality.md +0 -105
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
# Genex adaptive quality — tiers, knobs, and the governor in depth
|
|
2
|
-
|
|
3
|
-
Use this reference when tuning the tier ladder, deciding which knob may change
|
|
4
|
-
when, or teaching the governor a game-specific step.
|
|
5
|
-
|
|
6
|
-
## Why boot-conservative
|
|
7
|
-
|
|
8
|
-
The phone budget is a hard ceiling that includes GPU memory (textures,
|
|
9
|
-
framebuffers), and the OS kill arrives with no catchable event. Boot is the
|
|
10
|
-
danger window: skybox + models + post targets decode together. So phone tiers
|
|
11
|
-
START one notch below what the heuristics suggest and the governor steps UP
|
|
12
|
-
after ~20 smooth seconds. The cost of guessing low is moments of softness; the
|
|
13
|
-
cost of guessing high is a dead page.
|
|
14
|
-
|
|
15
|
-
## The tier ladder
|
|
16
|
-
|
|
17
|
-
| Knob | phone-low | phone | desktop |
|
|
18
|
-
|---|---|---|---|
|
|
19
|
-
| DPR cap | 1.0 | 1.5 | 2 |
|
|
20
|
-
| antialias (context) | off | off | on |
|
|
21
|
-
| Shadow map | 512 (static-cached) | 1024 | 2048 |
|
|
22
|
-
| Post level | tone map only | + FXAA/vignette | full named stack |
|
|
23
|
-
| Skybox rung | @2048 (~11 MB) | @4096 (~45 MB) | original |
|
|
24
|
-
| Texture rung (props) | @1024 | @2048 | original |
|
|
25
|
-
| Particles/scatter | 0.25× | 0.5× | 1× |
|
|
26
|
-
| Draw distance | 0.5× | 0.75× | 1× |
|
|
27
|
-
| Frame target | stable 30 | 60 | 60 |
|
|
28
|
-
| Remote avatars animated | 4 | 8 | all |
|
|
29
|
-
| Prop colliders | hull/cuboid | hull | as designed |
|
|
30
|
-
|
|
31
|
-
A DPR drop from 3 (raw iPhone) to 1.5 cuts every full-screen surface — color,
|
|
32
|
-
depth, and each post target — to a quarter of the bytes. It is the single
|
|
33
|
-
strongest lever the tier owns.
|
|
34
|
-
|
|
35
|
-
## The knob split — what may change when
|
|
36
|
-
|
|
37
|
-
Getting this wrong produces silent no-ops or a session stuck ugly:
|
|
38
|
-
|
|
39
|
-
- **Context-creation-fixed (never changes live):** `antialias`, `alpha`,
|
|
40
|
-
`stencil`, `powerPreference` on WebGL. Changing them means a new context and
|
|
41
|
-
a full re-init — the tier must decide them BEFORE the renderer exists.
|
|
42
|
-
(WebGPU differs: MSAA is per-render-target sample count and is runtime-
|
|
43
|
-
changeable.)
|
|
44
|
-
- **Load-time (fixed for the session once fetched):** asset rungs (skybox and
|
|
45
|
-
texture resolutions), model LOD sets. `pickAsset` decides them from the tier
|
|
46
|
-
at load; switching later means a re-fetch — treat as fixed.
|
|
47
|
-
- **Runtime-free (the governor's domain):** `setPixelRatio`, post passes on/off
|
|
48
|
-
and their target resolutions, shadow map size (realloc), draw distance and
|
|
49
|
-
fog, LOD bias, particle counts, mixer update rates, frame cap, remote-avatar
|
|
50
|
-
animation count.
|
|
51
|
-
|
|
52
|
-
## Governor mechanics
|
|
53
|
-
|
|
54
|
-
- Slow = frame delta over budget for a SUSTAINED window (4 s) — never single
|
|
55
|
-
spikes, which are usually shader compiles or GC. Precompiling with
|
|
56
|
-
`renderer.compileAsync` during the loader screen removes most spikes at the
|
|
57
|
-
source (and keeps first-frame jank from reading as a stall to the platform's
|
|
58
|
-
telemetry).
|
|
59
|
-
- Step-down order: DPR ×0.8 → post off → draw distance ×0.6 → 30 fps cap.
|
|
60
|
-
Each step is the cheapest remaining lever with the biggest headroom return.
|
|
61
|
-
- Step-up needs 20 smooth seconds (hysteresis), and a step that had to be
|
|
62
|
-
re-applied twice is pinned for the session — oscillating quality reads worse
|
|
63
|
-
than stable-low.
|
|
64
|
-
- The governor never stops: thermal throttling degrades phones after minutes
|
|
65
|
-
of play, so a boot-time benchmark alone always ends up wrong.
|
|
66
|
-
- A stable 30 fps cap beats a stuttery 40–50: consistent frame pacing reads
|
|
67
|
-
smoother and halves GPU work per second (heat, battery, memory bandwidth).
|
|
68
|
-
- Backgrounded tab (`visibilitychange`): pause the render loop and audio, not
|
|
69
|
-
just the governor — a hidden game burning GPU is pure thermal debt on the
|
|
70
|
-
device class that can least afford it.
|
|
71
|
-
|
|
72
|
-
## Detection honesty
|
|
73
|
-
|
|
74
|
-
- Apple devices mask the GPU renderer string ("Apple GPU") — screen dims + DPR
|
|
75
|
-
+ iOS major version are the usable signals there, and the governor corrects
|
|
76
|
-
the rest from measured frames.
|
|
77
|
-
- Android exposes real renderer strings (Adreno/Mali/Xclipse); the vendored
|
|
78
|
-
lookup in `tier.ts` promotes strong GPUs to the `phone` tier. It is a
|
|
79
|
-
heuristic on purpose — extend the regex when field data shows a
|
|
80
|
-
misclassified family, and let the governor absorb the rest.
|
|
81
|
-
- Never burn a probe context on a memory-strapped phone at play time; the one
|
|
82
|
-
probe in `tier.ts` runs at boot and frees its context immediately.
|
|
83
|
-
|
|
84
|
-
## Memory discipline that rides the tier
|
|
85
|
-
|
|
86
|
-
- Dispose on every level swap: traverse the outgoing scene and call
|
|
87
|
-
`.dispose()` on geometry, material, AND each material's textures — material
|
|
88
|
-
dispose does not free textures, and three frees nothing automatically.
|
|
89
|
-
- Watch `renderer.info.memory.{textures,geometries}` across swaps in dev; a
|
|
90
|
-
monotonic climb is a leak marching toward the OS kill. The governor
|
|
91
|
-
publishes these counts for the platform's field telemetry.
|
|
92
|
-
- Prefer meshopt/instanced geometry for repeats; `BatchedMesh` batches
|
|
93
|
-
HETEROGENEOUS static meshes into one draw where instancing (identical
|
|
94
|
-
meshes only) can't.
|
|
95
|
-
- Half-resolution transparency: render heavy particle/transparency passes to a
|
|
96
|
-
half-size target and composite up — fill-rate is the phone bottleneck.
|
|
97
|
-
|
|
98
|
-
## Multiplayer at tier
|
|
99
|
-
|
|
100
|
-
Remotes are visual-only; with the shared avatar file, `loadVrmClone` gives N
|
|
101
|
-
remotes one set of GPU geometry/textures. Animate and fully draw only the
|
|
102
|
-
nearest `tier.remoteAvatarCap`; beyond it, freeze the mixer and billboard or
|
|
103
|
-
hide. Matchmade games can also declare a lower `maxPlayers` in
|
|
104
|
-
`genex.matchmaking` for phone-heavy audiences — capacity is a server-owned
|
|
105
|
-
knob.
|