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.

Native examples
The same camera, lighting and base material with Intensity set to zero and one:
| Original surface | Forest Moss |
|---|---|
![]() | ![]() |

Quick start
- Open
SurfaceGrowth.uprojectwith Unreal Engine 5.0.3. - Open
SurfaceGrowth/Maps/L_Overviewto compare the eight presets.L_Closeupshows surface detail;L_Environmentplaces clean and conditioned versions of the same architecture side by side. - Duplicate a material instance from
SurfaceGrowth/Materials/Presetsand assign it to a static mesh. - 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
| Preset | Use |
|---|---|
| ForestMoss | Dense green surface growth |
| DryMoss | Muted olive and brown growth |
| SilverLichen | Pale, irregular crust-like islands |
| GoldenLichen | Warm yellow lichen patches |
| DampFilm | Darker, smoother organic film |
| RoofMoss | Upward-facing growth preference |
| EarlyColonies | Sparse initial patches |
| Clean | Effect disabled for comparison |
Use with an existing material
The two reusable functions are in SurfaceGrowth/Materials/Functions.
- Add
MF_SurfaceGrowth_Maskto 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. - Connect an intensity scalar to Intensity. Optionally connect a painted or baked grayscale mask to AuthoredMask. White allows the effect and black excludes it.
- Add
MF_SurfaceGrowth_Apply. Connect your original Material Attributes to Base Material. - 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.
- 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
| Control | Meaning |
|---|---|
| Intensity | Overall effect strength, 0–1 |
| Coverage | Area occupied by growth, 0–1 |
| AuthoredMask | Additional scalar or grayscale mask multiplier |
| Vertex Mask Influence | In the supplied master, 0 ignores vertex paint; 1 uses vertex color red |
| Scale | Pattern scale in Unreal centimeters; larger values create larger patches |
| Rotation | Rotation around the mapping Z axis, in degrees |
| Seed | Pattern variation |
| Lichen | Blend from moss-like detail to crust-like lichen morphology |
| Upward | Prefer upward-facing surfaces using the supplied normal |
| Shadow Color / Tip Color | Dark and light growth colors |
| Surface Roughness | Roughness of the applied layer |
| Relief Strength | Shading 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.

