def __gather_materials(blender_primitive, export_settings): if not blender_primitive['material']: # TODO: fix 'extract_promitives' so that the value of 'material' is None and not empty string return None material = bpy.data.materials[blender_primitive['material']] return gltf2_blender_gather_materials.gather_material( material, export_settings)
def __gather_materials(blender_primitive, blender_mesh, modifiers, export_settings): if not blender_primitive['material']: # TODO: fix 'extract_primitives' so that the value of 'material' is None and not empty string return None mesh_double_sided = blender_mesh.show_double_sided material = bpy.data.materials[blender_primitive['material']] return gltf2_blender_gather_materials.gather_material(material, mesh_double_sided, export_settings)
def __gather_materials(blender_primitive, modifiers, export_settings): if not blender_primitive['material']: # TODO: fix 'extract_primitives' so that the value of 'material' is None and not empty string return None material = bpy.data.materials[blender_primitive['material']] material_double_sided = not material.use_backface_culling return gltf2_blender_gather_materials.gather_material( material, material_double_sided, export_settings)
def __gather_materials_279(blender_primitive, blender_mesh, modifiers, export_settings): if not blender_primitive['material']: # TODO: fix 'extract_primitives' so that the value of 'material' is None and not empty string return None mesh_double_sided = blender_mesh.show_double_sided material = bpy.data.materials[blender_primitive['material']] return gltf2_blender_gather_materials.gather_material( material, mesh_double_sided, export_settings)
def gather_material_property(export_settings, blender_object, target, property_name, property_definition, hubs_config): blender_material = getattr(target, property_name) if blender_material: material = gltf2_blender_gather_materials.gather_material( blender_material, export_settings) return material else: return None
def gather_material_property(export_settings, blender_object, target, property_name, property_definition, hubs_config): blender_material = getattr(target, property_name) if blender_material: double_sided = not blender_material.use_backface_culling material = gltf2_blender_gather_materials.gather_material( blender_material, double_sided, export_settings) return material else: return None
def gather_primitives(blender_mesh: bpy.types.Mesh, uuid_for_skined_data, vertex_groups: Optional[bpy.types.VertexGroups], modifiers: Optional[bpy.types.ObjectModifiers], materials: Tuple[bpy.types.Material], export_settings) -> List[gltf2_io.MeshPrimitive]: """ Extract the mesh primitives from a blender object :return: a list of glTF2 primitives """ primitives = [] # retrieve active render UVMap active_uvmap_idx = 0 for i in range(len(blender_mesh.uv_layers)): if blender_mesh.uv_layers[i].active_render is True: active_uvmap_idx = i break blender_primitives = __gather_cache_primitives(blender_mesh, uuid_for_skined_data, vertex_groups, modifiers, export_settings) for internal_primitive in blender_primitives: material_idx = internal_primitive['material'] material = None if export_settings[ 'gltf_materials'] == "EXPORT" and material_idx is not None: blender_material = None mat = None if materials: i = material_idx if material_idx < len(materials) else -1 mat = materials[i] if mat is not None: material = gltf2_blender_gather_materials.gather_material( mat, active_uvmap_idx, export_settings) primitive = gltf2_io.MeshPrimitive( attributes=internal_primitive['attributes'], extensions=None, extras=None, indices=internal_primitive['indices'], material=material, mode=internal_primitive['mode'], targets=internal_primitive['targets']) primitives.append(primitive) return primitives
def gather_primitives( blender_mesh: bpy.types.Mesh, library: Optional[str], blender_object: Optional[bpy.types.Object], vertex_groups: Optional[bpy.types.VertexGroups], modifiers: Optional[bpy.types.ObjectModifiers], material_names: Tuple[str], export_settings ) -> List[gltf2_io.MeshPrimitive]: """ Extract the mesh primitives from a blender object :return: a list of glTF2 primitives """ primitives = [] blender_primitives = __gather_cache_primitives(blender_mesh, library, blender_object, vertex_groups, modifiers, export_settings) for internal_primitive in blender_primitives: material_idx = internal_primitive['material'] material = None if export_settings['gltf_materials'] == "EXPORT" and material_idx is not None: blender_material = None if material_names: i = material_idx if material_idx < len(material_names) else -1 material_name = material_names[i] if material_name is not None: blender_material = bpy.data.materials[material_name] if blender_material is not None: material = gltf2_blender_gather_materials.gather_material( blender_material, export_settings, ) primitive = gltf2_io.MeshPrimitive( attributes=internal_primitive['attributes'], extensions=None, extras=None, indices=internal_primitive['indices'], material=material, mode=internal_primitive['mode'], targets=internal_primitive['targets'] ) primitives.append(primitive) return primitives
def gather_primitives( blender_mesh: bpy.types.Mesh, vertex_groups: Optional[bpy.types.VertexGroups], modifiers: Optional[bpy.types.ObjectModifiers], material_names: Tuple[str], export_settings ) -> List[gltf2_io.MeshPrimitive]: """ Extract the mesh primitives from a blender object :return: a list of glTF2 primitives """ primitives = [] blender_primitives = __gather_cache_primitives(blender_mesh, vertex_groups, modifiers, export_settings) for internal_primitive in blender_primitives: material_idx = internal_primitive['material'] double_sided = False material = None try: blender_material = bpy.data.materials[material_names[material_idx]] if bpy.app.version < (2, 80, 0): double_sided = blender_mesh.show_double_sided else: double_sided = not blender_material.use_backface_culling material = gltf2_blender_gather_materials.gather_material(blender_material, double_sided, export_settings) except IndexError: # no material at that index pass primitive = gltf2_io.MeshPrimitive( attributes=internal_primitive['attributes'], extensions=None, extras=None, indices=internal_primitive['indices'], material=material, mode=None, targets=internal_primitive['targets'] ) primitives.append(primitive) return primitives
def gather_primitives(blender_mesh: bpy.types.Mesh, library: Optional[str], blender_object: Optional[bpy.types.Object], vertex_groups: Optional[bpy.types.VertexGroups], modifiers: Optional[bpy.types.ObjectModifiers], material_names: Tuple[str], export_settings) -> List[gltf2_io.MeshPrimitive]: """ Extract the mesh primitives from a blender object :return: a list of glTF2 primitives """ primitives = [] blender_primitives = __gather_cache_primitives(blender_mesh, library, blender_object, vertex_groups, modifiers, export_settings) for internal_primitive in blender_primitives: material_idx = internal_primitive['material'] double_sided = False material = None try: blender_material = bpy.data.materials[material_names[material_idx]] double_sided = not blender_material.use_backface_culling material = gltf2_blender_gather_materials.gather_material( blender_material, double_sided, export_settings) # NOTE: gather_material may invalidate blender_mesh (see #932), # so make sure not to access blender_mesh again after this point except IndexError: # no material at that index pass primitive = gltf2_io.MeshPrimitive( attributes=internal_primitive['attributes'], extensions=None, extras=None, indices=internal_primitive['indices'], material=material, mode=None, targets=internal_primitive['targets']) primitives.append(primitive) return primitives
def __gather_materials(blender_scene, export_settings): materials = [] for _blender_object in blender_scene.objects: blender_object = _blender_object.proxy if _blender_object.proxy else _blender_object # Check if this object is exclude from view layer node = gltf2_blender_gather_nodes.gather_node( blender_object, blender_object.library.name if blender_object.library else None, blender_scene, None, export_settings) if node is None: continue for slot in blender_object.material_slots: # Check if this slot as assigned material if slot.material is None: continue double_sided = not slot.material.use_backface_culling materials.append(gltf2_blender_gather_materials.gather_material(slot.material, double_sided, export_settings)) return materials
def __gather_materials(blender_primitive, export_settings): material = bpy.data.materials[blender_primitive['material']] return gltf2_blender_gather_materials.gather_material( material, export_settings)
def patched_gather_extensions(blender_object, export_settings): extensions = original_gather_extensions(blender_object, export_settings) component_list = blender_object.hubs_component_list hubs_config = export_settings['hubs_config'] registered_hubs_components = export_settings['registered_hubs_components'] if component_list.items: extension_name = hubs_config["gltfExtensionName"] component_data = {} for component_item in component_list.items: component_name = component_item.name component_data[component_name] = {} component_definition = hubs_config['components'][component_name] component_class = registered_hubs_components[component_name] component_class_name = component_class.__name__ component = getattr(blender_object, component_class_name) for property_name, property_definition in component_definition[ 'properties'].items(): property_type = property_definition['type'] if property_type == 'collections': filtered_collection_names = [] collection_prefix_regex = None if 'collectionPrefix' in property_definition: collection_prefix = property_definition[ 'collectionPrefix'] collection_prefix_regex = re.compile(r'^' + collection_prefix) for collection in blender_object.users_collection: if collection_prefix_regex and collection_prefix_regex.match( collection.name): new_name = collection_prefix_regex.sub( "", collection.name) filtered_collection_names.append(new_name) elif not collection_prefix_regex: filtered_collection_names.append(collection.name) component_data[component_name][ property_name] = filtered_collection_names elif property_type == 'array': array_type = property_definition['arrayType'] value = [] arr = getattr(component, property_name) if array_type == 'material': for item in arr: blender_material = item.value double_sided = not blender_material.use_backface_culling material = gltf2_blender_gather_materials.gather_material( blender_material, double_sided, export_settings) value.append(material) else: for item in arr: value.append(__to_json_compatible(item.value)) component_data[component_name][property_name] = value else: component_data[component_name][ property_name] = __to_json_compatible( getattr(component, property_name)) if extensions is None: extensions = {} extensions[extension_name] = gltf2_io_extensions.Extension( name=extension_name, extension=component_data, required=False) return extensions if extensions else None