Shader setup

Set the normal image node to Non-Color, pass it through a Normal Map node, then connect that node to the Principled BSDF Normal input.

  • Normal, height, roughness, metallic, AO and ORM: Non-Color
  • Albedo: sRGB
  • Normal Map node Space: Tangent
  • Use Displacement node and sufficient geometry for true displacement

ORM in Blender

Use Separate Color to split the ORM texture. Red contains AO, green roughness and blue metallic. Blender does not require ORM, but one packed texture can simplify interchange with real-time engines.

Export an OpenGL normal map for Blender

Choose the Blender preset or OpenGL (+Y) before export. Blender's tangent-space Normal Map workflow uses the +Y convention, and the texture should look predominantly blue-purple. Keep the opengl suffix in the filename when moving the asset between tools so it is not mistaken for an Unreal-style −Y map.

If a DirectX normal is the only available source, invert green once before the Normal Map node. Avoid inverting the complete image. Verify the conversion with a raised mark under moving light; when only one axis appears recessed, the Y convention is the most likely issue.

Build the Blender normal node chain

Add an Image Texture node, load the normal file and set Color Space to Non-Color. Connect Color to the Color input of a Normal Map node, keep Space set to Tangent and connect the Normal output to the Principled BSDF Normal input. The image UVs and the tangent basis must correspond to the UV map used by the material.

Start Normal Map Strength near one and adjust while watching real lighting. The node interprets RGB as direction data; connecting the image directly to the BSDF Normal socket or leaving it in sRGB produces incorrect vectors. Normal mapping affects shading but not geometry, silhouette or true self-shadowing.

Set color space for every texture

Base color is color information and normally uses sRGB. Normal, height, roughness, metallic, AO and ORM textures are numerical data and should use Non-Color. This prevents the color-management transform from bending values before the shader uses them. The grayscale appearance of a map does not make it color; its role in the material determines the setting.

When diagnosing a material, inspect the Image Texture nodes first. An accidental sRGB roughness can shift midtones and change highlights, while an sRGB normal can distort directions. Keep view-transform choices separate from texture data settings: changing the display look should not be used to compensate for incorrectly sampled material maps.

Connect roughness and metallic

Connect a Non-Color roughness texture to Principled BSDF Roughness and a Non-Color metallic texture to Metallic. White roughness spreads reflections and black roughness sharpens them. Metallic should follow actual conductive material regions, not image brightness. Paint, stone, wood, plastic, rust and dirt remain dielectric even when they cover or sit beside metal.

Generated masks provide local variation but cannot identify every substance from a photograph. Correct coatings, exposed edges, fingerprints and wet areas manually. Judge roughness with moving highlights in rendered preview, and avoid pure extremes unless the material truly needs a mirror-like or exceptionally diffuse region.

Separate and use the ORM channels

Load the ORM texture as Non-Color and use Separate Color to access its red, green and blue outputs. Red contains ambient occlusion, green contains roughness and blue contains metallic. Connect green and blue to their Principled inputs. Blender does not require a packed ORM file, so separate maps are equally valid when clarity or independent resolution matters.

Ambient occlusion has no universal direct Principled input. Use it conservatively in a node group or export workflow according to the renderer and delivery target. Avoid permanently crushing Base Color with AO, especially when Cycles or Eevee already provides indirect shadowing. For glTF-oriented materials, the ORM-style ordering aligns with the familiar occlusion, roughness and metallic packing convention.

Use height for bump or displacement

For inexpensive surface relief, load height as Non-Color, pass it through a Bump node Height input and connect the Bump Normal output into the shader normal chain. Confirm whether white should be high and use Distance and Strength sparingly. Bump changes shading only and leaves the silhouette unchanged.

For true displacement, use a Displacement node, sufficient mesh subdivision and renderer settings that support geometry displacement. A 16-bit height texture reduces stepping in smooth gradients. Establish the midpoint and scale on a simple plane before applying the map to production geometry, because excessive displacement can open seams, cause intersections and distort silhouettes.

Check UVs, tiling and tangent seams

Tileable textures need continuous opposite borders and repeated UV sampling. Test them on a plane at multiple scales. Unique baked normal maps need padding around UV islands and a tangent basis consistent with the bake. Mirrored islands, changed triangulation or mismatched custom normals can create seams that no green-channel conversion will solve.

Use the same UV map for the Image Texture and the Normal Map tangent calculation. If artifacts follow polygon edges, inspect shading, Auto Smooth or custom split normals and the mesh export path. If they follow the top-to-bottom direction everywhere, inspect OpenGL versus DirectX instead.

Preview and troubleshoot the Blender material

Use a neutral world or studio light and rotate it around the object. Disable displacement and AO while validating normals, then restore other maps one by one. A weak normal may be low strength or sampled incorrectly; noisy highlights usually mean too much fine detail; a uniformly plastic surface points to roughness range or color-space errors.

Compare Material Preview and the intended final renderer because lighting and displacement support differ. Check the texture at the final UV density rather than only close up. Preserve the separate maps and source settings even when delivering a packed texture so future edits do not require reconstructing channels.

Blender material checklist

Export OpenGL +Y, set normal and every numerical map to Non-Color and use a Tangent-space Normal Map node. Connect roughness and metallic by material meaning, separate ORM channels when packing is useful and choose Bump or true Displacement deliberately. Check UV continuity, strength, height midpoint and renderer settings.

Finish with moving light, several object shapes and the final material scale. If the asset will be exported to glTF or a real-time engine, confirm that the target packing and normal convention remain compatible. Clear filenames and a retained unpacked source set make that handoff substantially safer.

  • Blender preset: OpenGL +Y
  • Normal node: Image Texture Non-Color to Tangent Normal Map
  • ORM: Separate Color with R AO, G roughness, B metallic
  • Height: Bump for shading or Displacement with sufficient geometry

Save a reusable node group

For repeated assets, package the verified normal, ORM and height connections into a clearly labeled node group. Expose normal strength, roughness adjustment, AO influence and displacement scale while keeping channel separation and Non-Color assumptions documented. A reusable group reduces wiring mistakes, but each Image Texture still needs the correct file and color-space setting. Test the group with known flat normal, roughness and metallic values before adopting it across a library, and preserve a simple ungrouped reference material for troubleshooting future Blender or exporter changes. Name every socket by its expected data role and range.

Ready to verify the workflow? Open the texture workspace and use the matching engine preset before export.