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/particles_properties.py')
-rw-r--r--render_povray/particles_properties.py718
1 files changed, 718 insertions, 0 deletions
diff --git a/render_povray/particles_properties.py b/render_povray/particles_properties.py
new file mode 100644
index 00000000..573ca48c
--- /dev/null
+++ b/render_povray/particles_properties.py
@@ -0,0 +1,718 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+# <pep8 compliant>
+"""Declare shading properties exported to POV textures."""
+import bpy
+from bpy.utils import register_class, unregister_class
+from bpy.types import PropertyGroup
+from bpy.props import (
+ StringProperty,
+ BoolProperty,
+ FloatProperty,
+ PointerProperty,
+)
+
+
+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)
+
+
+ # 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
+
+ # 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’
+
+ # 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)
+
+ # 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_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.pov.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.pov.specular_shader in {'COOKTORR', 'PHONG'}:
+ col.prop(mat, "specular_hardness", text="Hardness")
+ elif mat.pov.specular_shader == 'BLINN':
+
+ row.prop(mat, "specular_hardness", text="Hardness")
+ row.prop(mat, "specular_ior", text="IOR")
+ elif mat.pov.specular_shader == 'WARDISO':
+ col.prop(mat, "specular_slope", text="Slope")
+ elif mat.pov.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")
+
+
+ XXX remove unused props and relayout as done for transparent sky
+
+
+ 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.pov.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.pov.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.pov.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")
+
+ """
+
+
+classes = (
+ MaterialStrandSettings,
+)
+
+
+def register():
+ for cls in classes:
+ register_class(cls)
+
+ bpy.types.Material.strand = PointerProperty(type=MaterialStrandSettings)
+
+
+def unregister():
+ del bpy.types.Material.strand
+
+ for cls in reversed(classes):
+ unregister_class(cls)