[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27253] branches/render25: Render Branch: restored area lamp form factor code, but using the code

Brecht Van Lommel brecht at blender.org
Wed Mar 3 18:12:24 CET 2010


Revision: 27253
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27253
Author:   blendix
Date:     2010-03-03 18:12:24 +0100 (Wed, 03 Mar 2010)

Log Message:
-----------
Render Branch: restored area lamp form factor code, but using the code
from AAO which is faster and matches exactly the simple multi sampled
result for lambert and no shadow.

Also some other tweaks to lamp code, and wrote down some dev notes about
current behavior:
http://wiki.blender.org/index.php/Dev:2.5/Source/ShadingSystem/RandomNotes

Modified Paths:
--------------
    branches/render25/release/scripts/ui/properties_data_lamp.py
    branches/render25/source/blender/blenkernel/intern/object.c
    branches/render25/source/blender/blenlib/intern/math_geom.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/include/lamp.h
    branches/render25/source/blender/render/intern/include/material.h
    branches/render25/source/blender/render/intern/source/convertblender.c
    branches/render25/source/blender/render/intern/source/lamp.c
    branches/render25/source/blender/render/intern/source/rayshade.c
    branches/render25/source/blender/render/intern/source/shadeoutput.c
    branches/render25/source/blender/render/intern/source/volumetric.c

Modified: branches/render25/release/scripts/ui/properties_data_lamp.py
===================================================================
--- branches/render25/release/scripts/ui/properties_data_lamp.py	2010-03-03 17:04:03 UTC (rev 27252)
+++ branches/render25/release/scripts/ui/properties_data_lamp.py	2010-03-03 17:12:24 UTC (rev 27253)
@@ -99,14 +99,16 @@
 
         if lamp.type in ('POINT', 'SPOT', 'AREA'):
             sub.prop(lamp, "power")
-            sub.label(text="Falloff:")
-            sub.prop(lamp, "falloff_type", text="")
-            if lamp.falloff_type == 'CUSTOM_CURVE':
-                sub.prop(lamp, "falloff_distance", text="Distance")
-            else:
-                sub.prop(lamp, "falloff_smooth", text="Smooth")
 
-            col.prop(lamp, "sphere")
+            if lamp.type != 'AREA' or lamp.multi_shade:
+                sub.label(text="Falloff:")
+                sub.prop(lamp, "falloff_type", text="")
+                if lamp.falloff_type == 'CUSTOM_CURVE':
+                    sub.prop(lamp, "falloff_distance", text="Distance")
+                else:
+                    sub.prop(lamp, "falloff_smooth", text="Smooth")
+
+                col.prop(lamp, "sphere")
         else:
             sub.prop(lamp, "energy")
 
@@ -116,8 +118,9 @@
         col.prop(lamp, "layer", text="This Layer Only")
         col.prop(lamp, "specular")
         col.prop(lamp, "diffuse")
+        if lamp.type in ('POINT', 'SPOT', 'AREA'):
+            col.prop(lamp, "multi_shade")
 
-
 class DATA_PT_sunsky(DataButtonsPanel):
     bl_label = "Sky & Atmosphere"
 
@@ -243,11 +246,7 @@
 
                 col = split.column()
 
-                if lamp.shape == 'SQUARE':
-                    col.prop(lamp, "shadow_ray_samples_x", text="Samples")
-                elif lamp.shape == 'RECTANGLE':
-                    col.prop(lamp, "shadow_ray_samples_x", text="Samples X")
-                    col.prop(lamp, "shadow_ray_samples_y", text="Samples Y")
+                col.prop(lamp, "shadow_ray_samples", text="Samples")
 
                 if lamp.shadow_ray_sampling_method == 'ADAPTIVE_QMC':
                     col.prop(lamp, "shadow_adaptive_threshold", text="Threshold")
@@ -302,9 +301,9 @@
             sub.active = not lamp.auto_clip_end
             sub.prop(lamp, "shadow_buffer_clip_end", text=" Clip End")
 
-        elif lamp.type == 'AREA':
+        elif lamp.type == 'AREA' and lamp.multi_shade:
             col = layout.column()
-            col.prop(lamp, "shadow_ray_samples_x", text="Samples")
+            col.prop(lamp, "shadow_ray_samples", text="Samples")
 
 class DATA_PT_area(DataButtonsPanel):
     bl_label = "Area Shape"

Modified: branches/render25/source/blender/blenkernel/intern/object.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/object.c	2010-03-03 17:04:03 UTC (rev 27252)
+++ branches/render25/source/blender/blenkernel/intern/object.c	2010-03-03 17:12:24 UTC (rev 27253)
@@ -803,8 +803,8 @@
 	la->bias= 1.0f;
 	la->soft= 3.0f;
 	la->compressthresh= 0.05f;
