Sandstone Texture PBR Guide: Desert Rock, Cliff Walls, and Sediment Shading

tutorialsandstonepbrnormal-mapterrainarchitecture

Sandstone is one of the most commonly misrepresented surfaces in game environments and architectural visualization. Artists often grab a photoscanned desert photo, slap it onto a cliff mesh, and call it done. The result: blotchy, uniform slabs with no visual hierarchy, UV stretching along vertical faces, and absolutely none of the layered geological character that makes real canyon walls compelling to look at. A production-ready sandstone texture needs to balance macro bedding plane stratification, meso grain and cross-bedding detail, and micro quartz grit — all without repeating visibly across a 200-metre cliff face.

Macro 3D render of cream sandstone cliff wall showing horizontal sedimentary bedding planes, cross-bedding striations, and porous grit normal map detail

Realistic sandstone demands clear horizontal stratification, visible cross-bedding stripes, and high-frequency quartz grit — three frequency bands that must coexist without fighting each other.

Sedimentary rock like sandstone forms under water, grain by grain, over millions of years. Each visible layer records a distinct episode of deposition, erosion rate, and mineral composition. Faithfully encoding this geological narrative into your shader is what separates a convincing canyon from a painted box. Below is the full technical workflow for authoring, blending, and shading PBR sandstone textures in Blender, Unreal Engine 5, and V-Ray.

The Geology of Sandstone and What It Means for Shaders

Sandstone forms when quartz sand grains are compacted and cemented together by mineral-rich groundwater (silica, calcite, or iron oxide). The specific cement type determines the rock’s color and hardness:

[Sandstone Mineralogy → Shader Parameters]
Iron Oxide (Hematite) Cement  → Rich ochre / terracotta Base Color, Roughness 0.70–0.88
Silica (Quartz) Cement         → Pale cream / off-white, sharper facets, Roughness 0.60–0.78
Calcite (Limestone) Cement     → Warm buff / tan, slightly softer edges, Roughness 0.72–0.90
Feldspar-Rich (Arkose)         → Pink-gray mottled, Roughness 0.65–0.82
  1. Bedding Planes (Macro): Horizontal lamination layers deposited by ancient rivers or ocean currents. These appear as parallel color and roughness bands running across the cliff face. In a shader, they manifest as a slow-variation gradient (1–5 metres wavelength) modulating both Base Color lightness and Roughness.
  2. Cross-Bedding (Meso): Diagonal or curved striations formed by ancient dune migration and current ripples. They create the most visually distinctive pattern in sandstone — angled bands that cut through horizontal bedding at 10–30 degrees. This frequency is captured in a tiled normal map with moderate amplitude (Strength: 0.15 – 0.40).
  3. Quartz Grain Grit (Micro): Individual sand grains from 0.0625 mm to 2 mm in size introduce ultra-high-frequency surface roughness. This tile layer keeps the rock surface from appearing smooth and plastic when the camera is within arm’s reach.

Porosity: Why Sandstone Differs Optically from Granite

The critical distinction is porosity. Sandstone is a porous sedimentary material with much larger inter-grain voids than igneous granite. Pores scatter incident light into very broad, soft diffuse lobes. Sandstone never shows sharp specular glints at standard roughness values — rough granite can, but sandstone diffuses nearly all light.

PBR Sandstone Parameter Calibration Table

Different geological formations and weathering environments produce radically different sandstone appearances. Use this reference matrix to configure your PBR shaders:

Sandstone FormationBase Color (RGB Hex)Roughness RangeMetallicNormal Map ProfileMicro Detail Tiling
Navajo Sandstone (Desert Red)#C4724A (Iron ochre red)0.78 - 0.920.0Bold horizontal bands with large rounded wind-eroded pits12x – 18x
Cream Buff Sandstone (UK)#E3D8C0 (Warm pale cream)0.70 - 0.840.0Tight parallel laminae, fine cross-bed diagonals16x – 24x
Zion Canyon Vermilion#B8543B (Deep terracotta)0.82 - 0.940.0Sweeping curved Aeolian cross-beds, wind-pitted alcoves8x – 14x
Wet / Rain-Soaked Sandstone#7A5A40 (Deep wet amber)0.35 - 0.550.0Same structure, amplified; adds water film planar normal12x – 20x
Bleached Desert Sandstone#F0E8D8 (Bone white)0.80 - 0.960.0Low contrast, subtle wind-polish microgrooves20x – 32x

