[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58587] branches/soc-2013-dingto: Cycles / SSS Render Passes:

Thomas Dinges blender at dingto.org
Thu Jul 25 01:47:02 CEST 2013


Revision: 58587
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58587
Author:   dingto
Date:     2013-07-24 23:47:02 +0000 (Wed, 24 Jul 2013)
Log Message:
-----------
Cycles / SSS Render Passes:
* First step toward Subsurface Scattering render passes (Color, Direct and Indirect).
* Added UI, DNA and RNA for the new Passes on the Blender side.
* Basic Cycles integration. 
* Only the SSS Color Pass works so far. 

ToDo: Direct and Indirect Pass.
Should "subsurface" be a part of BsdfEval and "path_subsurface" of PathRadiance or is that the wrong way? Should it be integrated more like the AO render pass? Some input from Brecht or Stuart would be nice. :)

Modified Paths:
--------------
    branches/soc-2013-dingto/intern/cycles/blender/addon/ui.py
    branches/soc-2013-dingto/intern/cycles/blender/blender_session.cpp
    branches/soc-2013-dingto/intern/cycles/kernel/kernel_accumulate.h
    branches/soc-2013-dingto/intern/cycles/kernel/kernel_passes.h
    branches/soc-2013-dingto/intern/cycles/kernel/kernel_shader.h
    branches/soc-2013-dingto/intern/cycles/kernel/kernel_types.h
    branches/soc-2013-dingto/intern/cycles/render/film.cpp
    branches/soc-2013-dingto/source/blender/blenkernel/BKE_node.h
    branches/soc-2013-dingto/source/blender/makesdna/DNA_scene_types.h
    branches/soc-2013-dingto/source/blender/makesrna/intern/rna_render.c
    branches/soc-2013-dingto/source/blender/makesrna/intern/rna_scene.c
    branches/soc-2013-dingto/source/blender/nodes/composite/nodes/node_composite_image.c
    branches/soc-2013-dingto/source/blender/render/intern/source/render_result.c

Modified: branches/soc-2013-dingto/intern/cycles/blender/addon/ui.py
===================================================================
--- branches/soc-2013-dingto/intern/cycles/blender/addon/ui.py	2013-07-24 22:48:05 UTC (rev 58586)
+++ branches/soc-2013-dingto/intern/cycles/blender/addon/ui.py	2013-07-24 23:47:02 UTC (rev 58587)
@@ -369,7 +369,13 @@
         row.prop(rl, "use_pass_transmission_direct", text="Direct", toggle=True)
         row.prop(rl, "use_pass_transmission_indirect", text="Indirect", toggle=True)
         row.prop(rl, "use_pass_transmission_color", text="Color", toggle=True)
-
+        col.label(text="Subsurface:")
+        row = col.row(align=True)
+        row.prop(rl, "use_pass_subsurface_direct", text="Direct", toggle=True)
+        row.prop(rl, "use_pass_subsurface_indirect", text="Indirect", toggle=True)
+        row.prop(rl, "use_pass_subsurface_color", text="Color", toggle=True)
+        
+        col.separator()
         col.prop(rl, "use_pass_emit", text="Emission")
         col.prop(rl, "use_pass_environment")
         col.prop(rl, "use_pass_ambient_occlusion")

Modified: branches/soc-2013-dingto/intern/cycles/blender/blender_session.cpp
===================================================================
--- branches/soc-2013-dingto/intern/cycles/blender/blender_session.cpp	2013-07-24 22:48:05 UTC (rev 58586)
+++ branches/soc-2013-dingto/intern/cycles/blender/blender_session.cpp	2013-07-24 23:47:02 UTC (rev 58587)
@@ -216,6 +216,8 @@
 			return PASS_GLOSSY_DIRECT;
 		case BL::RenderPass::type_TRANSMISSION_DIRECT:
 			return PASS_TRANSMISSION_DIRECT;
+		case BL::RenderPass::type_SUBSURFACE_DIRECT:
+			return PASS_SUBSURFACE_DIRECT;
 
 		case BL::RenderPass::type_DIFFUSE_INDIRECT:
 			return PASS_DIFFUSE_INDIRECT;
