Quick Model Checker

Choose one or more DAE, OBJ, or MTL files. For OBJ files, you should also select the MTL file at the same time.

This is a self-contained page. This tool does not connect to any external websites and can be used offline. Be sure to check the tool page for updates every few weeks.


X

Textures are loaded from a texture path, which tell the computer where to find the image file. There are two types of paths: relative and absolute. Here are some examples.

Relative
head.png
textures/head.png
Absolute
C:/users/owner/desktop/example/textures/head.png

Models should never use absolute paths because they only work on one specific computer. All model texture paths should be relative. To fix an absolute texture path, simply erase the beginning part of the path all the way up through the folder where the model is located. If your texture is in the same folder as the model, you only need the filename.

If you aren't used to fixing texture paths, be sure to load up your model to verify that the textures load correctly.

X

MTL (Material) files can be opened with any text editor, such as Notepad. They are written in a custom plain-text format. When you open up a MTL file, you will see something like this:

newmtl face
illum 4
Kd 0.00 0.00 0.00
Ka 0.00 0.00 0.00
Tf 1.00 1.00 1.00
map_Kd face.png

newmtl body
illum 4
Kd 0.00 0.00 0.00
Ka 0.00 0.00 0.00
Tf 1.00 1.00 1.00
map_Kd body.png

...

Each group represents a separate material, starting with a "newmtl" row. There are usually spaces between each group, but there doesn't have to be. The important part is that every "newmtl" line starts a new material. This is also where the material's name is set.

Each row after the name defines a property of that material. Rows always start with a keyword, followed by one or more values. You don't need to worry about most of them. The only important ones are those that start with "map_", which define the textures. The most important one of all is "map_Kd", which loads the base / color texture. If your material is supposed to load a texture, it must have a map_Kd row. If it doesn't, you should add one.

X

Collada DAE files can be opened with any text editor, such as Notepad. They are written in XML, a common plain-text format. When you open up a DAE file, you will see something like this:

<?xml version="1.0"?>
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
    <asset>
        <contributor>
            <authoring_tool>Blender</authoring_tool>
        </contributor>
        <created>2023-09-13T20:01:41.198Z</created>
        <modified>2023-09-13T20:01:41.198Z</modified>
		<unit meter="0.01" name="centimeter"></unit>
        <up_axis>Y_UP</up_axis>
    </asset>
    <library_images>
        <image id="tex0">
            <init_from>cup01_s3tc.png</init_from>
        </image>
        <image id="tex1">
            <init_from>be_dama_hikari10_i8.png</init_from>
        </image>
    </library_images>
    <library_effects>
        <effect id="effect0">
...

The structure of DAE files is flexible, so sections may not always appear in the same order as in this example. You may have to search for the section you are looking for.

If you've never worked with XML before, don't worry, it is easy to learn. The file is just one big hierarchy, where every element can contain either text data or other elements. Take some time to read through the file one line at a time and you'll at least learn the basic idea of how the format works, even if you don't know what the data values mean.

X

If you don't already know how DAE files are structured, read "How do I fix a DAE file?" first.

Texture paths in a DAE are located in the <library_images> element. It typically looks something like this:

    <library_images>
        <image id="tex0">
            <init_from>cup01_s3tc.png</init_from>
        </image>
        <image id="tex1">
            <init_from>be_dama_hikari10_i8.png</init_from>
        </image>
        ...
    </library_images>

Each texture file is represented by an <image> element, and inside each each one is an <init_from> element that defines the texture path. Be sure not to change or break the structure when fixing texture paths.

If your DAE doesn't have a <library_images> element, or if it is empty, then it means your model won't load any textures. Check your export settings, make sure all your textures are in the correct place, and try exporting it again.

X

If you don't already know how DAE files are structured, read "How do I fix a DAE file?" first.

Most elements in the model file either have a unique ID to identify them, or they refer to another element's ID. For the model's structure to work properly, every ID must be unique. Unfortunately, some programs like Blender don't always follow this rule, leading to compatibility problems.

To change an element's ID, simply look for the id="" attribute in the element. However, simply changing the ID is just the first step. For the model to work properly, you need to also change all the references to that ID.

Element IDs can either be referenced from a url="" attribute, a target="" attribute, or an <init_from> element. Element IDs can often be very similar, so make sure you are looking for the exact same text. If you find that you're having to replace a lot of IDs, it might be simpler to just rename the meshes/materials in your model and export it again.

Of course, if your model has a problem with more than one element sharing the same ID, it can be tricky to figure out which matching reference needs to be changed. Fortunately, DAE elements are only used in specific ways. Here is a general guide on how different parts reference other parts:

  • <image> is only used inside <effect> elements
  • <effect> is only used inside <material> elements
  • <material> is used in multiple places
  • <geometry> is used inside either <skin> or <instance_geometry> elements
  • <source> is only used within the element group it is part of
  • <controller> is only used inside <instance_controller> elements
  • <visual_scene> is used inside <instance_visual_scene> and there is only one
  • <node> with type="JOINT" is used inside <controller> (maybe don't touch)
  • <node> of any other type is not used anywhere, so feel free to change the ID