[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