forked from bartvdbraak/blender
Cycles: move sss and diffuse transmission into diffuse pass
This simplifies compositors setups and will be consistent with Eevee render passes from D6331. There's a continuum between these passes and it's not clear there is much advantage to having them available separately. Differential Revision: https://developer.blender.org/D6848
This commit is contained in:
parent
e6be2af061
commit
e0085bfd24
@ -245,9 +245,6 @@ def list_render_passes(srl):
|
||||
if srl.use_pass_transmission_direct: yield ("TransDir", "RGB", 'COLOR')
|
||||
if srl.use_pass_transmission_indirect: yield ("TransInd", "RGB", 'COLOR')
|
||||
if srl.use_pass_transmission_color: yield ("TransCol", "RGB", 'COLOR')
|
||||
if srl.use_pass_subsurface_direct: yield ("SubsurfaceDir", "RGB", 'COLOR')
|
||||
if srl.use_pass_subsurface_indirect: yield ("SubsurfaceInd", "RGB", 'COLOR')
|
||||
if srl.use_pass_subsurface_color: yield ("SubsurfaceCol", "RGB", 'COLOR')
|
||||
if srl.use_pass_emit: yield ("Emit", "RGB", 'COLOR')
|
||||
if srl.use_pass_environment: yield ("Env", "RGB", 'COLOR')
|
||||
|
||||
@ -284,8 +281,7 @@ def list_render_passes(srl):
|
||||
yield ("Denoising Intensity", "X", 'VALUE')
|
||||
clean_options = ("denoising_diffuse_direct", "denoising_diffuse_indirect",
|
||||
"denoising_glossy_direct", "denoising_glossy_indirect",
|
||||
"denoising_transmission_direct", "denoising_transmission_indirect",
|
||||
"denoising_subsurface_direct", "denoising_subsurface_indirect")
|
||||
"denoising_transmission_direct", "denoising_transmission_indirect")
|
||||
if any(getattr(crl, option) for option in clean_options):
|
||||
yield ("Denoising Clean", "RGB", 'COLOR')
|
||||
|
||||
|
@ -178,10 +178,6 @@ enum_view3d_shading_render_pass= (
|
||||
('TRANSMISSION_INDIRECT', "Transmission Indirect", "Show the Transmission Indirect render pass", 45),
|
||||
('TRANSMISSION_COLOR', "Transmission Color", "Show the Transmission Color render pass", 46),
|
||||
|
||||
('SUBSURFACE_DIRECT', "Subsurface Direct", "Show the Subsurface Direct render pass", 47),
|
||||
('SUBSURFACE_INDIRECT', "Subsurface Indirect", "Show the Subsurface Indirect render pass", 48),
|
||||
('SUBSURFACE_COLOR', "Subsurface Color", "Show the Subsurface Color render pass", 49),
|
||||
|
||||
('VOLUME_DIRECT', "Volume Direct", "Show the Volume Direct render pass", 50),
|
||||
('VOLUME_INDIRECT', "Volume Indirect", "Show the Volume Indirect render pass", 51),
|
||||
|
||||
@ -652,7 +648,6 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
|
||||
('DIFFUSE', "Diffuse", ""),
|
||||
('GLOSSY', "Glossy", ""),
|
||||
('TRANSMISSION', "Transmission", ""),
|
||||
('SUBSURFACE', "Subsurface", ""),
|
||||
),
|
||||
)
|
||||
|
||||
@ -1346,16 +1341,6 @@ class CyclesRenderLayerSettings(bpy.types.PropertyGroup):
|
||||
description="Denoise the indirect transmission lighting",
|
||||
default=True,
|
||||
)
|
||||
denoising_subsurface_direct: BoolProperty(
|
||||
name="Subsurface Direct",
|
||||
description="Denoise the direct subsurface lighting",
|
||||
default=True,
|
||||
)
|
||||
denoising_subsurface_indirect: BoolProperty(
|
||||
name="Subsurface Indirect",
|
||||
description="Denoise the indirect subsurface lighting",
|
||||
default=True,
|
||||
)
|
||||
denoising_strength: FloatProperty(
|
||||
name="Denoising Strength",
|
||||
description="Controls neighbor pixel weighting for the denoising filter (lower values preserve more detail, but aren't as smooth)",
|
||||
|
@ -851,14 +851,6 @@ class CYCLES_RENDER_PT_passes_light(CyclesButtonsPanel, Panel):
|
||||
row.prop(view_layer, "use_pass_transmission_indirect", text="Indirect", toggle=True)
|
||||
row.prop(view_layer, "use_pass_transmission_color", text="Color", toggle=True)
|
||||
|
||||
split = layout.split(factor=0.35)
|
||||
split.use_property_split = False
|
||||
split.label(text="Subsurface")
|
||||
row = split.row(align=True)
|
||||
row.prop(view_layer, "use_pass_subsurface_direct", text="Direct", toggle=True)
|
||||
row.prop(view_layer, "use_pass_subsurface_indirect", text="Indirect", toggle=True)
|
||||
row.prop(view_layer, "use_pass_subsurface_color", text="Color", toggle=True)
|
||||
|
||||
split = layout.split(factor=0.35)
|
||||
split.use_property_split = False
|
||||
split.label(text="Volume")
|
||||
@ -1040,15 +1032,6 @@ class CYCLES_RENDER_PT_denoising(CyclesButtonsPanel, Panel):
|
||||
split = layout.split(factor=0.5)
|
||||
split.active = cycles_view_layer.use_denoising or cycles_view_layer.denoising_store_passes
|
||||
|
||||
col = split.column()
|
||||
col.alignment = 'RIGHT'
|
||||
col.label(text="Subsurface")
|
||||
|
||||
row = split.row(align=True)
|
||||
row.use_property_split = False
|
||||
row.prop(cycles_view_layer, "denoising_subsurface_direct", text="Direct", toggle=True)
|
||||
row.prop(cycles_view_layer, "denoising_subsurface_indirect", text="Indirect", toggle=True)
|
||||
|
||||
|
||||
class CYCLES_PT_post_processing(CyclesButtonsPanel, Panel):
|
||||
bl_label = "Post Processing"
|
||||
@ -1856,7 +1839,7 @@ class CYCLES_RENDER_PT_bake_influence(CyclesButtonsPanel, Panel):
|
||||
cscene = scene.cycles
|
||||
rd = scene.render
|
||||
if rd.use_bake_multires == False and cscene.bake_type in {
|
||||
'NORMAL', 'COMBINED', 'DIFFUSE', 'GLOSSY', 'TRANSMISSION', 'SUBSURFACE'}:
|
||||
'NORMAL', 'COMBINED', 'DIFFUSE', 'GLOSSY', 'TRANSMISSION'}:
|
||||
return True
|
||||
|
||||
def draw(self, context):
|
||||
@ -1895,7 +1878,7 @@ class CYCLES_RENDER_PT_bake_influence(CyclesButtonsPanel, Panel):
|
||||
flow.prop(cbk, "use_pass_ambient_occlusion")
|
||||
flow.prop(cbk, "use_pass_emit")
|
||||
|
||||
elif cscene.bake_type in {'DIFFUSE', 'GLOSSY', 'TRANSMISSION', 'SUBSURFACE'}:
|
||||
elif cscene.bake_type in {'DIFFUSE', 'GLOSSY', 'TRANSMISSION'}:
|
||||
row = col.row(align=True)
|
||||
row.use_property_split = False
|
||||
row.prop(cbk, "use_pass_direct", toggle=True)
|
||||
|
@ -42,10 +42,7 @@ def custom_bake_remap(scene):
|
||||
'GLOSSY_COLOR',
|
||||
'TRANSMISSION_DIRECT',
|
||||
'TRANSMISSION_INDIRECT',
|
||||
'TRANSMISSION_COLOR',
|
||||
'SUBSURFACE_DIRECT',
|
||||
'SUBSURFACE_INDIRECT',
|
||||
'SUBSURFACE_COLOR')
|
||||
'TRANSMISSION_COLOR')
|
||||
|
||||
diffuse_direct_idx = bake_lookup.index('DIFFUSE_DIRECT')
|
||||
|
||||
|
@ -278,8 +278,6 @@ static ShaderEvalType get_shader_type(const string &pass_type)
|
||||
return SHADER_EVAL_GLOSSY_COLOR;
|
||||
else if (strcmp(shader_type, "TRANSMISSION_COLOR") == 0)
|
||||
return SHADER_EVAL_TRANSMISSION_COLOR;
|
||||
else if (strcmp(shader_type, "SUBSURFACE_COLOR") == 0)
|
||||
return SHADER_EVAL_SUBSURFACE_COLOR;
|
||||
else if (strcmp(shader_type, "EMIT") == 0)
|
||||
return SHADER_EVAL_EMISSION;
|
||||
|
||||
@ -296,8 +294,6 @@ static ShaderEvalType get_shader_type(const string &pass_type)
|
||||
return SHADER_EVAL_GLOSSY;
|
||||
else if (strcmp(shader_type, "TRANSMISSION") == 0)
|
||||
return SHADER_EVAL_TRANSMISSION;
|
||||
else if (strcmp(shader_type, "SUBSURFACE") == 0)
|
||||
return SHADER_EVAL_SUBSURFACE;
|
||||
|
||||
/* extra */
|
||||
else if (strcmp(shader_type, "ENVIRONMENT") == 0)
|
||||
@ -640,8 +636,6 @@ static int bake_pass_filter_get(const int pass_filter)
|
||||
flag |= BAKE_FILTER_GLOSSY;
|
||||
if ((pass_filter & BL::BakeSettings::pass_filter_TRANSMISSION) != 0)
|
||||
flag |= BAKE_FILTER_TRANSMISSION;
|
||||
if ((pass_filter & BL::BakeSettings::pass_filter_SUBSURFACE) != 0)
|
||||
flag |= BAKE_FILTER_SUBSURFACE;
|
||||
|
||||
if ((pass_filter & BL::BakeSettings::pass_filter_EMIT) != 0)
|
||||
flag |= BAKE_FILTER_EMISSION;
|
||||
|
@ -461,19 +461,16 @@ PassType BlenderSync::get_pass_type(BL::RenderPass &b_pass)
|
||||
MAP_PASS("DiffDir", PASS_DIFFUSE_DIRECT);
|
||||
MAP_PASS("GlossDir", PASS_GLOSSY_DIRECT);
|
||||
MAP_PASS("TransDir", PASS_TRANSMISSION_DIRECT);
|
||||
MAP_PASS("SubsurfaceDir", PASS_SUBSURFACE_DIRECT);
|
||||
MAP_PASS("VolumeDir", PASS_VOLUME_DIRECT);
|
||||
|
||||
MAP_PASS("DiffInd", PASS_DIFFUSE_INDIRECT);
|
||||
MAP_PASS("GlossInd", PASS_GLOSSY_INDIRECT);
|
||||
MAP_PASS("TransInd", PASS_TRANSMISSION_INDIRECT);
|
||||
MAP_PASS("SubsurfaceInd", PASS_SUBSURFACE_INDIRECT);
|
||||
MAP_PASS("VolumeInd", PASS_VOLUME_INDIRECT);
|
||||
|
||||
MAP_PASS("DiffCol", PASS_DIFFUSE_COLOR);
|
||||
MAP_PASS("GlossCol", PASS_GLOSSY_COLOR);
|
||||
MAP_PASS("TransCol", PASS_TRANSMISSION_COLOR);
|
||||
MAP_PASS("SubsurfaceCol", PASS_SUBSURFACE_COLOR);
|
||||
|
||||
MAP_PASS("Emit", PASS_EMISSION);
|
||||
MAP_PASS("Env", PASS_BACKGROUND);
|
||||
@ -556,8 +553,6 @@ vector<Pass> BlenderSync::sync_render_passes(BL::RenderLayer &b_rlay, BL::ViewLa
|
||||
MAP_OPTION("denoising_glossy_indirect", DENOISING_CLEAN_GLOSSY_IND);
|
||||
MAP_OPTION("denoising_transmission_direct", DENOISING_CLEAN_TRANSMISSION_DIR);
|
||||
MAP_OPTION("denoising_transmission_indirect", DENOISING_CLEAN_TRANSMISSION_IND);
|
||||
MAP_OPTION("denoising_subsurface_direct", DENOISING_CLEAN_SUBSURFACE_DIR);
|
||||
MAP_OPTION("denoising_subsurface_indirect", DENOISING_CLEAN_SUBSURFACE_IND);
|
||||
#undef MAP_OPTION
|
||||
}
|
||||
b_engine.add_pass("Noisy Image", 4, "RGBA", b_view_layer.name().c_str());
|
||||
|
@ -36,21 +36,18 @@ ccl_device_inline void bsdf_eval_init(BsdfEval *eval,
|
||||
eval->glossy = make_float3(0.0f, 0.0f, 0.0f);
|
||||
eval->transmission = make_float3(0.0f, 0.0f, 0.0f);
|
||||
eval->transparent = make_float3(0.0f, 0.0f, 0.0f);
|
||||
eval->subsurface = make_float3(0.0f, 0.0f, 0.0f);
|
||||
eval->scatter = make_float3(0.0f, 0.0f, 0.0f);
|
||||
eval->volume = make_float3(0.0f, 0.0f, 0.0f);
|
||||
|
||||
if (type == CLOSURE_BSDF_TRANSPARENT_ID)
|
||||
eval->transparent = value;
|
||||
else if (CLOSURE_IS_BSDF_DIFFUSE(type))
|
||||
else if (CLOSURE_IS_BSDF_DIFFUSE(type) || CLOSURE_IS_BSDF_BSSRDF(type))
|
||||
eval->diffuse = value;
|
||||
else if (CLOSURE_IS_BSDF_GLOSSY(type))
|
||||
eval->glossy = value;
|
||||
else if (CLOSURE_IS_BSDF_TRANSMISSION(type))
|
||||
eval->transmission = value;
|
||||
else if (CLOSURE_IS_BSDF_BSSRDF(type))
|
||||
eval->subsurface = value;
|
||||
else if (CLOSURE_IS_PHASE(type))
|
||||
eval->scatter = value;
|
||||
eval->volume = value;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
@ -73,16 +70,14 @@ ccl_device_inline void bsdf_eval_accum(BsdfEval *eval,
|
||||
value *= mis_weight;
|
||||
#ifdef __PASSES__
|
||||
if (eval->use_light_pass) {
|
||||
if (CLOSURE_IS_BSDF_DIFFUSE(type))
|
||||
if (CLOSURE_IS_BSDF_DIFFUSE(type) || CLOSURE_IS_BSDF_BSSRDF(type))
|
||||
eval->diffuse += value;
|
||||
else if (CLOSURE_IS_BSDF_GLOSSY(type))
|
||||
eval->glossy += value;
|
||||
else if (CLOSURE_IS_BSDF_TRANSMISSION(type))
|
||||
eval->transmission += value;
|
||||
else if (CLOSURE_IS_BSDF_BSSRDF(type))
|
||||
eval->subsurface += value;
|
||||
else if (CLOSURE_IS_PHASE(type))
|
||||
eval->scatter += value;
|
||||
eval->volume += value;
|
||||
|
||||
/* skipping transparent, this function is used by for eval(), will be zero then */
|
||||
}
|
||||
@ -98,7 +93,7 @@ ccl_device_inline bool bsdf_eval_is_zero(BsdfEval *eval)
|
||||
#ifdef __PASSES__
|
||||
if (eval->use_light_pass) {
|
||||
return is_zero(eval->diffuse) && is_zero(eval->glossy) && is_zero(eval->transmission) &&
|
||||
is_zero(eval->transparent) && is_zero(eval->subsurface) && is_zero(eval->scatter);
|
||||
is_zero(eval->transparent) && is_zero(eval->volume);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
@ -114,8 +109,7 @@ ccl_device_inline void bsdf_eval_mis(BsdfEval *eval, float value)
|
||||
eval->diffuse *= value;
|
||||
eval->glossy *= value;
|
||||
eval->transmission *= value;
|
||||
eval->subsurface *= value;
|
||||
eval->scatter *= value;
|
||||
eval->volume *= value;
|
||||
|
||||
/* skipping transparent, this function is used by for eval(), will be zero then */
|
||||
}
|
||||
@ -144,8 +138,7 @@ ccl_device_inline void bsdf_eval_mul3(BsdfEval *eval, float3 value)
|
||||
eval->diffuse *= value;
|
||||
eval->glossy *= value;
|
||||
eval->transmission *= value;
|
||||
eval->subsurface *= value;
|
||||
eval->scatter *= value;
|
||||
eval->volume *= value;
|
||||
|
||||
/* skipping transparent, this function is used by for eval(), will be zero then */
|
||||
}
|
||||
@ -160,7 +153,7 @@ ccl_device_inline float3 bsdf_eval_sum(const BsdfEval *eval)
|
||||
{
|
||||
#ifdef __PASSES__
|
||||
if (eval->use_light_pass) {
|
||||
return eval->diffuse + eval->glossy + eval->transmission + eval->subsurface + eval->scatter;
|
||||
return eval->diffuse + eval->glossy + eval->transmission + eval->volume;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
@ -187,19 +180,16 @@ ccl_device_inline void path_radiance_init(KernelGlobals *kg, PathRadiance *L)
|
||||
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->direct_scatter = make_float3(0.0f, 0.0f, 0.0f);
|
||||
L->direct_volume = 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->indirect_scatter = make_float3(0.0f, 0.0f, 0.0f);
|
||||
L->indirect_volume = make_float3(0.0f, 0.0f, 0.0f);
|
||||
|
||||
L->transparent = 0.0f;
|
||||
L->emission = make_float3(0.0f, 0.0f, 0.0f);
|
||||
@ -211,8 +201,7 @@ ccl_device_inline void path_radiance_init(KernelGlobals *kg, PathRadiance *L)
|
||||
L->state.diffuse = make_float3(0.0f, 0.0f, 0.0f);
|
||||
L->state.glossy = make_float3(0.0f, 0.0f, 0.0f);
|
||||
L->state.transmission = make_float3(0.0f, 0.0f, 0.0f);
|
||||
L->state.subsurface = make_float3(0.0f, 0.0f, 0.0f);
|
||||
L->state.scatter = make_float3(0.0f, 0.0f, 0.0f);
|
||||
L->state.volume = make_float3(0.0f, 0.0f, 0.0f);
|
||||
L->state.direct = make_float3(0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
else
|
||||
@ -264,11 +253,9 @@ ccl_device_inline void path_radiance_bsdf_bounce(KernelGlobals *kg,
|
||||
L_state->diffuse = bsdf_eval->diffuse * value;
|
||||
L_state->glossy = bsdf_eval->glossy * value;
|
||||
L_state->transmission = bsdf_eval->transmission * value;
|
||||
L_state->subsurface = bsdf_eval->subsurface * value;
|
||||
L_state->scatter = bsdf_eval->scatter * value;
|
||||
L_state->volume = bsdf_eval->volume * value;
|
||||
|
||||
*throughput = L_state->diffuse + L_state->glossy + L_state->transmission +
|
||||
L_state->subsurface + L_state->scatter;
|
||||
*throughput = L_state->diffuse + L_state->glossy + L_state->transmission + L_state->volume;
|
||||
|
||||
L_state->direct = *throughput;
|
||||
}
|
||||
@ -449,8 +436,7 @@ ccl_device_inline void path_radiance_accum_light(KernelGlobals *kg,
|
||||
L->direct_diffuse += shaded_throughput * bsdf_eval->diffuse;
|
||||
L->direct_glossy += shaded_throughput * bsdf_eval->glossy;
|
||||
L->direct_transmission += shaded_throughput * bsdf_eval->transmission;
|
||||
L->direct_subsurface += shaded_throughput * bsdf_eval->subsurface;
|
||||
L->direct_scatter += shaded_throughput * bsdf_eval->scatter;
|
||||
L->direct_volume += shaded_throughput * bsdf_eval->volume;
|
||||
|
||||
if (is_lamp) {
|
||||
L->shadow.x += shadow.x * shadow_fac;
|
||||
@ -562,15 +548,13 @@ ccl_device_inline void path_radiance_sum_indirect(PathRadiance *L)
|
||||
L->direct_diffuse += L->state.diffuse * L->direct_emission;
|
||||
L->direct_glossy += L->state.glossy * L->direct_emission;
|
||||
L->direct_transmission += L->state.transmission * L->direct_emission;
|
||||
L->direct_subsurface += L->state.subsurface * L->direct_emission;
|
||||
L->direct_scatter += L->state.scatter * L->direct_emission;
|
||||
L->direct_volume += L->state.volume * L->direct_emission;
|
||||
|
||||
L->indirect = safe_divide_color(L->indirect, L->state.direct);
|
||||
L->indirect_diffuse += L->state.diffuse * L->indirect;
|
||||
L->indirect_glossy += L->state.glossy * L->indirect;
|
||||
L->indirect_transmission += L->state.transmission * L->indirect;
|
||||
L->indirect_subsurface += L->state.subsurface * L->indirect;
|
||||
L->indirect_scatter += L->state.scatter * L->indirect;
|
||||
L->indirect_volume += L->state.volume * L->indirect;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@ -582,8 +566,7 @@ ccl_device_inline void path_radiance_reset_indirect(PathRadiance *L)
|
||||
L->state.diffuse = make_float3(0.0f, 0.0f, 0.0f);
|
||||
L->state.glossy = make_float3(0.0f, 0.0f, 0.0f);
|
||||
L->state.transmission = make_float3(0.0f, 0.0f, 0.0f);
|
||||
L->state.subsurface = make_float3(0.0f, 0.0f, 0.0f);
|
||||
L->state.scatter = make_float3(0.0f, 0.0f, 0.0f);
|
||||
L->state.volume = make_float3(0.0f, 0.0f, 0.0f);
|
||||
|
||||
L->direct_emission = make_float3(0.0f, 0.0f, 0.0f);
|
||||
L->indirect = make_float3(0.0f, 0.0f, 0.0f);
|
||||
@ -647,10 +630,10 @@ ccl_device_inline float3 path_radiance_clamp_and_sum(KernelGlobals *kg,
|
||||
if (L->use_light_pass) {
|
||||
path_radiance_sum_indirect(L);
|
||||
|
||||
L_direct = L->direct_diffuse + L->direct_glossy + L->direct_transmission +
|
||||
L->direct_subsurface + L->direct_scatter + L->emission;
|
||||
L_direct = L->direct_diffuse + L->direct_glossy + L->direct_transmission + L->direct_volume +
|
||||
L->emission;
|
||||
L_indirect = L->indirect_diffuse + L->indirect_glossy + L->indirect_transmission +
|
||||
L->indirect_subsurface + L->indirect_scatter;
|
||||
L->indirect_volume;
|
||||
|
||||
if (!kernel_data.background.transparent)
|
||||
L_direct += L->background;
|
||||
@ -666,14 +649,12 @@ ccl_device_inline float3 path_radiance_clamp_and_sum(KernelGlobals *kg,
|
||||
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->direct_scatter = make_float3(0.0f, 0.0f, 0.0f);
|
||||
L->direct_volume = 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->indirect_scatter = make_float3(0.0f, 0.0f, 0.0f);
|
||||
L->indirect_volume = make_float3(0.0f, 0.0f, 0.0f);
|
||||
|
||||
L->emission = make_float3(0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
@ -715,7 +696,7 @@ ccl_device_inline void path_radiance_split_denoising(KernelGlobals *kg,
|
||||
kernel_assert(L->use_light_pass);
|
||||
|
||||
*clean = L->emission + L->background;
|
||||
*noisy = L->direct_scatter + L->indirect_scatter;
|
||||
*noisy = L->direct_volume + L->indirect_volume;
|
||||
|
||||
# define ADD_COMPONENT(flag, component) \
|
||||
if (kernel_data.film.denoising_flags & flag) \
|
||||
@ -729,8 +710,6 @@ ccl_device_inline void path_radiance_split_denoising(KernelGlobals *kg,
|
||||
ADD_COMPONENT(DENOISING_CLEAN_GLOSSY_IND, L->indirect_glossy);
|
||||
ADD_COMPONENT(DENOISING_CLEAN_TRANSMISSION_DIR, L->direct_transmission);
|
||||
ADD_COMPONENT(DENOISING_CLEAN_TRANSMISSION_IND, L->indirect_transmission);
|
||||
ADD_COMPONENT(DENOISING_CLEAN_SUBSURFACE_DIR, L->direct_subsurface);
|
||||
ADD_COMPONENT(DENOISING_CLEAN_SUBSURFACE_IND, L->indirect_subsurface);
|
||||
# undef ADD_COMPONENT
|
||||
#else
|
||||
*noisy = L->emission;
|
||||
@ -767,14 +746,12 @@ ccl_device_inline void path_radiance_accum_sample(PathRadiance *L, PathRadiance
|
||||
safe_float3_add(L->direct_diffuse, L_sample->direct_diffuse);
|
||||
safe_float3_add(L->direct_glossy, L_sample->direct_glossy);
|
||||
safe_float3_add(L->direct_transmission, L_sample->direct_transmission);
|
||||
safe_float3_add(L->direct_subsurface, L_sample->direct_subsurface);
|
||||
safe_float3_add(L->direct_scatter, L_sample->direct_scatter);
|
||||
safe_float3_add(L->direct_volume, L_sample->direct_volume);
|
||||
|
||||
safe_float3_add(L->indirect_diffuse, L_sample->indirect_diffuse);
|
||||
safe_float3_add(L->indirect_glossy, L_sample->indirect_glossy);
|
||||
safe_float3_add(L->indirect_transmission, L_sample->indirect_transmission);
|
||||
safe_float3_add(L->indirect_subsurface, L_sample->indirect_subsurface);
|
||||
safe_float3_add(L->indirect_scatter, L_sample->indirect_scatter);
|
||||
safe_float3_add(L->indirect_volume, L_sample->indirect_volume);
|
||||
|
||||
safe_float3_add(L->background, L_sample->background);
|
||||
safe_float3_add(L->ao, L_sample->ao);
|
||||
|
@ -71,7 +71,7 @@ ccl_device_inline void compute_light_pass(
|
||||
|
||||
# ifdef __SUBSURFACE__
|
||||
/* sample subsurface scattering */
|
||||
if ((pass_filter & BAKE_FILTER_SUBSURFACE) && (sd->flag & SD_BSSRDF)) {
|
||||
if ((pass_filter & BAKE_FILTER_DIFFUSE) && (sd->flag & SD_BSSRDF)) {
|
||||
/* When mixing BSSRDF and BSDF closures we should skip BSDF lighting
|
||||
* if scattering was successful. */
|
||||
SubsurfaceIndirectRays ss_indirect;
|
||||
@ -123,7 +123,7 @@ ccl_device_inline void compute_light_pass(
|
||||
|
||||
# ifdef __SUBSURFACE__
|
||||
/* sample subsurface scattering */
|
||||
if ((pass_filter & BAKE_FILTER_SUBSURFACE) && (sd->flag & SD_BSSRDF)) {
|
||||
if ((pass_filter & BAKE_FILTER_DIFFUSE) && (sd->flag & SD_BSSRDF)) {
|
||||
/* When mixing BSSRDF and BSDF closures we should skip BSDF lighting
|
||||
* if scattering was successful. */
|
||||
kernel_branched_path_subsurface_scatter(
|
||||
@ -178,10 +178,6 @@ ccl_device_inline float3 kernel_bake_shader_bsdf(KernelGlobals *kg,
|
||||
return shader_bsdf_glossy(kg, sd);
|
||||
case SHADER_EVAL_TRANSMISSION:
|
||||
return shader_bsdf_transmission(kg, sd);
|
||||
# ifdef __SUBSURFACE__
|
||||
case SHADER_EVAL_SUBSURFACE:
|
||||
return shader_bsdf_subsurface(kg, sd);
|
||||
# endif
|
||||
default:
|
||||
kernel_assert(!"Unknown bake type passed to BSDF evaluate");
|
||||
return make_float3(0.0f, 0.0f, 0.0f);
|
||||
@ -385,11 +381,6 @@ ccl_device void kernel_bake_evaluate(KernelGlobals *kg,
|
||||
if ((pass_filter & BAKE_FILTER_TRANSMISSION_INDIRECT) == BAKE_FILTER_TRANSMISSION_INDIRECT)
|
||||
out += L.indirect_transmission;
|
||||
|
||||
if ((pass_filter & BAKE_FILTER_SUBSURFACE_DIRECT) == BAKE_FILTER_SUBSURFACE_DIRECT)
|
||||
out += L.direct_subsurface;
|
||||
if ((pass_filter & BAKE_FILTER_SUBSURFACE_INDIRECT) == BAKE_FILTER_SUBSURFACE_INDIRECT)
|
||||
out += L.indirect_subsurface;
|
||||
|
||||
if ((pass_filter & BAKE_FILTER_EMISSION) != 0)
|
||||
out += L.emission;
|
||||
|
||||
@ -414,13 +405,6 @@ ccl_device void kernel_bake_evaluate(KernelGlobals *kg,
|
||||
kg, &sd, &state, L.direct_transmission, L.indirect_transmission, type, pass_filter);
|
||||
break;
|
||||
}
|
||||
case SHADER_EVAL_SUBSURFACE: {
|
||||
# ifdef __SUBSURFACE__
|
||||
out = kernel_bake_evaluate_direct_indirect(
|
||||
kg, &sd, &state, L.direct_subsurface, L.indirect_subsurface, type, pass_filter);
|
||||
# endif
|
||||
break;
|
||||
}
|
||||
# endif
|
||||
|
||||
/* extra */
|
||||
|
@ -145,16 +145,14 @@ ccl_device_noinline_cpu bool direct_emission(KernelGlobals *kg,
|
||||
#ifdef __PASSES__
|
||||
/* use visibility flag to skip lights */
|
||||
if (ls->shader & SHADER_EXCLUDE_ANY) {
|
||||
if (ls->shader & SHADER_EXCLUDE_DIFFUSE) {
|
||||
if (ls->shader & SHADER_EXCLUDE_DIFFUSE)
|
||||
eval->diffuse = make_float3(0.0f, 0.0f, 0.0f);
|
||||
eval->subsurface = make_float3(0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
if (ls->shader & SHADER_EXCLUDE_GLOSSY)
|
||||
eval->glossy = make_float3(0.0f, 0.0f, 0.0f);
|
||||
if (ls->shader & SHADER_EXCLUDE_TRANSMIT)
|
||||
eval->transmission = make_float3(0.0f, 0.0f, 0.0f);
|
||||
if (ls->shader & SHADER_EXCLUDE_SCATTER)
|
||||
eval->scatter = make_float3(0.0f, 0.0f, 0.0f);
|
||||
eval->volume = make_float3(0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -249,8 +249,6 @@ ccl_device_inline void kernel_write_data_passes(KernelGlobals *kg,
|
||||
L->color_glossy += shader_bsdf_glossy(kg, sd) * throughput;
|
||||
if (light_flag & PASSMASK_COMPONENT(TRANSMISSION))
|
||||
L->color_transmission += shader_bsdf_transmission(kg, sd) * throughput;
|
||||
if (light_flag & PASSMASK_COMPONENT(SUBSURFACE))
|
||||
L->color_subsurface += shader_bsdf_subsurface(kg, sd) * throughput;
|
||||
|
||||
if (light_flag & PASSMASK(MIST)) {
|
||||
/* bring depth into 0..1 range */
|
||||
@ -296,11 +294,8 @@ ccl_device_inline void kernel_write_light_passes(KernelGlobals *kg,
|
||||
if (light_flag & PASSMASK(TRANSMISSION_INDIRECT))
|
||||
kernel_write_pass_float3(buffer + kernel_data.film.pass_transmission_indirect,
|
||||
L->indirect_transmission);
|
||||
if (light_flag & PASSMASK(SUBSURFACE_INDIRECT))
|
||||
kernel_write_pass_float3(buffer + kernel_data.film.pass_subsurface_indirect,
|
||||
L->indirect_subsurface);
|
||||
if (light_flag & PASSMASK(VOLUME_INDIRECT))
|
||||
kernel_write_pass_float3(buffer + kernel_data.film.pass_volume_indirect, L->indirect_scatter);
|
||||
kernel_write_pass_float3(buffer + kernel_data.film.pass_volume_indirect, L->indirect_volume);
|
||||
if (light_flag & PASSMASK(DIFFUSE_DIRECT))
|
||||
kernel_write_pass_float3(buffer + kernel_data.film.pass_diffuse_direct, L->direct_diffuse);
|
||||
if (light_flag & PASSMASK(GLOSSY_DIRECT))
|
||||
@ -308,11 +303,8 @@ ccl_device_inline void kernel_write_light_passes(KernelGlobals *kg,
|
||||
if (light_flag & PASSMASK(TRANSMISSION_DIRECT))
|
||||
kernel_write_pass_float3(buffer + kernel_data.film.pass_transmission_direct,
|
||||
L->direct_transmission);
|
||||
if (light_flag & PASSMASK(SUBSURFACE_DIRECT))
|
||||
kernel_write_pass_float3(buffer + kernel_data.film.pass_subsurface_direct,
|
||||
L->direct_subsurface);
|
||||
if (light_flag & PASSMASK(VOLUME_DIRECT))
|
||||
kernel_write_pass_float3(buffer + kernel_data.film.pass_volume_direct, L->direct_scatter);
|
||||
kernel_write_pass_float3(buffer + kernel_data.film.pass_volume_direct, L->direct_volume);
|
||||
|
||||
if (light_flag & PASSMASK(EMISSION))
|
||||
kernel_write_pass_float3(buffer + kernel_data.film.pass_emission, L->emission);
|
||||
@ -328,8 +320,6 @@ ccl_device_inline void kernel_write_light_passes(KernelGlobals *kg,
|
||||
if (light_flag & PASSMASK(TRANSMISSION_COLOR))
|
||||
kernel_write_pass_float3(buffer + kernel_data.film.pass_transmission_color,
|
||||
L->color_transmission);
|
||||
if (light_flag & PASSMASK(SUBSURFACE_COLOR))
|
||||
kernel_write_pass_float3(buffer + kernel_data.film.pass_subsurface_color, L->color_subsurface);
|
||||
if (light_flag & PASSMASK(SHADOW)) {
|
||||
float4 shadow = L->shadow;
|
||||
shadow.w = kernel_data.film.pass_shadow_scale;
|
||||
|
@ -901,7 +901,8 @@ ccl_device float3 shader_bsdf_diffuse(KernelGlobals *kg, ShaderData *sd)
|
||||
for (int i = 0; i < sd->num_closure; i++) {
|
||||
ShaderClosure *sc = &sd->closure[i];
|
||||
|
||||
if (CLOSURE_IS_BSDF_DIFFUSE(sc->type))
|
||||
if (CLOSURE_IS_BSDF_DIFFUSE(sc->type) || CLOSURE_IS_BSSRDF(sc->type) ||
|
||||
CLOSURE_IS_BSDF_BSSRDF(sc->type))
|
||||
eval += sc->weight;
|
||||
}
|
||||
|
||||
@ -936,20 +937,6 @@ ccl_device float3 shader_bsdf_transmission(KernelGlobals *kg, ShaderData *sd)
|
||||
return eval;
|
||||
}
|
||||
|
||||
ccl_device float3 shader_bsdf_subsurface(KernelGlobals *kg, ShaderData *sd)
|
||||
{
|
||||
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) || CLOSURE_IS_BSDF_BSSRDF(sc->type))
|
||||
eval += sc->weight;
|
||||
}
|
||||
|
||||
return eval;
|
||||
}
|
||||
|
||||
ccl_device float3 shader_bsdf_average_normal(KernelGlobals *kg, ShaderData *sd)
|
||||
{
|
||||
float3 N = make_float3(0.0f, 0.0f, 0.0f);
|
||||
|
@ -220,7 +220,6 @@ typedef enum ShaderEvalType {
|
||||
SHADER_EVAL_DIFFUSE_COLOR,
|
||||
SHADER_EVAL_GLOSSY_COLOR,
|
||||
SHADER_EVAL_TRANSMISSION_COLOR,
|
||||
SHADER_EVAL_SUBSURFACE_COLOR,
|
||||
SHADER_EVAL_EMISSION,
|
||||
SHADER_EVAL_AOV_COLOR,
|
||||
SHADER_EVAL_AOV_VALUE,
|
||||
@ -232,7 +231,6 @@ typedef enum ShaderEvalType {
|
||||
SHADER_EVAL_DIFFUSE,
|
||||
SHADER_EVAL_GLOSSY,
|
||||
SHADER_EVAL_TRANSMISSION,
|
||||
SHADER_EVAL_SUBSURFACE,
|
||||
|
||||
/* extra */
|
||||
SHADER_EVAL_ENVIRONMENT,
|
||||
@ -392,9 +390,6 @@ typedef enum PassType {
|
||||
PASS_TRANSMISSION_DIRECT,
|
||||
PASS_TRANSMISSION_INDIRECT,
|
||||
PASS_TRANSMISSION_COLOR,
|
||||
PASS_SUBSURFACE_DIRECT,
|
||||
PASS_SUBSURFACE_INDIRECT,
|
||||
PASS_SUBSURFACE_COLOR,
|
||||
PASS_VOLUME_DIRECT,
|
||||
PASS_VOLUME_INDIRECT,
|
||||
/* No Scatter color since it's tricky to define what it would even mean. */
|
||||
@ -445,23 +440,20 @@ typedef enum eBakePassFilter {
|
||||
BAKE_FILTER_DIFFUSE = (1 << 3),
|
||||
BAKE_FILTER_GLOSSY = (1 << 4),
|
||||
BAKE_FILTER_TRANSMISSION = (1 << 5),
|
||||
BAKE_FILTER_SUBSURFACE = (1 << 6),
|
||||
BAKE_FILTER_EMISSION = (1 << 7),
|
||||
BAKE_FILTER_AO = (1 << 8),
|
||||
BAKE_FILTER_EMISSION = (1 << 6),
|
||||
BAKE_FILTER_AO = (1 << 7),
|
||||
} eBakePassFilter;
|
||||
|
||||
typedef enum BakePassFilterCombos {
|
||||
BAKE_FILTER_COMBINED = (BAKE_FILTER_DIRECT | BAKE_FILTER_INDIRECT | BAKE_FILTER_DIFFUSE |
|
||||
BAKE_FILTER_GLOSSY | BAKE_FILTER_TRANSMISSION | BAKE_FILTER_SUBSURFACE |
|
||||
BAKE_FILTER_EMISSION | BAKE_FILTER_AO),
|
||||
BAKE_FILTER_GLOSSY | BAKE_FILTER_TRANSMISSION | BAKE_FILTER_EMISSION |
|
||||
BAKE_FILTER_AO),
|
||||
BAKE_FILTER_DIFFUSE_DIRECT = (BAKE_FILTER_DIRECT | BAKE_FILTER_DIFFUSE),
|
||||
BAKE_FILTER_GLOSSY_DIRECT = (BAKE_FILTER_DIRECT | BAKE_FILTER_GLOSSY),
|
||||
BAKE_FILTER_TRANSMISSION_DIRECT = (BAKE_FILTER_DIRECT | BAKE_FILTER_TRANSMISSION),
|
||||
BAKE_FILTER_SUBSURFACE_DIRECT = (BAKE_FILTER_DIRECT | BAKE_FILTER_SUBSURFACE),
|
||||
BAKE_FILTER_DIFFUSE_INDIRECT = (BAKE_FILTER_INDIRECT | BAKE_FILTER_DIFFUSE),
|
||||
BAKE_FILTER_GLOSSY_INDIRECT = (BAKE_FILTER_INDIRECT | BAKE_FILTER_GLOSSY),
|
||||
BAKE_FILTER_TRANSMISSION_INDIRECT = (BAKE_FILTER_INDIRECT | BAKE_FILTER_TRANSMISSION),
|
||||
BAKE_FILTER_SUBSURFACE_INDIRECT = (BAKE_FILTER_INDIRECT | BAKE_FILTER_SUBSURFACE),
|
||||
} BakePassFilterCombos;
|
||||
|
||||
typedef enum DenoiseFlag {
|
||||
@ -471,9 +463,7 @@ typedef enum DenoiseFlag {
|
||||
DENOISING_CLEAN_GLOSSY_IND = (1 << 3),
|
||||
DENOISING_CLEAN_TRANSMISSION_DIR = (1 << 4),
|
||||
DENOISING_CLEAN_TRANSMISSION_IND = (1 << 5),
|
||||
DENOISING_CLEAN_SUBSURFACE_DIR = (1 << 6),
|
||||
DENOISING_CLEAN_SUBSURFACE_IND = (1 << 7),
|
||||
DENOISING_CLEAN_ALL_PASSES = (1 << 8) - 1,
|
||||
DENOISING_CLEAN_ALL_PASSES = (1 << 6) - 1,
|
||||
} DenoiseFlag;
|
||||
|
||||
#ifdef __KERNEL_DEBUG__
|
||||
@ -493,8 +483,7 @@ typedef ccl_addr_space struct PathRadianceState {
|
||||
float3 diffuse;
|
||||
float3 glossy;
|
||||
float3 transmission;
|
||||
float3 subsurface;
|
||||
float3 scatter;
|
||||
float3 volume;
|
||||
|
||||
float3 direct;
|
||||
#endif
|
||||
@ -517,19 +506,16 @@ typedef ccl_addr_space struct PathRadiance {
|
||||
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 direct_scatter;
|
||||
float3 direct_volume;
|
||||
|
||||
float3 indirect_diffuse;
|
||||
float3 indirect_glossy;
|
||||
float3 indirect_transmission;
|
||||
float3 indirect_subsurface;
|
||||
float3 indirect_scatter;
|
||||
float3 indirect_volume;
|
||||
|
||||
float4 shadow;
|
||||
float mist;
|
||||
@ -583,8 +569,7 @@ typedef struct BsdfEval {
|
||||
float3 glossy;
|
||||
float3 transmission;
|
||||
float3 transparent;
|
||||
float3 subsurface;
|
||||
float3 scatter;
|
||||
float3 volume;
|
||||
#endif
|
||||
#ifdef __SHADOW_TRICKS__
|
||||
float3 sum_no_mis;
|
||||
@ -1214,18 +1199,15 @@ typedef struct KernelFilm {
|
||||
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_volume_indirect;
|
||||
|
||||
int pass_diffuse_direct;
|
||||
int pass_glossy_direct;
|
||||
int pass_transmission_direct;
|
||||
int pass_subsurface_direct;
|
||||
int pass_volume_direct;
|
||||
|
||||
int pass_emission;
|
||||
@ -1252,7 +1234,6 @@ typedef struct KernelFilm {
|
||||
int pass_aov_color;
|
||||
int pass_aov_value;
|
||||
int pad1;
|
||||
int pad2;
|
||||
|
||||
/* XYZ to rendering color space transform. float4 instead of float3 to
|
||||
* ensure consistent padding/alignment across devices. */
|
||||
|
@ -527,6 +527,7 @@ typedef enum ClosureType {
|
||||
CLOSURE_BSDF_PRINCIPLED_DIFFUSE_ID,
|
||||
CLOSURE_BSDF_PRINCIPLED_SHEEN_ID,
|
||||
CLOSURE_BSDF_DIFFUSE_TOON_ID,
|
||||
CLOSURE_BSDF_TRANSLUCENT_ID,
|
||||
|
||||
/* Glossy */
|
||||
CLOSURE_BSDF_REFLECTION_ID,
|
||||
@ -549,7 +550,6 @@ typedef enum ClosureType {
|
||||
CLOSURE_BSDF_HAIR_REFLECTION_ID,
|
||||
|
||||
/* Transmission */
|
||||
CLOSURE_BSDF_TRANSLUCENT_ID,
|
||||
CLOSURE_BSDF_REFRACTION_ID,
|
||||
CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID,
|
||||
CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID,
|
||||
@ -590,12 +590,12 @@ typedef enum ClosureType {
|
||||
/* watch this, being lazy with memory usage */
|
||||
#define CLOSURE_IS_BSDF(type) (type <= CLOSURE_BSDF_TRANSPARENT_ID)
|
||||
#define CLOSURE_IS_BSDF_DIFFUSE(type) \
|
||||
(type >= CLOSURE_BSDF_DIFFUSE_ID && type <= CLOSURE_BSDF_DIFFUSE_TOON_ID)
|
||||
(type >= CLOSURE_BSDF_DIFFUSE_ID && type <= CLOSURE_BSDF_TRANSLUCENT_ID)
|
||||
#define CLOSURE_IS_BSDF_GLOSSY(type) \
|
||||
((type >= CLOSURE_BSDF_REFLECTION_ID && type <= CLOSURE_BSDF_HAIR_REFLECTION_ID) || \
|
||||
(type == CLOSURE_BSDF_HAIR_PRINCIPLED_ID))
|
||||
#define CLOSURE_IS_BSDF_TRANSMISSION(type) \
|
||||
(type >= CLOSURE_BSDF_TRANSLUCENT_ID && type <= CLOSURE_BSDF_HAIR_TRANSMISSION_ID)
|
||||
(type >= CLOSURE_BSDF_REFRACTION_ID && type <= CLOSURE_BSDF_HAIR_TRANSMISSION_ID)
|
||||
#define CLOSURE_IS_BSDF_BSSRDF(type) \
|
||||
(type == CLOSURE_BSDF_BSSRDF_ID || type == CLOSURE_BSDF_BSSRDF_PRINCIPLED_ID)
|
||||
#define CLOSURE_IS_BSDF_SINGULAR(type) \
|
||||
|
@ -285,8 +285,6 @@ int BakeManager::shader_type_to_pass_filter(ShaderEvalType type, const int pass_
|
||||
return BAKE_FILTER_GLOSSY | component_flags;
|
||||
case SHADER_EVAL_TRANSMISSION:
|
||||
return BAKE_FILTER_TRANSMISSION | component_flags;
|
||||
case SHADER_EVAL_SUBSURFACE:
|
||||
return BAKE_FILTER_SUBSURFACE | component_flags;
|
||||
case SHADER_EVAL_COMBINED:
|
||||
return pass_filter;
|
||||
default:
|
||||
|
@ -155,7 +155,6 @@ void Pass::add(PassType type, vector<Pass> &passes, const char *name)
|
||||
case PASS_DIFFUSE_COLOR:
|
||||
case PASS_GLOSSY_COLOR:
|
||||
case PASS_TRANSMISSION_COLOR:
|
||||
case PASS_SUBSURFACE_COLOR:
|
||||
pass.components = 4;
|
||||
break;
|
||||
case PASS_DIFFUSE_DIRECT:
|
||||
@ -176,12 +175,6 @@ void Pass::add(PassType type, vector<Pass> &passes, const char *name)
|
||||
pass.exposure = true;
|
||||
pass.divide_type = PASS_TRANSMISSION_COLOR;
|
||||
break;
|
||||
case PASS_SUBSURFACE_DIRECT:
|
||||
case PASS_SUBSURFACE_INDIRECT:
|
||||
pass.components = 4;
|
||||
pass.exposure = true;
|
||||
pass.divide_type = PASS_SUBSURFACE_COLOR;
|
||||
break;
|
||||
case PASS_VOLUME_DIRECT:
|
||||
case PASS_VOLUME_INDIRECT:
|
||||
pass.components = 4;
|
||||
@ -442,9 +435,6 @@ void Film::device_update(Device *device, DeviceScene *dscene, Scene *scene)
|
||||
case PASS_TRANSMISSION_COLOR:
|
||||
kfilm->pass_transmission_color = kfilm->pass_stride;
|
||||
break;
|
||||
case PASS_SUBSURFACE_COLOR:
|
||||
kfilm->pass_subsurface_color = kfilm->pass_stride;
|
||||
break;
|
||||
case PASS_DIFFUSE_INDIRECT:
|
||||
kfilm->pass_diffuse_indirect = kfilm->pass_stride;
|
||||
break;
|
||||
@ -454,9 +444,6 @@ void Film::device_update(Device *device, DeviceScene *dscene, Scene *scene)
|
||||
case PASS_TRANSMISSION_INDIRECT:
|
||||
kfilm->pass_transmission_indirect = kfilm->pass_stride;
|
||||
break;
|
||||
case PASS_SUBSURFACE_INDIRECT:
|
||||
kfilm->pass_subsurface_indirect = kfilm->pass_stride;
|
||||
break;
|
||||
case PASS_VOLUME_INDIRECT:
|
||||
kfilm->pass_volume_indirect = kfilm->pass_stride;
|
||||
break;
|
||||
@ -469,9 +456,6 @@ void Film::device_update(Device *device, DeviceScene *dscene, Scene *scene)
|
||||
case PASS_TRANSMISSION_DIRECT:
|
||||
kfilm->pass_transmission_direct = kfilm->pass_stride;
|
||||
break;
|
||||
case PASS_SUBSURFACE_DIRECT:
|
||||
kfilm->pass_subsurface_direct = kfilm->pass_stride;
|
||||
break;
|
||||
case PASS_VOLUME_DIRECT:
|
||||
kfilm->pass_volume_direct = kfilm->pass_stride;
|
||||
break;
|
||||
@ -521,7 +505,7 @@ void Film::device_update(Device *device, DeviceScene *dscene, Scene *scene)
|
||||
kfilm->use_display_exposure = pass.exposure && (kfilm->exposure != 1.0f);
|
||||
}
|
||||
else if (pass.type == PASS_DIFFUSE_COLOR || pass.type == PASS_TRANSMISSION_COLOR ||
|
||||
pass.type == PASS_GLOSSY_COLOR || pass.type == PASS_SUBSURFACE_COLOR) {
|
||||
pass.type == PASS_GLOSSY_COLOR) {
|
||||
kfilm->display_divide_pass_stride = kfilm->pass_stride;
|
||||
}
|
||||
|
||||
|
@ -86,7 +86,6 @@ const EnumPropertyItem rna_enum_bake_pass_type_items[] = {
|
||||
{SCE_PASS_DIFFUSE_COLOR, "DIFFUSE", 0, "Diffuse", ""},
|
||||
{SCE_PASS_GLOSSY_COLOR, "GLOSSY", 0, "Glossy", ""},
|
||||
{SCE_PASS_TRANSM_COLOR, "TRANSMISSION", 0, "Transmission", ""},
|
||||
{SCE_PASS_SUBSURFACE_COLOR, "SUBSURFACE", 0, "Subsurface", ""},
|
||||
{0, NULL, 0, NULL, NULL},
|
||||
};
|
||||
|
||||
@ -533,7 +532,7 @@ static void rna_def_render_engine(BlenderRNA *brna)
|
||||
0,
|
||||
INT_MAX,
|
||||
"Pass Filter",
|
||||
"Filter to combined, diffuse, glossy, transmission and subsurface passes",
|
||||
"Filter to combined, diffuse, glossy and transmission passes",
|
||||
0,
|
||||
INT_MAX);
|
||||
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
|
||||
|
@ -526,7 +526,6 @@ const EnumPropertyItem rna_enum_bake_pass_filter_type_items[] = {
|
||||
{R_BAKE_PASS_FILTER_DIFFUSE, "DIFFUSE", 0, "Diffuse", ""},
|
||||
{R_BAKE_PASS_FILTER_GLOSSY, "GLOSSY", 0, "Glossy", ""},
|
||||
{R_BAKE_PASS_FILTER_TRANSM, "TRANSMISSION", 0, "Transmission", ""},
|
||||
{R_BAKE_PASS_FILTER_SUBSURFACE, "SUBSURFACE", 0, "Subsurface", ""},
|
||||
{0, NULL, 0, NULL, NULL},
|
||||
};
|
||||
|
||||
@ -4870,11 +4869,6 @@ static void rna_def_bake_data(BlenderRNA *brna)
|
||||
RNA_def_property_ui_text(prop, "Transmission", "Add transmission contribution");
|
||||
RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop = RNA_def_property(srna, "use_pass_subsurface", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "pass_filter", R_BAKE_PASS_FILTER_SUBSURFACE);
|
||||
RNA_def_property_ui_text(prop, "Subsurface", "Add subsurface contribution");
|
||||
RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop = RNA_def_property(srna, "pass_filter", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_sdna(prop, NULL, "pass_filter");
|
||||
RNA_def_property_enum_items(prop, rna_enum_bake_pass_filter_type_items);
|
||||
|
Loading…
Reference in New Issue
Block a user