[Bf-extensions-cvs] [682fffba] master: glTF importer: Manage KHR_materials_unlit
Julien Duroure
noreply at git.blender.org
Sun Jan 27 18:09:05 CET 2019
Commit: 682fffbaf195e3a7a4acaf25613706f1bc2c6729
Author: Julien Duroure
Date: Sun Jan 27 18:08:29 2019 +0100
Branches: master
https://developer.blender.org/rBA682fffbaf195e3a7a4acaf25613706f1bc2c6729
glTF importer: Manage KHR_materials_unlit
===================================================================
A io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_unlit.py
M io_scene_gltf2/blender/imp/gltf2_blender_material.py
M io_scene_gltf2/blender/imp/gltf2_blender_pbrMetallicRoughness.py
M io_scene_gltf2/io/imp/gltf2_io_gltf.py
===================================================================
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_unlit.py b/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_unlit.py
new file mode 100644
index 00000000..75c9e13f
--- /dev/null
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_KHR_materials_unlit.py
@@ -0,0 +1,51 @@
+# Copyright 2018 The glTF-Blender-IO authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import bpy
+from .gltf2_blender_texture import BlenderTextureInfo
+from ...io.com.gltf2_io import MaterialPBRMetallicRoughness
+from .gltf2_blender_pbrMetallicRoughness import BlenderPbr
+
+class BlenderKHR_materials_unlit():
+ """Blender KHR_materials_unlit extension."""
+ def __new__(cls, *args, **kwargs):
+ raise RuntimeError("%s should not be instantiated" % cls)
+
+ @staticmethod
+ def create(gltf, material_index, unlit, mat_name, vertex_color):
+ """KHR_materials_unlit creation."""
+ engine = bpy.context.scene.render.engine
+ if engine in ['CYCLES', 'BLENDER_EEVEE']:
+ BlenderKHR_materials_unlit.create_nodetree(gltf, material_index, unlit, mat_name, vertex_color)
+
+ @staticmethod
+ def create_nodetree(gltf, material_index, unlit, mat_name, vertex_color):
+ """Node tree creation."""
+ material = bpy.data.materials[mat_name]
+ material.use_nodes = True
+ node_tree = material.node_tree
+
+ pymaterial = gltf.data.materials[material_index]
+ if pymaterial.pbr_metallic_roughness is None:
+ # If no pbr material is set, we need to apply all default of pbr
+ pbr = {}
+ pbr["baseColorFactor"] = [1.0, 1.0, 1.0, 1.0]
+ pbr["metallicFactor"] = 1.0
+ pbr["roughnessFactor"] = 1.0
+ pymaterial.pbr_metallic_roughness = MaterialPBRMetallicRoughness.from_dict(pbr)
+ pymaterial.pbr_metallic_roughness.color_type = gltf.SIMPLE
+ pymaterial.pbr_metallic_roughness.metallic_type = gltf.SIMPLE
+
+ BlenderPbr.create_nodetree(gltf, pymaterial.pbr_metallic_roughness, mat_name, vertex_color, nodetype='unlit')
+
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_material.py b/io_scene_gltf2/blender/imp/gltf2_blender_material.py
index 8abfc217..fcd7c7d2 100755
--- a/io_scene_gltf2/blender/imp/gltf2_blender_material.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_material.py
@@ -15,6 +15,7 @@
import bpy
from .gltf2_blender_pbrMetallicRoughness import BlenderPbr
from .gltf2_blender_KHR_materials_pbrSpecularGlossiness import BlenderKHR_materials_pbrSpecularGlossiness
+from .gltf2_blender_KHR_materials_unlit import BlenderKHR_materials_unlit
from .gltf2_blender_map_emissive import BlenderEmissiveMap
from .gltf2_blender_map_normal import BlenderNormalMap
from .gltf2_blender_map_occlusion import BlenderOcclusionMap
@@ -48,10 +49,21 @@ class BlenderMaterial():
mat = bpy.data.materials.new(name)
pymaterial.blender_material[vertex_color] = mat.name
- if pymaterial.extensions is not None and 'KHR_materials_pbrSpecularGlossiness' in pymaterial.extensions.keys():
- BlenderKHR_materials_pbrSpecularGlossiness.create(
- gltf, pymaterial.extensions['KHR_materials_pbrSpecularGlossiness'], mat.name, vertex_color
- )
+ ignore_map = False
+
+ if pymaterial.extensions is not None :
+ if 'KHR_materials_unlit' in pymaterial.extensions.keys():
+ ignore_map = True
+ BlenderKHR_materials_unlit.create(
+ gltf, material_idx,
+ pymaterial.extensions['KHR_materials_unlit'],
+ mat.name,
+ vertex_color
+ )
+ elif 'KHR_materials_pbrSpecularGlossiness' in pymaterial.extensions.keys():
+ BlenderKHR_materials_pbrSpecularGlossiness.create(
+ gltf, pymaterial.extensions['KHR_materials_pbrSpecularGlossiness'], mat.name, vertex_color
+ )
else:
# create pbr material
if pymaterial.pbr_metallic_roughness is None:
@@ -66,21 +78,22 @@ class BlenderMaterial():
BlenderPbr.create(gltf, pymaterial.pbr_metallic_roughness, mat.name, vertex_color)
- # add emission map if needed
- if pymaterial.emissive_texture is not None:
- BlenderEmissiveMap.create(gltf, material_idx, vertex_color)
+ if ignore_map == False:
+ # add emission map if needed
+ if pymaterial.emissive_texture is not None:
+ BlenderEmissiveMap.create(gltf, material_idx, vertex_color)
- # add normal map if needed
- if pymaterial.normal_texture is not None:
- BlenderNormalMap.create(gltf, material_idx, vertex_color)
+ # add normal map if needed
+ if pymaterial.normal_texture is not None:
+ BlenderNormalMap.create(gltf, material_idx, vertex_color)
- # add occlusion map if needed
- # will be pack, but not used
- if pymaterial.occlusion_texture is not None:
- BlenderOcclusionMap.create(gltf, material_idx, vertex_color)
+ # add occlusion map if needed
+ # will be pack, but not used
+ if pymaterial.occlusion_texture is not None:
+ BlenderOcclusionMap.create(gltf, material_idx, vertex_color)
- if pymaterial.alpha_mode is not None and pymaterial.alpha_mode != 'OPAQUE':
- BlenderMaterial.blender_alpha(gltf, material_idx, vertex_color, pymaterial.alpha_mode)
+ if pymaterial.alpha_mode is not None and pymaterial.alpha_mode != 'OPAQUE':
+ BlenderMaterial.blender_alpha(gltf, material_idx, vertex_color, pymaterial.alpha_mode)
@staticmethod
def set_uvmap(gltf, material_idx, prim, obj, vertex_color):
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_pbrMetallicRoughness.py b/io_scene_gltf2/blender/imp/gltf2_blender_pbrMetallicRoughness.py
index dcc9b3fd..18e2aefb 100755
--- a/io_scene_gltf2/blender/imp/gltf2_blender_pbrMetallicRoughness.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_pbrMetallicRoughness.py
@@ -27,7 +27,7 @@ class BlenderPbr():
if engine in ['CYCLES', 'BLENDER_EEVEE']:
BlenderPbr.create_nodetree(gltf, pypbr, mat_name, vertex_color)
- def create_nodetree(gltf, pypbr, mat_name, vertex_color):
+ def create_nodetree(gltf, pypbr, mat_name, vertex_color, nodetype='principled'):
"""Nodetree creation."""
material = bpy.data.materials[mat_name]
material.use_nodes = True
@@ -46,19 +46,24 @@ class BlenderPbr():
output_node = node_tree.nodes[0]
output_node.location = 1250, 0
- # create PBR node
- principled = node_tree.nodes.new('ShaderNodeBsdfPrincipled')
- principled.location = 0, 0
+ # create Main node
+ if nodetype == "principled":
+ main_node = node_tree.nodes.new('ShaderNodeBsdfPrincipled')
+ main_node.location = 0, 0
+ elif nodetype == "unlit":
+ main_node = node_tree.nodes.new('ShaderNodeBackground')
+ main_node.location = 0, 0
if pypbr.color_type == gltf.SIMPLE:
if not vertex_color:
# change input values
- principled.inputs[0].default_value = pypbr.base_color_factor
- # TODO : currently set metallic & specular in same way
- principled.inputs[5].default_value = pypbr.metallic_factor
- principled.inputs[7].default_value = pypbr.roughness_factor
+ main_node.inputs[0].default_value = pypbr.base_color_factor
+ if nodetype == "principled":
+ # TODO : currently set metallic & specular in same way
+ main_node.inputs[5].default_value = pypbr.metallic_factor
+ main_node.inputs[7].default_value = pypbr.roughness_factor
else:
# Create attribute node to get COLOR_0 data
@@ -66,9 +71,10 @@ class BlenderPbr():
attribute_node.attribute_name = 'COLOR_0'
attribute_node.location = -500, 0
- # TODO : currently set metallic & specular in same way
- principled.inputs[5].default_value = pypbr.metallic_factor
- principled.inputs[7].default_value = pypbr.roughness_factor
+ if nodetype == "principled":
+ # TODO : currently set metallic & specular in same way
+ main_node.inputs[5].default_value = pypbr.metallic_factor
+ main_node.inputs[7].default_value = pypbr.roughness_factor
# links
rgb_node = node_tree.nodes.new('ShaderNodeMixRGB')
@@ -76,7 +82,7 @@ class BlenderPbr():
rgb_node.inputs['Fac'].default_value = 1.0
rgb_node.inputs['Color1'].default_value = pypbr.base_color_factor
node_tree.links.new(rgb_node.inputs['Color2'], attribute_node.outputs[0])
- node_tree.links.new(principled.inputs[0], rgb_node.outputs[0])
+ node_tree.links.new(main_node.inputs[0], rgb_node.outputs[0])
elif pypbr.color_type == gltf.TEXTURE_FACTOR:
@@ -129,10 +135,10 @@ class BlenderPbr():
if vertex_color:
node_tree.links.new(vc_mult_node.inputs[2], attribute_node.outputs[0])
node_tree.links.new(vc_mult_node.inputs[1], mult_node.outputs[0])
- node_tree.links.new(principled.inputs[0], vc_mult_node.outputs[0])
+ node_tree.links.new(main_node.inputs[0], vc_mult_node.outputs[0])
else:
-
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list