diff options
Diffstat (limited to 'render_povray/render_properties.py')
-rwxr-xr-x | render_povray/render_properties.py | 687 |
1 files changed, 687 insertions, 0 deletions
diff --git a/render_povray/render_properties.py b/render_povray/render_properties.py new file mode 100755 index 00000000..9096c986 --- /dev/null +++ b/render_povray/render_properties.py @@ -0,0 +1,687 @@ +# ##### 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> +"""Declare rendering properties controllable in UI""" + +import bpy +from bpy.utils import register_class, unregister_class +from bpy.types import PropertyGroup +from bpy.props import ( + BoolProperty, + IntProperty, + FloatProperty, + FloatVectorProperty, + StringProperty, + EnumProperty, + PointerProperty, +) + +############################################################################### +# Scene POV properties. +############################################################################### +class RenderPovSettingsScene(PropertyGroup): + + """Declare scene level properties controllable in UI and translated to POV""" + + # Linux SDL-window enable + sdl_window_enable: BoolProperty( + name="Enable SDL window", description="Enable the SDL window in Linux OS", default=True + ) + # File Options + text_block: StringProperty( + 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( + name="Enable Tempfiles", + description="Enable the OS-Tempfiles. Otherwise set the path where to save the files", + default=True, + ) + pov_editor: BoolProperty( + name="POV editor", + description="Don't Close POV editor after rendering (Overridden by /EXIT command)", + default=False, + ) + 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 scene to create. Empty name will use " + "the name of the blend file", + maxlen=1024, + ) + scene_path: StringProperty( + 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( + name="Rendered image path", + description="Full path to directory where the rendered image is saved", + 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=False, + ) + + # Not a real pov option, just to know if we should write + radio_enable: BoolProperty( + name="Enable Radiosity", description="Enable POV radiosity calculation", default=True + ) + + radio_display_advanced: BoolProperty( + name="Advanced Options", description="Show advanced options", default=False + ) + + media_enable: BoolProperty( + name="Enable Media", description="Enable POV 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_scattering_type: EnumProperty( + 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( + name="Scale", + description="Scale factor of Media Diffusion Color", + precision=6, + step=0.00000001, + min=0.000000001, + max=1.0, + default=(1.0), + ) + + media_diffusion_color: FloatVectorProperty( + 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( + name="Scale", + description="Scale factor of Media Absorption Color. " + "use 1/depth of media volume in meters", + precision=6, + step=0.000001, + min=0.000000001, + max=1.0, + default=(0.00002), + ) + + media_absorption_color: FloatVectorProperty( + 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( + 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( + name="Enable Baking", description="Enable POV texture baking", default=False + ) + + indentation_character: EnumProperty( + name="Indentation", + description="Select the indentation type", + items=( + ("NONE", "None", "No indentation"), + ("TAB", "Tabs", "Indentation with tabs"), + ("SPACE", "Spaces", "Indentation with spaces"), + ), + default="SPACE", + ) + + 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", + 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 (as in the plain old render " + "bigger and scale down trick. Type 2 is a slightly " + "more efficient adaptive and recursive super-sampling. " + "Type 3 is a stochastic halton based super-sampling method so " + "rather artifact free and sampling rays so depth of field can " + "use them at no additional cost, as do area lights and " + "subsurface scattering materials, making it the best " + "quality / time trade-off in complex scenes", + 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( + name="Antialias Confidence", + description="how surely the computed color " + "of a given pixel is indeed" + "within the threshold error margin", + min=0.0001, + max=1.0000, + default=0.9900, + precision=4, + ) + + antialias_depth: IntProperty( + name="Antialias Depth", description="Depth of pixel for sampling", min=1, max=9, default=2 + ) + + 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.03, + ) + + jitter_enable: BoolProperty( + 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( + 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, + ) + + alpha_mode: EnumProperty( + 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( + name="Shadows", description="Calculate shadows while rendering", default=True + ) + + max_trace_level: IntProperty( + name="Max Trace Level", + description="Number of reflections/refractions allowed on ray " "path", + min=1, + max=256, + default=5, + ) + + adc_bailout_enable: BoolProperty(name="Enable", description="", default=False) + + adc_bailout: FloatProperty( + name="ADC Bailout", + description="Adaptive Depth Control (ADC) to stop computing additional" + "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. ", + min=0.0, + max=1000.0, + default=0.00392156862745, + precision=3, + ) + + ambient_light_enable: BoolProperty(name="Enable", description="", default=False) + + ambient_light: FloatVectorProperty( + 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(name="Advanced", description="", default=False) + + irid_wavelength_enable: BoolProperty(name="Enable", description="", default=False) + + irid_wavelength: FloatVectorProperty( + name="Irid Wavelength", + description=( + "Iridescence calculations depend upon the dominant " + "wavelengths of the primary colors of red, green and blue light" + ), + precision=4, + step=0.01, + min=0, + soft_max=1, + default=(0.25, 0.18, 0.14), + options={"ANIMATABLE"}, + subtype="COLOR", + ) + + number_of_waves_enable: BoolProperty(name="Enable", description="", default=False) + + number_of_waves: IntProperty( + 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(name="Enable", description="", default=False) + + noise_generator: IntProperty( + name="Noise Generator", + description="There are three noise generators implemented", + min=1, + max=3, + default=2, + ) + + ########################### PHOTONS ####################################### + photon_enable: BoolProperty(name="Photons", description="Enable global photons", default=False) + + photon_enable_count: BoolProperty( + name="Spacing / Count", description="Enable count photons", default=False + ) + + photon_count: IntProperty( + name="Count", description="Photons count", min=1, max=100000000, default=20000 + ) + + 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, + precision=3, + default=0.005, + ) + + 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, + precision=3, + default=0.1, + ) + + 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, + ) + + photon_map_file_save_load: EnumProperty( + name="Operation", + description="Load or Save photon map file", + items=(("NONE", "None", ""), ("save", "Save", ""), ("load", "Load", "")), + default="NONE", + ) + + photon_map_filename: StringProperty(name="Filename", description="", maxlen=1024) + + photon_map_dir: StringProperty( + name="Directory", description="", maxlen=1024, subtype="DIR_PATH" + ) + + photon_map_file: StringProperty(name="File", description="", maxlen=1024, subtype="FILE_PATH") + + #########RADIOSITY######## + 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.0039, + precision=4, + ) + + 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=False, + ) + + 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=10.0, + ) + + 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.000001, + max=1.0, + soft_min=0.000001, + soft_max=1.0, + default=0.5, + ) + + radio_media: BoolProperty( + name="Media", description="Radiosity estimation can be affected by media", default=True + ) + + radio_subsurface: BoolProperty( + name="Subsurface", + description="Radiosity estimation can be affected by Subsurface Light Transport", + 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_maximum_reuse: FloatProperty( + 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( + 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( + 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=1, + ) + + 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.005, + max=1.00, + soft_min=0.02, + soft_max=1.0, + default=0.04, + ) + # XXX TODO set automatically to pretrace_end = 8 / max (image_width, image_height) + # for non advanced mode + 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.000925, + max=1.00, + soft_min=0.01, + soft_max=1.00, + default=0.004, + precision=3, + ) + + +classes = (RenderPovSettingsScene,) + + +def register(): + for cls in classes: + register_class(cls) + bpy.types.Scene.pov = PointerProperty(type=RenderPovSettingsScene) + + +def unregister(): + del bpy.types.Scene.pov + for cls in reversed(classes): + unregister_class(cls) |