[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11955] trunk/blender/source/blender: * QMC Raytracing

Matt Ebb matt at mke3.net
Fri Sep 7 05:48:50 CEST 2007


Revision: 11955
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11955
Author:   broken
Date:     2007-09-07 05:48:50 +0200 (Fri, 07 Sep 2007)

Log Message:
-----------
* QMC Raytracing

This introduces QMC sampling for use in glossy reflections/refractions, soft raytraced shadows, and ambient occlusion.

This work includes many new features and speed-ups, so check out the nice docs here:

Glossy Reflection/Refraction
http://www.blender.org/development/current-projects/changes-since-244/glossy-reflectionrefraction/

Raytraced Soft Shadows
http://www.blender.org/development/current-projects/changes-since-244/raytraced-soft-shadows/

QMC Sampling
http://www.blender.org/development/current-projects/changes-since-244/qmc-sampling/

Many thanks to Brecht van Lommel for some initial code snippets and for reviewing the patch, and especially to Alfredo de Greef who gave me a lot of guidance and help along the way!

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/material.c
    trunk/blender/source/blender/blenkernel/intern/object.c
    trunk/blender/source/blender/blenkernel/intern/world.c
    trunk/blender/source/blender/blenlib/BLI_arithb.h
    trunk/blender/source/blender/blenlib/intern/arithb.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/include/BIF_butspace.h
    trunk/blender/source/blender/makesdna/DNA_lamp_types.h
    trunk/blender/source/blender/makesdna/DNA_material_types.h
    trunk/blender/source/blender/makesdna/DNA_world_types.h
    trunk/blender/source/blender/render/intern/include/render_types.h
    trunk/blender/source/blender/render/intern/include/rendercore.h
    trunk/blender/source/blender/render/intern/source/convertblender.c
    trunk/blender/source/blender/render/intern/source/rayshade.c
    trunk/blender/source/blender/src/buttons_shading.c

Modified: trunk/blender/source/blender/blenkernel/intern/material.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/material.c	2007-09-07 00:38:45 UTC (rev 11954)
+++ trunk/blender/source/blender/blenkernel/intern/material.c	2007-09-07 03:48:50 UTC (rev 11955)
@@ -140,6 +140,12 @@
 	ma->tx_falloff= 1.0;
 	ma->shad_alpha= 1.0f;
 	
+	ma->gloss_mir = ma->gloss_tra= 1.0;
+	ma->samp_gloss_mir = ma->samp_gloss_tra= 18;
+	ma->adapt_thresh_mir = ma->adapt_thresh_tra = 0.005;
+	ma->dist_mir = 0.0;
+	ma->fadeto_mir = MA_RAYMIR_FADETOSKY;
+	
 	ma->rampfac_col= 1.0;
 	ma->rampfac_spec= 1.0;
 	ma->pr_lamp= 3;			/* two lamps, is bits */

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c	2007-09-07 00:38:45 UTC (rev 11954)
+++ trunk/blender/source/blender/blenkernel/intern/object.c	2007-09-07 03:48:50 UTC (rev 11955)
@@ -598,6 +598,8 @@
 	la->area_size=la->area_sizey=la->area_sizez= 1.0; 
 	la->buffers= 1;
 	la->buftype= LA_SHADBUF_HALFWAY;
+	la->ray_samp_method = LA_SAMP_HALTON;
+	la->adapt_thresh = 0.001;
 	la->preview=NULL;
 	return la;
 }

Modified: trunk/blender/source/blender/blenkernel/intern/world.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/world.c	2007-09-07 00:38:45 UTC (rev 11954)
+++ trunk/blender/source/blender/blenkernel/intern/world.c	2007-09-07 03:48:50 UTC (rev 11955)
@@ -98,10 +98,12 @@
 	wrld->exp= 0.0f;
 	wrld->exposure=wrld->range= 1.0f;
 
