In general, we only allow textures to be made from photo-based sources, using either photogrammetry or photometric stereo workflows.
While we refer to our content as "textures" what we're actually talking about is complete PBR materials made up from several maps.
Every asset on Poly Haven needs a unique “slug”: A standardized name that is unique and serves as the ID for that asset.
The slug can be thought of as the machine-readable name. We also support having a separate Display Name, which is shown on the website and in some plugins. This is generated automatically, but can also be manually specified if needed.
The slug has a number of important requirements as it is used for technical purposes in a number of places (file names, database keys, URLs, Blender collections...). These requirements are:
a-z), numbers (0-9), and underscores (_).¶ Contractors & Asset Donors
Do not stress too much about the uniqueness of your chosen slug; just focus on choosing something suitable and descriptive.
We will check ourselves to see if it matches any other assets, and we have tools to change the slug easily if needed.
These are the suffixes used in image file names to denote the map type, e.g. "red_brick_03_diff.png".
We standardize these map types to ensure consistency across all textures, and allow automations and validations.
diff: Diffuse, Albedo, Base Colour, Colourrough: Roughness, Inverted Specular Mapmetal: Metallicnor_gl: Normal map in OpenGL formatnor_dx: Normal map in Direct X format (we will automatically generate this, no need to provide it)disp: Displacement, Height, Macro bumpao: Ambient Occlusion, AOarm: Packed: Ambient, Roughness, Metallic (we will automatically generate this, no need to provide it)alpha: AlphaMask, Transparencyemission: Emission Colour on black BGmask: Any Additional masking informationImage files must be named according to this pattern: name_suffix.png. E.g. “patterned_concrete_02_diff.png”.
Do not include the resolution in the image file names (e.g., “…diff_8k.png”).
To help ensure the accuracy of our materials and speed up our review processes, all textures need to include a set of at least two reference photos showcasing the specular/reflective properties of the material, as well as renders created to mimic those photos and demonstrate the similarity.
For example, here is a stained pine table top we turned into a texture:

This reference photo doesn't really help us see the material properties and validate our digital reconstruction.
So we need to capture two more photos instead, perhaps one at a low angle with a light source like a window behind it, and one from above with a small point source nearby like a phone's flashlight:


Based on these references, we can match the material as well as possible, primarily making adjustments to the roughness and normap maps:
![]()
And then, we can create renders which closely match the lighting and camera angle of each photo in order to demonstrate the similarity:


It's best if textures are a 1:1 square aspect ratio, but in certain cases (such as bark textures, or long table tops) this is not practical.
In these cases, it's preferred for the final texture to be a rectangular 2:1 or 1:2 ratio, i.e. 8192x4096 or vice versa.
It's not a train smash to use some arbitrary dimension for good reason, e.g. many of our fabric materials are strange dimensions like 8192x6913 because the pattern tiling is arbitrary, but for consistency sake this should be avoided wherever possible.
In any case, one of the dimensions must always be 8192 or 16384.
In order for the texture to not be stretched, a value must be set on the Mapping node:

Type at the top of the mapping node is set to Point (which is the default), and not Texture.The multiplier should always be positive.
When uploading a non-square texture, be sure to add the non square tag so that the warning badge appears on the website:
