Files
2025-09-29 00:52:08 +02:00

2256 lines
77 KiB
Python
Executable File

import gc
import types
import logging
import traceback
import pyfbsdk as mobu
from RS import ProjectData
from RS.Utils.Logging import Universal
from RS.Tools.CameraToolBox.PyCore.Decorators import Singleton
logging.getLogger(__name__)
Ulog = Universal.UniversalLog('MotionBuilder')
WingRemoteWatchFile = r'x:\mobuRunRemoteScript.txt'
Quiet = False
Application = mobu.FBApplication()
App = Application
System = mobu.FBSystem()
Scene = System.Scene
ActorFaces = Scene.ActorFaces
Actors = Scene.Actors
AudioClips = Scene.AudioClips
Cameras = Scene.Cameras
CharacterExtensions = Scene.CharacterExtensions
CharacterFaces = Scene.CharacterFaces
CharacterPoses = Scene.CharacterPoses
Characters = Scene.Characters
ConstraintSlovers = Scene.ConstraintSolvers
Constraints = Scene.Constraints
ControlSets = Scene.ControlSets
Devices = Scene.Devices
Folders = Scene.Folders
Groups = Scene.Groups
Handles = Scene.Handles
Huds = Scene.HUDs
Lights = Scene.Lights
MarkerSets = Scene.MarkerSets
Materials = Scene.Materials
Namespaces = Scene.Namespaces
Notes = Scene.Notes
ObjectPoses = Scene.ObjectPoses
PhysicalProperties = Scene.PhysicalProperties
Poses = Scene.Poses
RootModel = Scene.RootModel
Sets = Scene.Sets
Shaders = Scene.Shaders
Story = mobu.FBStory()
Takes = Scene.Takes
Textures = Scene.Textures
UserObjects = Scene.UserObjects
VideoClips = Scene.VideoClips
class _Components(object):
"""
Wrapper for the Scene.Components object
The Dynamxyz Bridge plugins crashes when this is initialized at startup
"""
def __iter__(self):
"""
overrides built in method
Allows the instance to be iterate over all the objects in the scene
Returns:
generator
"""
for model in Scene.Components:
yield model
def __len__(self):
""" overrides built in method """
return len(Scene.Components)
def __getitem__(self, start):
if not isinstance(start, slice):
return Scene.Components[start]
start, stop, step = start.start, start.stop, start.step
start = start or 0
step = step or 1
models = Scene.Components
count = len(models)
if start < 0:
start += count
if stop < 0:
stop += count
else:
stop -= 1
modelSlice = []
if start < stop:
counter = start
while counter >= 0 and counter <= stop:
modelSlice.append(models[counter])
counter += step
return modelSlice
class SceneModels(object):
""" Exposes methods that return lists of models in the current scene """
@property
def All(self):
""" Gets all the FBModels in the scene """
models = mobu.FBModelList()
mobu.FBGetSelectedModels(models, None, True, True)
mobu.FBGetSelectedModels(models, None, False, True)
return models
@property
def Selected(self):
""" Gets all the selected models in the scene """
models = mobu.FBModelList()
mobu.FBGetSelectedModels(models, None, True, True)
return models
@property
def UnSelected(self):
""" Gets all the unselected models in the scene """
models = mobu.FBModelList()
mobu.FBGetSelectedModels(models, None, False, True)
return models
def __iter__(self):
"""
overrides built in method
Allows the instance to be iterate over all the objects in the scene
Returns:
generator
"""
for model in self.All:
yield model
def __len__(self):
""" overrides built in method """
return len(self.All)
def __getitem__(self, start):
if not isinstance(start, slice):
return self.All[start]
start, stop, step = start.start, start.stop, start.step
start = start or 0
step = step or 1
models = self.All
count = len(models)
if start < 0:
start += count
if stop < 0:
stop += count
else:
stop -= 1
modelSlice = []
if start < stop:
counter = start
while counter >= 0 and counter <= stop:
modelSlice.append(models[counter])
counter += step
return modelSlice
# This is NOT a list
Models = SceneModels()
Components = _Components()
ComponentLists = {
mobu.FBActor: Actors,
mobu.FBActorFace: ActorFaces,
mobu.FBCamera: Cameras,
mobu.FBCharacter: Characters,
mobu.FBCharacterExtension: CharacterExtensions,
mobu.FBCharacterPose: CharacterPoses,
mobu.FBComponent: Components,
mobu.FBConstraint: Constraints,
mobu.FBConstraintSolver: ConstraintSlovers,
mobu.FBControlSet: ControlSets,
mobu.FBDevice: Devices,
mobu.FBFolder: Folders,
mobu.FBLight: Lights,
mobu.FBMarkerSet: MarkerSets,
mobu.FBMaterial: Materials,
mobu.FBMotionClip: Scene.MotionClips,
mobu.FBNote: Notes,
mobu.FBObjectPose: ObjectPoses,
mobu.FBSet: Sets,
mobu.FBShader: Shaders,
mobu.FBTake: Takes,
mobu.FBTexture: Textures,
mobu.FBVideoClip: VideoClips,
mobu.FBGroup: Groups
}
Player = mobu.FBPlayerControl()
CameraSwitcher = mobu.FBCameraSwitcher()
FileMonitor = mobu.FBFileMonitoringManager()
# Adding in an instance of FBEvaluateManager so only 1 exists in the scene
EvaluateManager = mobu.FBEvaluateManager()
# The .FullName of any component that is 'default' or 'builtin'. Trying to delete these things will
# cause crashes in some situations. Best avoid trying to delete them all together. We do this by name
# rather than storing the actual references because at different times in code excution (i.e. during startup)
# some of these items won't exist 'yet'. This list is created by loading Mobu - allowing it to pass
# startup then printing all components at that point - before opening a scene or anything else.
DefaultComponentNames = ["Model::Scene",
"Core",
"Thread Manager",
"Evaluation Manager",
"Timing Manager",
"Command Manager",
"KTimeWarpManager",
"Profiler",
"Evaluation",
"Transport",
"Timer",
"Audio",
"Video",
"Material::DefaultMaterial",
"Model::Producer Perspective",
"Model::Producer Front",
"Model::Producer Back",
"Model::Producer Right",
"Model::Producer Left",
"Model::Producer Top",
"Model::Producer Bottom",
"Model::Camera Switcher",
"Video::USB Video Device",
"Video::Video Output 1",
"KVideoRenderer",
"KSerialManager",
"KCharacterHelper",
"Network Evaluation",
"KNLEManager",
"BaseObjectGroup::Path Creation",
"Folder::Constraints",
"Audio::Speakers (High Definition Audio Device)",
"Audio::Microphone (3- USB Audio Device)",
"KAudioManager",
"KMotionTriggerManager",
"Timeline::Story root",
"Timeline::Edit root",
"TimelineTrack::Shot Track",
"KTimelineXManager",
"Settings::Ghosts",
"Scene",
"Actors",
"Marker Set",
"Actor Faces",
"Audio",
"Cameras",
"Characters",
"Character Faces",
"Character Plugins",
"Control Rigs",
"Character Extensions",
"Constraints",
"Decks",
"Devices",
"Handles",
"Image Operators",
"Groups",
"Sets",
"Namespaces",
"Heads Up Display",
"Heads Up Display Elements",
"Lights",
"Materials",
"Keying Groups",
"Notes",
"Opticals",
"Poses",
"Shaders",
"Takes",
"Textures",
"3D Curve",
"Motions",
"Videos",
"Physical Properties",
"Solvers",
"Deformer",
"Scripts",
"UserObjects",
"System",
"BaseObjectGroup::T",
"BaseObjectGroup::R",
"BaseObjectGroup::S",
"BaseObjectGroup::TR",
"BaseObjectGroup::TRS",
"PointCacheManager",
"Folder::Poses",
"Folder::Takes",
"Global Light",
"Shader::Default Shader",
"Renderer::Renderer",
"FBX Export",
"MainViewer",
"ModelView0",
"ModelView1",
"ModelView2",
"ModelView3",
"Geometry::__SYSTEM_DEFAULT_GEOMETRY_AZIMUT_",
"HierarchyView",
"BaseObjectGroup::Current Camera",
"Transport",
"FCurve",
"Application"]
class CallbackError(Exception):
""" Raises all the exceptions encountered in a callback in a single exception """
def __init__(self, message, exceptions=None):
"""
Constructor
Arguments:
message (string): message to include in exception
exceptions (list): list of exceptions to raise together
"""
super(CallbackError, self).__init__(message)
self._message = message or ""
self._exceptions = exceptions or []
for index, exception in enumerate(self._exceptions):
self._message = "{}\n\n## Exception {}{}\n\n".format(self._message, index+1, exception)
def __str__(self):
return self._message.strip()
class CallbackWrapper(object):
"""
Wraps a callback so that the logic for running the methods is done by python rather than through C++
It also keeps the number of callbacks on the actual callback to a minimum
"""
__cache__ = {}
__externalEnabled = True
def __new__(cls, callback):
"""
Overrides built-in method
If caches the callback so the same instance of the wrapper is returned
Arguments:
callback (pyfbsdk.FBCallback): callback to cache
"""
instance = cls.__cache__.get(callback, None)
if instance is None:
instance = object.__new__(cls)
return instance
def __init__(self, callback):
"""
Constructor
Arguments:
callback (pyfbsdk.FBCallback): callback to cache
"""
instance = self.__class__.__cache__.get(callback, None)
if instance is not None:
return
self.__class__.__cache__[callback] = self
self._enabled = True
self._functions = []
self._callback = callback
self._callback.Add(self._execute)
def _execute(self, control, event):
"""
Method attached to the callback that runs the stored functions
Arguments:
control (pyfbsdk.FBControl): UI or component that initiated the callback
event (pyfbsdk.FBEvent): the event that triggered the callback
"""
if not self.__externalEnabled or not self._enabled:
return
remove = []
exceptions = []
for function in self._functions:
if isinstance(function, mobu.FBCallback):
remove.append(function)
continue
try:
function(control, event)
except Exception as exception:
exceptions.append(traceback.format_exc([exception.__class__, exception.message, exception]))
# Remove invalid function
for function in remove:
self.Remove(function)
if exceptions:
raise CallbackError("The following {} errors were raised while running the {} callback".format(len(exceptions), self.name),
exceptions)
def Add(self, command):
"""
Adds function to be called by the callback
Arguments:
command (function): function to be called by the callback
Return:
boolean
"""
if not isinstance(command, (types.NoneType, mobu.FBCallback)) and command not in self._functions:
self._functions.append(command)
return True
return False
def Remove(self, command):
"""
Removes the function from the callback if it belongs to the callback.
Arguments:
command (function): function to remove
Return:
boolean
"""
if command in self._functions:
self._functions.remove(command)
return True
return False
def RemoveAll(self):
""" Removes all the functions attached to the callback """
self._functions = []
@property
def name(self):
""" The name of the callback """
return CallbackManager.GetCallbackNameByEventType(self._callback.eventtype)
@property
def eventtype(self):
""" The callback event type """
return self._callback.eventtype
@property
def callbacks(self):
""" List of functions attached to this callback """
return self._functions
@property
def enabled(self):
""" Is this callback enabled """
return self.__externalEnabled and self._enabled
@enabled.setter
def enabled(self, value):
""" Sets if the callback enabled """
self._enabled = value
@classmethod
def allEnabled(cls):
"""
The enable state for all callbacks. This value takes precedence over the local enable state of individual
callbacks
Arguments:
value (bool): state to set for all callbacks
"""
return cls.__externalEnabled
@classmethod
def setAllEnabled(cls, value):
"""
Sets the enable state for all callbacks. This value takes precedence over the local enable state of individual
callbacks
"""
cls.__externalEnabled = value
@Singleton.Singleton
class CallbackManager(object):
"""
Manages callbacks in Motion Builder so they are accessible in one location
"""
# NOTE: This does not contain all the available callbacks in Motion Builder as they are scattered through
# out the SDK. Add missing callbacks as needed.
# ---------------------------
# ----- Scene callbacks -----
# ---------------------------
_CallbackTypes = {Scene.OnChange.eventtype: "OnChange",
Scene.OnTakeChange.eventtype: "OnTakeChange",
Player.OnChange.eventtype: "PlayerOnChange",
Application.OnFileOpen.eventtype: "OnFileOpen",
Application.OnFileOpenCompleted.eventtype: "OnFileOpenCompleted",
Application.OnFileNew.eventtype: "OnFileNew",
Application.OnFileNewCompleted.eventtype: "OnFileNewCompleted",
Application.OnFileSave.eventtype: "OnFileSave",
Application.OnFileSaveCompleted.eventtype: "OnFileSaveCompleted",
Application.OnFileMerge.eventtype: "OnFileMerge",
Application.OnFileExit.eventtype: "OnFileExit",
System.OnUIIdle.eventtype: "OnUIIdle",
System.OnConnectionNotify.eventtype: "OnConnectionNotify",
System.OnConnectionKeyingNotify.eventtype: "OnConnectionKeyingNotify",
System.OnConnectionDataNotify.eventtype: "OnConnectionDataNotify",
System.OnConnectionStateNotify.eventtype: "OnConnectionStateNotify",
System.OnVideoFrameRendering.eventtype: "OnVideoFrameRendering",
FileMonitor.OnFileChangeMainScene.eventtype: "OnFileChangeMainScene",
FileMonitor.OnFileChangeAnimationClip.eventtype: "OnFileChangeAnimationClip",
FileMonitor.OnFileChangeFileReference.eventtype: "OnFileChangeFileReference",
EvaluateManager.OnSynchronizationEvent.eventtype: "OnSynchronizationEvent",
EvaluateManager.OnRenderingPipelineEvent.eventtype: "OnRenderingPipelineEvent"
}
@property
def enabled(self):
""" Are callbacks enabled """
return CallbackWrapper.allEnabled()
@enabled.setter
def enabled(self, value):
"""
Enable or disable all callbacks managed by the manager
Arguments:
value (boolean): enable or disable callbacks
"""
CallbackWrapper.setAllEnabled(value)
@property
def OnChange(self):
"""
Callback triggered when a component has been selected, unselected, added, destroyed, renamed, etc.
Return:
FBEvent
"""
return CallbackWrapper(Scene.OnChange)
@property
def PlayerOnChange(self):
"""
Callback triggered when a component has been selected, unselected, added, destroyed, renamed, etc.
Return:
FBEvent
"""
return CallbackWrapper(Player.OnChange)
@property
def OnTakeChange(self):
"""
Callback triggered when a take has been selected, unselected, added, destroyed, renamed, etc.
Return:
FBEvent
"""
return CallbackWrapper(Scene.OnTakeChange)
# ---------------------------
# -- Application callbacks --
# ---------------------------
@property
def OnFileOpen(self):
"""
A File Open has been requested, nothing has been loaded yet.
Return:
pyfbsdk.FBEvent
"""
return CallbackWrapper(Application.OnFileOpen)
@property
def OnFileOpenCompleted(self):
"""
A File Open has been completed.
Return:
pyfbsdk.FBEvent
"""
return CallbackWrapper(Application.OnFileOpenCompleted)
@property
def OnFileNew(self):
"""
A File New has been requested, nothing has been destroyed yet.
Return:
pyfbsdk.FBEvent
"""
return CallbackWrapper(Application.OnFileNew)
@property
def OnFileNewCompleted(self):
"""
A File New has been completed.
Return:
pyfbsdk.FBEvent
"""
return CallbackWrapper(Application.OnFileNewCompleted)
@property
def OnFileSave(self):
"""
A File Save has been requested, nothing has been saved yet.
Return:
pyfbsdk.FBEvent
"""
return CallbackWrapper(Application.OnFileSave)
@property
def OnFileSaveCompleted(self):
"""
A File Save has been completed.
Return:
pyfbsdk.FBEvent
"""
return CallbackWrapper(Application.OnFileSaveCompleted)
@property
def OnFileMerge(self):
"""
A File Merge has been requested, nothing has been loaded yet.
When a file merge is completed, the FileOpenCompleted callback is called.
Return:
pyfbsdk.FBEvent
"""
return CallbackWrapper(Application.OnFileMerge)
@property
def OnFileExit(self):
"""
A File Exit as been requested, nothing has been destroyed yet.
This is called when Motion Builder has been asked to close.
Return:
pyfbsdk.FBEvent
"""
return CallbackWrapper(Application.OnFileExit)
# --------------------------
# ---- System callbacks ----
# --------------------------
@property
def OnUIIdle(self):
"""
Useful callback for less frequent GUI refresh and etc. lightweight tasks (occur once per several frames)
Return:
FBPropertyEventUIIdle
"""
return CallbackWrapper(System.OnUIIdle)
@property
def OnConnectionNotify(self):
"""
A connection event occurred between objects in the system.
Return:
FBPropertyEventConnectionNotify
"""
return CallbackWrapper(System.OnConnectionNotify)
@property
def OnConnectionDataNotify(self):
"""
A data event occured between objects in the system
Return:
pyfbsdk.FBEvent
"""
return CallbackWrapper(System.OnConnectionDataNotify)
@property
def OnConnectionStateNotify(self):
"""
A state change event occurred between objects in the system.
Return:
FBPropertyEventConnectionNotify
"""
return CallbackWrapper(System.OnConnectionStateNotify)
@property
def OnConnectionKeyingNotify(self):
"""
A connection event occured between a property and keyframe
Return:
FBEventConnectionKeyingNotify
"""
return CallbackWrapper(System.OnConnectionKeyingNotify)
@property
def OnConnectionVideoFramesRendering(self):
"""
A video frame rendering event occurred when the scene is being off-line rendered into video files.
Return:
FBPropertyEventVideoFrameRendering
"""
return CallbackWrapper(System.OnVideoFrameRendering)
# --------------------------------
# ---- File Monitor callbacks ----
# --------------------------------
@property
def OnFileChangeMainScene(self):
"""
A file that is being monitored has changed since the last event in the current scene was triggered
Return:
FBPropertyEvent
"""
return CallbackWrapper(FileMonitor.OnFileChangeMainScene)
@property
def OnFileChangeFileReference(self):
"""
A file that is being monitored has changed since the last namespace related event in the current scene was
triggered
Return:
FBPropertyEvent
"""
return CallbackWrapper(FileMonitor.OnFileChangeFileReference)
@property
def OnFileChangeAnimationClip(self):
"""
A file that is being monitored has changed since the last animation clip related event in the current scene
was triggered
Return:
FBPropertyEvent
"""
return CallbackWrapper(FileMonitor.OnFileChangeAnimationClip)
# --------------------------------
# -- Evaluate Manager callbacks --
# --------------------------------
@property
def OnSynchronizationEvent(self):
"""
For callback events at synchronization point, such as when there is a frame change in the time slider
Return:
FBPropertyEventCallbackSynPoint
"""
return CallbackWrapper(EvaluateManager.OnSynchronizationEvent)
@property
def OnRenderingPipelineEvent(self):
"""
For callback events at synchronization point, such as when there is a frame change in the time slider
Return:
FBPropertyEventCallbackSynPoint
"""
return CallbackWrapper(EvaluateManager.OnRenderingPipelineEvent)
@staticmethod
def Remove(func, events=None):
"""
Removes a function if it is hooked to the given events. When no events are given, it searches all
available events that it might belong to and removes the function / method from them.
Arguments:
func (function or method): function / method to remove from the
events (list[FBEvents, etc.]): events to remove methods from
Return:
boolean; whether the function/method was removed from the events
"""
search = True
# Get a list of events that the function hooked if no events are passed
if events is None:
events = [event
for event in CallbackManager.GetAllEvents()
for callback in list(event.callbacks)
if callback.Callback == func]
search = False
# convert events into a list if it isn't already a list
elif not isinstance(events, (list, tuple)):
events = [events]
# remove callbacks
removed = False
for event in events:
if search:
removed = [event.Remove(func) for callback in list(event.callbacks) if callback.Callback == func]
removed = len(removed) > 0
else:
event.Remove(func)
removed = True
return removed
@classmethod
def GetCallbackNameByEventType(cls, eventtype):
"""
Get the name of the callback by its eventtype value
Arguments:
eventtype (pyfbsdk.FBEventType): the type of event, some callbacks return an FBEvent others an interger
Return:
string when the value is found, returns back the eventtype otherwise
"""
return cls._CallbackTypes.get(eventtype, eventtype)
@classmethod
def RemoveAll(cls, skipEvents=()):
"""
Attempts to remove all callbacks
Arguments:
skipEvents (list[pyfbsdk.FBEventName]): list of event types to avoid removing
"""
for event in cls.GetAllEvents():
if event is None or event.eventtype in skipEvents:
continue
if event.callbacks:
logging.info("Close - \t Clearing {instance}.{event}".format(
event=cls.GetCallbackNameByEventType(event.eventtype), instance=event.control))
for callback in event.callbacks:
while isinstance(callback, mobu.FBCallback):
callback = callback.Callback
logging.info("Close - \t\t Removing {module}.{function}".format(
function=getattr(callback, "__name__", "None"),
module=getattr(callback, "__module__", "None")))
event.RemoveAll()
@classmethod
def GetAllEvents(cls):
"""
Gets all the available events that this class manages and attempts to retrieve events that have been
picked up by python's garbage collection.
Return:
generator
"""
# Garbage Collection may not pick up these callbacks, so we explicitly return them to be safe
yield Scene.OnChange
yield Scene.OnTakeChange
yield Application.OnFileOpen
yield Application.OnFileOpenCompleted
yield Application.OnFileNew
yield Application.OnFileNewCompleted
yield Application.OnFileSave
yield Application.OnFileSaveCompleted
yield Application.OnFileMerge
yield System.OnUIIdle
yield System.OnConnectionNotify
yield System.OnConnectionDataNotify
yield System.OnConnectionStateNotify
yield System.OnConnectionKeyingNotify
yield System.OnVideoFrameRendering
yield FileMonitor.OnFileChangeFileReference
yield FileMonitor.OnFileChangeAnimationClip
yield FileMonitor.OnFileChangeMainScene
yield EvaluateManager.OnSynchronizationEvent
yield EvaluateManager.OnRenderingPipelineEvent
for gc_object in gc.get_objects():
# get all Scene callbacks
if isinstance(gc_object, mobu.FBScene):
for eventName in ("OnChange", "OnTakeChange"):
yield getattr(gc_object, eventName)
# get all Application callbacks
elif isinstance(gc_object, mobu.FBApplication):
for eventName in ("OnFileOpen", "OnFileOpenCompleted",
"OnFileNew", "OnFileNewCompleted",
"OnFileSave", "OnFileSaveCompleted",
"OnFileMerge", "OnFileExit"):
yield getattr(gc_object, eventName)
elif isinstance(gc_object, mobu.FBSystem):
for eventName in ("OnUIIdle", "OnConnectionNotify",
"OnConnectionDataNotify", "OnConnectionStateNotify",
"OnVideoFrameRendering"):
yield getattr(gc_object, eventName)
Callbacks = CallbackManager()
#
#
# Mirror Partners
#
#
# Mirror_Label:[ Left, Right ]
mirrorPairs = {
"IK_Hand":[ "IK_R_Hand", "IK_L_Hand" ],
"IK_Foot":[ "IK_R_Foot", "IK_L_Foot" ],
"PH_Hand":[ "PH_R_Hand", "PH_L_Hand" ],
"PH_Foot":[ "PH_R_Foot", "PH_L_Foot" ],
"PH_Boot":[ "PH_R_Boot", "PH_L_Boot" ],
"PH_Hip":[ "PH_R_Hip", "PH_L_Hip" ],
"PH_Breast":[ "PH_R_Breast", "PH_L_Breast" ],
"PH_Shoulder":[ "PH_R_Shoulder", "PH_L_Shoulder" ],
"RB_ThighRoll":[ "RB_R_ThighRoll", "RB_L_ThighRoll" ]
}
# 0 = None, 1 = Self
mirrorNoPairs = {
"mover":1,
"HeelHeight":0,
"SKEL_Tail":1,
"SKEL_ROOT":0,
"SKEL_SADDLE":0,
"OH_FacingDir":1,
"OH_LookDir":0,
"PH_Belt_Front":0,
"PH_Belt_Melee":0,
"PH_Belt_Rear":0,
"PH_Belt_Thrower":0,
"PH_Bow":0,
"PH_Rifle":0
}
# ---------------------------------------------------------------------------------------------------------------------
# --------------------------------- Anything with 'g' to be depreciated. Don't use.# ----------------------------------
# ---------------------------------------------------------------------------------------------------------------------
gApp = Application
gScene = Scene
gActorFaces = gScene.ActorFaces
gActors = gScene.Actors
gAudioClips = gScene.AudioClips
gCameras = gScene.Cameras
gCharacterExtensions = gScene.CharacterExtensions
gCharacterFaces = gScene.CharacterFaces
gCharacterPoses = gScene.CharacterPoses
gCharacters = gScene.Characters
gConstraintSlovers = gScene.ConstraintSolvers
gComponents = Components
gConstraints = gScene.Constraints
gControlSets = gScene.ControlSets
gDevices = gScene.Devices
gFolders = gScene.Folders
gGroups = gScene.Groups
gHandles = gScene.Handles
gLights = gScene.Lights
gMarkerSets = gScene.MarkerSets
gMaterials = gScene.Materials
gNotes = gScene.Notes
gObjectPoses = gScene.ObjectPoses
gPhysicalProperties = gScene.PhysicalProperties
gPoses = gScene.Poses
gRoot = gScene.RootModel
gSets = gScene.Sets
gShaders = gScene.Shaders
gTakes = gScene.Takes
gTextures = gScene.Textures
gUserObjects = gScene.UserObjects
gVideoClips = gScene.VideoClips
gUlog = Ulog
def rs_NonSystemCameraList():
return [camera for camera in Cameras if not camera.SystemCamera]
# # Colors ##
gRed = mobu.FBColor(1, 0, 0)
gOrange = mobu.FBColor(0.9, 0.4, 0)
gPink = mobu.FBColor(1, 0, 1)
gGreen = mobu.FBColor(0.4, 0.7, 0)
gYellow = mobu.FBColor(1, 1, 0)
gDarkBlue = mobu.FBColor(0, 0.2, 0.65)
gCyan = mobu.FBColor(0, 1, 1)
# # Character skeleton array ## - Get from ProjectData
gSkelArray = ProjectData.data.GetSkeltonArray()
# # Floor contacts array ##
gContactsArray = ['L_Foot_Contact',
'R_Foot_Contact',
'L_Hand_Contact',
'R_Hand_Contact', ]
# # Animal skeleton arrays ##
gAnimalSkelHeadNeckArray = ['_Neck_1',
'_Neck_2',
'_Head',
'_Head_NUB',
'SPR_R_Ear_ROOT',
'SPR_R_Ear',
'SPR_L_Ear_ROOT',
'SPR_L_Ear',
'AntlerRoot',
'AntlerRoot_NUB']
gAnimalSkelTorsoArray = ['_ROOT',
'_Spine_Root',
'_Spine0',
'_Spine1',
'_Spine2',
'_Spine2_NUB',
'_Spine3',
'_PelvisRoot',
'_Pelvis',
'_Pelvis1']
gAnimalSkelLeftArmArray = ['_L_Clavicle',
'_L_Clavicle_NUB',
'_L_UpperArm',
'_L_Forearm',
'_L_Hand',
'_L_Finger00',
'_L_Finger00_NUB',
'_L_Finger01',
'_L_Finger01_NUB',
'MH_L_ShoulderBladeRoot',
'MH_L_ShoulderBlade']
gAnimalSkelRightArmArray = ['_R_Clavicle',
'_R_Clavicle_NUB',
'_R_UpperArm',
'_R_Forearm',
'_R_Hand',
'_R_Finger00',
'_R_Finger00_NUB',
'_R_Finger01',
'_R_Finger01_NUB',
'MH_R_ShoulderBladeRoot',
'MH_R_ShoulderBlade']
gAnimalSkelLeftLegArray = ['_L_Thigh',
'_L_Thigh_NUB',
'_L_Calf',
'_L_Foot',
'_L_Toe0',
'_L_Toe0_NUB',
'_L_Toe1',
'_L_Toe1_NUB']
gAnimalSkelRightLegArray = ['_R_Thigh',
'_R_Thigh_NUB',
'_R_Calf',
'_R_Foot',
'_R_Toe0',
'_R_Toe0NUB',
'_R_Toe1',
'_R_Toe1_NUB']
gAnimalSkelTailArray = ['_Tail_01',
'_Tail_02',
'_Tail_03',
'_Tail_04',
'_Tail_05',
'_Tail_05_NUB',
'_Tail_05_NUB-END']
gAnimalSkelArray = [gAnimalSkelHeadNeckArray[0],
gAnimalSkelHeadNeckArray[1],
gAnimalSkelHeadNeckArray[2],
gAnimalSkelHeadNeckArray[3],
gAnimalSkelHeadNeckArray[4],
gAnimalSkelHeadNeckArray[5],
gAnimalSkelHeadNeckArray[6],
gAnimalSkelHeadNeckArray[7],
gAnimalSkelHeadNeckArray[8],
gAnimalSkelHeadNeckArray[9],
gAnimalSkelTorsoArray[0],
gAnimalSkelTorsoArray[1],
gAnimalSkelTorsoArray[2],
gAnimalSkelTorsoArray[3],
gAnimalSkelTorsoArray[4],
gAnimalSkelTorsoArray[5],
gAnimalSkelTorsoArray[6],
gAnimalSkelTorsoArray[7],
gAnimalSkelTorsoArray[8],
gAnimalSkelTorsoArray[9],
gAnimalSkelLeftArmArray[0],
gAnimalSkelLeftArmArray[1],
gAnimalSkelLeftArmArray[2],
gAnimalSkelLeftArmArray[3],
gAnimalSkelLeftArmArray[4],
gAnimalSkelLeftArmArray[5],
gAnimalSkelLeftArmArray[6],
gAnimalSkelLeftArmArray[7],
gAnimalSkelLeftArmArray[8],
gAnimalSkelLeftArmArray[9],
gAnimalSkelLeftArmArray[10],
gAnimalSkelRightArmArray[0],
gAnimalSkelRightArmArray[1],
gAnimalSkelRightArmArray[2],
gAnimalSkelRightArmArray[3],
gAnimalSkelRightArmArray[4],
gAnimalSkelRightArmArray[5],
gAnimalSkelRightArmArray[6],
gAnimalSkelRightArmArray[7],
gAnimalSkelRightArmArray[8],
gAnimalSkelRightArmArray[9],
gAnimalSkelRightArmArray[10],
gAnimalSkelLeftLegArray[0],
gAnimalSkelLeftLegArray[1],
gAnimalSkelLeftLegArray[2],
gAnimalSkelLeftLegArray[3],
gAnimalSkelLeftLegArray[4],
gAnimalSkelLeftLegArray[5],
gAnimalSkelLeftLegArray[6],
gAnimalSkelLeftLegArray[7],
gAnimalSkelRightLegArray[0],
gAnimalSkelRightLegArray[1],
gAnimalSkelRightLegArray[2],
gAnimalSkelRightLegArray[3],
gAnimalSkelRightLegArray[4],
gAnimalSkelRightLegArray[5],
gAnimalSkelRightLegArray[6],
gAnimalSkelRightLegArray[7],
gAnimalSkelTailArray[0],
gAnimalSkelTailArray[1],
gAnimalSkelTailArray[2],
gAnimalSkelTailArray[3],
gAnimalSkelTailArray[4],
gAnimalSkelTailArray[5],
gAnimalSkelTailArray[6]]
gAnimalPrefixSkel = 'SKEL'
gAnimalPrefixCtrlRig = 'CTRLRIG'
gAnimalPrefixGS = 'gs:'
gNewAnimalSkelArray = ["_Pelvis",
"_L_Thigh",
"_L_Calf",
"_L_Foot",
"_R_Thigh",
"_R_Calf",
"_R_Foot",
"_Spine0",
"_L_UpperArm",
"_L_Forearm",
"_L_Hand",
"_R_UpperArm",
"_R_Forearm",
"_R_Hand",
"_Head",
"_L_Toe0",
"_R_Toe0",
"_L_Clavicle",
"_R_Clavicle",
"_Neck0",
"_L_Finger00",
"_R_Finger00",
"_Spine1",
"_Spine2",
"_Spine3",
"_Neck1",
"_Neck2",
"_Neck3",
"_Neck4",
"_Neck5",
"_R_Toe1",
"_L_Toe1",
"_R_Finger01",
"_L_Finger01"]
# # GIANT skeleton array ##
gGiantSkelArray = ['root',
'waist_dum',
'torso_1',
'torso_2',
'torso_3',
'torso_4',
'torso_5',
'torso_6',
'torso_7',
'neck_1',
'neck_2',
'neck_3',
'head',
'l_shoulder_dum',
'l_shoulder',
'l_up_arm',
'l_up_arm_twist',
'l_low_arm',
'l_low_arm_twist',
'l_hand',
'l_hand_1_dum',
'l_hand_1',
'l_up_fing_1',
'l_mid_fing_1',
'l_low_fing_1',
'l_hand_2_dum',
'l_hand_2',
'l_up_fing_2',
'l_mid_fing_2',
'l_low_fing_2',
'l_hand_3_dum',
'l_hand_3',
'l_up_fing_3',
'l_mid_fing_3',
'l_low_fing_3',
'l_hand_4_dum',
'l_hand_4',
'l_up_fing_4',
'l_mid_fing_4',
'l_low_fing_4',
'l_hand_5_dum',
'l_hand_5',
'l_up_fing_5',
'l_mid_fing_5',
'l_low_fing_5',
'r_shoulder_dum',
'r_shoulder',
'r_up_arm',
'r_up_arm_twist',
'r_low_arm',
'r_low_arm_twist',
'r_hand',
'r_hand_1_dum',
'r_hand_1',
'r_up_fing_1',
'r_mid_fing_1',
'r_low_fing_1',
'r_hand_2_dum',
'r_hand_2',
'r_up_fing_2',
'r_mid_fing_2',
'r_low_fing_2',
'r_hand_3_dum',
'r_hand_3',
'r_up_fing_3',
'r_mid_fing_3',
'r_low_fing_3',
'r_hand_4_dum',
'r_hand_4',
'r_up_fing_4',
'r_mid_fing_4',
'r_low_fing_4',
'r_hand_5_dum',
'r_hand_5',
'r_up_fing_5',
'r_mid_fing_5',
'r_low_fing_5',
'l_up_leg_dum',
'l_up_leg',
'l_low_leg',
'l_foot',
'l_toes',
'r_up_leg_dum',
'r_up_leg',
'r_low_leg',
'r_foot',
'r_toes',
'mesh']
gHoovedQuadrupeds = ["A_C_Horse",
"A_C_Deer",
"A_C_Cow",
"A_C_Boar",
"A_C_Pig",
"P_C_Horse_01",
"P_C_Horse_02"]
gNonHoovedQuadrupeds = ["A_C_Rottweiler",
"A_C_Chop",
"A_C_Retriever",
"A_C_Coyote",
"A_C_Coyote_01",
"A_C_MtLion"]
# # 3Lateral face geometries ##
gCAFaceAttrGui = ["FacialAttrGUI", "Tongue", "RECT_press", "TEXT_press", "RECT_rollIn", "TEXT_rollIn",
"RECT_narrowWide", "TEXT_narrowWide", "JAW", "RECT_clench", "TEXT_clench", "RECT_backFwd",
"TEXT_backFwd", "NOSE", "RECT_nasolabialFurrowL", "TEXT_nasolabialFurrowL", "RECT_nasolabialFurrowR",
"TEXT_nasolabialFurrowR", "MOUTH", "RECT_smileR", "RECT_smileL", "TEXT_smileL", "TEXT_smileR", "RECT_openSmileR",
"TEXT_openSmileR", "RECT_openSmileL", "TEXT_openSmileL", "RECT_frownR", "TEXT_frownR", "RECT_frownL",
"TEXT_frownL", "RECT_scream", "TEXT_scream", "RECT_lipsNarrowWideR", "TEXT_lipsNarrowWideR", "RECT_lipsNarrowWideL",
"TEXT_lipsNarrowWideL", "RECT_lipsStretchOpenR", "TEXT_lipsStretchOpenR", "RECT_lipsStretchOpenL",
"TEXT_lipsStretchOpenL", "RECT_chinWrinkle", "TEXT_chinWrinkle", "RECT_chinRaiseUpper", "TEXT_chinRaiseUpper",
"RECT_chinRaiseLower", "TEXT_chinRaiseLower", "RECT_closeOuterR", "TEXT_closeOuterR", "RECT_closeOuterL",
"TEXT_closeOuterL", "RECT_puckerR", "TEXT_puckerR", "RECT_puckerL", "TEXT_puckerL", "RECT_oh", "TEXT_oh",
"RECT_funnelUR", "TEXT_funnelUR", "RECT_funnelDR", "TEXT_funnelDR", "RECT_mouthSuckUR", "TEXT_mouthSuckUR",
"RECT_mouthSuckDR", "TEXT_mouthSuckDR", "RECT_pressR", "TEXT_pressR", "RECT_pressL", "TEXT_pressL", "RECT_dimpleR",
"TEXT_dimpleR", "RECT_dimpleL", "TEXT_dimpleL", "RECT_suckPuffR", "TEXT_suckPuffR", "RECT_suckPuffL", "TEXT_suckPuffL",
"RECT_lipBite", "TEXT_lipBite", "RECT_funnelUL", "TEXT_funnelUL", "RECT_funnelDL", "TEXT_funnelDL", "RECT_funnelDL001",
"TEXT_mouthSuckUL", "RECT_mouthSuckDL", "TEXT_mouthSuckDL", "Eyes", "RECT_blinkL", "TEXT_blinkL", "RECT_squeezeR",
"TEXT_squeezeR", "RECT_squeezeL", "TEXT_squeezeL", "RECT_lipsNarrowWideR001", "TEXT_blinkR", "RECT_openCloseUR001",
"TEXT_openCloseDR", "RECT_squintInnerUR", "TEXT_squintInnerUR", "RECT_squintInnerDR", "TEXT_squintInnerDR",
"RECT_openCloseUR", "TEXT_openCloseUR", "RECT_openCloseDL", "TEXT_openCloseDL", "RECT_squintInnerUL", "TEXT_squintInnerUL",
"RECT_squintInnerDL", "TEXT_squintInnerDL", "RECT_openCloseUL", "TEXT_openCloseUL", "LIPS", "RECT_thinThick_C",
"RECT_thinThick_D", "RECT_stickyLips_E", "RECT_thinThick_B", "RECT_thinThick_F", "RECT_thinThick_H", "RECT_thinThick_G",
"RECT_stickyLips_A",
"faceControls_FRAME", "mouth_FRAME", "mouth_TEXT", "jaw_FRAME", "jaw_TEXT", "tongue_TEXT", "tongueMove_FRAME",
"tongueRoll_FRAME", "tongueInOut_FRAME", "outerBrow_R_FRAME", "innerBrow_L_FRAME", "outerBrow_L_FRAME", "brows_TEXT",
"innerBrow_R_FRAME", "eye_R_FRAME", "eye_L_FRAME", "eyes_TEXT", "eye_C_FRAME", "nose_L_FRAME", "nose_R_FRAME",
"nose_TEXT", "cheek_TEXT", "cheek_L_FRAME", "cheek_R_FRAME"]
gCAOneDSliders = ["CIRC_press", "CIRC_rollIn", "CIRC_nasolabialFurrowL", "CIRC_nasolabialFurrowR", "CIRC_smileR", "CIRC_smileL",
"CIRC_openSmileR", "CIRC_openSmileL", "CIRC_frownR", "CIRC_frownL", "CIRC_scream", "CIRC_lipsStretchOpenR",
"CIRC_lipsStretchOpenL", "CIRC_chinWrinkle", "CIRC_puckerR", "CIRC_puckerL", "CIRC_oh", "CIRC_funnelUR", "CIRC_funnelDR",
"CIRC_mouthSuckUR", "CIRC_mouthSuckDR", "CIRC_pressR", "CIRC_pressL", "CIRC_dimpleR", "CIRC_dimpleL", "CIRC_lipBite",
"CIRC_funnelUL", "CIRC_funnelDL", "CIRC_mouthSuckUL", "CIRC_mouthSuckDL", "CIRC_squeezeR", "CIRC_squeezeL",
"CIRC_squintInnerUR", "CIRC_squintInnerDR", "CIRC_squintInnerUL", "CIRC_squintInnerDL", "CIRC_stickyLips_E", "CIRC_stickyLips_A"]
gCATwoDSliders = ["CIRC_narrowWide", "CIRC_clench", "CIRC_backFwd", "CIRC_lipsNarrowWideR", "CIRC_lipsNarrowWideL", "CIRC_chinRaiseUpper",
"CIRC_chinRaiseLower", "CIRC_closeOuterR", "CIRC_closeOuterL", "CIRC_suckPuffR", "CIRC_suckPuffL", "CIRC_blinkL", "CIRC_blinkR",
"CIRC_openCloseDR", "CIRC_openCloseUR", "CIRC_openCloseDL", "CIRC_openCloseUL", "CIRC_thinThick_C", "CIRC_thinThick_D",
"CIRC_thinThick_B", "CIRC_thinThick_F", "CIRC_thinThick_H", "CIRC_thinThick_G"]
qSquareSliders = ["mouth_CTRL", "tongueMove_CTRL", "tongueRoll_CTRL", "eye_C_CTRL", "eye_L_CTRL", "eye_R_CTRL", "nose_L_CTRL", "nose_R_CTRL"]
qPosNegSliders = ["tongueInOut_CTRL", "outerBrow_R_CTRL", "outerBrow_L_CTRL"]
qPosSliders = ["cheek_L_CTRL", "cheek_R_CTRL"]
g3WaySliders = ["jaw_CTRL", "innerBrow_L_CTRL", "innerBrow_R_CTRL"]
gOnFaceControls = ["lowerLip_L_CTRL", "lowerLip_C_CTRL", "lowerLip_R_CTRL", "lipCorner_R_CTRL", "upperLip_C_CTRL",
"upperLip_L_CTRL", "lipCorner_L_CTRL", "upperLip_R_CTRL", "eyelidUpperOuter_L_CTRL", "eyelidUpperInner_L_CTRL",
"eyelidLowerOuter_L_CTRL", "eyelidLowerInner_L_CTRL", "eyelidLowerOuter_R_CTRL", "eyelidLowerInner_R_CTRL",
"eyelidUpperOuter_R_CTRL", "eyelidUpperInner_R_CTRL"]
gBrowCtrls = ["innerBrow_R_CTRL", "outerBrow_L_CTRL", "innerBrow_L_CTRL", "outerBrow_R_CTRL"]
gEyeCtrls = ["CIRC_openCloseUL", "CIRC_squintInnerDL", "CIRC_squintInnerUL", "CIRC_openCloseDL", "CIRC_openCloseUR", "CIRC_squintInnerDR",
"CIRC_squintInnerUR", "CIRC_openCloseDR", "CIRC_blinkR", "CIRC_squeezeL", "CIRC_squeezeR", "CIRC_blinkL", "eyelidUpperInner_R_CTRL",
"eyelidUpperOuter_R_CTRL", "eyelidLowerInner_R_CTRL", "eyelidLowerOuter_R_CTRL", "eyelidLowerInner_L_CTRL", "eyelidLowerOuter_L_CTRL",
"eyelidUpperInner_L_CTRL", "eyelidUpperOuter_L_CTRL", "eye_C_CTRL", "eye_R_CTRL", "eye_L_CTRL"]
gMouthCtrls = ["CIRC_stickyLips_A", "CIRC_thinThick_G", "CIRC_thinThick_H", "CIRC_thinThick_F", "CIRC_thinThick_B", "CIRC_stickyLips_E",
"CIRC_thinThick_D", "CIRC_thinThick_C", "CIRC_mouthSuckDL", "CIRC_mouthSuckUL", "CIRC_funnelDL", "CIRC_funnelUL", "CIRC_lipBite",
"CIRC_suckPuffL", "CIRC_suckPuffR", "CIRC_dimpleL", "CIRC_dimpleR", "CIRC_pressL", "CIRC_pressR", "CIRC_mouthSuckDR",
"CIRC_mouthSuckUR", "CIRC_funnelDR", "CIRC_funnelUR", "CIRC_oh", "CIRC_puckerL", "CIRC_puckerR", "CIRC_closeOuterL",
"CIRC_closeOuterR", "CIRC_chinRaiseLower", "CIRC_chinRaiseUpper", "CIRC_chinWrinkle", "CIRC_lipsStretchOpenL", "CIRC_lipsStretchOpenR",
"CIRC_lipsNarrowWideL", "CIRC_lipsNarrowWideR", "CIRC_scream", "CIRC_frownL", "CIRC_frownR", "CIRC_openSmileL", "CIRC_openSmileR",
"CIRC_smileL", "CIRC_smileR", "CIRC_nasolabialFurrowR", "CIRC_nasolabialFurrowL", "CIRC_backFwd", "CIRC_clench", "CIRC_narrowWide",
"CIRC_rollIn", "CIRC_press", "upperLip_R_CTRL", "lipCorner_L_CTRL", "upperLip_L_CTRL", "upperLip_C_CTRL", "lipCorner_R_CTRL",
"lowerLip_R_CTRL", "lowerLip_C_CTRL", "lowerLip_L_CTRL", "cheek_R_CTRL", "cheek_L_CTRL", "nose_R_CTRL", "nose_L_CTRL",
"tongueInOut_CTRL", "tongueRoll_CTRL", "tongueMove_CTRL", "jaw_CTRL", "mouth_CTRL"]
gBlushCtrl = [ "cutsceneBlush_OFF" ]
gFacialRoot = [ "FACIAL_facialRoot" ]
additionalAnimalControls = ["CTRL_R_Ear", "CTRL_L_Ear", "CTRL_R_Nose"]
# # Ambient face controller id's ##
gAmbientControllerIds = { "CTRL_R_Brow":7689,
"CTRL_C_Brow":31528,
"CTRL_L_Brow":19497,
"CTRL_R_Blink":25778,
"CTRL_L_Blink":19205,
"CTRL_R_Eye":64876,
"CTRL_L_Eye":447,
"CTRL_R_Cheek":40256,
"CTRL_L_Cheek":33683,
"CTRL_UpperLip":28113,
"CTRL_UpperLip_Curl":17867,
"CTRL_R_Mouth":10760,
"CTRL_L_Mouth":4187,
"CTRL_Mouth":4626,
"CTRL_Tongue_In_Out":10274,
"CTRL_Tongue":51288,
"CTRL_LowerLip":64382,
"CTRL_LowerLip_Curl":15406,
"open":19779,
"W":455,
"ShCh":34077,
"PBM":21981,
"FV":1574,
"wide":50730,
"tBack":58819,
"tTeeth":47000,
"tRoof":62959,
"AU2_Outer_Brow_Raiser_Right":59610,
"AU2_Outer_Brow_Raiser_Left":20502,
"AU4_Brow_Lowerer":41424,
"AU10_Upper_Lip_Raiser":63645,
"AU15_Lip_Corner_Depressor_Right":22207,
"AU15_Lip_Corner_Depressor_Left":27754,
"AU16_Lower_Lip_Depressor":20640,
"AU20_Lip_Stretcher":33019,
"AU23_Lip_Tightener":53070,
"AU26_Jaw_Drop":54342,
"open_pose":840,
"W_pose":51201,
"wide_pose":52693,
"tBack_pose":34146,
"tTeeth_pose":23631,
"tRoof_pose":22140,
"Brow_Up_L":58471,
"Brow_Up_R":58445,
"Brows_Down":18040,
"Squint":41298,
"Look_Up_Lids":35793,
"Look_Down_Lids":62006,
"IH":1608}
# # Ambient facial geometries ##
gAmbientBorders = ["RECT_R_Blink",
"TEXT_R_Blink",
"RECT_L_Blink",
"TEXT_L_Blink",
"RECT_L_Cheek",
"TEXT_L_Cheek",
"RECT_R_Cheek",
"TEXT_R_Cheek",
"RECT_UpperLip_Curl",
"TEXT_UpperLip_Curl",
"RECT_LowerLip_Curl",
"TEXT_LowerLip_Curl",
"RECT_Tongue_In_Out",
"TEXT_Tongue_In_Out",
"RECT_C_Brow",
"TEXT_C_Brow",
"RECT_R_Brow",
"TEXT_R_Brow",
"RECT_L_Brow",
"TEXT_L_Brow",
"RECT_R_Eye",
"TEXT_R_Eye",
"RECT_L_Eye",
"TEXT_L_Eye",
"RECT_R_Mouth",
"TEXT_R_Mouth",
"RECT_Mouth",
"TEXT_Mouth",
"RECT_L_Mouth",
"TEXT_L_Mouth",
"RECT_UpperLip",
"TEXT_UpperLip",
"RECT_LowerLip",
"TEXT_LowerLip",
"RECT_Jaw",
"TEXT_Jaw",
"RECT_Tongue",
"TEXT_Tongue",
"RECT_MouthPinch",
"TEXT_MouthPinch",
"RECT_open",
"TEXT_open",
"RECT_W",
"TEXT_W",
"RECT_ShCh",
"TEXT_ShCh",
"RECT_PBM",
"TEXT_PBM",
"RECT_FV",
"TEXT_FV",
"RECT_wide",
"TEXT_wide",
"RECT_tBack",
"TEXT_tBack",
"RECT_tTeeth",
"TEXT_tTeeth",
"RECT_tRoof",
"TEXT_tRoof",
"RECT_AU2_Outer_Brow_Raiser_Left",
"TEXT_AU2_Outer_Brow_Raiser_Left",
"RECT_AU2_Outer_Brow_Raiser_Right",
"TEXT_AU2_Outer_Brow_Raiser_Right",
"RECT_AU4_Brow_Lowerer",
"TEXT_AU4_Brow_Lowerer",
"RECT_AU10_Upper_Lip_Raiser",
"TEXT_AU10_Upper_Lip_Raiser",
"RECT_AU15_Lip_Corner_Depressor_Left",
"TEXT_AU15_Lip_Corner_Depressor_Left",
"RECT_AU15_Lip_Corner_Depressor_Right",
"TEXT_AU15_Lip_Corner_Depressor_Right",
"RECT_AU16_Lower_Lip_Depressor",
"TEXT_AU16_Lower_Lip_Depressor",
"RECT_AU20_Lip_Stretcher",
"TEXT_AU20_Lip_Stretcher",
"RECT_AU23_Lip_Tightener",
"TEXT_AU23_Lip_Tightener",
"RECT_AU26_Jaw_Drop",
"TEXT_AU26_Jaw_Drop",
"RECT_open_pose",
"TEXT_open_pose",
"RECT_W_pose",
"TEXT_W_pose",
"RECT_ShCh",
"TEXT_ShCh",
"RECT_PBM",
"TEXT_PBM",
"RECT_FV",
"TEXT_FV",
"RECT_wide_pose",
"TEXT_wide_pose",
"RECT_tBack_pose",
"TEXT_tBack_pose",
"RECT_tTeeth_pose",
"TEXT_tTeeth_pose",
"RECT_tRoof_pose",
"TEXT_tRoof_pose",
"RECT_Brow_Up_L",
"TEXT_Brow_Up_L",
"RECT_Brow_Up_R",
"TEXT_Brow_Up_R",
"RECT_Brows_Down",
"TEXT_Brows_Down",
"RECT_Squint",
"TEXT_Squint",
"RECT_Look_Up_Lids",
"TEXT_Look_Up_Lids",
"RECT_Look_Down_Lids",
"TEXT_Look_Down_Lids",
"RECT_IH",
"TEXT_IH"]
gAmbient2DSliders = ["CTRL_C_Brow",
"CTRL_R_Brow",
"CTRL_L_Brow",
"CTRL_R_Eye",
"CTRL_L_Eye",
"CTRL_R_Mouth",
"CTRL_Mouth",
"CTRL_L_Mouth",
"CTRL_UpperLip",
"CTRL_LowerLip",
"CTRL_Jaw",
"CTRL_Tongue"]
gAmbient1DSliders = ["CTRL_R_Blink",
"CTRL_L_Blink",
"CTRL_L_Cheek",
"CTRL_R_Cheek",
"CTRL_UpperLip_Curl",
"CTRL_LowerLip_Curl",
"CTRL_Tongue_In_Out",
"CTRL_MouthPinch",
"open",
"W",
"ShCh",
"PBM",
"FV",
"wide",
"tBack",
"tTeeth",
"tRoof",
"AU2_Outer_Brow_Raiser_Left",
"AU2_Outer_Brow_Raiser_Right",
"AU4_Brow_Lowerer",
"AU10_Upper_Lip_Raiser",
"AU15_Lip_Corner_Depressor_Left",
"AU15_Lip_Corner_Depressor_Right",
"AU16_Lower_Lip_Depressor",
"AU20_Lip_Stretcher",
"AU23_Lip_Tightener",
"AU26_Jaw_Drop",
"open_pose",
"W_pose",
"wide_pose",
"tBack_pose",
"tTeeth_pose",
"tRoof_pose",
"Brow_Up_L",
"Brow_Up_R",
"Brows_Down",
"Squint",
"Look_Up_Lids",
"Look_Down_Lids",
"IH"]
# ##
# ##
# ##
# ##
# ##
# ##
# ##
# ## UFC Facial Rig Arrays
# ##
# ##
# ##
# ##
# ##
# ##
# ##
# ##
gUFCWolf_Ctrls = [
"CTRL_analog_R_ear3",
"CTRL_analog_L_ear3",
"CTRL_analog_R_ear2",
"CTRL_analog_L_ear2",
"CTRL_analog_R_ear1",
"CTRL_analog_L_ear1",
"CTRL_analog_C_tongue4",
"CTRL_analog_C_tongue3",
"CTRL_analog_C_tongue2",
"CTRL_analog_C_tongue1",
"CTRL_lookAt_WorldParentSwitch",
"CTRL_rig_LogicSwitch",
"CTRL_R_nose",
"CTRL_L_nose",
"CTRL_C_tongue_inOut",
"CTRL_C_tongue_stickToSnout",
"CTRL_C_tongue_moveUpDown",
"CTRL_C_tongue_roll",
"CTRL_R_eye_blink",
"CTRL_L_eye_blink",
"CTRL_R_eye_cheekRaise",
"CTRL_L_eye_cheekRaise",
"CTRL_R_eye_squintInner",
"CTRL_L_eye_squintInner",
"CTRL_L_eye",
"CTRL_R_eye",
"CTRL_C_eye",
"CTRL_L_brow_lateral",
"CTRL_R_brow_lateral",
"CTRL_L_brow_down",
"CTRL_R_brow_down",
"CTRL_L_brow_raiseOut",
"CTRL_L_brow_raiseIn",
"CTRL_R_brow_raiseIn",
"CTRL_R_brow_raiseOut",
"CTRL_R_mouth_lipsRollD",
"CTRL_L_mouth_lipsRollD",
"CTRL_R_mouth_lipsRollU",
"CTRL_L_mouth_lipsRollU",
"CTRL_L_mouth_howlD",
"CTRL_L_mouth_howlU",
"CTRL_R_mouth_howlU",
"CTRL_R_mouth_howlD",
"CTRL_R_mouth_upperLip",
"CTRL_L_mouth_upperLip",
"CTRL_R_mouth_lowerLipDepress",
"CTRL_R_mouth_stretch",
"CTRL_R_mouth_cornerPull",
"CTRL_R_mouth_sharpCornerPull",
"CTRL_R_mouth_upperLipRaise",
"CTRL_L_mouth_lowerLipDepress",
"CTRL_L_mouth_stretch",
"CTRL_L_mouth_cornerPull",
"CTRL_L_mouth_sharpCornerPull",
"CTRL_L_mouth_upperLipRaise",
"CTRL_C_jaw",
"CTRL_R_ear",
"CTRL_L_ear",
"CTRL_R_lookAtOffset",
"CTRL_L_lookAtOffset",
"CTRL_C_lookAt",
"CTRL_convergenceSwitch"
]
gUFCHorse_Ctrls = [
"CTRL_lookAt_WorldParentSwitch",
"CTRL_rig_LogicSwitch",
"CTRL_convergenceSwitch",
"CTRL_C_neck_swallow",
"CTRL_R_nose",
"CTRL_L_nose",
"CTRL_C_lowerSnout",
"CTRL_C_upperSnout",
"CTRL_C_tongue_inOut",
"CTRL_C_tongue_stickToSnout",
"CTRL_C_tongue_moveUpDown",
"CTRL_C_tongue_roll",
"CTRL_L_eye_iris",
"CTRL_R_eye_blink",
"CTRL_L_eye_blink",
"CTRL_R_eye_pupil",
"CTRL_R_eye_cheekRaise",
"CTRL_L_eye_cheekRaise",
"CTRL_R_eye_squintInner",
"CTRL_L_eye_squintInner",
"CTRL_L_eye",
"CTRL_R_eye",
"CTRL_C_eye",
"CTRL_L_brow_lateral",
"CTRL_R_brow_lateral",
"CTRL_L_brow_down",
"CTRL_R_brow_down",
"CTRL_L_brow_raiseOut",
"CTRL_L_brow_raiseIn",
"CTRL_R_brow_raiseIn",
"CTRL_R_brow_raiseOut",
"CTRL_R_mouth_lipsRollD",
"CTRL_L_mouth_lipsRollD",
"CTRL_R_mouth_lipsRollU",
"CTRL_L_mouth_lipsRollU",
"CTRL_R_mouth_upperLip",
"CTRL_L_mouth_upperLip",
"CTRL_R_mouth_lowerLipDepress",
"CTRL_L_mouth_lowerLipDepress",
"CTRL_R_mouth_upperLipRaise",
"CTRL_L_mouth_upperLipRaise",
"CTRL_C_jaw",
"CTRL_R_ear",
"CTRL_L_ear",
"CTRL_R_LookAt",
"CTRL_L_LookAt",
"CTRL_C_lookAt",
"CTRL_analog_R_ear3",
"CTRL_analog_L_ear3",
"CTRL_analog_R_ear2",
"CTRL_analog_L_ear2",
"CTRL_analog_C_tongue5",
"CTRL_analog_C_tongue4",
"CTRL_analog_C_tongue3",
"CTRL_analog_C_tongue2",
"CTRL_analog_C_tongue1"
]
gUFCFacial_Ctrls_Mouth = [
"CTRL_R_mouth_lipUpDownD",
"CTRL_L_mouth_lipUpDownD",
"CTRL_R_mouth_lipUpDownU",
"CTRL_L_mouth_lipUpDownU",
"CTRL_R_nose_nasolabialDeepen",
"CTRL_L_nose_nasolabialDeepen",
"CTRL_R_mouth_corner",
"CTRL_L_mouth_corner",
"CTRL_L_mouth_thicknessD",
"CTRL_R_mouth_thicknessD",
"CTRL_R_mouth_thicknessU",
"CTRL_L_mouth_thicknessU",
"CTRL_L_mouth_lipsRollD",
"CTRL_R_mouth_lipsRollD",
"CTRL_R_mouth_lipsRollU",
"CTRL_L_mouth_lipsRollU",
"CTRL_R_mouth_cornerShapnessU",
"CTRL_L_mouth_cornerShapnessU",
"CTRL_L_mouth_cornerShapnessD",
"CTRL_R_mouth_cornerShapnessD",
"CTRL_L_mouth_pushPullD",
"CTRL_R_mouth_pushPullU",
"CTRL_L_mouth_pushPullU",
"CTRL_R_mouth_pushPullD",
"CTRL_R_nose",
"CTRL_L_nose",
"CTRL_Nose",
"CTRL_R_ear_up",
"CTRL_L_ear_up",
"CTRL_R_mouth_suckBlow",
"CTRL_L_mouth_suckBlow",
"CTRL_R_mouth_openSmile",
"CTRL_L_mouth_openSmile",
"CTRL_L_mouth_lowerLipDepress",
"CTRL_R_mouth_lowerLipDepress",
"CTRL_R_mouth_stretch",
"CTRL_L_mouth_stretch",
"CTRL_R_mouth_cornerDepress",
"CTRL_L_mouth_cornerDepress",
"CTRL_R_mouth_dimple",
"CTRL_L_mouth_dimple",
"CTRL_R_mouth_cornerPull",
"CTRL_L_mouth_cornerPull",
"CTRL_R_mouth_sharpCornerPull",
"CTRL_L_mouth_sharpCornerPull",
"CTRL_R_mouth_upperLipRaise",
"CTRL_L_mouth_upperLipRaise",
"CTRL_C_mouth",
"CTRL_L_mouth_lipBiteD",
"CTRL_L_mouth_lipBiteU",
"CTRL_R_mouth_lipBiteU",
"CTRL_R_mouth_lipBiteD",
"CTRL_L_mouth_lipsPressU",
"CTRL_R_mouth_lipsPressU",
"CTRL_L_mouth_tightenD",
"CTRL_L_mouth_tightenU",
"CTRL_R_mouth_tightenU",
"CTRL_R_mouth_tightenD",
"CTRL_L_mouth_lipsBlow",
"CTRL_R_mouth_lipsBlow",
"CTRL_L_mouth_pressD",
"CTRL_L_mouth_pressU",
"CTRL_R_mouth_pressU",
"CTRL_R_mouth_pressD",
"CTRL_L_mouth_lipsTogetherD",
"CTRL_L_mouth_lipsTogetherU",
"CTRL_R_mouth_lipsTogetherU",
"CTRL_R_mouth_lipsTogetherD",
"CTRL_L_mouth_puckerD",
"CTRL_L_mouth_puckerU",
"CTRL_R_mouth_puckerU",
"CTRL_R_mouth_puckerD",
"CTRL_L_mouth_funnelD",
"CTRL_L_mouth_funnelU",
"CTRL_R_mouth_funnelU",
"CTRL_R_mouth_funnelD",
"CTRL_R_jaw_chinCompress",
"CTRL_L_jaw_chinCompress",
"CTRL_L_jaw_ChinLiftU",
"CTRL_L_jaw_ChinLiftD",
"CTRL_R_jaw_ChinLiftU",
"CTRL_R_jaw_ChinLiftD",
"CTRL_C_jaw_fwdBack",
"CTRL_C_jaw_clench",
"CTRL_C_jaw"
]
gUFCFacial_Ctrls_Neck = [
"CTRL_C_neck_stretch",
"CTRL_L_neck_stretch",
"CTRL_R_neck_stretch",
"CTRL_C_neck_swallow"
]
gUFCFacial_Ctrls_Tongue = [
"CTRL_C_tongue_narrowWide",
"CTRL_C_tongue_inOut",
"CTRL_C_tongue_press",
"CTRL_C_tongue_roll",
"CTRL_C_tongue"
]
gUFCFacial_Ctrls_Eyes = [
"CTRL_R_eye_relax",
"CTRL_R_eye_squeeze",
"CTRL_L_eye_relax",
"CTRL_L_eye_squeeze",
"CTRL_L_eye_pupil",
"CTRL_R_eye_pupil",
"CTRL_R_eye_blink",
"CTRL_L_eye_blink",
"CTRL_R_eye_cheekRaise",
"CTRL_L_eye_cheekRaise",
"CTRL_R_eye_squintInner",
"CTRL_L_eye_squintInner",
"CTRL_L_eye",
"CTRL_R_eye",
"CTRL_C_eye"
]
gUFCFacial_Ctrls_GlobalEyes = [
"CTRL_C_lookAt",
"CTRL_L_LookAt",
"CTRL_R_LookAt"
]
gUFCFacial_Ctrls_Brows = [
"CTRL_L_brow_lateral",
"CTRL_R_brow_lateral",
"CTRL_L_brow_down",
"CTRL_R_brow_down",
"CTRL_L_brow_raiseOut",
"CTRL_L_brow_raiseIn",
"CTRL_R_brow_raiseIn",
"CTRL_R_brow_raiseOut"
]
gUFCFacial_Ctrls_Switches = [
"CTRL_rig_LogicSwitch",
"CTRL_lookAt_WorldParentSwitch",
"CTRL_convergenceSwitch"
]
gUFCFacial_Ctrls = list(set(# converting to a set then back to a list removes dupes.
gUFCFacial_Ctrls_Mouth +
gUFCFacial_Ctrls_Neck +
gUFCFacial_Ctrls_Tongue +
gUFCFacial_Ctrls_Eyes +
gUFCFacial_Ctrls_GlobalEyes +
gUFCFacial_Ctrls_Brows +
gUFCWolf_Ctrls +
gUFCHorse_Ctrls
))
gUFCFacial_Frames = [
"FRM_faceGUI",
"FRM_switches",
# "FRM_lookAtFollowGUISwitch",
# "FRM_lookAtSwitch",
"FRM_rig_LogicSwitch",
"FRM_lipsUpDown",
"FRM_R_mouth_lipsUpDownD",
"FRM_L_mouth_lipsUpDownD",
"FRM_R_mouth_lipsUpDownU",
"FRM_L_mouth_lipsUpDownU",
"FRM_R_eye_squeeze",
"FRM_R_eye_border",
"FRM_R_eye_relax",
# "FRM_R_eye_squeeze 1",
"FRM_L_eye_squeeze",
"FRM_L_eye_border",
"FRM_L_eye_relax",
# "FRM_L_eye_squeeze 1",
"FRM_R_nose_nasolabialDeepen",
"FRM_L_nose_nasolabialDeepen",
"FRM_R_mouth_corner",
"FRM_L_mouth_corner",
"FRM_thickness",
"FRM_L_mouth_thicknessD",
"FRM_R_mouth_thicknessD",
"FRM_R_mouth_thicknessU",
"FRM_L_mouth_thicknessU",
"FRM_lipsRoll",
"FRM_L_mouth_lipsRollD",
"FRM_R_mouth_lipsRollD",
"FRM_R_mouth_lipsRollU",
"FRM_L_mouth_lipsRollU",
"FRM_cornerSharpness",
"FRM_R_mouth_cornerShapnessU",
"FRM_L_mouth_cornerShapnessU",
"FRM_L_mouth_cornerShapnessD",
"FRM_R_mouth_cornerShapnessD",
"FRM_lipsPushPull",
"FRM_L_mouth_pushPullD",
"FRM_R_mouth_pushPullU",
"FRM_L_mouth_pushPullU",
"FRM_R_mouth_pushPullD",
"FRM_L_brow_lateral",
"FRM_R_brow_lateral",
"FRM_L_brow_down",
"FRM_R_brow_down",
"FRM_L_brow_raiseOut",
"FRM_L_brow_raiseIn",
"FRM_R_brow_raiseIn",
"FRM_R_brow_raiseOut",
"FRM_L_eye_pupil",
"FRM_R_eye_pupil",
"FRM_R_eye_blink",
"FRM_L_eye_blink",
"FRM_R_eye_cheekRaise",
"FRM_L_eye_cheekRaise",
"FRM_R_eye_squintInner",
"FRM_L_eye_squintInner",
"FRM_L_eye",
"FRM_R_eye",
"FRM_C_eye",
"FRM_R_nose",
"FRM_L_nose",
"FRM_R_ear_up",
"FRM_L_ear_up",
"FRM_R_mouth_suckBlow",
"FRM_L_mouth_suckBlow",
"FRM_R_mouth_openSmile",
"FRM_L_mouth_openSmile",
"FRM_L_mouth_lowerLipDepress",
"FRM_R_mouth_lowerLipDepress",
"FRM_R_mouth_stretch",
"FRM_L_mouth_stretch",
"FRM_R_mouth_cornerDepress",
"FRM_L_mouth_cornerDepress",
"FRM_R_mouth_dimple",
"FRM_L_mouth_dimple",
"FRM_R_mouth_cornerPull",
"FRM_L_mouth_cornerPull",
"FRM_R_mouth_sharpCornerPull",
"FRM_L_mouth_sharpCornerPull",
"FRM_R_mouth_upperLipRaise",
"FRM_L_mouth_upperLipRaise",
"FRM_c_mouth",
"FRM_C_tongue_narrowWide",
"FRM_C_tongue_inOut",
"FRM_C_tongue_press",
"FRM_C_tongue_roll",
"FRM_C_tongue",
"FRM_lipBite",
"FRM_L_mouth_lipBiteD",
"FRM_L_mouth_lipBiteU",
"FRM_R_mouth_lipBiteU",
"FRM_R_mouth_lipBiteD",
"FRM_lipsPress",
"FRM_L_mouth_lipsPressD",
"FRM_L_mouth_lipsPressU",
"FRM_R_mouth_lipsPressU",
"FRM_R_mouth_lipsPressD",
"FRM_mouthTighten",
"FRM_L_mouth_tightenD",
"FRM_L_mouth_tightenU",
"FRM_R_mouth_tightenU",
"FRM_R_mouth_tightenD",
"FRM_lipsBlow",
"FRM_L_mouth_lipsBlow",
"FRM_R_mouth_lipsBlow",
"FRM_mouthSuck",
"FRM_mouth_press",
"FRM_L_mouth_pressD",
"FRM_L_mouth_pressU",
"FRM_R_mouth_pressU",
"FRM_R_mouth_pressD",
"FRM_lipsTogether",
"FRM_L_mouth_lipsTogetherD",
"FRM_L_mouth_lipsTogetherU",
"FRM_R_mouth_lipsTogetherU",
"FRM_R_mouth_lipsTogetherD",
"FRM_oh",
"FRM_pucker",
"FRM_L_mouth_puckerD",
"FRM_L_mouth_puckerU",
"FRM_R_mouth_puckerU",
"FRM_R_mouth_puckerD",
"FRM_funnel",
"FRM_L_mouth_funnelD",
"FRM_L_mouth_funnelU",
"FRM_R_mouth_funnelU",
"FRM_R_mouth_funnelD",
"FRM_R_jaw_chinCompress",
"FRM_L_jaw_chinCompress",
"FRM_chinLift",
"FRM_L_jaw_ChinLiftU",
"FRM_L_jaw_ChinLiftD",
"FRM_R_jaw_ChinLiftU",
"FRM_R_jaw_ChinLiftD",
"FRM_C_jaw_fwdBack",
"FRM_C_jaw_clench",
"FRM_C_jaw",
"FRM_neckStretch",
"FRM_C_neck_stretch",
"FRM_L_neck_stretch",
"FRM_R_neck_stretch",
"FRM_C_neck_swallow",
"FRM_convergenceSwitch",
"FRM_convergenceGUI"
]
gUFCFacial_Text = [
"TEXT_switches",
"TEXT_lipsUpDown",
"TEXT_tweakers",
"TEXT_thickness",
"TEXT_lipsRoll",
"TEXT_cornerSharpness",
"TEXT_lipsPushPull",
"TEXT_lipBite",
"TEXT_lipsPress",
"TEXT_mouthTighten",
"TEXT_lipsBlow",
"TEXT_mouthPress",
"TEXT_lipsTogether",
"TEXT_mouthSuck",
"TEXT_OH",
"TEXT_pucker",
"TEXT_funnel",
"TEXT_neckStretch",
"TEXT_convergence"
]
gUFCFacial_Unused = [
"CTRL_L_mouth_lipsPressD",
"CTRL_R_mouth_lipsPressD",
"CTRL_R_neck_stretch_loc",
"CTRL_L_neck_stretch_loc"
]
gUFCFacial_Other = [
"CTRL_faceGUI",
"CTRL_rig_Logic"
]
gUFCFacial_NonCtrls = (
gUFCFacial_Frames +
gUFCFacial_Text +
gUFCFacial_Unused +
gUFCFacial_Other
)
gUFCFacial_AnalogCtrls_TR = [
"CTRL_C_lookAt",
"CTRL_L_LookAt",
"CTRL_R_LookAt",
"CTRL_analog_R_ear3",
"CTRL_analog_L_ear3",
"CTRL_analog_R_ear2",
"CTRL_analog_L_ear2",
"CTRL_analog_R_ear1",
"CTRL_analog_L_ear1",
"CTRL_analog_C_tongue5",
"CTRL_analog_C_tongue4",
"CTRL_analog_C_tongue3",
"CTRL_analog_C_tongue2",
"CTRL_analog_C_tongue1"
]
gUFCFacial_AnalogCtrls_T = [
"CTRL_C_bit"
]
gUFCFacial_AnalogCtrls_Ears_TR = [
"CTRL_analog_R_ear3",
"CTRL_analog_L_ear3",
"CTRL_analog_R_ear2",
"CTRL_analog_L_ear2",
"CTRL_analog_R_ear1",
"CTRL_analog_L_ear1"
]
gUFCFacial_CustomCtrls = [
"CTRL_C_chin_backFwd",
"CTRL_C_chin_downUp",
"CTRL_C_chin_narrowWide",
"CTRL_C_jaw_backFwd",
"CTRL_C_jaw_lowHigh",
"CTRL_C_jaw_narrowWide",
"CTRL_C_lowerLip_narrowWide",
"CTRL_C_lowerLip_backFwd",
"CTRL_C_lowerLip_thinThick",
"CTRL_C_upperLip_narrowWide",
"CTRL_C_upperLip_backFwd",
"CTRL_C_upperLip_thinThick",
"CTRL_R_mouth_narrowWide",
"CTRL_L_mouth_narrowWide",
"CTRL_C_mouth_narrowWide",
"CTRL_R_mouth_backFwd",
"CTRL_L_mouth_backFwd",
"CTRL_C_mouth_backFwd",
"CTRL_R_mouth_downUp",
"CTRL_L_mouth_downUp",
"CTRL_C_mouth_downUp",
"CTRL_R_mouth_rightLeft",
"CTRL_L_mouth_rightLeft",
"CTRL_C_mouth_rightLeft",
"CTRL_R_cheek_backFwd",
"CTRL_L_cheek_backFwd",
"CTRL_C_cheek_backFwd",
"CTRL_R_cheek_downUp",
"CTRL_L_cheek_downUp",
"CTRL_C_cheek_downUp",
"CTRL_R_cheek_narrowWide",
"CTRL_L_cheek_narrowWide",
"CTRL_C_cheek_narrowWide",
"CTRL_R_ears_earlobe",
"CTRL_L_ears_earlobe",
"CTRL_C_ears_earlobe",
"CTRL_R_ears_smallBig",
"CTRL_L_ears_smallBig",
"CTRL_C_ears_smallBig",
"CTRL_R_ears_shortLong",
"CTRL_L_ears_shortLong",
"CTRL_C_ears_shortLong",
"CTRL_R_ears_narrowWide",
"CTRL_L_ears_narrowWide",
"CTRL_C_ears_narrowWide",
"CTRL_R_nose_nostril",
"CTRL_L_nose_nostril",
"CTRL_C_nose_nostril",
"CTRL_C_nose_tiltRightLeft",
"CTRL_C_nose_tiltDownUp",
"CTRL_C_nose_smallBig",
"CTRL_C_nose_shortLong",
"CTRL_C_nose_narrowWide",
"CTRL_C_eyes_angle",
"CTRL_L_eyes_angle",
"CTRL_R_eyes_angle",
"CTRL_R_eyes_width",
"CTRL_L_eyes_width",
"CTRL_C_eyes_width",
"CTRL_R_eyes_size",
"CTRL_L_eyes_size",
"CTRL_C_eyes_size",
"CTRL_R_eyes_backFwd",
"CTRL_L_eyes_backFwd",
"CTRL_C_eyes_backFwd",
"CTRL_R_eyes_downUp",
"CTRL_L_eyes_downUp",
"CTRL_C_eyes_downUp",
"CTRL_R_eyes_narrowWide",
"CTRL_L_eyes_narrowWide",
"CTRL_C_eyes_narrowWide",
"CTRL_R_brows_backFwd",
"CTRL_L_brows_backFwd",
"CTRL_C_brows_backFwd",
"CTRL_R_brows_downUp",
"CTRL_L_brows_downUp",
"CTRL_C_brows_downUp",
"CTRL_R_brows_narrowWide",
"CTRL_L_brows_narrowWide",
"CTRL_C_brows_narrowWide",
"CTRL_C_weight",
"CTRL_C_faceWidth",
"CTRL_C_cranium_flatPointy",
"CTRL_C_cranium_downUp",
"CTRL_C_cranium_narrowWide"
]
gUFCFacialRoot = [ "FACIAL_C_FacialRoot" ]
# ##
# ##
# ##
# ##
# ##
# ##
# ##
# ## END - UFC Facial Rig Arrays
# ##
# ##
# ##
# ##
# ##
# ##
# ##
# ##
gAllFacialRoot = (gFacialRoot, gUFCFacialRoot)