Import and material setup

Assign the generated normal texture to Normal Map in StandardMaterial3D and enable the normal feature. Check the import hints if the texture was not recognized automatically.

  • Use OpenGL / +Y
  • Keep roughness, metallic, AO and ORM as data
  • Use Repeat for tiling materials
  • Adjust normal depth in the material after import

Channel packing

Custom shaders can read the supplied ORM convention directly. StandardMaterial3D exposes texture channels individually, so select the corresponding source channel or use separate maps when that is clearer.

Export the Godot normal-map convention

Select the Godot preset or OpenGL (+Y) before export. Godot's standard 3D material documentation specifies X+, Y+ and Z+ normal coordinates, commonly described as OpenGL style. Keep the convention suffix in the filename so a map received from an Unreal or DirectX workflow is not connected without conversion.

If a source is −Y, flip only its green channel or use Godot's relevant channel-remap import option. Do not invert the entire texture. Test a clearly raised shape under a moving light; a reversed top-to-bottom response indicates convention, while UV seams or face-dependent gradients usually indicate tangent or mesh problems.

Import a normal texture into Godot

Add the OpenGL normal texture to the project and inspect its import options. Assign it to the normal texture property of StandardMaterial3D and enable the normal feature where required by the material interface. Godot uses the texture to change the incident lighting direction; it does not modify collision, silhouettes or the underlying mesh.

Begin with a moderate normal depth and evaluate on the real asset. Excessive depth amplifies capture noise and texture compression. If the map looks weak or distorted, verify that it is recognized as normal data and that no color-space treatment or second green-channel inversion has been introduced by the import setup.

Configure albedo and material data

Albedo represents color and uses the normal color-texture path. Roughness, metallic, ambient occlusion, height and packed ORM represent numerical material values. Keep these data textures linear so middle values reach the shader unchanged. Import hints and material slots can help, but inspect the final resource configuration rather than relying on filename detection alone.

A grayscale image is not automatically color or data based on appearance. Its material role determines the correct sampling. Wrong color treatment can shift roughness highlights, metallic thresholds and height midpoints even when the thumbnail seems reasonable. Diagnose with a simple material and neutral light before tuning values to compensate.

Set roughness and metallic channels

Roughness controls the spread of reflections: lighter values are rougher and darker values are smoother. Metallic identifies bare conductive material, while paint, plastic, stone, wood, rust and dirt remain dielectric. Generated textures are adjustable approximations because a single photograph cannot determine physical material identity from brightness.

StandardMaterial3D exposes material properties and textures with configurable source channels. Select the channel that actually contains the data and verify the response with moving highlights. Correct layered materials manually, particularly chipped paint, oxidation, wet regions and polished wear where albedo structure does not map directly to roughness or metallic behavior.

Use ORM with Godot materials

Normal Map Maker packs ambient occlusion in red, roughness in green and metallic in blue. Godot provides ORMMaterial3D for a combined occlusion, roughness and metallic texture, while StandardMaterial3D uses separate texture properties and channel selections. Choose the material type that matches the asset and project architecture rather than unpacking or packing without a reason.

Import ORM as data, not color. Confirm red, green and blue routing explicitly and retain the separate generated maps for editing. Packing reduces texture samples and simplifies interchange, but all channels then share resolution, compression and mip behavior. A project may prefer separate maps when one property needs different detail or quality.

Apply ambient occlusion conservatively

Texture AO represents small-scale local occlusion inferred from height. It can clarify cracks and recessed material features, but it cannot replace geometry-aware baking or scene lighting. Connect it through the material's AO workflow and keep the effect subtle. Permanently multiplying it into albedo can double-darken the surface when Godot adds other indirect or screen-space occlusion.

Compare the material with AO enabled and disabled in bright and dark environments. Large black patches usually indicate excessive source contrast, radius or strength. For unique assets, combine material-scale detail with a mesh bake carefully and avoid applying both at full strength to the same cavities.

Use height in a Godot shader workflow

A height map stores relative elevation but requires a shader technique to affect the rendered surface. Depending on the project, it may drive parallax, custom vertex displacement or another material function. Establish whether black or a midpoint represents the base level and begin with a small scale. Normal mapping remains the more efficient choice for detail that does not need to alter silhouettes.

Use 16-bit height when visible displacement needs smooth gradients and ensure the mesh has sufficient subdivisions for the desired feature size. Validate intersections, edges and shadows on the actual geometry. Eight-bit height can remain suitable for shallow effects where the additional precision is not visible.

Tiling, filtering and import quality

Enable repeat behavior for textures whose opposite edges were prepared to tile, and test them on a plane with several UV repetitions. Clamp is more appropriate for decals and isolated images. A visible boundary can originate in albedo, height, normal, roughness or AO, so inspect channels separately rather than hiding it with stronger material settings.

Mipmaps and compression must be evaluated at the target platform and camera distance. Fine normal noise can shimmer, subtle roughness can disappear and packed masks can develop blocks. Compare with a lossless or less-compressed reference before changing the authored map, then choose import quality that balances stability, memory and the importance of the material.

Troubleshoot a Godot PBR material

If vertical bumps are reversed, confirm OpenGL +Y and remove any unintended green flip. If the whole normal response is skewed, check import recognition and linear handling. A glossy material may have roughness sampled from the wrong channel, while metallic-looking paint indicates a mask that follows brightness instead of substance.

AO that looks like permanent black paint may be too strong or combined incorrectly with albedo. Seams that follow UV borders need source padding or tile repair; seams that follow mesh faces may involve tangents and vertex normals. Disable every optional map, restore one at a time and inspect the material under a neutral movable light.

Godot material checklist

Export OpenGL +Y, connect the normal through the standard normal property and keep numerical textures linear. Use StandardMaterial3D with explicit channels or ORMMaterial3D for the combined red AO, green roughness and blue metallic layout. Configure repeat, filtering and compression for the target platform, and test any custom height workflow on final geometry.

Review the material at gameplay distance in more than one environment. Preserve separate maps beside the packed asset and document the convention, channel order and import decisions. Those details make later engine upgrades, shader changes and collaborative handoffs safer than relying on thumbnails or ambiguous filenames.

  • Godot preset: OpenGL +Y
  • Normal map: standard normal texture with verified import hints
  • ORM: R ambient occlusion, G roughness, B metallic
  • Data maps: linear sampling with target-platform validation

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