Skip to content
Snippets Groups Projects
__init__.py 176 KiB
Newer Older
  • Learn to ignore specific revisions
  • Maurice Raybaud's avatar
    Maurice Raybaud committed
                   ("WORLD", "World", ""),
                   ("OBJECT", "Object", ""),
                   ("TANGENT", "Tangent", "")),
            default="CAMERA",
        )
    
    
        object: StringProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Object",
            description="Object to use for mapping with Object texture coordinates",
            default ="",
        )
    
    
        raymir_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Amount texture affects ray mirror",
            default = 0.0,
        )
    
    
        reflection_color_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Amount texture affects color of out-scattered light",
            default = 0.0,
        )
    
    
        reflection_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Amount texture affects brightness of out-scattered light",
            default = 0.0,
        )
    
    
        scattering_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Amount texture affects scattering",
            default = 0.0,
        )
    
    
        specular_color_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Amount texture affects specular color",
            default = 0.0,
        )
    
    
        specular_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Amount texture affects specular reflectivity",
            default = 0.0,
        )
    
    
        texture_coords: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            items=(
                ("GLOBAL", "Global", ""),
                ("OBJECT", "Object", ""),
                ("UV", "UV", ""),
                ("ORCO", "Original Coordinates", ""),
                ("STRAND", "Strand", ""),
                ("STICKY", "Sticky", ""),
                ("WINDOW", "Window", ""),
                ("NORMAL", "Normal", ""),
                ("REFLECTION", "Reflection", ""),
                ("STRESS", "Stress", ""),
                ("TANGENT", "Tangent", "")
            ),
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default="GLOBAL",
        )
    
    
        translucency_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Amount texture affects translucency",
            default = 0.0,
        )
    
    
        transmission_color_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Amount texture affects result color after light has been scattered/absorbed",
            default = 0.0,
        )
    
    
        use: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Enable this material texture slot",
            default = True,
        )
    
    
        use_from_dupli: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Dupli’s instanced from verts, faces or particles, inherit texture coordinate from their parent",
            default = False,
        )
    
    
        use_from_original: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Dupli’s derive their object coordinates from the original objects transformation",
            default = False,
        )
    
    
        use_map_alpha: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Causes the texture to affect the alpha value",
            default = False,
        )
    
    
        use_map_ambient: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Causes the texture to affect the value of ambient",
            default = False,
        )
    
    
        use_map_color_diffuse: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Causes the texture to affect basic color of the material",
            default = False,
        )
    
    
        use_map_color_emission: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Causes the texture to affect the color of emission",
            default = False,
        )
    
    
        use_map_color_reflection: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Causes the texture to affect the color of scattered light",
            default = False,
        )
    
    
        use_map_color_spec: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Causes the texture to affect the specularity color",
            default = False,
        )
    
    
        use_map_color_transmission: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Causes the texture to affect the result color after other light has been scattered/absorbed",
            default = False,
        )
    
    
        use_map_density: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Causes the texture to affect the volume’s density",
            default = False,
        )
    
    
        use_map_diffuse: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Causes the texture to affect the value of the materials diffuse reflectivity",
            default = False,
        )
    
    
        use_map_displacement: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Let the texture displace the surface",
            default = False,
        )
    
    
        use_map_emission: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Causes the texture to affect the volume’s emission",
            default = False,
        )
    
    
        use_map_emit: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Causes the texture to affect the emit value",
            default = False,
        )
    
    
        use_map_hardness: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Causes the texture to affect the hardness value",
            default = False,
        )
    
    
        use_map_mirror: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Causes the texture to affect the mirror color",
            default = False,
        )
    
    
        use_map_normal: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Causes the texture to affect the rendered normal",
            default = False,
        )
    
    
        use_map_raymir: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Causes the texture to affect the ray-mirror value",
            default = False,
        )
    
    
        use_map_reflect: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Causes the texture to affect the reflected light’s brightness",
            default = False,
        )
    
    
        use_map_scatter: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Causes the texture to affect the volume’s scattering",
            default = False,
        )
    
    
        use_map_specular: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Causes the texture to affect the value of specular reflectivity",
            default = False,
        )
    
    
        use_map_translucency: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Causes the texture to affect the translucency value",
            default = False,
        )
    
    
        use_map_warp: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Let the texture warp texture coordinates of next channels",
            default = False,
        )
    
    
        uv_layer: StringProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="UV layer to use for mapping with UV texture coordinates",
            default = "",
        )
    
    
        warp_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Amount texture affects texture coordinates of next channels",
            default = 0.0,
        )
    
    
    #######################################"
    
    
        blend_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Blend",
            description="Amount texture affects color progression of the "
            "background",
            soft_min=0.0, soft_max=1.0, default=1.0,
        )
    
    
        horizon_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Horizon",
            description="Amount texture affects color of the horizon"
                        "",
            soft_min=0.0, soft_max=1.0, default=1.0
        )
    
    
        object: StringProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Object",
            description="Object to use for mapping with Object texture coordinates",
            default="",
        )
    
    
        texture_coords: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Coordinates",
            description="Texture coordinates used to map the texture onto the background",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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")
            ),
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default="VIEW",
        )
    
    
        use_map_blend: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Blend Map",
            description="Affect the color progression of the background",
            default=True,
        )
    
    
        use_map_horizon: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Horizon Map",
            description="Affect the color of the horizon",
            default=False,
        )
    
    
        use_map_zenith_down: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="", description="Affect the color of the zenith below",
            default=False,
        )
    
    
        use_map_zenith_up: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Zenith Up Map", description="Affect the color of the zenith above",
            default=False,
        )
    
    
        zenith_down_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Zenith Up",
            description="Amount texture affects color of the zenith above",
            soft_min=0.0, soft_max=1.0, default=1.0
        )
    
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    # 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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        name="",
        description="Use the limited version of texture user (for ‘old shading’ mode)",
        default=True,
    )
    
    bpy.types.ID.texture_context = EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        name="Texture context",
        description="Type of texture data to display and edit",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        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"
        ),
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        default = 'MATERIAL',
    )
    
    
    bpy.types.ID.active_texture_index = IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        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."""
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        ######################Begin Old Blender Internal Props#########################
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        # former Space properties from  removed Blender Internal
    
        use_limited_texture_context: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Use the limited version of texture user (for ‘old shading’ mode)",
            default=True,
        )
    
        texture_context: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Texture context",
            description="Type of texture data to display and edit",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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"
            ),
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default = 'MATERIAL',
        )
    
    
        active_texture_index: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name = "Index for texture_slots",
            default = 0,
        )
    
    
        transparency_method: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Specular Shader Model",
            description="Method to use for rendering transparency",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            items=(
                ("MASK", "Mask", "Mask the background"),
                ("Z_TRANSPARENCY", "Z Transparency", "Use alpha buffer for transparent faces"),
                ("RAYTRACE", "Raytrace", "Use raytracing for transparent refraction rendering")
            ),
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default="MASK",
        )
    
    
        use_transparency: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Transparency",
            description="Render material as transparent",
            default=False,
        )
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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,
        )
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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,
        )
    
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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',
        )
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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,
        )
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Diffuse ramp blend",
            description="Blending method of the ramp and the diffuse color",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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", "")
            ),
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default="MIX",
        )
    
    
        diffuse_ramp_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Input",
            description="How the ramp maps on the surface",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            items=(
                ("SHADER", "Shader", ""),
                ("ENERGY", "Energy", ""),
                ("NORMAL", "Normal", ""),
                ("RESULT", "Result", "")
            ),
                default="SHADER",
    
        diffuse_shader: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Diffuse Shader Model",
            description="How the ramp maps on the surface",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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")
            ),
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default="LAMBERT",
        )
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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,
        )
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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'
        )
    
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Roughness",
            description="Oren-Nayar Roughness",
            min=0.0, max=3.14, soft_min=0.0, soft_max=3.14,
            precision=3,
            default=0.5,
        )
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Halo",
            description=" Halo settings for the material",
            default=False,
        )
                # (was readonly in Blender2.79, never None)
    
    
        line_color: FloatVectorProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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)
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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'
        )
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Hardness",
            description="How hard (sharp) the specular reflection is",
            min=1, max=511, default=50,
        )
    
    
        specular_intensity: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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
        )
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Specular Shader Model",
            description="How the ramp maps on the surface",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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")
            ),
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default="COOKTORR",
        )
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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
        )
    
    
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Specular Shader Model",
            description="Method to use for rendering transparency",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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")
            ),
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default="MASK",
        )
    
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Type",
            description="Material type defining how the object is rendered",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default="SURFACE",
        )
    
    
        use_cast_shadows: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Cast",
            description="Allow this material to cast shadows",
            default=True,
        )
    
    
        use_cast_shadows_only: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Cast Only",
            description="Make objects with this material "
            "appear invisible (not rendered), only "
            "casting shadows",
            default=False,
        )
    
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Cubic Interpolation",
            description="Use cubic interpolation for diffuse "
            "values, for smoother transitions",
            default=False,
        )
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Ramp",
            description="Toggle diffuse ramp operations",
            default=False,
        )
    
    
        use_light_group_exclusive: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Exclusive",
            description="Material uses the light group exclusively"
            "- these lamps are excluded from other "
            "scene lighting",
            default=False,
        )
    
    
        use_light_group_local: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Local",
            description="When linked in, material uses local light"
            " group with the same name",
            default=False,
        )
    
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Use Mist",
            description="Use mist with this material "
            "(in world settings)",
            default=True,
            )
    
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Nodes",
            description="Use shader nodes to render the material",# Add Icon in UI or here? icon='NODES'
            default=False,
        )
    
    
        use_object_color: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Object Color",
            description="Modulate the result with a per-object color",
            default=False,
        )
    
    
        use_only_shadow: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Shadows Only",
            description="Render shadows as the material’s alpha "
            "value, making the material transparent "
            "except for shadowed areas",
            default=False,
        )
    
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Shadeless",
            description="Make this material insensitive to "
            "light or shadow",
            default=False,
        )
    
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Receive",
            description="Allow this material to receive shadows",
            default=True,
        )
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Sky",
            description="Render this material with zero alpha, "
            "with sky background in place (scanline only)",
            default=False,
        )
    
    
        use_specular_ramp: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Ramp",
            description="Toggle specular ramp operations",
            default=False,
        )
    
    
        use_tangent_shading: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Vertex Color Light",
            description="Add vertex colors as additional lighting",
            default=False,
        )
    
    
        use_vertex_color_paint: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Specular ramp blend",
            description="Blending method of the ramp and the specular color",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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", "")
            ),
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default="MIX",
        )
    
    
        specular_ramp_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Input",
            description="How the ramp maps on the surface",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            items=(
                ("SHADER", "Shader", ""),
                ("ENERGY", "Energy", ""),
                ("NORMAL", "Normal", ""),
                ("RESULT", "Result", "")
            ),
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default="SHADER",
        )
    
        irid_enable: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Iridescence coating",
            description="Newton's thin film interference (like an oil slick on a puddle of "
            "water or the rainbow hues of a soap bubble.)",
            default=False,
        )
    
        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. "
            "More physically correct",
            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 ",
            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",
            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",
            min=0.0, max=1000.0, soft_min=0.1, soft_max=10.0, default=1,
        )
    
        irid_turbulence: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="turbulence",
            description="This parameter varies the thickness",
            min=0.0, max=10.0, soft_min=0.000, soft_max=1.0, default=0
        )
    
        interior_fade_color: FloatVectorProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Interior Fade Color",
            description="Color of filtered attenuation for transparent "
            "materials",
            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 "
                        "reflective/refractive caustics",
            default=True,
        )
    
        fake_caustics: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Fake Caustics",
            description="use only (Fast) fake refractive caustics",
            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 "
            "tighter, smaller simulated focal points",
            min=0.00, max=10.0, soft_min=0.00, soft_max=5.0, default=0.15
        )
    
        refraction_caustics: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Refractive Caustics",
            description="hotspots of light focused when going through the material",
            default=True,
        )
    
        photons_dispersion: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Chromatic Dispersion",
            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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            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(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            items=[
                   ("1", "Z Transparency Fake Caustics", "use fake caustics"),
                   ("2", "Raytrace Photons Caustics", "use photons for refractive caustics")],
            name="Refraction Type:",
            description="use fake caustics (fast) or true photons for refractive Caustics",
            default="1",
        )
    
        ##################################CustomPOV Code############################
    
        replacement_text: StringProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Declared name:",
            description="Type the declared name in custom POV code or an external "
            ".inc it points at. texture {} expected",
            default="",
        )
    
        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