14auto light_component::get_bounds_sphere_impl(
const math::vec3* light_direction)
const ->
math::bsphere
20 result =
math::bsphere(math::vec3(0.0f, 0.0f, 0.0f), light_.point_data.range);
24 float range = light_.spot_data.get_range();
28 float clamped_inner_cone_angle =
29 math::radians(math::clamp(light_.spot_data.get_inner_angle(), 0.0f, 89.0f));
30 float clamped_outer_cone_angle = math::clamp(math::radians(light_.spot_data.get_outer_angle()),
31 clamped_inner_cone_angle + 0.001f,
32 math::radians(89.0f) + 0.001f);
33 float cos_outer_cone = math::cos(clamped_outer_cone_angle);
38 math::vec3
center = math::vec3(0.0f, 0.0f, 0.0f) + 0.5f * (*light_direction) *
range;
49 result =
math::bsphere(math::vec3(0.0f, 0.0f, 0.0f), 999999999.0f);
57 return get_bounds_sphere_impl(
nullptr);
62 return get_bounds_sphere_impl(&light_direction);
75 auto sphere = get_bounds_sphere_precise(light_direction);
82 const math::vec3& light_position,
83 const math::vec3& light_direction,
84 const math::vec3& view_origin,
105 clamped_inner_cone_angle + 0.001f,
106 math::radians(89.0f) + 0.001f);
107 float cos_outer_cone = math::cos(clamped_outer_cone_angle);
112 math::vec3
center = light_position + 0.5f * light_direction *
range;
132 return *shadowmap_generator_;
151 turbidity_ = math::clamp(turbidity, 1.9f, 10.0f);
166 return cloud_coverage_;
171 cloud_coverage_ = math::clamp(coverage, 0.0f, 1.0f);
176 return cloud_base_altitude_;
181 cloud_base_altitude_ = math::max(altitude, 100.0f);
186 return cloud_top_altitude_;
191 cloud_top_altitude_ = math::max(altitude, cloud_base_altitude_ + 100.0f);
201 cloud_speed_ = math::clamp(speed, 0.0f, 200.0f);
206 return cloud_density_;
211 cloud_density_ = math::max(density, 0.0f);
216 return cloud_absorption_;
221 cloud_absorption_ = math::clamp(absorption, 0.01f, 0.5f);
226 return cloud_light_absorption_;
231 cloud_light_absorption_ = math::clamp(absorption, 0.01f, 0.5f);
236 return cloud_vol_uv_scale_;
241 cloud_vol_uv_scale_ = math::clamp(
scale, 1.0e-6f, 0.01f);
246 return cloud_vol_edge_width_;
251 cloud_vol_edge_width_ = math::clamp(
width, 0.01f, 0.8f);
256 return cloud_vol_shape_power_;
261 cloud_vol_shape_power_ = math::clamp(power, 0.5f, 4.0f);
266 return cloud_vol_detail_erode_;
271 cloud_vol_detail_erode_ = math::clamp(erode, 0.0f, 2.0f);
276 return cloud_vol_macro_strength_;
281 cloud_vol_macro_strength_ = math::clamp(strength, 0.0f, 1.5f);
286 return cloud_vol_coarse_scale_;
291 cloud_vol_coarse_scale_ = math::clamp(
scale, 0.05f, 1.0f);
296 return cloud_vol_base_mix_;
301 cloud_vol_base_mix_ = math::clamp(mix, 0.0f, 1.0f);
306 return cloud_vol_sun_intensity_;
311 cloud_vol_sun_intensity_ = math::clamp(intensity, 0.0f, 200.0f);
316 return irradiance_intensity_;
321 irradiance_intensity_ = math::max(intensity, 0.0f);
326 return irradiance_tint_;
331 irradiance_tint_ =
color;
336 return irradiance_quality_;
341 irradiance_quality_ = quality;
346 return irradiance_use_sky_;
351 irradiance_use_sky_ = use_sky;
356 return sky_brightness_;
361 sky_brightness_ = math::max(brightness, 0.0f);
Provides storage for common representation of spherical bounding volume, and wraps up common function...
auto get_bounds() const -> math::bbox
Gets the bounding box of the light object.
void set_light(const light &l)
Sets the light object.
auto get_bounds_sphere() const -> math::bsphere
auto get_light() const -> const light &
Gets the light object.
auto compute_projected_sphere_rect(irect32_t &rect, const math::vec3 &light_position, const math::vec3 &light_direction, const math::vec3 &view_origin, const math::transform &view, const math::transform &proj) -> int
Computes the projected sphere rectangle.
auto get_shadowmap_generator() -> shadow::shadowmap_generator &
Gets the shadow map generator.
auto get_bounds_precise(const math::vec3 &light_direction) const -> math::bbox
Gets the bounding box of the light object.
auto get_bounds_sphere_precise(const math::vec3 &light_direction) const -> math::bsphere
Shadow mapping generator with improved algorithms for high-altitude cameras.
Class that contains sky light data.
void set_mode(const sky_mode &mode)
Sets the sky mode.
auto get_cloud_top_altitude() const noexcept -> float
Gets the cloud top altitude in world units (volumetric slab top).
void set_cloud_vol_base_mix(float mix)
void set_cloud_vol_shape_power(float power)
auto get_irradiance_intensity() const noexcept -> float
Gets the irradiance intensity (strength of indirect diffuse).
void set_irradiance_tint(const math::color &color)
Sets the irradiance tint override.
void set_irradiance_intensity(float intensity)
Sets the irradiance intensity.
auto get_irradiance_tint() const noexcept -> const math::color &
Gets the optional irradiance tint override (default from sky when white).
void set_irradiance_use_sky(bool use_sky)
Sets whether the sky color contributes to the ambient irradiance.
void set_cloud_vol_macro_strength(float strength)
void set_sky_brightness(float brightness)
Sets the sky brightness multiplier.
void set_cloud_light_absorption(float absorption)
Sets the cloud light absorption (self-shadow strength).
void set_cloud_vol_edge_width(float width)
auto get_cloud_density() const noexcept -> float
Gets the cloud density multiplier.
void set_cloud_vol_detail_erode(float erode)
auto get_sky_brightness() const noexcept -> float
Gets the sky brightness multiplier (affects atmospheric pass and irradiance).
auto get_cloud_vol_coarse_scale() const noexcept -> float
Volumetric cloud shape: coarse noise sample scale (larger masses).
auto get_irradiance_quality() const noexcept -> irradiance_quality
Gets the irradiance quality for indirect diffuse.
auto get_cloud_absorption() const noexcept -> float
Gets the cloud absorption coefficient (Beer-Lambert extinction).
void set_cloud_mode(cloud_mode mode)
Sets the cloud rendering mode.
auto get_cloud_vol_detail_erode() const noexcept -> float
Volumetric cloud shape: Worley detail erosion strength.
auto get_cloud_vol_edge_width() const noexcept -> float
Volumetric cloud shape: smoothstep edge width for the density mask.
auto get_cloud_coverage() const noexcept -> float
Gets the cloud coverage value.
void set_cloud_vol_uv_scale(float scale)
auto get_cloud_vol_macro_strength() const noexcept -> float
Volumetric cloud shape: macro Worley threshold jitter (clearings vs sheet).
auto get_turbidity() const noexcept -> float
Gets the current turbidity value.
auto get_mode() const noexcept -> const sky_mode &
Gets the current sky mode.
auto get_cloud_vol_shape_power() const noexcept -> float
Volumetric cloud shape: contrast on the density mask (pow exponent).
auto get_cloud_vol_uv_scale() const noexcept -> float
Volumetric cloud shape: world-to-noise UV scale (smaller = larger features).
void set_cloud_absorption(float absorption)
Sets the cloud absorption coefficient.
auto get_irradiance_use_sky() const noexcept -> bool
Gets whether the sky color contributes to the ambient irradiance.
void set_cloud_vol_sun_intensity(float intensity)
auto get_cloud_vol_sun_intensity() const noexcept -> float
Volumetric cloud lighting: sun contribution multiplier in the cloud integrator.
void set_turbidity(float turbidity)
Sets the turbidity value.
irradiance_quality
Directional variation of the indirect diffuse ambient.
auto get_cloud_vol_base_mix() const noexcept -> float
Volumetric cloud shape: blend between coarse and fine base noise.
void set_cloud_coverage(float coverage)
Sets the cloud coverage value.
auto get_cloud_light_absorption() const noexcept -> float
Gets the cloud light absorption (self-shadow strength).
void set_irradiance_quality(irradiance_quality quality)
Sets the irradiance quality.
auto get_cloud_mode() const noexcept -> cloud_mode
Gets the cloud rendering mode.
void set_cloud_vol_coarse_scale(float scale)
void set_cloud_top_altitude(float altitude)
Sets the cloud top altitude. Must be greater than base altitude.
void set_cloud_base_altitude(float altitude)
Sets the cloud base altitude.
sky_mode
Enumeration for sky modes.
auto get_cloud_base_altitude() const noexcept -> float
Gets the cloud base altitude in world units.
void set_cloud_speed(float speed)
Sets the cloud speed multiplier.
auto get_cloud_speed() const noexcept -> float
Gets the cloud speed multiplier.
void set_cloud_density(float density)
Sets the cloud density multiplier.
std::uint32_t compute_projected_sphere_rect(std::int32_t &left, std::int32_t &right, std::int32_t &top, std::int32_t &bottom, const glm::vec3 &sphere_center, float radius, const glm::vec3 &view_origin, const glm::mat4 &view, const glm::mat4 &proj)
@ sphere
Sphere type reflection probe.
std::vector< math::color > color
std::vector< float > scale
Storage for box vector values and wraps up common functionality.
bbox & from_sphere(const vec3 ¢er, float radius)
Calculates the bounding box based on the sphere specified.
float range
The range of the point light.
float get_range() const
Gets the range of the spot light.
float get_outer_angle() const
Gets the outer angle of the spot light.
float get_inner_angle() const
Gets the inner angle of the spot light.
Struct representing a light.
light_type type
The type of the light.
point point_data
Data specific to point lights.
spot spot_data
Data specific to spot lights.