Skip to main content

Project · 2023

URP

Custom URP render features and post-processing, built during an 8-week software specialization.

URP

Tags

  • Unity
  • Shaders
  • HLSL

Project info

Role
Technical Artist
Team
Solo
Duration
8 weeks
Engine
Unity 2022.3
Languages
C#, CG, HLSL

Overview

During the elective Verdieping Software, I focused on deepening my understanding of the Universal Render Pipeline and shader programming. Developed during my time at NeoN Origins, it became a personal R&D project centered around post-processing and custom render features.

It began with a user story from Operation Starfall: I want the game to feel like watching an 80s NTSC TV. That became my starting point for learning post-processing, experimenting with ShaderGraph, and studying shader fundamentals.

Two features came out of it and were delivered: a Tint renderer feature and a Chromatic Aberration effect. Everything after that is exploration.

Slide 4 of presentation

Custom Post-Processing

I implemented a Tint Renderer Feature with custom volume overrides. This allowed designers to tint the entire screen with adjustable strength. Two scripts work together to apply it: TintRendererFeature and CustomPostScreenTint.

Renderer feature

A new TintPass is created and assigned, and the assigned pass is then enqueued to the renderer in use. This is the injection of the pass into the graphics pipeline.

Code snippet: Tint Renderer + TintPass

Volume override

CustomPostScreenTint adds a float and a color to the inspector, with booleans to turn each on or off.

Accessible tint intensity & color in the Unity inspector.

What went wrong

I was stuck for two weeks getting the screen tint to render at all. The shaders were fine, I had simply forgotten to add my renderer feature to the renderer.

Chromatic Aberration

The effect started as an experiment in UV space, eventually evolving into a full post-processing pass with tweakable intensity.

ShaderGraph prototype: RGB channel offset per object.
Fullscreen effect: RGB channels split across the entire screen with customizable offset.

The UV-space version applies the effect within the bounds of a 3D object rather than screen-wide. Each channel is manipulated based on altered UV input, simulating color fringing in a localized, object-contained way.

Localized UV-space chromatic aberration prototype.

Both implementations separately manipulate and recombine the color channels to form new RGB vectors, then blend them with a sampled source using a strength-controlled EffectMultiply parameter.

Final fullscreen chromatic aberration graph. The annotations show how the RGB channels are offset and recombined.

Exploration

After delivering the core features, I kept exploring shader techniques:

  • Color bleeding via blurred offsets
  • Depth testing using normalized values
  • Multipass rendering
  • Color spaces, manually converting between RGB and YUV

Most of these resulted in glitchy, trippy visuals, but each experiment revealed something new about the rendering pipeline.

Results of the exploration experiments.

In Photoshop I illustrated additive RGB blending. Red and green combine as expected, but blue remains a mystery?

Illustration of additive RGB blending in Photoshop.

Shader curiosity

Outside of Unity, I explored shader languages and rendering pipelines. I experimented with CG, HLSL and GLSL, and learned how ShaderLab structures SubShaders, Passes and HLSL includes. I also collected notes on shader stages (vertex, fragment, geometry, etc.), realizing I was only scratching the surface.

This gave me the foundation to move from node-based workflows to structured shader code, a skill I now apply across graphics projects.

A screenshot sample of my beginner template on writing shaders.

Takeaway

This project was a turning point where I delivered two production-ready URP features. It gave me hands-on experience with post-processing, custom renderer features, and shader architecture. It built a foundation that continues to shape my path.

It showed me how shader math, rendering theory and artistic direction come together, and confirmed I wanted to keep exploring the technical art side of game development.

Resources