Python: How to Export All the UV Layouts in Blender

Hate it when that happens.

This week is not a Python breakdown week. It’s just the code because my brain is still recovering from Scheme tutorials. And I really wanted to make a functional (or semi-functional) batch UV layout exporter. The script below does a blanket Smart UV Project for all selected objects and stashes the resultant UV layouts into a specified folder.

Step 1: Select all the objects you need maps for.

This step is important. The script starts off with a for loop going through the selected objects. If they aren’t selected, it won’t work.*

*You know how I know that? Not because I wrote the damn thing. because I wrote it, forgot to select the objects, spent a half hour staring at Blender wondering why the stupid thing wasn’t working, considered throwing the computer out the window, decided against it because it’d be a dick move to punish the computer for Blender’s problems, ate a 7 ounce chocolate bar with a jar of peanut butter, rewrote the script, and realized that I’m an idiot.

Step 2: Paste this script into the Text Editor.

import bpy

selObj = []

for obj in bpy.context.selected_objects:
 selObj.append(obj.name)

bpy.ops.object.select_all(action='TOGGLE')

i=0
while i < len(selObj):
 bpy.context.scene.objects.active = bpy.context.scene.objects[selObj[i]]
 bpy.ops.object.mode_set(mode="EDIT")
 bpy.ops.mesh.select_all(action='TOGGLE')
 bpy.ops.mesh.select_all(action='TOGGLE')
 bpy.ops.uv.smart_project(angle_limit=66.0, island_margin=0.0, user_area_weight=0.0)
 f="C:\\Users\\Desktop\\UVLayouts\\" + bpy.data.objects[selObj[i]].name
 bpy.ops.uv.export_layout(filepath=f, mode='PNG', opacity=0)
 bpy.ops.object.mode_set(mode="OBJECT")
 bpy.ops.object.select_all(action='TOGGLE')
 i+=1

Step 3: Change the file path to your preferred UV map location.

And remember that Python wants double backslashes in its file paths. For instance “C:\\Users\\Desktop\\UVMaps\\“. As written the script actually assigns the file path to variable f by combining the string “C:\\” and the name of the loop’s current object. Thankfully, Python makes it easy to combine strings with a simple + sign.

f="C:\\Users\\Desktop\\UVLayouts\\" + bpy.data.objects[selObj[i]].name

A tip: When naming the objects, don’t let Blender do the default Plane.001, Plane.002, Plane.003. The script won’t work if you have spare periods in the name. You can, however, get away with Plane001, Plane002, Plane003.

How exciting.

Step 4: Run it.

If all has gone well, you should be able to navigate to the file and see a nice, long list of .png files.

All the PNGs

Then you can go nuts with the texturing. I personally enjoy this node set-up greatly because if you set the UV map to O opacity, you can plug it into a mixed transparency/diffuse node and light up the seams with any color sun light you please. Like so.

How... Stephen King.

 

 

Advertisements
Tagged , , , , , , , , ,

3 thoughts on “Python: How to Export All the UV Layouts in Blender

  1. John says:

    Reblogged this on KULTIVATE MAGAZINE and commented:
    Great tutorial for you Blender users:

    Liked by 1 person

  2. Ben Kirkland says:

    You are a lifesaver! Thank you!

    Liked by 1 person

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: