Skip to main content

SurfaceGrowth

Development preview — not yet released on Fab.

SurfaceGrowth adds material-based moss, lichen and organic film to static surfaces. Its procedural masks work without texture maps or UV unwrapping. Use the supplied material instances for a quick result, or blend the effect into an existing material through Material Attributes.

Eight SurfaceGrowth presets in the Unreal Engine overview map

Native examples​

The same camera, lighting and base material with Intensity set to zero and one:

Original surfaceForest Moss
Original stone surface with growth disabledForest Moss with fine surface relief

Moss and lichen on architecture beside a clean comparison

Quick start​

  1. Open SurfaceGrowth.uproject with Unreal Engine 5.0.3.
  2. Open SurfaceGrowth/Maps/L_Overview to compare the eight presets. L_Closeup shows surface detail; L_Environment places clean and conditioned versions of the same architecture side by side.
  3. Duplicate a material instance from SurfaceGrowth/Materials/Presets and assign it to a static mesh.
  4. Start with Coverage, Scale and Intensity, then adjust the appearance controls.

The demo uses a fixed camera and a visible mouse cursor. It requires no First Person template or project ActionMappings. Use the editor viewport to inspect other angles.

Presets​

PresetUse
ForestMossDense green surface growth
DryMossMuted olive and brown growth
SilverLichenPale, irregular crust-like islands
GoldenLichenWarm yellow lichen patches
DampFilmDarker, smoother organic film
RoofMossUpward-facing growth preference
EarlyColoniesSparse initial patches
CleanEffect disabled for comparison

Use with an existing material​

The two reusable functions are in SurfaceGrowth/Materials/Functions.

  1. Add MF_SurfaceGrowth_Mask to your material. Connect Absolute World Position minus Object Position to Position for the mapping used in the examples. Connect VertexNormalWS to Normal for upward bias.
  2. Connect an intensity scalar to Intensity. Optionally connect a painted or baked grayscale mask to AuthoredMask. White allows the effect and black excludes it.
  3. Add MF_SurfaceGrowth_Apply. Connect your original Material Attributes to Base Material.
  4. Connect each named output from the mask function to the matching input on Apply: Coverage Mask, Surface Detail, Fine Detail, Height and Surface Gradient. Surface Gradient supplies the tuft relief.
  5. Set the two colors, roughness and relief. Connect the returned Material Attributes to your material output, or break the attributes into your existing graph.

The application function blends the incoming attributes with the growth layer. Intensity = 0 produces a zero coverage mask, preserving the incoming material. The mask output can also drive your own layer blend without using Apply.

Controls​

ControlMeaning
IntensityOverall effect strength, 0–1
CoverageArea occupied by growth, 0–1
AuthoredMaskAdditional scalar or grayscale mask multiplier
Vertex Mask InfluenceIn the supplied master, 0 ignores vertex paint; 1 uses vertex color red
ScalePattern scale in Unreal centimeters; larger values create larger patches
RotationRotation around the mapping Z axis, in degrees
SeedPattern variation
LichenBlend from moss-like detail to crust-like lichen morphology
UpwardPrefer upward-facing surfaces using the supplied normal
Shadow Color / Tip ColorDark and light growth colors
Surface RoughnessRoughness of the applied layer
Relief StrengthShading relief; does not displace vertices

The example master also includes Base Color, Base Roughness, Base Metallic, Base Scale, Base Grain and Base Relief. These procedural stone/timber substrate controls belong to the example material; they are not required by either reusable function.

Migration​

Migrate the entire SurfaceGrowth Content folder into the destination project's Content directory. Keep its folder name so references remain intact. The package has no dependency on another Surface Tools product and no runtime plugin dependency. Python and Editor Scripting Utilities are used only by the author's production tools and are disabled in the release project.

Scope and limits​

This is surface shading. It does not create plants, vines, fuzzy silhouettes, geometry, biological growth or automatic cavity detection. Supply a mask when you need precise placement in crevices. Upward bias uses the surface normal, not weather or moisture simulation.

The example mapping follows object translation while retaining world-axis orientation. Use Rotation, or provide your own coordinates, when an object rotates. Very small patterns can alias at long distances. Profile the procedural math in your own scene; no universal frame-rate or mobile performance claim is made.

The functions use pixel derivatives to filter fine detail and produce shading relief. Use the masks with pixel-stage material properties, not directly with World Position Offset. Apply preserves incoming vertex attributes; animated geometry itself remains untested.

The development baseline is Unreal Engine 5.0.3 on Windows, DirectX 11, including native captures and a packaged demo launch. The same content archive also passed native loading and Windows cook in UE 5.8.2; rendering in 5.8.2 has not been inspected. Other versions, mobile, VR, landscape, translucent materials and animated meshes require project-specific testing. The supplied examples use opaque Default Lit static meshes.

The example master measured 1644 pixel-shader instructions in UE 5.0.3 / SM5. This is a procedural material with a substantial math cost; profile your final material and target hardware. The number is not a frame-rate guarantee.

Included content​

Two material functions, one example master, eight material instances, two supporting demo materials, three demo meshes, two demo Blueprints and three maps. No texture maps are included. Epic BasicShapes are used only as supporting demonstration geometry under Demo.

Documentation image