Texture stack influences are now all separate values, and negative
[blender-staging.git] / source / blender / makesrna / intern / rna_world.c
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * Contributor(s): Blender Foundation (2008).
21  *
22  * ***** END GPL LICENSE BLOCK *****
23  */
24
25 #include <float.h>
26 #include <stdlib.h>
27
28 #include "RNA_define.h"
29 #include "RNA_types.h"
30
31 #include "rna_internal.h"
32
33 #include "DNA_material_types.h"
34 #include "DNA_texture_types.h"
35 #include "DNA_world_types.h"
36
37 #ifdef RNA_RUNTIME
38
39 #include "MEM_guardedalloc.h"
40
41 #include "BKE_depsgraph.h"
42 #include "BKE_main.h"
43 #include "BKE_texture.h"
44
45 #include "WM_api.h"
46 #include "WM_types.h"
47
48 static PointerRNA rna_World_ambient_occlusion_get(PointerRNA *ptr)
49 {
50         return rna_pointer_inherit_refine(ptr, &RNA_WorldAmbientOcclusion, ptr->id.data);
51 }
52
53 static PointerRNA rna_World_stars_get(PointerRNA *ptr)
54 {
55         return rna_pointer_inherit_refine(ptr, &RNA_WorldStarsSettings, ptr->id.data);
56 }
57
58 static PointerRNA rna_World_mist_get(PointerRNA *ptr)
59 {
60         return rna_pointer_inherit_refine(ptr, &RNA_WorldMistSettings, ptr->id.data);
61 }
62
63 static void rna_World_mtex_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
64 {
65         World *wo= (World*)ptr->data;
66         rna_iterator_array_begin(iter, (void*)wo->mtex, sizeof(MTex*), MAX_MTEX, 0, NULL);
67 }
68
69 static PointerRNA rna_World_active_texture_get(PointerRNA *ptr)
70 {
71         World *wo= (World*)ptr->data;
72         Tex *tex;
73
74         tex= (wo->mtex[(int)wo->texact])? wo->mtex[(int)wo->texact]->tex: NULL;
75         return rna_pointer_inherit_refine(ptr, &RNA_Texture, tex);
76 }
77
78 static void rna_World_active_texture_set(PointerRNA *ptr, PointerRNA value)
79 {
80         World *wo= (World*)ptr->data;
81         int act= wo->texact;
82
83         if(wo->mtex[act] && wo->mtex[act]->tex)
84                 id_us_min(&wo->mtex[act]->tex->id);
85
86         if(value.data) {
87                 if(!wo->mtex[act]) {
88                         wo->mtex[act]= add_mtex();
89                         wo->mtex[act]->texco= TEXCO_VIEW;
90                 }
91                 
92                 wo->mtex[act]->tex= value.data;
93                 id_us_plus(&wo->mtex[act]->tex->id);
94         }
95         else if(wo->mtex[act]) {
96                 MEM_freeN(wo->mtex[act]);
97                 wo->mtex[act]= NULL;
98         }
99 }
100
101 static void rna_World_update(bContext *C, PointerRNA *ptr)
102 {
103         World *wo= ptr->id.data;
104
105         DAG_id_flush_update(&wo->id, 0);
106         WM_event_add_notifier(C, NC_WORLD, wo);
107 }
108
109 static void rna_World_draw_update(bContext *C, PointerRNA *ptr)
110 {
111         World *wo= ptr->id.data;
112
113         DAG_id_flush_update(&wo->id, 0);
114         WM_event_add_notifier(C, NC_WORLD|ND_WORLD_DRAW, wo);
115 }
116
117 #else
118
119 static void rna_def_world_mtex(BlenderRNA *brna)
120 {
121         StructRNA *srna;
122         PropertyRNA *prop;
123
124         static EnumPropertyItem texco_items[] = {
125                 {TEXCO_VIEW, "VIEW", 0, "View", "Uses view vector for the texture coordinates."},
126                 {TEXCO_GLOB, "GLOBAL", 0, "Global", "Uses global coordinates for the texture coordinates (interior mist)."},
127                 {TEXCO_ANGMAP, "ANGMAP", 0, "AngMap", "Uses 360 degree angular coordinates, e.g. for spherical light probes."},
128                 {TEXCO_H_SPHEREMAP, "SPHERE", 0, "Sphere", "For 360 degree panorama sky, spherical mapped, only top half."},
129                 {TEXCO_H_TUBEMAP, "TUBE", 0, "Tube", "For 360 degree panorama sky, cylindrical mapped, only top half."},
130                 {TEXCO_OBJECT, "OBJECT", 0, "Object", "Uses linked object's coordinates for texture coordinates."},
131                 {0, NULL, 0, NULL, NULL}};
132
133         srna= RNA_def_struct(brna, "WorldTextureSlot", "TextureSlot");
134         RNA_def_struct_sdna(srna, "MTex");
135         RNA_def_struct_ui_text(srna, "World Texture Slot", "Texture slot for textures in a World datablock.");
136
137         /* map to */
138         prop= RNA_def_property(srna, "map_blend", PROP_BOOLEAN, PROP_NONE);
139         RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_BLEND);
140         RNA_def_property_ui_text(prop, "Blend", "Affect the color progression of the background.");
141         RNA_def_property_update(prop, 0, "rna_World_update");
142
143         prop= RNA_def_property(srna, "map_horizon", PROP_BOOLEAN, PROP_NONE);
144         RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_HORIZ);
145         RNA_def_property_ui_text(prop, "Horizon", "Affect the color of the horizon.");
146         RNA_def_property_update(prop, 0, "rna_World_update");
147
148         prop= RNA_def_property(srna, "map_zenith_up", PROP_BOOLEAN, PROP_NONE);
149         RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_ZENUP);
150         RNA_def_property_ui_text(prop, "Zenith Up", "Affect the color of the zenith above.");
151         RNA_def_property_update(prop, 0, "rna_World_update");
152
153         prop= RNA_def_property(srna, "map_zenith_down", PROP_BOOLEAN, PROP_NONE);
154         RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_ZENDOWN);
155         RNA_def_property_ui_text(prop, "Zenith Down", "Affect the color of the zenith below.");
156         RNA_def_property_update(prop, 0, "rna_World_update");
157
158         /* unused
159         prop= RNA_def_property(srna, "map_mist", PROP_BOOLEAN, PROP_NONE);
160         RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_MIST);
161         RNA_def_property_ui_text(prop, "Mist", "Causes the texture to affect the intensity of the mist.");*/
162
163         prop= RNA_def_property(srna, "texture_coordinates", PROP_ENUM, PROP_NONE);
164         RNA_def_property_enum_sdna(prop, NULL, "texco");
165         RNA_def_property_enum_items(prop, texco_items);
166         RNA_def_property_ui_text(prop, "Texture Coordinates", "Texture coordinates used to map the texture onto the background.");
167         RNA_def_property_update(prop, 0, "rna_World_update");
168
169         prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
170         RNA_def_property_pointer_sdna(prop, NULL, "object");
171         RNA_def_property_struct_type(prop, "Object");
172         RNA_def_property_flag(prop, PROP_EDITABLE);
173         RNA_def_property_ui_text(prop, "Object", "Object to use for mapping with Object texture coordinates.");
174         RNA_def_property_update(prop, 0, "rna_World_update");
175
176         prop= RNA_def_property(srna, "blend_factor", PROP_FLOAT, PROP_NONE);
177         RNA_def_property_float_sdna(prop, NULL, "blendfac");
178         RNA_def_property_ui_range(prop, 0, 1, 10, 3);
179         RNA_def_property_ui_text(prop, "Blend Factor", "Amount texture affects color progression of the background.");
180         RNA_def_property_update(prop, 0, "rna_World_update");
181
182         prop= RNA_def_property(srna, "horizon_factor", PROP_FLOAT, PROP_NONE);
183         RNA_def_property_float_sdna(prop, NULL, "colfac");
184         RNA_def_property_ui_range(prop, 0, 1, 10, 3);
185         RNA_def_property_ui_text(prop, "Horizon Factor", "Amount texture affects color of the horizon.");
186         RNA_def_property_update(prop, 0, "rna_World_update");
187
188         prop= RNA_def_property(srna, "zenith_up_factor", PROP_FLOAT, PROP_NONE);
189         RNA_def_property_float_sdna(prop, NULL, "zenupfac");
190         RNA_def_property_ui_range(prop, 0, 1, 10, 3);
191         RNA_def_property_ui_text(prop, "Zenith Up Factor", "Amount texture affects color of the zenith above.");
192         RNA_def_property_update(prop, 0, "rna_World_update");
193
194         prop= RNA_def_property(srna, "zenith_down_factor", PROP_FLOAT, PROP_NONE);
195         RNA_def_property_float_sdna(prop, NULL, "zendownfac");
196         RNA_def_property_ui_range(prop, 0, 1, 10, 3);
197         RNA_def_property_ui_text(prop, "Zenith Down Factor", "Amount texture affects color of the zenith below.");
198         RNA_def_property_update(prop, 0, "rna_World_update");
199 }
200
201 static void rna_def_ambient_occlusion(BlenderRNA *brna)
202 {
203         StructRNA *srna;
204         PropertyRNA *prop;
205
206         static EnumPropertyItem blend_mode_items[] = {
207                 {WO_AOADD, "ADD", 0, "Add", "Add light and shadow."},
208                 {WO_AOSUB, "SUBTRACT", 0, "Subtract", "Subtract light and shadow (needs a normal light to make anything visible.)"},
209                 {WO_AOADDSUB, "BOTH", 0, "Both", "Both lighten and darken."},
210                 {0, NULL, 0, NULL, NULL}};
211
212         static EnumPropertyItem prop_color_items[] = {
213                 {WO_AOPLAIN, "PLAIN", 0, "White", "Plain diffuse energy (white.)"},
214                 {WO_AOSKYCOL, "SKY_COLOR", 0, "Sky Color", "Use horizon and zenith color for diffuse energy."},
215                 {WO_AOSKYTEX, "SKY_TEXTURE", 0, "Sky Texture", "Does full Sky texture render for diffuse energy."},
216                 {0, NULL, 0, NULL, NULL}};
217
218         static EnumPropertyItem prop_sample_method_items[] = {
219                 {WO_AOSAMP_CONSTANT, "CONSTANT_JITTERED", 0, "Constant Jittered", ""},
220                 {WO_AOSAMP_HALTON, "ADAPTIVE_QMC", 0, "Adaptive QMC", "Fast in high-contrast areas."},
221                 {WO_AOSAMP_HAMMERSLEY, "CONSTANT_QMC", 0, "Constant QMC", "Best quality."},
222                 {0, NULL, 0, NULL, NULL}};
223
224         static EnumPropertyItem prop_gather_method_items[] = {
225                 {WO_AOGATHER_RAYTRACE, "RAYTRACE", 0, "Raytrace", "Accurate, but slow when noise-free results are required."},
226                 {WO_AOGATHER_APPROX, "APPROXIMATE", 0, "Approximate", "Inaccurate, but faster and without noise."},
227                 {0, NULL, 0, NULL, NULL}};
228
229         srna= RNA_def_struct(brna, "WorldAmbientOcclusion", NULL);
230         RNA_def_struct_sdna(srna, "World");
231         RNA_def_struct_nested(brna, srna, "World");
232         RNA_def_struct_ui_text(srna, "Ambient Occlusion", "Ambient occlusion settings for a World datablock.");
233
234         prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
235         RNA_def_property_boolean_sdna(prop, NULL, "mode", WO_AMB_OCC);
236         RNA_def_property_ui_text(prop, "Enabled", "Use Ambient Occlusion to add light based on distance between elements, creating the illusion of omnipresent light");
237         RNA_def_property_update(prop, 0, "rna_World_update");
238
239         prop= RNA_def_property(srna, "distance", PROP_FLOAT, PROP_DISTANCE);
240         RNA_def_property_float_sdna(prop, NULL, "aodist");
241         RNA_def_property_ui_text(prop, "Distance", "Length of rays, defines how far away other faces give occlusion effect.");
242         RNA_def_property_update(prop, 0, "rna_World_update");
243
244         prop= RNA_def_property(srna, "falloff_strength", PROP_FLOAT, PROP_NONE);
245         RNA_def_property_float_sdna(prop, NULL, "aodistfac");
246         RNA_def_property_ui_text(prop, "Strength", "Distance attenuation factor, the higher, the 'shorter' the shadows.");
247         RNA_def_property_update(prop, 0, "rna_World_update");
248
249         prop= RNA_def_property(srna, "energy", PROP_FLOAT, PROP_NONE);
250         RNA_def_property_float_sdna(prop, NULL, "aoenergy");
251         RNA_def_property_ui_range(prop, 0, 10, 0.1, 3);
252         RNA_def_property_ui_text(prop, "Energy", "Amount of enerygy generated by ambient occlusion.");
253         RNA_def_property_update(prop, 0, "rna_World_update");
254
255         prop= RNA_def_property(srna, "bias", PROP_FLOAT, PROP_NONE);
256         RNA_def_property_float_sdna(prop, NULL, "aobias");
257         RNA_def_property_range(prop, 0, 0.5);
258         RNA_def_property_ui_text(prop, "Bias", "Bias (in radians) to prevent smoothed faces from showing banding (for Raytrace Constant Jittered).");
259         RNA_def_property_update(prop, 0, "rna_World_update");
260
261         prop= RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_NONE);
262         RNA_def_property_float_sdna(prop, NULL, "ao_adapt_thresh");
263         RNA_def_property_range(prop, 0, 1);
264         RNA_def_property_ui_text(prop, "Threshold", "Samples below this threshold will be considered fully shadowed/unshadowed and skipped (for Raytrace Adaptive QMC).");
265         RNA_def_property_update(prop, 0, "rna_World_update");
266
267         prop= RNA_def_property(srna, "adapt_to_speed", PROP_FLOAT, PROP_NONE);
268         RNA_def_property_float_sdna(prop, NULL, "ao_adapt_speed_fac");
269         RNA_def_property_range(prop, 0, 1);
270         RNA_def_property_ui_text(prop, "Adapt To Speed", "Use the speed vector pass to reduce AO samples in fast moving pixels. Higher values result in more aggressive sample reduction. Requires Vec pass enabled (for Raytrace Adaptive QMC).");
271         RNA_def_property_update(prop, 0, "rna_World_update");
272
273         prop= RNA_def_property(srna, "error_tolerance", PROP_FLOAT, PROP_NONE);
274         RNA_def_property_float_sdna(prop, NULL, "ao_approx_error");
275         RNA_def_property_range(prop, 0.0001, 10);
276         RNA_def_property_ui_text(prop, "Error Tolerance", "Low values are slower and higher quality (for Approximate).");
277         RNA_def_property_update(prop, 0, "rna_World_update");
278
279         prop= RNA_def_property(srna, "correction", PROP_FLOAT, PROP_NONE);
280         RNA_def_property_float_sdna(prop, NULL, "ao_approx_correction");
281         RNA_def_property_range(prop, 0, 1);
282         RNA_def_property_ui_range(prop, 0, 1, 0.1, 2);
283         RNA_def_property_ui_text(prop, "Correction", "Ad-hoc correction for over-occlusion due to the approximation (for Approximate).");
284         RNA_def_property_update(prop, 0, "rna_World_update");
285
286         prop= RNA_def_property(srna, "falloff", PROP_BOOLEAN, PROP_NONE);
287         RNA_def_property_boolean_sdna(prop, NULL, "aomode", WO_AODIST);
288         RNA_def_property_ui_text(prop, "Falloff", "");
289         RNA_def_property_update(prop, 0, "rna_World_update");
290
291         prop= RNA_def_property(srna, "pixel_cache", PROP_BOOLEAN, PROP_NONE);
292         RNA_def_property_boolean_sdna(prop, NULL, "aomode", WO_AOCACHE);
293         RNA_def_property_ui_text(prop, "Pixel Cache", "Cache AO results in pixels and interpolate over neighbouring pixels for speedup (for Approximate).");
294         RNA_def_property_update(prop, 0, "rna_World_update");
295
296         prop= RNA_def_property(srna, "samples", PROP_INT, PROP_NONE);
297         RNA_def_property_int_sdna(prop, NULL, "aosamp");
298         RNA_def_property_range(prop, 1, 32);
299         RNA_def_property_ui_text(prop, "Samples", "Amount of ray samples. Higher values give smoother results and longer rendering times");
300         RNA_def_property_update(prop, 0, "rna_World_update");
301
302         prop= RNA_def_property(srna, "blend_mode", PROP_ENUM, PROP_NONE);
303         RNA_def_property_enum_sdna(prop, NULL, "aomix");
304         RNA_def_property_enum_items(prop, blend_mode_items);
305         RNA_def_property_ui_text(prop, "Blend Mode", "Defines how AO mixes with material shading.");
306         RNA_def_property_update(prop, 0, "rna_World_update");
307
308         prop= RNA_def_property(srna, "color", PROP_ENUM, PROP_NONE);
309         RNA_def_property_enum_sdna(prop, NULL, "aocolor");
310         RNA_def_property_enum_items(prop, prop_color_items);
311         RNA_def_property_ui_text(prop, "Color", "Defines the color of the AO light");
312         RNA_def_property_update(prop, 0, "rna_World_update");
313
314         prop= RNA_def_property(srna, "sample_method", PROP_ENUM, PROP_NONE);
315         RNA_def_property_enum_sdna(prop, NULL, "ao_samp_method");
316         RNA_def_property_enum_items(prop, prop_sample_method_items);
317         RNA_def_property_ui_text(prop, "Sample Method", "Method for generating shadow samples (for Raytrace).");
318         RNA_def_property_update(prop, 0, "rna_World_update");
319
320         prop= RNA_def_property(srna, "gather_method", PROP_ENUM, PROP_NONE);
321         RNA_def_property_enum_sdna(prop, NULL, "ao_gather_method");
322         RNA_def_property_enum_items(prop, prop_gather_method_items);
323         RNA_def_property_ui_text(prop, "Gather Method", "");
324         RNA_def_property_update(prop, 0, "rna_World_update");
325
326         prop= RNA_def_property(srna, "passes", PROP_INT, PROP_NONE);
327         RNA_def_property_int_sdna(prop, NULL, "ao_approx_passes");
328         RNA_def_property_range(prop, 0, 10);
329         RNA_def_property_ui_text(prop, "Passes", "Number of preprocessing passes to reduce overocclusion (for Approximate).");
330         RNA_def_property_update(prop, 0, "rna_World_update");
331 }
332
333 static void rna_def_world_mist(BlenderRNA *brna)
334 {
335         StructRNA *srna;
336         PropertyRNA *prop;
337         
338         static EnumPropertyItem falloff_items[] = {
339                 {0, "QUADRATIC", 0, "Quadratic", "Mist uses quadratic progression."},
340                 {1, "LINEAR", 0, "Linear", "Mist uses linear progression."},
341                 {2, "INVERSE_QUADRATIC", 0, "Inverse Quadratic", "Mist uses inverse quadratic progression."},
342                 {0, NULL, 0, NULL, NULL}};
343
344         srna= RNA_def_struct(brna, "WorldMistSettings", NULL);
345         RNA_def_struct_sdna(srna, "World");
346         RNA_def_struct_nested(brna, srna, "World");
347         RNA_def_struct_ui_text(srna, "World Mist", "Mist settings for a World data-block.");
348
349         prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
350         RNA_def_property_boolean_sdna(prop, NULL, "mode", WO_MIST);
351         RNA_def_property_ui_text(prop, "Enabled", "Occlude objects with the environment color as they are further away.");
352         RNA_def_property_update(prop, 0, "rna_World_draw_update");
353
354         prop= RNA_def_property(srna, "intensity", PROP_FLOAT, PROP_NONE);
355         RNA_def_property_float_sdna(prop, NULL, "misi");
356         RNA_def_property_range(prop, 0, 1);
357         RNA_def_property_ui_text(prop, "Intensity", "Intensity of the mist effect.");
358         RNA_def_property_update(prop, 0, "rna_World_update");
359
360         prop= RNA_def_property(srna, "start", PROP_FLOAT, PROP_DISTANCE);
361         RNA_def_property_float_sdna(prop, NULL, "miststa");
362         RNA_def_property_range(prop, 0, FLT_MAX);
363         RNA_def_property_ui_range(prop, 0, 10000, 10, 2);
364         RNA_def_property_ui_text(prop, "Start", "Starting distance of the mist, measured from the camera");
365         RNA_def_property_update(prop, 0, "rna_World_draw_update");
366
367         prop= RNA_def_property(srna, "depth", PROP_FLOAT, PROP_DISTANCE);
368         RNA_def_property_float_sdna(prop, NULL, "mistdist");
369         RNA_def_property_range(prop, 0, FLT_MAX);
370         RNA_def_property_ui_range(prop, 0, 10000, 10, 2);
371         RNA_def_property_ui_text(prop, "Depth", "The distance over which the mist effect fades in");
372         RNA_def_property_update(prop, 0, "rna_World_draw_update");
373
374         prop= RNA_def_property(srna, "height", PROP_FLOAT, PROP_DISTANCE);
375         RNA_def_property_float_sdna(prop, NULL, "misthi");
376         RNA_def_property_range(prop, 0, 100);
377         RNA_def_property_ui_text(prop, "Height", "Control how much mist density decreases with height");
378         RNA_def_property_update(prop, 0, "rna_World_update");
379         
380         prop= RNA_def_property(srna, "falloff", PROP_ENUM, PROP_NONE);
381         RNA_def_property_enum_sdna(prop, NULL, "mistype");
382         RNA_def_property_enum_items(prop, falloff_items);
383         RNA_def_property_ui_text(prop, "Falloff", "Type of transition used to fade mist");
384         RNA_def_property_update(prop, 0, "rna_World_update");
385 }
386
387 static void rna_def_world_stars(BlenderRNA *brna)
388 {
389         StructRNA *srna;
390         PropertyRNA *prop;
391
392         srna= RNA_def_struct(brna, "WorldStarsSettings", NULL);
393         RNA_def_struct_sdna(srna, "World");
394         RNA_def_struct_nested(brna, srna, "World");
395         RNA_def_struct_ui_text(srna, "World Stars", "Stars setting for a World data-block.");
396
397         prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
398         RNA_def_property_boolean_sdna(prop, NULL, "mode", WO_STARS);
399         RNA_def_property_ui_text(prop, "Enabled", "Enable starfield generation.");
400         RNA_def_property_update(prop, 0, "rna_World_update");
401
402         prop= RNA_def_property(srna, "size", PROP_FLOAT, PROP_NONE);
403         RNA_def_property_float_sdna(prop, NULL, "starsize");
404         RNA_def_property_range(prop, 0, 10);
405         RNA_def_property_ui_text(prop, "Size", "Average screen dimension of stars.");
406         RNA_def_property_update(prop, 0, "rna_World_update");
407
408         prop= RNA_def_property(srna, "min_distance", PROP_FLOAT, PROP_DISTANCE);
409         RNA_def_property_float_sdna(prop, NULL, "starmindist");
410         RNA_def_property_range(prop, 0, 1000);
411         RNA_def_property_ui_text(prop, "Minimum Distance", "Minimum distance to the camera for stars.");
412         RNA_def_property_update(prop, 0, "rna_World_update");
413
414         prop= RNA_def_property(srna, "average_separation", PROP_FLOAT, PROP_NONE);
415         RNA_def_property_float_sdna(prop, NULL, "stardist");
416         RNA_def_property_range(prop, 2, 1000);
417         RNA_def_property_ui_text(prop, "Average Separation", "Average distance between any two stars.");
418         RNA_def_property_update(prop, 0, "rna_World_update");
419
420         prop= RNA_def_property(srna, "color_randomization", PROP_FLOAT, PROP_NONE);
421         RNA_def_property_float_sdna(prop, NULL, "starcolnoise");
422         RNA_def_property_range(prop, 0, 1);
423         RNA_def_property_ui_text(prop, "Color Randomization", "Randomize star colors.");
424         RNA_def_property_update(prop, 0, "rna_World_update");
425         
426         /* unused
427         prop= RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
428         RNA_def_property_float_sdna(prop, NULL, "starr");
429         RNA_def_property_array(prop, 3);
430         RNA_def_property_ui_text(prop, "Color", "Stars color.");
431         RNA_def_property_update(prop, 0, "rna_World_update");*/
432 }
433
434 void RNA_def_world(BlenderRNA *brna)
435 {
436         StructRNA *srna;
437         PropertyRNA *prop;
438
439 /*
440         static EnumPropertyItem physics_engine_items[] = {
441                 {WOPHY_NONE, "NONE", 0, "None", ""},
442                 //{WOPHY_ENJI, "ENJI", 0, "Enji", ""},
443                 //{WOPHY_SUMO, "SUMO", 0, "Sumo (Deprecated)", ""},
444                 //{WOPHY_DYNAMO, "DYNAMO", 0, "Dynamo", ""},
445                 //{WOPHY_ODE, "ODE", 0, "ODE", ""},
446                 {WOPHY_BULLET, "BULLET", 0, "Bullet", ""},
447                 {0, NULL, 0, NULL, NULL}};
448 */
449
450         srna= RNA_def_struct(brna, "World", "ID");
451         RNA_def_struct_ui_text(srna, "World", "World datablock describing the environment and ambient lighting of a scene.");
452         RNA_def_struct_ui_icon(srna, ICON_WORLD_DATA);
453
454         rna_def_animdata_common(srna);
455         rna_def_mtex_common(srna, "rna_World_mtex_begin", "rna_World_active_texture_get",
456                 "rna_World_active_texture_set", "WorldTextureSlot", "rna_World_update");
457
458         /* colors */
459         prop= RNA_def_property(srna, "horizon_color", PROP_FLOAT, PROP_COLOR);
460         RNA_def_property_float_sdna(prop, NULL, "horr");
461         RNA_def_property_array(prop, 3);
462         RNA_def_property_ui_text(prop, "Horizon Color", "Color at the horizon.");
463         RNA_def_property_update(prop, 0, "rna_World_update");
464         
465         prop= RNA_def_property(srna, "zenith_color", PROP_FLOAT, PROP_COLOR);
466         RNA_def_property_float_sdna(prop, NULL, "zenr");
467         RNA_def_property_array(prop, 3);
468         RNA_def_property_ui_text(prop, "Zenith Color", "Color at the zenith.");
469         RNA_def_property_update(prop, 0, "rna_World_update");
470
471         prop= RNA_def_property(srna, "ambient_color", PROP_FLOAT, PROP_COLOR);
472         RNA_def_property_float_sdna(prop, NULL, "ambr");
473         RNA_def_property_array(prop, 3);
474         RNA_def_property_ui_text(prop, "Ambient Color", "");
475         RNA_def_property_update(prop, 0, "rna_World_update");
476
477         /* exp, range */
478         prop= RNA_def_property(srna, "exposure", PROP_FLOAT, PROP_NONE);
479         RNA_def_property_float_sdna(prop, NULL, "exp");
480         RNA_def_property_range(prop, 0.0, 1.0);
481         RNA_def_property_ui_text(prop, "Exposure", "Amount of exponential color correction for light.");
482         RNA_def_property_update(prop, 0, "rna_World_update");
483
484         prop= RNA_def_property(srna, "range", PROP_FLOAT, PROP_NONE);
485         RNA_def_property_float_sdna(prop, NULL, "range");
486         RNA_def_property_range(prop, 0.2, 5.0);
487         RNA_def_property_ui_text(prop, "Range", "The color range that will be mapped to 0-1.");
488         RNA_def_property_update(prop, 0, "rna_World_update");
489
490         /* sky type */
491         prop= RNA_def_property(srna, "blend_sky", PROP_BOOLEAN, PROP_NONE);
492         RNA_def_property_boolean_sdna(prop, NULL, "skytype", WO_SKYBLEND);
493         RNA_def_property_ui_text(prop, "Blend Sky", "Render background with natural progression from horizon to zenith.");
494         RNA_def_property_update(prop, 0, "rna_World_update");
495
496         prop= RNA_def_property(srna, "paper_sky", PROP_BOOLEAN, PROP_NONE);
497         RNA_def_property_boolean_sdna(prop, NULL, "skytype", WO_SKYPAPER);
498         RNA_def_property_ui_text(prop, "Paper Sky", "Flatten blend or texture coordinates.");
499         RNA_def_property_update(prop, 0, "rna_World_update");
500
501         prop= RNA_def_property(srna, "real_sky", PROP_BOOLEAN, PROP_NONE);
502         RNA_def_property_boolean_sdna(prop, NULL, "skytype", WO_SKYREAL);
503         RNA_def_property_ui_text(prop, "Real Sky", "Render background with a real horizon, relative to the camera angle.");
504         RNA_def_property_update(prop, 0, "rna_World_update");
505
506         /* nested structs */
507         prop= RNA_def_property(srna, "ambient_occlusion", PROP_POINTER, PROP_NONE);
508         RNA_def_property_flag(prop, PROP_NEVER_NULL);
509         RNA_def_property_struct_type(prop, "WorldAmbientOcclusion");
510         RNA_def_property_pointer_funcs(prop, "rna_World_ambient_occlusion_get", NULL, NULL);
511         RNA_def_property_ui_text(prop, "Ambient Occlusion", "World ambient occlusion settings.");
512
513         prop= RNA_def_property(srna, "mist", PROP_POINTER, PROP_NONE);
514         RNA_def_property_flag(prop, PROP_NEVER_NULL);
515         RNA_def_property_struct_type(prop, "WorldMistSettings");
516         RNA_def_property_pointer_funcs(prop, "rna_World_mist_get", NULL, NULL);
517         RNA_def_property_ui_text(prop, "Mist", "World mist settings.");
518
519         prop= RNA_def_property(srna, "stars", PROP_POINTER, PROP_NONE);
520         RNA_def_property_flag(prop, PROP_NEVER_NULL);
521         RNA_def_property_struct_type(prop, "WorldStarsSettings");
522         RNA_def_property_pointer_funcs(prop, "rna_World_stars_get", NULL, NULL);
523         RNA_def_property_ui_text(prop, "Stars", "World stars settings.");
524
525         rna_def_ambient_occlusion(brna);
526         rna_def_world_mist(brna);
527         rna_def_world_stars(brna);
528         rna_def_world_mtex(brna);
529 }
530
531 #endif
532