@oxy.so/bloom 7.1.1 → 7.1.4
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/assets/character-runtime/README.md +114 -19
- package/assets/character-runtime/authored-parts.mjs +754 -0
- package/assets/character-runtime/catalog-parts.mjs +362 -0
- package/assets/character-runtime/character-recipe.mjs +247 -0
- package/assets/character-runtime/clippo-geometry.mjs +679 -0
- package/assets/character-runtime/controller-mode.mjs +208 -0
- package/assets/character-runtime/cyclops-geometry.mjs +180 -0
- package/assets/character-runtime/legacy-engine.mjs +406 -54
- package/assets/character-runtime/legacy-geometry.mjs +242 -85
- package/assets/character-runtime/legacy-worker.mjs +82 -23
- package/assets/character-runtime/managed-avatar.mjs +12 -17
- package/assets/character-runtime/migrated-contours.mjs +2067 -0
- package/assets/character-runtime/migrated-faces.mjs +59 -0
- package/assets/character-runtime/pose-transition.mjs +523 -0
- package/assets/character-runtime/preparation-cache.mjs +60 -0
- package/assets/character-runtime/render-budget.mjs +5 -3
- package/assets/character-runtime/render-errors.mjs +180 -0
- package/assets/character-runtime/resolution.mjs +10 -0
- package/assets/character-runtime/runtime.mjs +744 -295
- package/assets/character-runtime/sha256.mjs +44 -0
- package/assets/character-runtime/shared-programs.mjs +534 -0
- package/assets/character-runtime/shared-surface.mjs +490 -0
- package/assets/character-runtime/shared-textures.mjs +420 -0
- package/assets/character-runtime/thumbnails/eyes/todd.png +0 -0
- package/docs/adoption-matrix.mdx +2 -2
- package/docs/agent-avatar.mdx +45 -8
- package/docs/agent-creator.mdx +13 -3
- package/docs/bottom-sheet.mdx +1 -1
- package/lib/commonjs/agent-avatar/AgentAvatar.js +1 -1
- package/lib/commonjs/agent-avatar/AgentAvatar.js.map +1 -1
- package/lib/commonjs/agent-avatar/CharacterAvatar.js +2 -1
- package/lib/commonjs/agent-avatar/CharacterAvatar.js.map +1 -1
- package/lib/commonjs/agent-avatar/character-colors.js +19 -0
- package/lib/commonjs/agent-avatar/character-colors.js.map +1 -0
- package/lib/commonjs/agent-avatar/character-shapes.js +106 -0
- package/lib/commonjs/agent-avatar/character-shapes.js.map +1 -0
- package/lib/commonjs/agent-avatar/config-character.js +4 -0
- package/lib/commonjs/agent-avatar/config-character.js.map +1 -1
- package/lib/commonjs/agent-avatar/legacy-recipe.js +19 -6
- package/lib/commonjs/agent-avatar/legacy-recipe.js.map +1 -1
- package/lib/commonjs/agent-creator/AgentCreatorBase.js +67 -107
- package/lib/commonjs/agent-creator/AgentCreatorBase.js.map +1 -1
- package/lib/commonjs/agent-creator/CharacterControls.js +23 -5
- package/lib/commonjs/agent-creator/CharacterControls.js.map +1 -1
- package/lib/commonjs/agent-creator/ClippoArtwork.js +63 -0
- package/lib/commonjs/agent-creator/ClippoArtwork.js.map +1 -0
- package/lib/commonjs/agent-creator/CyclopsArtwork.js +45 -0
- package/lib/commonjs/agent-creator/CyclopsArtwork.js.map +1 -0
- package/lib/commonjs/agent-creator/EmotionPicker.js +8 -1
- package/lib/commonjs/agent-creator/EmotionPicker.js.map +1 -1
- package/lib/commonjs/agent-creator/ShapeSilhouette.js +8 -1
- package/lib/commonjs/agent-creator/ShapeSilhouette.js.map +1 -1
- package/lib/commonjs/agent-creator/ToddArtwork.js +29 -0
- package/lib/commonjs/agent-creator/ToddArtwork.js.map +1 -0
- package/lib/commonjs/agent-creator/constants.js +16 -17
- package/lib/commonjs/agent-creator/constants.js.map +1 -1
- package/lib/commonjs/agent-creator/messages.js +1 -1
- package/lib/commonjs/agent-creator/messages.js.map +1 -1
- package/lib/commonjs/bottom-sheet/BottomSheetBase.js +33 -49
- package/lib/commonjs/bottom-sheet/BottomSheetBase.js.map +1 -1
- package/lib/commonjs/dialog/DialogBottomSheet.js +1 -1
- package/lib/commonjs/dialog/DialogBottomSheet.js.map +1 -1
- package/lib/commonjs/locale/translations/ar.js +1 -1
- package/lib/commonjs/locale/translations/ar.js.map +1 -1
- package/lib/commonjs/locale/translations/bn.js +1 -1
- package/lib/commonjs/locale/translations/bn.js.map +1 -1
- package/lib/commonjs/locale/translations/ca.js +1 -1
- package/lib/commonjs/locale/translations/ca.js.map +1 -1
- package/lib/commonjs/locale/translations/de.js +1 -1
- package/lib/commonjs/locale/translations/de.js.map +1 -1
- package/lib/commonjs/locale/translations/es.js +1 -1
- package/lib/commonjs/locale/translations/es.js.map +1 -1
- package/lib/commonjs/locale/translations/fr.js +1 -1
- package/lib/commonjs/locale/translations/fr.js.map +1 -1
- package/lib/commonjs/locale/translations/hi.js +1 -1
- package/lib/commonjs/locale/translations/hi.js.map +1 -1
- package/lib/commonjs/locale/translations/id.js +1 -1
- package/lib/commonjs/locale/translations/id.js.map +1 -1
- package/lib/commonjs/locale/translations/it.js +1 -1
- package/lib/commonjs/locale/translations/it.js.map +1 -1
- package/lib/commonjs/locale/translations/ja.js +1 -1
- package/lib/commonjs/locale/translations/ja.js.map +1 -1
- package/lib/commonjs/locale/translations/pt.js +1 -1
- package/lib/commonjs/locale/translations/pt.js.map +1 -1
- package/lib/commonjs/locale/translations/ru.js +1 -1
- package/lib/commonjs/locale/translations/ru.js.map +1 -1
- package/lib/commonjs/locale/translations/tr.js +1 -1
- package/lib/commonjs/locale/translations/tr.js.map +1 -1
- package/lib/commonjs/locale/translations/zh.js +1 -1
- package/lib/commonjs/locale/translations/zh.js.map +1 -1
- package/lib/commonjs/surface/SurfacePaint.js +17 -4
- package/lib/commonjs/surface/SurfacePaint.js.map +1 -1
- package/lib/module/agent-avatar/AgentAvatar.js +1 -1
- package/lib/module/agent-avatar/AgentAvatar.js.map +1 -1
- package/lib/module/agent-avatar/CharacterAvatar.js +2 -1
- package/lib/module/agent-avatar/CharacterAvatar.js.map +1 -1
- package/lib/module/agent-avatar/character-colors.js +15 -0
- package/lib/module/agent-avatar/character-colors.js.map +1 -0
- package/lib/module/agent-avatar/character-shapes.js +97 -0
- package/lib/module/agent-avatar/character-shapes.js.map +1 -0
- package/lib/module/agent-avatar/config-character.js +4 -0
- package/lib/module/agent-avatar/config-character.js.map +1 -1
- package/lib/module/agent-avatar/legacy-recipe.js +19 -6
- package/lib/module/agent-avatar/legacy-recipe.js.map +1 -1
- package/lib/module/agent-creator/AgentCreatorBase.js +69 -109
- package/lib/module/agent-creator/AgentCreatorBase.js.map +1 -1
- package/lib/module/agent-creator/CharacterControls.js +24 -6
- package/lib/module/agent-creator/CharacterControls.js.map +1 -1
- package/lib/module/agent-creator/ClippoArtwork.js +59 -0
- package/lib/module/agent-creator/ClippoArtwork.js.map +1 -0
- package/lib/module/agent-creator/CyclopsArtwork.js +41 -0
- package/lib/module/agent-creator/CyclopsArtwork.js.map +1 -0
- package/lib/module/agent-creator/EmotionPicker.js +8 -1
- package/lib/module/agent-creator/EmotionPicker.js.map +1 -1
- package/lib/module/agent-creator/ShapeSilhouette.js +8 -1
- package/lib/module/agent-creator/ShapeSilhouette.js.map +1 -1
- package/lib/module/agent-creator/ToddArtwork.js +25 -0
- package/lib/module/agent-creator/ToddArtwork.js.map +1 -0
- package/lib/module/agent-creator/constants.js +8 -16
- package/lib/module/agent-creator/constants.js.map +1 -1
- package/lib/module/agent-creator/messages.js +1 -1
- package/lib/module/agent-creator/messages.js.map +1 -1
- package/lib/module/bottom-sheet/BottomSheetBase.js +33 -49
- package/lib/module/bottom-sheet/BottomSheetBase.js.map +1 -1
- package/lib/module/dialog/DialogBottomSheet.js +1 -1
- package/lib/module/dialog/DialogBottomSheet.js.map +1 -1
- package/lib/module/locale/translations/ar.js +1 -1
- package/lib/module/locale/translations/ar.js.map +1 -1
- package/lib/module/locale/translations/bn.js +1 -1
- package/lib/module/locale/translations/bn.js.map +1 -1
- package/lib/module/locale/translations/ca.js +1 -1
- package/lib/module/locale/translations/ca.js.map +1 -1
- package/lib/module/locale/translations/de.js +1 -1
- package/lib/module/locale/translations/de.js.map +1 -1
- package/lib/module/locale/translations/es.js +1 -1
- package/lib/module/locale/translations/es.js.map +1 -1
- package/lib/module/locale/translations/fr.js +1 -1
- package/lib/module/locale/translations/fr.js.map +1 -1
- package/lib/module/locale/translations/hi.js +1 -1
- package/lib/module/locale/translations/hi.js.map +1 -1
- package/lib/module/locale/translations/id.js +1 -1
- package/lib/module/locale/translations/id.js.map +1 -1
- package/lib/module/locale/translations/it.js +1 -1
- package/lib/module/locale/translations/it.js.map +1 -1
- package/lib/module/locale/translations/ja.js +1 -1
- package/lib/module/locale/translations/ja.js.map +1 -1
- package/lib/module/locale/translations/pt.js +1 -1
- package/lib/module/locale/translations/pt.js.map +1 -1
- package/lib/module/locale/translations/ru.js +1 -1
- package/lib/module/locale/translations/ru.js.map +1 -1
- package/lib/module/locale/translations/tr.js +1 -1
- package/lib/module/locale/translations/tr.js.map +1 -1
- package/lib/module/locale/translations/zh.js +1 -1
- package/lib/module/locale/translations/zh.js.map +1 -1
- package/lib/module/surface/SurfacePaint.js +18 -5
- package/lib/module/surface/SurfacePaint.js.map +1 -1
- package/lib/typescript/commonjs/agent-avatar/CharacterAvatar.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-avatar/character-colors.d.ts +13 -0
- package/lib/typescript/commonjs/agent-avatar/character-colors.d.ts.map +1 -0
- package/lib/typescript/commonjs/agent-avatar/character-shapes.d.ts +19 -0
- package/lib/typescript/commonjs/agent-avatar/character-shapes.d.ts.map +1 -0
- package/lib/typescript/commonjs/agent-avatar/config-character.d.ts +4 -0
- package/lib/typescript/commonjs/agent-avatar/config-character.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-avatar/legacy-recipe.d.ts +2 -10
- package/lib/typescript/commonjs/agent-avatar/legacy-recipe.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-creator/AgentCreatorBase.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-creator/CharacterControls.d.ts +2 -1
- package/lib/typescript/commonjs/agent-creator/CharacterControls.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-creator/ClippoArtwork.d.ts +6 -0
- package/lib/typescript/commonjs/agent-creator/ClippoArtwork.d.ts.map +1 -0
- package/lib/typescript/commonjs/agent-creator/CyclopsArtwork.d.ts +5 -0
- package/lib/typescript/commonjs/agent-creator/CyclopsArtwork.d.ts.map +1 -0
- package/lib/typescript/commonjs/agent-creator/EmotionPicker.d.ts +1 -0
- package/lib/typescript/commonjs/agent-creator/EmotionPicker.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-creator/ShapeSilhouette.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-creator/ToddArtwork.d.ts +6 -0
- package/lib/typescript/commonjs/agent-creator/ToddArtwork.d.ts.map +1 -0
- package/lib/typescript/commonjs/agent-creator/constants.d.ts +7 -15
- package/lib/typescript/commonjs/agent-creator/constants.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-creator/messages.d.ts.map +1 -1
- package/lib/typescript/commonjs/bottom-sheet/BottomSheetBase.d.ts.map +1 -1
- package/lib/typescript/commonjs/bottom-sheet/types.d.ts +1 -0
- package/lib/typescript/commonjs/bottom-sheet/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/surface/SurfacePaint.d.ts.map +1 -1
- package/lib/typescript/module/agent-avatar/CharacterAvatar.d.ts.map +1 -1
- package/lib/typescript/module/agent-avatar/character-colors.d.ts +13 -0
- package/lib/typescript/module/agent-avatar/character-colors.d.ts.map +1 -0
- package/lib/typescript/module/agent-avatar/character-shapes.d.ts +19 -0
- package/lib/typescript/module/agent-avatar/character-shapes.d.ts.map +1 -0
- package/lib/typescript/module/agent-avatar/config-character.d.ts +4 -0
- package/lib/typescript/module/agent-avatar/config-character.d.ts.map +1 -1
- package/lib/typescript/module/agent-avatar/legacy-recipe.d.ts +2 -10
- package/lib/typescript/module/agent-avatar/legacy-recipe.d.ts.map +1 -1
- package/lib/typescript/module/agent-creator/AgentCreatorBase.d.ts.map +1 -1
- package/lib/typescript/module/agent-creator/CharacterControls.d.ts +2 -1
- package/lib/typescript/module/agent-creator/CharacterControls.d.ts.map +1 -1
- package/lib/typescript/module/agent-creator/ClippoArtwork.d.ts +6 -0
- package/lib/typescript/module/agent-creator/ClippoArtwork.d.ts.map +1 -0
- package/lib/typescript/module/agent-creator/CyclopsArtwork.d.ts +5 -0
- package/lib/typescript/module/agent-creator/CyclopsArtwork.d.ts.map +1 -0
- package/lib/typescript/module/agent-creator/EmotionPicker.d.ts +1 -0
- package/lib/typescript/module/agent-creator/EmotionPicker.d.ts.map +1 -1
- package/lib/typescript/module/agent-creator/ShapeSilhouette.d.ts.map +1 -1
- package/lib/typescript/module/agent-creator/ToddArtwork.d.ts +6 -0
- package/lib/typescript/module/agent-creator/ToddArtwork.d.ts.map +1 -0
- package/lib/typescript/module/agent-creator/constants.d.ts +7 -15
- package/lib/typescript/module/agent-creator/constants.d.ts.map +1 -1
- package/lib/typescript/module/agent-creator/messages.d.ts.map +1 -1
- package/lib/typescript/module/bottom-sheet/BottomSheetBase.d.ts.map +1 -1
- package/lib/typescript/module/bottom-sheet/types.d.ts +1 -0
- package/lib/typescript/module/bottom-sheet/types.d.ts.map +1 -1
- package/lib/typescript/module/surface/SurfacePaint.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/agent-avatar/AgentAvatar.tsx +1 -1
- package/src/agent-avatar/CharacterAvatar.tsx +4 -1
- package/src/agent-avatar/character-colors.ts +12 -0
- package/src/agent-avatar/character-shapes.ts +122 -0
- package/src/agent-avatar/config-character.ts +39 -6
- package/src/agent-avatar/legacy-recipe.ts +34 -6
- package/src/agent-creator/AgentCreatorBase.tsx +121 -152
- package/src/agent-creator/CharacterControls.tsx +39 -14
- package/src/agent-creator/ClippoArtwork.tsx +49 -0
- package/src/agent-creator/CyclopsArtwork.tsx +27 -0
- package/src/agent-creator/EmotionPicker.tsx +55 -16
- package/src/agent-creator/ShapeSilhouette.tsx +16 -1
- package/src/agent-creator/ToddArtwork.tsx +24 -0
- package/src/agent-creator/constants.ts +47 -14
- package/src/agent-creator/messages.ts +2 -1
- package/src/bottom-sheet/BottomSheetBase.tsx +24 -34
- package/src/bottom-sheet/types.ts +1 -0
- package/src/dialog/DialogBottomSheet.tsx +1 -1
- package/src/locale/translations/ar.ts +1 -1
- package/src/locale/translations/bn.ts +1 -1
- package/src/locale/translations/ca.ts +1 -1
- package/src/locale/translations/de.ts +1 -1
- package/src/locale/translations/es.ts +1 -1
- package/src/locale/translations/fr.ts +1 -1
- package/src/locale/translations/hi.ts +1 -1
- package/src/locale/translations/id.ts +1 -1
- package/src/locale/translations/it.ts +1 -1
- package/src/locale/translations/ja.ts +1 -1
- package/src/locale/translations/pt.ts +1 -1
- package/src/locale/translations/ru.ts +1 -1
- package/src/locale/translations/tr.ts +1 -1
- package/src/locale/translations/zh.ts +1 -1
- package/src/surface/SurfacePaint.tsx +14 -4
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
Serve this directory unchanged from a static URL and pass runtime.mjs's URL to
|
|
4
4
|
AgentAvatarProvider. The runtime loads lazily when an avatar becomes visible.
|
|
5
|
-
Serve .mjs as JavaScript and .wasm as application/wasm.
|
|
5
|
+
Serve .mjs as JavaScript and .wasm as application/wasm. Version the static
|
|
6
|
+
directory as a unit: changing only the runtime.mjs query does not invalidate
|
|
7
|
+
its relative imports under immutable HTTP caching.
|
|
6
8
|
|
|
7
9
|
The four generated engine files are preserved byte for byte from the supplied
|
|
8
10
|
local beta. integrity.json records their SHA-256 hashes. The complete supplied
|
|
@@ -14,18 +16,97 @@ runtime.mjs is an adapter for the original engine, retaining its appearance,
|
|
|
14
16
|
materials and animations. It owns loading, selection, input, display scaling and
|
|
15
17
|
resource lifetime. There is no replacement mesh renderer in the product.
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
clock
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
All visible moving characters share one physical WebGL2 context, a packed canvas,
|
|
20
|
+
and one animation clock with a 30fps per-character target. Each character retains its own state and private
|
|
21
|
+
render targets. shared-surface.mjs maps its default framebuffer into a tile,
|
|
22
|
+
resolves MSAA before translation, and clips output copies to that tile. Only the
|
|
23
|
+
last lease destroys the physical context. shared-programs.mjs pools shaders and
|
|
24
|
+
linked programs, preserving independent uniforms and Emscripten object metadata.
|
|
25
|
+
Identical uniform values are not resent when changing logical program owners.
|
|
26
|
+
shared-textures.mjs shares the exact bytes and parameters of the two 512px
|
|
27
|
+
mipmapped RGBA8 assets and the 576×960 RGBA8 atlas. Mutation or framebuffer
|
|
28
|
+
attachment first gives that logical texture independent storage. Other textures,
|
|
29
|
+
mutable buffers and private render targets are not deduplicated. Small avatars
|
|
30
|
+
use compact meshes independent of device pixel ratio. Fur and original materials
|
|
31
|
+
remain intact. resolution.mjs selects backing size by CSS size and DPR, activating
|
|
32
|
+
the original engine's existing size-dependent fur LOD.
|
|
25
33
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
34
|
+
Physical Pixel 8a measurements and exact asset fingerprints are recorded in
|
|
35
|
+
docs/benchmarks/avatar-continuous-renderer.json (same-character controllers and
|
|
36
|
+
pose transitions, before shared authored parts). All 24/48 avatars move with
|
|
37
|
+
one context and no graphics errors. Median paint rates are 4.42/2.29 Hz per avatar;
|
|
38
|
+
all-ready latency is 14.85/24.80 seconds with warm HTTP caches. The 30 fps target
|
|
39
|
+
is not achieved. Earlier snapshots are retained for comparison; see
|
|
40
|
+
docs/agent-avatar.mdx for workload and measurement limitations.
|
|
41
|
+
|
|
42
|
+
Original and migrated contours share a rendering WASM module and one preparation
|
|
43
|
+
worker, which owns a separate WASM instance. Geometry identities include contour and attachment transforms. The adapter
|
|
44
|
+
scopes the recovered engine's deferred preparation dispatcher to its character;
|
|
45
|
+
that boundary is specific to the integrity-pinned glue. Its native global batch
|
|
46
|
+
can combine jobs from different characters, so wrapping callbacks alone is not
|
|
47
|
+
sufficient: the preparation lease spans mutation, deferred jobs and first paint. Cold preparation is
|
|
48
|
+
serialized; painted moving neighbours remain resident. Static portraits are
|
|
49
|
+
cached (up to 64 images), and release graphics surfaces after painting. Exact contour preparations use an independent 8 MiB/16-entry LRU cache, including appearance, quality, activity and contour and authored-part identity; returned buffers are copied. The preparation owner receives a render turn every batch until its first complete paint. Recent interactions receive alternate-batch priority without starving the remaining round-robin queue.
|
|
50
|
+
Offscreen/background characters release their leases. Pause and reduced motion
|
|
51
|
+
freeze a complete visible frame. The binary's initial reduced-motion flag can
|
|
52
|
+
produce transparent frames; the adapter freezes its clock after painting instead.
|
|
53
|
+
|
|
54
|
+
Shared submissions contain at most eight avatars and an 8 ms CPU allowance. A WebGL fence is polled asynchronously before error checks and presentation, allowing the page to process input while the GPU works. Lifecycle and native input operations wait for this boundary; DOM pointer capture remains synchronous. Diagnostics separate CPU submission/presentation from elapsed GPU waiting and task dispatch. This improves responsiveness without claiming faster GPU throughput.
|
|
55
|
+
|
|
56
|
+
React and Work retain one native Character, its prepared meshes and animation
|
|
57
|
+
clock. controller-mode.mjs verifies the original WASM SHA-256 before capturing
|
|
58
|
+
its memory through the supported instantiateWasm hook. A JS hash fallback keeps
|
|
59
|
+
this check working on insecure HTTP WebView origins. The adapter validates the
|
|
60
|
+
Embind handle, native type marker, live instance, bounds and boolean controller
|
|
61
|
+
field on every access; memory growth never leaves a stale typed view. Its ABI
|
|
62
|
+
layout is specific to the pinned WASM and must be re-proved for another binary.
|
|
63
|
+
Activity support prepares the original props up front. A constructor without
|
|
64
|
+
activity support rejects Restore/Start; incremental preparation is not assumed.
|
|
65
|
+
Stop completion reads the original current phase/activity/episode, since both
|
|
66
|
+
copyActivityRestore and hasPendingUpdate can misrepresent outro completion.
|
|
67
|
+
Appearance changes retain any simultaneous Work/React request until the new
|
|
68
|
+
scene is painted; pausing or disposal cancels those requests.
|
|
69
|
+
Queued reactions retain the original Busy semantics until the suspended reaction
|
|
70
|
+
finishes. verify-avatar-controller-continuity.mjs checks the complete runtime
|
|
71
|
+
switches, native identity, unchanged geometry, original outro and real pixels.
|
|
72
|
+
pose-transition.mjs interpolates reflected transform/skin uniform blocks and
|
|
73
|
+
camera for 180 ms from the last presented pose. It preserves material/discrete
|
|
74
|
+
bytes and original animation of newly added props. No bitmap crossfade or
|
|
75
|
+
replacement mesh renderer is involved.
|
|
76
|
+
|
|
77
|
+
authored-parts.mjs exposes eyes:todd and accessory:felipe_beret across all 21
|
|
78
|
+
shapes. The worker copies complete native records from lime_frog and blue_beret,
|
|
79
|
+
retaining materials and animation deltas, fits them after contour deformation,
|
|
80
|
+
and removes the generic fitting references. Original activity data remains intact; the aggregate scene bounds expand to
|
|
81
|
+
include the fitted parts. Virtual IDs never reach native catalog selection. Cache keys include
|
|
82
|
+
these parts; verify-avatar-authored-parts.mjs checks all 21 real rendered shapes,
|
|
83
|
+
original/migrated Work and React, generic selections and cleanup.
|
|
84
|
+
|
|
85
|
+
clippo-geometry.mjs adds a smooth open tube and an independently selectable
|
|
86
|
+
Clippo eye/brow set as native prepared records. It generates capped tube meshes,
|
|
87
|
+
retains the original eye deformation fields and uses the recovered smooth
|
|
88
|
+
material in the same renderer. No raster cutout or additional WebGL context is
|
|
89
|
+
used. character-recipe.mjs resolves the clippo preset to its virtual shape/eyes
|
|
90
|
+
and grey paint; explicit selections override those defaults. Runtime capabilities
|
|
91
|
+
retain the caller's raw saved key, including when an explicit default selection
|
|
92
|
+
leaves the prepared appearance unchanged. Editor chips are static SVG artwork.
|
|
93
|
+
|
|
94
|
+
catalog-parts.mjs fits actual original eye, eyewear and accessory meshes across
|
|
95
|
+
all bodies. Named presets supply editable defaults; changing a part retains the
|
|
96
|
+
original body. Opaque sunglasses recover their hidden-eye fitting references
|
|
97
|
+
without replacing the body. Donor records have an 8 MiB/24-entry bounded cache.
|
|
98
|
+
verify-avatar-catalog-parts.mjs checks 312 combinations, exact requested mesh
|
|
99
|
+
labels, preserved body vertices and the cache bound.
|
|
100
|
+
|
|
101
|
+
cyclops-geometry.mjs adds one native white eyeball, a teal iris, pupil and glint;
|
|
102
|
+
its layered meshes retain native blink/look deformation. Each shape owns eye
|
|
103
|
+
positions and size, shared by every eye style; historical character.eyeSpacing
|
|
104
|
+
values are ignored. Todd's actual body is also independently selectable
|
|
105
|
+
as shape:todd. verify-avatar-cyclops.mjs checks actual eye colors, movement and
|
|
106
|
+
cleanup; verify-avatar-customization.mjs exercises all eye styles on Todd in the
|
|
107
|
+
real editor, shape changes and accessories. appearance-codec.mjs
|
|
108
|
+
validates explicit RGB through the original engine. Untouched presets keep their
|
|
109
|
+
bytes; unnamed original paint is reported from its actual material.
|
|
29
110
|
|
|
30
111
|
legacy-geometry.mjs transforms copies of prepared scene assemblies: existing
|
|
31
112
|
Bloom contours deform the body, pose deltas, normals and fur roots. The packaged
|
|
@@ -39,17 +120,31 @@ diamond and heart recipes reuse the original beta shapes instead of duplicates.
|
|
|
39
120
|
Alien avatars are removed from the visible catalog, with saved-data compatibility. The
|
|
40
121
|
migrated bodies use the original catalog eyes at their authored proportions and
|
|
41
122
|
animations; old expression/eye transform fields no longer alter the 3D face.
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
123
|
+
All visible bodies accept native catalog eyes, eyewear and accessories through
|
|
124
|
+
original donor assemblies. Fitting uses the actual target face/crown anchors;
|
|
125
|
+
Clippo headwear is scaled to its narrow crown. A bounded reference cache retains
|
|
126
|
+
original material/animation data, and spacing moves the eye groups without
|
|
127
|
+
stretching lenses. `verify-avatar-catalog-parts.mjs` checks all 312 native
|
|
128
|
+
body/part combinations, exact requested labels, unchanged body vertices and
|
|
129
|
+
cache bounds without creating a WebGL context. Intact presets retain authored
|
|
130
|
+
signature reactions. Independent piece edits retain the body's original
|
|
131
|
+
signature. Native shapes use their corresponding authored signature; distinct
|
|
132
|
+
migrated contours and Clippo use Todd's signature as the common default.
|
|
133
|
+
The adapter never substitutes the original Wave/maracas reaction. A pinned,
|
|
134
|
+
validated controller scope borrows only the reaction identity during the original
|
|
135
|
+
native dispatch and restores it immediately; saved appearance and materials
|
|
136
|
+
remain independent. Named bodies also retain their original fitted Work payload.
|
|
47
137
|
Mascots and hidden faces still use SVG.
|
|
48
138
|
Original material/grain effects become the beta's 3D surface.
|
|
49
139
|
|
|
50
140
|
Browser gates (with Storybook running) are scripts/verify-character-avatars.mjs
|
|
51
|
-
and scripts/verify-legacy-avatars.mjs
|
|
141
|
+
and scripts/verify-legacy-avatars.mjs, plus verify-avatar-render-budget.mjs and
|
|
142
|
+
verify-avatar-shared-renderer.mjs for crowd lifetime and actual 24/48-avatar motion.
|
|
143
|
+
verify-avatar-shared-surface.mjs checks atlas pixels, MSAA and failed allocation;
|
|
144
|
+
verify-avatar-shared-programs.mjs and verify-avatar-shared-textures.mjs compare
|
|
145
|
+
actual frame pixels against the original commands and verify independent changes.
|
|
146
|
+
verify-avatar-runtime-errors.mjs injects a GL failure before publication. verify-avatar-deferred-input.mjs forces a delayed GPU fence and checks real mouse capture, reactions, appearance edits, resizing and disposal during that wait. They inspect painted pixels, interaction,
|
|
52
147
|
activity, transitions and resource cleanup, not just preparation callbacks.
|
|
53
148
|
|
|
54
149
|
The optional native bridge uses separate WebViews, which cannot share the web
|
|
55
|
-
engine/context caches.
|
|
150
|
+
engine/context caches. A physical Android WebView is checked separately from the native multi-WebView bridge.
|