@genex-ai/cli-demo 0.69.0-dev.175 → 0.70.0-dev.182
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 +365 -14
- package/package.json +2 -1
- package/templates/controllers/character/vrm/vrm-loader.ts +74 -11
- package/templates/controllers/quality/governor.ts +147 -0
- package/templates/controllers/quality/pick-asset.ts +57 -0
- package/templates/controllers/quality/tier.ts +170 -0
- package/templates/skills/genex-ai-menu/SKILL.md +7 -1
- package/templates/skills/genex-ai-skybox/SKILL.md +14 -3
- package/templates/skills/genex-threejs-adaptive-quality/SKILL.md +141 -0
- package/templates/skills/genex-threejs-adaptive-quality/references/adaptive-quality.md +105 -0
- package/templates/skills/genex-threejs-bloom/SKILL.md +4 -1
- package/templates/skills/genex-threejs-bloom/references/bloom.md +1 -1
- package/templates/skills/genex-threejs-embed-auth/SKILL.md +4 -1
- package/templates/skills/genex-threejs-game-ui/SKILL.md +8 -6
- package/templates/skills/genex-threejs-image-pipeline/SKILL.md +5 -0
- package/templates/skills/genex-threejs-image-pipeline/references/image-pipeline.md +1 -1
- package/templates/skills/genex-threejs-lighting-design/SKILL.md +5 -1
- package/templates/skills/genex-threejs-multiplayer/SKILL.md +7 -1
- package/templates/skills/genex-threejs-multiplayer/references/host-physics.md +6 -3
- package/templates/skills/genex-threejs-physics-rapier/references/colliders-from-assets.md +1 -0
- package/templates/skills/genex-threejs-screen-space-ambient-occlusion/references/ambient-occlusion.md +1 -1
- package/templates/skills/genex-threejs-shadow-systems/SKILL.md +6 -0
- package/templates/skills/genex-threejs-shadow-systems/references/shadow-systems.md +1 -1
- package/templates/skills/genex-threejs-skill-router/SKILL.md +14 -1
- package/templates/skills/genex-threejs-skill-router/references/routing-map.md +16 -5
- package/templates/skills/genex-threejs-spectral-ocean/references/spectral-ocean.md +1 -1
- package/templates/skills/genex-threejs-touch-controls/SKILL.md +7 -0
- package/templates/skills/genex-threejs-water-optics/references/water-optics.md +1 -1
|
@@ -32,7 +32,10 @@ reference before adding selective bloom to a composed scene.
|
|
|
32
32
|
- selective bloom requires mutating scene materials every frame without restoration guarantees;
|
|
33
33
|
- transparent particles disappear from extraction because pass ownership is unclear;
|
|
34
34
|
- bloom radius changes wildly with resolution;
|
|
35
|
-
- highlights become gray because energy is clamped too early
|
|
35
|
+
- highlights become gray because energy is clamped too early;
|
|
36
|
+
- bloom ships un-tiered: phone tiers run the light post level
|
|
37
|
+
(`$genex-threejs-adaptive-quality`) — bloom is a desktop-tier pass, and its
|
|
38
|
+
full-res HDR target is exactly the allocation phones get killed for.
|
|
36
39
|
|
|
37
40
|
## Routing boundary
|
|
38
41
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Use this reference to choose bloom ownership, signal order, selective contribution, and scene-relative emissive ranges without making bloom responsible for the underlying form.
|
|
4
4
|
|
|
5
|
-
> **Renderer note:** this reference assumes `WebGPURenderer` + TSL node materials. Check the project's actual renderer first — the Genex scaffold ships vanilla WebGL three.js. On WebGL, adapt the technique with standard materials / `EffectComposer` passes or pick a simpler alternative; never switch renderers mid-project.
|
|
5
|
+
> **Renderer note:** this reference assumes `WebGPURenderer` + TSL node materials. Check the project's actual renderer first — the Genex scaffold ships vanilla WebGL three.js. On WebGL, adapt the technique with standard materials / `EffectComposer` passes or pick a simpler alternative; never switch renderers mid-project. Either way the effect obeys the device tier (`$genex-threejs-adaptive-quality`): expensive passes are desktop-tier, and on WebGPU the per-target MSAA sample count is a runtime knob the governor may drive.
|
|
6
6
|
|
|
7
7
|
## Contents
|
|
8
8
|
|
|
@@ -162,7 +162,10 @@ From `@genex-ai/embed-sdk/sentry` (crash reporting; exactly these two):
|
|
|
162
162
|
- `sentryCanvasSnapshot(canvas)` — session replay records the DOM, not the 3D
|
|
163
163
|
canvas; call this once per frame at the END of the render loop so replays
|
|
164
164
|
show actual gameplay. Works for BOTH WebGL and WebGPU renderers; internally
|
|
165
|
-
throttled, so calling at 60fps is fine
|
|
165
|
+
throttled, so calling at 60fps is fine. On TOUCH devices it is a deliberate
|
|
166
|
+
no-op (and session replay/tracing sample down): each capture is a full-canvas
|
|
167
|
+
GPU readback, exactly the overhead phones get memory-killed for — mobile
|
|
168
|
+
replays are DOM-only by design, on-error replays still record everywhere:
|
|
166
169
|
|
|
167
170
|
```ts
|
|
168
171
|
function animate() {
|
|
@@ -27,7 +27,7 @@ in another.
|
|
|
27
27
|
| Pause | always — opens on the Escape key | 1 — menu backdrop under a dark overlay |
|
|
28
28
|
| Fail / retry | always | 1 — a *graded* variant of the menu screen |
|
|
29
29
|
| Win / next | always | 1 — graded variant, warm |
|
|
30
|
-
| Settings |
|
|
30
|
+
| Settings | always — every game carries the Quality picker (Auto/Low/Medium/High, `$genex-threejs-adaptive-quality`), plus whatever else it has to set | 1 |
|
|
31
31
|
| Lobby / waiting | multiplayer only | 1 over the menu backdrop |
|
|
32
32
|
| HUD | always | 2 — generated sprite HUD (`$genex-ai-hud`), enqueued at this gate for EVERY game; plain CSS is the placeholder until the sprites land, never the final HUD |
|
|
33
33
|
|
|
@@ -401,11 +401,13 @@ Order the HUD by what the player loses the game for ignoring:
|
|
|
401
401
|
`vUv` grain shimmers.
|
|
402
402
|
- **Desktop first.** Verify at desktop sizes and survive window resizes
|
|
403
403
|
without clipping; don't design phone layouts or test mobile viewports unless
|
|
404
|
-
the user asks.
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
`navigator.maxTouchPoints > 0`,
|
|
408
|
-
|
|
404
|
+
the user asks. Two exceptions ship by default precisely BECAUSE you don't
|
|
405
|
+
test on phones: touch *input* when a recipe fits — a bundled controller's
|
|
406
|
+
built-in touch controls, or the touch kit + recipes in
|
|
407
|
+
`$genex-threejs-touch-controls` — behind `navigator.maxTouchPoints > 0`,
|
|
408
|
+
invisible on desktop (skipping needs a one-line reason, not silence); and
|
|
409
|
+
the adaptive-quality tier at boot (`$genex-threejs-adaptive-quality`), which
|
|
410
|
+
keeps the shared link from being a dead OR crashing link on a phone.
|
|
409
411
|
|
|
410
412
|
## Wire UI to game state, never the reverse
|
|
411
413
|
|
|
@@ -43,6 +43,11 @@ ownership boundaries between whole-scene and effect-local graphs.
|
|
|
43
43
|
- Build pass toggles and effect-only views before tuning.
|
|
44
44
|
- UI rendered in the same target needs an explicit protection strategy.
|
|
45
45
|
- Do not load all atomic post skills by default. Route only the effects actually requested.
|
|
46
|
+
- Budget the pipeline per device tier (`$genex-threejs-adaptive-quality`):
|
|
47
|
+
phone pixel budget ≈ 1,000,000 px at DPR ≤ 1.25–1.5, desktop ≈ 1,650,000 px —
|
|
48
|
+
every full-res pass target multiplies that cost, so phone tiers run the light
|
|
49
|
+
post level and per-pass resolution scales (0.4–0.5 DPR blurs) are the norm,
|
|
50
|
+
not an optimization.
|
|
46
51
|
|
|
47
52
|
## Routing boundary
|
|
48
53
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Use this reference to compose shared scene buffers, lighting effects, atmosphere, bloom, exposure, tone mapping, grading, and feature-local render targets with explicit ownership.
|
|
4
4
|
|
|
5
|
-
> **Renderer note:** this reference assumes `WebGPURenderer` + TSL node materials. Check the project's actual renderer first — the Genex scaffold ships vanilla WebGL three.js. On WebGL, adapt the technique with standard materials / `EffectComposer` passes or pick a simpler alternative; never switch renderers mid-project.
|
|
5
|
+
> **Renderer note:** this reference assumes `WebGPURenderer` + TSL node materials. Check the project's actual renderer first — the Genex scaffold ships vanilla WebGL three.js. On WebGL, adapt the technique with standard materials / `EffectComposer` passes or pick a simpler alternative; never switch renderers mid-project. Either way the effect obeys the device tier (`$genex-threejs-adaptive-quality`): expensive passes are desktop-tier, and on WebGPU the per-target MSAA sample count is a runtime knob the governor may drive.
|
|
6
6
|
|
|
7
7
|
## Contents
|
|
8
8
|
|
|
@@ -107,7 +107,11 @@ kill-switch diagnostic.
|
|
|
107
107
|
whole rig after a tone-mapping change is self-inflicted.
|
|
108
108
|
- Never repair unbalanced light ratios with exposure — fix the lights.
|
|
109
109
|
- Flicker from elapsed time, never per-frame randomness.
|
|
110
|
-
- Dispose lights and their shadow maps with the level that spawned them
|
|
110
|
+
- Dispose lights and their shadow maps with the level that spawned them — and
|
|
111
|
+
the rest of the level with them: traverse the outgoing scene and dispose
|
|
112
|
+
geometry, materials, AND textures separately (three frees nothing; material
|
|
113
|
+
dispose does not touch textures). Leaked levels march phones toward the
|
|
114
|
+
OS memory kill — `$genex-threejs-adaptive-quality` owns the budget watch.
|
|
111
115
|
- The rig must read with post off: time of day and where-to-go, before bloom.
|
|
112
116
|
|
|
113
117
|
## Routing boundary
|
|
@@ -536,7 +536,13 @@ fights (many writers). A ball on `objects` glides and has one owner. That's the
|
|
|
536
536
|
`stateRaw` is the raw latest (hit-tests, discrete values). A reconnect-grace seat remains in this
|
|
537
537
|
map with `connected: false`. `avatarUrl` is that player's verified VRM pick (server-set, `''`
|
|
538
538
|
when unknown) — in a VRM-lane game render each remote with
|
|
539
|
-
`
|
|
539
|
+
`loadVrmClone(p.avatarUrl || "./assets/avatar.vrm")` (the vendored loader's shared-GPU clone:
|
|
540
|
+
N remotes share one set of geometry/textures instead of re-parsing per player — retarget
|
|
541
|
+
clips once on `loadVrmClone.base(url)` and play them on each clone's own mixer); never
|
|
542
|
+
publish avatar URLs through `me.set`. On phone tiers, animate and fully draw only the
|
|
543
|
+
nearest `tier.remoteAvatarCap` remotes (`$genex-threejs-adaptive-quality`) — freeze the
|
|
544
|
+
mixer and billboard or hide the rest; a room allows up to 64 players and 64 live avatars
|
|
545
|
+
is a real phone memory kill on its own.
|
|
540
546
|
- `room.activePlayers` — the connected-only subset of `room.players`; use its size for live quorum.
|
|
541
547
|
- `room.objects` — shared objects nobody owns until claimed (a ball, an NPC):
|
|
542
548
|
- `claim(id)` — **legacy** optimistic request. It flips local ownership immediately and is corrected
|
|
@@ -275,9 +275,12 @@ room.me.set({
|
|
|
275
275
|
|
|
276
276
|
// Remote players: a VISUAL-ONLY avatar — NO Rapier body, NO controller instance for remotes.
|
|
277
277
|
// Build each remote's visual from THEIR OWN model: in a VRM-lane game that is
|
|
278
|
-
//
|
|
279
|
-
// replicates ('' = unknown → fall back; deepDispose the
|
|
280
|
-
//
|
|
278
|
+
// loadVrmClone(pl.avatarUrl || "./assets/avatar.vrm") — the verified per-player pick the
|
|
279
|
+
// relay replicates ('' = unknown → fall back; deepDispose the clone on 'leave'). The clone
|
|
280
|
+
// shares parsed GPU geometry/textures across remotes with the same file (most rooms: all of
|
|
281
|
+
// them) — retarget clips once against loadVrmClone.base(url).vrm and drive each clone's own
|
|
282
|
+
// AnimationMixer. Never reuse your own avatar OBJECT for a remote (clones, not references).
|
|
283
|
+
// Phone tiers animate only the nearest tier.remoteAvatarCap remotes (adaptive-quality skill). Position/rotation from smoothed state; animation from the
|
|
281
284
|
// synced flags via the avatar's own update(flags, dt). The character-controller skill's
|
|
282
285
|
// animations reference owns the flag set.
|
|
283
286
|
const pl = room.players.get(id)!;
|
|
@@ -26,6 +26,7 @@ already resolved — constructing a collider before WASM init throws.
|
|
|
26
26
|
| tall dynamic props, posts | `capsuleCollider` / `cylinderCollider` | stable standing shapes |
|
|
27
27
|
| pickups, triggers, zones | any shape + `{ sensor: true, mass: 0 }` | overlap events, no contact forces |
|
|
28
28
|
| the player, cars, drones | none of the above — `npx genex controller` | controllers own their collider recipes |
|
|
29
|
+
| any prop on a PHONE tier (`$genex-threejs-adaptive-quality`) | prefer `cuboidCollider`/hull over trimesh | trimesh contacts scale with triangle count — a phone CPU/memory tax; keep trimesh for static level geometry only |
|
|
29
30
|
|
|
30
31
|
## Explicit primitive helpers
|
|
31
32
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Use this reference for a bounded-cost WebGPU/TSL ambient-visibility pass with half-resolution horizon integration, bent normals, bilateral reconstruction, and directional ambient tint.
|
|
4
4
|
|
|
5
|
-
> **Renderer note:** this reference assumes `WebGPURenderer` + TSL node materials. Check the project's actual renderer first — the Genex scaffold ships vanilla WebGL three.js. On WebGL, adapt the technique with standard materials / `EffectComposer` passes or pick a simpler alternative; never switch renderers mid-project.
|
|
5
|
+
> **Renderer note:** this reference assumes `WebGPURenderer` + TSL node materials. Check the project's actual renderer first — the Genex scaffold ships vanilla WebGL three.js. On WebGL, adapt the technique with standard materials / `EffectComposer` passes or pick a simpler alternative; never switch renderers mid-project. Either way the effect obeys the device tier (`$genex-threejs-adaptive-quality`): expensive passes are desktop-tier, and on WebGPU the per-target MSAA sample count is a runtime knob the governor may drive.
|
|
6
6
|
|
|
7
7
|
## Contents
|
|
8
8
|
|
|
@@ -12,6 +12,12 @@ and shadows shimmer, swim, or run out of coverage.
|
|
|
12
12
|
|
|
13
13
|
Use a single shadow map only when its receiver region is genuinely bounded. For large moving views, make shadow coverage an explicit spatial hierarchy.
|
|
14
14
|
|
|
15
|
+
**Phone budgets ride the quality tier** (`$genex-threejs-adaptive-quality`):
|
|
16
|
+
shadow maps ≤1024² on phones (512² on the low tier — a 4096² map alone is
|
|
17
|
+
~67 MB of the phone's whole GPU budget), at most 2 cascades where desktop runs
|
|
18
|
+
4, and `shadowMap.autoUpdate = false` for static scenes (re-render on demand:
|
|
19
|
+
a shadow pass is a full extra scene render every frame otherwise).
|
|
20
|
+
|
|
15
21
|
## Cached clipmap workflow
|
|
16
22
|
|
|
17
23
|
1. Define concentric light-space square levels.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Use this reference for stable directional shadows across a large procedural scene using committed light-space centers, texel snapping, bounded refresh budgets, cross-level blending, and targeted invalidation.
|
|
4
4
|
|
|
5
|
-
> **Renderer note:** this reference assumes `WebGPURenderer` + TSL node materials. Check the project's actual renderer first — the Genex scaffold ships vanilla WebGL three.js. On WebGL, adapt the technique with standard materials / `EffectComposer` passes or pick a simpler alternative; never switch renderers mid-project.
|
|
5
|
+
> **Renderer note:** this reference assumes `WebGPURenderer` + TSL node materials. Check the project's actual renderer first — the Genex scaffold ships vanilla WebGL three.js. On WebGL, adapt the technique with standard materials / `EffectComposer` passes or pick a simpler alternative; never switch renderers mid-project. Either way the effect obeys the device tier (`$genex-threejs-adaptive-quality`): expensive passes are desktop-tier, and on WebGPU the per-target MSAA sample count is a runtime knob the governor may drive.
|
|
6
6
|
|
|
7
7
|
## Contents
|
|
8
8
|
|
|
@@ -20,6 +20,7 @@ map, execution order, and acceptance gate.
|
|
|
20
20
|
| a custom generated playable humanoid or Meshy animation coverage beyond UAL: reference-informed A-pose concepts, explicit candidate + 10k-remesh approvals, exact action IDs, same-rig adapter | `$genex-ai-character` + `$genex-threejs-character-controller` |
|
|
21
21
|
| the player drives or flies something: cars, drones, vehicle physics, gearbox, enter/exit between character and vehicle | `$genex-threejs-vehicle-controllers` |
|
|
22
22
|
| playable on phones: touch/mobile input for any game — joystick, virtual buttons, drag zones, per-genre touch recipes, rotate-device overlay — wired by default for every NEW game when a recipe fits (skip with a one-line reason) | `$genex-threejs-touch-controls` |
|
|
23
|
+
| phone-survivable rendering — device tiers, DPR/shadow/post budgets, the runtime quality governor, per-tier asset rungs for generated skyboxes/textures, the Quality picker, dispose-on-swap discipline — **mandatory for every game at boot wiring** | `$genex-threejs-adaptive-quality` |
|
|
23
24
|
| anything falls, collides, gets pushed, or needs physics: Rapier world setup, colliders for meshes and GLBs, collision events | `$genex-threejs-physics-rapier` |
|
|
24
25
|
| launch and docking timelines, procedural transform phases, springs, staging, rotating-frame alignment, debris motion | `$genex-threejs-procedural-animation` |
|
|
25
26
|
| reusable scalar/vector fields, domain warping, causal masks, procedural normals | `$genex-threejs-procedural-fields` |
|
|
@@ -58,6 +59,14 @@ map, execution order, and acceptance gate.
|
|
|
58
59
|
mentions sign-in, saves, progress, per-player state, a persistent world, or
|
|
59
60
|
leaderboards. Multiplayer auth (`getColyseusAuth`) comes from it too.
|
|
60
61
|
|
|
62
|
+
**Adaptive quality is mandatory routing:** every game wires the device tier at
|
|
63
|
+
boot — `$genex-threejs-adaptive-quality` (three lines: `detectTier()` before the
|
|
64
|
+
renderer, tier-capped `setPixelRatio`, the governor in the loop; generated
|
|
65
|
+
skyboxes/textures load through their rungs). Phones enforce a hard GPU-memory
|
|
66
|
+
kill desktops never show you; the tier is what keeps a phone boot alive while
|
|
67
|
+
desktop keeps the full look. This is a completion gate like the post stack —
|
|
68
|
+
cheap to wire, not a new testing burden (desktop-only verification stands).
|
|
69
|
+
|
|
61
70
|
**Character-animation routing:** use the existing VRM + UAL character
|
|
62
71
|
controller by default. Use `npx genex character` when the game needs a custom
|
|
63
72
|
generated humanoid or an action unavailable in UAL. Before generating a Meshy
|
|
@@ -122,7 +131,11 @@ stack this game ships — read off the concept frame's OWN look (the grade, bloo
|
|
|
122
131
|
level, haze, grain it already shows) and which post the 2–3 AAA references lean
|
|
123
132
|
on, not a default single bloom; ONE built render-pass effect is the FLOOR
|
|
124
133
|
against no-post for EVERY game, never the target — ship the richness the concept
|
|
125
|
-
implies
|
|
134
|
+
implies. The floor is TIER-AWARE (`$genex-threejs-adaptive-quality`): on phone
|
|
135
|
+
tiers it is satisfied by the built tone-mapping/output pass with the light
|
|
136
|
+
additions the tier allows (FXAA/vignette), while the full named stack remains
|
|
137
|
+
the desktop floor — never ship the heavy stack undropped to phones (the UI
|
|
138
|
+
vignette div or a CSS canvas filter does not count on any tier;
|
|
126
139
|
`$genex-threejs-image-pipeline` owns ordering when 2+ compose), a decision for
|
|
127
140
|
**every primitive surface** the game builds — walls, barriers, kerbs and
|
|
128
141
|
platforms each get a real texture or a **shader** where that surface wants motion
|
|
@@ -194,7 +194,11 @@ Three.js release or branch, and do not blindly copy demo architecture.
|
|
|
194
194
|
step-4 post plan, not inventing one now. This is a completion gate: the
|
|
195
195
|
named post stack must be BUILT before the game is called done, published,
|
|
196
196
|
or handed off — a game rendering on stock three.js defaults is not done,
|
|
197
|
-
and the gate does not wait for the word "done" to be said.
|
|
197
|
+
and the gate does not wait for the word "done" to be said. The stack is
|
|
198
|
+
tier-gated (`$genex-threejs-adaptive-quality`): full on desktop, the built
|
|
199
|
+
tone-mapping pass + the tier's light additions on phones — wire the
|
|
200
|
+
governor's post toggle so phone tiers drop the heavy passes, never ship
|
|
201
|
+
them undropped.
|
|
198
202
|
12. Once the loop is playable, build the planned interface states via
|
|
199
203
|
`$genex-threejs-game-ui` (HUD, pause on Escape, fail/retry, win, and the
|
|
200
204
|
full loading state grown from the step-6 loader), then `npx genex wait`
|
|
@@ -280,7 +284,11 @@ A routed Genex scene is incomplete until it exposes:
|
|
|
280
284
|
- named perceptual parameters for the important visual systems;
|
|
281
285
|
- debug views for generated fields, masks, or passes;
|
|
282
286
|
- a no-post baseline that still communicates the subject;
|
|
283
|
-
- a clear quality tier or render-budget knob when the effect is expensive
|
|
287
|
+
- a clear quality tier or render-budget knob when the effect is expensive —
|
|
288
|
+
and for every GAME, the adaptive-quality tier wired at boot
|
|
289
|
+
(`$genex-threejs-adaptive-quality`): tier-capped pixel ratio, tier shadow
|
|
290
|
+
budget, the runtime governor in the loop, and generated skybox/texture
|
|
291
|
+
loads routed through their rungs;
|
|
284
292
|
- when physics or controllers are in play, a fixed-timestep loop: per-frame
|
|
285
293
|
work (platforms, enter/exit, controller updates) runs inside the physics
|
|
286
294
|
world's before-step hook, then the world steps — never in the render loop;
|
|
@@ -290,9 +298,12 @@ A routed Genex scene is incomplete until it exposes:
|
|
|
290
298
|
|
|
291
299
|
**Publishing IS calling it done.** Before `npx genex publish`, every completion
|
|
292
300
|
gate above must pass — sprite HUD wired, Escape pause working, branded loader
|
|
293
|
-
with its key art, fonts loaded, renderer baseline + one built post effect
|
|
294
|
-
|
|
295
|
-
|
|
301
|
+
with its key art, fonts loaded, renderer baseline + one built post effect
|
|
302
|
+
(tier-aware), the adaptive-quality tier wired at boot, world dressing placed
|
|
303
|
+
or validly waived, and the content contract's countables present or
|
|
304
|
+
explicitly re-scoped by the user. `genex preview`/`publish` print a mobile
|
|
305
|
+
preflight (estimated phone GPU memory vs budget) — treat a warning there as a
|
|
306
|
+
gate item too. If any is still
|
|
296
307
|
pending, say which and publish only after an explicit go-ahead.
|
|
297
308
|
|
|
298
309
|
Do not invent unavailable Genex service APIs. When preparing a game for Genex
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Use this reference for a large, unbounded-looking ocean whose identity comes from directional spectral synthesis, staged inverse FFTs, derivative maps, Jacobian whitecaps, and coherent optical shading.
|
|
4
4
|
|
|
5
|
-
> **Renderer note:** this reference assumes `WebGPURenderer` + TSL node materials. Check the project's actual renderer first — the Genex scaffold ships vanilla WebGL three.js. On WebGL, adapt the technique with standard materials / `EffectComposer` passes or pick a simpler alternative; never switch renderers mid-project.
|
|
5
|
+
> **Renderer note:** this reference assumes `WebGPURenderer` + TSL node materials. Check the project's actual renderer first — the Genex scaffold ships vanilla WebGL three.js. On WebGL, adapt the technique with standard materials / `EffectComposer` passes or pick a simpler alternative; never switch renderers mid-project. Either way the effect obeys the device tier (`$genex-threejs-adaptive-quality`): expensive passes are desktop-tier, and on WebGPU the per-target MSAA sample count is a runtime knob the governor may drive.
|
|
6
6
|
|
|
7
7
|
## Contents
|
|
8
8
|
|
|
@@ -153,6 +153,13 @@ z-order stays: drag zone (5) under joystick/buttons (10) under pause menus.
|
|
|
153
153
|
canvas. If the game also needs taps there (tap to shoot), read them from the
|
|
154
154
|
zone (`onChange` + a small-movement threshold) or shrink the zone.
|
|
155
155
|
|
|
156
|
+
## Input is half of phone-playable
|
|
157
|
+
|
|
158
|
+
This skill is INPUT only. A phone that can steer a game that then runs out of
|
|
159
|
+
GPU memory still loses the player — the rendering half (device tiers, DPR and
|
|
160
|
+
shadow budgets, the runtime governor, per-tier asset rungs) lives in
|
|
161
|
+
`$genex-threejs-adaptive-quality` and is wired at boot for every game.
|
|
162
|
+
|
|
156
163
|
## When you skip
|
|
157
164
|
|
|
158
165
|
Say it in one plain line — *"skipped touch controls: the game is
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Use this reference for bounded or analytic water with shared displacement and normals, derivative-filtered detail, analytic reflection, heuristic refraction, absorption, and crest foam. Use `$genex-threejs-spectral-ocean` for stochastic FFT seas.
|
|
4
4
|
|
|
5
|
-
> **Renderer note:** this reference assumes `WebGPURenderer` + TSL node materials. Check the project's actual renderer first — the Genex scaffold ships vanilla WebGL three.js. On WebGL, adapt the technique with standard materials / `EffectComposer` passes or pick a simpler alternative; never switch renderers mid-project.
|
|
5
|
+
> **Renderer note:** this reference assumes `WebGPURenderer` + TSL node materials. Check the project's actual renderer first — the Genex scaffold ships vanilla WebGL three.js. On WebGL, adapt the technique with standard materials / `EffectComposer` passes or pick a simpler alternative; never switch renderers mid-project. Either way the effect obeys the device tier (`$genex-threejs-adaptive-quality`): expensive passes are desktop-tier, and on WebGPU the per-target MSAA sample count is a runtime knob the governor may drive.
|
|
6
6
|
|
|
7
7
|
## Contents
|
|
8
8
|
|