Twin DocsVideo to world model to Blender to Omniverse
3D twin Operations GitHub

Solution architecture

The AWS architecture below is the reference design, and its solid parts are deployed today. The same design maps onto Azure and Google Cloud.

Food bank digital twin on AWS: step 1 video to twin, step 2 connect data on AWS, step 3 visualize and act
AWS, deployed. Solid borders are in the repository today (AWS SAM template, simulated data) and running in us-east-2. Dashed borders are the real-floor path, designed and priced on the Cost page. Source: arch_aws.drawio.

Implemented versus designed

ComponentStatus
Amazon S3 (twin assets, static site copy)Live
Amazon API Gateway HTTP API, throttled to 5 requests a secondLive
AWS Lambda (Python 3.12, arm64): /telemetry, /operations, /healthLive
CloudWatch Logs, 7-day retentionLive
Browser viewer on GitHub PagesLive
EC2 GPU (g6.xlarge) running Omniverse Kit, terminated after each sessionRendered (facility rendered on runs 6 and 7; splats blank)
IoT Core for LoRaWAN, IoT Core MQTT, rules engine, ingest Lambda, DynamoDB, WMS import, SNS alertsDesign only (priced)
AWS Budgets alert ($10, set on the account, not in the template)Live

Cost controls

Every part bills only while it is used. Lambda and API Gateway bill per request, so an idle twin costs almost nothing. Container jobs (a warehouse import, a scene rebuild) can run on ECS with Fargate, billed per second and scaled to zero. Fargate has no GPUs, so Omniverse runs on EC2 GPU capacity with a minimum of zero instances: started for a session and terminated after.

Azure and Google Cloud

Designs only, never deployed. Azure IoT Hub has no LoRaWAN network server, so it needs a partner server. Google Cloud IoT Core was retired in August 2023.

Azure design of the same twin
Azure, design only. arch_azure.drawio
Google Cloud design of the same twin
Google Cloud, design only. arch_gcp.drawio

All three diagrams are generated by paper/diagrams/make_diagrams.py from one shared layout and open in draw.io.

Contracts between steps

The steps share data, not code. Any box can be replaced without changing the others.

BoundaryArtifactRules
1 to 3twin.usda, facility.usdz, zone .usdz and .spz, *.meta.jsonOpenUSD, metres (metersPerUnit = 1), Y-up, floor at y = 0; splats as ParticleField3DGaussianSplat
2 to 3GET /telemetryzones[] (temperature, setpoint, humidity, door, status, position) and forklifts[]; positions in metres in the twin frame; simulated flag; additive changes only
2 to 3GET /operations, operations.usdaareas[], inventory[], flows[], kitchen, trucks, keyed by master-data ids

Why OpenUSD

OpenUSD is an open-source Alliance for OpenUSD project. Version 26.03 added the native ParticleField3DGaussianSplat schema, which makes a splat capture a first-class USD asset rather than a vendor format. With USD as the pivot, choosing a renderer is a deployment decision, not an architecture change. Omniverse mixes open components with an NVIDIA-licensed runtime; production licensing should be confirmed with NVIDIA. More: docs/ARCHITECTURE.md.