[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28287] branches/render25: Render Branch: SSS scale can now be textured.

Brecht Van Lommel brecht at blender.org
Mon Apr 19 19:53:01 CEST 2010


Revision: 28287
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28287
Author:   blendix
Date:     2010-04-19 19:53:01 +0200 (Mon, 19 Apr 2010)

Log Message:
-----------
Render Branch: SSS scale can now be textured.

Modified Paths:
--------------
    branches/render25/release/scripts/ui/properties_texture.py
    branches/render25/source/blender/blenkernel/BKE_blender.h
    branches/render25/source/blender/blenkernel/intern/texture.c
    branches/render25/source/blender/blenloader/intern/readfile.c
    branches/render25/source/blender/makesdna/DNA_material_types.h
    branches/render25/source/blender/makesdna/DNA_texture_types.h
    branches/render25/source/blender/makesrna/intern/rna_material.c
    branches/render25/source/blender/render/extern/include/RE_shader_ext.h
    branches/render25/source/blender/render/intern/include/sss.h
    branches/render25/source/blender/render/intern/source/shadeinput.c
    branches/render25/source/blender/render/intern/source/shadeoutput.c
    branches/render25/source/blender/render/intern/source/sss.c
    branches/render25/source/blender/render/intern/source/texture_stack.c

Modified: branches/render25/release/scripts/ui/properties_texture.py
===================================================================
--- branches/render25/release/scripts/ui/properties_texture.py	2010-04-19 15:20:33 UTC (rev 28286)
+++ branches/render25/release/scripts/ui/properties_texture.py	2010-04-19 17:53:01 UTC (rev 28287)
@@ -370,6 +370,7 @@
                 factor_but(col, tex.map_emit, "map_emit", "emit_factor", "Emit")
                 factor_but(col, tex.map_mirror, "map_mirror", "mirror_factor", "Mirror")
                 factor_but(col, tex.map_raymir, "map_raymir", "raymir_factor", "Ray Mirror")
+                factor_but(col, tex.map_sss_scale, "map_sss_scale", "sss_scale_factor", "SSS Scale")
 
                 col.label(text="Geometry:")
                 factor_but(col, tex.map_normal, "map_normal", "normal_factor", "Normal")

Modified: branches/render25/source/blender/blenkernel/BKE_blender.h
===================================================================
--- branches/render25/source/blender/blenkernel/BKE_blender.h	2010-04-19 15:20:33 UTC (rev 28286)
+++ branches/render25/source/blender/blenkernel/BKE_blender.h	2010-04-19 17:53:01 UTC (rev 28287)
@@ -45,7 +45,7 @@
 struct Main;
 	
 #define BLENDER_VERSION			252
-#define BLENDER_SUBVERSION		12
+#define BLENDER_SUBVERSION		13
 
 #define BLENDER_MINVERSION		250
 #define BLENDER_MINSUBVERSION	0

Modified: branches/render25/source/blender/blenkernel/intern/texture.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/texture.c	2010-04-19 15:20:33 UTC (rev 28286)
+++ branches/render25/source/blender/blenkernel/intern/texture.c	2010-04-19 17:53:01 UTC (rev 28287)
@@ -563,6 +563,7 @@
 	mtex->raymirrfac= 1.0f;
 	mtex->translfac= 1.0f;
 	mtex->ambfac= 1.0f;
+	mtex->sssscalefac= 1.0f;
 	mtex->colemitfac= 1.0f;
 	mtex->colreflfac= 1.0f;
 	mtex->coltransfac= 1.0f;

Modified: branches/render25/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/render25/source/blender/blenloader/intern/readfile.c	2010-04-19 15:20:33 UTC (rev 28286)
+++ branches/render25/source/blender/blenloader/intern/readfile.c	2010-04-19 17:53:01 UTC (rev 28287)
@@ -6513,6 +6513,17 @@
 		tex->iuser.flag |= IMA_USECACHE;
 }
 
