.. toctree:: ******************** mrsBuilder ******************** Last Updated: 08.24.2020 Overview ========== .. image:: _static/img/builder/ui_04302019.PNG :align: center **mrsBuilder** is the UI for working with and creating Morpheus Rig System templates and rigs **What can I do with it?** * Create rigBlocks * Connect, change options and more * Mirror blocks * Post Processes **Tool specs** * Python * Built on zooBaseMelUI Some content is easier to put up on articles on CG Monastery so you'll find a lot more information there. ---------- Building ================== --------- Prebuild ----------- There's some important things to consider before pushing the build button- knowing which build method to use is also important. #. Make sure all blocks are at ``skeleton`` state. #. Run a precheck on all blocks. ``Block>Rig>Prechecks`` to look for bad settings that will make your build fail. #. Only build in scene when you're messing around or troubleshooting. Otherwise use the maya standalone method as it frees maya and is actually faster. ---------- Accessing ============== #. UI | Top cgm menu - ``CGM> MRS > mrsBuilder`` #. Python .. code-block:: guess import cgm cgm.core.mrs.Builder.ui() ---------- Top Menu =========== Those items along the top of the ui. Exciting! .. tip:: * multi select works * menus can be torn off Options ---------- * ``Profiles`` | Assign a particular build profile to the selected asset.For more information on the different block profiles, `see core concept `_. * ``Dev Mode`` | Way for us to flag extra stuff when we're testing. Should be off for most users. * ``Dock`` | Dock the ui to the side of the maya ui * ``Reload`` | Reload and reopen the ui * ``Reset`` | Reset ui ---------- Add Block ----------- .. figure:: _static/img/builder/mrsBuilder_addBlock.png :width: 200 :align: right :figclass: align-right UI The add block menu has a few points of interest * Builds dynamically by walking our block modules to get blocks * Then walks those blocks to find the profiles available per block As we add more blocks we'll probably look at organization again. At one point we had an organic category but we don't really any rigBlocks other than organic right now so it didn't make sense. * Clicking any of the profiles or rigBlocks will create a rigBlock using the settings specified * ``Create Mode`` | The mode by which you want blocks created * ``Selection`` | First attempts to find a bounding box size by selected object(s) * ``Default`` | Use the modules's default size * ``Rebuild`` | Rebuild the menu. Most often used during dev when we add new profiles or blocks. For more information on rigBlocks. ---------- Select ------------ Contextual menu that builds off which blocks are selected in the block list. .. figure:: _static/img/builder/statePicker_04302019.gif :width: 400 :align: center :figclass: align-right UI ---------- Block ------------ .. figure:: _static/img/builder/builderUI_blockMenu_04302019.PNG :width: 200 :align: right :figclass: align-right UI This is your main menu for working with blocks when you're doing normal actions. When you're starting out you'll mainly be doing stuff here. ---------- Form ^^^^^^ * ``Snap to RP`` | Snap form handles to the `rotate plane `_ ---------- Prerig ^^^^^^^ .. figure:: _static/img/builder/builderUI_prerig_02272019.png :width: 200 :align: center :figclass: align-right prerig tearoff * ``Arrange | Cubic Even`` | Arrange prerig handles with a cubic curve evenly * ``Arrange | Cubic Spaced`` | ... spaced to closest point on the cleaned curve * ``Arrange | Linear Even`` | Arrange prerig handles with a linear curve evenly * ``Arrange | Linear Spaced`` | ... spaced to closest point on the cleaned linear curve * ``Handles | Lock`` | Lock the prerig handles in space so the template handles no longer affect * ``Handles | Unlock`` | unlock the prerig handles in space so the template handles no longer affect * ``Query Indices`` | Dev call for those making rigBlocks * ``RP Pos`` | Visualize the RP pos as the build understands it * ``Snap RP to Orient`` | Snap the RP define handle to the orient handle vector * ``Snap to RP`` | Snap prerig handles to the `rotate plane `_ ---------- Rig ^^^^^^^ .. figure:: _static/img/builder/builderUI_rig_02272019.png :width: 200 :align: center :figclass: align-right rig tearoff Calls for the rig state * ``Prechecks`` | Run a block's prechecks before trying to rig to check for bad settings and head off issues. * ``Query Nodes`` | Query the rigNodes of the blocks. See the `terminology section for more info `_ . * ``Reset Controls`` | Reset animation controls * ``Rig Connect`` | Calls for connecting/disconnecting the bind skeleton to the rig skeleton * ``Rig Disconnect`` | ... * ``Step Build`` | See `the ui documenation <#step-build>`_ * ``Verify Proxy`` | Create proxy mesh for rigBlocks ---------- Names ^^^^^^^ Calls for working with name tags. Most of these calls get a uiPrompt to input the necessary info. Includes options for manipulating the nameList which is rather hidden from the user normally as they are string attributes. .. figure:: _static/img/builder/names_04162019.png :width: 250 :align: center :figclass: align-center names tear off * ``Set Name`` | Sets the name tag of the rigBlock and renames dags as appropriate * ``Set Position`` | Set the position name tag for the rigBlock * ``nameList | edit`` | Brings up an edit ui. See fig below. * ``nameList | iter baseName`` | Set the nameList of the rigBlock from the name. For example if the name is 'index', it would fill the nameList with that such ['index_1','index_2'...]. * ``nameList | Reset`` | Reset the nameList to the data found either in the blockProfile dict or the base blockModule defaults. .. figure:: _static/img/builder/namelist_edit.png :width: 450 :align: center :figclass: align-center edit nameList ui **Edit nameList** We use nameLists to store and call the imporant strings for our builds. They are datList attribute setups which is a custom thing we do with series of attributes. More on that another time. * ``OK`` | use what's typed in * ``Use Profile`` | Use the profile list shown in the ui if there is one detected * ``Iter Entry`` | Similar to iter above but iter a single string in the field * ``Iter cgmName`` | Iter the name tag like above * ``Cancel`` | don't do anything. ---------- Parent ^^^^^^^^ Parent Functions for setting/clearing a rigblocks parent * ``To Active`` | Set active rigblock as the blockParent of those rigblocks in context * ``Clear`` | Clear the blockParent from those rigblocks in context ---------- Set Side ^^^^^^^^^ Set the side value of the block. This is an important setting affecting rigging setup and color of controls. * ``None`` | No side * ``left`` | ... * ``right`` | ... * ``center`` | ... ---------- Geo ^^^^^^ .. figure:: _static/img/builder/builderUI_geo_02272019.png :width: 200 :align: right :figclass: align-right We have a number of ways to get usable geo from our templates. For more information see the `PuppetMesh page `_ . * ``Block Mesh`` | Geo from the contexual blocks * ``Block Loft | Default`` | Lofted mesh from contextual blocks with channel history intact for custom needs * ``Block Loft | Even`` | ... **Puppet Mesh** * ``Unified`` | Unified mesh generated * ``Unified [Skinned]`` | .... skinned * ``Parts Mesh`` | Segmented mesh * ``Parts Mesh [Skinned]`` | ... skinned * ``Parts Mesh [Parented]`` | ... parented * ``Delete`` | Remove puppet mesh connected in context ---------- Utilities ^^^^^^^^^^^ These are for dev queries I'm not sure where else to put yet. * Reorder UD | During some build options the channel box user attrs get out of a sensible order. This is the first attempt at fixing that ---------- Vis ------------ Menu for affecting visibility and how our block information is presented. Focus ^^^^^^ .. image:: _static/img/builder/mrs_focus_v01.gif :align: center :width: 100% Focus on specific blocks. Works by building a filtered list of selected blocks then processing all the blocks in a root context against that list to aid in working only on what you want. * ``Clear`` | Clear the current focus * ``Vis`` | Hide all blocks but the selected ones under the current root * ``Template`` | Toggle on the .template attribute of the non filtered blocks so they're visible but not selectable ---------- Others ^^^^^^^ .. figure:: _static/img/builder/builderUI_menuVis_05012019.PNG :width: 125 :align: right :figclass: align-right ``Measure`` | Many blocks have distance nodes at their define state turned off by default * ``off`` | ``on`` ``RotatePlane`` | Many blocks have a rotate plane to aid in setup * ``off`` | ``on`` ``Labels`` | Turn off or on the jointLabels of a block in context * ``off`` | ``on`` The following options let you toggle lock/unlock and visibility ``rigBlock`` | Many blocks have a rotate plane to aid in setup * ``unlock`` | ``lock`` | ``hide`` | ``show`` ``formNull`` | Many blocks have a rotate plane to aid in setup * ``unlock`` | ``lock`` | ``hide`` | ``show`` ``prerigNull`` | Many blocks have a rotate plane to aid in setup * ``unlock`` | ``lock`` | ``hide`` | ``show`` ---------- Advanced Menu --------------- .. figure:: _static/img/builder/builderUI_menuAdvanced_05012019.png :width: 125 :align: right :figclass: align-right UI The advanced menu is for more advanced functions which most users won't have need to. It's mainly for dev work. Define ^^^^^^^^ * ``Load base size dat`` | Dev call for those making rigBlocks ---------- Form ^^^^^^^^ * ``Resize Handles`` | Resize the form handles ---------- Prerig ^^^^^^^^ * ``Query Indices`` | Get's the indexes for the start/end handles as the system sees it. For Dev work. ---------- Mirror ^^^^^^^ .. figure:: _static/img/builder/builderUI_mirror_02272019.png :width: 200 :align: right :figclass: align-right There were a few too many functions to fit on the main mirror row so we put a few here. * ``Controls | Pull`` | Pull control dat from the blockMirror of those blocks in context * ``Controls | Push`` | Push ... * ``Settings | Pull`` | Pull settings dat from the blockMirror of those blocks in context * ``Settings| Push`` | Push ... ---------- Queries ^^^^^^^^ These are for dev queries I'm not sure where else to put yet. * ``Buildable?`` | Does the rigblock's module have all the information necessary to build its rig. Or at least the framework * ``Visualize`` | Script editor representation of the hierarchy of the rigBlocks in the current context * ``blockProfile Valid`` | Check to see if the blockProfile of blocks are still valid ---------- Utilities ^^^^^^^^^^^^ These are general dev functions I don't know where else to put yet. * ``Block Current?`` | Snap handles to the block Frame * ``Block Rebuild`` | Rebuilds a block. Takes it back to define state, wipes most attributes and rebuilds with the blockDat * ``Block Update`` | Probalbly depreciating this. Older version of Rebuild * ``Joint Labels | wire`` | Dev call to rewire old blocks without having to rebuild them * ``Reorder UD`` | Reorders the userDefined attributes alphabetically * ``Root Shape | Update`` | Remakes the root shape size and form * ``Verify`` | Widely used call that's in the main utilities section for other users * ``blockModule | debug`` | Turn debug on for the blockModules in context * ``blockModule | info`` | Turn info on for the blockModules in context * ``blockProfile | update`` | Check the blockProfile setting against the registered options * ``Shape To`` | shape handles to the block Frame ---------- attrMask ^^^^^^^^^^^^ The attrMask is something happening by default. What it means is that the attributes visible in the channel box change based on state. When dev mod is on, this effect doesn't happen. This menu is a way to force state attrMask filters. * ``Define`` | ... * ``Form`` | ... * ``Prerig`` | ... * ``Skeleton`` | ... * ``Rig`` | ... * ``Clear`` | ... ---------- blockFrame ^^^^^^^^^^^^ Only works if a block has a blockFrame * ``Align To`` | Snap handles to the block Frame * ``Shape To`` | shape handles to the block Frame ---------- Post Menu ----------- .. figure:: _static/img/builder/mrsBuilder_topPostMenu.png :width: 200 :align: right :figclass: align-right Generally speaking these things are for after you've completed a rig build. For full breakdown on post processes, look at the `core concepts post on it `_ . * ``Rig Prep`` | Open a new ui to do rig cleaning functions. See `section below <#rig-prep>`_. * ``Gather Blocks`` | Collect our rigBlocks to a group * ``Up to Date?`` | Check our rigged blocks against module version * ``Calls`` | Sub menu for calls we pushed to the Rig Prep * ``Gather Space Drivers`` | Collect dynParent world space drivers * ``Qss -Bake set`` | makes a bake set (currently targetting Unity workflow) * ``Qss - Delete set`` | Same but for deleting stuff * ``Qss - Export Set`` | Implemented in Dec 2018. This attempts to gather geo and joints in an export set * ``Is Historically Interesting`` | Something we're trying out. `See Post Processes `_ . * ``Puppet Mesh`` | `See Post Processes `_ . ---------- Snap ------- See `section in Snap `_ BlockList =========== .. figure:: _static/img/builder/mrsBuilder_rigblock_list.png :width: 200 :align: right :figclass: align-right This ui element is a scroll list for selecting rigBlocks and access some other functions. You can multi select this list | right click multi selection isn't currently done Right click menu is only built when a single rigBlock is selected The format is as follows: blocknameBlocktype - ``STATE``. If there is a side it will be appended to the front as R - blocknameBlocktype - ``STATE``. The ticks in front are to denote depth in a limited format we have with scroll lists in the ui. I mess with this every now and then trying to find the best way to display the most info in the space and limitations for the format. Open to suggestion. * ``Block Filter`` | Type to look for specific blocks .. figure:: _static/img/builder/blockFilter.gif :width: 200 :align: center :figclass: align-center * ``Refresh`` | Refreshes the list if you've been messing with stuff manually ---------- Right Click Menu ------------------ .. figure:: _static/img/builder/mrsBuilder_rightClick_single.png :width: 200 :align: right :figclass: align-right Only built when a single rigBlock is selected * ``Edit rollCount`` | Edit the roll count via a new pop up ui .. note:: Some blocks have special menus. This is an example of those. * ``To active`` | Set the selected to the active rigBlock * ``Select`` | Select the rigBlock * ``Parent`` | * ``To Active`` | Set the active rigBlock as the blockParent * ``Clear`` | Clear the blockParent * ``Mirror`` | * ``Verify`` | Verify the rigBlock has a blockMirror * ``Rebuild`` | Rebuild the blockMirror * ``Push`` | Push blockDat to the blockMirror * ``Pull`` | Pull blockDat from the blockMirror * ``Size`` | IN TESTING * ``Set Name`` | Set the name tag of the rigBlock by uiPrompt * ``Edit NameList`` | Edit the nameList of the rigBlock by uiPrompt * ``Recolor`` | Recolor the rigBlock * ``Verify`` | Verify the rigBlock * ``Delete`` | Delete the rigBlock * ``Duplicate`` | Duplicate the rigBlock * ``To ScriptEditor`` | Send the block to the script editor as ``mBlock`` * ``To ScriptEditor as RigFac`` | Send the block to the script editor in a RigBlocks.rigFactory as ``mRigFac`` * ``Step Build`` | See `the ui documenation <#step-build>`_ ---------- Push/Context =============== Section for setting context settings and pushing states. It has two main parts - context and state pushing Context ------------ Set the context with three options currently. .. figure:: _static/img/builder/builderUI_context_02272019.png :width: 350 :align: center :figclass: align-center **First is the main context:** * ``self`` | just the main rigblock * ``below`` | From the beginning * ``root`` | From the top most blockParent of the current context and below * ``scene`` | All blocks. Don't use this for now. IN TESTING **Begin actions with:** * ``active`` | Start with the active block * ``selected`` | Start with selected **Force** * ``False`` | If the block is at the current state, let it be. Except in self mode. * ``True`` | Force means that even in the current state, it will rebuild that state. Normally you'll want this to be False .. note:: Self mode will push force to True. ---------- State Pushing ---------------- .. figure:: _static/img/builder/builderUI_cpush_02272019.png :width: 350 :align: center :figclass: align-center Main buttons for changing rigBlock states. Works off of what you have in context. ---------- Main Sections ======================= **This is the section we're most often in these days when in the ui**. These utilities work off of selected context in the scroll list. We'll talk about them by row. I've tried to keep them organized by category-------------[func][func]... format .. note:: Remember - multi select works ---------- Utilities ------------ * ``Select`` | Select rigBlocks in context * ``Verify`` | Verify the rigBlock * ``bakeScale`` | Bake any blockScale value back to the block to make it 1.0 again * ``Duplicate`` | Create another rigBlock matching it * ``Delete`` | Delete the rigBlock and all it's parts ---------- Mirror --------- These calls are for working with blockMirror and self rigblock mirroring functionality. * ``Verify`` | Verify a blockMirror to our contextual rigBlocks * ``Rebuild`` | Delete existing and rebuild blockMirror * ``Push`` | Push settings from contextual rigBlocks to their blockMirrors * ``Pull`` | Pull settings from blockMirrors of contextual blocks to themselves * ``Self[L]`` | Self mirror with Left being prime axis. Not all blocks support. Added for facial blocks * ``Self[R]`` | ... Right ... * ``Settings | Push`` | push settings from blockMirror * ``Settings | Pull`` | pull .... ---------- blockDat --------- Functions for working with blockDat. This is still very much in iteration. The idea is to save a rigBlock at a certain setting state and do functions with that information. * ``Save`` | Store the blockDat * ``Load`` | Load stored blockDat * ``Load Current`` | Only load the data the the current blockState * ``Query`` | Log the blockDat in the script editor * ``Transfer`` | Copy the active block's blockDat to any blocks in context * ``Reset`` | Reset the blockDat to the default data (WIP function) * ``define`` | Only load define dat * ``form`` | ... * ``prerig`` | ... ---------- Special UIs ============= Rig Prep ------------ .. figure:: _static/img/builder/mrsBuilder_postUI_v01.png :width: 200 :align: right :figclass: align-right UI for working with a rigged asset. Works with a loaded puppet or finds it via contextual selection. This is a post build UI for handling standard functions at the step in prepping as asset. For full breakdown on post processes, look at the `core concepts post on it `_. .. note:: The Puppet will reset before running these functions. * ``Mirror Verify`` | Setup mirror wiring and functions on a puppet * ``Gather Space Drivers`` | Collect dynParent world space drivers * ``Connect Rig`` | Connect the bind skeletons to the rig drivers * ``Proxy Mesh`` | Verify proxy mesh setups per module * ``Is Historically Interesting`` | Something we're trying out. See `Post Processes `_. * ``Qss -Bake set`` | makes a bake set (currently targetting Unity workflow) * ``Qss - Delete set`` | Same but for deleting stuff * ``Qss - Export Set`` | Implemented in Dec 2018. This attempts to gather geo and joints in an export set .. figure:: _static/img/builder/postUI_v01.gif :width: 100% :align: center :figclass: align-center Example Processing ---------- Step Build -------------- .. figure:: _static/img/terminology/builderUI_stepBuild_02272019.png :width: 200 :align: center :figclass: align-right UI New concept implemented in February 2019. Previously we had to process a rig build manually step by step when we wanted to check things. This is a simple ui which populates the rig steps and let us easily step through and undo steps while we're mucking about fixing stuff. * **Header** | Name of the block loaded to the stepBuilder * ``Reload`` | Reloads the block module to pull in updates when we're testing * ``Log Self`` | Log the local data to the rigFactory. * ``INFO`` | Set the block module to info logging * ``DEBUG`` | ... enable debug mode. More Prints! * **Build Order** | important note is that these options will change by block type as they use that blocks rig order steps. It just takes each step and puts it on a button * **Report** | Reports the last successful step in case you forget where you were testing things. Clicking it refreshes the data ---------- Updates ======== We try to keep this updated with big feature adds to see how it's changed over time. 2020 ------ Sping/Summer ^^^^^^^^ * **Maya py** | Implemented ability to build rigs via maya stand alone so as to not take control of your maya instance * **Prechecks** | Implemented prechecks to the batch build and menu * **Siblings** | Initial functionality for block siblings * **Vis Menu** | Added vis menu 2019 ------ April ^^^^^^^ * **Select Menu** | First pass * **Relayout** | Split the top contextual menu to 3 - Block, Vis, Advanced. Focused on simplification * **Dev mode** | First implementation currently only affects attrMasking. * **AttrMasking** | first pass * **Filtering** | added block filtering search bar * **Name Match** | added check for duplicate block naming dicts * **Color Coding** | Block list colorized by block state * **BlockList** | Rewrote the scroll list python object to get around maya being stupid ---------- February ^^^^^^^^^ * Hit on ui updates in general * Added new contextual menu options: Geo, mirror, blockFrame and new sub options * **Step Build** | initial documentation * Progress bar implemented * Context menu | made frame element with a context report similar to the mrsAnimate time context stuff I'd been messing with ---------- January ^^^^^^^^ * Added Focus framework and functionality to UI * Added new Post Process UI * Added new RP Pos visualize button * Did a pass on making contextual functions that I can not clear the block list * Head | new right click menu * New contextual rows * Name List * Reset to Profile * Iter from Base Name * Side | duplicated from right click menu ---------- 2018 ------ December ^^^^^^^^^ * Minor bug fixes for MRS Makers Workshop * IsHistoricallyInteresting first pass * Began documentation for the tool ---------- October ^^^^^^^^ * Major update with MRS workflow update * Added multi select to the rigblock scroll list * Added refresh button * Added Utilities-Contextual * Reworked Add menu