diff options
author | Julien Duroure <julien.duroure@gmail.com> | 2020-09-18 19:55:57 +0300 |
---|---|---|
committer | Julien Duroure <julien.duroure@gmail.com> | 2020-09-18 19:55:57 +0300 |
commit | 1f043682f9568fed02e3b877b31e8244b1b7a5c2 (patch) | |
tree | 69ec40cb2a9905db8f78749d7275b336d77dbf24 /io_scene_gltf2/blender/exp/gltf2_blender_gather_materials.py | |
parent | df0fa2341e1a7bb69ee52f13d89f656f362cb426 (diff) |
glTF exporter: support KHR_materials_unlit
Diffstat (limited to 'io_scene_gltf2/blender/exp/gltf2_blender_gather_materials.py')
-rwxr-xr-x | io_scene_gltf2/blender/exp/gltf2_blender_gather_materials.py | 53 |
1 files changed, 44 insertions, 9 deletions
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials.py index c346a831..f1260940 100755 --- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials.py +++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials.py @@ -21,6 +21,7 @@ from io_scene_gltf2.blender.exp import gltf2_blender_gather_texture_info, gltf2_ from io_scene_gltf2.blender.exp import gltf2_blender_search_node_tree from io_scene_gltf2.blender.exp import gltf2_blender_gather_materials_pbr_metallic_roughness +from io_scene_gltf2.blender.exp import gltf2_blender_gather_materials_unlit from ..com.gltf2_blender_extras import generate_extras from io_scene_gltf2.blender.exp import gltf2_blender_get from io_scene_gltf2.io.exp.gltf2_io_user_extensions import export_user_extensions @@ -28,7 +29,7 @@ from io_scene_gltf2.io.com.gltf2_io_debug import print_console @cached -def gather_material(blender_material, mesh_double_sided, export_settings): +def gather_material(blender_material, export_settings): """ Gather the material used by the blender primitive. @@ -39,12 +40,16 @@ def gather_material(blender_material, mesh_double_sided, export_settings): if not __filter_material(blender_material, export_settings): return None + mat_unlit = __gather_material_unlit(blender_material, export_settings) + if mat_unlit is not None: + return mat_unlit + orm_texture = __gather_orm_texture(blender_material, export_settings) material = gltf2_io.Material( alpha_cutoff=__gather_alpha_cutoff(blender_material, export_settings), alpha_mode=__gather_alpha_mode(blender_material, export_settings), - double_sided=__gather_double_sided(blender_material, mesh_double_sided, export_settings), + double_sided=__gather_double_sided(blender_material, export_settings), emissive_factor=__gather_emissive_factor(blender_material, export_settings), emissive_texture=__gather_emissive_texture(blender_material, export_settings), extensions=__gather_extensions(blender_material, export_settings), @@ -92,8 +97,8 @@ def __gather_alpha_mode(blender_material, export_settings): return None -def __gather_double_sided(blender_material, mesh_double_sided, export_settings): - if mesh_double_sided: +def __gather_double_sided(blender_material, export_settings): + if not blender_material.use_backface_culling: return True old_double_sided_socket = gltf2_blender_get.get_socket_old(blender_material, "DoubleSided") @@ -152,11 +157,6 @@ def __gather_emissive_texture(blender_material, export_settings): def __gather_extensions(blender_material, export_settings): extensions = {} - # KHR_materials_unlit - - if gltf2_blender_get.get_socket(blender_material, "Background") is not None: - extensions["KHR_materials_unlit"] = Extension("KHR_materials_unlit", {}, False) - # KHR_materials_clearcoat clearcoat_extension = __gather_clearcoat_extension(blender_material, export_settings) @@ -351,3 +351,38 @@ def __gather_transmission_extension(blender_material, export_settings): transmission_extension['transmissionTexture'] = combined_texture return Extension('KHR_materials_transmission', transmission_extension, False) + + +def __gather_material_unlit(blender_material, export_settings): + gltf2_unlit = gltf2_blender_gather_materials_unlit + + info = gltf2_unlit.detect_shadeless_material(blender_material, export_settings) + if info is None: + return None + + material = gltf2_io.Material( + alpha_cutoff=__gather_alpha_cutoff(blender_material, export_settings), + alpha_mode=__gather_alpha_mode(blender_material, export_settings), + double_sided=__gather_double_sided(blender_material, export_settings), + extensions={"KHR_materials_unlit": Extension("KHR_materials_unlit", {}, required=False)}, + extras=__gather_extras(blender_material, export_settings), + name=__gather_name(blender_material, export_settings), + emissive_factor=None, + emissive_texture=None, + normal_texture=None, + occlusion_texture=None, + + pbr_metallic_roughness=gltf2_io.MaterialPBRMetallicRoughness( + base_color_factor=gltf2_unlit.gather_base_color_factor(info, export_settings), + base_color_texture=gltf2_unlit.gather_base_color_texture(info, export_settings), + metallic_factor=0.0, + roughness_factor=0.9, + metallic_roughness_texture=None, + extensions=None, + extras=None, + ) + ) + + export_user_extensions('gather_material_unlit_hook', export_settings, material, blender_material) + + return material |