]> git.tdb.fi Git - libs/gl.git/blobdiff - blender/io_mspgl/properties.py
Remove the scene type property from Blender exporter
[libs/gl.git] / blender / io_mspgl / properties.py
index 532528b89b747b8adbaa75a02b0f6e13614c4205..7b67955a1e2e84c159e2b2211e89f2f69c421bf6 100644 (file)
@@ -10,7 +10,6 @@ class MspGLSceneProperties(bpy.types.Panel):
        def draw(self, context):
                scene = context.scene
 
-               self.layout.prop(scene, "scene_type")
                self.layout.prop(scene, "export_disposition")
 
 class MspGLMeshProperties(bpy.types.Panel):
@@ -84,9 +83,19 @@ 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")
+                       self.layout.label(text="Render methods")
+                       self.layout.template_list("MATERIAL_UL_mspgl_render_methods", "", mat, "render_methods", mat, "active_render_method_index")
+                       row = self.layout.row()
+                       row.operator("material.add_render_method")
+                       row.operator("material.remove_render_method")
+
+                       if mat.active_render_method_index<len(mat.render_methods):
+                               method = mat.render_methods[mat.active_render_method_index]
+                               self.layout.prop(method, "tag")
+                               self.layout.prop(method, "shader")
+                               self.layout.prop(method, "use_material")
+
+                       self.layout.separator()
                elif mat.render_mode=='EXTERNAL':
                        self.layout.prop(mat, "technique")
                if mat.render_mode=='BUILTIN':
@@ -131,38 +140,37 @@ class MspGLTextureNodeProperties(bpy.types.Panel):
                if not node:
                        return
 
-               self.layout.prop(node, "default_filter")
-               if not node.default_filter:
-                       self.layout.prop(node, "use_mipmap")
-                       self.layout.prop(node, "max_anisotropy")
+               self.layout.prop(node, "use_mipmap")
+               self.layout.prop(node, "max_anisotropy")
 
-class MspGLLightProperties(bpy.types.Panel):
-       bl_idname = "LIGHT_PT_mspgl_properties"
+class MspGLRenderProperties(bpy.types.Panel):
+       bl_idname = "WORLD_PT_mspgl_properties"
        bl_label = "MspGL properties"
        bl_space_type = "PROPERTIES"
        bl_region_type = "WINDOW"
-       bl_context = "data"
-
-       @classmethod
-       def poll(cls, context):
-               return context.active_object.type=="LIGHT"
+       bl_context = "render"
 
        def draw(self, context):
-               light = context.active_object.data
+               scene = context.scene
+               self.layout.prop(scene, "use_hdr")
+               if scene.eevee.use_gtao:
+                       self.layout.prop(scene, "ao_samples")
 
-               if light.use_shadow:
-                       self.layout.prop(light, "shadow_map_size")
+class MspGLRenderMethod(bpy.types.PropertyGroup):
+       tag: bpy.props.StringProperty(name="Tag", description="Tag of the render method")
+       shader: bpy.props.StringProperty(name="Shader", description="Shader to use")
+       use_material: bpy.props.BoolProperty(name="Use material", description="Use material properties in this render method")
 
-class MspGLWorldProperties(bpy.types.Panel):
-       bl_idname = "WORLD_PT_mspgl_properties"
-       bl_label = "MspGL properties"
-       bl_space_type = "PROPERTIES"
-       bl_region_type = "WINDOW"
-       bl_context = "world"
+class MspGLRenderMethodList(bpy.types.UIList):
+       bl_idname = "MATERIAL_UL_mspgl_render_methods"
 
-       def draw(self, context):
-               world = context.scene.world
-               self.layout.prop(world, "use_hdr")
+       def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
+               method = item
+               if self.layout_type=="GRID":
+                       layout.label(text="", icon_value=icon)
+               else:
+                       layout.prop(method, "tag", text="", emboss=False, icon_value=icon)
+                       layout.label(text=(method.shader or "(no shader)"))
 
 class MspGLUniform(bpy.types.PropertyGroup):
        name: bpy.props.StringProperty(name="Name", description="Name of the uniform variable")