-	la->ray_samp= la->ray_sampy= la->ray_sampz= 1; 
-	la->area_size=la->area_sizey=la->area_sizez= 1.0f; 
+	la->ray_samp= 1; 
+	la->area_size=la->area_sizey= 1.0f; 
 	la->buffers= 1;
 	la->buftype= LA_SHADBUF_HALFWAY;
 	la->ray_samp_method = LA_SAMP_HALTON;

Modified: branches/render25/source/blender/blenlib/intern/math_geom.c
===================================================================
--- branches/render25/source/blender/blenlib/intern/math_geom.c	2010-03-03 17:04:03 UTC (rev 27252)
+++ branches/render25/source/blender/blenlib/intern/math_geom.c	2010-03-03 17:12:24 UTC (rev 27253)
@@ -2464,10 +2464,8 @@
 	if(ff_visible_quad(p, n, v1, v2, v3, q0, q1, q2, q3))
 		contrib += ff_quad_form_factor(p, n, q0, q1, q2, q3);
 	
-	if(v4) {
-		if(ff_visible_quad(p, n, v1, v3, v4, q0, q1, q2, q3))
-			contrib += ff_quad_form_factor(p, n, q0, q1, q2, q3);
-	}
+	if(v4 && ff_visible_quad(p, n, v1, v3, v4, q0, q1, q2, q3))
+		contrib += ff_quad_form_factor(p, n, q0, q1, q2, q3);
 
 	return contrib;
 }

Modified: branches/render25/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/render25/source/blender/blenloader/intern/readfile.c	2010-03-03 17:04:03 UTC (rev 27252)
+++ branches/render25/source/blender/blenloader/intern/readfile.c	2010-03-03 17:12:24 UTC (rev 27253)
@@ -7563,11 +7563,8 @@
 		while(la) {
 			if(la->k==0.0) la->k= 1.0;
 			if(la->ray_samp==0) la->ray_samp= 1;
-			if(la->ray_sampy==0) la->ray_sampy= 1;
-			if(la->ray_sampz==0) la->ray_sampz= 1;
 			if(la->area_size==0.0) la->area_size= 1.0;
 			if(la->area_sizey==0.0) la->area_sizey= 1.0;
-			if(la->area_sizez==0.0) la->area_sizez= 1.0;
 			la= la->id.next;
 		}
 

Modified: branches/render25/source/blender/makesdna/DNA_lamp_types.h
===================================================================
--- branches/render25/source/blender/makesdna/DNA_lamp_types.h	2010-03-03 17:04:03 UTC (rev 27252)
+++ branches/render25/source/blender/makesdna/DNA_lamp_types.h	2010-03-03 17:12:24 UTC (rev 27253)
@@ -65,10 +65,10 @@
 	short bufsize, samp, buffers, filtertype;
 	char bufflag, buftype;
 	
-	short ray_samp, ray_sampy, ray_sampz;
+	short ray_samp;
 	short ray_samp_type;
 	short area_shape;
-	float area_size, area_sizey, area_sizez;
+	float area_size, area_sizey;
 	float adapt_thresh;
 	short ray_samp_method;
 	short pad1;
@@ -148,6 +148,7 @@
 #define LA_LAYER_SHADOW	32768
 #define LA_SHAD_TEX     (1<<16)
 #define LA_SHOW_CONE    (1<<17)
+#define LA_MULTI_SHADE  (1<<18)
 
 /* layer_shadow */
 #define LA_LAYER_SHADOW_BOTH	0

Modified: branches/render25/source/blender/makesrna/intern/rna_lamp.c
===================================================================
--- branches/render25/source/blender/makesrna/intern/rna_lamp.c	2010-03-03 17:04:03 UTC (rev 27252)
+++ branches/render25/source/blender/makesrna/intern/rna_lamp.c	2010-03-03 17:12:24 UTC (rev 27253)
@@ -370,6 +370,11 @@
 	RNA_def_property_ui_text(prop, "Diffuse", "Lamp does diffuse shading");
 	RNA_def_property_update(prop, 0, "rna_Lamp_update");
 	
+	prop= RNA_def_property(srna, "multi_shade", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_MULTI_SHADE);
+	RNA_def_property_ui_text(prop, "Multi Shade", "Do full area lamp shading per sample, more accurate but also noisy");
+	RNA_def_property_update(prop, 0, "rna_Lamp_draw_update");
+
 	/* common */
 	rna_def_animdata_common(srna);
 	
@@ -437,7 +442,7 @@
 	RNA_def_property_update(prop, 0, "rna_Lamp_draw_update");
 }
 
