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