Unity Version: 2021 LTS

Building a custom renderer for Unity - Intro

You can skip this if you don't really care about the context of why I did this!

The Scriptable Render Pipelines (SRPs) are a few years old now and the Universal Render Pipeline (URP) is on track to replace the Built In Render Pipeline (BIRP) when it has complete feature parity.

I recently completed a project that was using the High Definition Render Pipeline (HDRP) to create a beautiful art style and we faced lots of challenges around balancing out the performance and the visual fidelity. During this project I had to quickly get acquianted with obscure GPU API calls and how to interpret information out of native GPU profilers like PIX. I had very surface level knowledge of the difference between URP and HDRP when I started this work. I knew that HDRP could produce 'prettier' results than URP and I knew that it couldn't run on low end devices. I had also learnt another strength of the SRPs is that the SRP Batcher is 'good'. I didn't know how it was just something I read.

By the end of the project I had a bit of a firmer grasp on what actually goes on when a frame is rendered because I had to fix issues around shadow render times and culling etc but it still felt quite surface level. I didn't know actually how shadow rendering works, I just knew how to make the atlas draw faster and what cascades were. Still surface level but a slightly deeper surface.

With the project complete I had time as part of my role to investigate in more detail to actually understand a bit more how (real-time) rendering works. I found a very good video series made by a lecturer at the University of Utah which I could go through to understand better how Interactive Graphics work which is very cool but doesn't help me understand much about the SRPs.

In the Unity slack everywhere there is a dicussion about low level graphics and the SRPs it is inevitable that someone links the series of tutorials from Catlike Coding about building a custom SRP. So for roughly 2 weeks I tried to follow these tutorials as much as possible to hopefully get a grasp on how the SRPs (and real-time rendering in general) work.

That's all as an intro goes but the next post (coming out tomorrow) is going to be discussing ✨Command Buffers✨.


Related Posts