Skip to content
Snippets Groups Projects
__init__.py 23.5 KiB
Newer Older
  • Learn to ignore specific revisions
  • Luca Bonavita's avatar
    Luca Bonavita committed
    # ##### BEGIN GPL LICENSE BLOCK #####
    #
    #  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 #####
    
    
        "name": "POV-Ray 3.7",
    
        "author": "Campbell Barton, Silvio Falcinelli, Maurice Raybaud, Constantin Rahn, Bastien Montagne",
    
        "blender": (2, 5, 7),
    
        "location": "Render > Engine > POV-Ray 3.7",
    
        "description": "Basic POV-Ray 3.7 integration for blender",
        "warning": "both POV-Ray 3.7 and this script are beta",
    
        "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.6/Py/"\
            "Scripts/Render/POV-Ray",
    
    Luca Bonavita's avatar
    Luca Bonavita committed
        "tracker_url": "https://projects.blender.org/tracker/index.php?"\
    
            "func=detail&aid=23145",
    
        "category": "Render"}
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
    if "bpy" in locals():
    
        import imp
        imp.reload(ui)
        imp.reload(render)
    
    
    else:
        import bpy
    
        from bpy.props import StringProperty, BoolProperty, IntProperty, FloatProperty, \
                              FloatVectorProperty, EnumProperty, PointerProperty
    
        from . import ui
    
        from . import render
        from . import update_files
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
    ###############################################################################
    # Scene POV properties.
    ###############################################################################
    class RenderPovSettingsScene(bpy.types.PropertyGroup):
    
        # File Options
    
                name="Enable Tempfiles",
    
                description="Enable the OS-Tempfiles. Otherwise set the path where to save the files",
    
                default=True)
    
                name="Delete files",
    
                description="Delete files after rendering. Doesn't work with the image",
    
                default=True)
    
                name="Scene Name",
    
                description="Name of POV-Ray scene to create. Empty name will use the name of " \
    
                default="", maxlen=1024)
    
                name="Export scene path",
                # description="Path to directory where the exported scene (POV and INI) is created",  # Bug in POV-Ray RC3
                description="Path to directory where the files are created",
                default="", maxlen=1024, subtype="DIR_PATH")
    
                name="Rendered image path",
    
                description="Full path to directory where the rendered image is saved",
    
                default="", maxlen=1024, subtype="DIR_PATH")
    
                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
    
                name="Enable Radiosity",
    
                description="Enable POV-Rays radiosity calculation",
    
                default=False)
    
                name="Advanced Options",
                description="Show advanced options",
                default=False)
    
                name="Enable Media",
                description="Enable POV-Rays atmospheric media",
                default=False)
    
        media_samples = IntProperty(
                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)
    
                name="Media 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')
    
        baking_enable = BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                name="Enable Baking",
    
                description="Enable POV-Rays texture baking",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                default=False)
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                name="Indentation",
                description="Select the indentation type",
                items=(("0", "None", "No indentation"),
    
                       ("1", "Tabs", "Indentation with tabs"),
                       ("2", "Spaces", "Indentation with spaces")),
    
                default="2")
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                name="Quantity of spaces",
                description="The number of spaces for indentation",
    
                min=1, max=10, default=4)
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                name="Enable Comments",
    
                description="Add comments to pov file",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                default=True)
    
    
        # Real pov options
    
        command_line_switches = StringProperty(
                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",
    
                name="Anti-Alias", description="Enable Anti-Aliasing",
                default=True)
    
                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",
    
                items=(("0", "non-recursive AA", "Type 1 Sampling in POV-Ray"),
    
                       ("1", "recursive AA", "Type 2 Sampling in POV-Ray")),
    
                default="1")
    
                name="Antialias Depth", description="Depth of pixel for sampling",
                min=1, max=9, default=3)
    
                name="Antialias Threshold", description="Tolerance for sub-pixels",
                min=0.0, max=1.0, soft_min=0.05, soft_max=0.5, default=0.1)
    
        jitter_enable = BoolProperty(
                name="Jitter",
                description="Enable Jittering. Adds noise into the sampling process (it should be " \
    
                            "avoided to use jitter in animation)",
    
                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(
                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)
    
        max_trace_level = IntProperty(
                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)
    
        photon_spacing = FloatProperty(
                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, default=0.005, precision=3)
    
    
        photon_max_trace_level = IntProperty(
                name="Max Trace Level",
                description="Number of reflections/refractions allowed on ray path",
    
                min=1, max=256, default=5)
    
    
        photon_adc_bailout = FloatProperty(
                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, default=0.1, precision=3)
    
    
                name="Gather Min", description="Minimum number of photons gathered for each point",
                min=1, max=256, default=20)
    
    
                name="Gather Max", description="Maximum number of photons gathered for each point",
                min=1, max=256, default=100)
    
        radio_adc_bailout = FloatProperty(
                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.01, precision=3)
    
        radio_always_sample = BoolProperty(
                name="Always Sample",
                description="Only use the data from the pretrace step and not gather " \
                            "any new samples during the final radiosity pass",
    
                default=True)
    
    
        radio_brightness = FloatProperty(
                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(
                name="Ray Count",
                description="Number of rays for each new radiosity value to be calculated " \
                            "(halton sequence over 1600)",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                min=1, max=10000, soft_max=1600, default=35)
    
        radio_error_bound = FloatProperty(
                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(
                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(
                name="Low Error Factor",
                description="Just enough samples is slightly blotchy. Low error changes error " \
                            "tolerance for less critical last refining pass",
    
                min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=0.5)
    
        # max_sample - not available yet
    
                name="Media", description="Radiosity estimation can be affected by media",
                default=False)
    
    
        radio_minimum_reuse = FloatProperty(
                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_nearest_count = IntProperty(
                name="Nearest Count",
                description="Number of old ambient values blended together to " \
                            "create a new interpolated value",
    
                min=1, max=20, default=5)
    
    
                name="Normals", description="Radiosity estimation can be affected by normals",
                default=False)
    
    
        radio_recursion_limit = IntProperty(
                name="Recursion Limit",
                description="how many recursion levels are used to calculate " \
                            "the diffuse inter-reflection",
    
                min=1, max=20, default=3)
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
        radio_pretrace_start = FloatProperty(
                name="Pretrace Start",
                description="Fraction of the screen width which sets the size of the " \
                            "blocks in the mosaic preview first pass",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                min=0.01, max=1.00, soft_min=0.02, soft_max=1.0, default=0.08)
    
    
        radio_pretrace_end = FloatProperty(
                name="Pretrace End",
                description="Fraction of the screen width which sets the size of the blocks " \
                            "in the mosaic preview last pass",
    
                min=0.001, 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 RenderPovSettingsMaterial(bpy.types.PropertyGroup):
        irid_enable = BoolProperty(
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                name="Enable Iridescence",
    
                description="Newton's thin film interference (like an oil slick on a puddle of " \
                            "water or the rainbow hues of a soap bubble.)",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                name="Correct Reflection",
    
                description="Use same IOR as raytrace transparency to calculate mirror reflections. " \
                            "More physically correct",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                default=False)
    
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                name="Metallic Reflection",
                description="mirror reflections get colored as diffuse (for metallic materials)",
                default=False)
    
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                name="Conserve Energy",
    
                description="Light transmitted is more correctly reduced by mirror reflections, " \
                            "also the sum of diffuse and translucency gets reduced below one ",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                default=True)
    
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                name="amount",
    
                description="Contribution of the iridescence effect to the overall surface color. " \
                            "As a rule of thumb keep to around 0.25 (25% contribution) or less, " \
                            "but experiment. If the surface is coming out too white, try lowering " \
    
                            "the diffuse and possibly the ambient values of the surface",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                min=0.0, max=1.0, soft_min=0.01, soft_max=1.0, default=0.25)
    
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                name="thickness",
    
                description="A very thin film will have a high frequency of color changes while a " \
    
                            "thick film will have large areas of color",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                min=0.0, max=1000.0, soft_min=0.1, soft_max=10.0, default=1)
    
    
                name="turbulence", description="This parameter varies the thickness",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                min=0.0, max=10.0, soft_min=0.000, soft_max=1.0, default=0)
    
    
        interior_fade_color = FloatVectorProperty(
                name="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",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                default=True)
    
    
        fake_caustics = BoolProperty(
                name="Fake Caustics", description="use only (Fast) fake refractive caustics",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                default=True)
    
    
    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",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                min=0.00, max=10.0, soft_min=0.00, soft_max=1.10, default=0.1)
    
    
        photons_refraction = BoolProperty(
                name="Refractive Photon Caustics", description="more physically correct",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                default=False)
    
    
                description="Light passing through will be separated according to wavelength. " \
                            "This ratio of refractive indices for violet to red controls how much " \
                            "the colors are spread out 1 = no dispersion, good values are 1.01 to 1.1",
    
                min=1.0000, max=10.000, soft_min=1.0000, soft_max=1.1000, precision=4, default=1.0000)
    
        photons_dispersion_samples = IntProperty(
                name="Dispersion Samples", description="Number of color-steps for dispersion",
                min=2, max=128, default=7)
    
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                name="Reflective Photon Caustics",
                description="Use this to make your Sauron's ring ;-P",
                default=False)
    
    
                items=[("0", "None", "use only reflective caustics"),
                       ("1", "Fake Caustics", "use fake caustics"),
    
                       ("2", "Photons Caustics", "use photons for refractive caustics")],
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                name="Refractive",
                description="use fake caustics (fast) or true photons for refractive Caustics",
    
        ##################################CustomPOV Code############################
        replacement_text = StringProperty(
    
                description="Type the declared name in custom POV code or an external " \
                            ".inc it points at. texture {} expected",
    
    ###############################################################################
    # Texture POV properties.
    ###############################################################################
    class RenderPovSettingsTexture(bpy.types.PropertyGroup):
    
        #Custom texture gamma
    
                name="Enable custom texture gamma",
    
                description="Notify some custom gamma for which texture has been precorrected " \
                            "without the file format carrying it and only if it differs from your " \
                            "OS expected standard (see pov doc)",
    
                name="Custom texture gamma",
                description="value for which the file was issued e.g. a Raw photo is gamma 1.0",
                min=0.45, max=5.00, soft_min=1.00, soft_max=2.50, default=1.00)
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
    
    
        ##################################CustomPOV Code############################
        #Only DUMMIES below for now:
        replacement_text = StringProperty(
                name="Declared name:",
                description="Type the declared name in custom POV code or an external .inc " \
                            "it points at. pigment {} expected",
                default="")
    
    
    ###############################################################################
    # Object POV properties.
    ###############################################################################
    class RenderPovSettingsObject(bpy.types.PropertyGroup):
    
        #Importance sampling
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                name="Radiosity Importance",
    
                description="Priority value relative to other objects for sampling radiosity rays. " \
                            "Increase to get more radiosity rays at comparatively small yet " \
                            "bright objects",
    
    Maurice Raybaud's avatar
    Maurice Raybaud committed
                min=0.01, max=1.00, default=1.00)
    
        #Collect photons
    
                name="Receive Photon Caustics",
    
                description="Enable object to collect photons from other objects caustics. Turn " \
                            "off for objects that don't really need to receive caustics (e.g. objects" \
    
                            " that generate caustics often don't need to show any on themselves)",
    
                default=True)
    
        #Photons spacing_multiplier
        spacing_multiplier = FloatProperty(
                name="Photons Spacing Multiplier",
                description="Multiplier value relative to global spacing of photons. " \
                            "Decrease by half to get 4x more photons at surface of " \
                            "this object (or 8x media photons than specified in the globals",
                min=0.01, max=1.00, default=1.00)
    
    
        ##################################CustomPOV Code############################
        #Only DUMMIES below for now:
        replacement_text = StringProperty(
                name="Declared name:",
                description="Type the declared name in custom POV code or an external .inc " \
                            "it points at. Any POV shape expected e.g: isosurface {}",
                default="")
    
    
    ###############################################################################
    # Camera POV properties.
    ###############################################################################
    class RenderPovSettingsCamera(bpy.types.PropertyGroup):
    
        dof_enable = BoolProperty(
                name="Depth Of Field", description="EnablePOV-Ray Depth Of Field ",
    
    
        #Aperture (Intensity of the Blur)
    
                name="Aperture",
    
                description="Similar to a real camera's aperture effect over focal blur (though not " \
                            "in physical units and independant of focal length). " \
                            "Increase to get more blur",
    
                min=0.01, max=1.00, default=0.25)
    
        #Aperture adaptive sampling
    
        dof_samples_min = IntProperty(
                name="Samples Min", description="Minimum number of rays to use for each pixel",
    
                min=1, max=128, default=96)
    
    
        dof_samples_max = IntProperty(
                name="Samples Max", description="Maximum number of rays to use for each pixel",
    
                min=1, max=128, default=128)
    
    
                name="Variance",
    
                description="Minimum threshold (fractional value) for adaptive DOF sampling (up " \
                            "increases quality and render time). The value for the variance should " \
                            "be in the range of the smallest displayable color difference",
    
                min=1, max=100000, soft_max=10000, default=256)
    
                name="Confidence",
    
                description="Probability to reach the real color value. Larger confidence values " \
    
                            "will lead to more samples, slower traces and better images",
    
                min=0.01, max=0.99, default=0.90)
    
    
        ##################################CustomPOV Code############################
        #Only DUMMIES below for now:
        replacement_text = StringProperty(
                name="Texts in blend file",
                description="Type the declared name in custom POV code or an external .inc " \
                            "it points at. camera {} expected",
                default="")
    
    
    ###############################################################################
    # Text POV properties.
    ###############################################################################
    class RenderPovSettingsText(bpy.types.PropertyGroup):
        custom_code = BoolProperty(
    
                name="Custom Code",
                description="Add this text at the top of the exported POV-Ray file",
                default=False)
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    
    
    def register():
        bpy.utils.register_module(__name__)
    
        bpy.types.Scene.pov = PointerProperty(type=RenderPovSettingsScene)
        bpy.types.Material.pov = PointerProperty(type=RenderPovSettingsMaterial)
        bpy.types.Texture.pov = PointerProperty(type=RenderPovSettingsTexture)
        bpy.types.Object.pov = PointerProperty(type=RenderPovSettingsObject)
        bpy.types.Camera.pov = PointerProperty(type=RenderPovSettingsCamera)
        bpy.types.Text.pov = PointerProperty(type=RenderPovSettingsText)
    
    
        del bpy.types.Scene.pov
        del bpy.types.Material.pov
        del bpy.types.Texture.pov
        del bpy.types.Object.pov
        del bpy.types.Camera.pov
        del bpy.types.Text.pov
    
    
    Luca Bonavita's avatar
    Luca Bonavita committed
    if __name__ == "__main__":
        register()