Source code for blendify.lights.common

from .base import Light
from ..internal.types import Vector3d


[docs]class PointLight(Light): def __init__( self, strength: float, shadow_soft_size: float, color: Vector3d, tag: str, cast_shadows: bool = True, **kwargs ): """Creates PointLight light source in Blender Args: strength (float): strength of the light source emitted over the entire area of the light in all directions shadow_soft_size (float): light size for ray shadow sampling (Raytraced shadows) in [0, inf] color (Vector3d): color of the light source cast_shadows (bool, optional): whether the light source casts shadows or not (default: True) quaternion (Vector4d, optional): rotation applied to the Blender object (default: (1,0,0,0)) translation (Vector3d, optional): translation applied to the Blender object (default: (0,0,0)) tag (str): name of the created object in Blender """ blender_light = self._blender_create_light(tag, "POINT") super().__init__(**kwargs, tag=tag, blender_object=blender_light) self.color = color self.strength = strength self.cast_shadows = cast_shadows self.shadow_soft_size = shadow_soft_size @property def shadow_soft_size(self) -> float: return self.blender_light.data.shadow_soft_size @shadow_soft_size.setter def shadow_soft_size(self, val: float): self.blender_light.data.shadow_soft_size = val
[docs]class DirectionalLight(Light): def __init__( self, strength: float, angular_diameter: float, color: Vector3d, tag: str, cast_shadows: bool = True, **kwargs ): """Creates DirectionalLight light source in Blender Args: strength (float): strength of the light source in watts per meter squared (W/m^2) angular_diameter (float): angular diameter of the Sun as seen from the Earth in [0, 3.14159] color (Vector3d): color of the light source cast_shadows (bool, optional): whether the light source casts shadows or not (default: True) quaternion (Vector4d, optional): rotation applied to the Blender object (default: (1,0,0,0)) translation (Vector3d, optional): translation applied to the Blender object (default: (0,0,0)) tag (str): name of the created object in Blender """ blender_light = self._blender_create_light(tag, "SUN") super().__init__(**kwargs, tag=tag, blender_object=blender_light) self.color = color self.strength = strength self.cast_shadows = cast_shadows self.angular_diameter = angular_diameter @property def angular_diameter(self) -> float: return self.blender_light.data.angle @angular_diameter.setter def angular_diameter(self, val: float): self.blender_light.data.angle = val
[docs]class SpotLight(Light): def __init__( self, strength: float, spot_size: float, spot_blend: float, color: Vector3d, shadow_soft_size: float, tag: str, cast_shadows: bool = True, **kwargs ): """Creates SpotLight light source in Blender Args: strength (float): strength of the light source that light would emit over its entire area if it wasn't limited by the spot angle spot_size (float): angle of the spotlight beam in [0.0174533, 3.14159] spot_blend (float): the softness of the spotlight edge in [0, 1] color (Vector3d): color of the light source shadow_soft_size (float): light size for ray shadow sampling (Raytraced shadows) in [0, inf] cast_shadows (bool, optional): whether the light source casts shadows or not (default: True) quaternion (Vector4d, optional): rotation applied to the Blender object (default: (1,0,0,0)) translation (Vector3d, optional): translation applied to the Blender object (default: (0,0,0)) tag (str): name of the created object in Blender """ # spot_size: Angle of the spotlight beam (float in [0.0174533, 3.14159]) default 0.785398 # spot_blend: The softness of the spotlight edge (float in [0, 1]) default 0.15 blender_light = self._blender_create_light(tag, "SPOT") super().__init__(**kwargs, tag=tag, blender_object=blender_light) self.color = color self.strength = strength self.spot_size = spot_size self.spot_blend = spot_blend self.cast_shadows = cast_shadows self.shadow_soft_size = shadow_soft_size @property def spot_size(self) -> float: return self.blender_light.data.spot_size @spot_size.setter def spot_size(self, val: float): self.blender_light.data.spot_size = val @property def spot_blend(self) -> float: return self.blender_light.data.spot_blend @spot_blend.setter def spot_blend(self, val: float): self.blender_light.data.spot_blend = val @property def shadow_soft_size(self) -> float: return self.blender_light.data.shadow_soft_size @shadow_soft_size.setter def shadow_soft_size(self, val: float): self.blender_light.data.shadow_soft_size = val