lists.py

Описание содержимого файла lists.py

Данный файл содержит конфигурацию сборки лицевого рига на блендшейпах.

bs_face_simple.lists.ACTIONS = {}

Кодировка подключения управления блендшейпами мимики на объект bs_face_simple.lists.ACTION_OB.

Type

dict

bs_face_simple.lists.ACTION_OB = 'faceSimpleAction'

имя Action ноды.

  • Action нода - пустая группа, содержащая атрибуты, одноимённые всем блендшейпам.

  • Создаётся в bs_face_simple.hook.pre_bild()

  • Управление блендшейпами от контролов передаётся именно на атрибуты этой ноды.

  • Блендшейпы сеток различных лодов, получают коннект от Action ноды.

Type

str

bs_face_simple.lists.ALGORITHM = 'from_folder'

Алгоритм сборки.

Варианты алгоритмов:

from_folder

Сборка из директории, в которой бленды разложены каждый в отдельном файле.

  • Название файла соответствует названию бленда.

  • Название нейтральной сетки головы определяется в bs_face_simple.lists.TARGET_NAME

  • Формат файлов с блендами определяется в bs_face_simple.lists.EXTENSION

  • Парметр bs_face_simple.lists.SIMM = False

  • Путь к директории с блендами выбирается в GUI - поле Folder of Sourse Meshes

Note

При мультисборке (bs_face_simple.lists.MULTY = True) все пути исходников прописываются в bs_face_simple.lists.MULTY_DATA.

from_folder_simm

Сборка из директории, в которой бленды разложены каждый в отдельном файле, с применением бленда ассиметрии.

  • Название файла соответствует названию бленда.

  • Бленд ассиметрии находится в директории с блендами, название бленда определяется параметром bs_face_simple.lists.TARGET_SIMM

  • Название нейтральной сетки головы определяется в bs_face_simple.lists.TARGET_NAME

  • Формат файлов с блендами определяется в bs_face_simple.lists.EXTENSION

  • Парметр bs_face_simple.lists.SIMM = True

  • Путь к директории с блендами выбирается в GUI - поле Folder of Sourse Meshes

Note

При мультисборке (bs_face_simple.lists.MULTY = True) все пути исходников прописываются в bs_face_simple.lists.MULTY_DATA.

from_file

Сборка из файла, который содержит сетки блендов и при необходимости нейтральную и ассиметричную сетки.

from_file_simm