@@ -223,6 +225,8 @@
 			return PASS_GLOSSY_INDIRECT;
 		case BL::RenderPass::type_TRANSMISSION_INDIRECT:
 			return PASS_TRANSMISSION_INDIRECT;
+		case BL::RenderPass::type_SUBSURFACE_INDIRECT:
+			return PASS_SUBSURFACE_INDIRECT;
 
 		case BL::RenderPass::type_DIFFUSE_COLOR:
 			return PASS_DIFFUSE_COLOR;
@@ -230,6 +234,8 @@
 			return PASS_GLOSSY_COLOR;
 		case BL::RenderPass::type_TRANSMISSION_COLOR:
 			return PASS_TRANSMISSION_COLOR;
+		case BL::RenderPass::type_SUBSURFACE_COLOR:
+			return PASS_SUBSURFACE_COLOR;
 
 		case BL::RenderPass::type_EMIT:
 			return PASS_EMISSION;

Modified: branches/soc-2013-dingto/intern/cycles/kernel/kernel_accumulate.h
===================================================================
--- branches/soc-2013-dingto/intern/cycles/kernel/kernel_accumulate.h	2013-07-24 22:48:05 UTC (rev 58586)
+++ branches/soc-2013-dingto/intern/cycles/kernel/kernel_accumulate.h	2013-07-24 23:47:02 UTC (rev 58587)
@@ -124,14 +124,17 @@
 		L->color_diffuse = make_float3(0.0f, 0.0f, 0.0f);
 		L->color_glossy = make_float3(0.0f, 0.0f, 0.0f);
 		L->color_transmission = make_float3(0.0f, 0.0f, 0.0f);
+		L->color_subsurface = make_float3(0.0f, 0.0f, 0.0f);
 
 		L->direct_diffuse = make_float3(0.0f, 0.0f, 0.0f);
 		L->direct_glossy = make_float3(0.0f, 0.0f, 0.0f);
 		L->direct_transmission = make_float3(0.0f, 0.0f, 0.0f);
+		L->direct_subsurface = make_float3(0.0f, 0.0f, 0.0f);
 
 		L->indirect_diffuse = make_float3(0.0f, 0.0f, 0.0f);
 		L->indirect_glossy = make_float3(0.0f, 0.0f, 0.0f);
 		L->indirect_transmission = make_float3(0.0f, 0.0f, 0.0f);
+		L->indirect_subsurface = make_float3(0.0f, 0.0f, 0.0f);
 
 		L->path_diffuse = make_float3(0.0f, 0.0f, 0.0f);
 		L->path_glossy = make_float3(0.0f, 0.0f, 0.0f);
@@ -337,10 +340,12 @@
 			L->direct_diffuse = make_float3(0.0f, 0.0f, 0.0f);
 			L->direct_glossy = make_float3(0.0f, 0.0f, 0.0f);
 			L->direct_transmission = make_float3(0.0f, 0.0f, 0.0f);
+			L->direct_subsurface = make_float3(0.0f, 0.0f, 0.0f);
 
 			L->indirect_diffuse = make_float3(0.0f, 0.0f, 0.0f);
 			L->indirect_glossy = make_float3(0.0f, 0.0f, 0.0f);
 			L->indirect_transmission = make_float3(0.0f, 0.0f, 0.0f);
+			L->indirect_subsurface = make_float3(0.0f, 0.0f, 0.0f);
 
 			L->emission = make_float3(0.0f, 0.0f, 0.0f);
 		}
@@ -357,10 +362,12 @@
 			L->direct_diffuse *= scale;
 			L->direct_glossy *= scale;
 			L->direct_transmission *= scale;
+			L->direct_subsurface *= scale;
 
 			L->indirect_diffuse *= scale;
 			L->indirect_glossy *= scale;
 			L->indirect_transmission *= scale;
+			L->indirect_subsurface *= scale;
 
 			L->emission *= scale;
 		}

