Revision: 26610
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26610
Author:   blendix
Date:     2010-02-04 21:41:49 +0100 (Thu, 04 Feb 2010)

Log Message:
-----------
Render Branch: lamp falloff

* Change lamp falloff formula which was dist/(r^2 + dist) with dist
   a user specified value, whereas the correct value is 1/(r^2). Now
   it is 1/(r^2 + dist) with dist = 0 as the default.
* Deprecated the Lin/Quad weighted mode.
* Still more work needed to make sun/area/hemi work better with this,
  results are too bright now.
* Also this gives quite harsh results when the lamp is near geometry,
  perhaps because we are not using tonemapping by default.

Modified Paths:
--------------
    branches/render25/release/scripts/ui/properties_data_lamp.py
    branches/render25/source/blender/blenkernel/intern/object.c
    branches/render25/source/blender/blenloader/intern/readfile.c
    branches/render25/source/blender/makesdna/DNA_lamp_types.h
    branches/render25/source/blender/makesrna/intern/rna_lamp.c
    branches/render25/source/blender/render/intern/source/lamp.c

Modified: branches/render25/release/scripts/ui/properties_data_lamp.py
===================================================================
--- branches/render25/release/scripts/ui/properties_data_lamp.py        
2010-02-04 20:33:04 UTC (rev 26609)
+++ branches/render25/release/scripts/ui/properties_data_lamp.py        
2010-02-04 20:41:49 UTC (rev 26610)
@@ -94,7 +94,7 @@
         if lamp.type in ('POINT', 'SPOT'):
             sub.label(text="Falloff:")
             sub.prop(lamp, "falloff_type", text="")
-            sub.prop(lamp, "distance")
+            sub.prop(lamp, "falloff_distance", text="Distance")
 
             if lamp.falloff_type == 'LINEAR_QUADRATIC_WEIGHTED':
                 col.label(text="Attenuation Factors:")
@@ -105,7 +105,7 @@
             col.prop(lamp, "sphere")
 
         if lamp.type == 'AREA':
-            col.prop(lamp, "distance")
+            col.prop(lamp, "fallof_distance", text="Distance")
             col.prop(lamp, "gamma")
 
         if wide_ui:

Modified: branches/render25/source/blender/blenkernel/intern/object.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/object.c 2010-02-04 
20:33:04 UTC (rev 26609)
+++ branches/render25/source/blender/blenkernel/intern/object.c 2010-02-04 
20:41:49 UTC (rev 26610)
@@ -788,8 +788,8 @@
        
        la->r= la->g= la->b= la->k= 1.0f;
        la->haint= 1.0f;
-       la->energy= 100.0f;
-       la->dist= 25.0f;
+       la->energy= 80.0f;
+       la->dist= 0.0f;
        la->spotsize= 45.0f;
        la->spotblend= 0.15f;
        la->att2= 1.0f;

Modified: branches/render25/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/render25/source/blender/blenloader/intern/readfile.c       
2010-02-04 20:33:04 UTC (rev 26609)
+++ branches/render25/source/blender/blenloader/intern/readfile.c       
2010-02-04 20:41:49 UTC (rev 26610)
@@ -6485,8 +6485,10 @@
        for(la= main->lamp.first; la; la= la->id.next) {
                if(la->ray_samp_method == LA_SAMP_CONSTANT)
                        la->ray_samp_method= LA_SAMP_HAMMERSLEY;
+               if(la->falloff_type == LA_FALLOFF_SLIDERS)
+                       la->falloff_type= LA_FALLOFF_INVSQUARE;
 
-               la->energy *= M_PI;
+               la->energy *= M_PI*la->dist;
        }
 }
 

Modified: branches/render25/source/blender/makesdna/DNA_lamp_types.h
===================================================================
--- branches/render25/source/blender/makesdna/DNA_lamp_types.h  2010-02-04 
20:33:04 UTC (rev 26609)
+++ branches/render25/source/blender/makesdna/DNA_lamp_types.h  2010-02-04 
20:41:49 UTC (rev 26610)
@@ -158,12 +158,11 @@
 
 /* falloff_type */
 #define LA_FALLOFF_CONSTANT            0
-#define LA_FALLOFF_INVLINEAR           1
+#define LA_FALLOFF_INVLINEAR   1
 #define LA_FALLOFF_INVSQUARE   2
 #define LA_FALLOFF_CURVE               3
-#define LA_FALLOFF_SLIDERS             4
+#define LA_FALLOFF_SLIDERS             4       /* deprecated */
 
