MOC Textures for Stylized Materials in Unreal Engine
Close-up of a MOC texture for a crumbling plaster wall

Close-up of a MOC texture for a crumbling plaster wall

Each channel holds specific mesh vertex data (red: Mask, green: Occlusion, blue: Curvature)

Each channel holds specific mesh vertex data (red: Mask, green: Occlusion, blue: Curvature)

Example of simple wooden beams procedurally modeled and all sharing the same material instance, sampling MOC textures from a texture array

Example of simple wooden beams procedurally modeled and all sharing the same material instance, sampling MOC textures from a texture array

A stone staircase utilizing a baked out MOC texture. Because we are only sampling 1 single texture to generate the entire look, the memory footprint is significantly lower, and some can be reallocated to mesh vertex density

A stone staircase utilizing a baked out MOC texture. Because we are only sampling 1 single texture to generate the entire look, the memory footprint is significantly lower, and some can be reallocated to mesh vertex density

Adding basic parameters to control remapping of each channel's output without needing to re-export a new texture from Houdini

Adding basic parameters to control remapping of each channel's output without needing to re-export a new texture from Houdini

Source meshes need to be of a sufficient (and uniform) density to produce best results. A round-trip conversion from polygonal surface to VDB and back simplifies this

Source meshes need to be of a sufficient (and uniform) density to produce best results. A round-trip conversion from polygonal surface to VDB and back simplifies this

Generating the necessary data and packing them each into their respective color channels

Generating the necessary data and packing them each into their respective color channels

MOC Textures for Stylized Materials in Unreal Engine

MOC (Mask, Occlusion, Curvature) textures are something I developed and implemented while experimenting with various art styles for a solo project I am developing. The goal was to create a texturing & material pipeline that:

* was extremely quick to process and apply for new assets
* had a low memory footprint compared to traditional PBR texture workflows
* did not require jumping between multiple DCC tools (these all go directly from Houdini to Unreal)
* leveraged procedural generation and could be almost entirely automated
* produced a good (and unique) looking result

Because these textures are constructed from procedurally generated vertex data that is then packed into the RGB color channels, there is the added benefit that it is possible to bypass the need for UV unwrapping or generating textures at all. When utilizing high density meshes via something such as Unreal's Nanite, it is possible to simply store the relevant information in the FBX vertex color data and read that back in the material editor to construct similar results.

More artwork