Not too long ago, I was revisiting one of my older Blend files. I browsed the archive and finally found it, opened it up and had a look. I quickly realized that something was wrong. The scene was a splash of pink shades, lighting up the room intensively. Any passersby outside my window would surely suspect a small scale cannabis farm in there. If they didn’t know about missing textures in Blender that is…
Pink surfaces means that Blender could not find the texture file. In most cases, you can go to file -> external data -> find missing files and browse for the location to retrieve them. Blender will search the folder you select and its sub-folders to find the missing textures by file name.
Find missing files, replace blenders pink textures
The scene I was opening was from November 2016 and it looked like this. A project I made for an old Blenderguru contest. It didn’t go well in the contest, but it was one of my most major 3D art accomplishments until that point.
If your scene has one or two missing texture files, you may just browse for them. But if there are anywhere between a handful and a hundred scattered across your hard drive, that could be hard work to find through browsing.
Instead of just browsing and looking through the interface to find the files that may be missing. Go to the file -> external data -> find missing files and hit “report missing files”. Blender will search through the external files it is sourcing and list them in the info editor.
When you open the info editor, you will see something like this.
Keep in mind that these are the file locations where Blender thinks the files should be, but they are not there. However, we can learn a few things from this report. We see the filename, and we may see parts of the file path we may recognize. For instance, I have a folder called textures and one called resources on my network drive. With this info, I may find the location of these files.
Go to file -> external data -> find missing files and browse for the location to retrieve them when you have figured out where they are.
But why did this happen in the first place?
Absolute vs. relative file paths
It has to do with file paths. It may sound technical, but bare with me.
There are two kinds of file paths. Relative and Absolute. An absolute path is probably the one you may be familiar with. On windows, an absolute file path may look like this:
It includes the whole file path from drive-letter to the final file. A relative file path is a path that is in relation to some other file or directory. It may look like this:
The double backslash showing that the path is relative. The full absolute path for this file could then look something like this:
The blendfile is configured to use an absolute path or a relative path. By default, blender uses relative file paths. You can change this by going to File->External data and click ether “Make all paths relative” or “make all paths absolute”.
There are advantages and disadvantages to both types of paths. We should use a relative file path when we have a project with all the files associated with it contained in one folder. One or more blend files and possibly sub-folders for our textures, hdri maps, and rendered images could act as a self-contained project.
However, if you are like me and have been using Blender for a while you may have a library of assets you want to bring in to your project and source directly from the library. If that is the case, we should use absolute file paths.
I will now describe the setup I used to avoid pink textures while using a local library for speed and also be able to export projects that are self-contained.
How to store external assets
I prefer a local asset library. I store it on a NAS device since I work with both my laptop and desktop and want to reach the library from both machines. I map the NAS folder where my library to the same network drive letter on both my machines. This way I have the same absolute path on both machines. In my case, I use K:.
I then have Blender setup to use absolute paths by default. This way, I am free to move the Blend files around and they won’t lose contact with external assets. With relative file paths, I would lose the link between the assets and blend file if I moved either the assets or the blend file. With absolute paths I am able to move the blend file without loosing track of the library.
I use a folder structure like this to keep organized.
First, I have the type of asset, then the name of the service or provider, either from myself or some library on the Internet. The reason for this is that within each provider, there may be different licensing, and for some projects, I may not be able to use a certain license. Then, within each provider I try to stick to their own naming scheme. So if a texture is categorized as wood in the original library, I will categorize it as wood within that provider folder.
Now, I don’t download full libraries of textures. When I need a texture, I will just browse around on the websites I know and think has good textures and just download the ones I need. When I find what I need, I just search my local library for the asset and if it is there, I just use the local copy. If not, I download.
This is the basis of the library structure. The next problem is whenever you want to share a self-contained project.
Sharing a blend file with external data
There are two ways.
The first is to pack the external files into the blend file. The blend file will then act as a container and store all external files within itself. The blend file can become huge, but the benefit is that it does not depend on any other external files. To do this, go to file->external data and select “pack all into .blend”.
You can also check the “automatically pack into .blend” but this would defeat the purpose of not having duplicate files when we don’t need to. Now we can share the blend file. I use this for quick shares when I just want to get the file sent.
For more professional projects and long-term sharing goes like this.
- Copy the file
- Open the copy
- Pack into blend
- Unpack with “use files in current directory” setting.
- This creates a subfolder called “textures” and sources textures from there.
- Use relative file path
- Zip the .blend and texture subfolder
- Share the zipfile
This way I get duplicate data. But it is only temporary. When I archive this project, I can delete any shared versions and keep my original files sourcing from the library. I also have the possibility to add notes and change project details before I share it.
We started with blenders pink textures and ended up with a complete system. Having a good structure for your assets is just good practice, and it helps to avoid more problems than just textures not sourcing correctly. Just being aware of relative and absolute file paths can get you a long way to understanding why life sometimes is an untangled mess of corrupt data paths.
I hope you enjoyed reading, and as always, please share this so that others may benefit. It also helps me to grow the website and provide more and better content. If you want more, you can also consider subscribing to the newsletter and for feedback or questions, comment below.
Enjoy your day!