mirror of
https://github.com/blender/blender-addons.git
synced 2025-07-23 00:48:26 +00:00

Move copyright text to SPDX-FileCopyrightText or set to the Blender Foundation so "make check_licenses" now runs without warnings.
376 lines
9.3 KiB
Python
376 lines
9.3 KiB
Python
# SPDX-FileCopyrightText: 2022 Blender Foundation
|
||
#
|
||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||
|
||
"""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 (
|
||
FloatVectorProperty,
|
||
StringProperty,
|
||
BoolProperty,
|
||
IntProperty,
|
||
FloatProperty,
|
||
EnumProperty,
|
||
PointerProperty,
|
||
)
|
||
|
||
|
||
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):
|
||
"""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,
|
||
)
|
||
|
||
classes = (
|
||
MaterialRaytraceTransparency,
|
||
MaterialRaytraceMirror,
|
||
MaterialSubsurfaceScattering,
|
||
)
|
||
|
||
def register():
|
||
for cls in classes:
|
||
register_class(cls)
|
||
|
||
bpy.types.Material.pov_raytrace_transparency = PointerProperty(
|
||
type=MaterialRaytraceTransparency
|
||
)
|
||
bpy.types.Material.pov_subsurface_scattering = PointerProperty(
|
||
type=MaterialSubsurfaceScattering
|
||
)
|
||
bpy.types.Material.pov_raytrace_mirror = PointerProperty(type=MaterialRaytraceMirror)
|
||
|
||
|
||
def unregister():
|
||
del bpy.types.Material.pov_subsurface_scattering
|
||
del bpy.types.Material.pov_raytrace_mirror
|
||
del bpy.types.Material.pov_raytrace_transparency
|
||
|
||
for cls in reversed(classes):
|
||
unregister_class(cls)
|