<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Erfan Ahmadi</title><description>I share my knowledge about computer graphics and math here, the best way I can.</description><link>https://erfan-ahmadi.github.io/</link><language>en</language><item><title>Screen-Space Derivatives in Practice</title><link>https://erfan-ahmadi.github.io/blog/screen-space-derivatives-in-practice/</link><guid isPermaLink="true">https://erfan-ahmadi.github.io/blog/screen-space-derivatives-in-practice/</guid><description>Screen-space derivatives are built into every GPU and available in fragment shader, yet few people know how and when they should use them.</description><pubDate>Tue, 20 Oct 2026 00:00:00 GMT</pubDate><category>Shaders</category><category>Math</category><category>SDF</category></item><item><title>Effortless Simplex Grid</title><link>https://erfan-ahmadi.github.io/blog/simplex/</link><guid isPermaLink="true">https://erfan-ahmadi.github.io/blog/simplex/</guid><description>Deriving the 2D “squash” transform behind simplex noise that turns a square grid into equilateral triangles — a proof instead of magic numbers.</description><pubDate>Tue, 11 Mar 2025 00:00:00 GMT</pubDate><category>Math</category><category>Shaders</category></item><item><title>Frames In Flight Explained</title><link>https://erfan-ahmadi.github.io/blog/frames-in-flight/</link><guid isPermaLink="true">https://erfan-ahmadi.github.io/blog/frames-in-flight/</guid><description>What “frames in flight” really means, how to drive it with timeline semaphores, and how swapchain images limit it.</description><pubDate>Sun, 10 Nov 2024 00:00:00 GMT</pubDate><category>Vulkan</category><category>Synchronization</category><category>Nabla</category></item><item><title>Uploading Textures to GPU — The Good Way</title><link>https://erfan-ahmadi.github.io/blog/texture-upload/</link><guid isPermaLink="true">https://erfan-ahmadi.github.io/blog/texture-upload/</guid><description>The Nabla utility that streams large textures to the GPU in batches through a fixed-size staging buffer, converting formats on the fly.</description><pubDate>Tue, 29 Nov 2022 00:00:00 GMT</pubDate><category>Vulkan</category><category>Nabla</category></item><item><title>Render Target Abstraction over Vulkan and D3D12</title><link>https://erfan-ahmadi.github.io/blog/yugen-render-targets/</link><guid isPermaLink="true">https://erfan-ahmadi.github.io/blog/yugen-render-targets/</guid><description>Weighing designs for one render-target abstraction over Vulkan render passes and D3D12, from framebuffers to imageless framebuffers.</description><pubDate>Sun, 09 Aug 2020 00:00:00 GMT</pubDate><category>Vulkan</category><category>D3D12</category><category>Engine</category></item><item><title>Compute Shader Tech Demo</title><link>https://erfan-ahmadi.github.io/blog/yugen-compute-demo/</link><guid isPermaLink="true">https://erfan-ahmadi.github.io/blog/yugen-compute-demo/</guid><description>Multi-queue submission lands in our renderer backend: two million cubes animated in a compute pass and drawn instanced.</description><pubDate>Fri, 31 Jul 2020 00:00:00 GMT</pubDate><category>Vulkan</category><category>Compute</category></item><item><title>YUGA: The Yugen Asset System</title><link>https://erfan-ahmadi.github.io/blog/yugen-asset-system/</link><guid isPermaLink="true">https://erfan-ahmadi.github.io/blog/yugen-asset-system/</guid><description>YUGA, our chunked asset file format for meshes, textures and shaders, and how shader reflection data is stored inside it.</description><pubDate>Wed, 15 Jul 2020 00:00:00 GMT</pubDate><category>Engine</category><category>Shaders</category></item><item><title>Yugen Engine Introduction: The Rendering System</title><link>https://erfan-ahmadi.github.io/blog/yugen-rendering-system/</link><guid isPermaLink="true">https://erfan-ahmadi.github.io/blog/yugen-rendering-system/</guid><description>Kicking off a journal on building the rendering system of Yugen, our in-house engine: the Vulkan backend, the demo framework and what comes next.</description><pubDate>Sat, 11 Jul 2020 00:00:00 GMT</pubDate><category>Vulkan</category><category>Engine</category></item><item><title>Bokeh Depth of Field</title><link>https://erfan-ahmadi.github.io/blog/bokeh-depth-of-field/</link><guid isPermaLink="true">https://erfan-ahmadi.github.io/blog/bokeh-depth-of-field/</guid><description>Three ways to render bokeh depth of field: circular separable DoF, practical gather-based bokeh, and single-pass depth of field.</description><pubDate>Thu, 31 Oct 2019 00:00:00 GMT</pubDate><category>Post-processing</category><category>The Forge</category></item><item><title>The Forge Examples</title><link>https://erfan-ahmadi.github.io/blog/the-forge-examples/</link><guid isPermaLink="true">https://erfan-ahmadi.github.io/blog/the-forge-examples/</guid><description>Weekend experiments on The Forge: instancing, Blinn-Phong lighting, deferred shading, toon shading, tessellation and bloom.</description><pubDate>Thu, 26 Sep 2019 00:00:00 GMT</pubDate><category>The Forge</category><category>Shaders</category></item><item><title>Introduction to Me</title><link>https://erfan-ahmadi.github.io/blog/introduction/</link><guid isPermaLink="true">https://erfan-ahmadi.github.io/blog/introduction/</guid><description>Who I am, why I wanted to build engines instead of just using them, and why I started this blog.</description><pubDate>Thu, 04 Apr 2019 00:00:00 GMT</pubDate><category>Personal</category></item></channel></rss>