Virtual Production Framework
Last reviewed: 2026-06-30
Concept
The Unity renderer implements a virtual studio: a staged Unity scene with set geometry, lighting, camera rigs, screen surfaces, bot presenter behavior, and capture. Upstream systems compile the presentation plan; Unity executes the scene.
Implemented Building Blocks
| Block | Implementation | Current state |
|---|---|---|
| Sets | Assets/AnuvaSets/Prefabs/AnuvaRoom_EV.prefab, Assets/AnuvaSets/Scenes/AnuvaRoom_EV, Anuva scene files. |
Set assets exist and are serialized into scenes. Dynamic selection from config is not confirmed. |
| Scenes | Assets/Anuva/Scenes/*.unity |
Multiple Anuva scenes exist; only default SampleScene is enabled in build settings. |
| Bot presenter | AnuvaBotAnimator, bot pose policies, motion plans, scene anchors in Anuva_TataMotors_Scene. |
Implemented in richest scene; absent or unconfirmed in some scenes. |
| Virtual screens | Direct image renderer, world-space canvases, Vuplex WebView, generated HTML surfaces. | Multiple paths coexist. |
| Camera system | Cinemachine camera, CamController, CameraShots.json, named follow/look-at transforms. |
Implemented. |
| Lighting/VFX | Magic Lightmap Switcher, Bakery data, Beautify, ShinySSRR, light probes/reflection probes. | Present in scenes/plugins. Runtime switching by PresentationController.SetSkyboxColor() exists. |
| Capture | AVPro Movie Capture from screen. | Implemented. |
Sets And Environment
The repo contains authored set assets under Assets/AnuvaSets/ and first-party Anuva scenes under Assets/Anuva/Scenes/. AnuvaRoom_EV.prefab includes environment pieces such as TV_01, TV_02, EVStageLogo, CoffeeTable, and Bakery lightmap data.
Dynamic loading of sets based on PresentationConfig.studio.set.setId is Unknown / not confirmed in repo. Current scenes appear to have set content serialized directly.
Bot Presenter
AnuvaBotAnimator drives:
- root glide between named anchors
- head and body look targets
- left/right arm pose intents
- secondary arm motion
- voiceover-word timing cadence
- DOTween-based motion sequencing
The bot system is data-backed by Assets/StreamingAssets/BotArmPosePolicies.json and optional motion plans loaded from PresentationBotMotionPlan.json. If a plan is missing and generation is enabled, BotMotionPlanGenerator creates a fallback plan from the current PresentationConfig.
Camera And Directing
CamController loads named shots from Assets/StreamingAssets/CameraShots.json. Each shot maps to named scene objects:
| Shot | Follow object | Look-at object |
|---|---|---|
CloseUp |
CloseUpFollow |
CloseUpLookAt |
Medium |
MediumFollow |
MediumLookAt |
FullBody |
FullBodyFollow |
FullBodyLookAt |
Wide |
WideFollow |
WideLookAt |
FullScreen |
FullScreenFollow |
FullScreenLookAt |
PresentationConfig.directing.camera.shot values in sample configs use names such as bot_screen_medium_static, while CameraShots.json uses CloseUp, Medium, FullBody, Wide, and FullScreen. The controller contains fallback/random shot behavior, so the current config shot taxonomy is only partially aligned with Unity's shot registry.
Virtual Screens
Screen implementation has three recognizable tracks:
| Track | Files | Notes |
|---|---|---|
| Direct texture display | PresentationController, presentationRenderer, Quad_Image / material surfaces |
Loads first image per scene and assigns it to a material. |
| Legacy Reveal/Vuplex bridge | VuplexRevealBridge.cs, SyncWebTime.cs, StreamingAssets/dist, presentation.html, auto-animate.html |
Supports deterministic web animation ticking for capture experiments. |
| Generated multi-surface screens | AnuvaVirtualScreensPlaybackController, AnuvaScreenBridgeHost, AnuvaScreenHtmlBuilder, StreamingAssets/AnuvaVirtualScreens/ |
Supports main, companion, and emphasis surfaces with generated HTML and JS bridge commands. |
Runtime Sequencing
The main timeline is coroutine-driven rather than Unity Timeline-driven. PresentationController sorts/prepares scene assets, starts capture, then visits each scene in sequence, applying camera/bot/screen/audio behavior and waiting for resolved scene duration plus pauses.
Unity Timeline package is installed, but no first-party Timeline-driven render lifecycle was confirmed.