diff options
author | Ton Roosendaal <ton@blender.org> | 2008-09-21 20:04:33 +0400 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2008-09-21 20:04:33 +0400 |
commit | afe851b6d194ad93f85a66ea5866a3709708089d (patch) | |
tree | 00ced6e9126d6c5e597be1c4b9d748fc59b8c590 /source/blender/render/intern | |
parent | 1c29d02305685a942742846c757775800202a52a (diff) |
Sunsky / Atmoshphere:
- Added blending mode and factor option, so it's more clear and
controllable what happens with it. Also nice for crazy effects
of course!
- Preview render now shows preview for it too
On the todos:
- have this in World buttons (as well) for quicker sky setups
- review math of color clamping and scaling, this is definitely
not good... but a fix will make old files look very different.
Diffstat (limited to 'source/blender/render/intern')
-rw-r--r-- | source/blender/render/intern/include/sunsky.h | 8 | ||||
-rw-r--r-- | source/blender/render/intern/source/convertblender.c | 3 | ||||
-rw-r--r-- | source/blender/render/intern/source/pixelshading.c | 27 | ||||
-rw-r--r-- | source/blender/render/intern/source/sunsky.c | 5 |
4 files changed, 16 insertions, 27 deletions
diff --git a/source/blender/render/intern/include/sunsky.h b/source/blender/render/intern/include/sunsky.h index c61a637269a..c5e547097d2 100644 --- a/source/blender/render/intern/include/sunsky.h +++ b/source/blender/render/intern/include/sunsky.h @@ -33,7 +33,7 @@ typedef struct SunSky { - short effect_type; + short effect_type, skyblendtype; float turbidity; float theta, phi; @@ -53,7 +53,8 @@ typedef struct SunSky float sun_brightness; float sun_size; float backscattered_light; - + float skyblendfac; + float atm_HGg; float atm_SunIntensity; @@ -84,7 +85,8 @@ typedef struct SunSky * back_scatter, controls back scatter light * */ void InitSunSky(struct SunSky *sunsky, float turb, float *toSun, float horizon_brightness, - float spread,float sun_brightness, float sun_size, float back_scatter); + float spread,float sun_brightness, float sun_size, float back_scatter, + float skyblendfac, short skyblendtype); /** * GetSkyXYZRadiance: diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index 45d79be2f62..7d92b92a728 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -3638,7 +3638,8 @@ static GroupObject *add_render_lamp(Render *re, Object *ob) Normalize(vec); InitSunSky(lar->sunsky, la->atm_turbidity, vec, la->horizon_brightness, - la->spread, la->sun_brightness, la->sun_size, la->backscattered_light); + la->spread, la->sun_brightness, la->sun_size, la->backscattered_light, + la->skyblendfac, la->skyblendtype); InitAtmosphere(lar->sunsky, la->sun_intensity, 1.0, 1.0, la->atm_inscattering_factor, la->atm_extinction_factor, la->atm_distance_factor); diff --git a/source/blender/render/intern/source/pixelshading.c b/source/blender/render/intern/source/pixelshading.c index ef723eea6b5..4a567042d12 100644 --- a/source/blender/render/intern/source/pixelshading.c +++ b/source/blender/render/intern/source/pixelshading.c @@ -45,6 +45,7 @@ #include "BKE_image.h" #include "BKE_global.h" +#include "BKE_material.h" #include "BKE_texture.h" #include "BKE_utildefines.h" @@ -604,12 +605,9 @@ void shadeSunView(struct SunSky *sunsky, float *colf, float *rco, float *view, f */ void shadeSkyPixel(float *collector, float fx, float fy) { - float view[3], dxyview[2]; - float sun_collector[3]; - float suns_color[3]; - short num_sun_lamp; GroupObject *go; LampRen *lar; + float view[3], dxyview[2]; /* The rules for sky: @@ -657,33 +655,18 @@ void shadeSkyPixel(float *collector, float fx, float fy) collector[3] = 0.0f; } - suns_color[0] = suns_color[1] = suns_color[2] = 0; - num_sun_lamp = 0; for(go=R.lights.first; go; go= go->next) { lar= go->lampren; if(lar->type==LA_SUN && lar->sunsky && (lar->sunsky->effect_type & LA_SUN_EFFECT_SKY)){ - - num_sun_lamp ++; + float sun_collector[3]; + calc_view_vector(view, fx, fy); Normalize(view); shadeSunView(lar->sunsky, sun_collector, NULL, view, NULL); - suns_color[0] += sun_collector[0]; - suns_color[1] += sun_collector[1]; - suns_color[2] += sun_collector[2]; - + ramp_blend(lar->sunsky->skyblendtype, collector, collector+1, collector+2, lar->sunsky->skyblendfac, sun_collector); } } - if( num_sun_lamp > 0 ){ - suns_color[0] /= num_sun_lamp; - suns_color[1] /= num_sun_lamp; - suns_color[2] /= num_sun_lamp; - - collector[0] += suns_color[0]; - collector[1] += suns_color[1]; - collector[2] += suns_color[2]; - ClipColor(collector); - } } /* aerial perspective */ diff --git a/source/blender/render/intern/source/sunsky.c b/source/blender/render/intern/source/sunsky.c index 191867765a3..e1c7933cea1 100644 --- a/source/blender/render/intern/source/sunsky.c +++ b/source/blender/render/intern/source/sunsky.c @@ -135,7 +135,8 @@ float PerezFunction(struct SunSky *sunsky, const float *lam, float theta, float * back_scatter, controls back scatter light * */ void InitSunSky(struct SunSky *sunsky, float turb, float *toSun, float horizon_brightness, - float spread,float sun_brightness, float sun_size, float back_scatter) + float spread,float sun_brightness, float sun_size, float back_scatter, + float skyblendfac, short skyblendtype) { float theta2; @@ -151,6 +152,8 @@ void InitSunSky(struct SunSky *sunsky, float turb, float *toSun, float horizon_b sunsky->sun_brightness = sun_brightness; sunsky->sun_size = sun_size; sunsky->backscattered_light = back_scatter; + sunsky->skyblendfac= skyblendfac; + sunsky->skyblendtype= skyblendtype; sunsky->toSun[0] = toSun[0]; sunsky->toSun[1] = toSun[1]; |