A seamless PBR texture is a set of maps that can repeat across a surface without a visible edge. Creating one is different from downloading a ready pack: you have to fix the wrap on every channel, keep lighting out of the albedo, and choose a resolution that matches how close the camera will get. This walkthrough covers a practical photo-to-PBR path you can finish in a 2D editor plus Blender.

Capture a usable source photo

Shoot the surface as flat-on as you can, in even overcast light or open shade. Hard sun bakes shadows into the color, and those shadows will tile as repeating blotches. Fill the frame with the material—plank wood, poured concrete, brushed metal—so you are not stretching a tiny patch later. Shoot RAW if possible, then develop with a neutral white balance and no extra contrast. Crop to a square power-of-two region (1024, 2048, or 4096) before you start cloning.

Make every map tile with the offset method

In Photoshop, GIMP, or Krita, run an Offset filter of half the width and half the height. The original edges jump to the center as a cross. Clone, heal, or stamp across that cross until the join disappears, then offset again to confirm. Repeat this on albedo first; it is the map viewers notice. Then apply the same wrap to roughness, ambient occlusion, and height. A normal map cannot be cloned like color: rebuild it after height is seamless, or the lighting will flip at the seam. When you test, plug the maps into a plane with UVs that span 0–1 several times. If a line appears only on the normal, the height wrap is still broken.

  • Albedo: remove highlights, dirt shadows, and your own silhouette.
  • Roughness: paint from surface micro-detail, not from photo glare.
  • Height: keep a mid-gray average so displacement does not explode.
  • Normal: generate from the finished height, then check OpenGL vs DirectX.

Map slots and color space

PBR only looks correct when each file lands in the right slot and color space. Albedo (base color) is sRGB. Roughness, metalness, ambient occlusion, and height are linear / non-color. Normals are also linear; they go through a Normal Map node or sampler, never straight into Base Color. Metalness should be near 0 or 1, not a muddy gray, unless you are faking dirt on metal. If you multiply ambient occlusion into albedo, do it in the shader so you can disable it under baked lighting. For a recap of the maps themselves, read the complete PBR textures guide and the beginner start page.

When to export 1K, 2K, or 4K

Resolution is about pixels on screen, not pride. A 4K wood floor that covers a hallway in a first-person view is worth the memory. The same 4K map on a distant facade wastes VRAM and download time. Use 1K for trim, bolts, and objects that occupy a small part of the frame. Use 2K as the default for real-time props and most archviz furniture. Use 4K for hero floors, kitchen islands, and stills where the camera sits a meter away. Keep albedo, roughness, and normal at the same size; a 4K color with a 1K normal looks soft in close-ups. If you need a ready 4K tile, browse wood, concrete, or metal on Locker3d instead of upscaling a noisy phone photo.

Common mistakes when authoring seams

The usual failure is fixing only the albedo. A perfect color wrap with a broken roughness map still flashes a shiny line every tile. Another mistake is leaving baked lighting in the photo: the material will look “painted on” under a new HDRI. Do not invert roughness by accident (some older packs ship glossiness). Do not save JPEG for roughness or normals—use PNG or TIFF. After export, apply the set in Blender with the steps in how to apply PBR textures in Blender. Locker3d textures are free CC0, so you can mix your custom tile with library maps in commercial work; see what you can and cannot do with CC0. More process notes live on the blog.

Frequently asked questions

What makes a PBR texture seamless?

A seamless PBR texture tiles so the left edge matches the right and the top matches the bottom on every map—albedo, roughness, normal, and metalness—not only on the color image.

Do I need to generate every PBR map from scratch?

No. Start with a seamless albedo, then derive roughness and height from grayscale detail. Bake or filter a normal from height. Paint metalness only where metal actually exists.

Which resolution should I export for a seamless material?

Use 1K for distant or repeating trim, 2K for most real-time props, and 4K for hero floors and close camera work. Keep every map in a set at the same resolution.