Newer
Older
# ##### 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",
Maurice Raybaud
committed
"author": "Campbell Barton, Silvio Falcinelli, Maurice Raybaud, Constantin Rahn, Bastien Montagne",
Bastien Montagne
committed
"version": (0, 0, 9),
Jonathan Smith
committed
"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",
Campbell Barton
committed
"wiki_url": "http://wiki.blender.org/index.php/Extensions:2.6/Py/"
"Scripts/Render/POV-Ray",
"tracker_url": "https://projects.blender.org/tracker/index.php?"
"func=detail&aid=23145",
import imp
imp.reload(ui)
imp.reload(render)
Bastien Montagne
committed
imp.reload(update_files)
from bpy.types import (AddonPreferences,
PropertyGroup,
)
Campbell Barton
committed
from bpy.props import (StringProperty,
BoolProperty,
IntProperty,
FloatProperty,
FloatVectorProperty,
EnumProperty,
PointerProperty,
)
Bastien Montagne
committed
from . import render
from . import update_files
Maurice Raybaud
committed
Bastien Montagne
committed
###############################################################################
# Scene POV properties.
###############################################################################
class RenderPovSettingsScene(PropertyGroup):
Bastien Montagne
committed
tempfiles_enable = BoolProperty(
description="Enable the OS-Tempfiles. Otherwise set the path where to save the files",
Bastien Montagne
committed
deletefiles_enable = BoolProperty(
description="Delete files after rendering. Doesn't work with the image",
Bastien Montagne
committed
scene_name = StringProperty(
Campbell Barton
committed
description="Name of POV-Ray scene to create. Empty name will use the name of "
"the blend file",
Bastien Montagne
committed
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",
maxlen=1024, subtype="DIR_PATH")
Bastien Montagne
committed
renderimage_path = StringProperty(
description="Full path to directory where the rendered image is saved",
maxlen=1024, subtype="DIR_PATH")
Bastien Montagne
committed
list_lf_enable = BoolProperty(
Campbell Barton
committed
description="Enable line breaks in lists (vectors and indices). Disabled: "
"lists are exported in one line",
# Not a real pov option, just to know if we should write
Bastien Montagne
committed
radio_enable = BoolProperty(
description="Enable POV-Rays radiosity calculation",
Bastien Montagne
committed
radio_display_advanced = BoolProperty(
name="Advanced Options",
description="Show advanced options",
default=False)
Bastien Montagne
committed
media_enable = BoolProperty(
name="Enable Media",
description="Enable POV-Rays atmospheric media",
default=False)
Bastien Montagne
committed
media_samples = IntProperty(
name="Samples",
Campbell Barton
committed
description="Number of samples taken from camera to first object "
Bastien Montagne
committed
"encountered along ray path for media calculation",
min=1, max=100, default=35)
Bastien Montagne
committed
media_color = FloatVectorProperty(
name="Media Color", description="The atmospheric media color",
Bastien Montagne
committed
precision=4, step=0.01, min=0, soft_max=1,
default=(0.001, 0.001, 0.001), options={'ANIMATABLE'}, subtype='COLOR')
baking_enable = BoolProperty(
description="Enable POV-Rays texture baking",
Bastien Montagne
committed
indentation_character = EnumProperty(
name="Indentation",
description="Select the indentation type",
Campbell Barton
committed
items=(('NONE', "None", "No indentation"),
('TAB', "Tabs", "Indentation with tabs"),
('SPACE', "Spaces", "Indentation with spaces")),
default='SPACE')
Bastien Montagne
committed
indentation_spaces = IntProperty(
name="Quantity of spaces",
description="The number of spaces for indentation",
Bastien Montagne
committed
comments_enable = BoolProperty(
Constantin Rahn
committed
description="Add comments to pov file",
Bastien Montagne
committed
command_line_switches = StringProperty(
name="Command Line Switches",
Campbell Barton
committed
description="Command line switches consist of a + (plus) or - (minus) sign, followed "
"by one or more alphabetic characters and possibly a numeric value",
Bastien Montagne
committed
antialias_enable = BoolProperty(
name="Anti-Alias", description="Enable Anti-Aliasing",
default=True)
Bastien Montagne
committed
antialias_method = EnumProperty(
Campbell Barton
committed
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"),
Bastien Montagne
committed
("1", "recursive AA", "Type 2 Sampling in POV-Ray")),
Bastien Montagne
committed
antialias_depth = IntProperty(
name="Antialias Depth", description="Depth of pixel for sampling",
min=1, max=9, default=3)
Bastien Montagne
committed
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)
Bastien Montagne
committed
jitter_enable = BoolProperty(
name="Jitter",
Campbell Barton
committed
description="Enable Jittering. Adds noise into the sampling process (it should be "
"avoided to use jitter in animation)",
Bastien Montagne
committed
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)
Bastien Montagne
committed
antialias_gamma = FloatProperty(
name="Antialias Gamma",
Campbell Barton
committed
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)
Bastien Montagne
committed
max_trace_level = IntProperty(
name="Max Trace Level",
description="Number of reflections/refractions allowed on ray path",
Bastien Montagne
committed
photon_spacing = FloatProperty(
name="Spacing",
Campbell Barton
committed
description="Average distance between photons on surfaces. half this get four times "
Bastien Montagne
committed
"as many surface photons",
min=0.001, max=1.000, soft_min=0.001, soft_max=1.000, default=0.005, precision=3)
Bastien Montagne
committed
photon_max_trace_level = IntProperty(
name="Max Trace Level",
description="Number of reflections/refractions allowed on ray path",
Bastien Montagne
committed
photon_adc_bailout = FloatProperty(
name="ADC Bailout",
Campbell Barton
committed
description="The adc_bailout for photons. Use adc_bailout = "
Bastien Montagne
committed
"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)
Bastien Montagne
committed
photon_gather_min = IntProperty(
name="Gather Min", description="Minimum number of photons gathered for each point",
min=1, max=256, default=20)
Bastien Montagne
committed
photon_gather_max = IntProperty(
name="Gather Max", description="Maximum number of photons gathered for each point",
min=1, max=256, default=100)
Bastien Montagne
committed
radio_adc_bailout = FloatProperty(
name="ADC Bailout",
Campbell Barton
committed
description="The adc_bailout for radiosity rays. Use "
Bastien Montagne
committed
"adc_bailout = 0.01 / brightest_ambient_object for good results",
Maurice Raybaud
committed
min=0.0, max=1000.0, soft_min=0.0, soft_max=1.0, default=0.01, precision=3)
Bastien Montagne
committed
radio_always_sample = BoolProperty(
name="Always Sample",
Campbell Barton
committed
description="Only use the data from the pretrace step and not gather "
Bastien Montagne
committed
"any new samples during the final radiosity pass",
Bastien Montagne
committed
radio_brightness = FloatProperty(
name="Brightness",
Campbell Barton
committed
description="Amount objects are brightened before being returned "
Bastien Montagne
committed
"upwards to the rest of the system",
min=0.0, max=1000.0, soft_min=0.0, soft_max=10.0, default=1.0)
Bastien Montagne
committed
radio_count = IntProperty(
name="Ray Count",
Campbell Barton
committed
description="Number of rays for each new radiosity value to be calculated "
Bastien Montagne
committed
"(halton sequence over 1600)",
Bastien Montagne
committed
radio_error_bound = FloatProperty(
name="Error Bound",
Campbell Barton
committed
description="One of the two main speed/quality tuning values, "
Bastien Montagne
committed
"lower values are more accurate",
min=0.0, max=1000.0, soft_min=0.1, soft_max=10.0, default=1.8)
Bastien Montagne
committed
radio_gray_threshold = FloatProperty(
name="Gray Threshold",
Campbell Barton
committed
description="One of the two main speed/quality tuning values, "
Bastien Montagne
committed
"lower values are more accurate",
min=0.0, max=1.0, soft_min=0, soft_max=1, default=0.0)
Bastien Montagne
committed
radio_low_error_factor = FloatProperty(
name="Low Error Factor",
Campbell Barton
committed
description="Just enough samples is slightly blotchy. Low error changes error "
Bastien Montagne
committed
"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
Bastien Montagne
committed
radio_media = BoolProperty(
name="Media", description="Radiosity estimation can be affected by media",
default=False)
Bastien Montagne
committed
radio_minimum_reuse = FloatProperty(
name="Minimum Reuse",
Campbell Barton
committed
description="Fraction of the screen width which sets the minimum radius of reuse "
Bastien Montagne
committed
"for each sample point (At values higher than 2% expect errors)",
Maurice Raybaud
committed
min=0.0, max=1.0, soft_min=0.1, soft_max=0.1, default=0.015, precision=3)
Bastien Montagne
committed
radio_nearest_count = IntProperty(
name="Nearest Count",
Campbell Barton
committed
description="Number of old ambient values blended together to "
Bastien Montagne
committed
"create a new interpolated value",
Bastien Montagne
committed
radio_normal = BoolProperty(
name="Normals", description="Radiosity estimation can be affected by normals",
default=False)
Bastien Montagne
committed
radio_recursion_limit = IntProperty(
name="Recursion Limit",
Campbell Barton
committed
description="how many recursion levels are used to calculate "
Bastien Montagne
committed
"the diffuse inter-reflection",
Bastien Montagne
committed
radio_pretrace_start = FloatProperty(
name="Pretrace Start",
Campbell Barton
committed
description="Fraction of the screen width which sets the size of the "
Bastien Montagne
committed
"blocks in the mosaic preview first pass",
min=0.01, max=1.00, soft_min=0.02, soft_max=1.0, default=0.08)
Bastien Montagne
committed
radio_pretrace_end = FloatProperty(
name="Pretrace End",
Campbell Barton
committed
description="Fraction of the screen width which sets the size of the blocks "
Bastien Montagne
committed
"in the mosaic preview last pass",
Maurice Raybaud
committed
min=0.001, max=1.00, soft_min=0.01, soft_max=1.00, default=0.04, precision=3)
Maurice Raybaud
committed
Bastien Montagne
committed
###############################################################################
# Material POV properties.
###############################################################################
class RenderPovSettingsMaterial(PropertyGroup):
Bastien Montagne
committed
irid_enable = BoolProperty(
Campbell Barton
committed
description="Newton's thin film interference (like an oil slick on a puddle of "
Bastien Montagne
committed
"water or the rainbow hues of a soap bubble.)",
Bastien Montagne
committed
mirror_use_IOR = BoolProperty(
Campbell Barton
committed
description="Use same IOR as raytrace transparency to calculate mirror reflections. "
Bastien Montagne
committed
"More physically correct",
Bastien Montagne
committed
mirror_metallic = BoolProperty(
name="Metallic Reflection",
description="mirror reflections get colored as diffuse (for metallic materials)",
default=False)
Bastien Montagne
committed
conserve_energy = BoolProperty(
Campbell Barton
committed
description="Light transmitted is more correctly reduced by mirror reflections, "
Bastien Montagne
committed
"also the sum of diffuse and translucency gets reduced below one ",
Bastien Montagne
committed
irid_amount = FloatProperty(
Campbell Barton
committed
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)
Bastien Montagne
committed
irid_thickness = FloatProperty(
Campbell Barton
committed
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)
Bastien Montagne
committed
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)
Bastien Montagne
committed
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(
Campbell Barton
committed
description="use only fake refractive caustics (default) or photon based "
Bastien Montagne
committed
"reflective/refractive caustics",
Bastien Montagne
committed
fake_caustics = BoolProperty(
name="Fake Caustics", description="use only (Fast) fake refractive caustics",
Bastien Montagne
committed
fake_caustics_power = FloatProperty(
Campbell Barton
committed
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 "
Bastien Montagne
committed
"tighter, smaller simulated focal points",
min=0.00, max=10.0, soft_min=0.00, soft_max=1.10, default=0.1)
Bastien Montagne
committed
photons_refraction = BoolProperty(
name="Refractive Photon Caustics", description="more physically correct",
Bastien Montagne
committed
photons_dispersion = FloatProperty(
Maurice Raybaud
committed
name="Chromatic Dispersion",
Campbell Barton
committed
description="Light passing through will be separated according to wavelength. "
"This ratio of refractive indices for violet to red controls how much "
Bastien Montagne
committed
"the colors are spread out 1 = no dispersion, good values are 1.01 to 1.1",
Maurice Raybaud
committed
min=1.0000, max=10.000, soft_min=1.0000, soft_max=1.1000, precision=4, default=1.0000)
Maurice Raybaud
committed
photons_dispersion_samples = IntProperty(
name="Dispersion Samples", description="Number of color-steps for dispersion",
min=2, max=128, default=7)
Bastien Montagne
committed
photons_reflection = BoolProperty(
name="Reflective Photon Caustics",
description="Use this to make your Sauron's ring ;-P",
default=False)
Bastien Montagne
committed
refraction_type = EnumProperty(
items=[("0", "None", "use only reflective caustics"),
("1", "Fake Caustics", "use fake caustics"),
Bastien Montagne
committed
("2", "Photons Caustics", "use photons for refractive caustics")],
name="Refractive",
description="use fake caustics (fast) or true photons for refractive Caustics",
Maurice Raybaud
committed
default="1")
Bastien Montagne
committed
##################################CustomPOV Code############################
replacement_text = StringProperty(
Campbell Barton
committed
name="Declared name:",
Campbell Barton
committed
description="Type the declared name in custom POV code or an external "
Bastien Montagne
committed
".inc it points at. texture {} expected",
Maurice Raybaud
committed
default="")
Bastien Montagne
committed
###############################################################################
# Texture POV properties.
###############################################################################
class RenderPovSettingsTexture(PropertyGroup):
Bastien Montagne
committed
tex_gamma_enable = BoolProperty(
name="Enable custom texture gamma",
Campbell Barton
committed
description="Notify some custom gamma for which texture has been precorrected "
"without the file format carrying it and only if it differs from your "
Bastien Montagne
committed
"OS expected standard (see pov doc)",
Bastien Montagne
committed
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)
Bastien Montagne
committed
##################################CustomPOV Code############################
#Only DUMMIES below for now:
replacement_text = StringProperty(
name="Declared name:",
Campbell Barton
committed
description="Type the declared name in custom POV code or an external .inc "
Bastien Montagne
committed
"it points at. pigment {} expected",
default="")
Bastien Montagne
committed
###############################################################################
# Object POV properties.
###############################################################################
class RenderPovSettingsObject(PropertyGroup):
Campbell Barton
committed
# Importance sampling
Bastien Montagne
committed
importance_value = FloatProperty(
Campbell Barton
committed
description="Priority value relative to other objects for sampling radiosity rays. "
"Increase to get more radiosity rays at comparatively small yet "
Bastien Montagne
committed
"bright objects",
Campbell Barton
committed
# Collect photons
Bastien Montagne
committed
collect_photons = BoolProperty(
Campbell Barton
committed
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)",
Campbell Barton
committed
# Photons spacing_multiplier
Maurice Raybaud
committed
spacing_multiplier = FloatProperty(
name="Photons Spacing Multiplier",
Campbell Barton
committed
description="Multiplier value relative to global spacing of photons. "
"Decrease by half to get 4x more photons at surface of "
Maurice Raybaud
committed
"this object (or 8x media photons than specified in the globals",
min=0.01, max=1.00, default=1.00)
Bastien Montagne
committed
##################################CustomPOV Code############################
Campbell Barton
committed
# Only DUMMIES below for now:
Bastien Montagne
committed
replacement_text = StringProperty(
name="Declared name:",
Campbell Barton
committed
description="Type the declared name in custom POV code or an external .inc "
Bastien Montagne
committed
"it points at. Any POV shape expected e.g: isosurface {}",
default="")
Bastien Montagne
committed
###############################################################################
# Camera POV properties.
###############################################################################
class RenderPovSettingsCamera(PropertyGroup):
Bastien Montagne
committed
dof_enable = BoolProperty(
name="Depth Of Field", description="EnablePOV-Ray Depth Of Field ",
Campbell Barton
committed
# Aperture (Intensity of the Blur)
Bastien Montagne
committed
dof_aperture = FloatProperty(
Campbell Barton
committed
description="Similar to a real camera's aperture effect over focal blur (though not "
"in physical units and independant of focal length). "
Bastien Montagne
committed
"Increase to get more blur",
min=0.01, max=1.00, default=0.25)
Campbell Barton
committed
# Aperture adaptive sampling
Bastien Montagne
committed
dof_samples_min = IntProperty(
name="Samples Min", description="Minimum number of rays to use for each pixel",
min=1, max=128, default=96)
Bastien Montagne
committed
dof_samples_max = IntProperty(
name="Samples Max", description="Maximum number of rays to use for each pixel",
min=1, max=128, default=128)
Bastien Montagne
committed
dof_variance = IntProperty(
Campbell Barton
committed
description="Minimum threshold (fractional value) for adaptive DOF sampling (up "
"increases quality and render time). The value for the variance should "
Bastien Montagne
committed
"be in the range of the smallest displayable color difference",
min=1, max=100000, soft_max=10000, default=256)
Bastien Montagne
committed
dof_confidence = FloatProperty(
Campbell Barton
committed
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)
Bastien Montagne
committed
##################################CustomPOV Code############################
Campbell Barton
committed
# Only DUMMIES below for now:
Bastien Montagne
committed
replacement_text = StringProperty(
name="Texts in blend file",
Campbell Barton
committed
description="Type the declared name in custom POV code or an external .inc "
Bastien Montagne
committed
"it points at. camera {} expected",
default="")
Maurice Raybaud
committed
Bastien Montagne
committed
###############################################################################
# Text POV properties.
###############################################################################
class RenderPovSettingsText(PropertyGroup):
Bastien Montagne
committed
custom_code = BoolProperty(
Maurice Raybaud
committed
name="Custom Code",
description="Add this text at the top of the exported POV-Ray file",
default=False)
###############################################################################
# Povray Preferences.
###############################################################################
class PovrayPreferences(AddonPreferences):
bl_idname = __name__
filepath_povray = StringProperty(
name="Povray Location",
description="Path to renderer executable",
subtype='FILE_PATH',
)
def draw(self, context):
layout = self.layout
layout.prop(self, "filepath_povray")
Bastien Montagne
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)
Bastien Montagne
committed
def unregister():
Campbell Barton
committed
bpy.utils.unregister_module(__name__)
Bastien Montagne
committed
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
Campbell Barton
committed