-static void rna_def_lamp_shadow(StructRNA *srna, int spot, int area)
+static void rna_def_lamp_shadow(StructRNA *srna, int type)
 {
 	PropertyRNA *prop;
 
@@ -459,7 +464,7 @@
 
 	prop= RNA_def_property(srna, "shadow_method", PROP_ENUM, PROP_NONE);
 	RNA_def_property_enum_bitflag_sdna(prop, NULL, "mode");
-	RNA_def_property_enum_items(prop, (spot)? prop_spot_shadow_items: prop_shadow_items);
+	RNA_def_property_enum_items(prop, (type == LA_SPOT)? prop_spot_shadow_items: prop_shadow_items);
 	RNA_def_property_ui_text(prop, "Shadow Method", "Method to compute lamp shadow with");
 	RNA_def_property_update(prop, 0, "rna_Lamp_draw_update");
 
@@ -480,20 +485,12 @@
 	RNA_def_property_ui_text(prop, "Shadow Ray Sampling Method", "Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower");
 	RNA_def_property_update(prop, 0, "rna_Lamp_update");
 
-	prop= RNA_def_property(srna, (area)? "shadow_ray_samples_x": "shadow_ray_samples", PROP_INT, PROP_NONE);
+	prop= RNA_def_property(srna, "shadow_ray_samples", PROP_INT, PROP_NONE);
 	RNA_def_property_int_sdna(prop, NULL, "ray_samp");
 	RNA_def_property_range(prop, 1, 64);
-	RNA_def_property_ui_text(prop, (area)? "Shadow Ray Samples": "Shadow Ray Samples X","Amount of samples taken extra (samples x samples)");
+	RNA_def_property_ui_text(prop, "Shadow Ray Samples","Amount of samples taken extra (samples x samples)");
 	RNA_def_property_update(prop, 0, "rna_Lamp_update");
 
-	if(area) {
-		prop= RNA_def_property(srna, "shadow_ray_samples_y", PROP_INT, PROP_NONE);
-		RNA_def_property_int_sdna(prop, NULL, "ray_sampy");
-		RNA_def_property_range(prop, 1, 64);
-		RNA_def_property_ui_text(prop, "Shadow Ray Samples Y", "Amount of samples taken extra (samples x samples)");
-		RNA_def_property_update(prop, 0, "rna_Lamp_update");
-	}
-
 	prop= RNA_def_property(srna, "shadow_adaptive_threshold", PROP_FLOAT, PROP_NONE);
 	RNA_def_property_float_sdna(prop, NULL, "adapt_thresh");
 	RNA_def_property_range(prop, 0.0f, 1.0f);
@@ -523,7 +520,7 @@
 
 	rna_def_lamp_power(srna, LA_LOCAL);
 	rna_def_lamp_falloff(srna);
-	rna_def_lamp_shadow(srna, 0, 0);
+	rna_def_lamp_shadow(srna, 0);
 }
 
 static void rna_def_area_lamp(BlenderRNA *brna)
@@ -541,7 +538,7 @@
 	RNA_def_struct_ui_text(srna, "Area Lamp", "Directional area lamp");
 	RNA_def_struct_ui_icon(srna, ICON_LAMP_AREA);
 
-	rna_def_lamp_shadow(srna, 0, 1);
+	rna_def_lamp_shadow(srna, LA_AREA);
 
 	prop= RNA_def_property(srna, "shape", PROP_ENUM, PROP_NONE);
 	RNA_def_property_enum_sdna(prop, NULL, "area_shape");
@@ -596,7 +593,7 @@
 
 	rna_def_lamp_power(srna, LA_SPOT);
 	rna_def_lamp_falloff(srna);
-	rna_def_lamp_shadow(srna, 1, 0);
+	rna_def_lamp_shadow(srna, LA_SPOT);
 
 	prop= RNA_def_property(srna, "square", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_SQUARE);
@@ -721,7 +718,7 @@
 	RNA_def_struct_ui_icon(srna, ICON_LAMP_SUN);
 
 	rna_def_lamp_power(srna, LA_SUN);
-	rna_def_lamp_shadow(srna, 0, 0);
+	rna_def_lamp_shadow(srna, LA_SUN);
 
 	/* sky */
 	prop= RNA_def_property(srna, "sky", PROP_POINTER, PROP_NONE);

Modified: branches/render25/source/blender/render/intern/include/lamp.h
===================================================================
--- branches/render25/source/blender/render/intern/include/lamp.h	2010-03-03 17:04:03 UTC (rev 27252)
+++ branches/render25/source/blender/render/intern/include/lamp.h	2010-03-03 17:12:24 UTC (rev 27253)
@@ -67,8 +67,8 @@
 
 /* Visibility factor from shading point to point on the lamp. */
 
-float lamp_visibility(struct LampRen *lar, float co[3], float vn[3],
-	float lco[3], float r_vec[3], float *r_dist);
+int lamp_visibility(struct LampRen *lar, float co[3], float vn[3],
+	float lco[3], float r_vec[3], float *r_dist, float *r_fac);
 
 /* Spot Halo */
 
@@ -139,8 +139,8 @@

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list