C++ · Shaders · ML2025–26

Graphics Programming

Material-Guided Decoders

Joint estimation of material properties and HDRI lighting, since illumination estimation is central to realism in inverse rendering. A ResNet-50 backbone with FiLM conditioning predicts environment lighting from a single image, trained on a Blender pipeline built for ground-truth lighting. Adding material parameter regression as a second task produced far more convincing relighting than the baseline CNN, despite lower pixel-wise accuracy.

Material-Guided DecodersMaterial-Guided Decoders
Project poster. Open the PDF above for a readable version.

Project poster. Open the PDF above for a readable version.

Pure C++ Raytracer

Physically based rendering entirely in C++, no external libraries: reflection, refraction, soft shadows and multi-bounce global illumination from scratch.

Normal Repainter

A Blender plugin that gets painterly or cel-shaded effects by repainting normal maps with k-nearest neighbors. Accurate, smooth, and fast even on 4K images.

Same mesh, three normal treatments: source shading, painterly repaint, cel repaint.Same mesh, three normal treatments: source shading, painterly repaint, cel repaint.Same mesh, three normal treatments: source shading, painterly repaint, cel repaint.

Same mesh, three normal treatments: source shading, painterly repaint, cel repaint.

In texture space: painted albedo, the source normal map, and the k-NN repainted normals before and after smoothing.In texture space: painted albedo, the source normal map, and the k-NN repainted normals before and after smoothing.In texture space: painted albedo, the source normal map, and the k-NN repainted normals before and after smoothing.In texture space: painted albedo, the source normal map, and the k-NN repainted normals before and after smoothing.

In texture space: painted albedo, the source normal map, and the k-NN repainted normals before and after smoothing.

Applied to a character: baseline smooth shading, then increasingly painterly repaints.Applied to a character: baseline smooth shading, then increasingly painterly repaints.Applied to a character: baseline smooth shading, then increasingly painterly repaints.Applied to a character: baseline smooth shading, then increasingly painterly repaints.Applied to a character: baseline smooth shading, then increasingly painterly repaints.

Applied to a character: baseline smooth shading, then increasingly painterly repaints.

Procedural City GenerationTencent

Built as a C++ Unreal Engine intern at Tencent, Lightspeed Studios. Procedural generation for large-scale 3D environments, with custom HLSL shaders and rendering pipelines tuned against RenderDoc captures. A configurable mesh instancing system cut draw calls by 55%, and multi-threaded dynamic lighting drives a day/night cycle with thousands of concurrent lights.

Procedural City GenerationProcedural City GenerationProcedural City Generation
← Previous
Pol-XR
Next →
Games