1 Star 0 Fork 1

ZTQ/cats-blender-plugin

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
extentions.py 25.38 KB
一键复制 编辑 原始数据 按行查看 历史
Tupper 提交于 2022-01-24 17:53 . upperchest info correction (#355)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780
from .tools import common as Common
from .tools import atlas as Atlas
from .tools import eyetracking as Eyetracking
from .tools import rootbone as Rootbone
from .tools import settings as Settings
from .tools import importer as Importer
from .tools import translations as Translations
from .tools.translations import t
from bpy.types import Scene, Material
from bpy.props import BoolProperty, EnumProperty, FloatProperty, IntProperty, CollectionProperty
def register():
Scene.armature = EnumProperty(
name=t('Scene.armature.label'),
description=t('Scene.armature.desc'),
items=Common.get_armature_list,
update=Common.update_material_list
)
Scene.zip_content = EnumProperty(
name=t('Scene.zip_content.label'),
description=t('Scene.zip_content.desc'),
items=Importer.get_zip_content
)
Scene.keep_upper_chest = BoolProperty(
name=t('Scene.keep_upper_chest.label'),
description=t('Scene.keep_upper_chest.desc'),
default=True
)
Scene.combine_mats = BoolProperty(
name=t('Scene.combine_mats.label'),
description=t('Scene.combine_mats.desc'),
default=True
)
Scene.remove_zero_weight = BoolProperty(
name=t('Scene.remove_zero_weight.label'),
description=t('Scene.remove_zero_weight.desc'),
default=True
)
Scene.keep_end_bones = BoolProperty(
name=t('Scene.keep_end_bones.label'),
description=t('Scene.keep_end_bones.desc'),
default=False
)
Scene.keep_twist_bones = BoolProperty(
name=t('Scene.keep_twist_bones.label'),
description=t('Scene.keep_twist_bones.desc'),
default=False
)
Scene.fix_twist_bones = BoolProperty(
name=t('Scene.fix_twist_bones.label'),
description=t('Scene.fix_twist_bones.desc'),
default=True
)
Scene.join_meshes = BoolProperty(
name=t('Scene.join_meshes.label'),
description=t('Scene.join_meshes.desc'),
default=True
)
Scene.connect_bones = BoolProperty(
name=t('Scene.connect_bones.label'),
description=t('Scene.connect_bones.desc'),
default=True
)
Scene.fix_materials = BoolProperty(
name=t('Scene.fix_materials.label'),
description=t('Scene.fix_materials.desc'),
default=True
)
Scene.remove_rigidbodies_joints = BoolProperty(
name=t('Scene.remove_rigidbodies_joints.label'),
description=t('Scene.remove_rigidbodies_joints.desc'),
default=True
)
# Manual
Scene.use_google_only = BoolProperty(
name=t('Scene.use_google_only.label'),
description=t('Scene.use_google_only.desc'),
default=False
)
Scene.keep_merged_bones = BoolProperty(
name='Keep Merged Bones',
description='Select this to keep the bones after merging them to their parents or to the active bone',
default=False
)
Scene.merge_visible_meshes_only = BoolProperty(
name='Merge Visible Meshes Only',
description='Select this to only merge the weights of the visible meshes',
default=False
)
Scene.show_more_options = BoolProperty(
name=t('Scene.show_more_options.label'),
description=t('Scene.show_more_options.desc'),
default=False
)
# Custom Avatar Creation
Scene.merge_mode = EnumProperty(
name=t('Scene.merge_mode.label'),
description=t('Scene.merge_mode.desc'),
items=[
("ARMATURE", t('Scene.merge_mode.armature.label'), t('Scene.merge_mode.armature.desc')),
("MESH", t('Scene.merge_mode.mesh.label'), t('Scene.merge_mode.mesh.desc'))
]
)
Scene.merge_armature_into = EnumProperty(
name=t('Scene.merge_armature_into.label'),
description=t('Scene.merge_armature_into.desc'),
items=Common.get_armature_list
)
Scene.merge_armature = EnumProperty(
name=t('Scene.merge_armature.label'),
description=t('Scene.merge_armature.desc'),
items=Common.get_armature_merge_list
)
Scene.attach_to_bone = EnumProperty(
name=t('Scene.attach_to_bone.label'),
description=t('Scene.attach_to_bone.desc'),
items=Common.get_bones_merge
)
Scene.attach_mesh = EnumProperty(
name=t('Scene.attach_mesh.label'),
description=t('Scene.attach_mesh.desc'),
items=Common.get_top_meshes
)
Scene.merge_same_bones = BoolProperty(
name=t('Scene.merge_same_bones.label'),
description=t('Scene.merge_same_bones.desc'),
default=False
)
Scene.apply_transforms = BoolProperty(
name=t('Scene.apply_transforms.label'),
description=t('Scene.apply_transforms.desc'),
default=False
)
Scene.merge_armatures_join_meshes = BoolProperty(
name=t('Scene.merge_armatures_join_meshes.label'),
description=t('Scene.merge_armatures_join_meshes.desc'),
default=True
)
Scene.merge_armatures_remove_zero_weight_bones = BoolProperty(
name=t('Scene.merge_armatures_remove_zero_weight_bones.label'),
description=t('Scene.merge_armatures_remove_zero_weight_bones.desc'),
default=True
)
# Decimation
Scene.decimation_mode = EnumProperty(
name=t('Scene.decimation_mode.label'),
description=t('Scene.decimation_mode.desc'),
items=[
("SMART", t('Scene.decimation_mode.smart.label'), t('Scene.decimation_mode.smart.desc')),
("SAFE", t('Scene.decimation_mode.safe.label'), t('Scene.decimation_mode.safe.desc')),
("HALF", t('Scene.decimation_mode.half.label'), t('Scene.decimation_mode.half.desc')),
("FULL", t('Scene.decimation_mode.full.label'), t('Scene.decimation_mode.full.desc')),
("CUSTOM", t('Scene.decimation_mode.custom.label'), t('Scene.decimation_mode.custom.desc'))
],
default='SMART'
)
Scene.decimation_animation_weighting = BoolProperty(
name=t('Scene.decimation_animation_weighting.label'),
description=t('Scene.decimation_animation_weighting.desc'),
default=False
)
Scene.decimation_animation_weighting_factor = FloatProperty(
name=t('Scene.decimation_animation_weighting_factor.label'),
description=t('Scene.decimation_animation_weighting_factor.desc'),
default=0.25,
min=0,
max=1,
step=0.05,
precision=2,
subtype='FACTOR'
)
Scene.bake_animation_weighting = BoolProperty(
name=t('Scene.decimation_animation_weighting.label'),
description=t('Scene.decimation_animation_weighting.desc'),
default=False
)
Scene.bake_animation_weighting_factor = FloatProperty(
name=t('Scene.decimation_animation_weighting_factor.label'),
description=t('Scene.decimation_animation_weighting_factor.desc'),
default=0.25,
min=0,
max=1,
step=0.05,
precision=2,
subtype='FACTOR'
)
Scene.bake_max_tris = IntProperty(
name=t('Scene.max_tris.label'),
description=t('Scene.max_tris.desc'),
default=7500,
min=1,
max=70000
)
Scene.bake_remove_doubles = BoolProperty(
name=t('Scene.decimation_remove_doubles.label'),
description=t('Scene.decimation_remove_doubles.desc'),
default=True
)
Scene.bake_optimize_static = BoolProperty(
name="Optimize Static Shapekeys",
description="Seperate vertices unaffected by shape keys into their own mesh. This adds a drawcall, but comes with a significant GPU cost savings, especially on mobile.",
default=True
)
Scene.bake_cleanup_shapekeys = BoolProperty(
name="Cleanup Shapekeys",
description="Remove backup shapekeys in the final result, e.g. 'Key1 - Reverted' or 'blink_old'",
default=True
)
Scene.bake_create_disable_shapekeys = BoolProperty(
name="Create 'Disable' Shapekeys",
description="Create 'Disable' shapekeys for all but the largest mesh, that cause it to shrink to nothing. Lets you keep toggleable props, without the need for additional meshes.",
default=False
)
# Bake
Scene.bake_resolution = IntProperty(
name=t('Scene.bake_resolution.label'),
description=t('Scene.bake_resolution.desc'),
default=2048,
min=128,
max=4096
)
Scene.bake_use_decimation = BoolProperty(
name=t('Scene.bake_use_decimation.label'),
description=t('Scene.bake_use_decimation.desc'),
default=True
)
Scene.bake_generate_uvmap = BoolProperty(
name=t('Scene.bake_generate_uvmap.label'),
description=t('Scene.bake_generate_uvmap.desc'),
default=True
)
Scene.bake_uv_overlap_correction = EnumProperty(
name=t('Scene.bake_uv_overlap_correction.label'),
description=t('Scene.bake_uv_overlap_correction.desc'),
items=[
("NONE", t("Scene.bake_uv_overlap_correction.none.label"), t("Scene.bake_uv_overlap_correction.none.desc")),
("UNMIRROR", t("Scene.bake_uv_overlap_correction.unmirror.label"), t("Scene.bake_uv_overlap_correction.unmirror.desc")),
("REPROJECT", t("Scene.bake_uv_overlap_correction.reproject.label"), t("Scene.bake_uv_overlap_correction.reproject.desc")),
("MANUAL", "Manual", "Bake will take island information from any UVMap named 'Target' from your meshes, else it will default to the render-active one. Decimation works better when there's only one giant island per loose mesh!")
],
default="UNMIRROR"
)
Scene.bake_device = EnumProperty(
name='Bake Device',
description='Device to bake on. GPU gives a significant speedup, but can cause issues depending on your graphics drivers.',
default='GPU',
items=[
('CPU', 'CPU', 'Perform bakes on CPU (Safe)'),
('GPU', 'GPU', 'Perform bakes on GPU (Fast)')
]
)
Scene.bake_prioritize_face = BoolProperty(
name=t('Scene.bake_prioritize_face.label'),
description=t('Scene.bake_prioritize_face.desc'),
default=False
)
Scene.bake_face_scale = FloatProperty(
name=t('Scene.bake_face_scale.label'),
description=t('Scene.bake_face_scale.desc'),
default=2.0,
min=0.5,
max=4.0,
step=0.25,
precision=2,
subtype='FACTOR'
)
Scene.bake_quick_compare = BoolProperty(
name=t('Scene.bake_quick_compare.label'),
description=t('Scene.bake_quick_compare.desc'),
default=True
)
Scene.bake_illuminate_eyes = BoolProperty(
name=t('Scene.bake_illuminate_eyes.label'),
description=t('Scene.bake_illuminate_eyes.desc'),
default=True
)
Scene.bake_pass_smoothness = BoolProperty(
name=t('Scene.bake_pass_smoothness.label'),
description=t('Scene.bake_pass_smoothness.desc'),
default=True
)
Scene.bake_pass_diffuse = BoolProperty(
name=t('Scene.bake_pass_diffuse.label'),
description=t('Scene.bake_pass_diffuse.desc'),
default=True
)
Scene.bake_diffuse_vertex_colors = BoolProperty(
name="Bake to vertex colors",
description="Rebake to vertex colors after initial bake. Avoids an entire extra texture, if your colors are simple enough. Incorperates AO.",
default=False
)
Scene.bake_preserve_seams = BoolProperty(
name=t('Scene.bake_preserve_seams.label'),
description=t('Scene.bake_preserve_seams.desc'),
default=False
)
Scene.bake_pass_normal = BoolProperty(
name=t('Scene.bake_pass_normal.label'),
description=t('Scene.bake_pass_normal.desc'),
default=True
)
Scene.bake_normal_apply_trans = BoolProperty(
name=t('Scene.bake_normal_apply_trans.label'),
description=t('Scene.bake_normal_apply_trans.desc'),
default=True
)
Scene.bake_apply_keys = BoolProperty(
name="Apply current shapekey mix",
description="When selected, currently active shape keys will be applied to the basis. This is extremely beneficial to performance if your avatar is intended to 'default' to one shapekey mix, as having active shapekeys all the time is expensive. Keys ending in '_bake' are always applied to the basis and removed completely, regardless of this option.",
default=False
)
Scene.bake_ignore_hidden = BoolProperty(
name="Ignore hidden objects",
description="Ignore currently hidden objects when copying",
default=True
)
Scene.bake_pass_ao = BoolProperty(
name=t('Scene.bake_pass_ao.label'),
description=t('Scene.bake_pass_ao.desc'),
default=False
)
Scene.bake_pass_questdiffuse = BoolProperty(
name=t('Scene.bake_pass_questdiffuse.label'),
description=t('Scene.bake_pass_questdiffuse.desc'),
default=True
)
Scene.bake_pass_emit = BoolProperty(
name=t('Scene.bake_pass_emit.label'),
description=t('Scene.bake_pass_emit.desc'),
default=False
)
Scene.bake_emit_indirect = BoolProperty(
name="Bake projected light",
description="Bake the effect of emission on nearby surfaces. Results in much more realistic lighting effects, but can animate less well.",
default=False
)
Scene.bake_emit_exclude_eyes = BoolProperty(
name="Exclude eyes",
description="Bakes the effect of any eye glow onto surrounding objects, but not vice-versa. Improves animation when eyes are moving around..",
default=True
)
Scene.bake_diffuse_alpha_pack = EnumProperty(
name=t('Scene.bake_diffuse_alpha_pack.label'),
description=t('Scene.bake_diffuse_alpha_pack.desc'),
items=[
("NONE", t("Scene.bake_diffuse_alpha_pack.none.label"), t("Scene.bake_diffuse_alpha_pack.none.desc")),
("TRANSPARENCY", t("Scene.bake_diffuse_alpha_pack.transparency.label"), t("Scene.bake_diffuse_alpha_pack.transparency.desc")),
("SMOOTHNESS", t("Scene.bake_diffuse_alpha_pack.smoothness.label"), t("Scene.bake_diffuse_alpha_pack.smoothness.desc")),
],
default="NONE"
)
Scene.bake_metallic_alpha_pack = EnumProperty(
name=t('Scene.bake_metallic_alpha_pack.label'),
description=t('Scene.bake_metallic_alpha_pack.desc'),
items=[
("NONE", t("Scene.bake_metallic_alpha_pack.none.label"), t("Scene.bake_metallic_alpha_pack.none.desc")),
("SMOOTHNESS", t("Scene.bake_metallic_alpha_pack.smoothness.label"), t("Scene.bake_metallic_alpha_pack.smoothness.desc"))
],
default="NONE"
)
Scene.bake_pass_alpha = BoolProperty(
name=t('Scene.bake_pass_alpha.label'),
description=t('Scene.bake_pass_alpha.desc'),
default=False
)
Scene.bake_pass_metallic = BoolProperty(
name=t('Scene.bake_pass_metallic.label'),
description=t('Scene.bake_pass_metallic.desc'),
default=False
)
Scene.bake_questdiffuse_opacity = FloatProperty(
name=t('Scene.bake_questdiffuse_opacity.label'),
description=t('Scene.bake_questdiffuse_opacity.desc'),
default=0.75,
min=0.0,
max=1.0,
step=0.05,
precision=2,
subtype='FACTOR'
)
Scene.selection_mode = EnumProperty(
name=t('Scene.selection_mode.label'),
description=t('Scene.selection_mode.desc'),
items=[
("SHAPES", t('Scene.selection_mode.shapekeys.label'), t('Scene.selection_mode.shapekeys.desc')),
("MESHES", t('Scene.selection_mode.meshes.label'), t('Scene.selection_mode.meshes.desc'))
]
)
Scene.add_shape_key = EnumProperty(
name=t('Scene.add_shape_key.label'),
description=t('Scene.add_shape_key.desc'),
items=Common.get_shapekeys_decimation
)
Scene.add_mesh = EnumProperty(
name=t('Scene.add_mesh.label'),
description=t('Scene.add_mesh.desc'),
items=Common.get_meshes_decimation
)
Scene.decimate_fingers = BoolProperty(
name=t('Scene.decimate_fingers.label'),
description=t('Scene.decimate_fingers.desc')
)
Scene.decimate_hands = BoolProperty(
name=t('Scene.decimate_hands.label'),
description=t('Scene.decimate_hands.desc')
)
Scene.decimation_remove_doubles = BoolProperty(
name=t('Scene.decimation_remove_doubles.label'),
description=t('Scene.decimation_remove_doubles.desc'),
default=True
)
Scene.max_tris = IntProperty(
name=t('Scene.max_tris.label'),
description=t('Scene.max_tris.desc'),
default=70000,
min=1,
max=500000
)
# Eye Tracking
Scene.eye_mode = EnumProperty(
name=t('Scene.eye_mode.label'),
description=t('Scene.eye_mode.desc'),
items=[
("CREATION", t('Scene.eye_mode.creation.label'), t('Scene.eye_mode.creation.desc')),
("TESTING", t('Scene.eye_mode.testing.label'), t('Scene.eye_mode.testing.desc'))
],
update=Eyetracking.stop_testing
)
Scene.mesh_name_eye = EnumProperty(
name=t('Scene.mesh_name_eye.label'),
description=t('Scene.mesh_name_eye.desc'),
items=Common.get_meshes
)
Scene.head = EnumProperty(
name=t('Scene.head.label'),
description=t('Scene.head.desc'),
items=Common.get_bones_head
)
Scene.eye_left = EnumProperty(
name=t('Scene.eye_left.label'),
description=t('Scene.eye_left.desc'),
items=Common.get_bones_eye_l
)
Scene.eye_right = EnumProperty(
name=t('Scene.eye_right.label'),
description=t('Scene.eye_right.desc'),
items=Common.get_bones_eye_r
)
Scene.wink_left = EnumProperty(
name=t('Scene.wink_left.label'),
description=t('Scene.wink_left.desc'),
items=Common.get_shapekeys_eye_blink_l
)
Scene.wink_right = EnumProperty(
name=t('Scene.wink_right.label'),
description=t('Scene.wink_right.desc'),
items=Common.get_shapekeys_eye_blink_r
)
Scene.lowerlid_left = EnumProperty(
name=t('Scene.lowerlid_left.label'),
description=t('Scene.lowerlid_left.desc'),
items=Common.get_shapekeys_eye_low_l
)
Scene.lowerlid_right = EnumProperty(
name=t('Scene.lowerlid_right.label'),
description=t('Scene.lowerlid_right.desc'),
items=Common.get_shapekeys_eye_low_r
)
Scene.disable_eye_movement = BoolProperty(
name=t('Scene.disable_eye_movement.label'),
description=t('Scene.disable_eye_movement.desc'),
subtype='DISTANCE'
)
Scene.disable_eye_blinking = BoolProperty(
name=t('Scene.disable_eye_blinking.label'),
description=t('Scene.disable_eye_blinking.desc'),
subtype='NONE'
)
Scene.eye_distance = FloatProperty(
name=t('Scene.eye_distance.label'),
description=t('Scene.eye_distance.desc'),
default=0.8,
min=0.0,
max=2.0,
step=1.0,
precision=2,
subtype='FACTOR'
)
Scene.eye_rotation_x = IntProperty(
name=t('Scene.eye_rotation_x.label'),
description=t('Scene.eye_rotation_x.desc'),
default=0,
min=-19,
max=25,
step=1,
subtype='FACTOR',
update=Eyetracking.set_rotation
)
Scene.eye_rotation_y = IntProperty(
name=t('Scene.eye_rotation_y.label'),
description=t('Scene.eye_rotation_y.desc'),
default=0,
min=-19,
max=19,
step=1,
subtype='FACTOR',
update=Eyetracking.set_rotation
)
Scene.iris_height = IntProperty(
name=t('Scene.iris_height.label'),
description=t('Scene.iris_height.desc'),
default=0,
min=0,
max=100,
step=1,
subtype='FACTOR'
)
Scene.eye_blink_shape = FloatProperty(
name=t('Scene.eye_blink_shape.label'),
description=t('Scene.eye_blink_shape.desc'),
default=1.0,
min=0.0,
max=1.0,
step=1.0,
precision=2,
subtype='FACTOR'
)
Scene.eye_lowerlid_shape = FloatProperty(
name=t('Scene.eye_lowerlid_shape.label'),
description=t('Scene.eye_lowerlid_shape.desc'),
default=1.0,
min=0.0,
max=1.0,
step=1.0,
precision=2,
subtype='FACTOR'
)
# Visemes
Scene.mesh_name_viseme = EnumProperty(
name=t('Scene.mesh_name_viseme.label'),
description=t('Scene.mesh_name_viseme.desc'),
items=Common.get_meshes
)
Scene.mouth_a = EnumProperty(
name=t('Scene.mouth_a.label'),
description=t('Scene.mouth_a.desc'),
items=Common.get_shapekeys_mouth_ah,
)
Scene.mouth_o = EnumProperty(
name=t('Scene.mouth_o.label'),
description=t('Scene.mouth_o.desc'),
items=Common.get_shapekeys_mouth_oh,
)
Scene.mouth_ch = EnumProperty(
name=t('Scene.mouth_ch.label'),
description=t('Scene.mouth_ch.desc'),
items=Common.get_shapekeys_mouth_ch,
)
Scene.shape_intensity = FloatProperty(
name=t('Scene.shape_intensity.label'),
description=t('Scene.shape_intensity.desc'),
default=1.0,
min=0.0,
max=10.0,
step=0.1,
precision=2,
subtype='FACTOR'
)
# Bone Parenting
Scene.root_bone = EnumProperty(
name=t('Scene.root_bone.label'),
description=t('Scene.root_bone.desc'),
items=Rootbone.get_parent_root_bones,
)
# Optimize
Scene.optimize_mode = EnumProperty(
name=t('Scene.optimize_mode.label'),
description=t('Scene.optimize_mode.desc'),
items=[
("ATLAS", t('Scene.optimize_mode.atlas.label'), t('Scene.optimize_mode.atlas.desc')),
("MATERIAL", t('Scene.optimize_mode.material.label'), t('Scene.optimize_mode.material.desc')),
("BONEMERGING", t('Scene.optimize_mode.bonemerging.label'), t('Scene.optimize_mode.bonemerging.desc')),
]
)
# Atlas
# Material.add_to_atlas = BoolProperty(
# description=t('Add this material to the atlas'),
# default=False
# )
# Scene.material_list_index = IntProperty(
# default=0
# )
# Scene.material_list = CollectionProperty(
# type=Atlas.MaterialsGroup
# )
# Scene.clear_materials = BoolProperty(
# description=t('Clear materials checkbox'),
# default=True
# )
# Bone Merging
Scene.merge_ratio = FloatProperty(
name=t('Scene.merge_ratio.label'),
description=t('Scene.merge_ratio.desc'),
default=50,
min=1,
max=100,
step=1,
precision=0,
subtype='PERCENTAGE'
)
Scene.merge_mesh = EnumProperty(
name=t('Scene.merge_mesh.label'),
description=t('Scene.merge_mesh.desc'),
items=Common.get_meshes
)
Scene.merge_bone = EnumProperty(
name=t('Scene.merge_bone.label'),
description=t('Scene.merge_bone.desc'),
items=Rootbone.get_parent_root_bones,
)
# Settings
Scene.show_mmd_tabs = BoolProperty(
name=t('Scene.show_mmd_tabs.label'),
description=t('Scene.show_mmd_tabs.desc'),
default=True,
update=Common.toggle_mmd_tabs_update
)
Scene.embed_textures = BoolProperty(
name=t('Scene.embed_textures.label'),
description=t('Scene.embed_textures.desc'),
default=False,
update=Settings.update_settings
)
Scene.use_custom_mmd_tools = BoolProperty(
name=t('Scene.use_custom_mmd_tools.label'),
description=t('Scene.use_custom_mmd_tools.desc'),
default=False,
update=Settings.update_settings
)
Scene.ui_lang = EnumProperty(
name=t('Scene.ui_lang.label'),
description=t('Scene.ui_lang.desc'),
items=Translations.get_languages_list,
update=Translations.update_ui
)
Scene.debug_translations = BoolProperty(
name=t('Scene.debug_translations.label'),
description=t('Scene.debug_translations.desc'),
default=False
)
# Scene.disable_vrchat_features = BoolProperty(
# name=t('Disable VRChat Only Features'),
# description='This will disable features which are solely used for VRChat.'
# '\nThe following will be disabled:'
# '\n- Eye Tracking'
# '\n- Visemes',
# default=False,
# update=Settings.update_settings
# )
# Copy Protection - obsolete
# Scene.protection_mode = EnumProperty(
# name=t("Randomization Level"),
# description=t("Randomization Level"),
# items=[
# ("FULL", "Full", "This will randomize every vertex of your model and it will be completely unusable for thieves.\n"
# 'However this method might cause problems with the Outline option from Cubed shader.\n'
# 'If you have any issues ingame try again with option "Partial".'),
# ("PARTIAL", "Partial", 'Use this if you experience issues ingame with the Full option!\n'
# '\n'
# "This will only randomize a number of vertices and therefore will have a few unprotected areas,\n"
# "but it's still unusable to thieves as a whole.\n"
# 'This method however reduces the glitches that can occur ingame by a lot.')
# ],
# default='FULL'
# )
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/ztq550/cats-blender-plugin.git
git@gitee.com:ztq550/cats-blender-plugin.git
ztq550
cats-blender-plugin
cats-blender-plugin
master

搜索帮助