Modified: branches/soc-2013-dingto/intern/cycles/kernel/kernel_passes.h
===================================================================
--- branches/soc-2013-dingto/intern/cycles/kernel/kernel_passes.h	2013-07-24 22:48:05 UTC (rev 58586)
+++ branches/soc-2013-dingto/intern/cycles/kernel/kernel_passes.h	2013-07-24 23:47:02 UTC (rev 58587)
@@ -86,6 +86,8 @@
 		L->color_glossy += shader_bsdf_glossy(kg, sd)*throughput;
 	if(flag & (PASS_TRANSMISSION_INDIRECT|PASS_TRANSMISSION_COLOR|PASS_TRANSMISSION_DIRECT))
 		L->color_transmission += shader_bsdf_transmission(kg, sd)*throughput;
+	if(flag & (PASS_SUBSURFACE_INDIRECT|PASS_SUBSURFACE_COLOR|PASS_SUBSURFACE_DIRECT))
+		L->color_subsurface += shader_bsdf_subsurface(kg, sd)*throughput;
 
 	if(flag & PASS_MIST) {
 		/* bring depth into 0..1 range */
@@ -128,12 +130,16 @@
 		kernel_write_pass_float3(buffer + kernel_data.film.pass_glossy_indirect, sample, L->indirect_glossy);
 	if(flag & PASS_TRANSMISSION_INDIRECT)
 		kernel_write_pass_float3(buffer + kernel_data.film.pass_transmission_indirect, sample, L->indirect_transmission);
+	if(flag & PASS_SUBSURFACE_INDIRECT)
+		kernel_write_pass_float3(buffer + kernel_data.film.pass_subsurface_indirect, sample, L->indirect_subsurface);
 	if(flag & PASS_DIFFUSE_DIRECT)
 		kernel_write_pass_float3(buffer + kernel_data.film.pass_diffuse_direct, sample, L->direct_diffuse);
 	if(flag & PASS_GLOSSY_DIRECT)
 		kernel_write_pass_float3(buffer + kernel_data.film.pass_glossy_direct, sample, L->direct_glossy);
 	if(flag & PASS_TRANSMISSION_DIRECT)
 		kernel_write_pass_float3(buffer + kernel_data.film.pass_transmission_direct, sample, L->direct_transmission);
+	if(flag & PASS_SUBSURFACE_DIRECT)
+		kernel_write_pass_float3(buffer + kernel_data.film.pass_subsurface_direct, sample, L->direct_subsurface);
 
 	if(flag & PASS_EMISSION)
 		kernel_write_pass_float3(buffer + kernel_data.film.pass_emission, sample, L->emission);
@@ -148,6 +154,8 @@
 		kernel_write_pass_float3(buffer + kernel_data.film.pass_glossy_color, sample, L->color_glossy);
 	if(flag & PASS_TRANSMISSION_COLOR)
 		kernel_write_pass_float3(buffer + kernel_data.film.pass_transmission_color, sample, L->color_transmission);
+	if(flag & PASS_SUBSURFACE_COLOR)
+		kernel_write_pass_float3(buffer + kernel_data.film.pass_subsurface_color, sample, L->color_subsurface);
 	if(flag & PASS_SHADOW) {
 		float4 shadow = L->shadow;
 		shadow.w = kernel_data.film.pass_shadow_scale;

Modified: branches/soc-2013-dingto/intern/cycles/kernel/kernel_shader.h
===================================================================
--- branches/soc-2013-dingto/intern/cycles/kernel/kernel_shader.h	2013-07-24 22:48:05 UTC (rev 58586)
+++ branches/soc-2013-dingto/intern/cycles/kernel/kernel_shader.h	2013-07-24 23:47:02 UTC (rev 58587)
@@ -685,6 +685,27 @@
 #endif
 }
 
+__device float3 shader_bsdf_subsurface(KernelGlobals *kg, ShaderData *sd)
+{
+#ifdef __MULTI_CLOSURE__
+	float3 eval = make_float3(0.0f, 0.0f, 0.0f);
+
+	for(int i = 0; i< sd->num_closure; i++) {
+		ShaderClosure *sc = &sd->closure[i];
+
+		if(CLOSURE_IS_BSSRDF(sc->type))
+			eval += sc->weight;
+	}
+
+	return eval;
+#else
+	if(CLOSURE_IS_BSSRDF(sd->closure.type))
+		return sd->closure.weight;
+	else
+		return make_float3(0.0f, 0.0f, 0.0f);
+#endif
+}
+
 __device float3 shader_bsdf_ao(KernelGlobals *kg, ShaderData *sd, float ao_factor, float3 *N)
 {
 #ifdef __MULTI_CLOSURE__

Modified: branches/soc-2013-dingto/intern/cycles/kernel/kernel_types.h
===================================================================
--- branches/soc-2013-dingto/intern/cycles/kernel/kernel_types.h	2013-07-24 22:48:05 UTC (rev 58586)
+++ branches/soc-2013-dingto/intern/cycles/kernel/kernel_types.h	2013-07-24 23:47:02 UTC (rev 58587)
@@ -269,7 +269,10 @@
 	PASS_SHADOW = 262144,
 	PASS_MOTION = 524288,
 	PASS_MOTION_WEIGHT = 1048576,
-	PASS_MIST = 2097152
+	PASS_MIST = 2097152,
+	PASS_SUBSURFACE_DIRECT = 4194304,
+	PASS_SUBSURFACE_INDIRECT = 8388608,
+	PASS_SUBSURFACE_COLOR = 16777216
 } PassType;
 
 #define PASS_ALL (~0)
@@ -292,14 +295,17 @@
 	float3 color_diffuse;
 	float3 color_glossy;
 	float3 color_transmission;
+	float3 color_subsurface;
 
 	float3 direct_diffuse;
 	float3 direct_glossy;
 	float3 direct_transmission;
+	float3 direct_subsurface;
 
 	float3 indirect_diffuse;
 	float3 indirect_glossy;
 	float3 indirect_transmission;
+	float3 indirect_subsurface;
 
 	float3 path_diffuse;
 	float3 path_glossy;
@@ -673,22 +679,27 @@
 	int pass_diffuse_color;
 	int pass_glossy_color;
 	int pass_transmission_color;
+	int pass_subsurface_color;
+	
 	int pass_diffuse_indirect;
-
 	int pass_glossy_indirect;
 	int pass_transmission_indirect;
+	int pass_subsurface_indirect;
+	
 	int pass_diffuse_direct;
 	int pass_glossy_direct;
-
 	int pass_transmission_direct;
+	int pass_subsurface_direct;
+	
 	int pass_emission;
 	int pass_background;
 	int pass_ao;
+	int pass_pad1;
 
 	int pass_shadow;
 	float pass_shadow_scale;
 	int filter_table_offset;
-	int pass_pad1;
+	int pass_pad2;
 
 	int pass_mist;
 	float mist_start;

Modified: branches/soc-2013-dingto/intern/cycles/render/film.cpp
===================================================================
--- branches/soc-2013-dingto/intern/cycles/render/film.cpp	2013-07-24 22:48:05 UTC (rev 58586)
+++ branches/soc-2013-dingto/intern/cycles/render/film.cpp	2013-07-24 23:47:02 UTC (rev 58587)
@@ -98,6 +98,9 @@
 		case PASS_TRANSMISSION_COLOR:
 			pass.components = 4;
 			break;
+		case PASS_SUBSURFACE_COLOR:
+			pass.components = 4;
+			break;
 		case PASS_DIFFUSE_INDIRECT:
 			pass.components = 4;
 			pass.exposure = true;
@@ -113,6 +116,11 @@
 			pass.exposure = true;
 			pass.divide_type = PASS_TRANSMISSION_COLOR;
 			break;
+		case PASS_SUBSURFACE_INDIRECT:
+			pass.components = 4;
+			pass.exposure = true;
+			pass.divide_type = PASS_SUBSURFACE_COLOR;
+			break;
 		case PASS_DIFFUSE_DIRECT:
 			pass.components = 4;
 			pass.exposure = true;
@@ -128,6 +136,11 @@
 			pass.exposure = true;
 			pass.divide_type = PASS_TRANSMISSION_COLOR;
 			break;
+		case PASS_SUBSURFACE_DIRECT:
+			pass.components = 4;

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list