Сборка из файла, который содержит сетки блендов, с применением бленда ассиметрии.

  • Название сетки соответствует названию бленда.

  • Бленд ассиметрии находится в директории с блендами, название бленда определяется параметром bs_face_simple.lists.TARGET_SIMM

  • Название нейтральной сетки головы определяется в :attr:`bs_face_simple.lists.TARGET_NAME

  • Формат файла с блендами определяется в bs_face_simple.lists.EXTENSION

  • Парметр bs_face_simple.lists.SIMM = True

  • Парметр bs_face_simple.lists.MULTY =False

  • Путь к файлу с блендами выбирается в GUI - поле File of Sourse Meshes

Type

str

bs_face_simple.lists.APPLY_BS_PREFIX = 'faceBS'

Префикс блендшеп нод при накидывании лица.

Type

str

bs_face_simple.lists.APPLY_CONNECT_ATTR_DATA = []

Список кортежей из пары значений для “коннекта” атрибутов при подключении лицевого рига в тело. Процедура bs_face_simple.hook.apply_face_rig_from_file().

Структура списка:

[
    ('source_object.attr_name' , 'target_object.attr_name'),
    ...
]
Type

list

bs_face_simple.lists.APPLY_CONNECT_DATA = []

Список кортежей из пары значений для “накидывания” блендов при подключении лицевого рига в тело. Процедура bs_face_simple.hook.apply_face_rig_from_file().

Структура списка:

[
    ('source_object' (сетка лицевого рига) , 'target_object' (сетка рига тела) ), # для target_object - лучше использовать полное имя, получаемое: object.name(long=True)
    ...
]
Type

list

bs_face_simple.lists.APPLY_HEAD_BONE = 'head'

Имя объекта кости головы (в риге тела), может использоваться для различных коннектов при импорте лицевого рига в тело.

Type

str

bs_face_simple.lists.APPLY_PARENT_CONSTRAINT_LIST = []

Парент констраинты, создаваемые после коннекта лицевого рига в боди. Процедура bs_face_simple.hook.apply_face_rig_from_file().

Структура списка:

[
    ('child_ob_name'(объект принимающий констрейн) , 'parent_ob_name'(объект отдающий констрейн)), # Для имени объектов из рига тела лучше использовать полное имя, получаемое: object.name(long=True).
    ...
]
Type

list

bs_face_simple.lists.APPLY_PARENT_LIST = [('face_all', '|character|other')]

Создание иерархии после коннекта лицевого рига в боди, Процедура bs_face_simple.hook.apply_face_rig_from_file().

Структура списка:

[
    ('child_object' , 'parent_object' ), # для parent_object - лучше использовать полное имя, получаемое: object.name(long=True)
    ...
]
Type

list

bs_face_simple.lists.APPLY_REMOVE_OBJECTS = []

Список объектов удаляемых из сцены при очистке от лицевого рига. Выполняется в сцене боди рига. Процедура bs_face_simple.hook.remove_face_rig().

Type

list

bs_face_simple.lists.BODY_RIG_CHEST_OBJ = 'Chest_M'

Имя кости грудной клетки в риге тела. Используется для коннекта лицевого рига в риг тела, для спейсинга ik контролов.

Type

str

bs_face_simple.lists.BODY_RIG_HEAD_BONE = 'Head_M'

Head кость головы рига тела.

Type

str

bs_face_simple.lists.BODY_RIG_HEAD_CTRL = 'FKHead_M'

Head контрол боди рига. Используется для коннекта лицевого рига в риг тела, для атрибутов переключения спейсинга ik контролов.

Type

str

bs_face_simple.lists.BODY_RIG_MAIN_CTRL = 'Main'

Имя рут контрола боди рига. Используется для коннекта лицевого рига в риг тела, для спейсинга ik контролов.

Type

str

bs_face_simple.lists.BODY_RIG_PELVIS_OBJ = 'Root_M'

Имя кости таза в риге тела. Используется для коннекта лицевого рига в риг тела, для спейсинга ik контролов.

Type

str

bs_face_simple.lists.BROW_AND_LIDS_ASSET = 'bs_face_brow_and_lids'

Имя ассет ноды с математикой для управления блендами бровей и век

Расположение в bs_face_simple.lists.FACE_MATH_ASSET

Создаётся в bs_face_simple.hook.pre_bild()

Type

str

bs_face_simple.lists.BS_GROUP_NAME = 'bs_shapes'

имя вспомогательного локатора для импортируемых сеток при сборке рига.

Удаляется после сборки.

Type

str

bs_face_simple.lists.BS_NAME = 'faceSimpleBS'

имя бленд ноды в случае не мультисборки (имеет смысл при bs_face_simple.lists.MULTY = False, почти не используется).

Type

str

bs_face_simple.lists.CORRECTS = {}

Словарь для создания корректов из сеток от моделлеров, при выполнении Make Correct By BS (запуск из Меню).

Note

Для случая, когда моделлер отдаёт финальное сосотояние бленда, но бленд должен быть корректом при срабатывании с другими блендами.

Структура словаря:

{
    'blend_shape_name_to_correct' : { # ключ - имя бленд ноды, для которой надо сделать коррект; значение - словарь с блендами на срабатывание которых делается коррект.
        'blend_shape_name' : value,   # ключ - имя бленд ноды; значение - его значение, в котром он должен быть при создании корректа.
        ...
        },
    ...
}
Type

dict

bs_face_simple.lists.CTRL_MA = 'CTRL.ma'

Имя файла откуда импортируется теплейт контролов.

Директория расположения файла: work_dir/bs_face_simple_local/

Type

str

bs_face_simple.lists.CTRL_NAME = 'face_BS_CTRLS'

Имя рут группы контролов импортируемых из bs_face_simple.lists.CTRL_MA.

Type

str

bs_face_simple.lists.EXTENSION = 'obj'

Расширение файла для импорта блендшейпов

Type

str

bs_face_simple.lists.EXTENSIONS = ['obj', 'ma', 'mb', 'fbx']

Варианты расширений файлов для импорта блендшейпов

Возможно устарело.

Type

list

bs_face_simple.lists.EYE_LIMITS = []

Лимиты поворота глаз

Attention

не используется пока. Лучше настраивать ограничения в bs_face_simple.lists.POST_BILD_SET_MIN_MAX_ATTR для объектов: bs_face_simple.lists.EYE_LOOK_IK_DRIVER_L и bs_face_simple.lists.EYE_LOOK_IK_DRIVER_R

Структура списка:

[
(POSES_VALUES['eye_up'], POSES_VALUES['eye_down']), (POSES_VALUES['eye_in'], POSES_VALUES['eye_out']), (0,0)
]
Type

list

bs_face_simple.lists.EYE_LOOK_DRIVER_L = 'eye_l_root_joint'

Деформирующая кость левого глазного яблока

Type

str

bs_face_simple.lists.EYE_LOOK_DRIVER_R = 'eye_r_root_joint'

Деформирующая кость правого глазного яблока

Type

str

bs_face_simple.lists.EYE_LOOK_FK_DRIVER_L = 'eye_l_FK_joint'

FK кость левого глазного яблока

Type

str

bs_face_simple.lists.EYE_LOOK_FK_DRIVER_R = 'eye_r_FK_joint'

FK кость правого глазного яблока

Type

str

bs_face_simple.lists.EYE_LOOK_IK_DRIVER_L = 'eye_l_IK_joint'

IK кость левого глазного яблока

Type

str

bs_face_simple.lists.EYE_LOOK_IK_DRIVER_R = 'eye_r_IK_joint'

IK кость правого глазного яблока

Type

str

bs_face_simple.lists.EYE_LOOK_SHAPES = '{}'

Полная альтернатива bs_face_simple.LIST_OF_SHAPES, но только для блендов век. Если есть риг и бленд есть в этом словаре - то сборка будет из этого словаря.

Attention

Очевидно был в этом когда-то смысл, но надо отменить использование.

Type

dict

bs_face_simple.lists.FACE_MATH_ASSET = 'bs_face_math'

Имя ассет ноды, в которую помещаются все ассеты содержащие математические ноды, создаваемые в bs_face_simple.hook.pre_bild() и в bs_face_simple_local.hook.pre_bild().

Сама нода так же создаётся в bs_face_simple.hook.pre_bild().

Type

str

bs_face_simple.lists.FACE_RIG_TO_BODY_FILE = 'face_rig_to_body.mb'

Имя файла собранного рига лица, который импортится в риг тела.

Расположение файла: .../base/creatures/rigs/face/.

Type

str

bs_face_simple.lists.HIDDEN_GROUP_OF_SURF = 'face_For_Surf_Hide'

Имя группы для размещения сурфейс кривых, и всего остального от сурфейс контролов, что нельзя деформировать и надо спрятать.

Type

str

bs_face_simple.lists.HORIZONTAL_AXIS = 'ry'

Ось горизонтального вращения деформирующей кости глаза

Type

str

bs_face_simple.lists.IK_EYE_CTRL_L = 'l_eyeAim_ctrl'

IK контрол для левого глаза, root объекта имеет префикс grp_

Type

str

bs_face_simple.lists.IK_EYE_CTRL_M = 'ik_eyes_ctrl'

центральный IK контрол глаз, root объекта имеет префикс grp_

Type

str

bs_face_simple.lists.IK_EYE_CTRL_R = 'r_eyeAim_ctrl'

IK контрол для правого глаза, root объекта имеет префикс grp_

Type

str

bs_face_simple.lists.IN_RIG_SHAPES = {}

Таргеты которые используются при сборке только поверх кластерного рига (корректы на скин кластер), альтернатива для таргетов из bs_face_simple.lists.NOT_IN_RIG_SHAPES.

Note

При отсутствии кластерного рига (отсутствие объекта bs_face_simple.lists.RIG_IDENTIFICATION_OBJECT), они не будут использованы.

Структура словаря:

{
    'blend_shape_target_name' : 'mesh_name', # mesh_name значения из [``'jaw'``, ``'eye'``] - это для какой сетки они применяются.
    ...
}
Type

dict

bs_face_simple.lists.JAW_DRIVER = 'CTRL_jaw_skin'

Объект контролирующий челюсть в скиновом риге.

Type

str

bs_face_simple.lists.JAW_OFFSET_FACTOR = 10.0

Параметр для скейла, чтобы приравнять визуальное движение контрола челюсти с движением курсора мышки (подбирается имерически).

Type

float

bs_face_simple.lists.JAW_SIDES_DRIVER_ASSET = 'bs_face_jaw_sides_driver'

Имя ассет ноды с математикой для управления переключения боковых смещений челюсти, в зависимости от степени сомкнутости губ.

Расположение в bs_face_simple.lists.FACE_MATH_ASSET

Создаётся в bs_face_simple.hook.pre_bild()

Type

str

bs_face_simple.lists.LIST_OF_SHAPES = '{ }'

Назначение управления блендшейпами мимики на блендшейп ноды.

LS_OF_SH_DICT = {
    'BS_NAME' :lists.BS_NAME,
    'TARGET_NAME':lists.TARGET_NAME,
    'TARGET_SIMM': lists.TARGET_SIMM,
    'ACTIONS_OB': lists.ACTION_OB,
    'JAW_SIDES_DRIVER_ASSET': lists.JAW_SIDES_DRIVER_ASSET,
    'BROW_AND_LIDS_ASSET': lists.BROW_AND_LIDS_ASSET,
    'EYE_LOOK_DRIVER_L': lists.EYE_LOOK_DRIVER_L,
    'EYE_LOOK_DRIVER_R': lists.EYE_LOOK_DRIVER_R,
    'EYE_LIMITS': lists.EYE_LIMITS,
}
Type

str -> dict

bs_face_simple.lists.LOCAL_DIR = 'bs_face_simple_local'

Имя локальной диретории где хуки и прочее

Type

str

bs_face_simple.lists.MAKE_EYE_IK_CONTROL = True

создавать или нет IK управление для глаз

Type

bool

bs_face_simple.lists.MAKE_SHAPES = {}

Словарь для создания производных блендов из сеток от моделлеров, при выполнении Make Correct By BS (запуск из Меню).

Note

Для случая, когда моделлер не отдаёт бленд, но бленд должен быть результатом смешивания других блендов. Так же может создавать бленд из самого себя, с добавлением какого-либо влияния.

Структура словаря:

{
    'blend_shape_name_to_correct' : { # ключ - имя бленд ноды, которую надо создать; значение - словарь с блендами из которых делается бленд.
        'blend_shape_name' : value,   # ключ - имя бленд ноды; значение - его значение, в котром он должен быть при создании бленда.
        ...
        },
    ...
}
Type

dict

bs_face_simple.lists.MULTY = True

если True - то мульти сборка.

Type

bool

bs_face_simple.lists.MULTY_DATA = {}

Подключаемые сетки по лодам

Структура словаря:

{
    'head_l01': # Имя лода - структура имени: [наименование сетки, если сетка разделена, то наименование фрагмента сетки: nec, head, tongue]_[кодировка лода]
        {
        'TARGET_NAME': 'Neutral_head_l01', # Название нейтральной сетки - структура имени: Neutral_[наименование сетки, если сетка разделена, то наименование фрагмента сетки: nec, head, tongue]_[кодировка лода]
        'BS_NAME': 'faceSimpleBS_head_l01',# Название создаваемой бленд ноды - структура имени: faceSimpleBS_[наименование сетки, если сетка разделена, то наименование фрагмента сетки: nec, head, tongue]_[кодировка лода]
        'source': 'blends/split_head_l01', # Относительный путь к директории где лежат бленды данного лода, относительно work_dir.
        'SHAPE_INVERT_MESH':'Bocman_face': # Название сетки которая используется для создания корректов по скину.
        },
    'neck_l01':
        {
        'TARGET_NAME': 'Neutral_neck_l01',
        'BS_NAME': 'faceSimpleBS_neck_l01',
        'source': 'blends/split_neck_l01',
        },
    ...
}

Парметр 'source' - это split_folder директория в процедуре Export BS Meshes to Source/Split.

Type

dict

bs_face_simple.lists.NOT_IN_RIG_SHAPES = []

Таргеты которые используются при сборке при остутствии кластерного рига (отсутствие объекта bs_face_simple.lists.RIG_IDENTIFICATION_OBJECT),альтернатива для таргетов из bs_face_simple.lists.IN_RIG_SHAPES.

Type

list

bs_face_simple.lists.OTHER_CTRL_DATA_JSON = 'other_ctrl_data.json'

Имя json файла где хранятся данные остальных контролов.

Расположение файла в bs_face_simple.lists.LOCAL_DIR

Type

str

bs_face_simple.lists.POSES_DATA = {}

Постановка рига в позы, при которых создаются корректы на скинкластер Make Correct By Skin (запуск панели из Меню).

Note

Neutral - обязательная поза, обнуляющая все атрибуты, которые используются для постановки поз.

Структура словаря:

{
'Neutral': {
    'ob_name.attr_name' : value,
    # all atributes
    ...
    },
'blend_shape_target_name': {
    'ob_name.attr_name' : value,
    ...
    },
...
}

Attention

Переписать на постановку в нейтральную позу перед каждой позой, чтобы оставить в позе только нужные атрибуты.

Type

dict

bs_face_simple.lists.POSES_VALUES = {'eye_down': 20, 'eye_in': -25, 'eye_out': 36, 'eye_up': -20, 'jaw_bwd': -2.0, 'jaw_drop': 6.25, 'jaw_fwd': 3.0, 'jaw_left': 4.5, 'jaw_open': 25, 'jaw_right': -4.5}

значения атрибутоа для постановки лица в соответствующие позы.

Структура словаря:

{
    'pose_name': float_value,
    ...
}
Type

dict

bs_face_simple.lists.POST_BILD_CONNECT = []

коннекты, которые совершаются в bs_face_simple.hook.post_bild()

Структура списка:

[
    ( 'object_name.attr_name' (атрибут отдающий коннект ), 'object_name.attr_name' (атрибут принимающий коннект)), # кортеж из двух элементов.
    ...
]
Type

list

bs_face_simple.lists.POST_BILD_HIDE_OBJECTS = []

Список объектов которые будут захайдитены в bs_face_simple.hook.post_bild().

Type

list

bs_face_simple.lists.POST_BILD_HIDE_SHAPE_OBJECTS = []

Список объектов чьи шейпы будут захайдитены в bs_face_simple.hook.post_bild().

Type

list

bs_face_simple.lists.POST_BILD_OTHER_CONNECT = {}

Создание доп драйверов в bs_face_simple.hook.post_bild().

Структура словаря:

{
    'connect_name':{                                                           # Произвольное наименование.
        'num' : N,                                                             # Количество ключей.
        'driver': ['object_name', 'attr_name', (value1, value2, ... valueN)],  # Будут созданы DrivenKeyFrames (driver_value_i, driven_value_i) в количестве N.
        'driven': ['object_name', 'attr_name', (value1, value2, ... valueN)],  #
        },
    ...
}
Type

dict

bs_face_simple.lists.POST_BILD_PARENTS = {}

Построение иерархии после сборки в bs_face_simple.hook.post_bild().

Структура словаря:

{
    'child_ob_name' : 'parent_ob_name',
    ...
}
Type

dict

bs_face_simple.lists.POST_BILD_PARENT_CONSTRAINTS = {}

Парент констраинты, создаваемые после сборки в bs_face_simple.hook.post_bild().

Структура словаря:

{
    'child_ob_name' : 'parent_ob_name', # ключ - объект принимающий констраинт, значение - объект влияния.
    ...
}
Type

dict

bs_face_simple.lists.POST_BILD_REMOVED_OBJECTS = []

Список удаляемых объектов сцены после сборки в bs_face_simple.hook.post_bild(). Удаляемые объекты в том числе и слои и сеты.

Type

list

bs_face_simple.lists.POST_BILD_REORDER_DEFORMERS = {}

Изменение порядка деформаторов на объектах, выполняемое в bs_face_simple.hook.post_bild().

Структура словаря:

{
    'object_name' : ('defom_name_0', 'deform_name_1'), # деформатор 'deform_name_1' подсовывается под деформатор 'deform_name_0'.
    ...
}
Type

dict

bs_face_simple.lists.POST_BILD_SET_ATTR = {}

Данные на установку значений атрибутов (например fix бленды).

Структура словаря:

{
    'ob_name' : ('attr_name', value),
    ...
}
Type

dict

bs_face_simple.lists.POST_BILD_SET_MIN_MAX_ATTR = {}

Данные на установку пределов для атрибутов (например на контролах).

Структура словаря:

{
    'ob_name.attr_name' : (min, max), # ``attr_name`` - трансформы только в короткой форме ``ty``, ``rx`` итд.
                                      # на счёт кастомных атрибутов надо тестить.
    ...
}
Type

dict

bs_face_simple.lists.POST_BILD_TO_MESH_LAYER = []

Список объектов помещаемых в слой face_meshes в bs_face_simple.hook.post_bild().

Type

list

bs_face_simple.lists.POST_BILD_TO_RIG_LAYER = []

Список объектов помещаемых в слой face_rig в bs_face_simple.hook.post_bild().

Type

list

bs_face_simple.lists.RIG_IDENTIFICATION_OBJECT = 'CTRL_jaw_skin'

Имя объекта по которому идентифицируется наличие кластерного рига.

Расположение файла: .../base/creatures/rigs/face

Type

str

bs_face_simple.lists.RIG_NO_DEFORM_GRP = 'face_character_grp'

имя root группы лицевого рига.

Type

str

bs_face_simple.lists.SIMM = False

если True - то нейтральная сетка симметричная, но при этом используется бленд ассиметрии.

Type

bool

bs_face_simple.lists.SOURCE_SPLIT_FILTER = {'None': False}

Списки блендов которые будут учитаны при выполнении Export BS Meshes to Source/Split (запуск панели из Меню).

Note

Если модель разделена на фрагменты, то может оказаться, что не для всех частей потребуется весь набор блендов, например для шеи не нужны бленды век.

Структура словаря:

{
    'None': False,                    # Если список фильра пустой - то он будет проигнорирован. None - обязательный пустой фильтр.
    'filter_name' : [список блендов], # Название фильра прозвольно. Только бленды из этого списка будут раскладыватся по sourse/split директориям, остальные будут проигнорированы.
    ...
}
Type

dict

bs_face_simple.lists.SURF_CTRL_DATA_JSON = 'surf_ctrl_data.json'

Имя json файла где хранятся данные сурф контролов.

Расположение файла в bs_face_simple.lists.LOCAL_DIR

Type

str

bs_face_simple.lists.TARGET_NAME = 'Neutral'

оригинальная нейтральная голова (имеет смысл при bs_face_simple.lists.MULTY = False, почти не используется).

Type

str

bs_face_simple.lists.TARGET_SIMM = 'SimmNeutral'

симметричная нейтральная голова (имеет смысл при bs_face_simple.lists.MULTY = False, почти не используется).

Type

str

bs_face_simple.lists.TO_SOURSE_MESHES = []

Список имён блендов, которые надо копировать в source директорию своего лода, означает, что требуется сепарация на правые и левые бленды.

Учитывается при выполнении Export BS Meshes to Source/Split (запуск панели из Меню).

Type

list

bs_face_simple.lists.TO_SPLIT_MESHES = []

Список имён блендов, которые надо копировать в split директорию своего лода, означает, что сепарации на правые и левые бленды не требуется.

Учитывается при выполнении Export BS Meshes to Source/Split (запуск панели из Меню).

Type

list

bs_face_simple.lists.UP_VECTOR_OBJECT_L = 'up_vector_object_l'

объект определяющий upVector для aim констрейна ik управления левого глаза, root объекта имеет префикс grp_

Type

str

bs_face_simple.lists.UP_VECTOR_OBJECT_R = 'up_vector_object_r'

объект определяющий upVector для aim констрейна ik управления правого глаза, root объекта имеет префикс grp_

Type

str

bs_face_simple.lists.VERTICAL_AXIS = 'rx'

Ось вертикального вращения деформирующей кости глаза

Type

str

bs_face_simple.lists.WIRE_ATTR_LIST = [('object_L.ty', (0, 0.818))]

Параметры для включния/отключения wire деформатора век, в bs_face_simple.hook.wire_no_off().

Структура списка:

[
    ('имя_объекта.атрибут', (значение атрибута для отключения, значение атрибута для включения)),
    ...
]
Type

list

bs_face_simple.lists.WIRE_ON = 1

Значение для wire.envelop всех wire деформаторов, которое будет назначено при их включении.

Type

float