CINEMA 4D – Fix Missing Textures

CG Director Author Alex  by Alex   ⋮ 
CGDirector is Reader-supported. When you buy through our links, we may earn an affiliate commission.
CINEMA 4D – Fix Missing Textures

Often times you are moving Cinema 4D projects around. This can be between different Hard-Drives or from PC to MAC, or you are working on projects with a Team and keep moving your c4d Files back and forth.

Cinema 4D reports missing Textures when it can’t find the Texture file in your Materials, or can’t find linked Xrefs. There are many reasons why this can happen. Here are some of them:

  • The Image Textures have been deleted or renamed
  • The Textures have moved to a different location
  • Your Colleague does not have the Texture on his Computer
  • The Texture paths have been setup as Absolute, meaning Cinema 4D is looking in a specific folder such as c:\Project\MyGreatTextures\ and the Texture is no longer in this folder

What you should do to prevent missing textures from the start, especially when working on projects in a team, is set up your Cinema 4D Texture environment optimally:

  • When working locally: Save your textures in the Project\tex\ folder and link textures relatively. When sharing your project with somebody else be sure to also share your tex folder. Cinema 4D has an own menu command for this that is called: “Save Project with Assets”, you can find it in the “File” Menu.
  • When working on a network drive with a team: have a dedicated Texture Folder set up on the Network Drive everyone has access to and configure this Folder Path in the Cinema 4D Settings

Here is a handy little script that converts all absolute linked Textures to relatively linked Textures, meaning they can instantly be found in either the \tex path of your project folder or your configurated dedicated Texture Path.

import c4d, os
from c4d import gui

def shadertree(shader):
    # Loop through the BaseList
        # This is where you do stuff
        print shader.GetName()
        # If it's a bitmap, we'll look at the filename
        if shader.GetType() == c4d.Xbitmap:
            filename = shader[c4d.BITMAPSHADER_FILENAME]
            print filename
            # for instance we can set the filename to just the file part
            filename = os.path.basename(filename)
            shader[c4d.BITMAPSHADER_FILENAME] = filename
        # Check for child shaders & recurse
        if shader.GetDown(): shadertree(shader.GetDown())
        # Get the Next Shader
        shader = shader.GetNext()
def main():
    # Get the first material
    mat = doc.GetFirstMaterial()
    # Loop through materials
        # Get the first shader
        # Note - this is a 4D list - you've gotta GetDown
        shd = mat.GetFirstShader()
        # Use our recursive function to parse the shader tree
        # Get the Next material
        mat = mat.GetNext()
if __name__=='__main__':


How do you fix Missing Textures and what is your best practice when setting up Cinema 4D for a Team over a network? Share your thoughts in the comments!

Alex from CGDirector - post author

Hi, I'm Alex, a Freelance 3D Generalist, Motion Designer and Compositor.

I've built a multitude of Computers, Workstations and Renderfarms and love to optimize them as much as possible.

Feel free to comment and ask for suggestions on your PC-Build or 3D-related Problem, I'll do my best to help out!


Leon Kerpel

Hi Alex,

Great script, this is helping us al lot. I did run into a small issue though. The script does not redefine textures paths that are behind a shader. I use corona renderer for c4d and it corrects all but those behind (for example) a normal shader. you think you could adjust the script to it looks past the shaders?

Kind regards,


very helpfull, thanks Alex !


Thank you Great script