+static void do_version_sss_scale_250(FileData *fd, Library *lib, Main *main)
+{
+	Material *ma;
+	int a;
+
+	for(ma= main->mat.first; ma; ma=ma->id.next)
+		for(a=0; a<MAX_MTEX; a++)
+			if(ma->mtex && ma->mtex[a])
+				ma->mtex[a]->sssscalefac= 1.0f;
+}
+
 static void do_version_constraints_radians_degrees_250(ListBase *lb)
 {
 	bConstraint *con;
@@ -10838,6 +10849,8 @@
 		do_version_subdivision_250(fd, lib, main);
 	if (main->versionfile < 252 || (main->versionfile == 252 && main->subversionfile < 12))
 		do_version_image_cache_250(fd, lib, main);
+	if (main->versionfile < 252 || (main->versionfile == 252 && main->subversionfile < 13))
+		do_version_sss_scale_250(fd, lib, main);
 
 	/* WATCH IT!!!: pointers from libdata have not been converted yet here! */
 	/* WATCH IT 2!: Userdef struct init has to be in editors/interface/resources.c! */

Modified: branches/render25/source/blender/makesdna/DNA_material_types.h
===================================================================
--- branches/render25/source/blender/makesdna/DNA_material_types.h	2010-04-19 15:20:33 UTC (rev 28286)
+++ branches/render25/source/blender/makesdna/DNA_material_types.h	2010-04-19 17:53:01 UTC (rev 28287)
@@ -320,6 +320,7 @@
 #define MAP_DISPLACE	4096
 #define MAP_WARP		8192
 #define MAP_LAYER		16384		/* unused */
+#define MAP_SSS_SCALE	32768
 
 /* volume mapto - reuse definitions for now - a bit naughty! */
 #define MAP_DENSITY				128

Modified: branches/render25/source/blender/makesdna/DNA_texture_types.h
===================================================================
--- branches/render25/source/blender/makesdna/DNA_texture_types.h	2010-04-19 15:20:33 UTC (rev 28286)
+++ branches/render25/source/blender/makesdna/DNA_texture_types.h	2010-04-19 17:53:01 UTC (rev 28287)
@@ -57,7 +57,7 @@
 	
 	short texflag, colormodel, pmapto, pmaptoneg;
 	short normapspace, which_output;
-	char brush_map_mode, pad[7];
+	char brush_map_mode, pad[3];
 	float r, g, b, k;
 	float def_var, rt;
 	
@@ -70,7 +70,7 @@
 	float difffac, specfac, emitfac, hardfac;
 	float raymirrfac, translfac, ambfac;
 	float colemitfac, colreflfac, coltransfac;
-	float densfac, scatterfac, reflfac;
+	float densfac, scatterfac, reflfac, sssscalefac;
 
 	/* particles */
 	float timefac, lengthfac, clumpfac;

Modified: branches/render25/source/blender/makesrna/intern/rna_material.c
===================================================================
--- branches/render25/source/blender/makesrna/intern/rna_material.c	2010-04-19 15:20:33 UTC (rev 28286)
+++ branches/render25/source/blender/makesrna/intern/rna_material.c	2010-04-19 17:53:01 UTC (rev 28287)
@@ -421,6 +421,11 @@
 	RNA_def_property_ui_text(prop, "Warp", "Let the texture warp texture coordinates of next channels");
 	RNA_def_property_update(prop, 0, "rna_Material_update");
 
+	prop= RNA_def_property(srna, "map_sss_scale", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_SSS_SCALE);
+	RNA_def_property_ui_text(prop, "SSS Scale", "Causes the texture to affect the value subsurface scattering scale");
+	RNA_def_property_update(prop, 0, "rna_Material_update");
+
 	prop= RNA_def_property(srna, "x_mapping", PROP_ENUM, PROP_NONE);
 	RNA_def_property_enum_sdna(prop, NULL, "projx");
 	RNA_def_property_enum_items(prop, prop_x_mapping_items);
@@ -611,6 +616,12 @@
 	RNA_def_property_ui_range(prop, 0, 1, 10, 3);
 	RNA_def_property_ui_text(prop, "Reflection Factor", "Amount texture affects brightness of out-scattered light");
 	RNA_def_property_update(prop, 0, "rna_Material_update");
+
+	prop= RNA_def_property(srna, "sss_scale_factor", PROP_FLOAT, PROP_UNSIGNED);
+	RNA_def_property_float_sdna(prop, NULL, "sssscalefac");
+	RNA_def_property_ui_range(prop, 0, 1, 10, 3);
+	RNA_def_property_ui_text(prop, "SSS Scale Factor", "Multiplier for subsurface scattering scale");
+	RNA_def_property_update(prop, 0, "rna_Material_update");
 	
 	/* end volume material */
 	

Modified: branches/render25/source/blender/render/extern/include/RE_shader_ext.h
===================================================================
--- branches/render25/source/blender/render/extern/include/RE_shader_ext.h	2010-04-19 15:20:33 UTC (rev 28286)
+++ branches/render25/source/blender/render/extern/include/RE_shader_ext.h	2010-04-19 17:53:01 UTC (rev 28287)
@@ -131,6 +131,7 @@
 	
 	/* individual copies: */
 	int har; /* hardness */
+	float sss_scale;
 
 	float vcol[4];
 	float refcol[4];

Modified: branches/render25/source/blender/render/intern/include/sss.h
===================================================================
--- branches/render25/source/blender/render/intern/include/sss.h	2010-04-19 15:20:33 UTC (rev 28286)
+++ branches/render25/source/blender/render/intern/include/sss.h	2010-04-19 17:53:01 UTC (rev 28287)
@@ -47,7 +47,7 @@
 
 /* Sample SSS at a give point */
 
-int sss_sample(struct Render *re, struct Material *mat, float *co, float *col);
+int sss_sample(struct Render *re, struct Material *mat, float *co, float *col, float scale);
 
 /* Generic multiple scattering API */
 
@@ -64,7 +64,7 @@
 ScatterTree *scatter_tree_new(ScatterSettings *ss[3], float scale, float error,
 	float (*co)[3], float (*color)[3], float *area, int totpoint);
 void scatter_tree_build(ScatterTree *tree);
-void scatter_tree_sample(ScatterTree *tree, float *co, float *color);
+void scatter_tree_sample(ScatterTree *tree, float *co, float *color, float scale);
 void scatter_tree_free(ScatterTree *tree);
 
 #endif /*SSS_H*/

Modified: branches/render25/source/blender/render/intern/source/shadeinput.c
===================================================================
--- branches/render25/source/blender/render/intern/source/shadeinput.c	2010-04-19 15:20:33 UTC (rev 28286)
+++ branches/render25/source/blender/render/intern/source/shadeinput.c	2010-04-19 17:53:01 UTC (rev 28287)
@@ -86,6 +86,7 @@
 	/* note, keep this synced with render_types.h */
 	memcpy(&shi->material.r, &shi->material.mat->r, 21*sizeof(float));
 	shi->material.har= shi->material.mat->har;
+	shi->material.sss_scale= shi->material.mat->sss_scale;
 }
 
 /* **************************************************************************** */

