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.
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.
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.
Reblogged this on KULTIVATE MAGAZINE and commented:
Great tutorial for you Blender users:
LikeLiked by 1 person
You are a lifesaver! Thank you!
LikeLiked by 1 person
I’m flattered. You’re welcome 🙂
LikeLike
Hi gifguide2code,
Any chance of updating this to 2.79b?
This seems extremely useful..
but despite my best efforts,
I’m only getting errors
LikeLike
Hi Em,
I use Blender 2.79b–what kind of error you getting? This script can be a bit touchy–I have to go through a mental checklist every time I use it. Do I have my objects selected? Do any of the selected objects have periods in the name (if so, you gotta rename them)? Is my filepath mapped to an actual file?
LikeLike
Hi,
Thanks for your reply! I got the script to work, by naming the path correctly. Who knew? lol.
I also made a few changes to the modes to ensure it would work for my purposes. For example : (action=”SELECT”) instead of (action=”TOGGLE”)
LikeLike
My msg seems to be cutoff. I sent you an email with more details! Cheers!
LikeLike
Awesome sauce, Em! Glad you got it working. I didn’t see your email though. Did you send to gifguide2code@gmail.com? I like seeing what other people are doing with these scripts.
LikeLike