Skip to content
Snippets Groups Projects
__init__.py 176 KiB
Newer Older
  • Learn to ignore specific revisions
  • # ##### BEGIN GPL LICENSE BLOCK #####
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    #
    #  This program is free software; you can redistribute it and/or
    #  modify it under the terms of the GNU General Public License
    #  as published by the Free Software Foundation; either version 2
    #  of the License, or (at your option) any later version.
    #
    #  This program is distributed in the hope that it will be useful,
    #  but WITHOUT ANY WARRANTY; without even the implied warranty of
    #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    #  GNU General Public License for more details.
    #
    #  You should have received a copy of the GNU General Public License
    #  along with this program; if not, write to the Free Software Foundation,
    #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
    #
    # ##### END GPL LICENSE BLOCK #####
    
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    """Import, export and render to POV engines.
    
    These engines can be POV-Ray or Uberpov but others too, since POV is a
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    Scene Description Language. The script has been split in as few files
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    as possible :
    
    ___init__.py :
        Initialize variables
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    update_files.py
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        Update new variables to values from older API. This file needs an update.
    
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    ui.py :
        Provide property buttons for the user to set up the variables.
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    primitives.py :
        Display some POV native primitives in 3D view for input and output.
    
    shading.py
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        Translate shading properties to declared textures at the top of a pov file
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    
    nodes.py
        Translate node trees to the pov file
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    df3.py
        Render smoke to *.df3 files
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    render.py :
        Translate geometry and UI properties (Blender and POV native) to the POV file
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    
    Along these essential files also coexist a few additional libraries to help make
    Blender stand up to other POV IDEs such as povwin or QTPOV.
        presets :
            Material (sss)
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                apple.py ; chicken.py ; cream.py ; Ketchup.py ; marble.py ;
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                potato.py ; skim_milk.py ; skin1.py ; skin2.py ; whole_milk.py
            Radiosity
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                01_Debug.py ; 02_Fast.py ; 03_Normal.py ; 04_Two_Bounces.py ;
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                05_Final.py ; 06_Outdoor_Low_Quality.py ; 07_Outdoor_High_Quality.py ;
                08_Outdoor(Sun)Light.py ; 09_Indoor_Low_Quality.py ;
                10_Indoor_High_Quality.py ;
            World
                01_Clear_Blue_Sky.py ; 02_Partly_Hazy_Sky.py ; 03_Overcast_Sky.py ;
                04_Cartoony_Sky.py ; 05_Under_Water.py ;
            Light
                01_(5400K)_Direct_Sun.py ; 02_(5400K)_High_Noon_Sun.py ;
                03_(6000K)_Daylight_Window.py ;
                04_(6000K)_2500W_HMI_(Halogen_Metal_Iodide).py ;
                05_(4000K)_100W_Metal_Halide.py ; 06_(3200K)_100W_Quartz_Halogen.py ;
                07_(2850K)_100w_Tungsten.py ; 08_(2600K)_40w_Tungsten.py ;
                09_(5000K)_75W_Full_Spectrum_Fluorescent_T12.py ;
                10_(4300K)_40W_Vintage_Fluorescent_T12.py ;
                11_(5000K)_18W_Standard_Fluorescent_T8 ;
                12_(4200K)_18W_Cool_White_Fluorescent_T8.py ;
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                13_(3000K)_18W_Warm_Fluorescent_T8.py ;
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                14_(6500K)_54W_Grow_Light_Fluorescent_T5-HO.py ;
                15_(3200K)_40W_Induction_Fluorescent.py ;
                16_(2100K)_150W_High_Pressure_Sodium.py ;
                17_(1700K)_135W_Low_Pressure_Sodium.py ;
                18_(6800K)_175W_Mercury_Vapor.py ; 19_(5200K)_700W_Carbon_Arc.py ;
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                20_(6500K)_15W_LED_Spot.py ; 21_(2700K)_7W_OLED_Panel.py ;
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                22_(30000K)_40W_Black_Light_Fluorescent.py ;
                23_(30000K)_40W_Black_Light_Bulb.py; 24_(1850K)_Candle.py
        templates:
            abyss.pov ; biscuit.pov ; bsp_Tango.pov ; chess2.pov ;
            cornell.pov ; diffract.pov ; diffuse_back.pov ; float5 ;
            gamma_showcase.pov ; grenadine.pov ; isocacti.pov ;
            mediasky.pov ; patio-radio.pov ; subsurface.pov ; wallstucco.pov
    """
    
    
    
        "name": "Persistence of Vision",
        "author": "Campbell Barton, "
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        "Maurice Raybaud, "
        "Leonid Desyatkov, "
        "Bastien Montagne, "
        "Constantin Rahn, "
        "Silvio Falcinelli",
    
        "version": (0, 1, 0),
    
        "blender": (2, 81, 0),
    
        "location": "Render Properties > Render Engine > Persistence of Vision",
        "description": "Persistence of Vision integration for blender",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        "wiki_url": "https://docs.blender.org/manual/en/dev/addons/render/povray.html",
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
    if "bpy" in locals():
    
        importlib.reload(ui)
        importlib.reload(render)
    
        importlib.reload(shading)
    
        importlib.reload(update_files)
    
        from bpy.utils import register_class, unregister_class
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        # import addon_utils  # To use some other addons
        import nodeitems_utils  # for Nodes
        from nodeitems_utils import NodeCategory, NodeItem  # for Nodes
    
        from bl_operators.presets import AddPresetBase
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        from bpy.types import AddonPreferences, PropertyGroup
    
        from bpy.props import (
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            StringProperty,
            BoolProperty,
            IntProperty,
            FloatProperty,
            FloatVectorProperty,
            EnumProperty,
            PointerProperty,
            CollectionProperty,
        )
        from . import ui, render, update_files
    
    
    def string_strip_hyphen(name):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Remove hyphen characters from a string to avoid POV errors."""
    
        return name.replace("-", "")
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    
    def active_texture_name_from_uilist(self, context):
    
        mat = context.scene.view_layers["View Layer"].objects.active.active_material
        index = mat.pov.active_texture_index
        name = mat.pov_texture_slots[index].name
        newname = mat.pov_texture_slots[index].texture
        tex = bpy.data.textures[name]
        tex.name = newname
        mat.pov_texture_slots[index].name = newname
    
    
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    def active_texture_name_from_search(self, context):
    
        mat = context.scene.view_layers["View Layer"].objects.active.active_material
        index = mat.pov.active_texture_index
        name = mat.pov_texture_slots[index].texture_search
        try:
            tex = bpy.data.textures[name]
            mat.pov_texture_slots[index].name = name
            mat.pov_texture_slots[index].texture = name
        except:
            pass
    
    
    ###############################################################################
    # Scene POV properties.
    ###############################################################################
    
    class RenderPovSettingsScene(PropertyGroup):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Declare scene level properties controllable in UI and translated to POV."""
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    
        # Linux SDL-window enable
    
        sdl_window_enable: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Enable SDL window",
            description="Enable the SDL window in Linux OS",
            default=True,
        )
    
        # File Options
    
        text_block: StringProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Text Scene Name",
            description="Name of POV scene to use. "
            "Set when clicking Run to render current text only",
            maxlen=1024,
        )
    
        tempfiles_enable: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Enable Tempfiles",
            description="Enable the OS-Tempfiles. Otherwise set the path where"
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            " to save the files",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default=True,
        )
    
        pov_editor: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="POV editor",
            description="Don't Close POV editor after rendering (Overridden"
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            " by /EXIT command)",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default=False,
        )
    
        deletefiles_enable: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Delete files",
            description="Delete files after rendering. "
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            "Doesn't work with the image",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default=True,
        )
    
        scene_name: StringProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Scene Name",
            description="Name of POV scene to create. Empty name will use "
            "the name of the blend file",
            maxlen=1024,
        )
    
        scene_path: StringProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Export scene path",
            # Bug in POV-Ray RC3
            # description="Path to directory where the exported scene "
            # "(POV and INI) is created",
            description="Path to directory where the files are created",
            maxlen=1024,
            subtype="DIR_PATH",
        )
    
        renderimage_path: StringProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Rendered image path",
            description="Full path to directory where the rendered image is "
            "saved",
            maxlen=1024,
            subtype="DIR_PATH",
        )
    
        list_lf_enable: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="LF in lists",
            description="Enable line breaks in lists (vectors and indices). "
            "Disabled: lists are exported in one line",
            default=True,
        )
    
        # Not a real pov option, just to know if we should write
    
        radio_enable: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Enable Radiosity",
            description="Enable POV radiosity calculation",
            default=True,
        )
    
        radio_display_advanced: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Advanced Options",
            description="Show advanced options",
            default=False,
        )
    
        media_enable: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Enable Media",
            description="Enable POV atmospheric media",
            default=False,
        )
    
        media_samples: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Samples",
            description="Number of samples taken from camera to first object "
            "encountered along ray path for media calculation",
            min=1,
            max=100,
            default=35,
        )
    
        media_scattering_type: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Scattering Type",
            description="Scattering model",
            items=(
                (
                    '1',
                    "1 Isotropic",
                    "The simplest form of scattering because"
                    " it is independent of direction."
                ),
                (
                    '2',
                    "2 Mie haze ",
                    "For relatively small particles such as "
                    "minuscule water droplets of fog, cloud "
                    "particles, and particles responsible "
                    "for the polluted sky. In this model the"
                    " scattering is extremely directional in"
                    " the forward direction i.e. the amount "
                    "of scattered light is largest when the "
                    "incident light is anti-parallel to the "
                    "viewing direction (the light goes "
                    "directly to the viewer). It is smallest"
                    " when the incident light is parallel to"
                    " the viewing direction. "
                ),
                (
                    '3',
                    "3 Mie murky",
                    "Like haze but much more directional"
                ),
                (
                    '4',
                    "4 Rayleigh",
                    "For extremely small particles such as "
                    "molecules of the air. The amount of "
                    "scattered light depends on the incident"
                    " light angle. It is largest when the "
                    "incident light is parallel or "
                    "anti-parallel to the viewing direction "
                    "and smallest when the incident light is "
                    "perpendicular to viewing direction."
                ),
                (
                    '5',
                    "5 Henyey-Greenstein",
                    "The default eccentricity value "
                    "of zero defines isotropic "
                    "scattering while positive "
                    "values lead to scattering in "
                    "the direction of the light and "
                    "negative values lead to "
                    "scattering in the opposite "
                    "direction of the light. Larger "
                    "values of e (or smaller values "
                    "in the negative case) increase "
                    "the directional property of the"
                    " scattering."
                )
            ),
            default='1',
        )
    
        media_diffusion_scale: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Scale",
            description="Scale factor of Media Diffusion Color",
            precision=12, step=0.00000001, min=0.000000001, max=1.0,
            default=(1.0),
        )
    
        media_diffusion_color: FloatVectorProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Media Diffusion Color",
            description="The atmospheric media color",
            precision=4, step=0.01, min=0, soft_max=1,
            default=(0.001, 0.001, 0.001),
            options={'ANIMATABLE'},
            subtype='COLOR',
        )
    
        media_absorption_scale: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Scale",
            description="Scale factor of Media Absorption Color. "
            "use 1/depth of media volume in meters",
            precision=12,
            step=0.000001,
            min=0.000000001,
            max=1.0,
            default=(0.00002),
        )
    
        media_absorption_color: FloatVectorProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Media Absorption Color",
            description="The atmospheric media absorption color",
            precision=4, step=0.01, min=0, soft_max=1,
            default=(0.0, 0.0, 0.0),
            options={'ANIMATABLE'},
            subtype='COLOR',
        )
    
        media_eccentricity: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Media Eccenticity Factor",
            description="Positive values lead"
            " to scattering in the direction of the light and negative "
            "values lead to scattering in the opposite direction of the "
            "light. Larger values of e (or smaller values in the negative"
            " case) increase the directional property of the scattering.",
            precision=2,
            step=0.01,
            min=-1.0,
            max=1.0,
            default=(0.0),
            options={'ANIMATABLE'},
        )
    
        baking_enable: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Enable Baking",
            description="Enable POV texture baking",
            default=False
        )
    
    
        indentation_character: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Indentation",
            description="Select the indentation type",
            items=(
                ('NONE', "None", "No indentation"),
                ('TAB', "Tabs", "Indentation with tabs"),
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                ('SPACE', "Spaces", "Indentation with spaces")
            ),
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default='SPACE'
        )
    
    
        indentation_spaces: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Quantity of spaces",
            description="The number of spaces for indentation",
            min=1,
            max=10,
            default=4,
        )
    
        comments_enable: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Enable Comments",
            description="Add comments to pov file",
            default=True,
        )
    
    
        # Real pov options
    
        command_line_switches: StringProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Command Line Switches",
            description="Command line switches consist of a + (plus) or - "
            "(minus) sign, followed by one or more alphabetic "
            "characters and possibly a numeric value",
            maxlen=500,
        )
    
        antialias_enable: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Anti-Alias", description="Enable Anti-Aliasing",
            default=True,
        )
    
        antialias_method: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Method",
            description="AA-sampling method. Type 1 is an adaptive, "
            "non-recursive, super-sampling method. Type 2 is an "
            "adaptive and recursive super-sampling method. Type 3 "
            "is a stochastic halton based super-sampling method",
            items=(
                ("0", "non-recursive AA", "Type 1 Sampling in POV"),
                ("1", "recursive AA", "Type 2 Sampling in POV"),
                ("2", "stochastic AA", "Type 3 Sampling in POV")
            ),
            default="1",
        )
    
        antialias_confidence: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Antialias Confidence",
            description="how surely the computed color "
            "of a given pixel is indeed"
            "within the threshold error margin",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            min=0.0001,
            max=1.0000,
            default=0.9900,
            precision=4
    
        antialias_depth: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Antialias Depth",
            description="Depth of pixel for sampling",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            min=1,
            max=9,
            default=3
    
        antialias_threshold: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Antialias Threshold",
            description="Tolerance for sub-pixels",
            min=0.0,
            max=1.0,
            soft_min=0.05,
            soft_max=0.5,
            default=0.03,
        )
    
        jitter_enable: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Jitter",
            description="Enable Jittering. Adds noise into the sampling "
            "process (it should be avoided to use jitter in "
            "animation)",
            default=False,
        )
    
        jitter_amount: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Jitter Amount",
            description="Amount of jittering",
            min=0.0,
            max=1.0,
            soft_min=0.01,
            soft_max=1.0,
            default=1.0,
        )
    
        antialias_gamma: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Antialias Gamma",
            description="POV-Ray compares gamma-adjusted values for super "
            "sampling. Antialias Gamma sets the Gamma before "
            "comparison",
            min=0.0,
            max=5.0,
            soft_min=0.01,
            soft_max=2.5,
            default=2.5,
        )
    
        alpha_mode: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Alpha",
            description="Representation of alpha information in the RGBA pixels",
            items=(
                ("SKY", "Sky", "Transparent pixels are filled with sky color"),
                (
                "TRANSPARENT",
                "Transparent",
                "Transparent, World background is transparent with premultiplied alpha",
                ),
            ),
            default="SKY",
        )
    
    
        use_shadows: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Shadows",
            description="Calculate shadows while rendering",
            default=True,
        )
    
        max_trace_level: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Max Trace Level",
            description="Number of reflections/refractions allowed on ray "
            "path",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            min=1,
            max=256,
            default=5
    
        adc_bailout_enable: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Enable",
            description="",
            default=False,
        )
    
        adc_bailout: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="ADC Bailout",
            description="Adaptive Depth Control (ADC) to stop computing additional"
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                "reflected or refracted rays when their contribution is insignificant."
                "The default value is 1/255, or approximately 0.0039, since a change "
                "smaller than that could not be visible in a 24 bit image. Generally "
                "this value is fine and should be left alone."
                "Setting adc_bailout to 0 will disable ADC, relying completely on "
                "max_trace_level to set an upper limit on the number of rays spawned. ",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            min=0.0,
            max=1000.0,
            default=0.00392156862745,
            precision=3
        )
    
        ambient_light_enable: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Enable",
            description="",
            default=False,
        )
    
        ambient_light: FloatVectorProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Ambient Light",
            description="Ambient light is used to simulate the effect of inter-diffuse reflection",
            precision=4, step=0.01, min=0, soft_max=1,
            default=(1, 1, 1), options={'ANIMATABLE'}, subtype='COLOR',
    
        global_settings_advanced: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Advanced",
            description="",
            default=False,
        )
    
        irid_wavelength_enable: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Enable",
            description="",
            default=False,
        )
    
        irid_wavelength: FloatVectorProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Irid Wavelength",
            description=(
                "Iridescence calculations depend upon the dominant "
                "wavelengths of the primary colors of red, green and blue light"
            ),
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            precision=4,
            step=0.01,
            min=0,
            soft_max=1,
            default=(0.25,0.18,0.14),
            options={'ANIMATABLE'},
            subtype='COLOR'
    
        charset: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Charset",
            description="This allows you to specify the assumed character set of all text strings",
            items=(
                ("ascii", "ASCII", ""),
                ("utf8", "UTF-8", ""),
                ("sys", "SYS", "")
            ),
            default="utf8",
        )
    
        max_intersections_enable: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Enable",
            description="",
            default=False,
        )
    
        max_intersections: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Max Intersections",
            description="POV-Ray uses a set of internal stacks to collect ray/object intersection points",
            min=2,
            max=1024,
            default=64,
        )
    
        number_of_waves_enable: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Enable",
            description="",
            default=False,
        )
    
        number_of_waves: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Number Waves",
            description=(
                "The waves and ripples patterns are generated by summing a series of waves, "
                "each with a slightly different center and size"
            ),
            min=1,
            max=10,
            default=1000,
        )
    
        noise_generator_enable: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Enable",
            description="",
            default=False,
        )
    
        noise_generator: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Noise Generator",
            description="There are three noise generators implemented",
            min=1,
            max=3,
            default=2,
        )
    
        ########################### PHOTONS #######################################
    
        photon_enable: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Photons",
            description="Enable global photons",
            default=False,
        )
    
        photon_enable_count: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Spacing / Count",
            description="Enable count photons",
            default=False,
        )
    
        photon_count: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Count",
            description="Photons count",
            min=1,
            max=100000000,
            default=20000
        )
    
        photon_spacing: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Spacing",
            description="Average distance between photons on surfaces. half "
            "this get four times as many surface photons",
            min=0.001,
            max=1.000,
            soft_min=0.001,
            soft_max=1.000,
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            precision=3,
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            default=0.005,
        )
    
        photon_max_trace_level: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Max Trace Level",
            description="Number of reflections/refractions allowed on ray "
            "path",
            min=1,
            max=256,
            default=5
        )
    
        photon_adc_bailout: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="ADC Bailout",
            description="The adc_bailout for photons. Use adc_bailout = "
            "0.01 / brightest_ambient_object for good results",
            min=0.0,
            max=1000.0,
            soft_min=0.0,
            soft_max=1.0,
            precision=3,
            default=0.1,
        )
    
        photon_gather_min: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Gather Min", description="Minimum number of photons gathered"
            "for each point",
            min=1, max=256, default=20
        )
    
        photon_gather_max: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Gather Max", description="Maximum number of photons gathered for each point",
            min=1, max=256, default=100
        )
    
        photon_map_file_save_load: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Operation",
            description="Load or Save photon map file",
            items=(
                ("NONE", "None", ""),
                ("save", "Save", ""),
                ("load", "Load", "")
            ),
            default="NONE",
        )
    
        photon_map_filename: StringProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Filename",
            description="",
            maxlen=1024
        )
    
        photon_map_dir: StringProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Directory",
            description="",
            maxlen=1024,
            subtype="DIR_PATH",
        )
    
        photon_map_file: StringProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="File",
            description="",
            maxlen=1024,
            subtype="FILE_PATH"
        )
    
        #########RADIOSITY########
    
        radio_adc_bailout: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="ADC Bailout",
            description="The adc_bailout for radiosity rays. Use "
            "adc_bailout = 0.01 / brightest_ambient_object for good results",
            min=0.0,
            max=1000.0,
            soft_min=0.0,
            soft_max=1.0,
            default=0.0039,
            precision=4,
        )
    
        radio_always_sample: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Always Sample",
            description="Only use the data from the pretrace step and not gather "
            "any new samples during the final radiosity pass",
            default=False,
        )
    
        radio_brightness: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Brightness",
            description="Amount objects are brightened before being returned "
            "upwards to the rest of the system",
            min=0.0, max=1000.0, soft_min=0.0, soft_max=10.0, default=1.0
        )
    
        radio_count: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Ray Count",
            description="Number of rays for each new radiosity value to be calculated "
            "(halton sequence over 1600)",
            min=1, max=10000, soft_max=1600, default=35
        )
    
        radio_error_bound: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Error Bound",
            description="One of the two main speed/quality tuning values, "
            "lower values are more accurate",
            min=0.0, max=1000.0, soft_min=0.1, soft_max=10.0, default=1.8
        )
    
        radio_gray_threshold: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Gray Threshold",
            description="One of the two main speed/quality tuning values, "
            "lower values are more accurate",
            min=0.0, max=1.0, soft_min=0, soft_max=1, default=0.0
        )
    
        radio_low_error_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Low Error Factor",
            description="Just enough samples is slightly blotchy. Low error changes error "
            "tolerance for less critical last refining pass",
            min=0.000001, max=1.0, soft_min=0.000001, soft_max=1.0, default=0.5
        )
    
        radio_media: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Media",
            description="Radiosity estimation can be affected by media",
            default=True,
        )
    
        radio_subsurface: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Subsurface",
            description="Radiosity estimation can be affected by Subsurface Light Transport",
            default=False,
        )
    
        radio_minimum_reuse: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Minimum Reuse",
            description="Fraction of the screen width which sets the minimum radius of reuse "
            "for each sample point (At values higher than 2% expect errors)",
            min=0.0, max=1.0, soft_min=0.1, soft_max=0.1, default=0.015, precision=3
        )
    
        radio_maximum_reuse: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Maximum Reuse",
            description="The maximum reuse parameter works in conjunction with, and is similar to that of minimum reuse, "
            "the only difference being that it is an upper bound rather than a lower one",
            min=0.0, max=1.0,default=0.2, precision=3
        )
    
        radio_nearest_count: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Nearest Count",
            description="Number of old ambient values blended together to "
            "create a new interpolated value",
            min=1, max=20, default=1
        )
    
        radio_normal: BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Normals",
            description="Radiosity estimation can be affected by normals",
            default=False,
        )
    
        radio_recursion_limit: IntProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Recursion Limit",
            description="how many recursion levels are used to calculate "
            "the diffuse inter-reflection",
            min=1, max=20, default=1
        )
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
        radio_pretrace_start: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Pretrace Start",
            description="Fraction of the screen width which sets the size of the "
            "blocks in the mosaic preview first pass",
            min=0.01, max=1.00, soft_min=0.02, soft_max=1.0, default=0.08
        )
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    
    
        radio_pretrace_end: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Pretrace End",
            description="Fraction of the screen width which sets the size of the blocks "
            "in the mosaic preview last pass",
            min=0.000925, max=1.00, soft_min=0.01, soft_max=1.00, default=0.04, precision=3
        )
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    
    
    ###############################################################################
    # Material POV properties.
    ###############################################################################
    
    class MaterialTextureSlot(PropertyGroup):
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
        """Declare material texture slot level properties for UI and translated to POV."""
    
        bl_idname="pov_texture_slots",
    
        bl_description="Texture_slots from Blender-2.79",
    
        texture : StringProperty(update=active_texture_name_from_uilist)
        texture_search : StringProperty(update=active_texture_name_from_search)
    
    
        alpha_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="Alpha",
            description="Amount texture affects alpha",
            default = 0.0,
        )
    
    
        ambient_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Amount texture affects ambient",
            default = 0.0,
        )
    
    
        bump_method: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Method to use for bump mapping",
            items=(
                ("BUMP_ORIGINAL", "Bump Original", ""),
                ("BUMP_COMPATIBLE", "Bump Compatible", ""),
                ("BUMP_DEFAULT", "Bump Default", ""),
                ("BUMP_BEST_QUALITY", "Bump Best Quality", "")
            ),
            default="BUMP_ORIGINAL",
        )
    
    
        bump_objectspace: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Space to apply bump mapping in",
            items=(
                ("BUMP_VIEWSPACE", "Bump Viewspace", ""),
                ("BUMP_OBJECTSPACE", "Bump Objectspace", ""),
                ("BUMP_TEXTURESPACE", "Bump Texturespace", "")
            ),
            default="BUMP_VIEWSPACE",
        )
    
    
        density_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Amount texture affects density",
            default = 0.0,
        )
    
    
        diffuse_color_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Amount texture affects diffuse color",
            default = 0.0,
        )
    
    
        diffuse_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Amount texture affects diffuse reflectivity",
            default = 0.0,
        )
    
    
        displacement_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Amount texture displaces the surface",
            default = 0.0,
        )
    
    
        emission_color_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Amount texture affects emission color",
            default = 0.0,
        )
    
    
        emission_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Amount texture affects emission",
            default = 0.0,
        )
    
    
        emit_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Amount texture affects emission",
            default = 0.0,
        )
    
    
        hardness_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Amount texture affects hardness",
            default = 0.0,
        )
    
    
        mapping: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="",
            items=(("FLAT", "Flat", ""),
                   ("CUBE", "Cube", ""),
                   ("TUBE", "Tube", ""),
                   ("SPHERE", "Sphere", "")),
            default="FLAT",
        )
    
    
        mapping_x: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="",
            items=(("NONE", "", ""),
                   ("X", "", ""),
                   ("Y", "", ""),
                   ("Z", "", "")),
            default="NONE",
        )
    
    
        mapping_y: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="",
            items=(("NONE", "", ""),
                   ("X", "", ""),
                   ("Y", "", ""),
                   ("Z", "", "")),
            default="NONE",
        )
    
    
        mapping_z: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="",
            items=(("NONE", "", ""),
                   ("X", "", ""),
                   ("Y", "", ""),
                   ("Z", "", "")),
            default="NONE",
        )
    
    
        mirror_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Amount texture affects mirror color",
            default = 0.0,
        )
    
    
        normal_factor: FloatProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Amount texture affects normal values",
            default = 0.0,
        )
    
    
        normal_map_space: EnumProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
            name="",
            description="Sets space of normal map image",
            items=(("CAMERA", "Camera", ""),