-	wrld->aodist= 10.0;
+	wrld->aodist= 5.0;
 	wrld->aosamp= 5;
 	wrld->aoenergy= 1.0;
 	wrld->aobias= 0.05;
+	wrld->ao_samp_method = WO_AOSAMP_HAMMERSLEY;	
+
 	
 	wrld->physicsEngine= WOPHY_BULLET;//WOPHY_SUMO; Bullet by default
 	wrld->preview = NULL;

Modified: trunk/blender/source/blender/blenlib/BLI_arithb.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_arithb.h	2007-09-07 00:38:45 UTC (rev 11954)
+++ trunk/blender/source/blender/blenlib/BLI_arithb.h	2007-09-07 03:48:50 UTC (rev 11955)
@@ -244,6 +244,8 @@
 void VecLerpf(float *target, float *a, float *b, float t);
 void VecMidf(float *v, float *v1, float *v2);
 
+void VecOrthoBasisf(float *v, float *v1, float *v2);
+
 float Vec2Lenf(float *v1, float *v2);
 void Vec2Mulf(float *v1, float f);
 void Vec2Addf(float *v, float *v1, float *v2);

Modified: trunk/blender/source/blender/blenlib/intern/arithb.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/arithb.c	2007-09-07 00:38:45 UTC (rev 11954)
+++ trunk/blender/source/blender/blenlib/intern/arithb.c	2007-09-07 03:48:50 UTC (rev 11955)
@@ -2093,6 +2093,30 @@
 	v1[2]*= f;
 }
 
+void VecOrthoBasisf(float *v, float *v1, float *v2)
+{
+	if (v[0] == 0.0f && v[1] == 0.0f)
+	{
+		// degenerate case
+		v1[0] = 0.0f; v1[1] = 1.0f; v1[2] = 0.0f;
+		if (v[2] > 0.0f) {
+			v2[0] = 1.0f; v2[1] = v2[2] = 0.0f;
+		}
+		else {
+			v2[0] = -1.0f; v2[1] = v2[2] = 0.0f;
+		}
+	}
+	else 
+	{
+		float f = 1.0f/sqrt(v[0]*v[0] + v[1]*v[1]);
+		v1[0] = v[1]*f;
+		v1[1] = -v[0]*f;
+		v1[2] = 0.0f;
+
+		Crossf(v2, v, v1);
+	}
+}
+
 int VecLenCompare(float *v1, float *v2, float limit)
 {
     float x,y,z;

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2007-09-07 00:38:45 UTC (rev 11954)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2007-09-07 03:48:50 UTC (rev 11955)
@@ -6562,9 +6562,12 @@
 	}
 	if(main->versionfile <= 244) {
 		Scene *sce;
+		Material *ma;
 		bScreen *sc;
 		Object *ob;
-
+		Lamp *la;
+		World *wrld;
+		
 		if(main->versionfile != 244 || main->subversionfile < 2) {
 			Mesh *me;
 			
@@ -6588,7 +6591,7 @@
 					}
 				}
 			}
-			
+	
 			/* correct older action editors - incorrect scrolling */
 			for(sc= main->screen.first; sc; sc= sc->id.next) {
 				ScrArea *sa;
@@ -6692,6 +6695,33 @@
 					}
 				}
 			}
+			
+			for(ma=main->mat.first; ma; ma= ma->id.next) {
+				ma->gloss_mir = ma->gloss_tra= 1.0;
+				ma->aniso_gloss_mir = 1.0;
+				ma->samp_gloss_mir = ma->samp_gloss_tra= 18;
+				ma->adapt_thresh_mir = ma->adapt_thresh_tra = 0.005;
+				ma->dist_mir = 0.0;
+				ma->fadeto_mir = MA_RAYMIR_FADETOSKY;
+			}
+			
+			for(wrld=main->world.first; wrld; wrld= wrld->id.next) {
+				if (wrld->mode & WO_AMB_OCC)
+					wrld->ao_samp_method = WO_AOSAMP_CONSTANT;
+				else
+					wrld->ao_samp_method = WO_AOSAMP_HAMMERSLEY;
+				
+				wrld->ao_adapt_thresh = 0.005;
+			}
+			
+			for(la=main->lamp.first; la; la= la->id.next) {
+				if (la->type == LA_AREA)
+					la->ray_samp_method = LA_SAMP_CONSTANT;
+				else
+					la->ray_samp_method = LA_SAMP_HALTON;
+				
+				la->adapt_thresh = 0.001;
+			}
 		}
 	}
 

