Remote · EU

Adrian Rodrigues

Senior Graphics / Rendering Programmer

I make Unreal Engine 5 games run faster on PS5, Xbox Series X|S and PC. I profile the frame, find which part of a pass actually costs time, and fix it in the renderer or in the content. In my own time I build Cerberus, a Vulkan renderer with a hardware ray-traced path tracer.

Cerberus path tracer rendering Sponza with a helmet, a gun model, two spheres and a cube, denoised with A-SVGF
Cerberus path tracer 1 spp · 4 bounces A-SVGF denoiser 315,832 triangles Vulkan KHR ray tracing
Professional work

Frame-time wins on shipping UE5 projects

Results from my work at Third Kind Games (Virtuos). The current project is unannounced and under NDA, so only the pass, the change and the measured result are shown.

PassChangeResult
Virtual Shadow MapsUnannounced UE5 project · PS5

Changed how shadow animation updates are handled for skinned foliage.

~29% cheaper
Nanite VisibilityUnannounced UE5 project

Profiled the pass and found voxels (~28%) and programmable raster (~20%) were its largest costs. Built tools to switch foliage Nanite settings to voxels and tuned programmable raster, density and rasteriser configuration.

~20–25% cheaper
Virtual Texture uploadsUnannounced UE5 project

Reduced the upload spikes that caused frame hitches.

~30–40% lower spikes
Nanite raster & Base PassUnannounced UE5 project · PS5

Broke both passes down against the platform budget with A/B tests: masked materials, WPO, derivative-heavy shading and vertex-side material features. Turned the findings into a prioritised action plan for Art and Tech Art.

~7–10% per item
D3D12 RHIMavrix · PC

Diagnosed and fixed AMD-specific crashes when adding Ray Tracing Pipeline State Objects, with vendor-specific handling in the RHI.

Crash fixed
Upscaling & scalabilityMavrix · PC, PS5, Xbox Series X|S

Designed a graphics settings framework for DLSS, FSR 4 and frame generation, and per-platform Performance and Quality modes built on Device Profiles.

Settings framework
Virtual Shadow MapsMavrix

Added a distance-based ray-count falloff for Shadow Map Ray Tracing and custom cache invalidation for large, streamed worlds.

Lower sampling cost at distance

Percentages are approximate and measured on the project's own captures. Bars show the share of the pass's cost removed.

Personal project

Cerberus

A Vulkan renderer written from scratch in C++20. It has two scene renderers you can switch at runtime: a forward PBR rasteriser and a hardware ray-traced path tracer with its own denoiser. Both run on a render graph over a thin RHI.

Cerberus editor with the path tracer viewport, renderer settings for the SVGF denoiser and the GPU profiler panel
Editor · denoiser controls, render graph and GPU profilerFrame total (GPU) 12.97 ms
VK_KHR_ray_tracing_pipeline

Hardware path tracer

Raygen, closest-hit and miss shaders, BLAS/TLAS builds with compaction, a shader binding table and bindless textures. One sample per pixel, BSDF-sampled indirect light and next-event estimation for directional lights.

A-SVGF

Real-time denoiser

Demodulated diffuse and specular signals. Temporal reprojection with consistency checks and a ReLAX-style search fallback, virtual reprojection for reflections, a history-fix pass and variance-guided à-trous filtering.

RenderGraph

Render graph

Passes declare what they read and write. The graph sorts them, derives every barrier from real per-frame access history, merges compatible passes into one Dynamic Rendering scope, culls unused passes and times each pass on the GPU.

RHI

Engine and editor

Typed command lists for graphics, compute, transfer and ray tracing, handle-based resource ownership and deferred deletion. A forward renderer with shadow cascades and GPU-baked IBL, and an ImGui editor.

// one frame, one submit
Editor / Application
  └─ SceneRenderer          Forward | PathTracer   // only the active one is alive
       └─ RenderGraph       declared access → order, barriers, scope merging
            └─ Command lists  graphics · compute · ray tracing
                 └─ Cerberus RHI → Vulkan
View the source on GitHub C++20 · Vulkan · GLSL · Apache 2.0
Experience

Four years inside the Virtuos group

Virtuos

Jun 2022 – present
Feb 2025 – present
Senior Graphics / Rendering Programmer · Third Kind Games

Unannounced UE5 project under NDA (since Jul 2026) and Mavrix (Feb 2025 – Jul 2026). GPU and CPU performance on PS5, Xbox Series X|S and PC; engine-level renderer changes.

Nov 2024 – Feb 2025
Senior Graphics Programmer · Black Shamrock

Judas, Unreal Engine 4. Time-sliced, on-demand reflection-probe generation for procedurally generated content; mentored a junior developer.

Aug 2023 – Nov 2024
Graphics Programmer · Black Shamrock

Judas, Unreal Engine 4. Render-state streaming to cut primitives processed per frame; backported UE5 compute visibility to UE4.

Jun 2022 – Aug 2023
Junior Graphics Programmer · Virtuos Paris

Judas, Unreal Engine 4. Culling to reduce draw calls and lighting optimisation within performance budgets.

Master's in Computer Science, Instituto Superior Técnico, Lisbon (2019 – 2021) · Bachelor's in Computer Science, University of Lisbon (2016 – 2019)

Earlier projects

Before Cerberus

GLSL

Progressive Path Tracer

A progressive path tracer written entirely in shaders.

C++

Ray Tracer

An offline distributed ray tracer on the CPU.

C · OpenGL

OpenGL engines

Engines built for university graphics courses, with particles, bloom and cel shading.

Contact

Open to fully remote senior rendering roles

adrianrodriguesm.dev@gmail.com