Note: Sandstone is 100% dielectric. Metallic must remain 0.0. Iron oxide banding should be expressed exclusively through Base Color variation — not through any Metallic or Specular override.

Step-by-Step: Building a Multi-Tier Sandstone Cliff Shader

Follow this layered approach in Blender or Unreal Engine 5 to produce convincing desert canyon walls:

  1. Establish Macro Bedding Bands via World-Y Gradient: Use a World Position input node and extract the vertical Y (or Z in Z-up coordinate systems) component. Feed it through a gradient ramp to generate alternating light and dark horizontal color bands. These should have wavelengths of approximately 0.5m to 3m in world space. Clamp the ramp output between 0.75 and 1.0 and multiply it against your Base Color to modulate brightness without destroying saturation.

  2. Layer Diagonal Cross-Bedding Normals: Rotate a seamless sandstone normal map tile by 12° to 22° off-horizontal to simulate aeolian dune cross-stratification. Use a Texture Coordinate > Mapping node set in object space to apply the rotation. Keep normal strength at 0.15 – 0.30 to suggest diagonal layering without creating an obvious rotated tile pattern.

  3. Blend Micro Quartz Grain: Sample a high-frequency sand grain normal map at 16x to 24x world-space tiling. Blend it into the cross-bed normal using Reoriented Normal Mapping (RNM) — never mathematical addition:

    [RNM Blend: Sandstone Normal Stack]
    Macro Bands (Geometry Bake) ──────────────────────────────┐
    Cross-Bed Normal (12° rotated, Strength 0.20) ──[RNM A]───┼──> [RNM B] ──> Shader Normal
    Micro Grain Normal (16x tile, Strength 0.08) ─────────────┘
  4. Mask Wet Zones via Cavity and World-Z: Rain-wet sandstone saturates darker and drops roughness sharply. Use the inverted AO cavity map to accumulate wetness in sheltered crevices. Feed the cavity mask through a Smoothstep curve to control the transition between Roughness: 0.85 (dry exposed face) and Roughness: 0.38 (rain-soaked protected ledge).

  5. Apply Triplanar Projection to Prevent UV Stretch: For large terrain meshes and vertical cliff walls, use world-aligned triplanar texture projection. Calculate blend weights from the absolute world-space normal and normalize:

    float3 weights = pow(abs(WorldNormal), 6.0);
    weights /= (weights.x + weights.y + weights.z);
    float4 final = SampleXZ * weights.x + SampleYZ * weights.y + SampleXY * weights.z;

    Triplanar projection eliminates the vertical UV-stretch that makes sandstone look like it was printed on a scroll of wallpaper.

Creating Custom Sandstone Textures and Normal Maps

Sourcing accurate multi-layer sandstone normal maps that capture true geological cross-bedding stratification from generic photoscanning libraries is unreliable. AI-assisted generators can synthesize physically accurate height fields from text descriptions, extracting sedimentary band structure and micro-grit detail simultaneously.

If you need to generate production-ready sandstone normal maps, bedding plane displacement fields, and complete PBR texture sets for desert canyon environments, streamline your environment pipeline with our Free Online Normal Map and PBR Generator — Try Desert Sandstone Canyon. You can also generate seamless tileable sandstone surfaces for large architectural facades and game terrain with our Seamless Texture Generator Online.

Sandstone Shader Production Checklist

  • Macro bedding bands driven by world-space vertical gradient, not UV painting.
  • Cross-bedding normals rotated 12° – 22° off horizontal to simulate aeolian dune deposition.
  • Micro quartz grain tiled 16x – 24x in world space and blended via RNM.
  • Metallic locked to 0.0; iron oxide color variation expressed through Base Color only.
  • Roughness range calibrated between 0.70 – 0.94 (dry exposed face); drops to 0.35 – 0.55 in wet cavity zones.
  • Triplanar world-space projection applied to eliminate vertical UV stretching on cliff faces.
  • Wet zones masked via inverted AO cavity with Smoothstep roughness blend.

Related reading: Rock Texture PBR Guide · Dirt Sand Texture Seamless Guide · Normal Map Creation Workflows · Grass Texture Seamless Terrain Guide

Ready to create your own materials?

Turn any image into a production-ready PBR texture in seconds.

Open NormalMap.ai Editor