The OP said they wanted to do splatoon mechanics, so I’m assuming that tutorial was only relevant in as much as it represented a possible path to the goal.
I think decals/sprites are going to scale badly for that. I’d be happy to be proven wrong, but my gut feeling is that as the level gets painted and your set of decals/sprites builds up, performance drops.
Using a paint texture (or textures…) does have down sides; unless you pull fancy shader tricks you’ll potentially see texel artifacting, and you’ll probably have to design the level geometry with at least some concessions to how the textures are tiled if you aren’t stretching one huge texture over the level.
On the other hand, the paint texture solves several potential problems:
It scales well; unless you do something very weird in the shaders, performance should be largely unrelated to how much paint is on the map. The paint texture is always there, so you’re always paying the cost, but that means you can plan for it.
Coverage and checking whether an area is painted become trivial; you keep a separate PackedByteArray
on the CPU side that has a cell for every texel in the texture, and when you splat paint onto the texture you also splat values into the coverage array. Any tests you want to do, any coverage stats, you can do directly on the CPU-side array rather than having to query the actual texture or read from the GPU. The byte array could be a bitmap (that is, one bit per texel), or it could be wider if you want to allow for multiple colors.
Change detection becomes easy. If you want to determine whether the paint color of a texel is changing, you can look in the CPU-side array before you write to it. So, if (say) you have a powerup that you have to pick up by painting the floor under it, you can do that relatively easily.
I have actually built a system like this in the past (admittedly, in the 90s), and it does work.