UV-Less Material Authoring with Medium Density Nanite Meshes
A side view of the estate showing painted wood, exposed brick, limestone rendering, and aged copper gutters.

A side view of the estate showing painted wood, exposed brick, limestone rendering, and aged copper gutters.

The procedural colorization being applied in Houdini, starting with curvature, blended with AO, and finally blended with grunge/tone in the blue channel.

The procedural colorization being applied in Houdini, starting with curvature, blended with AO, and finally blended with grunge/tone in the blue channel.

Various objects with base materials assigned. A kettle with copper and iron, a brass lighting fixture, an aged wooden corbel, a terracotta workshop floor, and a green lacquered wooden section of the storefront.

Various objects with base materials assigned. A kettle with copper and iron, a brass lighting fixture, an aged wooden corbel, a terracotta workshop floor, and a green lacquered wooden section of the storefront.

An exterior view of the main portion of the estate showing various different materials applied to various portions.

An exterior view of the main portion of the estate showing various different materials applied to various portions.

UV-Less Material Authoring with Medium Density Nanite Meshes

One thing I've found to repeatedly be true while working on my solo-project Triton, is that building a full 3D game by yourself requires taking as many shortcuts as possible. The art budget is one single person, so from concept to implementation an asset needs to be able to get into the editor as fast as possible. Hand modeling every single asset, UV-unwrapping, texturing in Substance Painter (or another DCC), and then importing everything into Unreal is simply too many hours spent to ship in a reasonable timeframe. So Triton ships with no texture maps at all. Every single surface in the game (well, to be fair, *almost* every single surface in the game) is composed procedurally at runtime from data baked into each mesh.

Models are sculpted as VDBs and adaptively reduced to uniform triangle density. There is no manual retopo, no manual (or auto) UV unwrapping. In fact, there are no UVs at all. One single composite mask is baked from the geometry into each vertex color channel: signed curvature in red (0.5 flat, above convex, below concave), ambient occlusion in green, and fractal wear in blue. Height and gradient are computed in the shader from position rather than baked, so nothing is pinned to a scale.

Inside Unreal, all material instances derive from one of 3 master materials that pertain to shading models (opaque, glass, foliage). A single HLSL custom node drives the entire material, with vector parameters exposed to define colors such as base color, wear color, cavity color, and edge color, as well as scalar parameters exposed to control PBR material attributes such as base roughness, base metallic, AO, and noise strength. Objects needing their material instances to subscribe to the game's occlusion system can simply override the shading model from Default Lit to Masked and they will react accordingly.

What this allows me to do is build an environment with a very small subset of raw materials (copper, brass, wood, iron, fabric, slate, dirt, etc.) that can be applied to any object in the game world without the need for tweaking UVs or building custom textures. In addition, it also greatly reduces memory consumption because at any given moment there are essentially no textures that need to be loaded.

More artwork