From 7834588fc4f3846641bb9eed680a8890b8852a9a Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Thu, 6 May 2021 13:20:24 +0300 Subject: [PATCH] Add a property in Blender for a custom shadow shader Since a shadow map doesn't have color output, it's useful to specify a cheaper shader which only does vertex transformations. --- blender/io_mspgl/export_material.py | 8 +++++++- blender/io_mspgl/properties.py | 5 ++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/blender/io_mspgl/export_material.py b/blender/io_mspgl/export_material.py index d62276f7..2d85b10f 100644 --- a/blender/io_mspgl/export_material.py +++ b/blender/io_mspgl/export_material.py @@ -32,7 +32,13 @@ def create_technique_resource(material, resources): if material.shadow_method!='NONE': st = Statement("pass", "shadow") - st.sub.append(Statement("shader", "_occluder.glsl.shader")) + if material.render_mode=='CUSTOM': + shader = material.shadow_shader or material.shader + if shader.endswith(".glsl"): + shader += ".shader" + st.sub.append(Statement("shader", shader)) + else: + st.sub.append(Statement("shader", "_occluder.glsl.shader")) tech_res.statements.append(st) return tech_res diff --git a/blender/io_mspgl/properties.py b/blender/io_mspgl/properties.py index 9d46e128..532528b8 100644 --- a/blender/io_mspgl/properties.py +++ b/blender/io_mspgl/properties.py @@ -85,6 +85,8 @@ class MspGLMaterialProperties(bpy.types.Panel): self.layout.prop(mat, "render_mode") if mat.render_mode=='CUSTOM': self.layout.prop(mat, "shader") + if mat.shadow_method!='NONE': + self.layout.prop(mat, "shadow_shader") elif mat.render_mode=='EXTERNAL': self.layout.prop(mat, "technique") if mat.render_mode=='BUILTIN': @@ -225,7 +227,8 @@ def register_properties(): ("CUSTOM", "Custom shader", "Use a custom shader"), ("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.shader = bpy.props.StringProperty(name="Custom shader", description="Name of a custom shader to use for rendering") + bpy.types.Material.shadow_shader = bpy.props.StringProperty(name="Custom shadow shader", description="Name of a custom shader to use for shadow pass") bpy.types.Material.receive_shadows = bpy.props.BoolProperty(name="Receive shadows", description="Receive shadows from a shadow map", default=True) bpy.types.Material.image_based_lighting = bpy.props.BoolProperty(name="Image based lighting", description="Use an environment map for ambient lighting", default=False) bpy.types.Material.array_atlas = bpy.props.BoolProperty(name="Texture array atlas", description="The material is stored in a texture array") -- 2.43.0