PBR texture formats are not a style choice. EXR, PNG, and JPEG store different amounts of light and color, compress in different ways, and fail in different places. Pick the format per map type and you keep quality without filling a 4 TB drive. This guide is for Blender, Unreal, Unity, V-Ray, and Corona—not for printing photos.
What each format is actually good at
PNG is lossless at 8 or 16 bits per channel. It is the workhorse for albedo, roughness, metalness, AO, and tangent normals. File size is larger than JPEG, but you do not invent block artifacts on a roughness edge. JPEG is 8-bit, lossy, and small. It is fine for albedo on mobile or web previews if you export at high quality. It is a bad home for data maps. EXR (OpenEXR) holds high dynamic range, 16- or 32-bit floats, and optional extra channels. Use it when values go above 1.0 or you need clean displacement.
Color space is independent of the container. Albedo stays sRGB (or the working display space). Roughness, metalness, normal, AO, and height stay non-color / linear. Putting a linear roughness map in a JPEG and then tagging it sRGB is two mistakes stacked. Map roles: albedo, normal, and roughness.
Albedo: PNG first, JPEG only if you must
Albedo is color without lighting. 8-bit PNG is enough for most wood, concrete, and painted surfaces. 16-bit PNG helps if you grade heavily or the source is a 16-bit scan. JPEG can flatten subtle grain and add halos around dark grout. If a client portal limits upload size, keep a JPEG preview and a PNG master in the same pack folder. Library downloads from Locker3d are meant to be used as authored; do not recompress albedo “to save a few megabytes” on a still frame that will be printed 3 meters wide.
Data maps: PNG or EXR, never casual JPEG
Roughness and metalness are single-channel ideas. Store them as PNG (often in RGB with duplicated channels, or packed). JPEG quantization changes a 0.35 roughness into a mottled 0.31–0.40, which reads as noise in the specular. Normal maps encode vectors. Compression that is invisible on a photo becomes wavy detail on a wall. Height and displacement want 16-bit PNG or half/float EXR so a 2 cm bump does not stair-step. Packing ORM (occlusion, roughness, metalness) into one PNG is standard for games; see texture packing.
EXR for lighting and high-end displacement
Environment lighting is not a PBR albedo. An HDRI needs values far above 1.0 so a sun can light a room. That is EXR (or HDR), not JPEG. Pairing a clipped panorama with correct PBR maps still looks dull; the format of the sky matters as much as the format of the floor. Lighting setup: HDRI and PBR lighting.
In film and product work, displacement and cryptomatte-style workflows also live in EXR. For a game hero, 16-bit PNG height is usually enough. For a close-up CNC-looking metal, EXR displacement is cheaper than adding millions of triangles. Resolution still matters: an 8K JPEG albedo is not “higher quality” than a 2K PNG if the JPEG is mush. Use the resolution guide with this article, not instead of it.
Engine and disk practicalities
Unreal and Unity will often transcode PNG to a GPU format (DXT, ASTC, BC5 for normals) at import. The source should still be clean. Blender reads PNG and EXR natively; JPEG is fine for lookdev albedo only. VRAM is the real limit on GPU renders—see GPU vs CPU rendering. Keep masters organized so you do not convert the same pack five times; organize your texture library.
License does not change the format. CC0 maps from Locker3d can be converted, packed, or resized for a build. More reading on the blog.
Frequently asked questions
Which format should I use for albedo, normal, and roughness?
PNG is the default for albedo and data maps. Use 16-bit PNG or EXR for height. JPEG is only a fallback for albedo when file size wins.
When is EXR worth it for PBR textures?
HDR environments, 32-bit displacement, and multi-channel EXR pipelines. Not for 8-bit roughness masks.
Can I store a normal map as JPEG?
Avoid it. JPEG artifacts distort the normal vectors and show as crawling bumps.