diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index ab98c98..a8730b9 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -199,24 +199,33 @@ When the user speaks while the AI is talking: 5. Partial response saved with `[interrupted]` marker in history 6. AnimationTree: speaking → interrupted (brief surprise) → listening -## Desktop Overlay +## Platform Rendering -Godot 4 transparent window configuration: +### Desktop: Transparent Overlay + +Miku floats on the desktop — no window chrome, no background. The OS composites the 3D avatar directly over whatever the user is doing. ```gdscript -# In project.godot or at runtime: DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_TRANSPARENT, true) DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_ALWAYS_ON_TOP, true) DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_BORDERLESS, true) - -# Transparent viewport get_viewport().transparent_bg = true - -# Click-through on transparent pixels (optional) -# Handled via input event detection on the character mesh ``` -The result: the character floats on the desktop with no window chrome, visible above all other windows, with only the character model and minimal UI elements being interactive. +Desktop-specific features: window drag, zoom, edge snap, system tray integration, keyboard shortcuts, gaze halo overlay. + +### Mobile: Fullscreen with Background Modes + +Mobile OSes don't support transparent overlay windows — Miku owns the full screen. The background behind the avatar is configurable with four modes: + +| Mode | Source | Use case | +|------|--------|----------| +| **Camera feed** | Rear/front `CameraFeed` → viewport background | AR-style, companion in the real world. Front camera doubles as face tracking input. | +| **Rendered environment** | 3D scene (bedroom, park, abstract) | Virtual pet aesthetic, configurable themes | +| **Camera blur** | Camera feed → Gaussian blur shader | Softer AR look, less visual noise | +| **Solid/gradient** | Flat color or gradient | Battery-friendly fallback, clean aesthetic | + +The background layer renders behind the avatar in the viewport. The avatar, lighting, and UI are identical to desktop — only the background differs. Desktop has transparency as its implicit "background mode" and doesn't use this system. ## Animation Architecture