-
 /* buftype, no flag */
 #define LA_SHADBUF_REGULAR             0
 #define LA_SHADBUF_IRREGULAR   1

Modified: branches/render25/source/blender/makesrna/intern/rna_lamp.c
===================================================================
--- branches/render25/source/blender/makesrna/intern/rna_lamp.c 2010-02-04 
20:33:04 UTC (rev 26609)
+++ branches/render25/source/blender/makesrna/intern/rna_lamp.c 2010-02-04 
20:41:49 UTC (rev 26610)
@@ -325,10 +325,10 @@
        RNA_def_property_ui_text(prop, "Type", "Type of Lamp.");
        RNA_def_property_update(prop, 0, "rna_Lamp_draw_update");
 
-       prop= RNA_def_property(srna, "distance", PROP_FLOAT, PROP_DISTANCE);
+       prop= RNA_def_property(srna, "falloff_distance", PROP_FLOAT, 
PROP_DISTANCE);
        RNA_def_property_float_sdna(prop, NULL, "dist");
        RNA_def_property_ui_range(prop, 0, 1000, 1.0, 2);
-       RNA_def_property_ui_text(prop, "Distance", "Falloff distance - the 
light is at half the original intensity at this point.");
+       RNA_def_property_ui_text(prop, "Falloff distance", "Extra distance 
added to falloff to smooth harsh light when the lamp is nearby.");
        RNA_def_property_update(prop, 0, "rna_Lamp_draw_update");
 
        prop= RNA_def_property(srna, "power", PROP_FLOAT, PROP_POWER);
@@ -380,7 +380,6 @@
                {LA_FALLOFF_INVLINEAR, "INVERSE_LINEAR", 0, "Inverse Linear", 
""},
                {LA_FALLOFF_INVSQUARE, "INVERSE_SQUARE", 0, "Inverse Square", 
""},
                {LA_FALLOFF_CURVE, "CUSTOM_CURVE", 0, "Custom Curve", ""},
-               {LA_FALLOFF_SLIDERS, "LINEAR_QUADRATIC_WEIGHTED", 0, "Lin/Quad 
Weighted", ""},
                {0, NULL, 0, NULL, NULL}};
 
        prop= RNA_def_property(srna, "falloff_type", PROP_ENUM, PROP_NONE);

Modified: branches/render25/source/blender/render/intern/source/lamp.c
===================================================================
--- branches/render25/source/blender/render/intern/source/lamp.c        
2010-02-04 20:33:04 UTC (rev 26609)
+++ branches/render25/source/blender/render/intern/source/lamp.c        
2010-02-04 20:41:49 UTC (rev 26610)
@@ -54,6 +54,8 @@
 
 /******************************* Visibility ********************************/
 
+#define LAMP_FALLOFF_MIN_DIST 1e-10f /* to division by zero */
+
 static float lamp_falloff(LampRen *lar, float dist)
 {
        float factor;
@@ -64,18 +66,11 @@
                        factor = 1.0f;
                        break;
                case LA_FALLOFF_INVLINEAR:
-                       factor = lar->dist/(lar->dist + dist);
+                       factor = 1.0f/(dist + lar->dist + 
LAMP_FALLOFF_MIN_DIST);
                        break;
                case LA_FALLOFF_INVSQUARE:
-                       factor = lar->dist/(lar->dist + dist*dist);
+                       factor = 1.0f/(dist*dist + lar->dist + 
LAMP_FALLOFF_MIN_DIST);
                        break;
-               case LA_FALLOFF_SLIDERS:
-                       factor = 1.0f;
-                       if(lar->ld1>0.0f)
-                               factor= lar->dist/(lar->dist+lar->ld1*dist);
-                       if(lar->ld2>0.0f)
-                               factor*= 
lar->distkw/(lar->distkw+lar->ld2*dist*dist);
-                       break;
                case LA_FALLOFF_CURVE:
                        factor = curvemapping_evaluateF(lar->curfalloff, 0, 
dist/lar->dist);
                        break;
@@ -186,7 +181,7 @@
                        //else
                        //      fac= 0.0f;
 
-                       if(fac <= 0.001) fac = 0.0f;
+                       if(fac <= 1e-6f) fac = 0.0f;
                        break;
 
                case LA_SPOT:
@@ -202,8 +197,7 @@
                        if(lar->type == LA_SPOT)
                                fac= lamp_spot_falloff(lar, vec, fac);
                        
-                       if(fac <= 0.001)
-                               fac = 0.0f;
+                       if(fac <= 1e-6f) fac = 0.0f;
 
                        break;
        }


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to