Skip to content

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.