From: Mikko Rasa Date: Mon, 19 Apr 2021 08:29:03 +0000 (+0300) Subject: Export shadow settings from Blender X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=commitdiff_plain;h=03b21dc33ad615efa26849323a2018dd989218c3 Export shadow settings from Blender --- diff --git a/blender/io_mspgl/export_material.py b/blender/io_mspgl/export_material.py index bf7e2b3f..97bb8e9e 100644 --- a/blender/io_mspgl/export_material.py +++ b/blender/io_mspgl/export_material.py @@ -21,9 +21,16 @@ def create_technique_resource(material, resources): for u in material.uniforms: ss.sub.append(Statement("uniform", u.name, *u.values[:u.size])) st.sub.append(ss) + elif material.receive_shadows: + st.sub.append(Statement("receive_shadows", True)) tech_res.statements.append(st) + if material.shadow_method!='NONE': + st = Statement("pass", "shadow") + st.sub.append(Statement("shader", "_occluder.glsl.shader")) + tech_res.statements.append(st) + return tech_res class MaterialExporter: diff --git a/blender/io_mspgl/material.py b/blender/io_mspgl/material.py index ba5fc3e2..2613edac 100644 --- a/blender/io_mspgl/material.py +++ b/blender/io_mspgl/material.py @@ -96,6 +96,8 @@ class Material: self.render_mode = material.render_mode self.technique = material.technique self.shader = material.shader + self.receive_shadows = material.receive_shadows + self.cast_shadows = (material.shadow_method!='NONE') if self.render_mode=='EXTERNAL' and not self.technique: raise Exception("Invalid configuration on material {}: No technique for external rendering".format(self.name)) @@ -171,6 +173,8 @@ class MaterialAtlas: self.name = "material_atlas_"+os.path.splitext(self.shader)[0] else: self.name = "material_atlas" + self.receive_shadows = materials[0].receive_shadows + self.cast_shadows = (materials[0].shadow_method!='NONE') self.materials = materials self.material_names = [m.name for m in self.materials] for m in self.materials: @@ -178,6 +182,8 @@ class MaterialAtlas: raise Exception("Conflicting render modes in MaterialAtlas constructor") if self.render_mode=='CUSTOM' and m.shader!=self.shader: raise Exception("Conflicting shaders in MaterialAtlas constructor") + if m.receive_shadows!=self.receive_shadows or m.shadow_method!=materials[0].shadow_method: + raise Exception("Conflicting shadow settings in MaterialAtlas constructor") count = len(self.materials) size = 1 diff --git a/blender/io_mspgl/properties.py b/blender/io_mspgl/properties.py index 7fad772b..0648946e 100644 --- a/blender/io_mspgl/properties.py +++ b/blender/io_mspgl/properties.py @@ -88,6 +88,8 @@ class MspGLMaterialProperties(bpy.types.Panel): elif mat.render_mode=='EXTERNAL': self.layout.prop(mat, "technique") self.layout.prop(mat, "array_atlas") + if mat.render_mode=='BUILTIN': + self.layout.prop(mat, "receive_shadows") if mat.array_atlas: self.layout.prop(mat, "array_layer") if mat.render_mode!='EXTERNAL': @@ -223,6 +225,7 @@ def register_properties(): ("EXTERNAL", "External technique", "Use an externally defined technique"))) bpy.types.Material.technique = bpy.props.StringProperty(name="Custom technique", description="Name of an external technique to use for rendering") bpy.types.Material.shader = bpy.props.StringProperty(name="Custom shader", description="Name of an external technique to use for rendering") + bpy.types.Material.receive_shadows = bpy.props.BoolProperty(name="Receive shadows", description="Receive shadows from a shadow map", default=True) bpy.types.Material.array_atlas = bpy.props.BoolProperty(name="Texture array atlas", description="The material is stored in a texture array") bpy.types.Material.array_layer = bpy.props.IntProperty("Texture array layer", description="Layer of the texture array atlas to use") bpy.types.Material.material_atlas = bpy.props.BoolProperty(name="Material atlas", description="Make this material part of a material atlas")