Skip to content
Snippets Groups Projects
__init__.py 182 KiB
Newer Older
  • Learn to ignore specific revisions
  •                 name="Coordinates",
                    description="Texture coordinates used to map the texture onto the background",
                    items=(("VIEW", "View", "Use view vector for the texture coordinates"),
                           ("GLOBAL", "Global", "Use global coordinates for the texture coordinates (interior mist)"),
                           ("ANGMAP", "AngMap", "Use 360 degree angular coordinates, e.g. for spherical light probes"),
                           ("SPHERE", "Sphere", "For 360 degree panorama sky, spherical mapped, only top half"),
                           ("EQUIRECT", "Equirectangular", "For 360 degree panorama sky, equirectangular mapping"),
                           ("TUBE", "Tube", "For 360 degree panorama sky, cylindrical mapped, only top half"),
                           ("OBJECT", "Object", "Use linked object’s coordinates for texture coordinates")),
                    default="VIEW")
    
        use_map_blend: BoolProperty(
                    name="Blend Map", description="Affect the color progression of the background",
                    default=True)
    
        use_map_horizon: BoolProperty(
                    name="Horizon Map", description="Affect the color of the horizon",
                    default=False)
    
        use_map_zenith_down: BoolProperty(
                    name="", description="Affect the color of the zenith below",
                    default=False)
    
        use_map_zenith_up: BoolProperty(
                    name="Zenith Up Map", description="Affect the color of the zenith above",
                    default=False)
    
        zenith_down_factor: FloatProperty(
                    name="Zenith Down",
                    description="Amount texture affects color of the zenith below",
                    soft_min=0.0, soft_max=1.0, default=1.0)
    
        zenith_up_factor: FloatProperty(
                    name="Zenith Up",
                    description="Amount texture affects color of the zenith above",
                    soft_min=0.0, soft_max=1.0, default=1.0)
    
    
                    
    # former Space properties from  removed Blender Internal added below at superclass level 
    # so as to be available in World, Material, Light for texture slots use  
    
    bpy.types.ID.use_limited_texture_context = BoolProperty(
            name="",
            description="Use the limited version of texture user (for ‘old shading’ mode)",
            default=True)
    bpy.types.ID.texture_context = EnumProperty(
            name="Texture context",
            description="Type of texture data to display and edit",
            items=(('MATERIAL', "", "Show material textures", "MATERIAL",0), #"Show material textures"
                   ('WORLD', "", "Show world textures", "WORLD",1), #"Show world textures"
    
                   ('LIGHT', "", "Show lamp textures", "LIGHT",2), #"Show lamp textures"
    
                   ('PARTICLES', "", "Show particles textures", "PARTICLES",3), #"Show particles textures"
                   ('LINESTYLE', "", "Show linestyle textures", "LINE_DATA",4), #"Show linestyle textures"
                   ('OTHER', "", "Show other data textures", "TEXTURE_DATA",5)), #"Show other data textures"
            default = 'MATERIAL')
    
    bpy.types.ID.active_texture_index = IntProperty(
            name = "Index for texture_slots",
            default = 0)
                    
    
    class RenderPovSettingsMaterial(PropertyGroup):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Declare material level properties controllable in UI and translated to POV."""
        ######################Begin Old Blender Internal Props#########################
    
        #former Space properties from  removed Blender Internal
        use_limited_texture_context: BoolProperty(
                name="",
                description="Use the limited version of texture user (for ‘old shading’ mode)",
                default=True)
        texture_context: EnumProperty(
                name="Texture context",
                description="Type of texture data to display and edit",
                items=(('MATERIAL', "", "Show material textures", "MATERIAL",0), #"Show material textures"
                       ('WORLD', "", "Show world textures", "WORLD",1), #"Show world textures"
                       ('LAMP', "", "Show lamp textures", "LIGHT",2), #"Show lamp textures"
                       ('PARTICLES', "", "Show particles textures", "PARTICLES",3), #"Show particles textures"
                       ('LINESTYLE', "", "Show linestyle textures", "LINE_DATA",4), #"Show linestyle textures"
                       ('OTHER', "", "Show other data textures", "TEXTURE_DATA",5)), #"Show other data textures"
                default = 'MATERIAL')
     
        active_texture_index: IntProperty(
                name = "Index for texture_slots",
                default = 0)
                
    
        transparency_method: EnumProperty(
                name="Specular Shader Model",
                description="Method to use for rendering transparency",   
                items=(("MASK", "Mask", "Mask the background"),
    
                       ("Z_TRANSPARENCY", "Z Transparency", "Use alpha buffer for transparent faces"),
    
                       ("RAYTRACE", "Raytrace", "Use raytracing for transparent refraction rendering")),
                default="MASK")
                
    
        use_transparency: BoolProperty(
                name="Transparency", description="Render material as transparent",
                default=False)
    
        alpha: FloatProperty(
                name="Alpha",
                description="Alpha transparency of the material",
                min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=1.0, precision=3)
    
    
        specular_alpha: FloatProperty(
                name="Specular alpha",
                description="Alpha transparency for specular areas",
                min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=1.0, precision=3)
    
                
        ambient: FloatProperty(
                name="Ambient",
                description="Amount of global ambient color the material receives",
                min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=1.0, precision=3)
    
        diffuse_color: FloatVectorProperty(
                name="Diffuse color",
                description=("Diffuse color of the material"),
                precision=4, step=0.01, min=0, #max=inf, soft_max=1,
                default=(0.6,0.6,0.6), options={'ANIMATABLE'}, subtype='COLOR')
    
        darkness: FloatProperty(
                name="Darkness",
                description="Minnaert darkness",
                min=0.0, max=2.0, soft_min=0.0, soft_max=2.0, default=1.0, precision=3)
                
        diffuse_fresnel: FloatProperty(
                name="Diffuse fresnel",
                description="Power of Fresnel",
                min=0.0, max=5.0, soft_min=0.0, soft_max=5.0, default=1.0, precision=3)
                
        diffuse_fresnel_factor: FloatProperty(
                name="Diffuse fresnel factor",
                description="Blending factor of Fresnel",
                min=0.0, max=5.0, soft_min=0.0, soft_max=5.0, default=0.5, precision=3)
    
        diffuse_intensity: FloatProperty(
                name="Diffuse intensity",
                description="Amount of diffuse reflection multiplying color",
                min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=0.8, precision=3)
                
        diffuse_ramp_blend: EnumProperty(
                name="Diffuse ramp blend",
                description="Blending method of the ramp and the diffuse color",   
                items=(("MIX", "Mix", ""),
                       ("ADD", "Add", ""),
                       ("MULTIPLY", "Multiply", ""),
                       ("SUBTRACT", "Subtract", ""),
                       ("SCREEN", "Screen", ""),
                       ("DIVIDE", "Divide", ""),
                       ("DIFFERENCE", "Difference", ""),
                       ("DARKEN", "Darken", ""),
                       ("LIGHTEN", "Lighten", ""),
                       ("OVERLAY", "Overlay", ""),
                       ("DODGE", "Dodge", ""),
                       ("BURN", "Burn", ""),
                       ("HUE", "Hue", ""),
                       ("SATURATION", "Saturation", ""),
                       ("VALUE", "Value", ""),
                       ("COLOR", "Color", ""),
                       ("SOFT_LIGHT", "Soft light", ""),
                       ("LINEAR_LIGHT", "Linear light", "")),
                default="MIX")
    
        diffuse_ramp_factor: FloatProperty(
                name="Factor",
                description="Blending factor (also uses alpha in Colorband)",
                min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=1.0, precision=3)
                
        diffuse_ramp_input: EnumProperty(
                name="Input",
                description="How the ramp maps on the surface",   
                items=(("SHADER", "Shader", ""),
                       ("ENERGY", "Energy", ""),
                       ("NORMAL", "Normal", ""),
                       ("RESULT", "Result", "")),
                default="SHADER")
                
        diffuse_shader: EnumProperty(
                name="Diffuse Shader Model",
                description="How the ramp maps on the surface",   
                items=(("LAMBERT", "Lambert", "Use a Lambertian shader"),
                       ("OREN_NAYAR", "Oren-Nayar", "Use an Oren-Nayar shader"),
                       ("MINNAERT", "Minnaert", "Use a Minnaert shader"),
                       ("FRESNEL", "Fresnel", "Use a Fresnel shader")),
                default="LAMBERT")
    
        diffuse_toon_size: FloatProperty(
                name="Size",
                description="Size of diffuse toon area",
                min=0.0, max=3.14, soft_min=0.0, soft_max=3.14, default=0.5, precision=3)
                
        diffuse_toon_smooth: FloatProperty(
                name="Smooth",
                description="Smoothness of diffuse toon area",
                min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=0.1, precision=3)
    
        emit: FloatProperty(
                name="Emit",
                description="Amount of light to emit",
                min=0.0, soft_min=0.0, #max=inf, soft_max=inf,
                default=0.0, precision=3)
    
        mirror_color: FloatVectorProperty(
                name="Mirror color",
                description=("Mirror color of the material"),
                precision=4, step=0.01, min=0, #max=inf, soft_max=1,
                default=(0.6,0.6,0.6), options={'ANIMATABLE'}, subtype='COLOR')
                
        roughness: FloatProperty(
                name="Roughness",
                description="Oren-Nayar Roughness",
                min=0.0, max=3.14, soft_min=0.0, soft_max=3.14, default=0.5, precision=3)
    
        halo: BoolProperty(
                name="Halo", description=" Halo settings for the material",
                default=False)
                #(was readonly in Blender2.79, never None)
                
        line_color: FloatVectorProperty(
                name="Line color",
                description=("Line color used for Freestyle line rendering"),
                precision=4, step=0.01, min=0, #max=inf, soft_max=1,
                default=(0.0,0.0,0.0), options={'ANIMATABLE'}, subtype='COLOR')
    
        #diffuse_ramp:
        ##Color ramp used to affect diffuse shading
                ##Type:	ColorRamp, (readonly)    
        
                #cr_node = bpy.data.materials['Material'].node_tree.nodes['ColorRamp']
                #layout.template_color_ramp(cr_node, "color_ramp", expand=True)
                
                #ou
                
                #class bpy.types.ColorRamp(bpy_struct)            
    
        line_priority: IntProperty(
                name="Recursion Limit",
                description="The line color of a higher priority is used at material boundaries",
                min=0, max=32767, default=0)
                
        specular_color: FloatVectorProperty(
                name="Specular color",
                description=("Specular color of the material "),
                precision=4, step=0.01, min=0, #max=inf, soft_max=1,
                default=(1.0,1.0,1.0), options={'ANIMATABLE'}, subtype='COLOR')
    
        specular_hardness: IntProperty(
                name="Hardness",
                description="How hard (sharp) the specular reflection is",
                min=1, max=511, default=50)
                
        specular_intensity: FloatProperty(
                name="Intensity",
                description="How intense (bright) the specular reflection is",
                min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=0.5, precision=3)
    
    
        specular_ior: FloatProperty(
                name="IOR",
                description="Specular index of refraction",
                min=-10.0, max=10.0, soft_min=0.0, soft_max=10.0, default=1.0, precision=3)
    
        ior: FloatProperty(
                name="IOR",
                description="Index of refraction",
                min=-10.0, max=10.0, soft_min=0.0, soft_max=10.0, default=1.0, precision=3)   
    
    
        specular_shader: EnumProperty(
                name="Specular Shader Model",
                description="How the ramp maps on the surface",   
                items=(("COOKTORR", "CookTorr", "Use a Cook-Torrance shader"),
                       ("PHONG", "Phong", "Use a Phong shader"),
                       ("BLINN", "Blinn", "Use a Blinn shader"),
                       ("TOON", "Toon", "Use a Toon shader"),
                       ("WARDISO", "WardIso", "Use a Ward anisotropic shader")),
                default="COOKTORR")           
    
        specular_slope: FloatProperty(
                name="Slope",
                description="The standard deviation of surface slope",
                min=0.0, max=0.4, soft_min=0.0, soft_max=0.4, default=0.1, precision=3)
    
        specular_toon_size: FloatProperty(
                name="Size",
                description="Size of specular toon area",
                min=0.0, max=0.53, soft_min=0.0, soft_max=0.53, default=0.5, precision=3)
    
        specular_toon_smooth: FloatProperty(
                name="Smooth",
                description="Smoothness of specular toon area",
                min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=0.1, precision=3)
                
                
        translucency: FloatProperty(
                name="Translucency",
                description="Amount of diffuse shading on the back side",
                min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=0.0, precision=3)
                
        transparency_method: EnumProperty(
                name="Specular Shader Model",
                description="Method to use for rendering transparency",   
                items=(("MASK", "Mask", "Mask the background"),
    
                       ("Z_TRANSPARENCY", "Z Transparency", "Use an ior of 1 for transparent faces"),
    
                       ("RAYTRACE", "Raytrace", "Use raytracing for transparent refraction rendering")),
                default="MASK")
                
        type: EnumProperty(
                name="Type",
                description="Material type defining how the object is rendered",   
                items=(("SURFACE", "Surface", "Render object as a surface"),
    
                       ("WIRE", "Wire", "Render the edges of faces as wires (not supported in raytracing)"),#TO UPDATE > USE MACRO AND CHANGE DESCRIPTION
    
                       ("VOLUME", "Volume", "Render object as a volume"),
    
                       ("‘HALO’", "Halo", "Render object as halo particles")), #TO UPDATE > USE MACRO AND CHANGE DESCRIPTION
    
                default="SURFACE")
                
        use_cast_shadows: BoolProperty(
                name="Cast", description="Allow this material to cast shadows",
                default=True)
                
        use_cast_shadows_only: BoolProperty(
                name="Cast Only", description="Make objects with this material "
                                              "appear invisible (not rendered), only "
                                              "casting shadows",
                default=False)
                
        use_cubic: BoolProperty(
                name="Cubic Interpolation", description="Use cubic interpolation for diffuse "
                                                        "values, for smoother transitions",
                default=False)
    
        use_diffuse_ramp: BoolProperty(
                name="Ramp", description="Toggle diffuse ramp operations",
                default=False)
                
        use_light_group_exclusive: BoolProperty(
                name="Exclusive", description="Material uses the light group exclusively"
                                              "- these lamps are excluded from other "
                                              "scene lighting",
                default=False)
                
        use_light_group_local: BoolProperty(
                name="Local", description="When linked in, material uses local light"
                                          " group with the same name",
                default=False)
                
        use_mist: BoolProperty(
                name="Use Mist", description="Use mist with this material "
                                          "(in world settings)",
                default=True)
                
        use_nodes: BoolProperty(
                name="Nodes", description="Use shader nodes to render the material",#Add Icon in UI or here? icon='NODES'
                default=False)
                
        use_object_color: BoolProperty(
                name="Object Color", description="Modulate the result with a per-object color",
                default=False)
                
        use_only_shadow: BoolProperty(
                name="Shadows Only", description="Render shadows as the material’s alpha "
                                                 "value, making the material transparent "
                                                 "except for shadowed areas",
                default=False)
                
        use_shadeless: BoolProperty(
                name="Shadeless", description="Make this material insensitive to "
                                              "light or shadow",
                default=False)
                
        use_shadows: BoolProperty(
                name="Receive", description="Allow this material to receive shadows",
                default=True)
    
        use_sky: BoolProperty(
                name="Sky", description="Render this material with zero alpha, "
                                            "with sky background in place (scanline only)",
                default=False)
                
        use_specular_ramp: BoolProperty(
                name="Ramp", description="Toggle specular ramp operations",
                default=False)
                
        use_tangent_shading: BoolProperty(
                name="Tangent Shading", description="Use the material’s tangent vector instead"
                                         "of the normal for shading - for "
                                         "anisotropic shading effects",
                default=False)
                
        use_transparent_shadows: BoolProperty(
                name="Receive Transparent", description="Allow this object to receive transparent "
                                                        "shadows cast through other object",
                default=False) #linked to fake caustics
                
        use_vertex_color_light: BoolProperty(
                name="Vertex Color Light", description="Add vertex colors as additional lighting",
                default=False)
                
        use_vertex_color_paint: BoolProperty(
                name="Vertex Color Paint", description="Replace object base color with vertex "
                                                       "colors (multiply with ‘texture face’ "
                                                       "face assigned textures)",
                default=False)
    
        
        specular_ramp_blend: EnumProperty(
                name="Specular ramp blend",
                description="Blending method of the ramp and the specular color",   
                items=(("MIX", "Mix", ""),
                       ("ADD", "Add", ""),
                       ("MULTIPLY", "Multiply", ""),
                       ("SUBTRACT", "Subtract", ""),
                       ("SCREEN", "Screen", ""),
                       ("DIVIDE", "Divide", ""),
                       ("DIFFERENCE", "Difference", ""),
                       ("DARKEN", "Darken", ""),
                       ("LIGHTEN", "Lighten", ""),
                       ("OVERLAY", "Overlay", ""),
                       ("DODGE", "Dodge", ""),
                       ("BURN", "Burn", ""),
                       ("HUE", "Hue", ""),
                       ("SATURATION", "Saturation", ""),
                       ("VALUE", "Value", ""),
                       ("COLOR", "Color", ""),
                       ("SOFT_LIGHT", "Soft light", ""),
                       ("LINEAR_LIGHT", "Linear light", "")),
                default="MIX")
    
        specular_ramp_factor: FloatProperty(
                name="Factor",
                description="Blending factor (also uses alpha in Colorband)",
                min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=1.0, precision=3)
                
        specular_ramp_input: EnumProperty(
                name="Input",
                description="How the ramp maps on the surface",   
                items=(("SHADER", "Shader", ""),
                       ("ENERGY", "Energy", ""),
                       ("NORMAL", "Normal", ""),
                       ("RESULT", "Result", "")),
                default="SHADER")            
    
    
    
        irid_enable: BoolProperty(
    
                description="Newton's thin film interference (like an oil slick on a puddle of "
    
                            "water or the rainbow hues of a soap bubble.)",
    
        mirror_use_IOR: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                name="Correct Reflection",
    
                description="Use same IOR as raytrace transparency to calculate mirror reflections. "
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                default=False)
    
    
        mirror_metallic: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                name="Metallic Reflection",
                description="mirror reflections get colored as diffuse (for metallic materials)",
                default=False)
    
    
        conserve_energy: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                name="Conserve Energy",
    
                description="Light transmitted is more correctly reduced by mirror reflections, "
    
                            "also the sum of diffuse and translucency gets reduced below one ",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                default=True)
    
    
        irid_amount: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                name="amount",
    
                description="Contribution of the iridescence effect to the overall surface color. "
                            "As a rule of thumb keep to around 0.25 (25% contribution) or less, "
                            "but experiment. If the surface is coming out too white, try lowering "
    
                            "the diffuse and possibly the ambient values of the surface",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                min=0.0, max=1.0, soft_min=0.01, soft_max=1.0, default=0.25)
    
    
        irid_thickness: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                name="thickness",
    
                description="A very thin film will have a high frequency of color changes while a "
    
                            "thick film will have large areas of color",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                min=0.0, max=1000.0, soft_min=0.1, soft_max=10.0, default=1)
    
    
        irid_turbulence: FloatProperty(
    
                name="turbulence", description="This parameter varies the thickness",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                min=0.0, max=10.0, soft_min=0.000, soft_max=1.0, default=0)
    
    
        interior_fade_color: FloatVectorProperty(
    
                name="Interior Fade Color", description="Color of filtered attenuation for transparent "
    
                precision=4, step=0.01, min=0.0, soft_max=1.0,
                default=(0, 0, 0), options={'ANIMATABLE'}, subtype='COLOR')
    
    
        caustics_enable: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                name="Caustics",
    
                description="use only fake refractive caustics (default) or photon based "
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                default=True)
    
    
        fake_caustics: BoolProperty(
    
                name="Fake Caustics", description="use only (Fast) fake refractive caustics",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                default=True)
    
    
        fake_caustics_power: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                name="Fake caustics power",
    
                description="Values typically range from 0.0 to 1.0 or higher. Zero is no caustics. "
                            "Low, non-zero values give broad hot-spots while higher values give "
    
                min=0.00, max=10.0, soft_min=0.00, soft_max=5.0, default=0.15)
    
        refraction_caustics: BoolProperty(
    
                name="Refractive Caustics", description="hotspots of light focused when going through the material",
                default=True)
    
        photons_dispersion: FloatProperty(
    
                description="Light passing through will be separated according to wavelength. "
                            "This ratio of refractive indices for violet to red controls how much "
    
                            "the colors are spread out 1 = no dispersion, good values are 1.01 to 1.1",
    
                min=1.0000, max=10.000, soft_min=1.0000, soft_max=1.1000, precision=4, default=1.0000)
    
        photons_dispersion_samples: IntProperty(
    
                name="Dispersion Samples", description="Number of color-steps for dispersion",
                min=2, max=128, default=7)
    
    
        photons_reflection: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                name="Reflective Photon Caustics",
                description="Use this to make your Sauron's ring ;-P",
                default=False)
    
    
        refraction_type: EnumProperty(
    
                       ("1", "Z Transparency Fake Caustics", "use fake caustics"),
                       ("2", "Raytrace Photons Caustics", "use photons for refractive caustics")],
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                description="use fake caustics (fast) or true photons for refractive Caustics",
    
        ##################################CustomPOV Code############################
    
        replacement_text: StringProperty(
    
                description="Type the declared name in custom POV code or an external "
    
        def use_material_nodes_callback(self, context):
            if hasattr(context.space_data, "tree_type"):
                context.space_data.tree_type = 'ObjectNodeTree'
            mat=context.object.active_material
            if mat.pov.material_use_nodes:
                mat.use_nodes=True
                tree = mat.node_tree
                tree.name=mat.name
                links = tree.links
                default = True
                if len(tree.nodes) == 2:
                    o = 0
                    m = 0
                    for node in tree.nodes:
                        if node.type in {"OUTPUT","MATERIAL"}:
                            tree.nodes.remove(node)
                            default = True
                    for node in tree.nodes:
                        if node.bl_idname == 'PovrayOutputNode':
                            o+=1
                        if node.bl_idname == 'PovrayTextureNode':
                            m+=1
                    if o == 1 and m == 1:
                        default = False
                elif len(tree.nodes) == 0:
                    default = True
                else:
                    default = False
                if default:
                    output = tree.nodes.new('PovrayOutputNode')
                    output.location = 200,200
                    tmap = tree.nodes.new('PovrayTextureNode')
                    tmap.location = 0,200
                    links.new(tmap.outputs[0],output.inputs[0])
                    tmap.select = True
    
                    tree.nodes.active = tmap
    
            else:
                mat.use_nodes=False
    
    
        def use_texture_nodes_callback(self, context):
            tex=context.object.active_material.active_texture
            if tex.pov.texture_use_nodes:
                tex.use_nodes=True
                if len(tex.node_tree.nodes)==2:
                    for node in tex.node_tree.nodes:
                        if node.type in {"OUTPUT","CHECKER"}:
                            tex.node_tree.nodes.remove(node)
            else:
                tex.use_nodes=False
    
        def node_active_callback(self, context):
            items = []
            mat=context.material
            mat.node_tree.nodes
            for node in mat.node_tree.nodes:
                node.select=False
            for node in mat.node_tree.nodes:
                if node.name==mat.pov.material_active_node:
                    node.select=True
                    mat.node_tree.nodes.active=node
    
                    return node
    
        def node_enum_callback(self, context):
            items = []
            mat=context.material
            nodes=mat.node_tree.nodes
            for node in nodes:
                items.append(("%s"%node.name,"%s"%node.name,""))
            return items
    
        def pigment_normal_callback(self, context):
            render = context.scene.pov.render
            items = [("pigment", "Pigment", ""),("normal", "Normal", "")]
            if render == 'hgpovray':
                items = [("pigment", "Pigment", ""),("normal", "Normal", ""),("modulation", "Modulation", "")]
            return items
    
        def glow_callback(self, context):
            scene = context.scene
            ob = context.object
            ob.pov.mesh_write_as_old = ob.pov.mesh_write_as
            if scene.pov.render == 'uberpov' and ob.pov.glow:
                ob.pov.mesh_write_as = 'NONE'
            else:
                ob.pov.mesh_write_as = ob.pov.mesh_write_as_old
    
    
        material_use_nodes: BoolProperty(name="Use nodes", description="", update=use_material_nodes_callback, default=False)
        material_active_node: EnumProperty(name="Active node", description="", items=node_enum_callback, update=node_active_callback)
        preview_settings: BoolProperty(name="Preview Settings", description="",default=False)
        object_preview_transform: BoolProperty(name="Transform object", description="",default=False)
        object_preview_scale: FloatProperty(name="XYZ", min=0.5, max=2.0, default=1.0)
        object_preview_rotate: FloatVectorProperty(name="Rotate", description="", min=-180.0, max=180.0,default=(0.0,0.0,0.0), subtype='XYZ')
        object_preview_bgcontrast: FloatProperty(name="Contrast", min=0.0, max=1.0, default=0.5)
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    class MaterialRaytraceTransparency(PropertyGroup):
        """Declare transparency panel properties controllable in UI and translated to POV."""
    
               
        depth: IntProperty(
                name="Depth",
                description="Maximum allowed number of light inter-refractions",
                min=0, max=32767, default=2)
                
        depth_max: FloatProperty(
                name="Depth",
                description="Maximum depth for light to travel through the "
                            "transparent material before becoming fully filtered (0.0 is disabled)",
                min=0, max=100, default=0.0)
                
        falloff: FloatProperty(
                name="Falloff",
                description="Falloff power for transmissivity filter effect (1.0 is linear)",
                min=0.1, max=10.0, default=1.0, precision=3)
        filter: FloatProperty(
                name="Filter",
                description="Amount to blend in the material’s diffuse color in raytraced "
                            "transparency (simulating absorption)",
                min=0.0, max=1.0, default=0.0, precision=3)
    
        fresnel: FloatProperty(
                name="Fresnel",
                description="Power of Fresnel for transparency (Ray or ZTransp)",
                min=0.0, max=5.0, soft_min=0.0, soft_max=5.0, default=0.0, precision=3)
    
        fresnel_factor: FloatProperty(
                name="Blend",
                description="Blending factor for Fresnel",
                min=0.0, max=5.0, soft_min=0.0, soft_max=5.0, default=1.250, precision=3)
                
        gloss_factor: FloatProperty(
                name="Amount",
                description="The clarity of the refraction. "
                            "(values < 1.0 give diffuse, blurry refractions)",
                min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=1.0, precision=3)
    
        gloss_samples: IntProperty(
                name="Samples",
                description="Number of cone samples averaged for blurry refractions",
                min=0, max=1024, default=18)
    
        gloss_threshold: FloatProperty(
                name="Threshold",
                description="Threshold for adaptive sampling (if a sample "
                            "contributes less than this amount [as a percentage], "
                            "sampling is stopped)",
                min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=0.005, precision=3)
    
        ior: FloatProperty(
                name="IOR", description="Sets angular index of refraction for raytraced refraction",
                min=-0.0, max=10.0, soft_min=0.25, soft_max=4.0, default=1.3)
                
    
    class MaterialRaytraceMirror(PropertyGroup):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Declare reflection panel properties controllable in UI and translated to POV."""
    
    
        bl_description = "Raytraced reflection settings for the Material",  
        use: BoolProperty(
                name="Mirror", 
                description="Enable raytraced reflections",
                default=False)
                
    
        depth: IntProperty(
                name="Depth",
                description="Maximum allowed number of light inter-reflections",
                min=0, max=32767, default=2)
    
        distance: FloatProperty(
                name="Max Dist",
                description="Maximum distance of reflected rays "
                            "(reflections further than this range "
                            "fade to sky color or material color)",
                min=0.0, max=100000.0, soft_min=0.0, soft_max=10000.0, default=0.0, precision=3)
    
        fade_to: EnumProperty(
                items=[
                       ("FADE_TO_SKY", "Fade to sky", ""),
                       ("FADE_TO_MATERIAL", "Fade to material color", "")],
                name="Fade-out Color",
                description="The color that rays with no intersection within the "
                            "Max Distance take (material color can be best for "
                            "indoor scenes, sky color for outdoor)",
                default="FADE_TO_SKY")
    
        fresnel: FloatProperty(
                name="Fresnel",
                description="Power of Fresnel for mirror reflection",
                min=0.0, max=5.0, soft_min=0.0, soft_max=5.0, default=0.0, precision=3)
    
        fresnel_factor: FloatProperty(
                name="Blend",
                description="Blending factor for Fresnel",
                min=0.0, max=5.0, soft_min=0.0, soft_max=5.0, default=1.250, precision=3)
    
        gloss_anisotropic: FloatProperty(
                name="Anisotropic",
                description="The shape of the reflection, from 0.0 (circular) "
                            "to 1.0 (fully stretched along the tangent",
                min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=1.0, precision=3)
    
        gloss_factor: FloatProperty(
                name="Amount",
                description="The shininess of the reflection  "
                            "(values < 1.0 give diffuse, blurry reflections)",
                min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=1.0, precision=3)
    
        gloss_samples: IntProperty(
                name="Samples",
                description="Number of cone samples averaged for blurry reflections",
                min=0, max=1024, default=18)
    
        gloss_threshold: FloatProperty(
                name="Threshold",
                description="Threshold for adaptive sampling (if a sample "
                            "contributes less than this amount [as a percentage], "
                            "sampling is stopped)",
                min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=0.005, precision=3)
    
    
        mirror_color: FloatVectorProperty(
                name="Mirror color",
                description=("Mirror color of the material"),
                precision=4, step=0.01,
                default=(1.0,1.0,1.0), options={'ANIMATABLE'}, subtype='COLOR')
                
    
        reflect_factor: FloatProperty(
                name="Reflectivity",
                description="Amount of mirror reflection for raytrace",
                min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=1.0, precision=3)
                
    class MaterialSubsurfaceScattering(PropertyGroup):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        r"""Declare SSS/SSTL properties controllable in UI and translated to POV."""
    
    
        bl_description = "Subsurface scattering settings for the material",          
    
        use: BoolProperty(
                name="Subsurface Scattering", 
                description="Enable diffuse subsurface scatting "
                            "effects in a material",
                default=False)
    
                
                
        back: FloatProperty(
                name="Back",
                description="Back scattering weight",
                min=0.0, max=10.0, soft_min=0.0, soft_max=10.0, default=1.0, precision=3)
    
    
        color: FloatVectorProperty(
                name="Scattering color",
                description=("Scattering color"),
                precision=4, step=0.01,
                default=(0.604,0.604,0.604), options={'ANIMATABLE'}, subtype='COLOR')
    
        color_factor: FloatProperty(
                name="Color",
                description="Blend factor for SSS colors",
                min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=1.0, precision=3)
    
        error_threshold: FloatProperty(
                name="Error",
                description="Error tolerance (low values are slower and higher quality)",
                default=0.050, precision=3)
    
        front: FloatProperty(
                name="Front",
                description="Front scattering weight",
                min=0.0, max=2.0, soft_min=0.0, soft_max=2.0, default=1.0, precision=3)
    
        ior: FloatProperty(
                name="IOR", description="Index of refraction (higher values are denser)",
    
                min=-0.0, max=10.0, soft_min=0.1, soft_max=2.0, default=1.3)
    
    
        radius: FloatVectorProperty(
                name="RGB Radius",
                description=("Mean red/green/blue scattering path length"),
                precision=4, step=0.01, min=0.001,
                default=(1.0,1.0,1.0), options={'ANIMATABLE'})
    
        scale: FloatProperty(
                name="Scale",
                description="Object scale factor",
                default=0.100, precision=3)
    
        texture_factor: FloatProperty(
                name="Texture",
                description="Texture scattering blend factor",
                min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=0.0, precision=3)
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    
    class MaterialStrandSettings(PropertyGroup):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Declare strand properties controllable in UI and translated to POV."""
    
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        bl_description = "Strand settings for the material",          
    
        blend_distance: FloatProperty(
                name="Distance",
                description="Worldspace distance over which to blend in the surface normal",
                min=0.0, max=10.0, soft_min=0.0, soft_max=10.0, default=0.0, precision=3)
    
        root_size: FloatProperty(
                name="Root",
                description="Start size of strands in pixels or Blender units",
                min=0.25, default=1.0, precision=5)
    
        shape: FloatProperty(
                name="Shape",
                description="Positive values make strands rounder, negative ones make strands spiky",
                min=-0.9, max=0.9, default=0.0, precision=3)
    
        size_min: FloatProperty(
                name="Minimum",
                description="Minimum size of strands in pixels",
                min=0.001, max=10.0, default=1.0, precision=3)
    
        tip_size: FloatProperty(
                name="Tip",
                description="End size of strands in pixels or Blender units",
                min=0.0, default=1.0, precision=5)
    
        use_blender_units: BoolProperty(
                name="Blender Units", 
                description="Use Blender units for widths instead of pixels",
                default=False)
    
        use_surface_diffuse: BoolProperty(
                name="Surface diffuse", 
                description="Make diffuse shading more similar to shading the surface",
                default=False)
    
        use_tangent_shading: BoolProperty(
                name="Tangent Shading", 
                description="Use direction of strands as normal for tangent-shading",
                default=True)
    
        uv_layer: StringProperty(
                name="UV Layer",
                #icon="GROUP_UVS",
                description="Name of UV map to override",
                default="")
    
        width_fade: FloatProperty(
                name="Width Fade",
                description="Transparency along the width of the strand",
                min=0.0, max=2.0, default=0.0, precision=3)
    
                
    
                # halo
    
                    # Halo settings for the material
                    # Type:	MaterialHalo, (readonly, never None)            
    
                # ambient
    
                    # Amount of global ambient color the material receives
                    # Type:	float in [0, 1], default 0.0
    
                # darkness
    
                    # Minnaert darkness
                    # Type:	float in [0, 2], default 0.0
    
                # diffuse_color
    
                    # Diffuse color of the material
                    # Type:	float array of 3 items in [0, inf], default (0.0, 0.0, 0.0)
    
                # diffuse_fresnel
    
                    # Power of Fresnel
                    # Type:	float in [0, 5], default 0.0
    
                # diffuse_fresnel_factor
    
                    # Blending factor of Fresnel
                    # Type:	float in [0, 5], default 0.0
    
                # diffuse_intensity
    
                    # Amount of diffuse reflection
                    # Type:	float in [0, 1], default 0.0
    
                # diffuse_ramp
    
                    # Color ramp used to affect diffuse shading
                    # Type:	ColorRamp, (readonly)
    
                # diffuse_ramp_blend
    
                    # Blending method of the ramp and the diffuse color
                    # Type:	enum in [‘MIX’, ‘ADD’, ‘MULTIPLY’, ‘SUBTRACT’, ‘SCREEN’, ‘DIVIDE’, ‘DIFFERENCE’, ‘DARKEN’, ‘LIGHTEN’, ‘OVERLAY’, ‘DODGE’, ‘BURN’, ‘HUE’, ‘SATURATION’, ‘VALUE’, ‘COLOR’, ‘SOFT_LIGHT’, ‘LINEAR_LIGHT’], default ‘MIX’
    
                # diffuse_ramp_factor
    
                    # Blending factor (also uses alpha in Colorband)
                    # Type:	float in [0, 1], default 0.0
    
                # diffuse_ramp_input
    
                    # How the ramp maps on the surface
                    # Type:	enum in [‘SHADER’, ‘ENERGY’, ‘NORMAL’, ‘RESULT’], default ‘SHADER’
    
                # diffuse_shader
    
                        # LAMBERT Lambert, Use a Lambertian shader.
                        # OREN_NAYAR Oren-Nayar, Use an Oren-Nayar shader.
                        # TOON Toon, Use a toon shader.
                        # MINNAERT Minnaert, Use a Minnaert shader.
                        # FRESNEL Fresnel, Use a Fresnel shader.
    
                    # Type:	enum in [‘LAMBERT’, ‘OREN_NAYAR’, ‘TOON’, ‘MINNAERT’, ‘FRESNEL’], default ‘LAMBERT’
    
                # diffuse_toon_size
    
                    # Size of diffuse toon area
                    # Type:	float in [0, 3.14], default 0.0
    
                # diffuse_toon_smooth
    
                    # Smoothness of diffuse toon area
                    # Type:	float in [0, 1], default 0.0
    
                # emit
    
                    # Amount of light to emit
                    # Type:	float in [0, inf], default 0.0
    
                # game_settings
    
                    # Game material settings
                    # Type:	MaterialGameSettings, (readonly, never None)
    
                # halo
    
                    # Halo settings for the material
                    # Type:	MaterialHalo, (readonly, never None)
    
                # invert_z
    
                    # Render material’s faces with an inverted Z buffer (scanline only)
                    # Type:	boolean, default False
    
                # light_group
    
                    # Limit lighting to lamps in this Group
                    # Type:	Group
    
                # line_color
    
                    # Line color used for Freestyle line rendering
                    # Type:	float array of 4 items in [0, inf], default (0.0, 0.0, 0.0, 0.0)
    
                # line_priority
    
                    # The line color of a higher priority is used at material boundaries
                    # Type:	int in [0, 32767], default 0
    
                # mirror_color
    
                    # Mirror color of the material
                    # Type:	float array of 3 items in [0, inf], default (0.0, 0.0, 0.0)