Sigh-Borg: A semi-automated picker creator
Sigh-Borg started out in a conversation with an animator when he mentioned that he likes to use pickers and a lot of rigs out there do not come with pickers. I started thinking about whether it was possible to automatically generate a picker from a control rig. The tool is still in progress and it has its challenges, but I intend to iterate on it and make it more usable and artist friendly.
I started out by creating my own a hardcoded picker for an existing rig (while learning how to use PyQt). Once I got comfortable placing buttons, I started working on procedurally generating the buttons. I came up with an algorithm where the tool would find the buttons on the vertical and horizontal extremes and use the controller locations to place the buttons relative to the extremes. I made a flowchart to help understand the tool workflow better.
Challenges emerged when I used the tool on more complex rigs with FK and IK switching and stretch controls. Some rigs had two many controllers which would overcrowd the UI. I tried to separate out FK and IK for the large part by using the naming conventions, which I still believe is unreliable given that rigs are so varied. I also used attributes to determine which controllers were what: for example the stretch controllers had rotations locked.
I kept having animators test out the tool and give me feedback. One piece of feedback that I implemented was the drag-select feature to allow them to select multiple controllers.
I used the QRubberBand class along with mouse press events to determine if the mouse was dragging. As soon as the mouse button was released the tool would select all the buttons in the rectangle bounds and their color would change to indicate selection.
As a part of my progress: I recently created a simple picker with FK/IK switching for an autorigger that I was working on. It contains a slider which allows you to switch between FK and IK, and the buttons will change based on that. I intend to integrate this into the auto picker.