Posts

Pigeon Devlog #2: A Cleaner Core, Faster Draws, and Fighting Bugs

Image
Hello again! For the last two weeks, I have been focused on the heart of my Vulkan renderer, "Pigeon." My goal was to refactor the core engine to make it cleaner, easier to understand, and ready for new features. When you work with Vulkan, it is very easy to make a complicated mess. I wanted to fix this early. My new design is much simpler: Context and Device: All the Vulkan setup (like choosing the GPU and creating the logical device) lives in one place. Resources and Lifetime: All the logic for creating and destroying buffers, images, and other resources is now managed separately. The Frame Loop: The main loop is now very clean. It only contains the logic for rendering a frame, not managing resources. This new structure makes it much easier to think about synchronization (making sure the CPU and GPU work together) and memory. For the swapchain, I am using triple buffering. Each of the three swapchain images has its own comma...

Pigeon Devlog #1 — Building a Vulkan Renderer From Scratch

Image
Practical Part: I started a new renderer from zero and I named it Pigeon . Behavioral scientists use pigeons in experiments. They were used not because they are exceptionally smart, but because they are consistent, trainable, and respond predictably to feedback. That is the spirit of this project: small, controlled experiments that learn from results—try, measure, adjust, repeat. Bistro Scene rendered in Pigeon Right now, Pigeon loads and renders glb models without problems. I parse meshes, materials, and transforms, then upload vertex and index buffers to GPU memory. I set up image samplers for textures and a basic PBR-friendly path for albedo and normals, keeping the pipeline simple to debug. It is still a minimal engine, but it already shows the shape of a real tool. Vulkan is different from older APIs because it gives explicit control. I create instances, devices, and queues so I know exactly where work is going. I record command buffers that describe every draw. I manage synch...

Subsurface scattering

Image
Hello everyone, and welcome to the final blog post of my advanced ray tracing course journey! In this project, I worked on implementing the subsurface scattering (SSS) algorithm described in Jensen’s 2001 paper titled “A Practical Model for Subsurface Light Transport.” [1] I must say that this has been one of the most challenging papers I have encountered so far, as it contains extensive mathematical theories on how to render translucent materials. Dragon Scene rendered with Subsurface Scattering (SSS) Introduction Jensen's paper introduces a method for approximating subsurface scattering using a bidirectional surface scattering distribution function ( BSSRDF ). [1] Subsurface scattering is essential for rendering translucent materials realistically because many materials, like skin, are somewhat translucent in real life. Without this effect, objects may appear completely opaque and unnatural. Subsurface scattering models how light enters a surface, scatters inside the material (o...

Closing the Ray Tracing Journey: BRDFs, Object Lights, and Path Tracing

Image
Hello everyone and welcome to the sixth and final blog of my ray tracing journey! In this assignment, I have implemented BRDFs, Object Light and Path Tracing features in Raven. While I titled this blogpost with “Closing the Ray Tracing Journey”, it actually marks the beginning of my exploration into Path Tracing world. I look forward to dedicating my time to learning more about this exciting world. Sponza Scene with 100 samples rendered in 24 min 1. BRDFs BRDFs (Bidirectional Reflectance Distribution Functions) determine how much light is reflected from a surface based on the angles of incoming and outgoing light. They are essential for calculating diffuse and specular shading at a specific point on the surface. Until now, we have only used the Blinn-Phong shading model. With this assignment, the following types of BRDFs will be supported: Phong Modified Phong Normalized Modified Phong Blinn-Phong   Modified Blinn-Phong Normalized Modified Blinn-Phong   Torrance-S...