Skip to content
Snippets Groups Projects
__init__.py 176 KiB
Newer Older
# ##### 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",
    "doc_url": "{BLENDER_MANUAL_URL}/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",
Maurice Raybaud's avatar
Maurice Raybaud committed
        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'
Maurice Raybaud's avatar
Maurice Raybaud committed
    # Deprecated (autodetected in pov3.8):
    # charset: EnumProperty(
        # 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", ""),
               ("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,
    )

    diffuse_intensity: FloatProperty(
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",
    )

    diffuse_toon_size: FloatProperty(
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
    )


    translucency: FloatProperty(
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,
    )

    use_shadeless: BoolProperty(
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
Campbell Barton's avatar
Campbell Barton committed
                tree.nodes.active = tmap
        else:
            mat.use_nodes=False


    def use_texture_nodes_callback(self, context):
        tex=context.object.active_material.active_texture
        if tex.pov.texture_use_nodes:
            tex.use_nodes=True
            if len(tex.node_tree.nodes)==2:
                for node in tex.node_tree.nodes:
                    if node.type in {"OUTPUT","CHECKER"}:
                        tex.node_tree.nodes.remove(node)
        else:
            tex.use_nodes=False

    def node_active_callback(self, context):
        items = []
        mat=context.material
        mat.node_tree.nodes
        for node in mat.node_tree.nodes:
            node.select=False
        for node in mat.node_tree.nodes:
            if node.name==mat.pov.material_active_node:
                node.select=True
                mat.node_tree.nodes.active=node

                return node

    def node_enum_callback(self, context):
        items = []
        mat=context.material
        nodes=mat.node_tree.nodes
        for node in nodes:
            items.append(("%s"%node.name,"%s"%node.name,""))
        return items

    def pigment_normal_callback(self, context):
        render = context.scene.pov.render
        items = [("pigment", "Pigment", ""),("normal", "Normal", "")]
        if render == 'hgpovray':
            items = [("pigment", "Pigment", ""),("normal", "Normal", ""),("modulation", "Modulation", "")]
        return items

    def glow_callback(self, context):
        scene = context.scene
        ob = context.object
        ob.pov.mesh_write_as_old = ob.pov.mesh_write_as
        if scene.pov.render == 'uberpov' and ob.pov.glow:
            ob.pov.mesh_write_as = 'NONE'
        else:
            ob.pov.mesh_write_as = ob.pov.mesh_write_as_old

Maurice Raybaud's avatar
Maurice Raybaud committed
    material_use_nodes: BoolProperty(
        name="Use nodes",
        description="",
        update=use_material_nodes_callback,
        default=False,
    )

    material_active_node: EnumProperty(
        name="Active node",
        description="",
        items=node_enum_callback,
        update=node_active_callback
    )

    preview_settings: BoolProperty(
        name="Preview Settings",
        description="",
        default=False,
    )

    object_preview_transform: BoolProperty(
        name="Transform object",
        description="",
        default=False,
    )

    object_preview_scale: FloatProperty(
        name="XYZ",
        min=0.5,
        max=2.0,
        default=1.0,
    )

    object_preview_rotate: FloatVectorProperty(
        name="Rotate",
        description="",
        min=-180.0,
        max=180.0,
        default=(0.0,0.0,0.0),
        subtype='XYZ',
    )

    object_preview_bgcontrast: FloatProperty(
        name="Contrast",
        min=0.0,
        max=1.0,
        default=0.5,
    )

Maurice Raybaud's avatar
Maurice Raybaud committed
class MaterialRaytraceTransparency(PropertyGroup):
    """Declare transparency panel properties controllable in UI and translated to POV."""
    depth: IntProperty(
Maurice Raybaud's avatar
Maurice Raybaud committed
        name="Depth",
        description="Maximum allowed number of light inter-refractions",
        min=0, max=32767, default=2
    )

    depth_max: FloatProperty(
Maurice Raybaud's avatar
Maurice Raybaud committed
        name="Depth",
        description="Maximum depth for light to travel through the "
        "transparent material before becoming fully filtered (0.0 is disabled)",
        min=0, max=100, default=0.0,
    )

    falloff: FloatProperty(
Maurice Raybaud's avatar
Maurice Raybaud committed
        name="Falloff",
        description="Falloff power for transmissivity filter effect (1.0 is linear)",
        min=0.1, max=10.0, default=1.0, precision=3
    )

    filter: FloatProperty(
Maurice Raybaud's avatar
Maurice Raybaud committed
        name="Filter",
        description="Amount to blend in the material’s diffuse color in raytraced "
        "transparency (simulating absorption)",
        min=0.0, max=1.0, default=0.0, precision=3
    )

    fresnel: FloatProperty(
Maurice Raybaud's avatar
Maurice Raybaud committed
        name="Fresnel",
        description="Power of Fresnel for transparency (Ray or ZTransp)",
        min=0.0, max=5.0, soft_min=0.0, soft_max=5.0, default=0.0, precision=3
    )

    fresnel_factor: FloatProperty(
Maurice Raybaud's avatar
Maurice Raybaud committed
        name="Blend",
        description="Blending factor for Fresnel",
        min=0.0, max=5.0, soft_min=0.0, soft_max=5.0, default=1.250, precision=3
    )

    gloss_factor: FloatProperty(
Maurice Raybaud's avatar
Maurice Raybaud committed
        name="Amount",
        description="The clarity of the refraction. "
        "(values < 1.0 give diffuse, blurry refractions)",
        min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=1.0, precision=3
    )

    gloss_samples: IntProperty(
Maurice Raybaud's avatar
Maurice Raybaud committed
        name="Samples",
        description="Number of cone samples averaged for blurry refractions",
        min=0, max=1024, default=18
    )

    gloss_threshold: FloatProperty(
Maurice Raybaud's avatar
Maurice Raybaud committed
        name="Threshold",
        description="Threshold for adaptive sampling (if a sample "
        "contributes less than this amount [as a percentage], "
        "sampling is stopped)",
        min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=0.005, precision=3
    )

    ior: FloatProperty(
Maurice Raybaud's avatar
Maurice Raybaud committed
        name="IOR",
        description="Sets angular index of refraction for raytraced refraction",
        min=-0.0, max=10.0, soft_min=0.25, soft_max=4.0, default=1.3
    )

class MaterialRaytraceMirror(PropertyGroup):
Maurice Raybaud's avatar
Maurice Raybaud committed
    """Declare reflection panel properties controllable in UI and translated to POV."""

Maurice Raybaud's avatar
Maurice Raybaud committed
    bl_description = "Raytraced reflection settings for the Material",

Maurice Raybaud's avatar
Maurice Raybaud committed
        name="Mirror",
        description="Enable raytraced reflections",
        default=False,
    )

