Ejemplo n.º 1
0
def _populate_eye_settings(self, context):
    _LOG.enter()
    _LOG.trace("Context is scene", isinstance(context, bpy.types.Scene))
    available_settings = UiService.get_importer_eye_settings_panel_list()
    if available_settings is None:
        available_settings = []
    return available_settings
Ejemplo n.º 2
0
    def draw(self, context):
        _LOG.enter()
        layout = self.layout
        scn = context.scene

        from mpfb.ui.eyesettings.eyesettingspanel import ensure_eye_settings_default_exists
        ensure_eye_settings_default_exists()

        if UiService.get_importer_panel_list() is None:
            UiService.rebuild_importer_panel_list()
        if UiService.get_importer_enhanced_settings_panel_list() is None:
            UiService.rebuild_importer_enhanced_settings_panel_list()
        if UiService.get_importer_eye_settings_panel_list() is None:
            UiService.rebuild_importer_eye_settings_panel_list()

        IMPORTER_PROPERTIES.draw_properties(scn, layout, [
            "presets_for_import", "skin_settings_for_import",
            "eye_settings_for_import"
        ])
        layout.operator('mpfb.importer_import_body')
Ejemplo n.º 3
0
    def _adjust_eye_material_settings(self, importer):
        _LOG.enter()
        blender = importer["blender_entities"]
        ui = importer["settings_from_ui"]
        derived = importer["derived_settings"]

        if not ui["procedural_eyes"]:
            _LOG.info("Skipping eye material adjustment since not using procedural eyes")
            return
        matset = ui["eye_settings_for_import"]
        if not matset:
            _LOG.info("Skipping eye material adjustment since they're not requested")
            return

        eye_object = None
        if "eyes" in blender:
            eye_object = blender["eyes"]

        if not eye_object:
            _LOG.info("Skipping eye material adjustment since there were no eyes")
            return

        if not MaterialService.has_materials(eye_object):
            _LOG.info("Skipping eye material adjustment since the eyes do not have any material")
            return

        _LOG.debug("Chosen material settings", matset)
        if matset == "CHARACTER":
            available_from_list = UiService.get_importer_eye_settings_panel_list()
            target = str(derived["name"]).lower()
            for setting in available_from_list:
                match = str(setting[0]).lower()
                _LOG.debug("Comparison", (target, match))
                if match == target:
                    matset = setting[1]
            if matset == "CHARACTER":
                matset = "default"
        _LOG.debug("Calculated material settings", matset)

        file_name = LocationService.get_user_config("eye_settings." + matset + ".json")

        if not os.path.exists(file_name):
            _LOG.error("Settings did not exist despite being in list:", file_name)
            return

        settings = dict()
        _LOG.debug("Will attempt to load", file_name)
        with open(file_name, "r") as json_file:
            settings = json.load(json_file)

        slot = eye_object.material_slots[0]

        material = slot.material
        group_node = NodeService.find_first_node_by_type_name(material.node_tree, "ShaderNodeGroup")
        if group_node:
            values = NodeService.get_socket_default_values(group_node)
            _LOG.dump("Current socket values", values)
            if "IrisMajorColor" in values:
                _LOG.debug("will try to apply settings", settings)
                NodeService.set_socket_default_values(group_node, settings)
            else:
                _LOG.info("Skipping eye material adjustment since material does not seem to be procedural")
            material.blend_method = "BLEND"
            material.show_transparent_back = True