Modified: branches/render25/source/blender/render/intern/source/shadeoutput.c
===================================================================
--- branches/render25/source/blender/render/intern/source/shadeoutput.c	2010-04-19 15:20:33 UTC (rev 28286)
+++ branches/render25/source/blender/render/intern/source/shadeoutput.c	2010-04-19 17:53:01 UTC (rev 28287)
@@ -768,8 +768,9 @@
 
 	if((ma->sss_flag & MA_DIFF_SSS) && (passflag & (SCE_PASS_COMBINED|SCE_PASS_DIFFUSE))) {
 		float sss[3], col[3], div, texfac= ma->sss_texfac;
+		float scale= shi->material.sss_scale;
 
-		if(!sss_sample(re, ma, shi->geometry.co, sss)) {
+		if(!sss_sample(re, ma, shi->geometry.co, sss, scale)) {
 			/* preprocess stage */
 			copy_v3_v3(shr->sss, shr->diff);
 			shr->sss[3]= shr->alpha; // TODO NSHAD solve SSS + alpha

Modified: branches/render25/source/blender/render/intern/source/sss.c
===================================================================
--- branches/render25/source/blender/render/intern/source/sss.c	2010-04-19 15:20:33 UTC (rev 28286)
+++ branches/render25/source/blender/render/intern/source/sss.c	2010-04-19 17:53:01 UTC (rev 28287)
@@ -150,6 +150,8 @@
 };
 
 typedef struct ScatterResult {
+	float scalefac;
+
 	float rad[3];
 	float backrad[3];
 	float rdsum[3];
@@ -345,7 +347,12 @@
 static void add_radiance(ScatterTree *tree, float *frontrad, float *backrad, float area, float backarea, float rr, ScatterResult *result)
 {
 	float rd[3], frontrd[3], backrd[3];
+	float scalefac= result->scalefac;
 
+	rr *= scalefac;
+	area *= scalefac;
+	backarea *= scalefac;
+
 	approximate_Rd_rgb(tree->ss, rr, rd);
 
 	if(frontrad && area) {
@@ -378,7 +385,7 @@
 
 static void traverse_octree(ScatterTree *tree, ScatterNode *node, float *co, int self, ScatterResult *result)
 {
-	float sub[3], dist;
+	float dist;
 	int i, index = 0;
 
 	if(node->totpoint > 0) {
@@ -386,8 +393,7 @@
 		for(i=0; i<node->totpoint; i++) {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list