29 float light_threshold,
44 evli->
sizex = scale[0] / scale[2];
45 evli->
sizey = scale[1] / scale[2];
93 power += 1.0f / (2.0f *
M_PI);
103 float power = 1.0f / area_power;
107 power *= 0.0792f *
M_PI;
113 power *= tmp + (1.0f - tmp) *
M_1_PI;
129 float mat[4][4], scale[3];
145 float surface_max_power =
max_ff(evli->
diff, evli->
spec) * max_power;
146 float volume_max_power = evli->
volume * max_power;
206 printf(
"Too many lights in the scene !!!\n");
238 for (
int i = 0; i < linfo->
num_light; i++) {
246 float min_radius = 1.0f /
sqrtf(0.5f * upper_bound / power);
typedef float(TangentPoint)[2]
General operations, lookup, etc. for blender objects.
MINLINE float max_fff(float a, float b, float c)
MINLINE float max_ff(float a, float b)
MINLINE float min_ff(float a, float b)
MINLINE float square_f(float a)
void normalize_m4_m4_ex(float R[4][4], const float M[4][4], float r_scale[3]) ATTR_NONNULL()
MINLINE float normalize_v3(float r[3])
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void negate_v3_v3(float r[3], const float a[3])
MINLINE bool is_zero_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
MINLINE float dot_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void negate_v3(float r[3])
#define LA_CUSTOM_ATTENUATION
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
const DRWContextState * DRW_context_state_get(void)
static void eevee_light_setup(Object *ob, EEVEE_Light *evli)
void EEVEE_lights_cache_finish(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
void EEVEE_lights_cache_add(EEVEE_ViewLayerData *sldata, Object *ob)
void EEVEE_lights_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
void eevee_light_matrix_get(const EEVEE_Light *evli, float r_mat[4][4])
static float light_shape_power_get(const Light *la, const EEVEE_Light *evli)
static void light_shape_parameters_set(EEVEE_Light *evli, const Light *la, const float scale[3])
static float light_shape_power_volume_get(const Light *la, const EEVEE_Light *evli, float area_power)
static float light_attenuation_radius_get(const Light *la, float light_threshold, float light_power)
void EEVEE_shadows_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
#define LAMPTYPE_AREA_ELLIPSE
void EEVEE_shadows_cube_add(EEVEE_LightsInfo *linfo, EEVEE_Light *evli, struct Object *ob)
void EEVEE_shadows_cascade_add(EEVEE_LightsInfo *linfo, EEVEE_Light *evli, struct Object *ob)
static void area(int d1, int d2, int e1, int e2, float weights[2])
vec_base< T, 3 > cross(const vec_base< T, 3 > &a, const vec_base< T, 3 > &b)
struct EEVEE_Light light_data[MAX_LIGHT]
struct EEVEE_EffectsInfo * effects
struct EEVEE_CommonUniformBuffer common_data
struct GPUUniformBuf * light_ubo
struct EEVEE_LightsInfo * lights