Blender  V3.3
rna_light.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
7 #include <stdlib.h>
8 
9 #include "BLI_math_base.h"
10 #include "BLI_math_rotation.h"
11 #include "BLI_sys_types.h"
12 
13 #include "BLT_translation.h"
14 
15 #include "RNA_define.h"
16 #include "RNA_enum_types.h"
17 #include "rna_internal.h"
18 
19 #include "DNA_light_types.h"
20 #include "DNA_material_types.h"
21 #include "DNA_texture_types.h"
22 
23 #ifdef RNA_RUNTIME
24 
25 # include "MEM_guardedalloc.h"
26 
27 # include "BKE_context.h"
28 # include "BKE_main.h"
29 # include "BKE_texture.h"
30 
31 # include "DEG_depsgraph.h"
32 
33 # include "ED_node.h"
34 # include "WM_api.h"
35 # include "WM_types.h"
36 
37 static void rna_Light_buffer_size_set(PointerRNA *ptr, int value)
38 {
39  Light *la = (Light *)ptr->data;
40 
41  CLAMP(value, 128, 10240);
42  la->bufsize = value;
43  la->bufsize &= (~15); /* round to multiple of 16 */
44 }
45 
46 static StructRNA *rna_Light_refine(struct PointerRNA *ptr)
47 {
48  Light *la = (Light *)ptr->data;
49 
50  switch (la->type) {
51  case LA_LOCAL:
52  return &RNA_PointLight;
53  case LA_SUN:
54  return &RNA_SunLight;
55  case LA_SPOT:
56  return &RNA_SpotLight;
57  case LA_AREA:
58  return &RNA_AreaLight;
59  default:
60  return &RNA_Light;
61  }
62 }
63 
64 static void rna_Light_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
65 {
66  Light *la = (Light *)ptr->owner_id;
67 
68  DEG_id_tag_update(&la->id, 0);
70 }
71 
72 static void rna_Light_draw_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
73 {
74  Light *la = (Light *)ptr->owner_id;
75 
76  DEG_id_tag_update(&la->id, 0);
78 }
79 
80 static void rna_Light_use_nodes_update(bContext *C, PointerRNA *ptr)
81 {
82  Light *la = (Light *)ptr->data;
83 
84  if (la->use_nodes && la->nodetree == NULL) {
86  }
87 
88  rna_Light_update(CTX_data_main(C), CTX_data_scene(C), ptr);
89 }
90 
91 #else
92 /* Don't define icons here, so they don't show up in the Light UI (properties Editor) - DingTo */
94  {LA_LOCAL, "POINT", 0, "Point", "Omnidirectional point light source"},
95  {LA_SUN, "SUN", 0, "Sun", "Constant direction parallel ray light source"},
96  {LA_SPOT, "SPOT", 0, "Spot", "Directional cone light source"},
97  {LA_AREA, "AREA", 0, "Area", "Directional area light source"},
98  {0, NULL, 0, NULL, NULL},
99 };
100 
101 static void rna_def_light(BlenderRNA *brna)
102 {
103  StructRNA *srna;
104  PropertyRNA *prop;
105  static float default_color[4] = {1.0f, 1.0f, 1.0f, 1.0f};
106 
107  srna = RNA_def_struct(brna, "Light", "ID");
108  RNA_def_struct_sdna(srna, "Light");
109  RNA_def_struct_refine_func(srna, "rna_Light_refine");
110  RNA_def_struct_ui_text(srna, "Light", "Light data-block for lighting a scene");
112  RNA_def_struct_ui_icon(srna, ICON_LIGHT_DATA);
113 
114  prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
116  RNA_def_property_ui_text(prop, "Type", "Type of light");
118  RNA_def_property_update(prop, 0, "rna_Light_draw_update");
119 
120  prop = RNA_def_property(srna, "distance", PROP_FLOAT, PROP_DISTANCE);
121  RNA_def_property_float_sdna(prop, NULL, "dist");
122  RNA_def_property_range(prop, 0, INT_MAX);
123  RNA_def_property_ui_range(prop, 0, 1000, 1, 3);
125  prop,
126  "Distance",
127  "Falloff distance - the light is at half the original intensity at this point");
128  RNA_def_property_update(prop, 0, "rna_Light_draw_update");
129 
130  prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
131  RNA_def_property_float_sdna(prop, NULL, "r");
132  RNA_def_property_array(prop, 3);
133  RNA_def_property_float_array_default(prop, default_color);
134  RNA_def_property_ui_text(prop, "Color", "Light color");
135  RNA_def_property_update(prop, 0, "rna_Light_draw_update");
136 
137  prop = RNA_def_property(srna, "specular_factor", PROP_FLOAT, PROP_FACTOR);
138  RNA_def_property_float_sdna(prop, NULL, "spec_fac");
139  RNA_def_property_range(prop, 0.0f, FLT_MAX);
140  RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.01, 2);
141  RNA_def_property_ui_text(prop, "Specular Factor", "Specular reflection multiplier");
142  RNA_def_property_update(prop, 0, "rna_Light_update");
143 
144  prop = RNA_def_property(srna, "diffuse_factor", PROP_FLOAT, PROP_FACTOR);
145  RNA_def_property_float_sdna(prop, NULL, "diff_fac");
146  RNA_def_property_range(prop, 0.0f, FLT_MAX);
147  RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.01, 2);
148  RNA_def_property_ui_text(prop, "Diffuse Factor", "Diffuse reflection multiplier");
149  RNA_def_property_update(prop, 0, "rna_Light_update");
150 
151  prop = RNA_def_property(srna, "volume_factor", PROP_FLOAT, PROP_FACTOR);
152  RNA_def_property_float_sdna(prop, NULL, "volume_fac");
153  RNA_def_property_range(prop, 0.0f, FLT_MAX);
154  RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.01, 2);
155  RNA_def_property_ui_text(prop, "Volume Factor", "Volume light multiplier");
156  RNA_def_property_update(prop, 0, "rna_Light_update");
157 
158  prop = RNA_def_property(srna, "use_custom_distance", PROP_BOOLEAN, PROP_NONE);
161  "Custom Attenuation",
162  "Use custom attenuation distance instead of global light threshold");
163  RNA_def_property_update(prop, 0, "rna_Light_update");
164 
165  prop = RNA_def_property(srna, "cutoff_distance", PROP_FLOAT, PROP_DISTANCE);
166  RNA_def_property_float_sdna(prop, NULL, "att_dist");
167  RNA_def_property_range(prop, 0.0f, FLT_MAX);
168  RNA_def_property_ui_range(prop, 0.01f, 100.0f, 1.0, 2);
170  prop, "Cutoff Distance", "Distance at which the light influence will be set to 0");
171  RNA_def_property_update(prop, 0, "rna_Light_update");
172 
173  /* nodes */
174  prop = RNA_def_property(srna, "node_tree", PROP_POINTER, PROP_NONE);
175  RNA_def_property_pointer_sdna(prop, NULL, "nodetree");
178  RNA_def_property_ui_text(prop, "Node Tree", "Node tree for node based lights");
179 
180  prop = RNA_def_property(srna, "use_nodes", PROP_BOOLEAN, PROP_NONE);
181  RNA_def_property_boolean_sdna(prop, NULL, "use_nodes", 1);
184  RNA_def_property_ui_text(prop, "Use Nodes", "Use shader nodes to render the light");
185  RNA_def_property_update(prop, 0, "rna_Light_use_nodes_update");
186 
187  /* common */
189 }
190 
191 static void rna_def_light_energy(StructRNA *srna, const short light_type)
192 {
193  PropertyRNA *prop;
194 
195  switch (light_type) {
196  case LA_SUN: {
197  /* Distant light strength has no unit defined,
198  * it's proportional to 'watt/m^2' and is not sensitive to scene unit scale. */
199  prop = RNA_def_property(srna, "energy", PROP_FLOAT, PROP_NONE);
200  RNA_def_property_ui_range(prop, 0.0f, 10.0f, 1, 3);
202  prop, "Strength", "Sunlight strength in watts per meter squared (W/m^2)");
203  RNA_def_property_update(prop, 0, "rna_Light_draw_update");
204  break;
205  }
206  case LA_SPOT: {
207  /* Lights with a location have power in Watts,
208  * which is sensitive to scene unit scale. */
209  prop = RNA_def_property(srna, "energy", PROP_FLOAT, PROP_POWER);
210  RNA_def_property_ui_range(prop, 0.0f, 1000000.0f, 10, 5);
212  "Power",
213  "The energy this light would emit over its entire area "
214  "if it wasn't limited by the spot angle");
216  RNA_def_property_update(prop, 0, "rna_Light_draw_update");
217  break;
218  }
219  default: {
220  /* Lights with a location have power in Watts,
221  * which is sensitive to scene unit scale. */
222  prop = RNA_def_property(srna, "energy", PROP_FLOAT, PROP_POWER);
223  RNA_def_property_ui_range(prop, 0.0f, 1000000.0f, 10, 5);
225  prop,
226  "Power",
227  "Light energy emitted over the entire area of the light in all directions");
229  RNA_def_property_update(prop, 0, "rna_Light_draw_update");
230  break;
231  }
232  }
233 }
234 
236 {
237  PropertyRNA *prop;
238 
239  static const EnumPropertyItem prop_fallofftype_items[] = {
240  {LA_FALLOFF_CONSTANT, "CONSTANT", 0, "Constant", ""},
241  {LA_FALLOFF_INVLINEAR, "INVERSE_LINEAR", 0, "Inverse Linear", ""},
242  {LA_FALLOFF_INVSQUARE, "INVERSE_SQUARE", 0, "Inverse Square", ""},
243  {LA_FALLOFF_INVCOEFFICIENTS, "INVERSE_COEFFICIENTS", 0, "Inverse Coefficients", ""},
244  {LA_FALLOFF_CURVE, "CUSTOM_CURVE", 0, "Custom Curve", ""},
245  {LA_FALLOFF_SLIDERS, "LINEAR_QUADRATIC_WEIGHTED", 0, "Lin/Quad Weighted", ""},
246  {0, NULL, 0, NULL, NULL},
247  };
248 
249  prop = RNA_def_property(srna, "falloff_type", PROP_ENUM, PROP_NONE);
250  RNA_def_property_enum_items(prop, prop_fallofftype_items);
251  RNA_def_property_ui_text(prop, "Falloff Type", "Intensity Decay with distance");
252  RNA_def_property_update(prop, 0, "rna_Light_update");
253 
254  prop = RNA_def_property(srna, "falloff_curve", PROP_POINTER, PROP_NONE);
255  RNA_def_property_pointer_sdna(prop, NULL, "curfalloff");
256  RNA_def_property_ui_text(prop, "Falloff Curve", "Custom light falloff curve");
257  RNA_def_property_update(prop, 0, "rna_Light_update");
258 
259  prop = RNA_def_property(srna, "linear_attenuation", PROP_FLOAT, PROP_FACTOR);
260  RNA_def_property_float_sdna(prop, NULL, "att1");
261  RNA_def_property_range(prop, 0.0f, 1.0f);
262  RNA_def_property_ui_text(prop, "Linear Attenuation", "Linear distance attenuation");
263  RNA_def_property_update(prop, 0, "rna_Light_draw_update");
264 
265  prop = RNA_def_property(srna, "quadratic_attenuation", PROP_FLOAT, PROP_FACTOR);
266  RNA_def_property_float_sdna(prop, NULL, "att2");
267  RNA_def_property_range(prop, 0.0f, 1.0f);
268  RNA_def_property_ui_text(prop, "Quadratic Attenuation", "Quadratic distance attenuation");
269  RNA_def_property_update(prop, 0, "rna_Light_draw_update");
270 
271  prop = RNA_def_property(srna, "constant_coefficient", PROP_FLOAT, PROP_NONE);
272  RNA_def_property_float_sdna(prop, NULL, "coeff_const");
273  RNA_def_property_range(prop, 0.0f, FLT_MAX);
275  prop, "Constant Coefficient", "Constant distance attenuation coefficient");
276  RNA_def_property_update(prop, 0, "rna_Light_draw_update");
277 
278  prop = RNA_def_property(srna, "linear_coefficient", PROP_FLOAT, PROP_NONE);
279  RNA_def_property_float_sdna(prop, NULL, "coeff_lin");
280  RNA_def_property_range(prop, 0.0f, FLT_MAX);
281  RNA_def_property_ui_text(prop, "Linear Coefficient", "Linear distance attenuation coefficient");
282  RNA_def_property_update(prop, 0, "rna_Light_draw_update");
283 
284  prop = RNA_def_property(srna, "quadratic_coefficient", PROP_FLOAT, PROP_NONE);
285  RNA_def_property_float_sdna(prop, NULL, "coeff_quad");
286  RNA_def_property_range(prop, 0.0f, FLT_MAX);
288  prop, "Quadratic Coefficient", "Quadratic distance attenuation coefficient");
289  RNA_def_property_update(prop, 0, "rna_Light_draw_update");
290 }
291 
292 static void rna_def_light_shadow(StructRNA *srna, bool sun)
293 {
294  PropertyRNA *prop;
295 
296  prop = RNA_def_property(srna, "use_shadow", PROP_BOOLEAN, PROP_NONE);
298  RNA_def_property_update(prop, 0, "rna_Light_draw_update");
299 
300  prop = RNA_def_property(srna, "shadow_buffer_size", PROP_INT, PROP_NONE);
301  RNA_def_property_int_sdna(prop, NULL, "bufsize");
302  RNA_def_property_range(prop, 128, 10240);
304  "Shadow Buffer Size",
305  "Resolution of the shadow buffer, higher values give crisper shadows "
306  "but use more memory");
307  RNA_def_property_int_funcs(prop, NULL, "rna_Light_buffer_size_set", NULL);
308  RNA_def_property_update(prop, 0, "rna_Light_update");
309 
310  prop = RNA_def_property(srna, "shadow_buffer_clip_start", PROP_FLOAT, PROP_DISTANCE);
311  RNA_def_property_float_sdna(prop, NULL, "clipsta");
312  RNA_def_property_range(prop, 1e-6f, FLT_MAX);
313  RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 10, 3);
315  "Shadow Buffer Clip Start",
316  "Shadow map clip start, below which objects will not generate shadows");
317  RNA_def_property_update(prop, 0, "rna_Light_draw_update");
318 
319  prop = RNA_def_property(srna, "shadow_buffer_bias", PROP_FLOAT, PROP_NONE);
320  RNA_def_property_float_sdna(prop, NULL, "bias");
321  RNA_def_property_range(prop, 0.0f, FLT_MAX);
322  RNA_def_property_ui_range(prop, 0.001f, 5.0f, 1.0, 3);
323  RNA_def_property_ui_text(prop, "Shadow Buffer Bias", "Bias for reducing self shadowing");
324  RNA_def_property_update(prop, 0, "rna_Light_update");
325 
326  prop = RNA_def_property(srna, "shadow_buffer_samples", PROP_INT, PROP_NONE);
327  RNA_def_property_int_sdna(prop, NULL, "samp");
328  RNA_def_property_range(prop, 1, 16);
329  RNA_def_property_ui_text(prop, "Samples", "Number of shadow buffer samples");
330  RNA_def_property_update(prop, 0, "rna_Light_update");
331 
332  prop = RNA_def_property(srna, "shadow_color", PROP_FLOAT, PROP_COLOR);
333  RNA_def_property_float_sdna(prop, NULL, "shdwr");
334  RNA_def_property_array(prop, 3);
335  RNA_def_property_ui_text(prop, "Shadow Color", "Color of shadows cast by the light");
336  RNA_def_property_update(prop, 0, "rna_Light_update");
337 
338  prop = RNA_def_property(srna, "shadow_soft_size", PROP_FLOAT, PROP_DISTANCE);
339  RNA_def_property_float_sdna(prop, NULL, "area_size");
340  RNA_def_property_range(prop, 0.0f, FLT_MAX);
341  RNA_def_property_ui_range(prop, 0, 100, 0.1, 3);
343  prop, "Shadow Soft Size", "Light size for ray shadow sampling (Raytraced shadows)");
344  RNA_def_property_update(prop, 0, "rna_Light_update");
345 
346  /* Eevee */
347  prop = RNA_def_property(srna, "use_contact_shadow", PROP_BOOLEAN, PROP_NONE);
350  "Contact Shadow",
351  "Use screen space ray-tracing to have correct shadowing "
352  "near occluder, or for small features that does not appear "
353  "in shadow maps");
354  RNA_def_property_update(prop, 0, "rna_Light_update");
355 
356  prop = RNA_def_property(srna, "contact_shadow_distance", PROP_FLOAT, PROP_DISTANCE);
357  RNA_def_property_float_sdna(prop, NULL, "contact_dist");
358  RNA_def_property_range(prop, 0.0f, 9999.0f);
360  "Contact Shadow Distance",
361  "World space distance in which to search for "
362  "screen space occluder");
363  RNA_def_property_update(prop, 0, "rna_Light_update");
364 
365  prop = RNA_def_property(srna, "contact_shadow_bias", PROP_FLOAT, PROP_NONE);
366  RNA_def_property_float_sdna(prop, NULL, "contact_bias");
367  RNA_def_property_range(prop, 0.001f, 9999.0f);
368  RNA_def_property_ui_range(prop, 0.001f, 5.0f, 1.0, 3);
369  RNA_def_property_ui_text(prop, "Contact Shadow Bias", "Bias to avoid self shadowing");
370  RNA_def_property_update(prop, 0, "rna_Light_update");
371 
372  prop = RNA_def_property(srna, "contact_shadow_thickness", PROP_FLOAT, PROP_DISTANCE);
373  RNA_def_property_float_sdna(prop, NULL, "contact_thickness");
374  RNA_def_property_range(prop, 0.0f, 9999.0f);
375  RNA_def_property_ui_range(prop, 0, 100, 0.1, 3);
377  prop, "Contact Shadow Thickness", "Pixel thickness used to detect occlusion");
378  RNA_def_property_update(prop, 0, "rna_Light_update");
379 
380  if (sun) {
381  prop = RNA_def_property(srna, "shadow_cascade_max_distance", PROP_FLOAT, PROP_DISTANCE);
382  RNA_def_property_float_sdna(prop, NULL, "cascade_max_dist");
383  RNA_def_property_range(prop, 0.0f, FLT_MAX);
385  "Cascade Max Distance",
386  "End distance of the cascaded shadow map (only in perspective view)");
387  RNA_def_property_update(prop, 0, "rna_Light_update");
388 
389  prop = RNA_def_property(srna, "shadow_cascade_count", PROP_INT, PROP_NONE);
390  RNA_def_property_int_sdna(prop, NULL, "cascade_count");
391  RNA_def_property_range(prop, 1, 4);
393  prop, "Cascade Count", "Number of texture used by the cascaded shadow map");
394  RNA_def_property_update(prop, 0, "rna_Light_update");
395 
396  prop = RNA_def_property(srna, "shadow_cascade_exponent", PROP_FLOAT, PROP_FACTOR);
397  RNA_def_property_float_sdna(prop, NULL, "cascade_exponent");
398  RNA_def_property_range(prop, 0.0f, 1.0f);
400  "Exponential Distribution",
401  "Higher value increase resolution towards the viewpoint");
402  RNA_def_property_update(prop, 0, "rna_Light_update");
403 
404  prop = RNA_def_property(srna, "shadow_cascade_fade", PROP_FLOAT, PROP_FACTOR);
405  RNA_def_property_float_sdna(prop, NULL, "cascade_fade");
406  RNA_def_property_range(prop, 0.0f, 1.0f);
408  prop, "Cascade Fade", "How smooth is the transition between each cascade");
409  RNA_def_property_update(prop, 0, "rna_Light_update");
410  }
411 }
412 
413 static void rna_def_point_light(BlenderRNA *brna)
414 {
415  StructRNA *srna;
416 
417  srna = RNA_def_struct(brna, "PointLight", "Light");
418  RNA_def_struct_sdna(srna, "Light");
419  RNA_def_struct_ui_text(srna, "Point Light", "Omnidirectional point Light");
420  RNA_def_struct_ui_icon(srna, ICON_LIGHT_POINT);
421 
423  rna_def_light_falloff(srna);
424  rna_def_light_shadow(srna, false);
425 }
426 
427 static void rna_def_area_light(BlenderRNA *brna)
428 {
429  StructRNA *srna;
430  PropertyRNA *prop;
431 
432  static const EnumPropertyItem prop_areashape_items[] = {
433  {LA_AREA_SQUARE, "SQUARE", 0, "Square", ""},
434  {LA_AREA_RECT, "RECTANGLE", 0, "Rectangle", ""},
435  {LA_AREA_DISK, "DISK", 0, "Disk", ""},
436  {LA_AREA_ELLIPSE, "ELLIPSE", 0, "Ellipse", ""},
437  {0, NULL, 0, NULL, NULL},
438  };
439 
440  srna = RNA_def_struct(brna, "AreaLight", "Light");
441  RNA_def_struct_sdna(srna, "Light");
442  RNA_def_struct_ui_text(srna, "Area Light", "Directional area Light");
443  RNA_def_struct_ui_icon(srna, ICON_LIGHT_AREA);
444 
446  rna_def_light_shadow(srna, false);
447  rna_def_light_falloff(srna);
448 
449  prop = RNA_def_property(srna, "shape", PROP_ENUM, PROP_NONE);
450  RNA_def_property_enum_sdna(prop, NULL, "area_shape");
451  RNA_def_property_enum_items(prop, prop_areashape_items);
452  RNA_def_property_ui_text(prop, "Shape", "Shape of the area Light");
453  RNA_def_property_update(prop, 0, "rna_Light_draw_update");
454 
455  prop = RNA_def_property(srna, "size", PROP_FLOAT, PROP_DISTANCE);
456  RNA_def_property_float_sdna(prop, NULL, "area_size");
457  RNA_def_property_range(prop, 0.0f, FLT_MAX);
458  RNA_def_property_ui_range(prop, 0, 100, 0.1, 3);
460  prop, "Size", "Size of the area of the area light, X direction size for rectangle shapes");
461  RNA_def_property_update(prop, 0, "rna_Light_draw_update");
462 
463  prop = RNA_def_property(srna, "size_y", PROP_FLOAT, PROP_DISTANCE);
464  RNA_def_property_float_sdna(prop, NULL, "area_sizey");
465  RNA_def_property_range(prop, 0.0f, FLT_MAX);
466  RNA_def_property_ui_range(prop, 0, 100, 0.1, 3);
468  prop,
469  "Size Y",
470  "Size of the area of the area light in the Y direction for rectangle shapes");
471  RNA_def_property_update(prop, 0, "rna_Light_draw_update");
472 
473  prop = RNA_def_property(srna, "spread", PROP_FLOAT, PROP_ANGLE);
474  RNA_def_property_float_sdna(prop, NULL, "area_spread");
475  RNA_def_property_range(prop, DEG2RADF(1.0f), DEG2RADF(180.0f));
477  prop,
478  "Spread",
479  "How widely the emitted light fans out, as in the case of a gridded softbox");
480  RNA_def_property_update(prop, 0, "rna_Light_draw_update");
481 }
482 
483 static void rna_def_spot_light(BlenderRNA *brna)
484 {
485  StructRNA *srna;
486  PropertyRNA *prop;
487 
488  srna = RNA_def_struct(brna, "SpotLight", "Light");
489  RNA_def_struct_sdna(srna, "Light");
490  RNA_def_struct_ui_text(srna, "Spot Light", "Directional cone Light");
491  RNA_def_struct_ui_icon(srna, ICON_LIGHT_SPOT);
492 
494  rna_def_light_falloff(srna);
495  rna_def_light_shadow(srna, false);
496 
497  prop = RNA_def_property(srna, "use_square", PROP_BOOLEAN, PROP_NONE);
499  RNA_def_property_ui_text(prop, "Square", "Cast a square spot light shape");
500  RNA_def_property_update(prop, 0, "rna_Light_draw_update");
501 
502  prop = RNA_def_property(srna, "spot_blend", PROP_FLOAT, PROP_NONE);
503  RNA_def_property_float_sdna(prop, NULL, "spotblend");
504  RNA_def_property_range(prop, 0.0f, 1.0f);
505  RNA_def_property_ui_text(prop, "Spot Blend", "The softness of the spotlight edge");
506  RNA_def_property_update(prop, 0, "rna_Light_draw_update");
507 
508  prop = RNA_def_property(srna, "spot_size", PROP_FLOAT, PROP_ANGLE);
509  RNA_def_property_float_sdna(prop, NULL, "spotsize");
510  RNA_def_property_range(prop, DEG2RADF(1.0f), DEG2RADF(180.0f));
511  RNA_def_property_ui_text(prop, "Spot Size", "Angle of the spotlight beam");
512  RNA_def_property_update(prop, 0, "rna_Light_draw_update");
513 
514  prop = RNA_def_property(srna, "show_cone", PROP_BOOLEAN, PROP_NONE);
517  prop,
518  "Show Cone",
519  "Display transparent cone in 3D view to visualize which objects are contained in it");
520  RNA_def_property_update(prop, 0, "rna_Light_draw_update");
521 }
522 
523 static void rna_def_sun_light(BlenderRNA *brna)
524 {
525  StructRNA *srna;
526  PropertyRNA *prop;
527 
528  srna = RNA_def_struct(brna, "SunLight", "Light");
529  RNA_def_struct_sdna(srna, "Light");
530  RNA_def_struct_ui_text(srna, "Sun Light", "Constant direction parallel ray Light");
531  RNA_def_struct_ui_icon(srna, ICON_LIGHT_SUN);
532 
533  prop = RNA_def_property(srna, "angle", PROP_FLOAT, PROP_ANGLE);
534  RNA_def_property_float_sdna(prop, NULL, "sun_angle");
535  RNA_def_property_range(prop, DEG2RADF(0.0f), DEG2RADF(180.0f));
536  RNA_def_property_ui_text(prop, "Angle", "Angular diameter of the Sun as seen from the Earth");
537  RNA_def_property_update(prop, 0, "rna_Light_update");
538 
540  rna_def_light_shadow(srna, true);
541 }
542 
544 {
545  rna_def_light(brna);
546  rna_def_point_light(brna);
547  rna_def_area_light(brna);
548  rna_def_spot_light(brna);
549  rna_def_sun_light(brna);
550 }
551 
552 #endif
struct Scene * CTX_data_scene(const bContext *C)
Definition: context.c:1090
struct Main * CTX_data_main(const bContext *C)
Definition: context.c:1074
#define DEG2RADF(_deg)
#define UNUSED(x)
#define BLT_I18NCONTEXT_ID_LIGHT
void DEG_id_tag_update(struct ID *id, int flag)
#define LA_AREA
#define LA_FALLOFF_SLIDERS
#define LA_FALLOFF_INVCOEFFICIENTS
#define LA_FALLOFF_CONSTANT
#define LA_SPOT
#define LA_AREA_SQUARE
#define LA_AREA_ELLIPSE
#define LA_SUN
#define LA_SHADOW
#define LA_SQUARE
#define LA_LOCAL
#define LA_FALLOFF_INVSQUARE
#define LA_CUSTOM_ATTENUATION
#define LA_SHOW_CONE
#define LA_AREA_DISK
#define LA_AREA_RECT
#define LA_FALLOFF_INVLINEAR
#define LA_FALLOFF_CURVE
#define LA_SHAD_CONTACT
void ED_node_shader_default(const struct bContext *C, struct ID *id)
Read Guarded memory(de)allocation.
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position CLAMP
@ PROP_FLOAT
Definition: RNA_types.h:61
@ PROP_BOOLEAN
Definition: RNA_types.h:59
@ PROP_ENUM
Definition: RNA_types.h:63
@ PROP_INT
Definition: RNA_types.h:60
@ PROP_POINTER
Definition: RNA_types.h:64
@ PROPOVERRIDE_OVERRIDABLE_LIBRARY
Definition: RNA_types.h:312
@ PROP_CONTEXT_UPDATE
Definition: RNA_types.h:269
@ PROP_ANIMATABLE
Definition: RNA_types.h:202
@ PROP_PTR_NO_OWNERSHIP
Definition: RNA_types.h:257
@ PROP_DISTANCE
Definition: RNA_types.h:149
@ PROP_POWER
Definition: RNA_types.h:174
@ PROP_COLOR
Definition: RNA_types.h:153
@ PROP_ANGLE
Definition: RNA_types.h:145
@ PROP_NONE
Definition: RNA_types.h:126
@ PROP_FACTOR
Definition: RNA_types.h:144
#define C
Definition: RandGen.cpp:25
#define ND_LIGHTING_DRAW
Definition: WM_types.h:432
#define NC_LAMP
Definition: WM_types.h:332
#define ND_LIGHTING
Definition: WM_types.h:431
Scene scene
void rna_def_animdata_common(StructRNA *srna)
void RNA_def_struct_refine_func(StructRNA *srna, const char *refine)
Definition: rna_define.c:1148
void RNA_def_property_pointer_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2740
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t bit)
Definition: rna_define.c:2236
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
Definition: rna_define.c:1645
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
Definition: rna_define.c:1237
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
Definition: rna_define.c:1872
void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
Definition: rna_define.c:1048
void RNA_def_property_array(PropertyRNA *prop, int length)
Definition: rna_define.c:1539
void RNA_def_property_range(PropertyRNA *prop, double min, double max)
Definition: rna_define.c:1737
void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *func)
Definition: rna_define.c:2900
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
Definition: rna_define.c:1257
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
Definition: rna_define.c:1495
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
Definition: rna_define.c:1028
void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2601
void RNA_def_property_int_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
Definition: rna_define.c:3028
void RNA_def_struct_ui_icon(StructRNA *srna, int icon)
Definition: rna_define.c:1245
void RNA_def_property_translation_context(PropertyRNA *prop, const char *context)
Definition: rna_define.c:2848
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
Definition: rna_define.c:1490
void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2493
void RNA_def_property_ui_range(PropertyRNA *prop, double min, double max, double step, int precision)
Definition: rna_define.c:1664
void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2343
void RNA_def_struct_translation_context(StructRNA *srna, const char *context)
Definition: rna_define.c:1250
void RNA_def_property_float_array_default(PropertyRNA *prop, const float *array)
Definition: rna_define.c:2043
void RNA_def_property_override_flag(PropertyRNA *prop, PropertyOverrideFlag flag)
Definition: rna_define.c:1503
static void rna_def_area_light(BlenderRNA *brna)
Definition: rna_light.c:427
void RNA_def_light(BlenderRNA *brna)
Definition: rna_light.c:543
static void rna_def_sun_light(BlenderRNA *brna)
Definition: rna_light.c:523
static void rna_def_light_shadow(StructRNA *srna, bool sun)
Definition: rna_light.c:292
static void rna_def_light_falloff(StructRNA *srna)
Definition: rna_light.c:235
const EnumPropertyItem rna_enum_light_type_items[]
Definition: rna_light.c:93
static void rna_def_point_light(BlenderRNA *brna)
Definition: rna_light.c:413
static void rna_def_light_energy(StructRNA *srna, const short light_type)
Definition: rna_light.c:191
static void rna_def_spot_light(BlenderRNA *brna)
Definition: rna_light.c:483
static void rna_def_light(BlenderRNA *brna)
Definition: rna_light.c:101
short bufsize
short use_nodes
struct bNodeTree * nodetree
short type
Definition: BKE_main.h:121
void * data
Definition: RNA_types.h:38
struct ID * owner_id
Definition: RNA_types.h:36
void WM_main_add_notifier(unsigned int type, void *reference)
PointerRNA * ptr
Definition: wm_files.c:3480