Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'render_povray/__init__.py')
-rwxr-xr-x[-rw-r--r--]render_povray/__init__.py5745
1 files changed, 251 insertions, 5494 deletions
diff --git a/render_povray/__init__.py b/render_povray/__init__.py
index da7296a9..58f6040d 100644..100755
--- a/render_povray/__init__.py
+++ b/render_povray/__init__.py
@@ -24,29 +24,83 @@ These engines can be POV-Ray or Uberpov but others too, since POV is a
Scene Description Language. The script has been split in as few files
as possible :
-___init__.py :
+__init__.py :
Initialize properties
-update_files.py
- Update new variables to values from older API. This file needs an update
-
-ui.py :
+base_ui.py :
Provide property buttons for the user to set up the variables
-primitives.py :
+scenography_properties.py
+ Initialize properties for translating Blender cam/light/environment parameters to pov
+
+scenography_gui.py
+ Display cam/light/environment properties from situation_properties.py for user to change them
+
+scenography.py
+ Translate cam/light/environment properties to corresponding pov features
+
+object_properties.py :
+ nitialize properties for translating Blender objects parameters to pov
+
+object_primitives.py :
Display some POV native primitives in 3D view for input and output
+object_mesh_topology.py :
+ Translate to POV the meshes geometries
+
+object_curve_topology.py :
+ Translate to POV the curve based geometries
+
+object_particles.py :
+ Translate to POV the particle based geometries
+
+object_gui.py :
+ Display properties from object_properties.py for user to change them
+
+shading_properties.py
+ Initialize properties for translating Blender materials parameters to pov
+
+shading_nodes.py
+ Translate node trees to the pov file
+
+shading_gui.py
+ Display properties from shading_properties.py for user to change them
+
shading.py
Translate shading properties to declared textures at the top of a pov file
-nodes.py
- Translate node trees to the pov file
+texturing_properties.py
+ Initialize properties for translating Blender materials /world... texture influences to pov
-df3.py
- Render smoke to *.df3 files
+texturing_gui.py
+ Display properties from texturing_properties.py for user to change them
+
+texturing.py
+ Translate blender texture influences into POV
+
+render_properties.py :
+ Initialize properties for render parameters (Blender and POV native)
+
+render_gui.py :
+ Display properties from render_properties.py for user to change them
render.py :
- Translate geometry and UI properties (Blender and POV native) to the POV file
+ Translate render properties (Blender and POV native) to POV, ini file and bash
+
+scripting_properties.py :
+ Initialize properties for scene description language parameters (POV native)
+
+scripting_gui.py :
+ Display properties from scripting_properties.py for user to add his custom POV code
+
+scripting.py :
+ Insert POV native scene description elements to exported POV file
+
+df3_library.py
+ Render smoke to *.df3 files
+
+update_files.py
+ Update new variables to values from older API. This file needs an update
Along these essential files also coexist a few additional libraries to help make
@@ -99,5417 +153,187 @@ Blender stand up to other POV IDEs such as povwin or QTPOV
bl_info = {
"name": "Persistence of Vision",
"author": "Campbell Barton, "
- "Maurice Raybaud, "
- "Leonid Desyatkov, "
- "Bastien Montagne, "
- "Constantin Rahn, "
- "Silvio Falcinelli",
- "version": (0, 1, 1),
+ "Maurice Raybaud, "
+ "Leonid Desyatkov, "
+ "Bastien Montagne, "
+ "Constantin Rahn, "
+ "Silvio Falcinelli,"
+ "Paco García",
+ "version": (0, 1, 2),
"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",
"category": "Render",
- "warning": "Under active development, seeking co-maintainer(s)",
+ "warning": "Co-maintainers welcome",
}
+# Other occasional contributors, more or less in chronological order:
+# Luca Bonavita ; Shane Ambler ; Brendon Murphy ; Doug Hammond ;
+# Thomas Dinges ; Jonathan Smith ; Sebastian Nell ; Philipp Oeser ;
+# Sybren A. Stüvel ; Dalai Felinto ; Sergey Sharybin ; Brecht Van Lommel ;
+# Stephen Leger ; Rune Morling ; Aaron Carlisle ; Ankit Meel ;
+
if "bpy" in locals():
import importlib
- importlib.reload(ui)
- importlib.reload(nodes)
+ importlib.reload(base_ui)
+ importlib.reload(shading_nodes)
+ importlib.reload(scenography_properties)
+ importlib.reload(scenography)
+ importlib.reload(render_properties)
+ importlib.reload(render_gui)
importlib.reload(render)
+ importlib.reload(shading_properties)
+ importlib.reload(shading_gui)
importlib.reload(shading)
- importlib.reload(primitives)
+ importlib.reload(texturing_properties)
+ importlib.reload(texturing_gui)
+ importlib.reload(texturing)
+ importlib.reload(object_properties)
+ importlib.reload(object_gui)
+ importlib.reload(object_mesh_topology)
+ importlib.reload(object_curve_topology)
+ importlib.reload(object_primitives)
+ importlib.reload(scripting_gui)
importlib.reload(update_files)
else:
import bpy
from bpy.utils import register_class, unregister_class
- # 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
- from bpy.types import (
- AddonPreferences,
- PropertyGroup,
- NodeSocket,
- )
-
- from bpy.props import (
- FloatVectorProperty,
- StringProperty,
- BoolProperty,
- IntProperty,
- FloatProperty,
- EnumProperty,
- PointerProperty,
- CollectionProperty,
- )
- from . import ui, render, update_files
-
-
-def string_strip_hyphen(name):
-
- """Remove hyphen characters from a string to avoid POV errors"""
-
- return name.replace("-", "")
-
-def pov_context_tex_datablock(context):
- """Texture context type recreated as deprecated in blender 2.8"""
-
- idblock = context.brush
- if idblock and context.scene.texture_context == 'OTHER':
- return idblock
-
- # idblock = bpy.context.active_object.active_material
- idblock = context.view_layer.objects.active.active_material
- if idblock and context.scene.texture_context == 'MATERIAL':
- return idblock
-
- idblock = context.world
- if idblock and context.scene.texture_context == 'WORLD':
- return idblock
-
- idblock = context.light
- if idblock and context.scene.texture_context == 'LIGHT':
- return idblock
-
- if context.particle_system and context.scene.texture_context == 'PARTICLES':
- idblock = context.particle_system.settings
-
- return idblock
-
- idblock = context.line_style
- if idblock and context.scene.texture_context == 'LINESTYLE':
- return idblock
-
-def brush_texture_update(self, context):
-
- """Brush texture rolldown must show active slot texture props"""
- idblock = pov_context_tex_datablock(context)
- if idblock is not None:
- #mat = context.view_layer.objects.active.active_material
- idblock = pov_context_tex_datablock(context)
- slot = idblock.pov_texture_slots[idblock.pov.active_texture_index]
- tex = slot.texture
-
- if tex:
- # Switch paint brush to active texture so slot and settings remain contextual
- bpy.context.tool_settings.image_paint.brush.texture = bpy.data.textures[tex]
- bpy.context.tool_settings.image_paint.brush.mask_texture = bpy.data.textures[tex]
-
-def active_texture_name_from_uilist(self, context):
-
- idblock = pov_context_tex_datablock(context)
- #mat = context.view_layer.objects.active.active_material
- if idblock is not None:
- index = idblock.pov.active_texture_index
- name = idblock.pov_texture_slots[index].name
- newname = idblock.pov_texture_slots[index].texture
- tex = bpy.data.textures[name]
- tex.name = newname
- idblock.pov_texture_slots[index].name = newname
-
-
-def active_texture_name_from_search(self, context):
- """Texture rolldown to change the data linked by an existing texture"""
- idblock = pov_context_tex_datablock(context)
- #mat = context.view_layer.objects.active.active_material
- if idblock is not None:
- index = idblock.pov.active_texture_index
- slot = idblock.pov_texture_slots[index]
- name = slot.texture_search
-
- try:
- tex = bpy.data.textures[name]
- slot.name = name
- slot.texture = name
- # Switch paint brush to this texture so settings remain contextual
- #bpy.context.tool_settings.image_paint.brush.texture = tex
- #bpy.context.tool_settings.image_paint.brush.mask_texture = tex
- except:
- pass
-
-
-
-###############################################################################
-# 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=True,
- )
-
- # 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 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(
- 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=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.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'
- )
- # 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(
- name="Enable",
- description="",
- default=False,
- )
-
- max_intersections: IntProperty(
- 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(
- 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
- )
+ from bpy.props import StringProperty, BoolProperty, EnumProperty
- 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
+ from . import (
+ base_ui,
+ render_properties,
+ scenography_properties,
+ shading_properties,
+ texturing_properties,
+ object_properties,
+ scripting_properties,
+ render,
+ object_primitives, # for import and export of POV specific primitives
+ update_files,
)
###############################################################################
-# Material POV properties.
+# Auto update.
###############################################################################
-class MaterialTextureSlot(PropertyGroup):
- """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",
-
- # Adding a "real" texture datablock as property is not possible
- # (or at least not easy through a dynamically populated EnumProperty).
- # That's why we'll use a prop_search() UILayout function in ui.py.
- # So we'll assign the name of the needed texture datablock to the below StringProperty.
- texture : StringProperty(update=active_texture_name_from_uilist)
- # and use another temporary StringProperty to change the linked data
- texture_search : StringProperty(
- name="",
- update = active_texture_name_from_search,
- description = "Browse Texture to be linked",
- )
-
- alpha_factor: FloatProperty(
- name="Alpha",
- description="Amount texture affects alpha",
- default = 1.0,
- )
-
- ambient_factor: FloatProperty(
- name="",
- description="Amount texture affects ambient",
- default = 1.0,
- )
-
- bump_method: EnumProperty(
- 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(
- 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(
- name="",
- description="Amount texture affects density",
- default = 1.0,
- )
-
- diffuse_color_factor: FloatProperty(
- name="",
- description="Amount texture affects diffuse color",
- default = 1.0,
- )
-
- diffuse_factor: FloatProperty(
- name="",
- description="Amount texture affects diffuse reflectivity",
- default = 1.0,
- )
-
- displacement_factor: FloatProperty(
- name="",
- description="Amount texture displaces the surface",
- default = 0.2,
- )
-
- emission_color_factor: FloatProperty(
- name="",
- description="Amount texture affects emission color",
- default = 1.0,
- )
-
- emission_factor: FloatProperty(
- name="",
- description="Amount texture affects emission",
- default = 1.0,
- )
-
- emit_factor: FloatProperty(
- name="",
- description="Amount texture affects emission",
- default = 1.0,
- )
-
- hardness_factor: FloatProperty(
- name="",
- description="Amount texture affects hardness",
- default = 1.0,
- )
-
- mapping: EnumProperty(
- name="",
- description="",
- items=(("FLAT", "Flat", ""),
- ("CUBE", "Cube", ""),
- ("TUBE", "Tube", ""),
- ("SPHERE", "Sphere", "")),
- default="FLAT",
- )
-
- mapping_x: EnumProperty(
- name="",
- description="",
- items=(("NONE", "", ""),
- ("X", "", ""),
- ("Y", "", ""),
- ("Z", "", "")),
- default="NONE",
- )
-
- mapping_y: EnumProperty(
- name="",
- description="",
- items=(("NONE", "", ""),
- ("X", "", ""),
- ("Y", "", ""),
- ("Z", "", "")),
- default="NONE",
- )
-
- mapping_z: EnumProperty(
- name="",
- description="",
- items=(("NONE", "", ""),
- ("X", "", ""),
- ("Y", "", ""),
- ("Z", "", "")),
- default="NONE",
- )
-
- mirror_factor: FloatProperty(
- name="",
- description="Amount texture affects mirror color",
- default = 1.0,
- )
-
- normal_factor: FloatProperty(
- name="",
- description="Amount texture affects normal values",
- default = 1.0,
- )
-
- normal_map_space: EnumProperty(
- name="",
- description="Sets space of normal map image",
- items=(("CAMERA", "Camera", ""),
- ("WORLD", "World", ""),
- ("OBJECT", "Object", ""),
- ("TANGENT", "Tangent", "")),
- default="CAMERA",
- )
-
- object: StringProperty(
- name="Object",
- description="Object to use for mapping with Object texture coordinates",
- default ="",
- )
-
- raymir_factor: FloatProperty(
- name="",
- description="Amount texture affects ray mirror",
- default = 1.0,
- )
-
- reflection_color_factor: FloatProperty(
- name="",
- description="Amount texture affects color of out-scattered light",
- default = 1.0,
- )
-
- reflection_factor: FloatProperty(
- name="",
- description="Amount texture affects brightness of out-scattered light",
- default = 1.0,
- )
-
- scattering_factor: FloatProperty(
- name="",
- description="Amount texture affects scattering",
- default = 1.0,
- )
-
- specular_color_factor: FloatProperty(
- name="",
- description="Amount texture affects specular color",
- default = 1.0,
- )
-
- specular_factor: FloatProperty(
- name="",
- description="Amount texture affects specular reflectivity",
- default = 1.0,
- )
-
- offset: FloatVectorProperty(
- name="Offset",
- description=("Fine tune of the texture mapping X, Y and Z locations "),
- precision=4,
- step=0.1,
- soft_min= -100.0,
- soft_max=100.0,
- default=(0.0,0.0,0.0),
- options={'ANIMATABLE'},
- subtype='TRANSLATION',
- )
-
- scale: FloatVectorProperty(
- name="Size",
- subtype='XYZ',
- size=3,
- description="Set scaling for the texture’s X, Y and Z sizes ",
- precision=4,
- step=0.1,
- soft_min= -100.0,
- soft_max=100.0,
- default=(1.0,1.0,1.0),
- options={'ANIMATABLE'},
- )
-
-
- texture_coords: EnumProperty(
- name="",
- description="",
- items=(
- ("GLOBAL", "Global", ""),
- ("OBJECT", "Object", ""),
- ("UV", "UV", ""),
- ("ORCO", "Original Coordinates", ""),
- ("STRAND", "Strand", ""),
- ("STICKY", "Sticky", ""),
- ("WINDOW", "Window", ""),
- ("NORMAL", "Normal", ""),
- ("REFLECTION", "Reflection", ""),
- ("STRESS", "Stress", ""),
- ("TANGENT", "Tangent", "")
- ),
- default="GLOBAL",
- )
-
- translucency_factor: FloatProperty(
- name="",
- description="Amount texture affects translucency",
- default = 1.0,
- )
-
- transmission_color_factor: FloatProperty(
- name="",
- description="Amount texture affects result color after light has been scattered/absorbed",
- default = 1.0,
- )
-
- use: BoolProperty(
- name="",
- description="Enable this material texture slot",
- default = True,
- )
-
- use_from_dupli: BoolProperty(
- name="",
- description="Dupli’s instanced from verts, faces or particles, inherit texture coordinate from their parent",
- default = False,
- )
-
- use_from_original: BoolProperty(
- name="",
- description="Dupli’s derive their object coordinates from the original objects transformation",
- default = False,
- )
-
- use_interpolation: BoolProperty(
- name="",
- description="Interpolates pixels using selected filter ",
- default = False,
- )
-
- use_map_alpha: BoolProperty(
- name="",
- description="Causes the texture to affect the alpha value",
- default = False,
- )
-
- use_map_ambient: BoolProperty(
- name="",
- description="Causes the texture to affect the value of ambient",
- default = False,
- )
-
- use_map_color_diffuse: BoolProperty(
- name="",
- description="Causes the texture to affect basic color of the material",
- default = True,
- )
-
- use_map_color_emission: BoolProperty(
- name="",
- description="Causes the texture to affect the color of emission",
- default = False,
- )
-
- use_map_color_reflection: BoolProperty(
- name="",
- description="Causes the texture to affect the color of scattered light",
- default = False,
- )
-
- use_map_color_spec: BoolProperty(
- name="",
- description="Causes the texture to affect the specularity color",
- default = False,
- )
-
- use_map_color_transmission: BoolProperty(
- name="",
- description="Causes the texture to affect the result color after other light has been scattered/absorbed",
- default = False,
- )
-
- use_map_density: BoolProperty(
- name="",
- description="Causes the texture to affect the volume’s density",
- default = False,
- )
-
- use_map_diffuse: BoolProperty(
- name="",
- description="Causes the texture to affect the value of the materials diffuse reflectivity",
- default = False,
- )
-
- use_map_displacement: BoolProperty(
- name="",
- description="Let the texture displace the surface",
- default = False,
- )
-
- use_map_emission: BoolProperty(
- name="",
- description="Causes the texture to affect the volume’s emission",
- default = False,
- )
-
- use_map_emit: BoolProperty(
- name="",
- description="Causes the texture to affect the emit value",
- default = False,
- )
-
- use_map_hardness: BoolProperty(
- name="",
- description="Causes the texture to affect the hardness value",
- default = False,
- )
-
- use_map_mirror: BoolProperty(
- name="",
- description="Causes the texture to affect the mirror color",
- default = False,
- )
-
- use_map_normal: BoolProperty(
- name="",
- description="Causes the texture to affect the rendered normal",
- default = False,
- )
-
- use_map_raymir: BoolProperty(
- name="",
- description="Causes the texture to affect the ray-mirror value",
- default = False,
- )
-
- use_map_reflect: BoolProperty(
- name="",
- description="Causes the texture to affect the reflected light’s brightness",
- default = False,
- )
-
- use_map_scatter: BoolProperty(
- name="",
- description="Causes the texture to affect the volume’s scattering",
- default = False,
- )
-
- use_map_specular: BoolProperty(
- name="",
- description="Causes the texture to affect the value of specular reflectivity",
- default = False,
- )
-
- use_map_translucency: BoolProperty(
- name="",
- description="Causes the texture to affect the translucency value",
- default = False,
- )
-
- use_map_warp: BoolProperty(
- name="",
- description="Let the texture warp texture coordinates of next channels",
- default = False,
- )
-
- uv_layer: StringProperty(
- name="",
- description="UV layer to use for mapping with UV texture coordinates",
- default = "",
- )
-
- warp_factor: FloatProperty(
- name="",
- description="Amount texture affects texture coordinates of next channels",
- default = 0.0,
- )
-
-
-#######################################
-
- blend_factor: FloatProperty(
- 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(
- name="Horizon",
- description="Amount texture affects color of the horizon"
- "",
- soft_min=0.0, soft_max=1.0, default=1.0
- )
-
- object: StringProperty(
- name="Object",
- description="Object to use for mapping with Object texture coordinates",
- default="",
- )
-
- texture_coords: EnumProperty(
- name="Coordinates",
- description="Texture coordinates used to map the texture onto the background",
- 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")
- ),
- default="VIEW",
- )
-
- use_map_blend: BoolProperty(
- name="Blend Map",
- description="Affect the color progression of the background",
- default=True,
- )
-
- use_map_horizon: BoolProperty(
- name="Horizon Map",
- description="Affect the color of the horizon",
- default=False,
- )
-
- use_map_zenith_down: BoolProperty(
- name="", description="Affect the color of the zenith below",
- default=False,
- )
-
- use_map_zenith_up: BoolProperty(
- name="Zenith Up Map", description="Affect the color of the zenith above",
- default=False,
- )
-
- zenith_down_factor: FloatProperty(
- 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(
- name="Zenith Up",
- description="Amount texture affects color of the zenith above",
- soft_min=0.0, soft_max=1.0, default=1.0
- )
-
-
-# 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(
- name="",
- description="Use the limited version of texture user (for ‘old shading’ mode)",
- default=True,
-)
-bpy.types.ID.texture_context = EnumProperty(
- name="Texture context",
- description="Type of texture data to display and edit",
- 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"
- ),
- default = 'MATERIAL',
-)
-
-# bpy.types.ID.active_texture_index = IntProperty(
- # name = "Index for texture_slots",
- # default = 0,
-# )
-
-class RenderPovSettingsMaterial(PropertyGroup):
- """Declare material level properties controllable in UI and translated to POV."""
-
- ######################Begin Old Blender Internal Props#########################
- # former Space properties from removed Blender Internal
- use_limited_texture_context: BoolProperty(
- name="",
- description="Use the limited version of texture user (for ‘old shading’ mode)",
- default=True,
- )
- texture_context: EnumProperty(
- name="Texture context",
- description="Type of texture data to display and edit",
- 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"
- ),
- default = 'MATERIAL',
- )
-
- active_texture_index: IntProperty(
- name = "Index for texture_slots",
- default = 0,
- update = brush_texture_update
- )
-
- transparency_method: EnumProperty(
- name="Specular Shader Model",
- description="Method to use for rendering transparency",
- items=(
- ("MASK", "Mask", "Mask the background"),
- ("Z_TRANSPARENCY", "Z Transparency", "Use alpha buffer for transparent faces"),
- ("RAYTRACE", "Raytrace", "Use raytracing for transparent refraction rendering")
- ),
- default="MASK",
- )
-
- use_transparency: BoolProperty(
- name="Transparency",
- description="Render material as transparent",
- default=False,
- )
-
- alpha: FloatProperty(
- 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,
- )
-
- specular_alpha: FloatProperty(
- 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,
- )
-
- ambient: FloatProperty(
- 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(
- 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',
- )
-
- darkness: FloatProperty(
- 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(
- 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(
- 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(
- 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(
- name="Diffuse ramp blend",
- description="Blending method of the ramp and the diffuse color",
- 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", "")
- ),
- default="MIX",
- )
-
- diffuse_ramp_factor: FloatProperty(
- 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(
- name="Input",
- description="How the ramp maps on the surface",
- items=(
- ("SHADER", "Shader", ""),
- ("ENERGY", "Energy", ""),
- ("NORMAL", "Normal", ""),
- ("RESULT", "Result", "")
- ),
- default="SHADER",
- )
-
- diffuse_shader: EnumProperty(
- name="Diffuse Shader Model",
- description="How the ramp maps on the surface",
- 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")
- ),
- default="LAMBERT",
- )
-
- diffuse_toon_size: FloatProperty(
- 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(
- 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,
- )
-
- emit: FloatProperty(
- 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(
- 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'
- )
-
- roughness: FloatProperty(
- 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,
- )
-
- halo: BoolProperty(
- name="Halo",
- description=" Halo settings for the material",
- default=False,
- )
- # (was readonly in Blender2.79, never None)
-
- line_color: FloatVectorProperty(
- 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)
-
- line_priority: IntProperty(
- 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(
- 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'
- )
-
- specular_hardness: IntProperty(
- name="Hardness",
- description="How hard (sharp) the specular reflection is",
- min=1, max=511, default=50,
- )
-
- specular_intensity: FloatProperty(
- 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(
- 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(
- 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
- )
-
- specular_shader: EnumProperty(
- name="Specular Shader Model",
- description="How the ramp maps on the surface",
- 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")
- ),
- default="COOKTORR",
- )
-
- specular_slope: FloatProperty(
- 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(
- 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(
- 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(
- 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(
- name="Specular Shader Model",
- description="Method to use for rendering transparency",
- 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")
- ),
- default="MASK",
- )
-
- type: EnumProperty(
- name="Type",
- description="Material type defining how the object is rendered",
- 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
- default="SURFACE",
- )
-
- use_cast_shadows: BoolProperty(
- name="Cast",
- description="Allow this material to cast shadows",
- default=True,
- )
-
- use_cast_shadows_only: BoolProperty(
- name="Cast Only",
- description="Make objects with this material "
- "appear invisible (not rendered), only "
- "casting shadows",
- default=False,
- )
-
- use_cubic: BoolProperty(
- name="Cubic Interpolation",
- description="Use cubic interpolation for diffuse "
- "values, for smoother transitions",
- default=False,
- )
-
- use_diffuse_ramp: BoolProperty(
- name="Ramp",
- description="Toggle diffuse ramp operations",
- default=False,
- )
-
- use_light_group_exclusive: BoolProperty(
- name="Exclusive",
- description="Material uses the light group exclusively"
- "- these lamps are excluded from other "
- "scene lighting",
- default=False,
- )
-
- use_light_group_local: BoolProperty(
- name="Local",
- description="When linked in, material uses local light"
- " group with the same name",
- default=False,
- )
-
- use_mist: BoolProperty(
- name="Use Mist",
- description="Use mist with this material "
- "(in world settings)",
- default=True,
- )
-
- use_nodes: BoolProperty(
- name="Nodes",
- description="Use shader nodes to render the material",# Add Icon in UI or here? icon='NODES'
- default=False,
- )
-
- use_object_color: BoolProperty(
- name="Object Color",
- description="Modulate the result with a per-object color",
- default=False,
- )
-
- use_only_shadow: BoolProperty(
- 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(
- name="Shadeless",
- description="Make this material insensitive to "
- "light or shadow",
- default=False,
- )
-
- use_shadows: BoolProperty(
- name="Receive",
- description="Allow this material to receive shadows",
- default=True,
- )
-
- use_sky: BoolProperty(
- name="Sky",
- description="Render this material with zero alpha, "
- "with sky background in place (scanline only)",
- default=False,
- )
-
- use_specular_ramp: BoolProperty(
- name="Ramp",
- description="Toggle specular ramp operations",
- default=False,
- )
-
- use_tangent_shading: BoolProperty(
- 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(
- 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(
- name="Vertex Color Light",
- description="Add vertex colors as additional lighting",
- default=False,
- )
-
- use_vertex_color_paint: BoolProperty(
- 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(
- name="Specular ramp blend",
- description="Blending method of the ramp and the specular color",
- 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", "")
- ),
- default="MIX",
- )
-
- specular_ramp_factor: FloatProperty(
- 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(
- name="Input",
- description="How the ramp maps on the surface",
- items=(
- ("SHADER", "Shader", ""),
- ("ENERGY", "Energy", ""),
- ("NORMAL", "Normal", ""),
- ("RESULT", "Result", "")
- ),
- default="SHADER",
- )
-
-
- irid_enable: BoolProperty(
- 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(
- 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="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(
- 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=5.0, default=0.15
- )
-
- refraction_caustics: BoolProperty(
- name="Refractive Caustics",
- description="hotspots of light focused when going through the material",
- default=True,
- )
-
- 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=[
- ("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(
- name="Declared name:",
- description="Type the declared name in custom POV code or an external "
- ".inc it points at. texture {} expected",
- default="",
- )
-
-
- # NODES
-
- 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
+class POV_OT_update_addon(bpy.types.Operator):
+ """Update this addon to the latest version."""
+
+ bl_idname = "pov.update_addon"
+ bl_label = "Update POV addon"
+
+ def execute(self, context):
+ import os, tempfile, shutil, urllib.request, urllib.error, zipfile
+
+ def recursive_overwrite(src, dest, ignore=None):
+ if os.path.isdir(src):
+ if not os.path.isdir(dest):
+ os.makedirs(dest)
+ files = os.listdir(src)
+ if ignore is not None:
+ ignored = ignore(src, files)
+ else:
+ ignored = set()
+ for f in files:
+ if f not in ignored:
+ recursive_overwrite(os.path.join(src, f), os.path.join(dest, f), ignore)
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
- 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
-
- 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,
- )
-
-
-class MaterialRaytraceTransparency(PropertyGroup):
- """Declare transparency panel properties controllable in UI and translated to POV."""
-
- depth: IntProperty(
- name="Depth",
- description="Maximum allowed number of light inter-refractions",
- min=0, max=32767, default=2
- )
-
- depth_max: FloatProperty(
- 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(
- 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(
- 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(
- 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(
- 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(
- 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(
- name="Samples",
- description="frequency of the noise sample used for blurry refractions",
- min=0, max=1024, default=18
- )
-
- gloss_threshold: FloatProperty(
- 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(
- 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):
- """Declare reflection panel properties controllable in UI and translated to POV."""
-
- bl_description = "Raytraced reflection settings for the Material",
-
- use: BoolProperty(
- name="Mirror",
- description="Enable raytraced reflections",
- default=False,
- )
-
-
- depth: IntProperty(
- name="Depth",
- description="Maximum allowed number of light inter-reflections",
- min=0, max=32767, default=2
- )
-
- distance: FloatProperty(
- 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
- )
-
- fade_to: EnumProperty(
- 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",
- )
-
- fresnel: FloatProperty(
- 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,
- )
-
- fresnel_factor: FloatProperty(
- 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(
- 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
- )
-
- gloss_factor: FloatProperty(
- name="Amount",
- description="The shininess of the reflection "
- "(values < 1.0 give diffuse, blurry reflections)",
- min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=1.0, precision=3
- )
-
- gloss_samples: IntProperty(
- name="Noise",
- description="Frequency of the noise pattern bumps averaged for blurry reflections",
- min=0, max=1024, default=18,
- )
-
- gloss_threshold: FloatProperty(
- 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
- )
-
- mirror_color: FloatVectorProperty(
- name="Mirror color",
- description=("Mirror color of the material"),
- precision=4, step=0.01,
- default=(1.0,1.0,1.0), options={'ANIMATABLE'}, subtype='COLOR'
- )
-
- reflect_factor: FloatProperty(
- name="Reflectivity",
- description="Amount of mirror reflection for raytrace",
- min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=1.0, precision=3
- )
-
-
-class MaterialSubsurfaceScattering(PropertyGroup):
- r"""Declare SSS/SSTL properties controllable in UI and translated to POV."""
-
- bl_description = "Subsurface scattering settings for the material",
-
- use: BoolProperty(
- name="Subsurface Scattering",
- description="Enable diffuse subsurface scatting "
- "effects in a material",
- default=False,
- )
-
- back: FloatProperty(
- name="Back",
- description="Back scattering weight",
- min=0.0, max=10.0, soft_min=0.0, soft_max=10.0, default=1.0, precision=3
- )
-
- color: FloatVectorProperty(
- name="Scattering color",
- description=("Scattering color"),
- precision=4, step=0.01,
- default=(0.604,0.604,0.604), options={'ANIMATABLE'}, subtype='COLOR'
- )
-
- color_factor: FloatProperty(
- name="Color",
- description="Blend factor for SSS colors",
- min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=1.0, precision=3
- )
-
- error_threshold: FloatProperty(
- name="Error",
- description="Error tolerance (low values are slower and higher quality)",
- default=0.050, precision=3
- )
-
- front: FloatProperty(
- name="Front",
- description="Front scattering weight",
- min=0.0, max=2.0, soft_min=0.0, soft_max=2.0, default=1.0, precision=3
- )
-
- ior: FloatProperty(
- name="IOR",
- description="Index of refraction (higher values are denser)",
- min=-0.0, max=10.0, soft_min=0.1, soft_max=2.0, default=1.3
- )
-
- radius: FloatVectorProperty(
- name="RGB Radius",
- description=("Mean red/green/blue scattering path length"),
- precision=4, step=0.01, min=0.001,
- default=(1.0,1.0,1.0), options={'ANIMATABLE'}
- )
-
- scale: FloatProperty(
- name="Scale",
- description="Object scale factor",
- default=0.100, precision=3
- )
-
- texture_factor: FloatProperty(
- name="Texture",
- description="Texture scattering blend factor",
- min=0.0, max=1.0, soft_min=0.0, soft_max=1.0, default=0.0, precision=3
- )
-
-
-class MaterialStrandSettings(PropertyGroup):
- """Declare strand properties controllable in UI and translated to POV."""
-
- bl_description = "Strand settings for the material",
-
- blend_distance: FloatProperty(
- name="Distance",
- description="Worldspace distance over which to blend in the surface normal",
- min=0.0, max=10.0, soft_min=0.0, soft_max=10.0, default=0.0, precision=3
- )
-
- root_size: FloatProperty(
- name="Root",
- description="Start size of strands in pixels or Blender units",
- min=0.25, default=1.0, precision=5
- )
-
- shape: FloatProperty(
- name="Shape",
- description="Positive values make strands rounder, negative ones make strands spiky",
- min=-0.9, max=0.9, default=0.0, precision=3
- )
-
- size_min: FloatProperty(
- name="Minimum",
- description="Minimum size of strands in pixels",
- min=0.001, max=10.0, default=1.0, precision=3
- )
-
- tip_size: FloatProperty(
- name="Tip",
- description="End size of strands in pixels or Blender units",
- min=0.0, default=1.0, precision=5
- )
-
- use_blender_units: BoolProperty(
- name="Blender Units",
- description="Use Blender units for widths instead of pixels",
- default=False,
- )
-
- use_surface_diffuse: BoolProperty(
- name="Surface diffuse",
- description="Make diffuse shading more similar to shading the surface",
- default=False,
- )
-
- use_tangent_shading: BoolProperty(
- name="Tangent Shading",
- description="Use direction of strands as normal for tangent-shading",
- default=True,
- )
-
- uv_layer: StringProperty(
- name="UV Layer",
- # icon="GROUP_UVS",
- description="Name of UV map to override",
- default="",
- )
-
- width_fade: FloatProperty(
- name="Width Fade",
- description="Transparency along the width of the strand",
- min=0.0, max=2.0, default=0.0, precision=3
- )
-
- # halo
-
- # Halo settings for the material
- # Type: MaterialHalo, (readonly, never None)
-
- # ambient
-
- # Amount of global ambient color the material receives
- # Type: float in [0, 1], default 0.0
-
- # darkness
-
- # Minnaert darkness
- # Type: float in [0, 2], default 0.0
-
- # diffuse_color
-
- # Diffuse color of the material
- # Type: float array of 3 items in [0, inf], default (0.0, 0.0, 0.0)
-
- # diffuse_fresnel
-
- # Power of Fresnel
- # Type: float in [0, 5], default 0.0
-
- # diffuse_fresnel_factor
-
- # Blending factor of Fresnel
- # Type: float in [0, 5], default 0.0
-
- # diffuse_intensity
-
- # Amount of diffuse reflection
- # Type: float in [0, 1], default 0.0
-
- # diffuse_ramp
-
- # Color ramp used to affect diffuse shading
- # Type: ColorRamp, (readonly)
-
- # diffuse_ramp_blend
-
- # Blending method of the ramp and the diffuse color
- # Type: enum in [‘MIX’, ‘ADD’, ‘MULTIPLY’, ‘SUBTRACT’, ‘SCREEN’, ‘DIVIDE’, ‘DIFFERENCE’, ‘DARKEN’, ‘LIGHTEN’, ‘OVERLAY’, ‘DODGE’, ‘BURN’, ‘HUE’, ‘SATURATION’, ‘VALUE’, ‘COLOR’, ‘SOFT_LIGHT’, ‘LINEAR_LIGHT’], default ‘MIX’
-
- # diffuse_ramp_factor
-
- # Blending factor (also uses alpha in Colorband)
- # Type: float in [0, 1], default 0.0
-
- # diffuse_ramp_input
-
- # How the ramp maps on the surface
- # Type: enum in [‘SHADER’, ‘ENERGY’, ‘NORMAL’, ‘RESULT’], default ‘SHADER’
-
- # diffuse_shader
-
- # LAMBERT Lambert, Use a Lambertian shader.
- # OREN_NAYAR Oren-Nayar, Use an Oren-Nayar shader.
- # TOON Toon, Use a toon shader.
- # MINNAERT Minnaert, Use a Minnaert shader.
- # FRESNEL Fresnel, Use a Fresnel shader.
-
- # Type: enum in [‘LAMBERT’, ‘OREN_NAYAR’, ‘TOON’, ‘MINNAERT’, ‘FRESNEL’], default ‘LAMBERT’
-
- # diffuse_toon_size
-
- # Size of diffuse toon area
- # Type: float in [0, 3.14], default 0.0
-
- # diffuse_toon_smooth
-
- # Smoothness of diffuse toon area
- # Type: float in [0, 1], default 0.0
-
- # emit
-
- # Amount of light to emit
- # Type: float in [0, inf], default 0.0
-
- # game_settings
-
- # Game material settings
- # Type: MaterialGameSettings, (readonly, never None)
-
- # halo
-
- # Halo settings for the material
- # Type: MaterialHalo, (readonly, never None)
-
- # invert_z
-
- # Render material’s faces with an inverted Z buffer (scanline only)
- # Type: boolean, default False
-
- # light_group
-
- # Limit lighting to lamps in this Group
- # Type: Group
-
- # line_color
-
- # Line color used for Freestyle line rendering
- # Type: float array of 4 items in [0, inf], default (0.0, 0.0, 0.0, 0.0)
-
- # line_priority
-
- # The line color of a higher priority is used at material boundaries
- # Type: int in [0, 32767], default 0
-
- # mirror_color
-
- # Mirror color of the material
- # Type: float array of 3 items in [0, inf], default (0.0, 0.0, 0.0)
-
- # node_tree
-
- # Node tree for node based materials
- # Type: NodeTree, (readonly)
-
- # offset_z
-
- # Give faces an artificial offset in the Z buffer for Z transparency
- # Type: float in [-inf, inf], default 0.0
-
- # paint_active_slot
-
- # Index of active texture paint slot
- # Type: int in [0, 32767], default 0
-
- # paint_clone_slot
-
- # Index of clone texture paint slot
- # Type: int in [0, 32767], default 0
-
- # pass_index
-
- # Index number for the “Material Index” render pass
- # Type: int in [0, 32767], default 0
-
- # physics
-
- # Game physics settings
- # Type: MaterialPhysics, (readonly, never None)
-
- # preview_render_type
-
- # Type of preview render
-
- # FLAT Flat, Flat XY plane.
- # SPHERE Sphere, Sphere.
- # CUBE Cube, Cube.
- # MONKEY Monkey, Monkey.
- # HAIR Hair, Hair strands.
- # SPHERE_A World Sphere, Large sphere with sky.
-
- # Type: enum in [‘FLAT’, ‘SPHERE’, ‘CUBE’, ‘MONKEY’, ‘HAIR’, ‘SPHERE_A’], default ‘FLAT’
-
- # raytrace_mirror
-
- # Raytraced reflection settings for the material
- # Type: MaterialRaytraceMirror, (readonly, never None)
-
- # raytrace_transparency
-
- # Raytraced transparency settings for the material
- # Type: MaterialRaytraceTransparency, (readonly, never None)
-
- # roughness
-
- # Oren-Nayar Roughness
- # Type: float in [0, 3.14], default 0.0
-
- # shadow_buffer_bias
-
- # Factor to multiply shadow buffer bias with (0 is ignore)
- # Type: float in [0, 10], default 0.0
-
- # shadow_cast_alpha
-
- # Shadow casting alpha, in use for Irregular and Deep shadow buffer
- # Type: float in [0.001, 1], default 0.0
-
- # shadow_only_type
-
- # How to draw shadows
-
- # SHADOW_ONLY_OLD Shadow and Distance, Old shadow only method.
- # SHADOW_ONLY Shadow Only, Improved shadow only method.
- # SHADOW_ONLY_SHADED Shadow and Shading, Improved shadow only method which also renders lightless areas as shadows.
-
- # Type: enum in [‘SHADOW_ONLY_OLD’, ‘SHADOW_ONLY’, ‘SHADOW_ONLY_SHADED’], default ‘SHADOW_ONLY_OLD’
-
- # shadow_ray_bias
-
- # Shadow raytracing bias to prevent terminator problems on shadow boundary
- # Type: float in [0, 0.25], default 0.0
-
-
- # specular_color
-
- # Specular color of the material
- # Type: float array of 3 items in [0, inf], default (0.0, 0.0, 0.0)
-
- # specular_hardness
-
- # How hard (sharp) the specular reflection is
- # Type: int in [1, 511], default 0
-
- # specular_intensity
-
- # How intense (bright) the specular reflection is
- # Type: float in [0, 1], default 0.0
-
- # specular_ior
-
- # Specular index of refraction
- # Type: float in [1, 10], default 0.0
-
- # specular_ramp
-
- # Color ramp used to affect specular shading
- # Type: ColorRamp, (readonly)
-
- # specular_ramp_blend
-
- # Blending method of the ramp and the specular color
- # Type: enum in [‘MIX’, ‘ADD’, ‘MULTIPLY’, ‘SUBTRACT’, ‘SCREEN’, ‘DIVIDE’, ‘DIFFERENCE’, ‘DARKEN’, ‘LIGHTEN’, ‘OVERLAY’, ‘DODGE’, ‘BURN’, ‘HUE’, ‘SATURATION’, ‘VALUE’, ‘COLOR’, ‘SOFT_LIGHT’, ‘LINEAR_LIGHT’], default ‘MIX’
-
- # specular_ramp_factor
-
- # Blending factor (also uses alpha in Colorband)
- # Type: float in [0, 1], default 0.0
-
- # specular_ramp_input
-
- # How the ramp maps on the surface
- # Type: enum in [‘SHADER’, ‘ENERGY’, ‘NORMAL’, ‘RESULT’], default ‘SHADER’
- # specular_shader
-
- # 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.
-
- # Type: enum in [‘COOKTORR’, ‘PHONG’, ‘BLINN’, ‘TOON’, ‘WARDISO’], default ‘COOKTORR’
-
- # specular_slope
-
- # The standard deviation of surface slope
- # Type: float in [0, 0.4], default 0.0
-
- # specular_toon_size
-
- # Size of specular toon area
- # Type: float in [0, 1.53], default 0.0
-
- # specular_toon_smooth
-
- # Smoothness of specular toon area
- # Type: float in [0, 1], default 0.0
-
- # strand
-
- # Strand settings for the material
- # Type: MaterialStrand, (readonly, never None)
-
- # subsurface_scattering
-
- # Subsurface scattering settings for the material
- # Type: MaterialSubsurfaceScattering, (readonly, never None)
-
- # texture_paint_images
-
- # Texture images used for texture painting
- # Type: bpy_prop_collection of Image, (readonly)
-
- # texture_paint_slots
-
- # Texture slots defining the mapping and influence of textures
- # Type: bpy_prop_collection of TexPaintSlot, (readonly)
-
- # texture_slots
-
- # Texture slots defining the mapping and influence of textures
- # Type: MaterialTextureSlots bpy_prop_collection of MaterialTextureSlot, (readonly)
-
- # translucency
-
- # Amount of diffuse shading on the back side
- # Type: float in [0, 1], default 0.0
-
- # transparency_method
-
- # Method to use for rendering transparency
-
- # MASK Mask, Mask the background.
- # Z_TRANSPARENCY Z Transparency, Use alpha buffer for transparent faces.
- # RAYTRACE Raytrace, Use raytracing for transparent refraction rendering.
-
- # Type: enum in [‘MASK’, ‘Z_TRANSPARENCY’, ‘RAYTRACE’], default ‘MASK’
-
- # type
-
- # Material type defining how the object is rendered
-
- # SURFACE Surface, Render object as a surface.
- # WIRE Wire, Render the edges of faces as wires (not supported in raytracing).
- # VOLUME Volume, Render object as a volume.
- # HALO Halo, Render object as halo particles.
-
- # Type: enum in [‘SURFACE’, ‘WIRE’, ‘VOLUME’, ‘HALO’], default ‘SURFACE’
-
- # use_cast_approximate
-
- # Allow this material to cast shadows when using approximate ambient occlusion
- # Type: boolean, default False
-
- # use_cast_buffer_shadows
-
- # Allow this material to cast shadows from shadow buffer lamps
- # Type: boolean, default False
-
- # use_cast_shadows
-
- # Allow this material to cast shadows
- # Type: boolean, default False
-
- # use_cast_shadows_only
-
- # Make objects with this material appear invisible (not rendered), only casting shadows
- # Type: boolean, default False
-
- # use_cubic
-
- # Use cubic interpolation for diffuse values, for smoother transitions
- # Type: boolean, default False
-
- # use_diffuse_ramp
-
- # Toggle diffuse ramp operations
- # Type: boolean, default False
-
- # use_face_texture
-
- # Replace the object’s base color with color from UV map image textures
- # Type: boolean, default False
-
- # use_face_texture_alpha
-
- # Replace the object’s base alpha value with alpha from UV map image textures
- # Type: boolean, default False
-
- # use_full_oversampling
-
- # Force this material to render full shading/textures for all anti-aliasing samples
- # Type: boolean, default False
-
- # use_light_group_exclusive
-
- # Material uses the light group exclusively - these lamps are excluded from other scene lighting
- # Type: boolean, default False
-
- # use_light_group_local
-
- # When linked in, material uses local light group with the same name
- # Type: boolean, default False
-
- # use_mist
-
- # Use mist with this material (in world settings)
- # Type: boolean, default False
-
- # use_nodes
-
- # Use shader nodes to render the material
- # Type: boolean, default False
-
- # use_object_color
-
- # Modulate the result with a per-object color
- # Type: boolean, default False
-
- # use_only_shadow
-
- # Render shadows as the material’s alpha value, making the material transparent except for shadowed areas
- # Type: boolean, default False
-
- # use_ray_shadow_bias
-
- # Prevent raytraced shadow errors on surfaces with smooth shaded normals (terminator problem)
- # Type: boolean, default False
-
- # use_raytrace
-
- # Include this material and geometry that uses it in raytracing calculations
- # Type: boolean, default False
-
- # use_shadeless
-
- # Make this material insensitive to light or shadow
- # Type: boolean, default False
-
- # use_shadows
-
- # Allow this material to receive shadows
- # Type: boolean, default False
-
- # use_sky
-
- # Render this material with zero alpha, with sky background in place (scanline only)
- # Type: boolean, default False
-
- # use_specular_ramp
-
- # Toggle specular ramp operations
- # Type: boolean, default False
-
- # use_tangent_shading
-
- # Use the material’s tangent vector instead of the normal for shading - for anisotropic shading effects
- # Type: boolean, default False
-
- # use_textures
-
- # Enable/Disable each texture
- # Type: boolean array of 18 items, default (False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False)
-
- # use_transparency
-
- # Render material as transparent
- # Type: boolean, default False
-
- # use_transparent_shadows
-
- # Allow this object to receive transparent shadows cast through other objects
- # Type: boolean, default False
-
- # use_uv_project
-
- # Use to ensure UV interpolation is correct for camera projections (use with UV project modifier)
- # Type: boolean, default False
-
- # use_vertex_color_light
-
- # Add vertex colors as additional lighting
- # Type: boolean, default False
-
- # use_vertex_color_paint
-
- # Replace object base color with vertex colors (multiply with ‘texture face’ face assigned textures)
- # Type: boolean, default False
-
- # volume
-
- # Volume settings for the material
- # Type: MaterialVolume, (readonly, never None)
- '''
- (mat.type in {'SURFACE', 'WIRE', 'VOLUME'})
- "use_transparency")
-
-
-
- mat.use_transparency and mat.transparency_method == 'Z_TRANSPARENCY'
-
-
-
-
- col.prop(mat, "use_raytrace")
- col.prop(mat, "use_full_oversampling")
-
- sub.prop(mat, "use_sky")
-
-
- col.prop(mat, "use_cast_shadows", text="Cast")
- col.prop(mat, "use_cast_shadows_only", text="Cast Only")
- col.prop(mat, "use_cast_buffer_shadows")
-
- sub.active = mat.use_cast_buffer_shadows
- sub.prop(mat, "shadow_cast_alpha", text="Casting Alpha")
- col.prop(mat, "use_cast_approximate")
-
-
-
- col.prop(mat, "diffuse_color", text="")
-
- sub.active = (not mat.use_shadeless)
-
- sub.prop(mat, "diffuse_intensity", text="Intensity")
-
-
- col.prop(mat, "diffuse_shader", text="")
- col.prop(mat, "use_diffuse_ramp", text="Ramp")
-
-
- if mat.diffuse_shader == 'OREN_NAYAR':
- col.prop(mat, "roughness")
- elif mat.diffuse_shader == 'MINNAERT':
- col.prop(mat, "darkness")
- elif mat.diffuse_shader == 'TOON':
-
- row.prop(mat, "diffuse_toon_size", text="Size")
- row.prop(mat, "diffuse_toon_smooth", text="Smooth")
- elif mat.diffuse_shader == 'FRESNEL':
-
- row.prop(mat, "diffuse_fresnel", text="Fresnel")
- row.prop(mat, "diffuse_fresnel_factor", text="Factor")
-
- if mat.use_diffuse_ramp:
-
- col.template_color_ramp(mat, "diffuse_ramp", expand=True)
-
-
-
- row.prop(mat, "diffuse_ramp_input", text="Input")
- row.prop(mat, "diffuse_ramp_blend", text="Blend")
-
- col.prop(mat, "diffuse_ramp_factor", text="Factor")
-
-
-
-
- col.prop(mat, "specular_color", text="")
- col.prop(mat, "specular_intensity", text="Intensity")
-
- col.prop(mat, "specular_shader", text="")
- col.prop(mat, "use_specular_ramp", text="Ramp")
-
- if mat.specular_shader in {'COOKTORR', 'PHONG'}:
- col.prop(mat, "specular_hardness", text="Hardness")
- elif mat.specular_shader == 'BLINN':
-
- row.prop(mat, "specular_hardness", text="Hardness")
- row.prop(mat, "specular_ior", text="IOR")
- elif mat.specular_shader == 'WARDISO':
- col.prop(mat, "specular_slope", text="Slope")
- elif mat.specular_shader == 'TOON':
-
- row.prop(mat, "specular_toon_size", text="Size")
- row.prop(mat, "specular_toon_smooth", text="Smooth")
-
- if mat.use_specular_ramp:
- layout.separator()
- layout.template_color_ramp(mat, "specular_ramp", expand=True)
- layout.separator()
-
- row = layout.row()
- row.prop(mat, "specular_ramp_input", text="Input")
- row.prop(mat, "specular_ramp_blend", text="Blend")
-
- layout.prop(mat, "specular_ramp_factor", text="Factor")
-
-
- class MATERIAL_PT_shading(MaterialButtonsPanel, Panel):
- bl_label = "Shading"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
-
- @classmethod
- def poll(cls, context):
- mat = context.material
- engine = context.scene.render.engine
- return check_material(mat) and (mat.type in {'SURFACE', 'WIRE'}) and (engine in cls.COMPAT_ENGINES)
-
- def draw(self, context):
- layout = self.layout
-
- mat = active_node_mat(context.material)
-
- if mat.type in {'SURFACE', 'WIRE'}:
- split = layout.split()
-
- col = split.column()
- sub = col.column()
- sub.active = not mat.use_shadeless
- sub.prop(mat, "emit")
- sub.prop(mat, "ambient")
- sub = col.column()
- sub.prop(mat, "translucency")
-
- col = split.column()
- col.prop(mat, "use_shadeless")
- sub = col.column()
- sub.active = not mat.use_shadeless
- sub.prop(mat, "use_tangent_shading")
- sub.prop(mat, "use_cubic")
-
-
- class MATERIAL_PT_transp(MaterialButtonsPanel, Panel):
- bl_label = "Transparency"
- COMPAT_ENGINES = {'BLENDER_RENDER'}
-
- @classmethod
- def poll(cls, context):
- mat = context.material
- engine = context.scene.render.engine
- return check_material(mat) and (mat.type in {'SURFACE', 'WIRE'}) and (engine in cls.COMPAT_ENGINES)
-
- def draw_header(self, context):
- mat = context.material
-
- if simple_material(mat):
- self.layout.prop(mat, "use_transparency", text="")
-
- def draw(self, context):
- layout = self.layout
-
- base_mat = context.material
- mat = active_node_mat(context.material)
- rayt = mat.raytrace_transparency
-
- if simple_material(base_mat):
- row = layout.row()
- row.active = mat.use_transparency
- row.prop(mat, "transparency_method", expand=True)
-
- split = layout.split()
- split.active = base_mat.use_transparency
-
- col = split.column()
- col.prop(mat, "alpha")
- row = col.row()
- row.active = (base_mat.transparency_method != 'MASK') and (not mat.use_shadeless)
- row.prop(mat, "specular_alpha", text="Specular")
-
- col = split.column()
- col.active = (not mat.use_shadeless)
- col.prop(rayt, "fresnel")
- sub = col.column()
- sub.active = (rayt.fresnel > 0.0)
- sub.prop(rayt, "fresnel_factor", text="Blend")
-
- if base_mat.transparency_method == 'RAYTRACE':
- layout.separator()
- split = layout.split()
- split.active = base_mat.use_transparency
-
- col = split.column()
- col.prop(rayt, "ior")
- col.prop(rayt, "filter")
- col.prop(rayt, "falloff")
- col.prop(rayt, "depth_max")
- col.prop(rayt, "depth")
-
- col = split.column()
- col.label(text="Gloss:")
- col.prop(rayt, "gloss_factor", text="Amount")
- sub = col.column()
- sub.active = rayt.gloss_factor < 1.0
- sub.prop(rayt, "gloss_threshold", text="Threshold")
- sub.prop(rayt, "gloss_samples", text="Samples")
-
-
- class MATERIAL_PT_mirror(MaterialButtonsPanel, Panel):
- bl_label = "Mirror"
- bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER'}
-
- @classmethod
- def poll(cls, context):
- mat = context.material
- engine = context.scene.render.engine
- return check_material(mat) and (mat.type in {'SURFACE', 'WIRE'}) and (engine in cls.COMPAT_ENGINES)
-
- def draw_header(self, context):
- raym = active_node_mat(context.material).raytrace_mirror
-
- self.layout.prop(raym, "use", text="")
-
- def draw(self, context):
- layout = self.layout
-
- mat = active_node_mat(context.material)
- raym = mat.raytrace_mirror
-
- layout.active = raym.use
-
- split = layout.split()
-
- col = split.column()
- col.prop(raym, "reflect_factor")
- col.prop(mat, "mirror_color", text="")
-
- col = split.column()
- col.prop(raym, "fresnel")
- sub = col.column()
- sub.active = (raym.fresnel > 0.0)
- sub.prop(raym, "fresnel_factor", text="Blend")
-
- split = layout.split()
-
- col = split.column()
- col.separator()
- col.prop(raym, "depth")
- col.prop(raym, "distance", text="Max Dist")
- col.separator()
- sub = col.split(percentage=0.4)
- sub.active = (raym.distance > 0.0)
- sub.label(text="Fade To:")
- sub.prop(raym, "fade_to", text="")
-
- col = split.column()
- col.label(text="Gloss:")
- col.prop(raym, "gloss_factor", text="Amount")
- sub = col.column()
- sub.active = (raym.gloss_factor < 1.0)
- sub.prop(raym, "gloss_threshold", text="Threshold")
- sub.prop(raym, "gloss_samples", text="Samples")
- sub.prop(raym, "gloss_anisotropic", text="Anisotropic")
-
-
- class MATERIAL_PT_sss(MaterialButtonsPanel, Panel):
- bl_label = "Subsurface Scattering"
- bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER'}
-
- @classmethod
- def poll(cls, context):
- mat = context.material
- engine = context.scene.render.engine
- return check_material(mat) and (mat.type in {'SURFACE', 'WIRE'}) and (engine in cls.COMPAT_ENGINES)
-
- def draw_header(self, context):
- mat = active_node_mat(context.material)
- sss = mat.subsurface_scattering
-
- self.layout.active = (not mat.use_shadeless)
- self.layout.prop(sss, "use", text="")
-
- def draw(self, context):
- layout = self.layout
-
- mat = active_node_mat(context.material)
- sss = mat.subsurface_scattering
-
- layout.active = (sss.use) and (not mat.use_shadeless)
-
- row = layout.row().split()
- sub = row.row(align=True).split(align=True, percentage=0.75)
- sub.menu("MATERIAL_MT_sss_presets", text=bpy.types.MATERIAL_MT_sss_presets.bl_label)
- sub.operator("material.sss_preset_add", text="", icon='ZOOMIN')
- sub.operator("material.sss_preset_add", text="", icon='ZOOMOUT').remove_active = True
-
- split = layout.split()
-
- col = split.column()
- col.prop(sss, "ior")
- col.prop(sss, "scale")
- col.prop(sss, "color", text="")
- col.prop(sss, "radius", text="RGB Radius", expand=True)
-
- col = split.column()
- sub = col.column(align=True)
- sub.label(text="Blend:")
- sub.prop(sss, "color_factor", text="Color")
- sub.prop(sss, "texture_factor", text="Texture")
- sub.label(text="Scattering Weight:")
- sub.prop(sss, "front")
- sub.prop(sss, "back")
- col.separator()
- col.prop(sss, "error_threshold", text="Error")
-
-
- class MATERIAL_PT_halo(MaterialButtonsPanel, Panel):
- bl_label = "Halo"
- COMPAT_ENGINES = {'BLENDER_RENDER'}
-
- @classmethod
- def poll(cls, context):
- mat = context.material
- engine = context.scene.render.engine
- return mat and (mat.type == 'HALO') and (engine in cls.COMPAT_ENGINES)
-
- def draw(self, context):
- layout = self.layout
-
- mat = context.material # don't use node material
- halo = mat.halo
-
- def number_but(layout, toggle, number, name, color):
- row = layout.row(align=True)
- row.prop(halo, toggle, text="")
- sub = row.column(align=True)
- sub.active = getattr(halo, toggle)
- sub.prop(halo, number, text=name, translate=False)
- if not color == "":
- sub.prop(mat, color, text="")
-
- split = layout.split()
-
- col = split.column()
- col.prop(mat, "alpha")
- col.prop(mat, "diffuse_color", text="")
- col.prop(halo, "seed")
-
- col = split.column()
- col.prop(halo, "size")
- col.prop(halo, "hardness")
- col.prop(halo, "add")
-
- layout.label(text="Options:")
-
- split = layout.split()
- col = split.column()
- col.prop(halo, "use_texture")
- col.prop(halo, "use_vertex_normal")
- col.prop(halo, "use_extreme_alpha")
- col.prop(halo, "use_shaded")
- col.prop(halo, "use_soft")
-
- col = split.column()
- number_but(col, "use_ring", "ring_count", iface_("Rings"), "mirror_color")
- number_but(col, "use_lines", "line_count", iface_("Lines"), "specular_color")
- number_but(col, "use_star", "star_tip_count", iface_("Star Tips"), "")
-
-
- class MATERIAL_PT_flare(MaterialButtonsPanel, Panel):
- bl_label = "Flare"
- COMPAT_ENGINES = {'BLENDER_RENDER'}
-
- @classmethod
- def poll(cls, context):
- mat = context.material
- engine = context.scene.render.engine
- return mat and (mat.type == 'HALO') and (engine in cls.COMPAT_ENGINES)
-
- def draw_header(self, context):
- halo = context.material.halo
-
- self.layout.prop(halo, "use_flare_mode", text="")
-
- def draw(self, context):
- layout = self.layout
-
- mat = context.material # don't use node material
- halo = mat.halo
-
- layout.active = halo.use_flare_mode
-
- split = layout.split()
-
- col = split.column()
- col.prop(halo, "flare_size", text="Size")
- col.prop(halo, "flare_boost", text="Boost")
- col.prop(halo, "flare_seed", text="Seed")
-
- col = split.column()
- col.prop(halo, "flare_subflare_count", text="Subflares")
- col.prop(halo, "flare_subflare_size", text="Subsize")
-
- '''
-#######################End Old Blender Internal Props##########################
-###############################################################################
-# Povray Nodes
-###############################################################################
-
-class PovraySocketUniversal(NodeSocket):
- bl_idname = 'PovraySocketUniversal'
- bl_label = 'Povray Socket'
- value_unlimited: bpy.props.FloatProperty(default=0.0)
- value_0_1: bpy.props.FloatProperty(min=0.0,max=1.0,default=0.0)
- value_0_10: bpy.props.FloatProperty(min=0.0,max=10.0,default=0.0)
- value_000001_10: bpy.props.FloatProperty(min=0.000001,max=10.0,default=0.0)
- value_1_9: bpy.props.IntProperty(min=1,max=9,default=1)
- value_0_255: bpy.props.IntProperty(min=0,max=255,default=0)
- percent: bpy.props.FloatProperty(min=0.0,max=100.0,default=0.0)
- def draw(self, context, layout, node, text):
- space = context.space_data
- tree = space.edit_tree
- links=tree.links
- if self.is_linked:
- value=[]
- for link in links:
- if link.from_node==node:
- inps=link.to_node.inputs
- for inp in inps:
- if inp.bl_idname=="PovraySocketFloat_0_1" and inp.is_linked:
- prop="value_0_1"
- if prop not in value:
- value.append(prop)
- if inp.bl_idname=="PovraySocketFloat_000001_10" and inp.is_linked:
- prop="value_000001_10"
- if prop not in value:
- value.append(prop)
- if inp.bl_idname=="PovraySocketFloat_0_10" and inp.is_linked:
- prop="value_0_10"
- if prop not in value:
- value.append(prop)
- if inp.bl_idname=="PovraySocketInt_1_9" and inp.is_linked:
- prop="value_1_9"
- if prop not in value:
- value.append(prop)
- if inp.bl_idname=="PovraySocketInt_0_255" and inp.is_linked:
- prop="value_0_255"
- if prop not in value:
- value.append(prop)
- if inp.bl_idname=="PovraySocketFloatUnlimited" and inp.is_linked:
- prop="value_unlimited"
- if prop not in value:
- value.append(prop)
- if len(value)==1:
- layout.prop(self, "%s"%value[0], text=text)
- else:
- layout.prop(self, "percent", text="Percent")
- else:
- layout.prop(self, "percent", text=text)
- def draw_color(self, context, node):
- return (1, 0, 0, 1)
-
-class PovraySocketFloat_0_1(NodeSocket):
- bl_idname = 'PovraySocketFloat_0_1'
- bl_label = 'Povray Socket'
- default_value: bpy.props.FloatProperty(description="Input node Value_0_1",min=0,max=1,default=0)
- def draw(self, context, layout, node, text):
- if self.is_linked:
- layout.label(text)
- else:
- layout.prop(self, "default_value", text=text, slider=True)
-
- def draw_color(self, context, node):
- return (0.5, 0.7, 0.7, 1)
-
-class PovraySocketFloat_0_10(NodeSocket):
- bl_idname = 'PovraySocketFloat_0_10'
- bl_label = 'Povray Socket'
- default_value: bpy.props.FloatProperty(description="Input node Value_0_10",min=0,max=10,default=0)
- def draw(self, context, layout, node, text):
- if node.bl_idname == 'ShaderNormalMapNode' and node.inputs[2].is_linked:
- layout.label(text='')
- self.hide_value=True
- if self.is_linked:
- layout.label(text)
- else:
- layout.prop(self, "default_value", text=text, slider=True)
- def draw_color(self, context, node):
- return (0.65, 0.65, 0.65, 1)
-
-class PovraySocketFloat_10(NodeSocket):
- bl_idname = 'PovraySocketFloat_10'
- bl_label = 'Povray Socket'
- default_value: bpy.props.FloatProperty(description="Input node Value_10",min=-10,max=10,default=0)
- def draw(self, context, layout, node, text):
- if node.bl_idname == 'ShaderNormalMapNode' and node.inputs[2].is_linked:
- layout.label(text='')
- self.hide_value=True
- if self.is_linked:
- layout.label(text)
- else:
- layout.prop(self, "default_value", text=text, slider=True)
- def draw_color(self, context, node):
- return (0.65, 0.65, 0.65, 1)
-
-class PovraySocketFloatPositive(NodeSocket):
- bl_idname = 'PovraySocketFloatPositive'
- bl_label = 'Povray Socket'
- default_value: bpy.props.FloatProperty(description="Input Node Value Positive", min=0.0, default=0)
- def draw(self, context, layout, node, text):
- if self.is_linked:
- layout.label(text)
- else:
- layout.prop(self, "default_value", text=text, slider=True)
- def draw_color(self, context, node):
- return (0.045, 0.005, 0.136, 1)
-
-class PovraySocketFloat_000001_10(NodeSocket):
- bl_idname = 'PovraySocketFloat_000001_10'
- bl_label = 'Povray Socket'
- default_value: bpy.props.FloatProperty(min=0.000001,max=10,default=0.000001)
- def draw(self, context, layout, node, text):
- if self.is_output or self.is_linked:
- layout.label(text)
- else:
- layout.prop(self, "default_value", text=text, slider=True)
- def draw_color(self, context, node):
- return (1, 0, 0, 1)
-
-class PovraySocketFloatUnlimited(NodeSocket):
- bl_idname = 'PovraySocketFloatUnlimited'
- bl_label = 'Povray Socket'
- default_value: bpy.props.FloatProperty(default = 0.0)
- def draw(self, context, layout, node, text):
- if self.is_linked:
- layout.label(text)
- else:
- layout.prop(self, "default_value", text=text, slider=True)
- def draw_color(self, context, node):
- return (0.7, 0.7, 1, 1)
-
-class PovraySocketInt_1_9(NodeSocket):
- bl_idname = 'PovraySocketInt_1_9'
- bl_label = 'Povray Socket'
- default_value: bpy.props.IntProperty(description="Input node Value_1_9",min=1,max=9,default=6)
- def draw(self, context, layout, node, text):
- if self.is_linked:
- layout.label(text)
- else:
- layout.prop(self, "default_value", text=text)
- def draw_color(self, context, node):
- return (1, 0.7, 0.7, 1)
-
-class PovraySocketInt_0_256(NodeSocket):
- bl_idname = 'PovraySocketInt_0_256'
- bl_label = 'Povray Socket'
- default_value: bpy.props.IntProperty(min=0,max=255,default=0)
- def draw(self, context, layout, node, text):
- if self.is_linked:
- layout.label(text)
- else:
- layout.prop(self, "default_value", text=text)
- def draw_color(self, context, node):
- return (0.5, 0.5, 0.5, 1)
-
-
-class PovraySocketPattern(NodeSocket):
- bl_idname = 'PovraySocketPattern'
- bl_label = 'Povray Socket'
-
- default_value: bpy.props.EnumProperty(
- name="Pattern",
- description="Select the pattern",
- items=(
- ('boxed', "Boxed", ""),
- ('brick', "Brick", ""),
- ('cells', "Cells", ""),
- ('checker', "Checker", ""),
- ('granite', "Granite", ""),
- ('leopard', "Leopard", ""),
- ('marble', "Marble", ""),
- ('onion', "Onion", ""),
- ('planar', "Planar", ""),
- ('quilted', "Quilted", ""),
- ('ripples', "Ripples", ""),
- ('radial', "Radial", ""),
- ('spherical', "Spherical", ""),
- ('spotted', "Spotted", ""),
- ('waves', "Waves", ""),
- ('wood', "Wood", ""),
- ('wrinkles', "Wrinkles", "")
- ),
- default='granite')
-
- def draw(self, context, layout, node, text):
- if self.is_output or self.is_linked:
- layout.label(text="Pattern")
- else:
- layout.prop(self, "default_value", text=text)
-
- def draw_color(self, context, node):
- return (1, 1, 1, 1)
-
-class PovraySocketColor(NodeSocket):
- bl_idname = 'PovraySocketColor'
- bl_label = 'Povray Socket'
-
- default_value: bpy.props.FloatVectorProperty(
- precision=4, step=0.01, min=0, soft_max=1,
- default=(0.0, 0.0, 0.0), options={'ANIMATABLE'}, subtype='COLOR')
-
- def draw(self, context, layout, node, text):
- if self.is_output or self.is_linked:
- layout.label(text)
- else:
- layout.prop(self, "default_value", text=text)
-
- def draw_color(self, context, node):
- return (1, 1, 0, 1)
-
-class PovraySocketColorRGBFT(NodeSocket):
- bl_idname = 'PovraySocketColorRGBFT'
- bl_label = 'Povray Socket'
-
- default_value: bpy.props.FloatVectorProperty(
- precision=4, step=0.01, min=0, soft_max=1,
- default=(0.0, 0.0, 0.0), options={'ANIMATABLE'}, subtype='COLOR')
- f: bpy.props.FloatProperty(default = 0.0,min=0.0,max=1.0)
- t: bpy.props.FloatProperty(default = 0.0,min=0.0,max=1.0)
- def draw(self, context, layout, node, text):
- if self.is_output or self.is_linked:
- layout.label(text)
- else:
- layout.prop(self, "default_value", text=text)
-
- def draw_color(self, context, node):
- return (1, 1, 0, 1)
-
-class PovraySocketTexture(NodeSocket):
- bl_idname = 'PovraySocketTexture'
- bl_label = 'Povray Socket'
- default_value: bpy.props.IntProperty()
- def draw(self, context, layout, node, text):
- layout.label(text)
-
- def draw_color(self, context, node):
- return (0, 1, 0, 1)
-
-
-
-class PovraySocketTransform(NodeSocket):
- bl_idname = 'PovraySocketTransform'
- bl_label = 'Povray Socket'
- default_value: bpy.props.IntProperty(min=0,max=255,default=0)
- def draw(self, context, layout, node, text):
- layout.label(text)
-
- def draw_color(self, context, node):
- return (99/255, 99/255, 199/255, 1)
-
-class PovraySocketNormal(NodeSocket):
- bl_idname = 'PovraySocketNormal'
- bl_label = 'Povray Socket'
- default_value: bpy.props.IntProperty(min=0,max=255,default=0)
- def draw(self, context, layout, node, text):
- layout.label(text)
-
- def draw_color(self, context, node):
- return (0.65, 0.65, 0.65, 1)
-
-class PovraySocketSlope(NodeSocket):
- bl_idname = 'PovraySocketSlope'
- bl_label = 'Povray Socket'
- default_value: bpy.props.FloatProperty(min = 0.0, max = 1.0)
- height: bpy.props.FloatProperty(min = 0.0, max = 10.0)
- slope: bpy.props.FloatProperty(min = -10.0, max = 10.0)
- def draw(self, context, layout, node, text):
- if self.is_output or self.is_linked:
- layout.label(text)
- else:
- layout.prop(self,'default_value',text='')
- layout.prop(self,'height',text='')
- layout.prop(self,'slope',text='')
- def draw_color(self, context, node):
- return (0, 0, 0, 1)
-
-class PovraySocketMap(NodeSocket):
- bl_idname = 'PovraySocketMap'
- bl_label = 'Povray Socket'
- default_value: bpy.props.StringProperty()
- def draw(self, context, layout, node, text):
- layout.label(text)
- def draw_color(self, context, node):
- return (0.2, 0, 0.2, 1)
-
-class PovrayShaderNodeCategory(NodeCategory):
- @classmethod
- def poll(cls, context):
- return context.space_data.tree_type == 'ObjectNodeTree'
-
-class PovrayTextureNodeCategory(NodeCategory):
- @classmethod
- def poll(cls, context):
- return context.space_data.tree_type == 'TextureNodeTree'
-
-class PovraySceneNodeCategory(NodeCategory):
- @classmethod
- def poll(cls, context):
- return context.space_data.tree_type == 'CompositorNodeTree'
-
-node_categories = [
-
- PovrayShaderNodeCategory("SHADEROUTPUT", "Output", items=[
- NodeItem("PovrayOutputNode"),
- ]),
-
- PovrayShaderNodeCategory("SIMPLE", "Simple texture", items=[
- NodeItem("PovrayTextureNode"),
- ]),
-
- PovrayShaderNodeCategory("MAPS", "Maps", items=[
- NodeItem("PovrayBumpMapNode"),
- NodeItem("PovrayColorImageNode"),
- NodeItem("ShaderNormalMapNode"),
- NodeItem("PovraySlopeNode"),
- NodeItem("ShaderTextureMapNode"),
- NodeItem("ShaderNodeValToRGB"),
- ]),
-
- PovrayShaderNodeCategory("OTHER", "Other patterns", items=[
- NodeItem("PovrayImagePatternNode"),
- NodeItem("ShaderPatternNode"),
- ]),
-
- PovrayShaderNodeCategory("COLOR", "Color", items=[
- NodeItem("PovrayPigmentNode"),
- ]),
-
- PovrayShaderNodeCategory("TRANSFORM", "Transform", items=[
- NodeItem("PovrayMappingNode"),
- NodeItem("PovrayMultiplyNode"),
- NodeItem("PovrayModifierNode"),
- NodeItem("PovrayTransformNode"),
- NodeItem("PovrayValueNode"),
- ]),
-
- PovrayShaderNodeCategory("FINISH", "Finish", items=[
- NodeItem("PovrayFinishNode"),
- NodeItem("PovrayDiffuseNode"),
- NodeItem("PovraySpecularNode"),
- NodeItem("PovrayPhongNode"),
- NodeItem("PovrayAmbientNode"),
- NodeItem("PovrayMirrorNode"),
- NodeItem("PovrayIridescenceNode"),
- NodeItem("PovraySubsurfaceNode"),
- ]),
-
- PovrayShaderNodeCategory("CYCLES", "Cycles", items=[
- NodeItem("ShaderNodeAddShader"),
- NodeItem("ShaderNodeAmbientOcclusion"),
- NodeItem("ShaderNodeAttribute"),
- NodeItem("ShaderNodeBackground"),
- NodeItem("ShaderNodeBlackbody"),
- NodeItem("ShaderNodeBrightContrast"),
- NodeItem("ShaderNodeBsdfAnisotropic"),
- NodeItem("ShaderNodeBsdfDiffuse"),
- NodeItem("ShaderNodeBsdfGlass"),
- NodeItem("ShaderNodeBsdfGlossy"),
- NodeItem("ShaderNodeBsdfHair"),
- NodeItem("ShaderNodeBsdfRefraction"),
- NodeItem("ShaderNodeBsdfToon"),
- NodeItem("ShaderNodeBsdfTranslucent"),
- NodeItem("ShaderNodeBsdfTransparent"),
- NodeItem("ShaderNodeBsdfVelvet"),
- NodeItem("ShaderNodeBump"),
- NodeItem("ShaderNodeCameraData"),
- NodeItem("ShaderNodeCombineHSV"),
- NodeItem("ShaderNodeCombineRGB"),
- NodeItem("ShaderNodeCombineXYZ"),
- NodeItem("ShaderNodeEmission"),
- NodeItem("ShaderNodeExtendedMaterial"),
- NodeItem("ShaderNodeFresnel"),
- NodeItem("ShaderNodeGamma"),
- NodeItem("ShaderNodeGeometry"),
- NodeItem("ShaderNodeGroup"),
- NodeItem("ShaderNodeHairInfo"),
- NodeItem("ShaderNodeHoldout"),
- NodeItem("ShaderNodeHueSaturation"),
- NodeItem("ShaderNodeInvert"),
- NodeItem("ShaderNodeLampData"),
- NodeItem("ShaderNodeLayerWeight"),
- NodeItem("ShaderNodeLightFalloff"),
- NodeItem("ShaderNodeLightPath"),
- NodeItem("ShaderNodeMapping"),
- NodeItem("ShaderNodeMaterial"),
- NodeItem("ShaderNodeMath"),
- NodeItem("ShaderNodeMixRGB"),
- NodeItem("ShaderNodeMixShader"),
- NodeItem("ShaderNodeNewGeometry"),
- NodeItem("ShaderNodeNormal"),
- NodeItem("ShaderNodeNormalMap"),
- NodeItem("ShaderNodeObjectInfo"),
- NodeItem("ShaderNodeOutput"),
- NodeItem("ShaderNodeOutputLamp"),
- NodeItem("ShaderNodeOutputLineStyle"),
- NodeItem("ShaderNodeOutputMaterial"),
- NodeItem("ShaderNodeOutputWorld"),
- NodeItem("ShaderNodeParticleInfo"),
- NodeItem("ShaderNodeRGB"),
- NodeItem("ShaderNodeRGBCurve"),
- NodeItem("ShaderNodeRGBToBW"),
- NodeItem("ShaderNodeScript"),
- NodeItem("ShaderNodeSeparateHSV"),
- NodeItem("ShaderNodeSeparateRGB"),
- NodeItem("ShaderNodeSeparateXYZ"),
- NodeItem("ShaderNodeSqueeze"),
- NodeItem("ShaderNodeSubsurfaceScattering"),
- NodeItem("ShaderNodeTangent"),
- NodeItem("ShaderNodeTexBrick"),
- NodeItem("ShaderNodeTexChecker"),
- NodeItem("ShaderNodeTexCoord"),
- NodeItem("ShaderNodeTexEnvironment"),
- NodeItem("ShaderNodeTexGradient"),
- NodeItem("ShaderNodeTexImage"),
- NodeItem("ShaderNodeTexMagic"),
- NodeItem("ShaderNodeTexMusgrave"),
- NodeItem("ShaderNodeTexNoise"),
- NodeItem("ShaderNodeTexPointDensity"),
- NodeItem("ShaderNodeTexSky"),
- NodeItem("ShaderNodeTexVoronoi"),
- NodeItem("ShaderNodeTexWave"),
- NodeItem("ShaderNodeTexture"),
- NodeItem("ShaderNodeUVAlongStroke"),
- NodeItem("ShaderNodeUVMap"),
- NodeItem("ShaderNodeValToRGB"),
- NodeItem("ShaderNodeValue"),
- NodeItem("ShaderNodeVectorCurve"),
- NodeItem("ShaderNodeVectorMath"),
- NodeItem("ShaderNodeVectorTransform"),
- NodeItem("ShaderNodeVolumeAbsorption"),
- NodeItem("ShaderNodeVolumeScatter"),
- NodeItem("ShaderNodeWavelength"),
- NodeItem("ShaderNodeWireframe"),
- ]),
-
- PovrayTextureNodeCategory("TEXTUREOUTPUT", "Output", items=[
- NodeItem("TextureNodeValToRGB"),
- NodeItem("TextureOutputNode"),
- ]),
-
- PovraySceneNodeCategory("ISOSURFACE", "Isosurface", items=[
- NodeItem("IsoPropsNode"),
- ]),
-
- PovraySceneNodeCategory("FOG", "Fog", items=[
- NodeItem("PovrayFogNode"),
-
- ]),
- ]
-############### end nodes
-
-###############################################################################
-# Texture POV properties.
-###############################################################################
-
-class RenderPovSettingsTexture(PropertyGroup):
- """Declare texture level properties controllable in UI and translated to POV."""
-
- # former Space properties from removed Blender Internal
- active_texture_index: IntProperty(
- name = "Index for texture_slots",
- min=0,
- max=17,
- default=0,
- )
-
- use_limited_texture_context: BoolProperty(
- name="",
- description="Use the limited version of texture user (for ‘old shading’ mode)",
- default=True,
- )
-
- texture_context: EnumProperty(
- name="Texture context",
- description="Type of texture data to display and edit",
- 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"
- ),
- default = 'MATERIAL',
- )
-
- # 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############################
- # commented out below if we wanted custom pov code in texture only, inside exported material:
- # 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="")
-
- tex_pattern_type: EnumProperty(
- name="Texture_Type",
- description="Choose between Blender or POV parameters to specify texture",
- items= (
- ('agate', 'Agate', '','PLUGIN', 0),
- ('aoi', 'Aoi', '', 'PLUGIN', 1),
- ('average', 'Average', '', 'PLUGIN', 2),
- ('boxed', 'Boxed', '', 'PLUGIN', 3),
- ('bozo', 'Bozo', '', 'PLUGIN', 4),
- ('bumps', 'Bumps', '', 'PLUGIN', 5),
- ('cells', 'Cells', '', 'PLUGIN', 6),
- ('crackle', 'Crackle', '', 'PLUGIN', 7),
- ('cubic', 'Cubic', '', 'PLUGIN', 8),
- ('cylindrical', 'Cylindrical', '', 'PLUGIN', 9),
- ('density_file', 'Density', '(.df3)', 'PLUGIN', 10),
- ('dents', 'Dents', '', 'PLUGIN', 11),
- ('fractal', 'Fractal', '', 'PLUGIN', 12),
- ('function', 'Function', '', 'PLUGIN', 13),
- ('gradient', 'Gradient', '', 'PLUGIN', 14),
- ('granite', 'Granite', '', 'PLUGIN', 15),
- ('image_pattern', 'Image pattern', '', 'PLUGIN', 16),
- ('leopard', 'Leopard', '', 'PLUGIN', 17),
- ('marble', 'Marble', '', 'PLUGIN', 18),
- ('onion', 'Onion', '', 'PLUGIN', 19),
- ('pigment_pattern', 'pigment pattern', '', 'PLUGIN', 20),
- ('planar', 'Planar', '', 'PLUGIN', 21),
- ('quilted', 'Quilted', '', 'PLUGIN', 22),
- ('radial', 'Radial', '', 'PLUGIN', 23),
- ('ripples', 'Ripples', '', 'PLUGIN', 24),
- ('slope', 'Slope', '', 'PLUGIN', 25),
- ('spherical', 'Spherical', '', 'PLUGIN', 26),
- ('spiral1', 'Spiral1', '', 'PLUGIN', 27),
- ('spiral2', 'Spiral2', '', 'PLUGIN', 28),
- ('spotted', 'Spotted', '', 'PLUGIN', 29),
- ('waves', 'Waves', '', 'PLUGIN', 30),
- ('wood', 'Wood', '', 'PLUGIN', 31),
- ('wrinkles', 'Wrinkles', '', 'PLUGIN', 32),
- ('brick', "Brick", "", 'PLUGIN', 33),
- ('checker', "Checker", "", 'PLUGIN', 34),
- ('hexagon', "Hexagon", "", 'PLUGIN', 35),
- ('object', "Mesh", "", 'PLUGIN', 36),
- ('emulator', "Blender Type Emulator", "", 'SCRIPTPLUGINS', 37)
- ),
- default='emulator',
- )
-
- magnet_style: EnumProperty(
- name="Magnet style",
- description="magnet or julia",
- items=(('mandel', "Mandelbrot", ""),('julia', "Julia", "")),
- default='julia',
- )
-
- magnet_type: IntProperty(
- name="Magnet_type",
- description="1 or 2",
- min=1,
- max=2,
- default=2,
- )
-
- warp_types: EnumProperty(
- name="Warp Types",
- description="Select the type of warp",
- items=(('PLANAR', "Planar", ""), ('CUBIC', "Cubic", ""),
- ('SPHERICAL', "Spherical", ""), ('TOROIDAL', "Toroidal", ""),
- ('CYLINDRICAL', "Cylindrical", ""), ('NONE', "None", "No indentation")),
- default='NONE'
- )
-
- warp_orientation: EnumProperty(
- name="Warp Orientation",
- description="Select the orientation of warp",
- items=(('x', "X", ""), ('y', "Y", ""), ('z', "Z", "")),
- default='y',
- )
-
- wave_type: EnumProperty(
- name="Waves type",
- description="Select the type of waves",
- items=(('ramp', "Ramp", ""), ('sine', "Sine", ""), ('scallop', "Scallop", ""),
- ('cubic', "Cubic", ""), ('poly', "Poly", ""), ('triangle', 'Triangle', "")),
- default='ramp',
- )
-
- gen_noise: IntProperty(
- name="Noise Generators",
- description="Noise Generators",
- min=1, max=3, default=1,
- )
-
- warp_dist_exp: FloatProperty(
- name="Distance exponent",
- description="Distance exponent",
- min=0.0, max=100.0, default=1.0,
- )
-
- warp_tor_major_radius: FloatProperty(
- name="Major radius",
- description="Torus is distance from major radius",
- min=0.0, max=5.0, default=1.0,
- )
-
- warp_turbulence_x: FloatProperty(
- name="Turbulence X",
- description="Turbulence X",
- min=0.0, max=5.0, default=0.0,
- )
-
- warp_turbulence_y: FloatProperty(
- name="Turbulence Y",
- description="Turbulence Y",
- min=0.0, max=5.0, default=0.0
- )
-
- warp_turbulence_z: FloatProperty(
- name="Turbulence Z",
- description="Turbulence Z",
- min=0.0, max=5.0, default=0.0
- )
-
- modifier_octaves: IntProperty(
- name="Turbulence octaves",
- description="Turbulence octaves",
- min=1, max=10, default=1
- )
-
- modifier_lambda: FloatProperty(
- name="Turbulence lambda",
- description="Turbulence lambda",
- min=0.0, max=5.0, default=1.00
- )
-
- modifier_omega: FloatProperty(
- name="Turbulence omega",
- description="Turbulence omega",
- min=0.0, max=10.0, default=1.00
- )
-
- modifier_phase: FloatProperty(
- name="Phase",
- description="The phase value causes the map entries to be shifted so that the map "
- "starts and ends at a different place",
- min=0.0, max=2.0, default=0.0
- )
-
- modifier_frequency: FloatProperty(
- name="Frequency",
- description="The frequency keyword adjusts the number of times that a color map "
- "repeats over one cycle of a pattern",
- min=0.0, max=25.0, default=2.0
- )
-
- modifier_turbulence: FloatProperty(
- name="Turbulence",
- description="Turbulence",
- min=0.0, max=5.0, default=2.0
- )
-
- modifier_numbers: IntProperty(
- name="Numbers",
- description="Numbers",
- min=1, max=27, default=2
- )
-
- modifier_control0: IntProperty(
- name="Control0",
- description="Control0",
- min=0, max=100, default=1
- )
-
- modifier_control1: IntProperty(
- name="Control1",
- description="Control1",
- min=0, max=100, default=1
- )
-
- brick_size_x: FloatProperty(
- name="Brick size x",
- description="",
- min=0.0000, max=1.0000, default=0.2500
- )
-
- brick_size_y: FloatProperty(
- name="Brick size y",
- description="",
- min=0.0000, max=1.0000, default=0.0525
- )
-
- brick_size_z: FloatProperty(
- name="Brick size z",
- description="",
- min=0.0000, max=1.0000, default=0.1250
- )
-
- brick_mortar: FloatProperty(
- name="Mortar",
- description="Mortar",
- min=0.000, max=1.500, default=0.01
- )
-
- julia_complex_1: FloatProperty(
- name="Julia Complex 1",
- description="",
- min=0.000, max=1.500, default=0.360
- )
-
- julia_complex_2: FloatProperty(
- name="Julia Complex 2",
- description="",
- min=0.000, max=1.500, default=0.250
- )
-
- f_iter: IntProperty(
- name="Fractal Iteration",
- description="",
- min=0, max=100, default=20
- )
-
- f_exponent: IntProperty(
- name="Fractal Exponent",
- description="",
- min=2, max=33, default=2
- )
-
- f_ior: IntProperty(
- name="Fractal Interior",
- description="",
- min=1, max=6, default=1
- )
-
- f_ior_fac: FloatProperty(
- name="Fractal Interior Factor",
- description="",
- min=0.0, max=10.0, default=1.0
- )
-
- f_eor: IntProperty(
- name="Fractal Exterior",
- description="",
- min=1, max=8, default=1
- )
-
- f_eor_fac: FloatProperty(
- name="Fractal Exterior Factor",
- description="",
- min=0.0, max=10.0, default=1.0
- )
-
- grad_orient_x: IntProperty(
- name="Gradient orientation X",
- description="",
- min=0, max=1, default=0
- )
-
- grad_orient_y: IntProperty(
- name="Gradient orientation Y",
- description="",
- min=0, max=1, default=1
- )
-
- grad_orient_z: IntProperty(
- name="Gradient orientation Z",
- description="",
- min=0, max=1, default=0
- )
-
- pave_sides: EnumProperty(
- name="Pavement sides",
- description="",
- items=(
- ('3', "3", ""),
- ('4', "4", ""),
- ('6', "6", "")
- ),
- default='3'
- )
-
- pave_pat_2: IntProperty(
- name="Pavement pattern 2",
- description="maximum: 2",
- min=1, max=2, default=2
- )
-
- pave_pat_3: IntProperty(
- name="Pavement pattern 3",
- description="maximum: 3",
- min=1, max=3, default=3
- )
-
- pave_pat_4: IntProperty(
- name="Pavement pattern 4",
- description="maximum: 4",
- min=1, max=4, default=4
- )
-
- pave_pat_5: IntProperty(
- name="Pavement pattern 5",
- description="maximum: 5",
- min=1, max=5, default=5
- )
-
- pave_pat_7: IntProperty(
- name="Pavement pattern 7",
- description="maximum: 7",
- min=1, max=7, default=7
- )
-
- pave_pat_12: IntProperty(
- name="Pavement pattern 12",
- description="maximum: 12",
- min=1, max=12, default=12
- )
-
- pave_pat_22: IntProperty(
- name="Pavement pattern 22",
- description="maximum: 22",
- min=1, max=22, default=22
- )
-
- pave_pat_35: IntProperty(
- name="Pavement pattern 35",
- description="maximum: 35",
- min=1, max=35, default=35,
- )
-
- pave_tiles: IntProperty(
- name="Pavement tiles",
- description="If sides = 6, maximum tiles 5!!!",
- min=1, max=6, default=1
- )
-
- pave_form: IntProperty(
- name="Pavement form",
- description="",
- min=0, max=4, default=0
- )
-
- #########FUNCTIONS#############################################################################
- #########FUNCTIONS#############################################################################
-
- func_list: EnumProperty(
- name="Functions",
- description="Select the function for create pattern",
- items=(
- ('NONE', "None", "No indentation"),
- ("f_algbr_cyl1","Algbr cyl1",""), ("f_algbr_cyl2","Algbr cyl2",""),
- ("f_algbr_cyl3","Algbr cyl3",""), ("f_algbr_cyl4","Algbr cyl4",""),
- ("f_bicorn","Bicorn",""), ("f_bifolia","Bifolia",""),
- ("f_blob","Blob",""), ("f_blob2","Blob2",""),
- ("f_boy_surface","Boy surface",""), ("f_comma","Comma",""),
- ("f_cross_ellipsoids","Cross ellipsoids",""),
- ("f_crossed_trough","Crossed trough",""), ("f_cubic_saddle","Cubic saddle",""),
- ("f_cushion","Cushion",""), ("f_devils_curve","Devils curve",""),
- ("f_devils_curve_2d","Devils curve 2d",""),
- ("f_dupin_cyclid","Dupin cyclid",""), ("f_ellipsoid","Ellipsoid",""),
- ("f_enneper","Enneper",""), ("f_flange_cover","Flange cover",""),
- ("f_folium_surface","Folium surface",""),
- ("f_folium_surface_2d","Folium surface 2d",""), ("f_glob","Glob",""),
- ("f_heart","Heart",""), ("f_helical_torus","Helical torus",""),
- ("f_helix1","Helix1",""), ("f_helix2","Helix2",""), ("f_hex_x","Hex x",""),
- ("f_hex_y","Hex y",""), ("f_hetero_mf","Hetero mf",""),
- ("f_hunt_surface","Hunt surface",""),
- ("f_hyperbolic_torus","Hyperbolic torus",""),
- ("f_isect_ellipsoids","Isect ellipsoids",""),
- ("f_kampyle_of_eudoxus","Kampyle of eudoxus",""),
- ("f_kampyle_of_eudoxus_2d","Kampyle of eudoxus 2d",""),
- ("f_klein_bottle","Klein bottle",""),
- ("f_kummer_surface_v1","Kummer surface v1",""),
- ("f_kummer_surface_v2","Kummer surface v2",""),
- ("f_lemniscate_of_gerono","Lemniscate of gerono",""),
- ("f_lemniscate_of_gerono_2d","Lemniscate of gerono 2d",""),
- ("f_mesh1","Mesh1",""), ("f_mitre","Mitre",""),
- ("f_nodal_cubic","Nodal cubic",""), ("f_noise3d","Noise3d",""),
- ("f_noise_generator","Noise generator",""), ("f_odd","Odd",""),
- ("f_ovals_of_cassini","Ovals of cassini",""), ("f_paraboloid","Paraboloid",""),
- ("f_parabolic_torus","Parabolic torus",""), ("f_ph","Ph",""),
- ("f_pillow","Pillow",""), ("f_piriform","Piriform",""),
- ("f_piriform_2d","Piriform 2d",""), ("f_poly4","Poly4",""),
- ("f_polytubes","Polytubes",""), ("f_quantum","Quantum",""),
- ("f_quartic_paraboloid","Quartic paraboloid",""),
- ("f_quartic_saddle","Quartic saddle",""),
- ("f_quartic_cylinder","Quartic cylinder",""), ("f_r","R",""),
- ("f_ridge","Ridge",""), ("f_ridged_mf","Ridged mf",""),
- ("f_rounded_box","Rounded box",""), ("f_sphere","Sphere",""),
- ("f_spikes","Spikes",""), ("f_spikes_2d","Spikes 2d",""),
- ("f_spiral","Spiral",""), ("f_steiners_roman","Steiners roman",""),
- ("f_strophoid","Strophoid",""), ("f_strophoid_2d","Strophoid 2d",""),
- ("f_superellipsoid","Superellipsoid",""), ("f_th","Th",""),
- ("f_torus","Torus",""), ("f_torus2","Torus2",""),
- ("f_torus_gumdrop","Torus gumdrop",""), ("f_umbrella","Umbrella",""),
- ("f_witch_of_agnesi","Witch of agnesi",""),
- ("f_witch_of_agnesi_2d","Witch of agnesi 2d","")
- ),
-
- default='NONE',
- )
-
- func_x: FloatProperty(
- name="FX",
- description="",
- min=0.0, max=25.0, default=1.0
- )
-
- func_plus_x: EnumProperty(
- name="Func plus x",
- description="",
- items=(('NONE', "None", ""), ('increase', "*", ""), ('plus', "+", "")),
- default='NONE',
- )
-
- func_y: FloatProperty(
- name="FY",
- description="",
- min=0.0, max=25.0, default=1.0
- )
-
- func_plus_y: EnumProperty(
- name="Func plus y",
- description="",
- items=(('NONE', "None", ""), ('increase', "*", ""), ('plus', "+", "")),
- default='NONE',
- )
-
- func_z: FloatProperty(
- name="FZ",
- description="",
- min=0.0, max=25.0, default=1.0
- )
-
- func_plus_z: EnumProperty(
- name="Func plus z",
- description="",
- items=(
- ('NONE', "None", ""),
- ('increase', "*", ""),
- ('plus', "+", "")
- ),
- default='NONE',
- )
-
- func_P0: FloatProperty(
- name="P0",
- description="",
- min=0.0, max=25.0, default=1.0
- )
-
- func_P1: FloatProperty(
- name="P1",
- description="",
- min=0.0, max=25.0, default=1.0
- )
-
- func_P2: FloatProperty(
- name="P2",
- description="",
- min=0.0, max=25.0, default=1.0
- )
-
- func_P3: FloatProperty(
- name="P3",
- description="",
- min=0.0, max=25.0, default=1.0
- )
-
- func_P4: FloatProperty(
- name="P4",
- description="",
- min=0.0, max=25.0, default=1.0
- )
-
- func_P5: FloatProperty(
- name="P5",
- description="",
- min=0.0, max=25.0, default=1.0
- )
-
- func_P6: FloatProperty(
- name="P6",
- description="",
- min=0.0, max=25.0, default=1.0
- )
-
- func_P7: FloatProperty(
- name="P7",
- description="",
- min=0.0, max=25.0, default=1.0
- )
-
- func_P8: FloatProperty(
- name="P8",
- description="",
- min=0.0, max=25.0, default=1.0
- )
-
- func_P9: FloatProperty(
- name="P9",
- description="",
- min=0.0, max=25.0, default=1.0
- )
-
- #########################################
- tex_rot_x: FloatProperty(
- name="Rotate X",
- description="",
- min=-180.0, max=180.0, default=0.0
- )
-
- tex_rot_y: FloatProperty(
- name="Rotate Y",
- description="",
- min=-180.0, max=180.0, default=0.0
- )
-
- tex_rot_z: FloatProperty(
- name="Rotate Z",
- description="",
- min=-180.0, max=180.0, default=0.0
- )
-
- tex_mov_x: FloatProperty(
- name="Move X",
- description="",
- min=-100000.0, max=100000.0, default=0.0
- )
-
- tex_mov_y: FloatProperty(
- name="Move Y",
- description="",
- min=-100000.0,
- max=100000.0,
- default=0.0,
- )
-
- tex_mov_z: FloatProperty(
- name="Move Z",
- description="",
- min=-100000.0,
- max=100000.0,
- default=0.0,
- )
-
- tex_scale_x: FloatProperty(
- name="Scale X",
- description="",
- min=0.0,
- max=10000.0,
- default=1.0,
- )
-
- tex_scale_y: FloatProperty(
- name="Scale Y",
- description="",
- min=0.0,
- max=10000.0,
- default=1.0,
- )
-
- tex_scale_z: FloatProperty(
- name="Scale Z",
- description="",
- min=0.0,
- max=10000.0,
- default=1.0,
- )
-
-###############################################################################
-# Object POV properties.
-###############################################################################
-
-class RenderPovSettingsObject(PropertyGroup):
- """Declare object and primitives level properties controllable in UI and translated to POV."""
-
- # Pov inside_vector used for CSG
- inside_vector: FloatVectorProperty(
- name="CSG Inside Vector",
- description="Direction to shoot CSG inside test rays at",
- precision=4,
- step=0.01,
- min=0,
- soft_max=1,
- default=(0.001, 0.001, 0.5),
- options={'ANIMATABLE'},
- subtype='XYZ'
- )
-
- # 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=0.50
- )
-
- # 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="",
- )
-
- #############POV specific object properties.############################
- object_as: StringProperty(maxlen=1024)
-
- imported_loc: FloatVectorProperty(
- name="Imported Pov location",
- precision=6,
- default=(0.0, 0.0, 0.0),
- )
-
- imported_loc_cap: FloatVectorProperty(
- name="Imported Pov location",
- precision=6,
- default=(0.0, 0.0, 2.0),
- )
-
- unlock_parameters: BoolProperty(name="Lock",default = False)
-
- # not in UI yet but used for sor (lathe) / prism... pov primitives
- curveshape: EnumProperty(
- name="Povray Shape Type",
- items=(("birail", "Birail", ""),
- ("cairo", "Cairo", ""),
- ("lathe", "Lathe", ""),
- ("loft", "Loft", ""),
- ("prism", "Prism", ""),
- ("sphere_sweep", "Sphere Sweep", "")),
- default="sphere_sweep",
- )
-
- mesh_write_as: EnumProperty(
- name="Mesh Write As",
- items=(("blobgrid", "Blob Grid", ""),
- ("grid", "Grid", ""),
- ("mesh", "Mesh", "")),
- default="mesh",
- )
-
- object_ior: FloatProperty(
- name="IOR", description="IOR",
- min=1.0, max=10.0,default=1.0
- )
-
- # shape_as_light = StringProperty(name="Light",maxlen=1024)
- # fake_caustics_power = FloatProperty(
- # name="Power", description="Fake caustics power",
- # min=0.0, max=10.0,default=0.0)
- # target = BoolProperty(name="Target",description="",default=False)
- # target_value = FloatProperty(
- # name="Value", description="",
- # min=0.0, max=1.0,default=1.0)
- # refraction = BoolProperty(name="Refraction",description="",default=False)
- # dispersion = BoolProperty(name="Dispersion",description="",default=False)
- # dispersion_value = FloatProperty(
- # name="Dispersion", description="Good values are 1.01 to 1.1. ",
- # min=1.0, max=1.2,default=1.01)
- # dispersion_samples = IntProperty(name="Samples",min=2, max=100,default=7)
- # reflection = BoolProperty(name="Reflection",description="",default=False)
- # pass_through = BoolProperty(name="Pass through",description="",default=False)
- no_shadow: BoolProperty(name="No Shadow",default=False)
-
- no_image: BoolProperty(name="No Image",default=False)
-
- no_reflection: BoolProperty(name="No Reflection",default=False)
-
- no_radiosity: BoolProperty(name="No Radiosity",default=False)
-
- inverse: BoolProperty(name="Inverse",default=False)
-
- sturm: BoolProperty(name="Sturm",default=False)
-
- double_illuminate: BoolProperty(name="Double Illuminate",default=False)
-
- hierarchy: BoolProperty(name="Hierarchy",default=False)
-
- hollow: BoolProperty(name="Hollow",default=False)
-
- boundorclip: EnumProperty(
- name="Boundorclip",
- items=(("none", "None", ""),
- ("bounded_by", "Bounded_by", ""),
- ("clipped_by", "Clipped_by", "")),
- default="none",
- )
-
- boundorclipob: StringProperty(maxlen=1024)
-
- addboundorclip: BoolProperty(description="",default=False)
-
- blob_threshold: FloatProperty(name="Threshold",min=0.00, max=10.0, default=0.6)
-
- blob_strength: FloatProperty(name="Strength",min=-10.00, max=10.0, default=1.00)
-
- res_u: IntProperty(name="U",min=100, max=1000, default=500)
-
- res_v: IntProperty(name="V",min=100, max=1000, default=500)
-
- contained_by: EnumProperty(
- name="Contained by",
- items=(("box", "Box", ""),
- ("sphere", "Sphere", "")),
- default="box",
- )
-
- container_scale: FloatProperty(name="Container Scale",min=0.0, max=10.0, default=1.00)
-
- threshold: FloatProperty(name="Threshold",min=0.0, max=10.0, default=0.00)
-
- accuracy: FloatProperty(name="Accuracy",min=0.0001, max=0.1, default=0.001)
-
- max_gradient: FloatProperty(name="Max Gradient",min=0.0, max=100.0, default=5.0)
-
- all_intersections: BoolProperty(name="All Intersections",default=False)
-
- max_trace: IntProperty(name="Max Trace",min=1, max=100,default=1)
-
-
- def prop_update_cylinder(self, context):
- """Update POV cylinder primitive parameters not only at creation but anytime they are changed in UI."""
- if bpy.ops.pov.cylinder_update.poll():
- bpy.ops.pov.cylinder_update()
-
- cylinder_radius: FloatProperty(
- name="Cylinder R",min=0.00, max=10.0, default=0.04, update=prop_update_cylinder)
-
- cylinder_location_cap: FloatVectorProperty(
- name="Cylinder Cap Location", subtype='TRANSLATION',
- description="The position of the 'other' end of the cylinder (relative to object location)",
- default=(0.0, 0.0, 2.0), update=prop_update_cylinder
- )
-
- imported_cyl_loc: FloatVectorProperty(
- name="Imported Pov location",
- precision=6,
- default=(0.0, 0.0, 0.0)
- )
-
- imported_cyl_loc_cap: FloatVectorProperty(
- name="Imported Pov location",
- precision=6,
- default=(0.0, 0.0, 2.0)
- )
-
- def prop_update_sphere(self, context):
-
- """Update POV sphere primitive parameters not only at creation but anytime they are changed in UI."""
-
- bpy.ops.pov.sphere_update()
-
- sphere_radius: FloatProperty(
- name="Sphere radius",min=0.00, max=10.0, default=0.5, update=prop_update_sphere)
-
- def prop_update_cone(self, context):
-
- """Update POV cone primitive parameters not only at creation but anytime they are changed in UI."""
-
- bpy.ops.pov.cone_update()
-
- cone_base_radius: FloatProperty(
- name = "Base radius",
- description = "The first radius of the cone",
- default = 1.0, min = 0.01, max = 100.0, update=prop_update_cone
- )
-
- cone_cap_radius: FloatProperty(
- name = "Cap radius",
- description = "The second radius of the cone",
- default = 0.3, min = 0.0, max = 100.0, update=prop_update_cone
- )
-
- cone_segments: IntProperty(
- name = "Segments",
- description = "Radial segmentation of proxy mesh",
- default = 16, min = 3, max = 265, update=prop_update_cone
- )
-
- cone_height: FloatProperty(
- name = "Height",
- description = "Height of the cone",
- default = 2.0, min = 0.01, max = 100.0, update=prop_update_cone
- )
-
- cone_base_z: FloatProperty()
-
- cone_cap_z: FloatProperty()
-
-###########Parametric
- def prop_update_parametric(self, context):
-
- """Update POV parametric surface primitive parameters not only at creation but anytime they are changed in UI."""
-
- bpy.ops.pov.parametric_update()
-
- u_min: FloatProperty(
- name = "U Min",
- description = "",
- default = 0.0, update=prop_update_parametric
- )
-
- v_min: FloatProperty(
- name = "V Min",
- description = "",
- default = 0.0,
- update=prop_update_parametric
- )
-
- u_max: FloatProperty(
- name = "U Max",
- description = "",
- default = 6.28,
- update=prop_update_parametric
- )
-
- v_max: FloatProperty(
- name = "V Max",
- description = "",
- default = 12.57, update=prop_update_parametric
- )
-
- x_eq: StringProperty(
- maxlen=1024,
- default = "cos(v)*(1+cos(u))*sin(v/8)",
- update=prop_update_parametric
- )
-
- y_eq: StringProperty(
- maxlen=1024,
- default = "sin(u)*sin(v/8)+cos(v/8)*1.5",
- update=prop_update_parametric
- )
-
- z_eq: StringProperty(
- maxlen=1024,
- default = "sin(v)*(1+cos(u))*sin(v/8)",
- update=prop_update_parametric
- )
-
- ###########Torus
-
- def prop_update_torus(self, context):
-
- """Update POV torus primitive parameters not only at creation but anytime they are changed in UI."""
-
- bpy.ops.pov.torus_update()
-
- torus_major_segments: IntProperty(
- name = "Segments",
- description = "Radial segmentation of proxy mesh",
- default = 48, min = 3, max = 720, update=prop_update_torus
- )
-
- torus_minor_segments: IntProperty(
- name = "Segments",
- description = "Cross-section segmentation of proxy mesh",
- default = 12, min = 3, max = 720, update=prop_update_torus
- )
-
- torus_major_radius: FloatProperty(
- name="Major radius",
- description="Major radius",
- min=0.00, max=100.00, default=1.0, update=prop_update_torus
- )
-
- torus_minor_radius: FloatProperty(
- name="Minor radius",
- description="Minor radius",
- min=0.00, max=100.00, default=0.25, update=prop_update_torus
- )
-
-
- ###########Rainbow
- arc_angle: FloatProperty(
- name = "Arc angle",
- description = "The angle of the raynbow arc in degrees",
- default = 360, min = 0.01, max = 360.0
- )
-
- falloff_angle: FloatProperty(
- name = "Falloff angle",
- description = "The angle after which rainbow dissolves into background",
- default = 360, min = 0.0, max = 360
- )
-
- ###########HeightFields
-
- quality: IntProperty(
- name = "Quality",
- description = "",
- default = 100, min = 1, max = 100
- )
-
- hf_filename: StringProperty(maxlen = 1024)
-
- hf_gamma: FloatProperty(
- name="Gamma",
- description="Gamma",
- min=0.0001, max=20.0, default=1.0
- )
-
- hf_premultiplied: BoolProperty(
- name="Premultiplied",
- description="Premultiplied",
- default=True,
- )
-
- hf_smooth: BoolProperty(
- name="Smooth",
- description="Smooth",
- default=False,
- )
-
- hf_water: FloatProperty(
- name="Water Level",
- description="Wather Level",
- min=0.00, max=1.00, default=0.0,
- )
-
- hf_hierarchy: BoolProperty(
- name="Hierarchy",
- description="Height field hierarchy",
- default=True,
- )
-
- ##############Superellipsoid
- def prop_update_superellipsoid(self, context):
-
- """Update POV superellipsoid primitive parameters not only at creation but anytime they are changed in UI."""
-
- bpy.ops.pov.superellipsoid_update()
-
- se_param1: FloatProperty(
- name="Parameter 1",
- description="",
- min=0.00, max=10.0, default=0.04
- )
-
- se_param2: FloatProperty(
- name="Parameter 2",
- description="",
- min=0.00, max=10.0, default=0.04
- )
-
- se_u: IntProperty(
- name = "U-segments",
- description = "radial segmentation",
- default = 20, min = 4, max = 265,
- update=prop_update_superellipsoid
- )
-
- se_v: IntProperty(
- name = "V-segments",
- description = "lateral segmentation",
- default = 20, min = 4, max = 265,
- update=prop_update_superellipsoid
- )
-
- se_n1: FloatProperty(
- name = "Ring manipulator",
- description = "Manipulates the shape of the Ring",
- default = 1.0, min = 0.01, max = 100.0,
- update=prop_update_superellipsoid
- )
-
- se_n2: FloatProperty(name = "Cross manipulator",
- description = "Manipulates the shape of the cross-section",
- default = 1.0, min = 0.01, max = 100.0,
- update=prop_update_superellipsoid
- )
-
- se_edit: EnumProperty(items=[("NOTHING", "Nothing", ""),
- ("NGONS", "N-Gons", ""),
- ("TRIANGLES", "Triangles", "")],
- name="Fill up and down",
- description="",
- default='TRIANGLES',
- update=prop_update_superellipsoid
- )
-
- #############Used for loft and Superellipsoid, etc.
- curveshape: EnumProperty(
- name="Povray Shape Type",
- items=(
- ("birail", "Birail", ""),
- ("cairo", "Cairo", ""),
- ("lathe", "Lathe", ""),
- ("loft", "Loft", ""),
- ("prism", "Prism", ""),
- ("sphere_sweep", "Sphere Sweep", ""),
- ("sor", "Surface of Revolution", "")
- ),
- default="sphere_sweep",
- )
-
-#############Supertorus
- def prop_update_supertorus(self, context):
-
- """Update POV supertorus primitive parameters not only at creation but anytime they are changed in UI."""
-
- bpy.ops.pov.supertorus_update()
-
- st_major_radius: FloatProperty(
- name="Major radius",
- description="Major radius",
- min=0.00,
- max=100.00,
- default=1.0,
- update=prop_update_supertorus
- )
-
- st_minor_radius: FloatProperty(
- name="Minor radius",
- description="Minor radius",
- min=0.00, max=100.00, default=0.25,
- update=prop_update_supertorus
- )
-
- st_ring: FloatProperty(
- name="Ring",
- description="Ring manipulator",
- min=0.0001, max=100.00, default=1.00,
- update=prop_update_supertorus
- )
-
- st_cross: FloatProperty(
- name="Cross",
- description="Cross manipulator",
- min=0.0001, max=100.00, default=1.00,
- update=prop_update_supertorus
- )
-
- st_accuracy: FloatProperty(
- name="Accuracy",
- description="Supertorus accuracy",
- min=0.00001, max=1.00, default=0.001
- )
-
- st_max_gradient: FloatProperty(
- name="Gradient",
- description="Max gradient",
- min=0.0001, max=100.00, default=10.00,
- update=prop_update_supertorus
- )
-
- st_R: FloatProperty(
- name = "big radius",
- description = "The radius inside the tube",
- default = 1.0, min = 0.01, max = 100.0,
- update=prop_update_supertorus
- )
-
- st_r: FloatProperty(
- name = "small radius",
- description = "The radius of the tube",
- default = 0.3, min = 0.01, max = 100.0,
- update=prop_update_supertorus
- )
-
- st_u: IntProperty(
- name = "U-segments",
- description = "radial segmentation",
- default = 16, min = 3, max = 265,
- update=prop_update_supertorus
- )
-
- st_v: IntProperty(
- name = "V-segments",
- description = "lateral segmentation",
- default = 8, min = 3, max = 265,
- update=prop_update_supertorus
- )
-
- st_n1: FloatProperty(
- name = "Ring manipulator",
- description = "Manipulates the shape of the Ring",
- default = 1.0, min = 0.01, max = 100.0,
- update=prop_update_supertorus
- )
-
- st_n2: FloatProperty(
- name = "Cross manipulator",
- description = "Manipulates the shape of the cross-section",
- default = 1.0, min = 0.01, max = 100.0,
- update=prop_update_supertorus
- )
-
- st_ie: BoolProperty(
- name = "Use Int.+Ext. radii",
- description = "Use internal and external radii",
- default = False,
- update=prop_update_supertorus
- )
-
- st_edit: BoolProperty(
- name="",
- description="",
- default=False,
- options={'HIDDEN'},
- update=prop_update_supertorus
- )
-
- ########################Loft
- loft_n: IntProperty(
- name = "Segments",
- description = "Vertical segments",
- default = 16, min = 3, max = 720
- )
-
- loft_rings_bottom: IntProperty(
- name = "Bottom",
- description = "Bottom rings",
- default = 5, min = 2, max = 100
- )
-
- loft_rings_side: IntProperty(
- name = "Side",
- description = "Side rings",
- default = 10, min = 2, max = 100
- )
-
- loft_thick: FloatProperty(
- name = "Thickness",
- description = "Manipulates the shape of the Ring",
- default = 0.3, min = 0.01, max = 1.0
- )
-
- loft_r: FloatProperty(
- name = "Radius",
- description = "Radius",
- default = 1, min = 0.01, max = 10
- )
-
- loft_height: FloatProperty(
- name = "Height",
- description = "Manipulates the shape of the Ring",
- default = 2, min = 0.01, max = 10.0
- )
-
- ###################Prism
- prism_n: IntProperty(
- name = "Sides",
- description = "Number of sides",
- default = 5, min = 3, max = 720
- )
-
- prism_r: FloatProperty(
- name = "Radius",
- description = "Radius",
- default = 1.0
- )
-
- ##################Isosurface
- iso_function_text: StringProperty(
- name="Function Text",
- maxlen=1024
- ) #,update=iso_props_update_callback)
-
- ##################PolygonToCircle
- polytocircle_resolution: IntProperty(
- name = "Resolution",
- description = "",
- default = 3, min = 0, max = 256
- )
-
- polytocircle_ngon: IntProperty(
- name = "NGon",
- description = "",
- min = 3, max = 64,default = 5
- )
-
- polytocircle_ngonR: FloatProperty(
- name = "NGon Radius",
- description = "",
- default = 0.3
- )
-
- polytocircle_circleR: FloatProperty(
- name = "Circle Radius",
- description = "",
- default = 1.0
- )
-
-
-###############################################################################
-# Modifiers POV properties.
-###############################################################################
-# class RenderPovSettingsModifier(PropertyGroup):
- boolean_mod: EnumProperty(
- name="Operation",
- description="Choose the type of calculation for Boolean modifier",
- items=(
- ("BMESH", "Use the BMesh Boolean Solver", ""),
- ("CARVE", "Use the Carve Boolean Solver", ""),
- ("POV", "Use POV Constructive Solid Geometry", "")
- ),
- default="BMESH",
- )
-
- #################Avogadro
- # filename_ext = ".png"
-
- # filter_glob = StringProperty(
- # default="*.exr;*.gif;*.hdr;*.iff;*.jpeg;*.jpg;*.pgm;*.png;*.pot;*.ppm;*.sys;*.tga;*.tiff;*.EXR;*.GIF;*.HDR;*.IFF;*.JPEG;*.JPG;*.PGM;*.PNG;*.POT;*.PPM;*.SYS;*.TGA;*.TIFF",
- # options={'HIDDEN'},
- # )
-
-###############################################################################
-# Camera POV properties.
-###############################################################################
-class RenderPovSettingsCamera(PropertyGroup):
-
- """Declare camera properties controllable in UI and translated to POV."""
-
- # DOF Toggle
- dof_enable: BoolProperty(
- name="Depth Of Field",
- description="Enable POV Depth Of Field ",
- default=False,
- )
-
- # 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 independent of focal length). "
- "Increase to get more blur",
- min=0.01, max=1.00, default=0.50
- )
-
- # 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=3
- )
-
- dof_samples_max: IntProperty(
- name="Samples Max",
- description="Maximum number of rays to use for each pixel",
- min=1, max=128, default=9
- )
-
- 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=8192
- )
-
- 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.20
- )
-
- normal_enable: BoolProperty(
- name="Perturbated Camera",
- default=False,
- )
-
- cam_normal: FloatProperty(
- name="Normal Strength",
- min=0.0,
- max=1.0,
- default=0.0,
- )
-
- normal_patterns: EnumProperty(
- name="Pattern",
- description="",
- items=(
- ('agate', "Agate", ""),
- ('boxed', "Boxed", ""),
- ('bumps', "Bumps", ""),
- ('cells', "Cells", ""),
- ('crackle', "Crackle", ""),
- ('dents', "Dents", ""),
- ('granite', "Granite", ""),
- ('leopard', "Leopard", ""),
- ('marble', "Marble", ""),
- ('onion', "Onion", ""),
- ('pavement', "Pavement", ""),
- ('planar', "Planar", ""),
- ('quilted', "Quilted", ""),
- ('ripples', "Ripples", ""),
- ('radial', "Radial", ""),
- ('spherical', "Spherical", ""),
- ('spiral1', "Spiral1", ""),
- ('spiral2', "Spiral2", ""),
- ('spotted', "Spotted", ""),
- ('square', "Square", ""),
- ('tiling', "Tiling", ""),
- ('waves', "Waves", ""),
- ('wood', "Wood", ""),
- ('wrinkles', "Wrinkles", "")
- ),
- default='agate',
- )
-
- turbulence: FloatProperty(name="Turbulence", min=0.0, max=100.0, default=0.1)
-
- scale: FloatProperty(name="Scale", min=0.0,default=1.0)
-
- ##################################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="",
- )
-###############################################################################
-# Light POV properties.
-###############################################################################
-class RenderPovSettingsLight(PropertyGroup):
-
- """Declare light properties controllable in UI and translated to POV."""
-
- # former Space properties from removed Blender Internal
- use_limited_texture_context: BoolProperty(
- name="",
- description="Use the limited version of texture user (for ‘old shading’ mode)",
- default=True,
- )
-
- texture_context: EnumProperty(
- name="Texture context",
- description="Type of texture data to display and edit",
- 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"
- ),
- default = 'MATERIAL',
- )
-
- shadow_method: EnumProperty(
- name="Shadow",
- description="",
- items=(("NOSHADOW", "No Shadow", "No Shadow"),
- ("RAY_SHADOW", "Ray Shadow", "Ray Shadow, Use ray tracing for shadow")),
- default="RAY_SHADOW",
- )
-
- active_texture_index: IntProperty(
- name = "Index for texture_slots",
- default = 0
- )
-
- use_halo: BoolProperty(
- name="Halo",
- description="Render spotlight with a volumetric halo",
- default=False,
- )
-
- halo_intensity: FloatProperty(
- name="Halo intensity",
- description="Brightness of the spotlight halo cone",
- soft_min=0.0, soft_max=1.0, default=1.0
- )
-
- shadow_ray_samples_x: IntProperty(
- name = "Number of samples taken extra (samples x samples)",
- min=1, soft_max=64,
- default = 1,
- )
-
- shadow_ray_samples_y: IntProperty(
- name = "Number of samples taken extra (samples x samples)",
- min=1, soft_max=64,
- default = 1,
- )
-
- shadow_ray_sample_method: EnumProperty(
- name="",
- description="Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower",
- items=(
- ('ADAPTIVE_QMC', "", "Halton samples distribution", "",0),
- ('CONSTANT_QMC', "", "QMC samples distribution", "",1),
- ('CONSTANT_JITTERED', "", "Uses POV jitter keyword", "",2) # "Show other data textures"
- ),
- default = 'CONSTANT_JITTERED',
- )
-
- use_jitter: BoolProperty(
- name="Jitter",
- description="Use noise for sampling (Constant Jittered sampling)",
- default=False,
- )
-
-###############################################################################
-# World POV properties.
-###############################################################################
-class RenderPovSettingsWorld(PropertyGroup):
-
- """Declare world properties controllable in UI and translated to POV."""
-
- # former Space properties from removed Blender Internal
- use_limited_texture_context: BoolProperty(
- name="",
- description="Use the limited version of texture user (for ‘old shading’ mode)",
- default=True,
- )
-
- texture_context: EnumProperty(
- name="Texture context",
- description="Type of texture data to display and edit",
- 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"
- ),
- default = 'MATERIAL',
- )
-
- use_sky_blend: BoolProperty(
- name="Blend Sky",
- description="Render background with natural progression from horizon to zenith",
- default=False,
- )
-
- use_sky_paper: BoolProperty(
- name="Paper Sky",
- description="Flatten blend or texture coordinates",
- default=False,
- )
-
- use_sky_real: BoolProperty(
- name="Real Sky",
- description="Render background with a real horizon, relative to the camera angle",
- default=False,
- )
-
- horizon_color: FloatVectorProperty(
- name="Horizon Color",
- description="Color at the horizon",
- precision=4, step=0.01, min=0, soft_max=1,
- default=(0.0, 0.0, 0.0), options={'ANIMATABLE'}, subtype='COLOR',
- )
-
- zenith_color: FloatVectorProperty(
- name="Zenith Color",
- description="Color at the zenith",
- precision=4, step=0.01, min=0, soft_max=1,
- default=(0.0, 0.0, 0.0), options={'ANIMATABLE'}, subtype='COLOR',
- )
-
- ambient_color: FloatVectorProperty(
- name="Ambient Color",
- description="Ambient color of the world",
- precision=4, step=0.01, min=0, soft_max=1,
- default=(0.0, 0.0, 0.0), options={'ANIMATABLE'}, subtype='COLOR',
- )
- active_texture_index: IntProperty(
- name = "Index for texture_slots",
- default = 0,
- update = brush_texture_update
- )
-
-class WorldTextureSlot(PropertyGroup):
- """Declare world texture slot level properties for UI and translated to POV."""
-
- bl_idname="pov_texture_slots",
- bl_description="Texture_slots from Blender-2.79",
-
- # Adding a "real" texture datablock as property is not possible
- # (or at least not easy through a dynamically populated EnumProperty).
- # That's why we'll use a prop_search() UILayout function in ui.py.
- # So we'll assign the name of the needed texture datablock to the below StringProperty.
- texture : StringProperty(update=active_texture_name_from_uilist)
- # and use another temporary StringProperty to change the linked data
- texture_search : StringProperty(
- name="",
- update = active_texture_name_from_search,
- description = "Browse Texture to be linked",
- )
-
- blend_factor: FloatProperty(
- 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(
- name="Horizon",
- description="Amount texture affects color of the horizon",
- soft_min=0.0, soft_max=1.0, default=1.0,
- )
-
- object: StringProperty(
- name="Object",
- description="Object to use for mapping with Object texture coordinates",
- default="",
- )
-
- offset: FloatVectorProperty(
- name="Offset",
- description=("Fine tune of the texture mapping X, Y and Z locations "),
- precision=4,
- step=0.1,
- soft_min= -100.0,
- soft_max=100.0,
- default=(0.0,0.0,0.0),
- options={'ANIMATABLE'},
- subtype='TRANSLATION',
- )
-
- scale: FloatVectorProperty(
- name="Size",
- subtype='XYZ',
- size=3,
- description="Set scaling for the texture’s X, Y and Z sizes ",
- precision=4,
- step=0.1,
- soft_min= -100.0,
- soft_max=100.0,
- default=(1.0,1.0,1.0),
- options={'ANIMATABLE'},
- )
-
- texture_coords: EnumProperty(
- name="Coordinates",
- description="Texture coordinates used to map the texture onto the background",
- 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")
- ),
- default="VIEW",
- )
-
- use_map_blend: BoolProperty(
- name="Blend Map",
- description="Affect the color progression of the background",
- default=True,
- )
-
- use_map_horizon: BoolProperty(
- name="Horizon Map",
- description="Affect the color of the horizon",
- default=False,
- )
-
- use_map_zenith_down: BoolProperty(
- name="",
- description="Affect the color of the zenith below",
- default=False,
- )
-
- use_map_zenith_up: BoolProperty(
- name="Zenith Up Map",
- description="Affect the color of the zenith above",
- default=False,
- )
-
- zenith_down_factor: FloatProperty(
- 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(
- name="Zenith Up",
- description="Amount texture affects color of the zenith above",
- soft_min=0.0, soft_max=1.0, default=1.0
- )
-
-'''
-# class WORLD_TEXTURE_SLOTS_UL_layerlist(bpy.types.UIList):
-# texture_slots:
-
-class WorldTextureSlots(bpy.props.PropertyGroup):
- index = bpy.prop.PropertyInt(name='index')
- # foo = random prop
-
-bpy.types.World.texture_slots = bpy.props.CollectionProperty(type=PropertyGroup)
-
-for i in range(18): # length of world texture slots
- world.texture_slots.add()
-'''
-
-class MATERIAL_TEXTURE_SLOTS_UL_POV_layerlist(bpy.types.UIList):
- # texture_slots:
- #index: bpy.props.IntProperty(name='index')
- # foo = random prop
- def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
- ob = data
- slot = item
- # ma = slot.name
- # draw_item must handle the three layout types... Usually 'DEFAULT' and 'COMPACT' can share the same code.
- if self.layout_type in {'DEFAULT', 'COMPACT'}:
- # You should always start your row layout by a label (icon + text), or a non-embossed text field,
- # this will also make the row easily selectable in the list! The later also enables ctrl-click rename.
- # We use icon_value of label, as our given icon is an integer value, not an enum ID.
- # Note "data" names should never be translated!
- if slot:
- layout.prop(item, "texture", text="", emboss=False, icon='TEXTURE')
- else:
- layout.label(text="New", translate=False, icon_value=icon)
- # 'GRID' layout type should be as compact as possible (typically a single icon!).
- elif self.layout_type in {'GRID'}:
- layout.alignment = 'CENTER'
- layout.label(text="", icon_value=icon)
-
-
-###############################################################################
-# Text POV properties.
-###############################################################################
-
-
-class RenderPovSettingsText(PropertyGroup):
+ shutil.copyfile(src, dest)
+
+ print('-' * 20)
+ print('Updating POV addon...')
+
+ with tempfile.TemporaryDirectory() as temp_dir_path:
+ temp_zip_path = os.path.join(temp_dir_path, 'master.zip')
+
+ # Download zip archive of latest addons master branch commit (So we also get presets)
+ # switch this URL back to the BF hosted one as soon as gitweb snapshot gets fixed
+ url = 'https://github.com/blender/blender-addons/archive/refs/heads/master.zip'
+ try:
+ print('Downloading', url)
+
+ with urllib.request.urlopen(url, timeout=60) as url_handle, open(
+ temp_zip_path, 'wb'
+ ) as file_handle:
+ file_handle.write(url_handle.read())
+ except urllib.error.URLError as err:
+ self.report({'ERROR'}, 'Could not download: %s' % err)
+
+ # Extract the zip
+ print('Extracting ZIP archive')
+ with zipfile.ZipFile(temp_zip_path) as zip:
+ for member in zip.namelist():
+ if 'blender-addons-master/render_povray' in member:
+ # Remove the first directory and the filename
+ # e.g. blender-addons-master/render_povray/shading_nodes.py
+ # becomes render_povray/shading_nodes.py
+ target_path = os.path.join(
+ temp_dir_path, os.path.join(*member.split('/')[1:-1])
+ )
+
+ filename = os.path.basename(member)
+ # Skip directories
+ if len(filename) == 0:
+ continue
+
+ # Create the target directory if necessary
+ if not os.path.exists(target_path):
+ os.makedirs(target_path)
+
+ source = zip.open(member)
+ target = open(os.path.join(target_path, filename), "wb")
+
+ with source, target:
+ shutil.copyfileobj(source, target)
+ print('copying', source, 'to', target)
+
+ extracted_render_povray_path = os.path.join(temp_dir_path, 'render_povray')
+
+ if not os.path.exists(extracted_render_povray_path):
+ self.report({'ERROR'}, 'Could not extract ZIP archive! Aborting.')
+ return {'FINISHED'}
+
+ # Find the old POV addon files
+ render_povray_dir = os.path.abspath(os.path.dirname(__file__))
+ print('POV addon addon folder:', render_povray_dir)
+
+ # TODO: Create backup
+
+ # Delete old POV addon files (only directories and *.py files, the user might have other stuff in there!)
+ print('Deleting old POV addon files')
+ # remove __init__.py
+ os.remove(os.path.join(render_povray_dir, '__init__.py'))
+ # remove all folders
+ DIRNAMES = 1
+ for dir in next(os.walk(render_povray_dir))[DIRNAMES]:
+ shutil.rmtree(os.path.join(render_povray_dir, dir))
+
+ print('Copying new POV addon files')
+ # copy new POV addon files
+ # copy __init__.py
+ shutil.copy2(
+ os.path.join(extracted_render_povray_path, '__init__.py'), render_povray_dir
+ )
+ # copy all folders
+ recursive_overwrite(extracted_render_povray_path, render_povray_dir)
- """Declare text properties to use UI as an IDE or render text snippets to POV."""
+ bpy.ops.preferences.addon_refresh()
+ print('POV addon update finished, restart Blender for the changes to take effect.')
+ print('-' * 20)
+ self.report({'WARNING'}, 'Restart Blender!')
+ return {'FINISHED'}
- custom_code: EnumProperty(
- name="Custom Code",
- description="rendered source: Both adds text at the "
- "top of the exported POV file",
- items=(
- ("3dview", "View", ""),
- ("text", "Text", ""),
- ("both", "Both", "")
- ),
- default="text",
- )
###############################################################################
# Povray Preferences.
###############################################################################
-class PovrayPreferences(AddonPreferences):
-
+class PovrayPreferences(bpy.types.AddonPreferences):
"""Declare preference variables to set up POV binary."""
bl_idname = __name__
@@ -5518,23 +342,19 @@ class PovrayPreferences(AddonPreferences):
name="Feature Set",
description="Choose between official (POV-Ray) or (UberPOV) "
"development branch features to write in the pov file",
- items= (
- ('povray', 'Official POV-Ray', '','PLUGIN', 0),
- ('uberpov', 'Unofficial UberPOV', '', 'PLUGIN', 1)
+ items=(
+ ("povray", "Official POV-Ray", "", "PLUGIN", 0),
+ ("uberpov", "Unofficial UberPOV", "", "PLUGIN", 1),
),
- default='povray',
+ default="povray",
)
filepath_povray: StringProperty(
- name="Binary Location",
- description="Path to renderer executable",
- subtype='FILE_PATH',
+ name="Binary Location", description="Path to renderer executable", subtype="FILE_PATH"
)
docpath_povray: StringProperty(
- name="Includes Location",
- description="Path to Insert Menu files",
- subtype='FILE_PATH',
+ name="Includes Location", description="Path to Insert Menu files", subtype="FILE_PATH"
)
use_sounds: BoolProperty(
@@ -5550,22 +370,21 @@ class PovrayPreferences(AddonPreferences):
filepath_complete_sound: StringProperty(
name="Finish Render Sound",
description="Path to finished render sound file",
- subtype='FILE_PATH',
+ subtype="FILE_PATH",
)
filepath_parse_error_sound: StringProperty(
name="Parse Error Sound",
description="Path to parsing time error sound file",
- subtype='FILE_PATH',
+ subtype="FILE_PATH",
)
filepath_cancel_sound: StringProperty(
name="Cancel Render Sound",
description="Path to cancelled or render time error sound file",
- subtype='FILE_PATH',
+ subtype="FILE_PATH",
)
- #shall we not move this to UI file?
def draw(self, context):
layout = self.layout
layout.prop(self, "branch_feature_set_povray")
@@ -5574,112 +393,50 @@ class PovrayPreferences(AddonPreferences):
layout.prop(self, "filepath_complete_sound")
layout.prop(self, "filepath_parse_error_sound")
layout.prop(self, "filepath_cancel_sound")
- layout.prop(self, "use_sounds", icon='SOUND')
+ layout.prop(self, "use_sounds", icon="SOUND")
+ layout.operator("pov.update_addon", icon='FILE_REFRESH')
-classes = (
- PovrayPreferences,
- RenderPovSettingsCamera,
- RenderPovSettingsLight,
- RenderPovSettingsWorld,
- MaterialTextureSlot,
- WorldTextureSlot,
- RenderPovSettingsMaterial,
- MaterialRaytraceTransparency,
- MaterialRaytraceMirror,
- MaterialSubsurfaceScattering,
- MaterialStrandSettings,
- RenderPovSettingsObject,
- RenderPovSettingsScene,
- RenderPovSettingsText,
- RenderPovSettingsTexture,
-)
+classes = (POV_OT_update_addon, PovrayPreferences)
def register():
-
- # bpy.utils.register_module(__name__) # DEPRECATED Now imported from bpy.utils import register_class
-
for cls in classes:
register_class(cls)
+ render_properties.register()
+ scenography_properties.register()
+ shading_properties.register()
+ texturing_properties.register()
+ object_properties.register()
+ scripting_properties.register()
+ scenography.register()
render.register()
- ui.register()
- primitives.register()
- nodes.register()
-
- '''
- bpy.types.VIEW3D_MT_add.prepend(ui.menu_func_add)
- bpy.types.TOPBAR_MT_file_import.append(ui.menu_func_import)
- bpy.types.TEXT_MT_templates.append(ui.menu_func_templates)
- bpy.types.RENDER_PT_POV_radiosity.prepend(ui.rad_panel_func)
- bpy.types.LIGHT_PT_POV_light.prepend(ui.light_panel_func)
- bpy.types.WORLD_PT_world.prepend(ui.world_panel_func)
- # was used for parametric objects but made the other addon unreachable on
- # unregister for other tools to use created a user action call instead
- # addon_utils.enable("add_mesh_extra_objects", default_set=False, persistent=True)
-
- # bpy.types.TEXTURE_PT_context_texture.prepend(TEXTURE_PT_povray_type)
- '''
- bpy.types.NODE_HT_header.append(ui.menu_func_nodes)
- nodeitems_utils.register_node_categories("POVRAYNODES", node_categories)
- bpy.types.Scene.pov = PointerProperty(type=RenderPovSettingsScene)
- # bpy.types.Modifier.pov = PointerProperty(type=RenderPovSettingsModifier)
- bpy.types.Material.pov_raytrace_transparency = PointerProperty(type=MaterialRaytraceTransparency)
- bpy.types.Material.pov = PointerProperty(type=RenderPovSettingsMaterial)
- bpy.types.Material.pov_subsurface_scattering = PointerProperty(type=MaterialSubsurfaceScattering)
- bpy.types.Material.strand = PointerProperty(type=MaterialStrandSettings)
- bpy.types.Material.pov_raytrace_mirror = PointerProperty(type=MaterialRaytraceMirror)
- bpy.types.Texture.pov = PointerProperty(type=RenderPovSettingsTexture)
- bpy.types.Object.pov = PointerProperty(type=RenderPovSettingsObject)
- bpy.types.Camera.pov = PointerProperty(type=RenderPovSettingsCamera)
- bpy.types.Light.pov = PointerProperty(type=RenderPovSettingsLight)
- bpy.types.World.pov = PointerProperty(type=RenderPovSettingsWorld)
- bpy.types.Material.pov_texture_slots = CollectionProperty(type=MaterialTextureSlot)
- bpy.types.World.pov_texture_slots = CollectionProperty(type=WorldTextureSlot)
- bpy.types.Text.pov = PointerProperty(type=RenderPovSettingsText)
+ base_ui.register()
+ scripting.register()
+ object_primitives.register()
def unregister():
- del bpy.types.Scene.pov
- del bpy.types.Material.pov
- del bpy.types.Material.pov_subsurface_scattering
- del bpy.types.Material.strand
- del bpy.types.Material.pov_raytrace_mirror
- del bpy.types.Material.pov_raytrace_transparency
- # del bpy.types.Modifier.pov
- del bpy.types.Texture.pov
- del bpy.types.Object.pov
- del bpy.types.Camera.pov
- del bpy.types.Light.pov
- del bpy.types.World.pov
- del bpy.types.World.pov_texture_slots
- del bpy.types.Material.pov_texture_slots
- del bpy.types.Text.pov
-
- nodeitems_utils.unregister_node_categories("POVRAYNODES")
- bpy.types.NODE_HT_header.remove(ui.menu_func_nodes)
- '''
- # bpy.types.TEXTURE_PT_context_texture.remove(TEXTURE_PT_povray_type)
- # addon_utils.disable("add_mesh_extra_objects", default_set=False)
- bpy.types.WORLD_PT_POV_world.remove(ui.world_panel_func)
- bpy.types.LIGHT_PT_POV_light.remove(ui.light_panel_func)
- bpy.types.RENDER_PT_POV_radiosity.remove(ui.rad_panel_func)
- bpy.types.TEXT_MT_templates.remove(ui.menu_func_templates)
- bpy.types.TOPBAR_MT_file_import.remove(ui.menu_func_import)
- bpy.types.VIEW3D_MT_add.remove(ui.menu_func_add)
- '''
- # bpy.utils.unregister_module(__name__)
-
- nodes.unregister()
- primitives.unregister()
- ui.unregister()
+ object_primitives.unregister()
+ scripting.unregister()
+ base_ui.unregister()
render.unregister()
+ scenography.register()
+ scripting_properties.unregister()
+ object_properties.unregister()
+ texturing_properties.unregister()
+ shading_properties.unregister()
+ scenography_properties.unregister()
+ render_properties.unregister()
- for cls in reversed(classes):
+ for cls in classes:
unregister_class(cls)
-
if __name__ == "__main__":
register()
+
+# ------------8<---------[ BREAKPOINT ]--------------8<-----------# Move this snippet around
+# __import__('code').interact(local=dict(globals(), **locals())) # < and uncomment this line
+# ----------------------------------------------------------------# to inspect from Terminal