Quick Post #5: A Utility for Converting .obj Files Created by Microsoft 3D Builder

There are several different file formats for specifying 3d objects (as Tannenbaum wrote, “The good thing about standards is that there are so many to choose from.” One such standard is the obj or .obj open format. By itself, the .obj file definition does not support coding surface shading properties in the .obj file, but these can be provided in a separate Material Template Library (.mtl) file.

While not part of the official file format, many program support vertex coloring by adding the RGB values for color to the end of the relevant vertex line. The de facto “standard” for this non-standard usage is to code the RGB values as decimals between 0 and 1. However for some reason, Microsoft’s 3D Builder codes them as integers between 0 and 255. As a result, other programs, e.g., Bambu Studio, while capable of using vertex coloring using values between 0.0 and 1.0, won’t read the color information when you import such a file. This simple script converts the RGB values from a range of 0-255 to a range of 0.0 – 1.0 and writes out the modified file. Here’s the code, which is also published as a Gist:

import sys

def convert_obj_vertex_colors(input_file, output_file):
    with open(input_file, 'r') as infile, open(output_file, 'w') as 
    outfile:
        for line in infile:
            parts = line.strip().split()
            if parts and parts[0] == 'v' and len(parts) == 7:
                # Convert RGB from [0, 255] to [0, 1]
                r, g, b = map(float, parts[4:7])
                r, g, b = r / 255.0, g / 255.0, b / 255.0
                outfile.write(f"{parts[0]} {parts[1]} {parts[2]} {
                parts[3]} {r:.6f} {g:.6f} {b:.6f}\n")
            else:
                outfile.write(line)

if __name__ == "__main__":
    if len(sys.argv) != 3:
        print("Usage: python convert_obj_rgb.py input.obj output.obj")
    else:
        convert_obj_vertex_colors(sys.argv[1], sys.argv[2])

Leave a Reply

Your email address will not be published. Required fields are marked *

The maximum upload file size: 512 MB. You can upload: image, audio, video, document, spreadsheet, text. Links to YouTube, Facebook, Twitter and other services inserted in the comment text will be automatically embedded. Drop files here