Modified: trunk/blender/source/blender/include/BIF_butspace.h
===================================================================
--- trunk/blender/source/blender/include/BIF_butspace.h	2007-09-07 00:38:45 UTC (rev 11954)
+++ trunk/blender/source/blender/include/BIF_butspace.h	2007-09-07 03:48:50 UTC (rev 11955)
@@ -102,6 +102,38 @@
 #define BUTS_ACT_LINK		256
 
 
+/* buttons grid */
+#define PANELX		320
+#define PANELY		0
+#define PANELW		318
+#define PANELH		204
+  
+#define BUTW1		300
+#define BUTW2		145
+#define BUTW3		93
+#define BUTW4		67
+#define ICONBUTW	20
+#define BUTH		22
+ 
+#define YSPACE		6
+#define XSPACE		10
+#define PANEL_YMAX	210
+#define PANEL_XMAX	310
+ 
+#define X1CLM		10
+ 
+#define X2CLM1		X1CLM
+#define X2CLM2		165
+ 
+#define X3CLM1		X1CLM
+#define X3CLM2		113
+#define X3CLM3		217
 
+#define X4CLM1		X1CLM
+#define X4CLM2		77
+#define X4CLM3		165
+#define X4CLM4		232
+ 
+
 #endif
 

Modified: trunk/blender/source/blender/makesdna/DNA_lamp_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_lamp_types.h	2007-09-07 00:38:45 UTC (rev 11954)
+++ trunk/blender/source/blender/makesdna/DNA_lamp_types.h	2007-09-07 03:48:50 UTC (rev 11955)
@@ -61,9 +61,13 @@
 	short bufsize, samp, buffers, filtertype;
 	char bufflag, buftype;
 	
-	short ray_samp, ray_sampy, ray_sampz, ray_samp_type;
+	short ray_samp, ray_sampy, ray_sampz;
+	short ray_samp_type;
 	short area_shape;
 	float area_size, area_sizey, area_sizez;
+	float adapt_thresh;
+	short ray_samp_method;
+	short pad1;
 	
 	/* texact is for buttons */
 	short texact, shadhalostep;
@@ -135,6 +139,12 @@
 #define LA_AREA_CUBE	2
 #define LA_AREA_BOX		3
 
+/* ray_samp_method */
+#define LA_SAMP_CONSTANT			0
+#define LA_SAMP_HALTON				1
+#define LA_SAMP_HAMMERSLEY			2
+
+
 /* ray_samp_type */
 #define LA_SAMP_ROUND	1
 #define LA_SAMP_UMBRA	2

Modified: trunk/blender/source/blender/makesdna/DNA_material_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_material_types.h	2007-09-07 00:38:45 UTC (rev 11954)
+++ trunk/blender/source/blender/makesdna/DNA_material_types.h	2007-09-07 03:48:50 UTC (rev 11955)
@@ -73,6 +73,14 @@
 	short har;
 	char seed1, seed2;
 	
+	float gloss_mir, gloss_tra;
+	short samp_gloss_mir, samp_gloss_tra;
+	float adapt_thresh_mir, adapt_thresh_tra;
+	float aniso_gloss_mir;
+	float dist_mir;
+	short fadeto_mir;
+	short pad1;
+		
 	int mode, mode_l;		/* mode_l is the or-ed result of all layer modes */
 	short flarec, starc, linec, ringc;
 	float hasize, flaresize, subsize, flareboost;
