Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorThomas Dinges <blender@dingto.org>2013-08-03 17:12:09 +0400
committerThomas Dinges <blender@dingto.org>2013-08-03 17:12:09 +0400
commit5fc6f04fc8b678670c2d40d91ca3ccadd653b3ed (patch)
tree48344bb4eccbb4c3048318891249c1081c527bc9 /source
parentea95a78b0bf69b2e8a90a60d01342de47c4b2d12 (diff)
Cycles / SSS:
* Render Passes are now available for Subsurface Scattering (Direct, Indirect and Color pass). This is part of my GSoC project, SVN merge of r58587, r58828 and r58835.
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/BKE_node.h59
-rw-r--r--source/blender/makesdna/DNA_scene_types.h59
-rw-r--r--source/blender/makesrna/intern/rna_render.c3
-rw-r--r--source/blender/makesrna/intern/rna_scene.c18
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_image.c71
-rw-r--r--source/blender/render/intern/source/render_result.c33
6 files changed, 158 insertions, 85 deletions
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index c151d47334e..4e9e18d43e3 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -778,34 +778,37 @@ void ntreeGPUMaterialNodes(struct bNodeTree *ntree, struct GPUMateria
/* ************** COMPOSITE NODES *************** */
/* output socket defines */
-#define RRES_OUT_IMAGE 0
-#define RRES_OUT_ALPHA 1
-#define RRES_OUT_Z 2
-#define RRES_OUT_NORMAL 3
-#define RRES_OUT_UV 4
-#define RRES_OUT_VEC 5
-#define RRES_OUT_RGBA 6
-#define RRES_OUT_DIFF 7
-#define RRES_OUT_SPEC 8
-#define RRES_OUT_SHADOW 9
-#define RRES_OUT_AO 10
-#define RRES_OUT_REFLECT 11
-#define RRES_OUT_REFRACT 12
-#define RRES_OUT_INDIRECT 13
-#define RRES_OUT_INDEXOB 14
-#define RRES_OUT_INDEXMA 15
-#define RRES_OUT_MIST 16
-#define RRES_OUT_EMIT 17
-#define RRES_OUT_ENV 18
-#define RRES_OUT_DIFF_DIRECT 19
-#define RRES_OUT_DIFF_INDIRECT 20
-#define RRES_OUT_DIFF_COLOR 21
-#define RRES_OUT_GLOSSY_DIRECT 22
-#define RRES_OUT_GLOSSY_INDIRECT 23
-#define RRES_OUT_GLOSSY_COLOR 24
-#define RRES_OUT_TRANSM_DIRECT 25
-#define RRES_OUT_TRANSM_INDIRECT 26
-#define RRES_OUT_TRANSM_COLOR 27
+#define RRES_OUT_IMAGE 0
+#define RRES_OUT_ALPHA 1
+#define RRES_OUT_Z 2
+#define RRES_OUT_NORMAL 3
+#define RRES_OUT_UV 4
+#define RRES_OUT_VEC 5
+#define RRES_OUT_RGBA 6
+#define RRES_OUT_DIFF 7
+#define RRES_OUT_SPEC 8
+#define RRES_OUT_SHADOW 9
+#define RRES_OUT_AO 10
+#define RRES_OUT_REFLECT 11
+#define RRES_OUT_REFRACT 12
+#define RRES_OUT_INDIRECT 13
+#define RRES_OUT_INDEXOB 14
+#define RRES_OUT_INDEXMA 15
+#define RRES_OUT_MIST 16
+#define RRES_OUT_EMIT 17
+#define RRES_OUT_ENV 18
+#define RRES_OUT_DIFF_DIRECT 19
+#define RRES_OUT_DIFF_INDIRECT 20
+#define RRES_OUT_DIFF_COLOR 21
+#define RRES_OUT_GLOSSY_DIRECT 22
+#define RRES_OUT_GLOSSY_INDIRECT 23
+#define RRES_OUT_GLOSSY_COLOR 24
+#define RRES_OUT_TRANSM_DIRECT 25
+#define RRES_OUT_TRANSM_INDIRECT 26
+#define RRES_OUT_TRANSM_COLOR 27
+#define RRES_OUT_SUBSURFACE_DIRECT 28
+#define RRES_OUT_SUBSURFACE_INDIRECT 29
+#define RRES_OUT_SUBSURFACE_COLOR 30
/* note: types are needed to restore callbacks, don't change values */
#define CMP_NODE_VIEWER 201
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index dd194ed389f..ceb745cf90a 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -209,34 +209,37 @@ typedef struct SceneRenderLayer {
#define SCE_LAY_NEG_ZMASK 0x80000
/* srl->passflag */
-#define SCE_PASS_COMBINED (1<<0)
-#define SCE_PASS_Z (1<<1)
-#define SCE_PASS_RGBA (1<<2)
-#define SCE_PASS_DIFFUSE (1<<3)
-#define SCE_PASS_SPEC (1<<4)
-#define SCE_PASS_SHADOW (1<<5)
-#define SCE_PASS_AO (1<<6)
-#define SCE_PASS_REFLECT (1<<7)
-#define SCE_PASS_NORMAL (1<<8)
-#define SCE_PASS_VECTOR (1<<9)
-#define SCE_PASS_REFRACT (1<<10)
-#define SCE_PASS_INDEXOB (1<<11)
-#define SCE_PASS_UV (1<<12)
-#define SCE_PASS_INDIRECT (1<<13)
-#define SCE_PASS_MIST (1<<14)
-#define SCE_PASS_RAYHITS (1<<15)
-#define SCE_PASS_EMIT (1<<16)
-#define SCE_PASS_ENVIRONMENT (1<<17)
-#define SCE_PASS_INDEXMA (1<<18)
-#define SCE_PASS_DIFFUSE_DIRECT (1<<19)
-#define SCE_PASS_DIFFUSE_INDIRECT (1<<20)
-#define SCE_PASS_DIFFUSE_COLOR (1<<21)
-#define SCE_PASS_GLOSSY_DIRECT (1<<22)
-#define SCE_PASS_GLOSSY_INDIRECT (1<<23)
-#define SCE_PASS_GLOSSY_COLOR (1<<24)
-#define SCE_PASS_TRANSM_DIRECT (1<<25)
-#define SCE_PASS_TRANSM_INDIRECT (1<<26)
-#define SCE_PASS_TRANSM_COLOR (1<<27)
+#define SCE_PASS_COMBINED (1<<0)
+#define SCE_PASS_Z (1<<1)
+#define SCE_PASS_RGBA (1<<2)
+#define SCE_PASS_DIFFUSE (1<<3)
+#define SCE_PASS_SPEC (1<<4)
+#define SCE_PASS_SHADOW (1<<5)
+#define SCE_PASS_AO (1<<6)
+#define SCE_PASS_REFLECT (1<<7)
+#define SCE_PASS_NORMAL (1<<8)
+#define SCE_PASS_VECTOR (1<<9)
+#define SCE_PASS_REFRACT (1<<10)
+#define SCE_PASS_INDEXOB (1<<11)
+#define SCE_PASS_UV (1<<12)
+#define SCE_PASS_INDIRECT (1<<13)
+#define SCE_PASS_MIST (1<<14)
+#define SCE_PASS_RAYHITS (1<<15)
+#define SCE_PASS_EMIT (1<<16)
+#define SCE_PASS_ENVIRONMENT (1<<17)
+#define SCE_PASS_INDEXMA (1<<18)
+#define SCE_PASS_DIFFUSE_DIRECT (1<<19)
+#define SCE_PASS_DIFFUSE_INDIRECT (1<<20)
+#define SCE_PASS_DIFFUSE_COLOR (1<<21)
+#define SCE_PASS_GLOSSY_DIRECT (1<<22)
+#define SCE_PASS_GLOSSY_INDIRECT (1<<23)
+#define SCE_PASS_GLOSSY_COLOR (1<<24)
+#define SCE_PASS_TRANSM_DIRECT (1<<25)
+#define SCE_PASS_TRANSM_INDIRECT (1<<26)
+#define SCE_PASS_TRANSM_COLOR (1<<27)
+#define SCE_PASS_SUBSURFACE_DIRECT (1<<28)
+#define SCE_PASS_SUBSURFACE_INDIRECT (1<<29)
+#define SCE_PASS_SUBSURFACE_COLOR (1<<30)
/* note, srl->passflag is treestore element 'nr' in outliner, short still... */
diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c
index 64b4e019c27..82cdfcdd631 100644
--- a/source/blender/makesrna/intern/rna_render.c
+++ b/source/blender/makesrna/intern/rna_render.c
@@ -570,6 +570,9 @@ static void rna_def_render_pass(BlenderRNA *brna)
{SCE_PASS_TRANSM_DIRECT, "TRANSMISSION_DIRECT", 0, "Transmission Direct", ""},
{SCE_PASS_TRANSM_INDIRECT, "TRANSMISSION_INDIRECT", 0, "Transmission Indirect", ""},
{SCE_PASS_TRANSM_COLOR, "TRANSMISSION_COLOR", 0, "Transmission Color", ""},
+ {SCE_PASS_SUBSURFACE_DIRECT, "SUBSURFACE_DIRECT", 0, "Subsurface Direct", ""},
+ {SCE_PASS_SUBSURFACE_INDIRECT, "SUBSURFACE_INDIRECT", 0, "Subsurface Indirect", ""},
+ {SCE_PASS_SUBSURFACE_COLOR, "SUBSURFACE_COLOR", 0, "Subsurface Color", ""},
{0, NULL, 0, NULL, NULL}
};
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index a0e1e29ab55..9e580b1626c 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -2555,6 +2555,24 @@ void rna_def_render_layer_common(StructRNA *srna, int scene)
RNA_def_property_ui_text(prop, "Transmission Color", "Deliver transmission color pass");
if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
+ prop = RNA_def_property(srna, "use_pass_subsurface_direct", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_SUBSURFACE_DIRECT);
+ RNA_def_property_ui_text(prop, "Subsurface Direct", "Deliver subsurface direct pass");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
+ prop = RNA_def_property(srna, "use_pass_subsurface_indirect", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_SUBSURFACE_INDIRECT);
+ RNA_def_property_ui_text(prop, "Subsurface Indirect", "Deliver subsurface indirect pass");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
+ prop = RNA_def_property(srna, "use_pass_subsurface_color", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_SUBSURFACE_COLOR);
+ RNA_def_property_ui_text(prop, "Subsurface Color", "Deliver subsurface color pass");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
}
static void rna_def_freestyle_linesets(BlenderRNA *brna, PropertyRNA *cprop)
diff --git a/source/blender/nodes/composite/nodes/node_composite_image.c b/source/blender/nodes/composite/nodes/node_composite_image.c
index 0d68b999eb2..d073abf112a 100644
--- a/source/blender/nodes/composite/nodes/node_composite_image.c
+++ b/source/blender/nodes/composite/nodes/node_composite_image.c
@@ -72,6 +72,9 @@ static bNodeSocketTemplate cmp_node_rlayers_out[] = {
{ SOCK_RGBA, 0, N_("Transmission Direct"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
{ SOCK_RGBA, 0, N_("Transmission Indirect"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
{ SOCK_RGBA, 0, N_("Transmission Color"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
+ { SOCK_RGBA, 0, N_("Subsurface Direct"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
+ { SOCK_RGBA, 0, N_("Subsurface Indirect"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
+ { SOCK_RGBA, 0, N_("Subsurface Color"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
{ -1, 0, "" }
};
@@ -152,6 +155,13 @@ static void cmp_node_image_add_render_pass_outputs(bNodeTree *ntree, bNode *node
cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_TRANSM_INDIRECT, RRES_OUT_TRANSM_INDIRECT);
if (passflag & SCE_PASS_TRANSM_COLOR)
cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_TRANSM_COLOR, RRES_OUT_TRANSM_COLOR);
+
+ if (passflag & SCE_PASS_SUBSURFACE_DIRECT)
+ cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_SUBSURFACE_DIRECT, RRES_OUT_SUBSURFACE_DIRECT);
+ if (passflag & SCE_PASS_SUBSURFACE_INDIRECT)
+ cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_SUBSURFACE_INDIRECT, RRES_OUT_SUBSURFACE_INDIRECT);
+ if (passflag & SCE_PASS_SUBSURFACE_COLOR)
+ cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_SUBSURFACE_COLOR, RRES_OUT_SUBSURFACE_COLOR);
}
static void cmp_node_image_add_multilayer_outputs(bNodeTree *ntree, bNode *node, RenderLayer *rl)
@@ -385,35 +395,38 @@ void node_cmp_rlayers_force_hidden_passes(bNode *node)
for (sock = node->outputs.first; sock; sock = sock->next)
sock->flag &= ~SOCK_UNAVAIL;
- set_output_visible(node, passflag, RRES_OUT_IMAGE, SCE_PASS_COMBINED);
- set_output_visible(node, passflag, RRES_OUT_ALPHA, SCE_PASS_COMBINED);
-
- set_output_visible(node, passflag, RRES_OUT_Z, SCE_PASS_Z);
- set_output_visible(node, passflag, RRES_OUT_NORMAL, SCE_PASS_NORMAL);
- set_output_visible(node, passflag, RRES_OUT_VEC, SCE_PASS_VECTOR);
- set_output_visible(node, passflag, RRES_OUT_UV, SCE_PASS_UV);
- set_output_visible(node, passflag, RRES_OUT_RGBA, SCE_PASS_RGBA);
- set_output_visible(node, passflag, RRES_OUT_DIFF, SCE_PASS_DIFFUSE);
- set_output_visible(node, passflag, RRES_OUT_SPEC, SCE_PASS_SPEC);
- set_output_visible(node, passflag, RRES_OUT_SHADOW, SCE_PASS_SHADOW);
- set_output_visible(node, passflag, RRES_OUT_AO, SCE_PASS_AO);
- set_output_visible(node, passflag, RRES_OUT_REFLECT, SCE_PASS_REFLECT);
- set_output_visible(node, passflag, RRES_OUT_REFRACT, SCE_PASS_REFRACT);
- set_output_visible(node, passflag, RRES_OUT_INDIRECT, SCE_PASS_INDIRECT);
- set_output_visible(node, passflag, RRES_OUT_INDEXOB, SCE_PASS_INDEXOB);
- set_output_visible(node, passflag, RRES_OUT_INDEXMA, SCE_PASS_INDEXMA);
- set_output_visible(node, passflag, RRES_OUT_MIST, SCE_PASS_MIST);
- set_output_visible(node, passflag, RRES_OUT_EMIT, SCE_PASS_EMIT);
- set_output_visible(node, passflag, RRES_OUT_ENV, SCE_PASS_ENVIRONMENT);
- set_output_visible(node, passflag, RRES_OUT_DIFF_DIRECT, SCE_PASS_DIFFUSE_DIRECT);
- set_output_visible(node, passflag, RRES_OUT_DIFF_INDIRECT, SCE_PASS_DIFFUSE_INDIRECT);
- set_output_visible(node, passflag, RRES_OUT_DIFF_COLOR, SCE_PASS_DIFFUSE_COLOR);
- set_output_visible(node, passflag, RRES_OUT_GLOSSY_DIRECT, SCE_PASS_GLOSSY_DIRECT);
- set_output_visible(node, passflag, RRES_OUT_GLOSSY_INDIRECT, SCE_PASS_GLOSSY_INDIRECT);
- set_output_visible(node, passflag, RRES_OUT_GLOSSY_COLOR, SCE_PASS_GLOSSY_COLOR);
- set_output_visible(node, passflag, RRES_OUT_TRANSM_DIRECT, SCE_PASS_TRANSM_DIRECT);
- set_output_visible(node, passflag, RRES_OUT_TRANSM_INDIRECT, SCE_PASS_TRANSM_INDIRECT);
- set_output_visible(node, passflag, RRES_OUT_TRANSM_COLOR, SCE_PASS_TRANSM_COLOR);
+ set_output_visible(node, passflag, RRES_OUT_IMAGE, SCE_PASS_COMBINED);
+ set_output_visible(node, passflag, RRES_OUT_ALPHA, SCE_PASS_COMBINED);
+
+ set_output_visible(node, passflag, RRES_OUT_Z, SCE_PASS_Z);
+ set_output_visible(node, passflag, RRES_OUT_NORMAL, SCE_PASS_NORMAL);
+ set_output_visible(node, passflag, RRES_OUT_VEC, SCE_PASS_VECTOR);
+ set_output_visible(node, passflag, RRES_OUT_UV, SCE_PASS_UV);
+ set_output_visible(node, passflag, RRES_OUT_RGBA, SCE_PASS_RGBA);
+ set_output_visible(node, passflag, RRES_OUT_DIFF, SCE_PASS_DIFFUSE);
+ set_output_visible(node, passflag, RRES_OUT_SPEC, SCE_PASS_SPEC);
+ set_output_visible(node, passflag, RRES_OUT_SHADOW, SCE_PASS_SHADOW);
+ set_output_visible(node, passflag, RRES_OUT_AO, SCE_PASS_AO);
+ set_output_visible(node, passflag, RRES_OUT_REFLECT, SCE_PASS_REFLECT);
+ set_output_visible(node, passflag, RRES_OUT_REFRACT, SCE_PASS_REFRACT);
+ set_output_visible(node, passflag, RRES_OUT_INDIRECT, SCE_PASS_INDIRECT);
+ set_output_visible(node, passflag, RRES_OUT_INDEXOB, SCE_PASS_INDEXOB);
+ set_output_visible(node, passflag, RRES_OUT_INDEXMA, SCE_PASS_INDEXMA);
+ set_output_visible(node, passflag, RRES_OUT_MIST, SCE_PASS_MIST);
+ set_output_visible(node, passflag, RRES_OUT_EMIT, SCE_PASS_EMIT);
+ set_output_visible(node, passflag, RRES_OUT_ENV, SCE_PASS_ENVIRONMENT);
+ set_output_visible(node, passflag, RRES_OUT_DIFF_DIRECT, SCE_PASS_DIFFUSE_DIRECT);
+ set_output_visible(node, passflag, RRES_OUT_DIFF_INDIRECT, SCE_PASS_DIFFUSE_INDIRECT);
+ set_output_visible(node, passflag, RRES_OUT_DIFF_COLOR, SCE_PASS_DIFFUSE_COLOR);
+ set_output_visible(node, passflag, RRES_OUT_GLOSSY_DIRECT, SCE_PASS_GLOSSY_DIRECT);
+ set_output_visible(node, passflag, RRES_OUT_GLOSSY_INDIRECT, SCE_PASS_GLOSSY_INDIRECT);
+ set_output_visible(node, passflag, RRES_OUT_GLOSSY_COLOR, SCE_PASS_GLOSSY_COLOR);
+ set_output_visible(node, passflag, RRES_OUT_TRANSM_DIRECT, SCE_PASS_TRANSM_DIRECT);
+ set_output_visible(node, passflag, RRES_OUT_TRANSM_INDIRECT, SCE_PASS_TRANSM_INDIRECT);
+ set_output_visible(node, passflag, RRES_OUT_TRANSM_COLOR, SCE_PASS_TRANSM_COLOR);
+ set_output_visible(node, passflag, RRES_OUT_SUBSURFACE_DIRECT, SCE_PASS_SUBSURFACE_DIRECT);
+ set_output_visible(node, passflag, RRES_OUT_SUBSURFACE_INDIRECT, SCE_PASS_SUBSURFACE_INDIRECT);
+ set_output_visible(node, passflag, RRES_OUT_SUBSURFACE_COLOR, SCE_PASS_SUBSURFACE_COLOR);
}
static void node_composit_init_rlayers(const bContext *C, PointerRNA *ptr)
diff --git a/source/blender/render/intern/source/render_result.c b/source/blender/render/intern/source/render_result.c
index f719e09769d..ce15cc33aac 100644
--- a/source/blender/render/intern/source/render_result.c
+++ b/source/blender/render/intern/source/render_result.c
@@ -279,6 +279,24 @@ static const char *get_pass_name(int passtype, int channel)
if (channel == 1) return "TransCol.G";
return "TransCol.B";
}
+ if (passtype == SCE_PASS_SUBSURFACE_DIRECT) {
+ if (channel == -1) return "SubsurfaceDir";
+ if (channel == 0) return "SubsurfaceDir.R";
+ if (channel == 1) return "SubsurfaceDir.G";
+ return "SubsDir.B";
+ }
+ if (passtype == SCE_PASS_SUBSURFACE_INDIRECT) {
+ if (channel == -1) return "SubsurfaceInd";
+ if (channel == 0) return "SubsurfaceInd.R";
+ if (channel == 1) return "SubsurfaceInd.G";
+ return "SubsInd.B";
+ }
+ if (passtype == SCE_PASS_SUBSURFACE_COLOR) {
+ if (channel == -1) return "SubsurfaceCol";
+ if (channel == 0) return "SubsurfaceCol.R";
+ if (channel == 1) return "SubsurfaceCol.G";
+ return "SubsCol.B";
+ }
return "Unknown";
}
@@ -368,6 +386,15 @@ static int passtype_from_name(const char *str)
if (strcmp(str, "TransCol") == 0)
return SCE_PASS_TRANSM_COLOR;
+
+ if (strcmp(str, "SubsurfaceDir") == 0)
+ return SCE_PASS_SUBSURFACE_DIRECT;
+
+ if (strcmp(str, "SubsurfaceInd") == 0)
+ return SCE_PASS_SUBSURFACE_INDIRECT;
+
+ if (strcmp(str, "SubsurfaceCol") == 0)
+ return SCE_PASS_SUBSURFACE_COLOR;
return 0;
}
@@ -538,6 +565,12 @@ RenderResult *render_result_new(Render *re, rcti *partrct, int crop, int savebuf
render_layer_add_pass(rr, rl, 3, SCE_PASS_TRANSM_INDIRECT);
if (srl->passflag & SCE_PASS_TRANSM_COLOR)
render_layer_add_pass(rr, rl, 3, SCE_PASS_TRANSM_COLOR);
+ if (srl->passflag & SCE_PASS_SUBSURFACE_DIRECT)
+ render_layer_add_pass(rr, rl, 3, SCE_PASS_SUBSURFACE_DIRECT);
+ if (srl->passflag & SCE_PASS_SUBSURFACE_INDIRECT)
+ render_layer_add_pass(rr, rl, 3, SCE_PASS_SUBSURFACE_INDIRECT);
+ if (srl->passflag & SCE_PASS_SUBSURFACE_COLOR)
+ render_layer_add_pass(rr, rl, 3, SCE_PASS_SUBSURFACE_COLOR);
}
/* sss, previewrender and envmap don't do layers, so we make a default one */
if (rr->layers.first == NULL && !(layername && layername[0])) {