Remote · EU

Adrian Rodrigues

Senior Graphics / Rendering Programmer

I make Unreal Engine 5 games run faster and fit in memory 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

Performance and memory work on 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.

AreaChangeResult
Virtual Shadow MapsUnannounced UE5 project · PS5

Moved skinned-foliage shadow invalidation to the static path and time-sliced GPU invalidation across frames when lighting changes.

~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 rasterizer configuration.

~20–25% cheaper
Nanite visibility bufferUnannounced UE5 project · PS5

Quantified programmable-raster cost with A/B tests: masked materials and World Position Offset accounted for about a tenth of the pass.

~10% of the pass
Base PassUnannounced UE5 project · PS5

Broke down shading with A/B tests and measured the cost of derivative-heavy shading and vertex-side material features; traced most of the cost to a small set of shading groups. Turned the findings into a prioritized action plan for Art and Tech Art.

~7–9% per item
Virtual Texture uploadsUnannounced UE5 project

Reduced the upload spikes that caused frame hitches.

~30–40% lower spikes
MemoryMavrix · consoles

Worked extensively on memory within tight, fixed console budgets (notably Xbox Series S): fixed memory leaks, improved memory management in a custom plugin and used memory profiling tools to drive game-wide optimizations. Backported Unreal Engine fixes for memory, performance and stability.

Memory leaks fixed
Rendering & RHI issuesMavrix · PC

Diagnosed and fixed multiple rendering and RHI issues, including AMD-specific D3D12 crashes when adding Ray Tracing Pipeline State Objects and black-patch artifacts in Runtime Virtual Textures.

Crashes and artifacts 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 rasterizer 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 Programmer · Third Kind Games

Unannounced UE5 project under NDA (since Jul 2026) and Mavrix (Feb 2025 – Jul 2026). GPU performance, memory and stability on PC, PS5 and Xbox Series X|S; engine-level renderer and RHI 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 optimization 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