@@ -181,23 +189,20 @@ class MspGLUniformList(bpy.types.UIList):
                        layout.label(text="({})".format(", ".join("{:.3f}".format(v) for v in uniform.values[:uniform.size])))
 
 classes = [MspGLSceneProperties, MspGLMeshProperties, MspGLObjectProperties, MspGLMaterialProperties,
-       MspGLTextureNodeProperties, MspGLLightProperties, MspGLWorldProperties, MspGLUniform, MspGLUniformList]
+       MspGLTextureNodeProperties, MspGLLightProperties, MspGLRenderProperties, MspGLRenderMethod,
+       MspGLRenderMethodList, MspGLUniform, MspGLUniformList]
 
 def register_properties():
        for c in classes:
                bpy.utils.register_class(c)
 
-       bpy.types.Scene.scene_type = bpy.props.EnumProperty(name="Scene type", description="Type of scene to use for exporting", default="SIMPLE",
-               items=(("SIMPLE", "Simple", "Objects are rendered in no specific order"),
-                       ("ORDERED", "Ordered", "Objects are rendered in order by their name"),
-                       ("ZSORTED", "Z-sorted", "Objects are rendered in order by their distance from the camera")))
        bpy.types.Scene.export_disposition = bpy.props.EnumProperty(name="Export disposition", description="What to do with this scene during project export", default="IGNORE",
                items=(("IGNORE", "Ignore", "The scene won't be exported"),
                        ("CONTENTS", "Contents only", "Objects in the scene will be exported, but not the scene itself"),
                        ("SCENE", "Scene", "The scene will be exported"),
                        ("SEQUENCE", "Sequence", "The scene will be exported along with a rendering sequence")))
-
-       bpy.types.World.use_hdr = bpy.props.BoolProperty(name="High dynamic range", description="Use a range render target with a floating point format", default=False)
+       bpy.types.Scene.use_hdr = bpy.props.BoolProperty(name="High dynamic range", description="Use a range render target with a floating point format", default=False)
+       bpy.types.Scene.ao_samples = bpy.props.IntProperty(name="Ambient occlusion samples", description="Number of samples to use for ambient occlusion", min=8, max=128, default=32)
 
        bpy.types.Mesh.winding_test = bpy.props.BoolProperty(name="Winding test", description="Perform winding test to skip back faces")
        bpy.types.Mesh.smoothing = bpy.props.EnumProperty(name="Smoothing", description="Smoothing method to use", default="MSPGL",
@@ -224,20 +229,19 @@ def register_properties():
 
        bpy.types.Material.render_mode = bpy.props.EnumProperty(name="Render mode", description="How this material should be rendered", default="BUILTIN",
                items=(("BUILTIN", "Built-in", "Use built-in shaders"),
-                       ("CUSTOM", "Custom shader", "Use a custom shader"),
+                       ("CUSTOM", "Custom shaders", "Use custom shaders"),
                        ("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 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.render_methods = bpy.props.CollectionProperty(type=MspGLRenderMethod, name="Render methods", description="Custom render methods to use for rendering")
+       bpy.types.Material.active_render_method_index = bpy.props.IntProperty("Active render method index")
        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")
        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")
-       bpy.types.Material.uniforms = bpy.props.CollectionProperty(type=MspGLUniform, name="Uniform", description="Uniform variables to add to the technique")
+       bpy.types.Material.uniforms = bpy.props.CollectionProperty(type=MspGLUniform, name="Uniforms", description="Uniform variables to add to the technique")
        bpy.types.Material.active_uniform_index = bpy.props.IntProperty("Active uniform index")
 
-       bpy.types.ShaderNodeTexImage.default_filter = bpy.props.BoolProperty(name="Default filter", description="Let the loading program determine filtering options")
        bpy.types.ShaderNodeTexImage.use_mipmap = bpy.props.BoolProperty(name="Use mipmaps", description="Use mipmaps (automatically generated) for the texture", default=True)
        bpy.types.ShaderNodeTexImage.max_anisotropy = bpy.props.FloatProperty(name="Maximum anisotropy", description="Maximum anisotropy to use in texture filtering", min=1, max=16, default=1)