Maurice Raybaud's avatar
Maurice Raybaud committed
        name="Depth",
        description="Maximum allowed number of light inter-reflections",
        min=0, max=32767, default=2
    )
Maurice Raybaud's avatar
Maurice Raybaud committed
        name="Max Dist",
        description="Maximum distance of reflected rays "
        "(reflections further than this range "
        "fade to sky color or material color)",
        min=0.0, max=100000.0, soft_min=0.0, soft_max=10000.0, default=0.0, precision=3
    )
Maurice Raybaud's avatar
Maurice Raybaud committed
        items=[
               ("FADE_TO_SKY", "Fade to sky", ""),
               ("FADE_TO_MATERIAL", "Fade to material color", "")],
        name="Fade-out Color",
        description="The color that rays with no intersection within the "
        "Max Distance take (material color can be best for "
        "indoor scenes, sky color for outdoor)",
        default="FADE_TO_SKY",
    )
Maurice Raybaud's avatar
Maurice Raybaud committed
        name="Fresnel",
        description="Power of Fresnel for mirror reflection",
        min=0.0, max=5.0, soft_min=0.0, soft_max=5.0, default=0.0, precision=3,
    )
Maurice Raybaud's avatar
Maurice Raybaud committed
        name="Blend",
        description="Blending factor for Fresnel",
        min=0.0, max=5.0, soft_min=0.0, soft_max=5.0, default=1.250, precision=3
    )

    gloss_anisotropic: FloatProperty(
Maurice Raybaud's avatar
Maurice Raybaud committed
        name="Anisotropic",
        description="The shape of the reflection, from 0.0 (circular) "
        "to 1.0 (fully stretched along the tangent",
        min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=1.0, precision=3
    )
Loading
Loading full blame...