[Bf-blender-cvs] [212906daa59] temp_cryptomatte: Merge branch 'master' of git.blender.org:blender into temp-cryptomatte
Stefan Werner
noreply at git.blender.org
Fri Nov 3 21:09:53 CET 2017
Commit: 212906daa59286d43353689b5a9f8fabf079c999
Author: Stefan Werner
Date: Mon May 29 15:29:55 2017 +0200
Branches: temp_cryptomatte
https://developer.blender.org/rB212906daa59286d43353689b5a9f8fabf079c999
Merge branch 'master' of git.blender.org:blender into temp-cryptomatte
# Conflicts:
# intern/cycles/blender/addon/properties.py
# intern/cycles/blender/blender_session.cpp
# intern/cycles/blender/blender_sync.cpp
# intern/cycles/kernel/kernel_passes.h
# intern/cycles/kernel/kernel_path.h
# intern/cycles/kernel/kernel_path_branched.h
# intern/cycles/kernel/kernel_types.h
# intern/cycles/render/buffers.cpp
# intern/cycles/render/buffers.h
# intern/cycles/render/film.cpp
# intern/cycles/render/film.h
# source/blender/editors/space_node/drawnode.c
===================================================================
===================================================================
diff --cc intern/cycles/blender/addon/properties.py
index a637fac6ff8,8bb25aba13c..afd773d18f9
--- a/intern/cycles/blender/addon/properties.py
+++ b/intern/cycles/blender/addon/properties.py
@@@ -1171,12 -1166,12 +1171,18 @@@ class CyclesCurveRenderSettings(bpy.typ
def unregister(cls):
del bpy.types.Scene.cycles_curves
+class CyclesAOVSettings(bpy.types.PropertyGroup):
+ @classmethod
+ def register(cls):
+ cls.name = StringProperty(name="Name")
+ cls.type = EnumProperty(name="Type", items=enum_aov_types, default='COLOR')
+
+ def update_render_passes(self, context):
+ scene = context.scene
+ rd = scene.render
+ rl = rd.layers.active
+ rl.update_render_passes()
+
class CyclesRenderLayerSettings(bpy.types.PropertyGroup):
@classmethod
def register(cls):
@@@ -1204,24 -1202,84 +1213,103 @@@
name="Debug Ray Bounces",
description="Store Debug Ray Bounces pass",
default=False,
+ update=update_render_passes,
+ )
+
+ cls.use_denoising = BoolProperty(
+ name="Use Denoising",
+ description="Denoise the rendered image",
+ default=False,
+ )
+ cls.denoising_diffuse_direct = BoolProperty(
+ name="Diffuse Direct",
+ description="Denoise the direct diffuse lighting",
+ default=True,
+ )
+ cls.denoising_diffuse_indirect = BoolProperty(
+ name="Diffuse Indirect",
+ description="Denoise the indirect diffuse lighting",
+ default=True,
+ )
+ cls.denoising_glossy_direct = BoolProperty(
+ name="Glossy Direct",
+ description="Denoise the direct glossy lighting",
+ default=True,
+ )
+ cls.denoising_glossy_indirect = BoolProperty(
+ name="Glossy Indirect",
+ description="Denoise the indirect glossy lighting",
+ default=True,
+ )
+ cls.denoising_transmission_direct = BoolProperty(
+ name="Transmission Direct",
+ description="Denoise the direct transmission lighting",
+ default=True,
)
+ cls.denoising_transmission_indirect = BoolProperty(
+ name="Transmission Indirect",
+ description="Denoise the indirect transmission lighting",
+ default=True,
+ )
+ cls.denoising_subsurface_direct = BoolProperty(
+ name="Subsurface Direct",
+ description="Denoise the direct subsurface lighting",
+ default=True,
+ )
+ cls.denoising_subsurface_indirect = BoolProperty(
+ name="Subsurface Indirect",
+ description="Denoise the indirect subsurface lighting",
+ default=True,
+ )
+ cls.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)",
+ min=0.0, max=1.0,
+ default=0.5,
+ )
+ cls.denoising_feature_strength = FloatProperty(
+ name="Denoising Feature Strength",
+ description="Controls removal of noisy image feature passes (lower values preserve more detail, but aren't as smooth)",
+ min=0.0, max=1.0,
+ default=0.5,
+ )
+ cls.denoising_radius = IntProperty(
+ name="Denoising Radius",
+ description="Size of the image area that's used to denoise a pixel (higher values are smoother, but might lose detail and are slower)",
+ min=1, max=25,
+ default=8,
+ )
+ cls.denoising_relative_pca = BoolProperty(
+ name="Relative filter",
+ description="When removing pixels that don't carry information, use a relative threshold instead of an absolute one (can help to reduce artifacts, but might cause detail loss around edges)",
+ default=False,
+ )
+ cls.denoising_store_passes = BoolProperty(
+ name="Store denoising passes",
+ description="Store the denoising feature passes and the noisy image",
+ default=False,
+ update=update_render_passes,
+ )
-
+ cls.aovs = bpy.props.CollectionProperty(type=CyclesAOVSettings)
+ cls.active_aov = IntProperty(default=0)
+ cls.use_pass_crypto_object = BoolProperty(
+ name="CryptoMatte Object",
+ description="CryptoMatte Object pass",
+ default=False,
++ update=update_render_passes,
+ )
+ cls.use_pass_crypto_material = BoolProperty(
+ name="CryptoMatte Material",
+ description="CryptoMatte Material pass",
+ default=False,
++ update=update_render_passes,
+ )
+ cls.pass_crypto_depth = IntProperty(
+ name="CryptoMatte Depth",
+ description="CryptoMatte Depth",
+ default=4, min=2, max=16, step=2,
++ update=update_render_passes,
+ )
@classmethod
def unregister(cls):
del bpy.types.SceneRenderLayer.cycles
diff --cc intern/cycles/blender/blender_session.cpp
index 3a847022350,c6a59577507..9d142578fe8
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@@ -397,9 -398,42 +398,19 @@@ void BlenderSession::render(
BL::RenderLayer b_rlay = *b_single_rlay;
- /* add passes */
- array<Pass> passes;
- if(session_params.device.advanced_shading) {
- passes = sync->sync_render_passes(b_rlay, *b_layer_iter);
- }
- else {
- Pass::add(PASS_COMBINED, passes);
- }
+ sync->sync_film(b_rlay, *b_layer_iter, session_params.device.advanced_shading);
- buffer_params.passes = passes;
+ buffer_params.passes = scene->film->passes;
+
+ PointerRNA crl = RNA_pointer_get(&b_layer_iter->ptr, "cycles");
+ bool use_denoising = !session_params.progressive_refine && get_boolean(crl, "use_denoising");
- buffer_params.denoising_data_pass = use_denoising;
+ session->tile_manager.schedule_denoising = use_denoising;
+ session->params.use_denoising = use_denoising;
- scene->film->denoising_data_pass = buffer_params.denoising_data_pass;
- scene->film->denoising_flags = 0;
- if(!get_boolean(crl, "denoising_diffuse_direct")) scene->film->denoising_flags |= DENOISING_CLEAN_DIFFUSE_DIR;
- if(!get_boolean(crl, "denoising_diffuse_indirect")) scene->film->denoising_flags |= DENOISING_CLEAN_DIFFUSE_IND;
- if(!get_boolean(crl, "denoising_glossy_direct")) scene->film->denoising_flags |= DENOISING_CLEAN_GLOSSY_DIR;
- if(!get_boolean(crl, "denoising_glossy_indirect")) scene->film->denoising_flags |= DENOISING_CLEAN_GLOSSY_IND;
- if(!get_boolean(crl, "denoising_transmission_direct")) scene->film->denoising_flags |= DENOISING_CLEAN_TRANSMISSION_DIR;
- if(!get_boolean(crl, "denoising_transmission_indirect")) scene->film->denoising_flags |= DENOISING_CLEAN_TRANSMISSION_IND;
- if(!get_boolean(crl, "denoising_subsurface_direct")) scene->film->denoising_flags |= DENOISING_CLEAN_SUBSURFACE_DIR;
- if(!get_boolean(crl, "denoising_subsurface_indirect")) scene->film->denoising_flags |= DENOISING_CLEAN_SUBSURFACE_IND;
- scene->film->denoising_clean_pass = (scene->film->denoising_flags & DENOISING_CLEAN_ALL_PASSES);
- buffer_params.denoising_clean_pass = scene->film->denoising_clean_pass;
+ session->params.denoising_radius = get_int(crl, "denoising_radius");
+ session->params.denoising_strength = get_float(crl, "denoising_strength");
+ session->params.denoising_feature_strength = get_float(crl, "denoising_feature_strength");
+ session->params.denoising_relative_pca = get_boolean(crl, "denoising_relative_pca");
+
- scene->film->pass_alpha_threshold = b_layer_iter->pass_alpha_threshold();
- scene->film->tag_passes_update(scene, passes);
- scene->film->tag_update(scene);
scene->integrator->tag_update(scene);
int view_index = 0;
@@@ -542,12 -574,9 +551,9 @@@ void BlenderSession::bake(BL::Object& b
/* ensure kernels are loaded before we do any scene updates */
session->load_kernels();
- if(session->progress.get_cancel())
- return;
-
if(shader_type == SHADER_EVAL_UV) {
/* force UV to be available */
- Pass::add(PASS_UV, scene->film->passes);
+ scene->film->passes.add(PASS_UV);
}
int bake_pass_filter = bake_pass_filter_get(pass_filter);
@@@ -656,8 -696,11 +673,13 @@@ void BlenderSession::do_write_update_re
/* copy pixels */
read = buffers->get_pass_rect(pass_type, exposure, sample, components, &pixels[0]);
}
- else if (b_pass.name().substr(0, 4) == "AOV ") {
- else {
++ else if(b_pass.name().substr(0, 4) == "AOV ") {
+ read = buffers->get_aov_rect(ustring(b_pass.name().substr(4)), exposure, sample, components, &pixels[0]);
++ } else {
+ int denoising_offset = BlenderSync::get_denoising_pass(b_pass);
+ if(denoising_offset >= 0) {
+ read = buffers->get_denoising_pass_rect(denoising_offset, exposure, sample, components, &pixels[0]);
+ }
}
if(!read) {
diff --cc intern/cycles/blender/blender_sync.cpp
index 5fcdab8e5fc,41723599874..47c87a3b76f
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@@ -525,86 -528,82 +528,139 @@@ PassType BlenderSync::get_pass_type(BL:
return PASS_NONE;
}
+ int BlenderSync::get_denoising_pass(BL::RenderPass& b_pass)
+ {
+ string name = b_pass.name();
+ if(name.substr(0, 10) != "Denoising ") {
+ return -1;
+ }
+ name = name.substr(10);
+
+ #define MAP_PASS(passname, offset) if(name == passname) ret
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list