[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