Eden

Eden is my at-home project: a renderer built from scratch originally with D3D11, but since rebuilt from the ground up in D3D12. I like to share things I learn while working on it (right, wrong, and in-between), but I also write adjacent posts here and there when I take breaks from it.



How to Compact Acceleration Structures in D3D12


A guide to saving significant amounts of memory when using DXR. Click here to see the full post.



Using D3D12 in 2022


A step-by-step guide made to jump-start the understanding of how to use DirectX 12 using more modern API features. Click here to see the full post.



Learnings As a Graphics Lead


List of things I think I've learned in my few years of being a lead. Click here to see the full post.



Finding Your Home in Game Graphics Programming


In this post, I talk about some of the current difficulties with learning graphics, and provide a bunch of resources to get you started. Click here to see the full post.



Reframing "Tonemapping" in Games


Rant about tonemapping. Click here to see the full post.



TAA Starter Pack


In this post, I detail a step-by-step implementation of TAA and provide a boat-load of links to learn about it. Click here to see the full post.



Perceptual Lightness for Game Graphics


A quick code snippet demonstrating a complementary perceptual utility to the luminance dot product for use in "lightness" based calculations. Click here to see the full post.



On the Perceived Inevitability of Unreal


Some ramblings about the impact of Unreal (and other tech) on the in-house engine side of the game industry. Click here to see the full post.



A Failed Adventure in Avoiding Temporal Anti-Aliasing


I thought I could avoid temporal AA, and I was mostly wrong! I've detailed my thoughts from this adventure. Click here to see the full post.



Binding Bindlessly


In this post, I provide an introduction to binding resources "bindlessly" in modern graphics APIs. Click here to see the full post.



An Opinionated Post on Modern Rendering Abstraction Layers


The title here pretty much says it all. Part abstraction design tutorial, part ranting about abstraction methodology. Click here to see the full post.



Applying For Entry Level Graphics Jobs in Games


Taking a break from my engine posts, I detail what is hopefully a practical guide to preparing for your first graphics job application. Click here to see the full post.



Water Walkthrough


In this post, I detail an implementation of water rendering that covers a wide variety of details on how to do it. Click here to see the full post.



Learning D3D12 from D3D11


In these posts, I detail DX12 concepts and ways someone could implement wrappers around the API having come from a DX11 background. This is not meant to show the best way of doing things, more just to relate prior concepts to make the new API feel more familiar.
Part 1: Getting Started, Command Queues, and Fencing
Part 2: GPU Resources, Heaps, and Descriptors
Part 3: Textures




Adaptive Exposure from Luminance Histograms


Luminance histograms are a solid drop-in replacement for older style downsampled average luminance. In this post, I detail the implementation of basic luminance histogram shaders. Click here to see the full post.



RTX On - Quickstart Guide to DXR (Experimental)


Got a DXR-compatible card? Want the bare minimum to get into the DXR Experimental API without digging through a bunch of samples? Click here to get started in minutes.
No longer applicable, the experimental API has been replaced by the full DXR release.




Moving To D3D12


It's been a long time since my last post! Apart from the standard work/life reasons, I've also been rebuilding my engine completely in D3D12. In the near future I'll be detailing all the work that went into it. It's been quite the journey into pipeline states, fencing, async compute, multi-frame buffering, and beyond! Definitely worth the effort though, DX12 is fast and powerful.




Area Lighting


Area lighting can add a lot to game scenes, and with a physically based lighting model, they look even better! In this post, I'll be detailing the implementation of sphere, tube, and one-directional rectangular area lights.
Click here to see the full post.



Screen Space Ambient Occlusion - SSAO


SSAO stands for Screen Space Ambient Occlusion, the screen space technique for rendering a kind of shadowing that occurs when objects in close proximity block ambient lighting near each other. This tutorial covers SSAO implementation.
Click here to see the full post.



Physically Based Rendering


Before moving much further into adding lighting technology in my engine, I wanted to lay the foundation of physically based lighting. There are some great papers on the math behind it, but I've yet to see an implementation example online, so I'm sharing mine! This is my first pass at getting it to look right, and I draw much of my inspiration for the final look from what I've seen Unreal and Unity3D do with theirs.
Click here to see the full post.



Sample Distribution Shadow Maps


A little while ago, my lead mentioned his friend at another studio was using SDSM for their shadows. I'd never heard of it before, and it seems that most other companies haven't either since it is used in very few games right now. I imagine it will become more popular, because these are the best looking shadows I've ever seen - far exceeding the standard PSSM implementation in pretty much every aspect. Since the code is heavily dependent on your renderer implementation, I haven't included my own code here. However, I've attached a powerpoint that gives a quick overview of how the technique works before you dive into the paper. You'll also find the original code sample there. Admittedly, this technique is a bit tricky to implement, especially compared to other shadowing techniques, but if I can do it I'm sure you can too!
Download the powerpoint



Cascaded Shadow Maps with Soft Shadows


Shadow mapping is one of those things that is difficult to be satisfied with. At this point, I've read dozens of articles, papers, blogs, etc. about different shadow mapping implementations, and it quickly became clear that there's currently no perfect (or even near-perfect) way to do them. It is possible to get something that looks pretty good though, and you can use little tricks to minimize the drawbacks. My hope is that by the end of reading this, you'll be able to implement and understand the complete flow of cascaded soft shadow maps, and the advantages/disadvantages to the techniques I use.
Click here to see the full post.

Contact