Dynamic Decals
Unity’s First Screen-Space Decals
First Release
I built dynamic decals in about 6 months after I’d broken my wrist & couldn’t continue my normal job. Alongside the first released I built a website to market the product & give it an air of credibility.
The Unity community responded really well & gave a bunch of really valuable feedback. Within the first few weeks, I had multiple patches out fixing various issues.
Linked below is the more or less mandatory forum thread for official support, & to the right, is my first demo video.
Version 2.0
For the user, 2.0 had a few new demos & performance improvements. Internally, it was an entire refactor.
I realized pretty early on that game objects have significant overhead & that if I wanted to draw thousands of decals cheaply I’d have to do away with them. So I switched the system to record decals in custom pools. These would manage the decal instances without the need of a game object & render them using GPU instancing.
I didn’t want to break existing workflows though, so Decal Projectors attached to game objects could still be used as normal, but internally they would request & manage an instance from one of these decal pools.
End Of Life
A Massive Success
At it’s peak, Dynamic Decals became one of the most popular & highest monthly grossing tool assets in the asset store, selling thousands of copies.
Both Scriptable Rendering Pipelines (URP & HDRP) have now implemented an almost identical screen-space decal solution with light layers (identical to mask layers) built in. While these lack a lot of the tooling I built around Dynamic Decals, at their core they’re using the same techniques.
Open Source
I deprecated the asset when Scriptable Rendering Pipelines were announced. Unity had already announced in-built decal solutions for HDRP & I expected similar solutions to follow for URP, making my asset more or less redundant in the long term.
There were calls from people still using the built-in rendering pipelines to keep the asset up, but I didn’t feel right accepting money for something that I couldn’t port into the new rendering pipelines.
Eventually, I decided to make it open source & let the community using it manage & maintain it. A member of the community now has it hosted on Github for all to use.