diff options
Diffstat (limited to 'render_povray/__init__.py')
-rw-r--r-- | render_povray/__init__.py | 531 |
1 files changed, 531 insertions, 0 deletions
diff --git a/render_povray/__init__.py b/render_povray/__init__.py new file mode 100644 index 00000000..792b9930 --- /dev/null +++ b/render_povray/__init__.py @@ -0,0 +1,531 @@ +# ##### 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 ##### + +# <pep8 compliant> + +bl_info = { + "name": "POV-Ray 3.7", + "author": "Campbell Barton, Silvio Falcinelli, Maurice Raybaud, Constantin Rahn, Bastien Montagne", + "version": (0, 0, 9), + "blender": (2, 5, 7), + "api": 35622, + "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.5/Py/"\ + "Scripts/Render/PovRay", + "tracker_url": "https://projects.blender.org/tracker/index.php?"\ + "func=detail&aid=23145", + "category": "Render"} + +if "bpy" in locals(): + import imp + imp.reload(ui) + imp.reload(render) + imp.reload(update_files) + +else: + import bpy + from bpy.props import StringProperty, BoolProperty, IntProperty, FloatProperty, \ + FloatVectorProperty, EnumProperty, PointerProperty + from . import ui + from . import render + from . import update_files + + +############################################################################### +# Scene POV properties. +############################################################################### +class RenderPovSettingsScene(bpy.types.PropertyGroup): + # File Options + tempfiles_enable = BoolProperty( + name="Enable Tempfiles", + description="Enable the OS-Tempfiles. Otherwise set the path where to save the files.", + default=True) + deletefiles_enable = BoolProperty( + name="Delete files", + description="Delete files after rendering. Doesn't work with the image.", + default=True) + scene_name = StringProperty( + name="Scene Name", + description="Name of POV-Ray scene to create. Empty name will use the name of " \ + "the blend file.", + default="", maxlen=1024) + scene_path = StringProperty( + 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") + renderimage_path = StringProperty( + name="Rendered image path", + description="Full path to directory where the rendered image is saved.", + default="", maxlen=1024, subtype="DIR_PATH") + list_lf_enable = BoolProperty( + 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( + name="Enable Radiosity", + description="Enable POV-Rays radiosity calculation", + default=False) + radio_display_advanced = BoolProperty( + name="Advanced Options", + description="Show advanced options", + default=False) + media_enable = BoolProperty( + 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) + + media_color = FloatVectorProperty( + 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( + name="Enable Baking", + description="Enable POV-Rays texture baking", + default=False) + indentation_character = EnumProperty( + name="Indentation", + description="Select the indentation type", + items=(("0", "None", "No indentation"), + ("1", "Tabs", "Indentation with tabs"), + ("2", "Spaces", "Indentation with spaces")), + default="2") + indentation_spaces = IntProperty( + name="Quantity of spaces", + description="The number of spaces for indentation", + min=1, max=10, default=4) + + comments_enable = BoolProperty( + name="Enable Comments", + description="Add comments to pov file", + 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.", + default="", maxlen=500) + + antialias_enable = BoolProperty( + name="Anti-Alias", description="Enable Anti-Aliasing", + default=True) + + antialias_method = EnumProperty( + 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") + + antialias_depth = IntProperty( + name="Antialias Depth", description="Depth of pixel for sampling", + min=1, max=9, default=3) + + antialias_threshold = FloatProperty( + 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).", + default=True) + + jitter_amount = FloatProperty( + 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", + 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) + + photon_gather_min = IntProperty( + name="Gather Min", description="Minimum number of photons gathered for each point", + min=1, max=256, default=20) + + photon_gather_max = IntProperty( + 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)", + 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 + radio_media = BoolProperty( + 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) + + radio_normal = BoolProperty( + 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) + + 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", + 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) + + +############################################################################### +# Material POV properties. +############################################################################### +class RenderPovSettingsMaterial(bpy.types.PropertyGroup): + irid_enable = BoolProperty( + 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.)", + default=False) + + mirror_use_IOR = BoolProperty( + name="Correct Reflection", + description="Use same IOR as raytrace transparency to calculate mirror reflections. " \ + "More physically correct", + default=False) + + mirror_metallic = BoolProperty( + name="Metallic Reflection", + description="mirror reflections get colored as diffuse (for metallic materials)", + default=False) + + conserve_energy = BoolProperty( + 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( + 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( + 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( + 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( + 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( + name="Caustics", + description="use only fake refractive caustics (default) or photon based " \ + "reflective/refractive caustics", + default=True) + + fake_caustics = BoolProperty( + name="Fake Caustics", description="use only (Fast) fake refractive caustics", + default=True) + + fake_caustics_power = FloatProperty( + 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=1.10, default=0.1) + + photons_refraction = BoolProperty( + name="Refractive Photon Caustics", description="more physically correct", + default=False) + + photons_dispersion = FloatProperty( + 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( + name="Dispersion Samples", description="Number of color-steps for dispersion", + min=2, max=128, default=7) + + photons_reflection = BoolProperty( + name="Reflective Photon Caustics", + description="Use this to make your Sauron's ring ;-P", + default=False) + + refraction_type = EnumProperty( + items=[("0", "None", "use only reflective caustics"), + ("1", "Fake Caustics", "use fake caustics"), + ("2", "Photons Caustics", "use photons for refractive caustics")], + name="Refractive", + description="use fake caustics (fast) or true photons for refractive Caustics", + default="1") + + ##################################CustomPOV Code############################ + replacement_text = StringProperty( + name="Declared name:", + description="Type the declared name in custom POV code or an external " \ + ".inc it points at. texture {} expected", + default="") + + +############################################################################### +# Texture POV properties. +############################################################################### +class RenderPovSettingsTexture(bpy.types.PropertyGroup): + #Custom texture gamma + tex_gamma_enable = BoolProperty( + 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)", + default=False) + + tex_gamma_value = FloatProperty( + 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) + + ##################################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 + importance_value = FloatProperty( + 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", + min=0.01, max=1.00, default=1.00) + + #Collect photons + collect_photons = BoolProperty( + 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 Toggle + dof_enable = BoolProperty( + name="Depth Of Field", description="EnablePOV-Ray Depth Of Field ", + default=True) + + #Aperture (Intensity of the Blur) + dof_aperture = FloatProperty( + 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) + + dof_variance = IntProperty( + 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) + + dof_confidence = FloatProperty( + 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) + + +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) + + +def unregister(): + bpy.utils.unregister_module(__name__) + + 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 + + +if __name__ == "__main__": + register() |