Interview Project Showcase¶
Welcome to the technical demonstration project showcasing an automated 3D rendering pipeline using Apache Airflow, Perforce and Kubernetes Jobs.
I did it as a way to demonstrate some of the skills required for the position. I also refrained from mentioning the role or company in the documentation as per the interview process guidelines.
You can also see the source code for this documentation project in the GitLab repository.
The result of the pipeline are the .blend files to render the animation below.
Watch it in 4K/60fps full screen for best experience.
As the notes are fast and synchronized with the visual elements, Bluetooth headphone latency might be perceptible. If so, use wired headphones or speakers for optimal audio‑visual sync. Watch on YouTube for the looped version, also automatically calculated by the animation scripts.
See many other examples of videos created by this same automation script.
Project Overview¶
The centerpiece is an automated 3D animation, physics-based, where marbles interact with musical instruments to create both visual and audio experiences.
Infrastructure¶
Proxmox VE Hypervisor, self-hosting Apache Airflow, a k8s cluster with 2 nodes, SMB storage, a Perforce server and many other auxiliary services in multiple VMs.
- Proxmox VE - Virtualization infrastructure: storage, VMs and container management
- Asset storage: Self hosted perforce server with SMB shared storage for assets. Read from prod depot during pipeline runs.
- Orchestration: Airflow DAGs managing rendering workflows via Kubernetes jobs.
- Kubernetes - Container orchestration and job management, also hosting this documentation site
- Blender - Blender API automated by scripts and used for rendering using an external render farm.
Workflow Call Flow¶
sequenceDiagram
participant User
participant Airflow
participant K8s
participant FetchContainer
participant Perforce
participant SMB
participant BlenderContainer
User->>Airflow: Trigger DAG
Airflow->>K8s: Submit asset fetch job
K8s->>FetchContainer: Run fetch container
FetchContainer->>Perforce: Fetch assets
FetchContainer->>SMB: Store assets
K8s->>Airflow: Fetch job completion
Airflow->>K8s: Submit rendering job
K8s->>BlenderContainer: Run Blender container
BlenderContainer->>SMB: Access assets
BlenderContainer->>SMB: Store outputs
K8s->>Airflow: Rendering job completion
Airflow->>User: Notification
Technologies Demonstrated here¶
Just a quick summary of the main technologies used in this project, not exhaustive:
- Virtualization: Proxmox VE, KVM/QEMU
- Containers: Kubernetes, Docker
- Orchestration: Apache Airflow, Kubernetes Jobs
- Version Control: Perforce Helix Core, Git/Gitlab
- 3D Graphics: Blender 3D, Blender API, Cycles Render Engine
- Automation: Python, Bash scripting, Linux
- AI Integration: GitHub Copilot. I am using AI as a tool to speed up development and learning.