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