A long time ago I started working on a QT node editor but got stuck fairly quickly. I found myself with some free time again today after not having to work on a game in the weekends anymore 🙂 So I went back to my old code and started tinkering a little bit. Got a bit more of the visual stuff working today. It doesn’t do anything yet, but I’m able to add nodes with inputs and outputs and connect everything together. Gotta start somewhere, right?
After pushing the game back for a month to work out a some kinks and a staggered release schedule, Battlefield V is now out for everyone in the world. This was the first AAA game I’ve ever been a part of and it has been one hell of a ride. Mostly making this post to mark the day for myself, but here are some pretty trailers you can look at 🙂
I always kept running into problems when making PyNodes in my script and the error messages Maya gives you aren’t always the best. So I wrote a little helper function, especially useful when you have more than one object with the same name in your scene.
def pynode(object_name, specific_on_multiple=False, pick_most_root=False, pick_most_leaf=False, pick_index=None):
Returns a PyNode of the given object name with better error messages and additional options
:param object_name: name of the object you want to make a PyNode
:param specific_on_multiple: <bool> When set to True, allows you set the next flags to return a specific object when there are multiple objects with the same name
:param pick_most_root: <bool> returns the most root object if there are multiple objects with the same name
:param pick_most_leaf: <bool> returns the most leaf object if there are multiple objects with the same name
:param pick_index: <int> returns this index of object if there are multiple objects with the same name
:return: a PyNode
if object_name is None:
raise RuntimeError("Can't make a PyNode when object_name type is None")
if not type(object_name) == str:
node_name = object_name.nodeName()
node_name = object_name
multiple_nodes = sorted([str(node) for node in pm.ls(node_name)], key=len)
if len(multiple_nodes) > 1:
if specific_on_multiple is False:
error_message = "There are multiple nodes with this name:"
for node in multiple_nodes:
error_message += "\n%s" % node
if pick_most_root is True:
elif pick_most_leaf is True:
elif pick_index is not None:
selected_node = multiple_nodes[pick_index]
raise IndexError("%s is not a valid index, valid indices are 0 to %s"
% (pick_index, len(multiple_nodes) - 1))
raise ValueError("When custom_on_multiple is set to True, either pick_most_root or pick_most_leaf "
"should be set to True as well")
raise ValueError("Object (%s) doesn't exist" % object)
I finally found the time to update my old skin saver tool. I’ve cleaned up the code a bit, added some extra functionality and just made it work a bit smoother than before. You can find it on my Gumroad page: https://gumroad.com/l/GskhZ