From f79ca2835cb77978de544e31409d69667f8ad1f8 Mon Sep 17 00:00:00 2001 From: samjay3d <71744685+samjay3d@users.noreply.github.com> Date: Mon, 31 May 2021 01:34:39 -0700 Subject: [PATCH] Bug Issues + Basic Support of Move by Maxon - Fixed Morphs becoming zero when applied at pass the maximum. - Updated The Genesis 8.1 Facs Preset to represent the necessary morphs for Move By Maxon. - Added an Option Automatic Weight the mesh when subdivision is present. - Fixed Facs being Deleted on Children objects. where not needed too. - Can now try out Move By Maxon and disconnect it head rotation is a wip. --- .../plugins/DazToC4D/lib/CustomImports.py | 10 ++ .../plugins/DazToC4D/lib/DtC4DDialogs.py | 58 ++++----- .../plugins/DazToC4D/lib/DtC4DWeights.py | 22 ++++ .../plugins/DazToC4D/lib/DtuLoader.py | 10 ++ .../plugins/DazToC4D/lib/ErcExpressions.py | 5 +- .../plugins/DazToC4D/lib/MaxonTracking.py | 47 +++++++ .../plugins/DazToC4D/lib/Morphs.py | 19 +-- .../scripts/support/DAZ/Daz to Cinema 4D.dsa | 22 +++- .../DAZ/DzCinema 4DMorphSelectionDialog.dsa | 117 +++++++++--------- 9 files changed, 206 insertions(+), 104 deletions(-) create mode 100644 Cinema 4D/appdir_common/plugins/DazToC4D/lib/DtC4DWeights.py create mode 100644 Cinema 4D/appdir_common/plugins/DazToC4D/lib/MaxonTracking.py diff --git a/Cinema 4D/appdir_common/plugins/DazToC4D/lib/CustomImports.py b/Cinema 4D/appdir_common/plugins/DazToC4D/lib/CustomImports.py index a12776e..3e6c4fe 100644 --- a/Cinema 4D/appdir_common/plugins/DazToC4D/lib/CustomImports.py +++ b/Cinema 4D/appdir_common/plugins/DazToC4D/lib/CustomImports.py @@ -9,6 +9,7 @@ from . import Utilities from . import Morphs from . import DazRig +from .DtC4DWeights import Weights from .DtC4DPosing import Poses from .DtC4DDialogs import guiASKtoSave from .Definitions import EXPORT_DIR @@ -61,6 +62,7 @@ def genesis_import(self, file_path, dtu, sss_value, normal_value, bump_value): morph = Morphs.Morphs() var = Utilities.Variables() jnt_fixes = DazRig.JointFixes() + wgt = Weights() if os.path.exists(file_path) == False: gui.MessageDialog( @@ -115,6 +117,14 @@ def genesis_import(self, file_path, dtu, sss_value, normal_value, bump_value): print("Material Conversion Done") c4d.EventAdd() + wgt.store_subdivision(dtu) + if wgt.check_level(): + auto_weight = c4d.gui.QuestionDialog( + "Subdivisions have been detected\nthis is currently not fully supported.\nWould you like to autoweight the mesh?" + ) + if auto_weight: + wgt.auto_calculate_weights(var.body) + isPosed = Poses().checkIfPosed() if isPosed == False: jnt_fixes.store_joint_orientations(dtu) diff --git a/Cinema 4D/appdir_common/plugins/DazToC4D/lib/DtC4DDialogs.py b/Cinema 4D/appdir_common/plugins/DazToC4D/lib/DtC4DDialogs.py index af8cc37..f91accc 100644 --- a/Cinema 4D/appdir_common/plugins/DazToC4D/lib/DtC4DDialogs.py +++ b/Cinema 4D/appdir_common/plugins/DazToC4D/lib/DtC4DDialogs.py @@ -17,6 +17,7 @@ from .DtC4DPosing import Poses from .Definitions import RES_DIR from .Morphs import Morphs +from .MaxonTracking import Tracking dazReduceSimilar = True @@ -871,9 +872,9 @@ def find_face_captures(self): obj = self.face_link.GetLink() if obj.GetType() == 1040464: c4d.MessageDialog( - "Do not connect the Face Capture\nCreate Pose Morphs first.", - type=c4d.GEMB_ICONEXCLAMATION, - ) + "Do not connect the Face Capture\nCreate Pose Morphs first.", + type=c4d.GEMB_ICONEXCLAMATION, + ) if obj.GetTag(1040839): self.face_link.SetLink(obj) @@ -919,9 +920,7 @@ def CreateLayout(self): self.GroupEnd() - self.GroupBegin( - 11, c4d.BFH_SCALEFIT, 1, 1, title="Moves By Maxon: " - ) + self.GroupBegin(11, c4d.BFH_SCALEFIT, 1, 1, title="Moves By Maxon: ") self.GroupBorder(c4d.BORDER_GROUP_IN) self.GroupBorderSpace(10, 5, 10, 5) @@ -933,31 +932,26 @@ def CreateLayout(self): 350, 0, ) - self.GroupBegin( - 11, c4d.BFH_SCALEFIT, 8, 1, title="Connect Face Capture: " - ) - self.GroupBorder(c4d.BORDER_GROUP_OUT) + self.GroupBegin(11, c4d.BFH_SCALEFIT, 8, 1, title="Connect Face Capture: ") + self.GroupBorder(c4d.BORDER_GROUP_IN) self.GroupBorderSpace(10, 5, 12, 5) self.connect_morphs = self.AddButton( - self.BUTTON_CONNECT_MORPH, - c4d.BFV_TOP, - name="Connect Morphs" - ) - self.disconnect_morphs = self.AddButton( - self.BUTTON_DISCONNECT_MORPH, - c4d.BFV_BOTTOM, - name="Disconnect Morphs" + self.BUTTON_CONNECT_MORPH, c4d.BFV_CENTER, name="Connect Morphs" ) self.add_head_rotation = self.AddButton( - self.BUTTON_CONNECT_HEAD, - c4d.BFV_TOP, - name="Connect Head Rotation" + self.BUTTON_CONNECT_HEAD, c4d.BFV_CENTER, name="Connect Head Rotation" + ) + + self.GroupEnd() + self.GroupBegin(11, c4d.BFH_SCALEFIT, 8, 1, title="Connect Face Capture: ") + self.GroupBorder(c4d.BORDER_GROUP_IN) + self.GroupBorderSpace(10, 5, 12, 5) + self.disconnect_morphs = self.AddButton( + self.BUTTON_DISCONNECT_MORPH, c4d.BFV_CENTER, name="Disconnect Morphs" ) self.disconnect_head_rotation = self.AddButton( - self.BUTTON_DISCONNECT_HEAD, - c4d.BFV_BOTTOM, - name="Disconnect Head Rotation" + self.BUTTON_DISCONNECT_HEAD, c4d.BFV_CENTER, name="Disconnect Head Rotation" ) self.GroupEnd() self.GroupEnd() @@ -1236,17 +1230,18 @@ def Command(self, id, msg): self.dazIkmControls = getJointFromConstraint(self.jointPelvis).GetUp() IKMAXFastAttach.jointPelvis = self.jointPelvis - if id == self.BUTTON_CONNECT_MORPH: + if id == self.BUTTON_CONNECT_MORPH: face_capture = self.face_link.GetLink() - Morphs.connect_face_morphs(face_capture) + self.morph_node, self.face_morphs = Morphs.connect_face_morphs(face_capture) - if id == self.BUTTON_DISCONNECT_MORPH: + if id == self.BUTTON_DISCONNECT_MORPH: face_capture = self.face_link.GetLink() - Morphs.connect_face_morphs(face_capture) + Morphs.disconnect_face_morphs(self.face_morphs, self.morph_node) - if id == self.BUTTON_CONNECT_HEAD: + if id == self.BUTTON_CONNECT_HEAD: face_capture = self.face_link.GetLink() - + gui.MessageDialog("Feature is Currently Not Functional", c4d.GEMB_OK) + # Tracking.add_head_tracking(face_capture) if id == self.IDC_LINKBOX_2: self.find_face_captures() @@ -1254,7 +1249,6 @@ def Command(self, id, msg): # GUIDES if dzc4d.findIK() == 1: - if id == self.BUTTON_RESET: caca = ikmaxUtils().removeStuff() if caca == 1: @@ -1584,5 +1578,3 @@ def makeChild(child, parent): ) return True - - diff --git a/Cinema 4D/appdir_common/plugins/DazToC4D/lib/DtC4DWeights.py b/Cinema 4D/appdir_common/plugins/DazToC4D/lib/DtC4DWeights.py new file mode 100644 index 0000000..20771cb --- /dev/null +++ b/Cinema 4D/appdir_common/plugins/DazToC4D/lib/DtC4DWeights.py @@ -0,0 +1,22 @@ +import c4d + + +class Weights: + subdivsion_level = 0 + + def store_subdivision(self, dtu): + self.subdivsion_level = dtu.get_subdivision() + + def check_level(self): + if self.subdivsion_level > 0: + return True + + def auto_calculate_weights(self, body): + doc = c4d.documents.GetActiveDocument() + weight_tag = body.GetTag(c4d.Tweights) + if weight_tag: + doc.SetActiveTag(weight_tag, c4d.SELECTION_NEW) + c4d.modules.character.CAWeightMgr.Update(doc) + c4d.modules.character.CAWeightMgr.SelectAllJoints(doc) + c4d.modules.character.CAWeightMgr.AutoWeight(doc) + c4d.EventAdd() diff --git a/Cinema 4D/appdir_common/plugins/DazToC4D/lib/DtuLoader.py b/Cinema 4D/appdir_common/plugins/DazToC4D/lib/DtuLoader.py index c8c3d3c..24852c2 100644 --- a/Cinema 4D/appdir_common/plugins/DazToC4D/lib/DtuLoader.py +++ b/Cinema 4D/appdir_common/plugins/DazToC4D/lib/DtuLoader.py @@ -16,6 +16,7 @@ class DtuLoader: joint_orientation_dict = dict() asset_name = "" fbx_path = "" + subdivsion_level = "" materials_list = [] def __init__(self, imported_dir): @@ -61,6 +62,15 @@ def get_fbx_path(self): self.load_fbx_path() return self.fbx_path + def load_subdivision(self): + dtu_dict = self.get_dtu_dict() + self.subdivision = dtu_dict["Subdivision"] + + def get_subdivision(self): + if self.subdivsion_level == "": + self.load_subdivision() + return self.subdivision + def load_bone_head_tail_dict(self): dtu_dict = self.get_dtu_dict() self.bone_head_tail_dict = dtu_dict["HeadTailData"] diff --git a/Cinema 4D/appdir_common/plugins/DazToC4D/lib/ErcExpressions.py b/Cinema 4D/appdir_common/plugins/DazToC4D/lib/ErcExpressions.py index 70b7db7..e56d559 100644 --- a/Cinema 4D/appdir_common/plugins/DazToC4D/lib/ErcExpressions.py +++ b/Cinema 4D/appdir_common/plugins/DazToC4D/lib/ErcExpressions.py @@ -88,10 +88,7 @@ def erc_multiply(addend, x, var): erc_multiply = """ global var{1} var{1} = {2}{1})) - if current > 0: - temp += var{1} * current + {0} - else: - temp *= var{1} + {0} + temp *= var{1} + {0} """.format( addend, x, var ) diff --git a/Cinema 4D/appdir_common/plugins/DazToC4D/lib/MaxonTracking.py b/Cinema 4D/appdir_common/plugins/DazToC4D/lib/MaxonTracking.py new file mode 100644 index 0000000..e50d73f --- /dev/null +++ b/Cinema 4D/appdir_common/plugins/DazToC4D/lib/MaxonTracking.py @@ -0,0 +1,47 @@ +import c4d +from . import Utilities + + +class Tracking: + @staticmethod + def create_node(node_parent, obj, x, y): + node = node_parent.CreateNode( + node_parent.GetRoot(), c4d.ID_OPERATOR_OBJECT, None, x, y + ) + node[c4d.GV_OBJECT_OBJECT_ID] = obj + return node + + @staticmethod + def create_xpresso_node(node_parent, type, x, y): + node = node_parent.CreateNode(node_parent.GetRoot(), type, None, x, y) + return node + + @staticmethod + def add_head_tracking(face_capture): + """Need to removed Hardcoding of Neck_Ctrl""" + neck_name = Utilities.get_daz_name() + "_Neck_ctrl" + doc = c4d.documents.GetActiveDocument() + neck_ctrl = doc.SearchObject(neck_name) + if neck_ctrl: + xpresso_tag = c4d.BaseTag(c4d.Texpresso) + # Set Tag priority to Animation + pd = xpresso_tag[c4d.EXPRESSION_PRIORITY] + pd.SetPriorityValue(c4d.PRIORITYVALUE_MODE, 1) + xpresso_tag[c4d.EXPRESSION_PRIORITY] = pd + xpresso_tag[c4d.ID_BASELIST_NAME] = "Movement Tracking" + neck_ctrl.InsertTag(xpresso_tag) + node_master = xpresso_tag.GetNodeMaster() + neck_node = Tracking.create_node(node_master, neck_ctrl, 600, 0) + face_node = Tracking.create_node(node_master, face_capture, 0, 0) + vect_real = Tracking.create_xpresso_node( + node_master, c4d.GV_VECT2REAL_, 100, 0 + ) + degrees_to_rad = Tracking.create_xpresso_node( + node_master, c4d.GV_DEGREE_, 200, 0 + ) + degrees_to_rad[c4d.GV_DEGREE_FUNCTION_ID] = c4d.GV_DEGREE2RAD_NODE_FUNCTION + math_node = Tracking.create_xpresso_node(node_master, c4d.GV_MATH_, 300, 0) + rad_to_degrees = Tracking.create_xpresso_node( + node_master, c4d.GV_DEGREE_, 400, 0 + ) + degrees_to_rad[c4d.GV_DEGREE_FUNCTION_ID] = c4d.GV_RAD2DEGREE_NODE_FUNCTION diff --git a/Cinema 4D/appdir_common/plugins/DazToC4D/lib/Morphs.py b/Cinema 4D/appdir_common/plugins/DazToC4D/lib/Morphs.py index 75a378b..e0acd53 100644 --- a/Cinema 4D/appdir_common/plugins/DazToC4D/lib/Morphs.py +++ b/Cinema 4D/appdir_common/plugins/DazToC4D/lib/Morphs.py @@ -1,6 +1,7 @@ from ntpath import join import c4d from c4d import utils, documents +from c4d import gui from .CustomIterators import TagIterator from . import ErcExpressions as erc @@ -28,7 +29,6 @@ def create_null_for_morphs(body): c4d.EventAdd() return null - @staticmethod def find_facial_morph(face_morph_tag, morph_name): morph_amount = face_morph_tag.GetMorphCount() @@ -38,6 +38,7 @@ def find_facial_morph(face_morph_tag, morph_name): face_morph_name = morph.GetName() if set(face_morph_name.split(" ")) == set(morph_name.split(" ")): return face_morph_tag.GetMorphID(x) + @staticmethod def connect_face_morphs(face_capture): doc = documents.GetActiveDocument() @@ -59,16 +60,20 @@ def connect_face_morphs(face_capture): if blend_shape: morph_num = morph_tag.GetMorphID(x) morph_input = morph_master_output.AddPort( - c4d.GV_PORT_INPUT, morph_num - ) - facial_output = facial_node.AddPort( - c4d.GV_PORT_OUTPUT, blend_shape + c4d.GV_PORT_INPUT, morph_num ) + facial_output = facial_node.AddPort(c4d.GV_PORT_OUTPUT, blend_shape) facial_output.Connect(morph_input) + return morph_master_output, facial_node - - + @staticmethod + def disconnect_face_morphs(face_node, morph_node): + face_node.Remove() + morph_node.Remove() + c4d.gui.MessageDialog( + "Face Capture Has been Successfully Removed!", type=c4d.GEMB_OK + ) @staticmethod def move_poses_under_morphs(group, poses): diff --git a/Daz Studio/appdir_common/scripts/support/DAZ/Daz to Cinema 4D.dsa b/Daz Studio/appdir_common/scripts/support/DAZ/Daz to Cinema 4D.dsa index 800d0b0..055907d 100644 --- a/Daz Studio/appdir_common/scripts/support/DAZ/Daz to Cinema 4D.dsa +++ b/Daz Studio/appdir_common/scripts/support/DAZ/Daz to Cinema 4D.dsa @@ -1890,6 +1890,7 @@ oDtuJson["JointOrientation"] = s_oJointOrientation; oDtuJson["LimitData"] = s_oLimitsData; oDtuJson["PoseData"] = s_oPoseData; + oDtuJson["Subdivision"] = s_nSubDivLevel; aFigureMats = writeMaterials( oNode, sDir ); oDtuJson["Materials"].push( aFigureMats ); @@ -2099,7 +2100,25 @@ } return aControlledMeshes } + /*********************************************************************/ + // Array : Find if Bone Exists on Children Objects + function checkForMorphOnChild( oNode, aControlledMeshes, sMorphName ) + { + for ( var i = 0; i < oNode.getNumNodeChildren(); i++ ){ + oChildNode = oNode.getNodeChild( i ); + if( oChildNode.inherits( "DzFigure" ) ){ + oObject = oChildNode.getObject(); + if( oObject ){ + oModifer = oObject.findModifier( sMorphName ); + if( oModifer ){ + aControlledMeshes.pushIfNotExists( oChildNode.name + ".Shape" ); + } + } + } + } + return aControlledMeshes + } /*********************************************************************/ // Void : Load morph links that are directly controlled by skeleton bones @@ -2162,7 +2181,8 @@ aControlledMeshes.pushIfNotExists( oMorphInfo.node.name + ".Shape" ); } } - + // Check for FACs Morphs on Children + aControlledMeshes = checkForMorphOnChild( oNode, aControlledMeshes, oMorphInfo.name ) var oMorphLinkObj = { "Label": oMorphProperty.getLabel(), diff --git a/Daz Studio/appdir_common/scripts/support/DAZ/DzCinema 4DMorphSelectionDialog.dsa b/Daz Studio/appdir_common/scripts/support/DAZ/DzCinema 4DMorphSelectionDialog.dsa index 5140c71..687739d 100644 --- a/Daz Studio/appdir_common/scripts/support/DAZ/DzCinema 4DMorphSelectionDialog.dsa +++ b/Daz Studio/appdir_common/scripts/support/DAZ/DzCinema 4DMorphSelectionDialog.dsa @@ -1088,22 +1088,12 @@ function handleGen8_1FaceMorphsButton() { var aMorphsToAdd = []; - aMorphsToAdd.push( "facs_ctrl_BrowUp" ); - aMorphsToAdd.push( "facs_ctrl_BrowInnerUp" ); - aMorphsToAdd.push( "facs_ctrl_BrowDown" ); aMorphsToAdd.push( "facs_bs_BrowOuterUpRight_div2" ); aMorphsToAdd.push( "facs_bs_BrowOuterUpLeft_div2" ); aMorphsToAdd.push( "facs_bs_BrowInnerUpRight_div2" ); aMorphsToAdd.push( "facs_bs_BrowInnerUpLeft_div2" ); aMorphsToAdd.push( "facs_bs_BrowDownRight_div2" ); aMorphsToAdd.push( "facs_bs_BrowDownLeft_div2" ); - aMorphsToAdd.push( "facs_jnt_JawRight" ); - aMorphsToAdd.push( "facs_jnt_JawRecess" ); - aMorphsToAdd.push( "facs_jnt_JawOpen" ); - aMorphsToAdd.push( "facs_jnt_JawLeft" ); - aMorphsToAdd.push( "facs_jnt_JawForward" ); - aMorphsToAdd.push( "facs_ctrl_CheekSquint" ); - aMorphsToAdd.push( "facs_ctrl_CheekPuff" ); aMorphsToAdd.push( "facs_bs_CheekSquintRight_div2" ); aMorphsToAdd.push( "facs_bs_CheekSquintLeft_div2" ); aMorphsToAdd.push( "facs_bs_CheekPuffRight_div2" ); @@ -1116,37 +1106,42 @@ aMorphsToAdd.push( "facs_jnt_EyeLookDownLeft" ); aMorphsToAdd.push( "facs_jnt_EyeBlinkRight" ); aMorphsToAdd.push( "facs_jnt_EyeBlinkLeft" ); - aMorphsToAdd.push( "facs_ctrl_EyeWide" ); - aMorphsToAdd.push( "facs_ctrl_EyeSquint" ); - aMorphsToAdd.push( "facs_ctrl_EyeLookUp-DownRight" ); - aMorphsToAdd.push( "facs_ctrl_EyeLookUp-DownLeft" ); - aMorphsToAdd.push( "facs_ctrl_EyeLookUp-Down" ); - aMorphsToAdd.push( "facs_ctrl_EyeLookSide-SideRight" ); - aMorphsToAdd.push( "facs_ctrl_EyeLookSide-Side" ); - aMorphsToAdd.push( "facs_ctrl_EyeBlink" ); - aMorphsToAdd.push( "facs_ctrl_EyeLookSide-SideLeft" ); + aMorphsToAdd.push( "facs_cbs_EyeWideRight_div2" ); + aMorphsToAdd.push( "facs_cbs_EyeWideLeft_div2" ); + aMorphsToAdd.push( "facs_cbs_EyeBlinkRight_div2" ); + aMorphsToAdd.push( "facs_cbs_EyeBlinkLeft_div2" ); aMorphsToAdd.push( "facs_bs_EyeSquintRight_div2" ); aMorphsToAdd.push( "facs_bs_EyeSquintLeft_div2" ); aMorphsToAdd.push( "facs_bs_EyeLookOutRight_div2" ); aMorphsToAdd.push( "facs_bs_EyeLookOutLeft_div2" ); aMorphsToAdd.push( "facs_bs_EyeLookInRight_div2" ); aMorphsToAdd.push( "facs_bs_EyeLookInLeft_div2" ); + aMorphsToAdd.push( "facs_cbs_EyeLookUpRight_div2" ); + aMorphsToAdd.push( "facs_cbs_EyeLookUpLeft_div2" ); + aMorphsToAdd.push( "facs_cbs_EyeLookDownRight_div2" ); + aMorphsToAdd.push( "facs_cbs_EyeLookDownLeft_div2" ); + aMorphsToAdd.push( "facs_bs_NoseSneerRight_div2" ); + aMorphsToAdd.push( "facs_bs_NoseSneerLeft_div2" ); + aMorphsToAdd.push( "facs_bs_NasalFlare_div2" ); aMorphsToAdd.push( "facs_jnt_TongueUp" ); aMorphsToAdd.push( "facs_jnt_TongueTipBend" ); aMorphsToAdd.push( "facs_jnt_TongueRight" ); aMorphsToAdd.push( "facs_jnt_TongueLeft" ); - aMorphsToAdd.push( "facs_ctrl_MouthUpperUp" ); - aMorphsToAdd.push( "facs_ctrl_MouthStretch" ); - aMorphsToAdd.push( "facs_ctrl_MouthPress" ); - aMorphsToAdd.push( "facs_ctrl_MouthLowerDown" ); - aMorphsToAdd.push( "facs_ctrl_MouthFrown" ); - aMorphsToAdd.push( "facs_ctrl_MouthDimple" ); - aMorphsToAdd.push( "facs_ctrl_MouthSmile" ); aMorphsToAdd.push( "facs_bs_TongueTipWide" ); aMorphsToAdd.push( "facs_bs_TongueTipNarrow" ); aMorphsToAdd.push( "facs_bs_TongueOut" ); aMorphsToAdd.push( "facs_bs_TongueNarrow" ); aMorphsToAdd.push( "facs_bs_TongueIn" ); + aMorphsToAdd.push( "facs_jnt_JawRight" ); + aMorphsToAdd.push( "facs_jnt_JawRecess" ); + aMorphsToAdd.push( "facs_jnt_JawOpen" ); + aMorphsToAdd.push( "facs_jnt_JawLeft" ); + aMorphsToAdd.push( "facs_jnt_JawForward" ); + aMorphsToAdd.push( "facs_cbs_JawOpen_div2" ); + aMorphsToAdd.push( "facs_cbs_JawLeft_div2" ); + aMorphsToAdd.push( "facs_cbs_JawForward_div2" ); + aMorphsToAdd.push( "facs_cbs_JawRecess_div2" ); + aMorphsToAdd.push( "facs_cbs_JawRight_div2" ); aMorphsToAdd.push( "facs_bs_MouthUpperUpRight_div2" ); aMorphsToAdd.push( "facs_bs_MouthUpperUpLeft_div2" ); aMorphsToAdd.push( "facs_bs_MouthStretchRight_div2" ); @@ -1170,10 +1165,7 @@ aMorphsToAdd.push( "facs_bs_MouthDimpleRight_div2" ); aMorphsToAdd.push( "facs_bs_MouthDimpleLeft_div2" ); aMorphsToAdd.push( "facs_bs_MouthClose_div2" ); - aMorphsToAdd.push( "facs_ctrl_NoseSneer" ); - aMorphsToAdd.push( "facs_bs_NoseSneerRight_div2" ); - aMorphsToAdd.push( "facs_bs_NoseSneerLeft_div2" ); - aMorphsToAdd.push( "facs_bs_NasalFlare_div2" ); + aMorphsToAdd.push( "facs_cbs_MouthPuckerDetails_div2" ); aMorphsToAdd.push( "facs_cbs_EBR_BOUR_div2" ); aMorphsToAdd.push( "facs_cbs_BIUR_BOUR_div2" ); aMorphsToAdd.push( "facs_cbs_EBL_BOUL_div2" ); @@ -1182,42 +1174,41 @@ aMorphsToAdd.push( "facs_cbs_BDR_BIUR_div2" ); aMorphsToAdd.push( "facs_cbs_EBL_BIUL_div2" ); aMorphsToAdd.push( "facs_cbs_BDL_BIUL_div2" ); - aMorphsToAdd.push( "facs_cbs_JawRight_div2" ); - aMorphsToAdd.push( "facs_cbs_JO_JR_div2" ); - aMorphsToAdd.push( "facs_cbs_JawRecess_div2" ); - aMorphsToAdd.push( "facs_cbs_JO_MR_div2" ); - aMorphsToAdd.push( "facs_cbs_JO_ML_div2" ); - aMorphsToAdd.push( "facs_cbs_JO_MF_div2" ); - aMorphsToAdd.push( "facs_cbs_JO_JL_div2" ); - aMorphsToAdd.push( "facs_cbs_JawOpen_div2" ); - aMorphsToAdd.push( "facs_cbs_JawLeft_div2" ); - aMorphsToAdd.push( "facs_cbs_JawForward_div2" ); aMorphsToAdd.push( "facs_cbs_EBR_CSR_div2" ); aMorphsToAdd.push( "facs_cbs_EBL_CSL_div2" ); - aMorphsToAdd.push( "facs_cbs_MP_CPR_div2" ); - aMorphsToAdd.push( "facs_cbs_MP_CPL_div2" ); - aMorphsToAdd.push( "facs_cbs_EyeWideRight_div2" ); - aMorphsToAdd.push( "facs_cbs_EyeWideLeft_div2" ); - aMorphsToAdd.push( "facs_cbs_EyeLookUpRight_div2" ); aMorphsToAdd.push( "facs_cbs_EBR_ELUR_div2" ); - aMorphsToAdd.push( "facs_cbs_EyeLookUpLeft_div2" ); aMorphsToAdd.push( "facs_cbs_EBL_ELUL_div2" ); - aMorphsToAdd.push( "facs_cbs_EyeLookDownRight_div2" ); aMorphsToAdd.push( "facs_cbs_EBR_ELDR_div2" ); - aMorphsToAdd.push( "facs_cbs_EyeLookDownLeft_div2" ); aMorphsToAdd.push( "facs_cbs_EBL_ELDL_div2" ); - aMorphsToAdd.push( "facs_cbs_EyeBlinkRight_div2" ); aMorphsToAdd.push( "facs_cbs_EBR_NSR_div2" ); aMorphsToAdd.push( "facs_cbs_EBR_ESR_div2" ); aMorphsToAdd.push( "facs_cbs_EBR_ELOR_div2" ); aMorphsToAdd.push( "facs_cbs_EBR_ELIR_div2" ); - aMorphsToAdd.push( "eCTRLEyesClosedR" ); - aMorphsToAdd.push( "facs_cbs_EyeBlinkLeft_div2" ); aMorphsToAdd.push( "facs_cbs_EBL_NSL_div2" ); aMorphsToAdd.push( "facs_cbs_EBL_ESL_div2" ); aMorphsToAdd.push( "facs_cbs_EBL_ELOL_div2" ); aMorphsToAdd.push( "facs_cbs_EBL_ELIL_div2" ); - aMorphsToAdd.push( "eCTRLEyesClosedL" ); + aMorphsToAdd.push( "facs_cbs_JO_JR_div2" ); + aMorphsToAdd.push( "facs_cbs_JO_MR_div2" ); + aMorphsToAdd.push( "facs_cbs_JO_ML_div2" ); + aMorphsToAdd.push( "facs_cbs_JO_MF_div2" ); + aMorphsToAdd.push( "facs_cbs_JO_JL_div2" ); + aMorphsToAdd.push( "facs_cbs_MP_CPR_div2" ); + aMorphsToAdd.push( "facs_cbs_MP_CPL_div2" ); + aMorphsToAdd.push( "facs_cbs_MSR_MDR_div2" ); + aMorphsToAdd.push( "facs_cbs_MSL_MDL_div2" ); + aMorphsToAdd.push( "facs_cbs_MP_MF_div2" ); + aMorphsToAdd.push( "facs_cbs_MP_MC_div2" ); + // aMorphsToAdd.push( "facs_ctrl_EyeLookUp-DownRight" ); + // aMorphsToAdd.push( "facs_ctrl_EyeLookUp-DownLeft" ); + // aMorphsToAdd.push( "facs_ctrl_EyeLookSide-SideRight" ); + // aMorphsToAdd.push( "facs_ctrl_EyeLookSide-SideLeft" ); + // aMorphsToAdd.push( "facs_ctrl_EyeLookAuto" ); + // aMorphsToAdd.push( "facs_ctrl_EyeLookSide-Side" ); + // aMorphsToAdd.push( "facs_ctrl_EyeBlink" ); + // aMorphsToAdd.push( "facs_ctrl_EyeWide" ); + // aMorphsToAdd.push( "facs_ctrl_EyeSquint" ); + // aMorphsToAdd.push( "facs_ctrl_EyeLookUp-Down" ); // aMorphsToAdd.push( "facs_ctrl_EyeLookUpRight" ); // aMorphsToAdd.push( "facs_ctrl_EyeLookUpLeft" ); // aMorphsToAdd.push( "facs_ctrl_EyeLookOutRight" ); @@ -1226,13 +1217,21 @@ // aMorphsToAdd.push( "facs_ctrl_EyeLookInLeft" ); // aMorphsToAdd.push( "facs_ctrl_EyeLookDownRight" ); // aMorphsToAdd.push( "facs_ctrl_EyeLookDownLeft" ); - // aMorphsToAdd.push( "facs_ctrl_EyeLookAuto" ); - aMorphsToAdd.push( "facs_cbs_MSR_MDR_div2" ); - aMorphsToAdd.push( "facs_cbs_MSL_MDL_div2" ); - aMorphsToAdd.push( "facs_cbs_MP_MF_div2" ); - aMorphsToAdd.push( "facs_cbs_MP_MC_div2" ); - aMorphsToAdd.push( "facs_cbs_MouthPuckerDetails_div2" ); - + // aMorphsToAdd.push( "eCTRLEyesClosedR" ); + // aMorphsToAdd.push( "eCTRLEyesClosedL" ); + // aMorphsToAdd.push( "facs_ctrl_BrowDown" ); + // aMorphsToAdd.push( "facs_ctrl_BrowUp" ); + // aMorphsToAdd.push( "facs_ctrl_BrowInnerUp" ); + // aMorphsToAdd.push( "facs_ctrl_CheekSquint" ); + // aMorphsToAdd.push( "facs_ctrl_CheekPuff" ); + // aMorphsToAdd.push( "facs_ctrl_MouthLowerDown" ); + // aMorphsToAdd.push( "facs_ctrl_MouthFrown" ); + // aMorphsToAdd.push( "facs_ctrl_MouthDimple" ); + // aMorphsToAdd.push( "facs_ctrl_MouthSmile" ); + // aMorphsToAdd.push( "facs_ctrl_MouthUpperUp" ); + // aMorphsToAdd.push( "facs_ctrl_MouthStretch" ); + // aMorphsToAdd.push( "facs_ctrl_MouthPress" ); + // aMorphsToAdd.push( "facs_ctrl_NoseSneer" ); for( var i = 0; i < aMorphsToAdd.length; i++ ){ sMorphName = aMorphsToAdd[i] // Add the list for export