@@ -183,6 +191,10 @@
 
 #define	MA_MODE_MASK	0x1fffffff	/* all valid mode bits */
 
+/* ray mirror fadeout */
+#define MA_RAYMIR_FADETOSKY	0
+#define MA_RAYMIR_FADETOMAT	1
+
 /* diff_shader */
 #define MA_DIFF_LAMBERT		0
 #define MA_DIFF_ORENNAYAR	1

Modified: trunk/blender/source/blender/makesdna/DNA_world_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_world_types.h	2007-09-07 00:38:45 UTC (rev 11954)
+++ trunk/blender/source/blender/makesdna/DNA_world_types.h	2007-09-07 03:48:50 UTC (rev 11955)
@@ -103,8 +103,14 @@
 	/* ambient occlusion */
 	float aodist, aodistfac, aoenergy, aobias;
 	short aomode, aosamp, aomix, aocolor;
+	float ao_adapt_thresh;
+	float pad2[3];
+	short ao_samp_method;
+	short pad1[3];
+	
 	float *aosphere, *aotables;
 	
+	
 	struct Ipo *ipo;
 	struct MTex *mtex[10];
 
@@ -137,6 +143,11 @@
 #define WO_AOSUB	1
 #define WO_AOADDSUB	2
 
+/* ao_samp_method - methods for sampling the AO hemi */
+#define WO_AOSAMP_CONSTANT			0
+#define WO_AOSAMP_HALTON			1
+#define WO_AOSAMP_HAMMERSLEY		2
+
 /* aomode (use distances & random sampling modes) */
 #define WO_AODIST		1
 #define WO_AORNDSMP		2

Modified: trunk/blender/source/blender/render/intern/include/render_types.h
===================================================================
--- trunk/blender/source/blender/render/intern/include/render_types.h	2007-09-07 00:38:45 UTC (rev 11954)
+++ trunk/blender/source/blender/render/intern/include/render_types.h	2007-09-07 03:48:50 UTC (rev 11955)
@@ -59,6 +59,18 @@
 	
 } SampleTables;
 
+typedef struct QMCSampler
+{
+	int type;
+	int tot;
+	double *samp2d;
+	double offs[BLENDER_MAX_THREADS][2];
+} QMCSampler;
+
+#define SAMP_TYPE_JITTERED		0
+#define SAMP_TYPE_HALTON		1
+#define SAMP_TYPE_HAMMERSLEY	2
+
 /* this is handed over to threaded hiding/passes/shading engine */
 typedef struct RenderPart
 {
@@ -130,6 +142,7 @@
 	/* samples */
 	SampleTables *samples;
 	float jit[32][2];
+	QMCSampler *qsa;
 	
 	/* scene, and its full copy of renderdata and world */
 	Scene *scene;
@@ -335,12 +348,14 @@
 	/** A small depth offset to prevent self-shadowing. */
 	float bias;
 	
-	short ray_samp, ray_sampy, ray_sampz, ray_samp_type, area_shape, ray_totsamp;
+	short ray_samp, ray_sampy, ray_sampz, ray_samp_method, ray_samp_type, area_shape, ray_totsamp;
 	short xold[BLENDER_MAX_THREADS], yold[BLENDER_MAX_THREADS];	/* last jitter table for area lights */
 	float area_size, area_sizey, area_sizez;
-	
+	float adapt_thresh;
+		
 	struct ShadBuf *shb;
 	float *jitter;
+	QMCSampler *qsa;
 	
 	float imat[3][3];
 	float spottexfac;
@@ -351,7 +366,7 @@
 	
 	/* passes & node shader support: all shadow info for a pixel */
 	LampShadowSample *shadsamp;
-	
+		
 	/* yafray: photonlight params */
 	int YF_numphotons, YF_numsearch;
 	short YF_phdepth, YF_useqmc, YF_bufsize;


@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list