It’s a year later, and I still haven’t seen or heard anything about decal improvements
Just to clarify, the way CryEngine handles its decals allows artists to apply a decal material to any piece of geometry, which means artists can make their own decal planes or tiling decal strips by hand much more efficiently than placing a thousand splat actors in the engine.
As far as I’ve discerned, the decal material in CryEngine just overwrites the buffers of whatever channels it’s flagged to alter while ignoring/not contributing to the depth (combined with an 8-bit alpha that allows for decal opacity). This means artist can feather the edges of decals softly but don’t incur any of the expenses associated with alpha transparencies. You can even float geometry with decal materials applied far away from any other geometry and it will just look strange but it works fantastically if used correctly hovering just in front of a surface (contributing to color, roughness, normal, etc. while pulling the depth from the scene behind it).
This means an artist could have a single decal normal map, say a tiling one that represents worn/cracked edges for the corner of a building, and flag the decal material to only be used in the normal buffer. The artist could then wrap that tiling decal strip around any edge they wanted - vertical edges, horizontal, curved archways (good luck placing decal actors all around an archway curve right now), etc. and have that one decal be used to affect any underlying material. Underlying materials in this building example could include plaster, brick, paint, painted brick, concrete, etc. all using that one decal material.
This is how the P.T. game did the great looking worn/chipped edges on all the walls. They had a tiling strip strips of geometry with normals that created softened/weathered edges and simply wrapped those around all the hard 90° corners. If you’ve played the game, there’s an inlet in a corner with a curved archway inset that would be either impossible or wildly inefficient to recreate with the splat-actor-only decal system we’re currently stuck with.
Or if they had some kind of liquid smear decal, the artist may have generated alpha, normal, and roughness maps. They could then set up various decal materials that use these same maps but only affect certain channels to create different effects:
- Decal using a red Color + Roughness + Normal = Blood
- Decal using Roughness + Normal = Thick but clear liquid
- Decal using Roughness only = thin wet area on surface
If the decal smear was either tiled or a slightly elongated image, the artist could then take this one texture and map it to a curved poly strip to make it look like something had been dragged around. Telling visual stories becomes possible when the artist has control over the geometry being used with the decal material. The artist could draw figure-8s with a tiling decal strip if they wanted to using this system, or create large scale graffiti, set the decal material to fade with vertex color to give extra variation to the material and using their ability to cut in their own edges/verts/polys.
I just can’t believe we haven’t seen any real strides made in getting a decent decal system running, since any artist who’s ever dealt with large-scale level art - especially dealing with buildings/structural work and tiling textures, could tell you just how powerful a good decal system is to creating believable and unique details. Simply having square splat actors that have to be manually placed in the engine just isn’t very elegant and absolutely terrible if you ever have to go back and revise something (like say reduce the number of windows on a building from 4x5 to 3x4, meaning any ‘leaky drip’ decals you had placed under windows now have to be manually moved in the editor, rather than it being quick and easy for an artist to move in their 3d package).
Just to show exactly what I mentioned above, here are some of the other images from Crytek’s (now several years old) documentation on how powerful this system can be for artists. Note that there’s almost no way to do nice edge strips like this in UE4 right now without resorting to hard-pixellated masked materials (which would also have a fixed material and couldn’t be used on a variety of surfaces like plaster, concrete, brick, etc. like a normal-only decal material could) or expensive, incorrectly-lit transparency that has alpha sorting issues: