Skip to content
Snippets Groups Projects
__init__.py 176 KiB
Newer Older
  • Learn to ignore specific revisions
  • Maurice Raybaud's avatar
    Maurice Raybaud committed
            "be in the range of the smallest displayable color difference",
            min=1, max=100000, soft_max=10000, default=8192
        )
    
        dof_confidence: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Confidence",
            description="Probability to reach the real color value. Larger confidence values "
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            "will lead to more samples, slower traces and better images",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            min=0.01, max=0.99, default=0.20
        )
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        normal_enable: BoolProperty(
            name="Perturbated Camera",
            default=False,
        )
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        cam_normal: FloatProperty(
            name="Normal Strength",
            min=0.0,
            max=1.0,
            default=0.0,
        )
    
        normal_patterns: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Pattern",
            description="",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            items=(
                ('agate', "Agate", ""),
                ('boxed', "Boxed", ""),
                ('bumps', "Bumps", ""),
                ('cells', "Cells", ""),
                ('crackle', "Crackle", ""),
                ('dents', "Dents", ""),
                ('granite', "Granite", ""),
                ('leopard', "Leopard", ""),
                ('marble', "Marble", ""),
                ('onion', "Onion", ""),
                ('pavement', "Pavement", ""),
                ('planar', "Planar", ""),
                ('quilted', "Quilted", ""),
                ('ripples', "Ripples", ""),
                ('radial', "Radial", ""),
                ('spherical', "Spherical", ""),
                ('spiral1', "Spiral1", ""),
                ('spiral2', "Spiral2", ""),
                ('spotted', "Spotted", ""),
                ('square', "Square", ""),
                ('tiling', "Tiling", ""),
                ('waves', "Waves", ""),
                ('wood', "Wood", ""),
                ('wrinkles', "Wrinkles", "")
            ),
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default='agate',
        )
    
    
        turbulence: FloatProperty(name="Turbulence", min=0.0, max=100.0, default=0.1)
    
        scale: FloatProperty(name="Scale", min=0.0,default=1.0)
    
        ##################################CustomPOV Code############################
    
        replacement_text: StringProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Texts in blend file",
            description="Type the declared name in custom POV code or an external .inc "
            "it points at. camera {} expected",
            default="",
        )
    
    ###############################################################################
    # Light POV properties.
    ###############################################################################
    class RenderPovSettingsLight(PropertyGroup):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Declare light properties controllable in UI and translated to POV."""
    
    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',
        )
    
    
        shadow_method: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Shadow",
            description="",
            items=(("NOSHADOW", "No Shadow", "No Shadow"),
                   ("RAY_SHADOW", "Ray Shadow", "Ray Shadow, Use ray tracing for shadow")),
            default="RAY_SHADOW",
        )
    
    
        active_texture_index: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name = "Index for texture_slots",
            default = 0
        )
    
    
        use_halo: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Halo",
            description="Render spotlight with a volumetric halo",
            default=False,
        )
    
    
        halo_intensity: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Halo intensity",
            description="Brightness of the spotlight halo cone",
            soft_min=0.0, soft_max=1.0, default=1.0
        )
    
    
        shadow_ray_samples_x: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name = "Number of samples taken extra (samples x samples)",
            min=1, soft_max=64,
            default = 1,
        )
    
    
        shadow_ray_samples_y: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name = "Number of samples taken extra (samples x samples)",
            min=1, soft_max=64,
            default = 1,
        )
    
    
        shadow_ray_sample_method: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            items=(
                ('ADAPTIVE_QMC', "", "Halton samples distribution", "",0),
                ('CONSTANT_QMC', "", "QMC samples distribution", "",1),
                ('CONSTANT_JITTERED', "", "Uses POV jitter keyword", "",2) # "Show other data textures"
            ),
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default = 'CONSTANT_JITTERED',
        )
    
    
        use_jitter: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Jitter",
            description="Use noise for sampling (Constant Jittered sampling)",
            default=False,
        )
    
    
    ###############################################################################
    # World POV properties.
    ###############################################################################
    class RenderPovSettingsWorld(PropertyGroup):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Declare world properties controllable in UI and translated to POV."""
    
    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',
        )
    
        use_sky_blend: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Blend Sky",
            description="Render background with natural progression from horizon to zenith",
            default=False,
        )
    
    
        use_sky_paper: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Paper Sky",
            description="Flatten blend or texture coordinates",
            default=False,
        )
    
    
        use_sky_real: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Real Sky",
            description="Render background with a real horizon, relative to the camera angle",
            default=False,
        )
    
    
        horizon_color: FloatVectorProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Horizon Color",
            description="Color at the horizon",
            precision=4, step=0.01, min=0, soft_max=1,
            default=(0.0, 0.0, 0.0), options={'ANIMATABLE'}, subtype='COLOR',
    
        zenith_color: FloatVectorProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Zenith Color",
            description="Color at the zenith",
            precision=4, step=0.01, min=0, soft_max=1,
            default=(0.0, 0.0, 0.0), options={'ANIMATABLE'}, subtype='COLOR',
    
        ambient_color: FloatVectorProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Ambient Color",
            description="Ambient color of the world",
            precision=4, step=0.01, min=0, soft_max=1,
            default=(0.0, 0.0, 0.0), options={'ANIMATABLE'}, subtype='COLOR',
    
        active_texture_index: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name = "Index for texture_slots",
            default = 0
        )
    
    
    
    class WorldTextureSlot(PropertyGroup):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Declare world texture slot properties controllable in UI and translated to POV."""
    
        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,
        )
    
    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
    # class WORLD_TEXTURE_SLOTS_UL_layerlist(bpy.types.UIList):
    
    class WorldTextureSlots(bpy.props.PropertyGroup):
        index = bpy.prop.PropertyInt(name='index')
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        # foo  = random prop
    
    
    bpy.types.World.texture_slots = bpy.props.CollectionProperty(type=PropertyGroup)
    
    for i in range(18):  # length of world texture slots
        world.texture_slots.add()
    '''
    
    
    class MATERIAL_TEXTURE_SLOTS_UL_POV_layerlist(bpy.types.UIList):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        # texture_slots:
    
        index: bpy.props.IntProperty(name='index')
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        # foo  = random prop
    
        def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
            ob = data
            slot = item
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            # ma = slot.name
    
            # draw_item must handle the three layout types... Usually 'DEFAULT' and 'COMPACT' can share the same code.
            if self.layout_type in {'DEFAULT', 'COMPACT'}:
                # You should always start your row layout by a label (icon + text), or a non-embossed text field,
                # this will also make the row easily selectable in the list! The later also enables ctrl-click rename.
                # We use icon_value of label, as our given icon is an integer value, not an enum ID.
                # Note "data" names should never be translated!
                if slot:
                    layout.prop(item, "texture", text="", emboss=False, icon='TEXTURE')
                else:
                    layout.label(text="New", translate=False, icon_value=icon)
            # 'GRID' layout type should be as compact as possible (typically a single icon!).
            elif self.layout_type in {'GRID'}:
                layout.alignment = 'CENTER'
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                layout.label(text="", icon_value=icon)
    
    
    ###############################################################################
    # Text POV properties.
    ###############################################################################
    
    class RenderPovSettingsText(PropertyGroup):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Declare text properties to use UI as an IDE or render text snippets to POV."""
    
        custom_code: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Custom Code",
            description="rendered source: Both adds text at the "
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            "top of the exported POV file",
            items=(
                ("3dview", "View", ""),
                ("text", "Text", ""),
                ("both", "Both", "")
            ),
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default="text",
        )
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
    ###############################################################################
    # Povray Preferences.
    ###############################################################################
    
    class PovrayPreferences(AddonPreferences):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Declare preference variables to set up POV binary."""
    
        branch_feature_set_povray: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Feature Set",
            description="Choose between official (POV-Ray) or (UberPOV) "
            "development branch features to write in the pov file",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            items= (
                ('povray', 'Official POV-Ray', '','PLUGIN', 0),
                ('uberpov', 'Unofficial UberPOV', '', 'PLUGIN', 1)
            ),
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default='povray',
        )
    
        filepath_povray: StringProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Binary Location",
            description="Path to renderer executable",
            subtype='FILE_PATH',
        )
    
    
        docpath_povray: StringProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Includes Location",
            description="Path to Insert Menu files",
            subtype='FILE_PATH',
        )
    
    
        def draw(self, context):
            layout = self.layout
    
            layout.prop(self, "branch_feature_set_povray")
    
            layout.prop(self, "filepath_povray")
    
    classes = (
        PovrayPreferences,
        RenderPovSettingsCamera,
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        RenderPovSettingsLight,
    
        MaterialTextureSlot,
    
        MaterialRaytraceTransparency,
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        MaterialRaytraceMirror,
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        MaterialStrandSettings,
    
        RenderPovSettingsObject,
        RenderPovSettingsScene,
        RenderPovSettingsText,
        RenderPovSettingsTexture,
    )
    
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        # bpy.utils.register_module(__name__) # DEPRECATED Now imported from bpy.utils import register_class
    
        render.register()
        ui.register()
        primitives.register()
        nodes.register()
    
            bpy.types.VIEW3D_MT_add.prepend(ui.menu_func_add)
            bpy.types.TOPBAR_MT_file_import.append(ui.menu_func_import)
            bpy.types.TEXT_MT_templates.append(ui.menu_func_templates)
    
            bpy.types.RENDER_PT_POV_radiosity.prepend(ui.rad_panel_func)
    
            bpy.types.LIGHT_PT_POV_light.prepend(ui.light_panel_func)
            bpy.types.WORLD_PT_world.prepend(ui.world_panel_func)
            # was used for parametric objects but made the other addon unreachable on
            # unregister for other tools to use created a user action call instead
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            # addon_utils.enable("add_mesh_extra_objects", default_set=False, persistent=True)
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            # bpy.types.TEXTURE_PT_context_texture.prepend(TEXTURE_PT_povray_type)
    
        bpy.types.NODE_HT_header.append(ui.menu_func_nodes)
    
        nodeitems_utils.register_node_categories("POVRAYNODES", node_categories)
    
        bpy.types.Scene.pov = PointerProperty(type=RenderPovSettingsScene)
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        # bpy.types.Modifier.pov = PointerProperty(type=RenderPovSettingsModifier)
    
        bpy.types.Material.pov_raytrace_transparency = PointerProperty(type=MaterialRaytraceTransparency)
    
        bpy.types.Material.pov = PointerProperty(type=RenderPovSettingsMaterial)
    
        bpy.types.Material.pov_subsurface_scattering = PointerProperty(type=MaterialSubsurfaceScattering)
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        bpy.types.Material.strand = PointerProperty(type=MaterialStrandSettings)
    
        bpy.types.Material.pov_raytrace_mirror = PointerProperty(type=MaterialRaytraceMirror)
    
        bpy.types.Texture.pov = PointerProperty(type=RenderPovSettingsTexture)
        bpy.types.Object.pov = PointerProperty(type=RenderPovSettingsObject)
        bpy.types.Camera.pov = PointerProperty(type=RenderPovSettingsCamera)
    
        bpy.types.Light.pov = PointerProperty(type=RenderPovSettingsLight)
    
        bpy.types.World.pov = PointerProperty(type=RenderPovSettingsWorld)
    
        bpy.types.Material.pov_texture_slots = CollectionProperty(type=MaterialTextureSlot)
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        bpy.types.World.texture_slots = CollectionProperty(type=WorldTextureSlot)
    
        bpy.types.Text.pov = PointerProperty(type=RenderPovSettingsText)
    
    
    def unregister():
        del bpy.types.Scene.pov
        del bpy.types.Material.pov
    
        del bpy.types.Material.pov_subsurface_scattering
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        del bpy.types.Material.strand
    
        del bpy.types.Material.pov_raytrace_mirror
    
        del bpy.types.Material.pov_raytrace_transparency
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        # del bpy.types.Modifier.pov
    
        del bpy.types.Texture.pov
        del bpy.types.Object.pov
        del bpy.types.Camera.pov
    
        del bpy.types.Light.pov
    
        del bpy.types.World.pov
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        del bpy.types.Material.pov_texture_slots
    
        nodeitems_utils.unregister_node_categories("POVRAYNODES")
        bpy.types.NODE_HT_header.remove(ui.menu_func_nodes)
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        # bpy.types.TEXTURE_PT_context_texture.remove(TEXTURE_PT_povray_type)
        # addon_utils.disable("add_mesh_extra_objects", default_set=False)
    
        bpy.types.WORLD_PT_POV_world.remove(ui.world_panel_func)
    
        bpy.types.LIGHT_PT_POV_light.remove(ui.light_panel_func)
    
        bpy.types.RENDER_PT_POV_radiosity.remove(ui.rad_panel_func)
    
        bpy.types.TEXT_MT_templates.remove(ui.menu_func_templates)
    
        bpy.types.TOPBAR_MT_file_import.remove(ui.menu_func_import)
        bpy.types.VIEW3D_MT_add.remove(ui.menu_func_add)
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        # bpy.utils.unregister_module(__name__)
    
        nodes.unregister()
        primitives.unregister()
        ui.unregister()
        render.unregister()
    
        for cls in reversed(classes):
            unregister_class(cls)
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    if __name__ == "__main__":
        register()