Cycles: Direct multi light sampling in the Branched Path Integrator is optional now.

Disabling this can improve performance, when we need a lot of AA Samples anyway, to clear up the render.

Simple example .blend: http://www.pasteall.org/blend/27582

Differential Revision: https://developer.blender.org/D392
This commit is contained in:
Thomas Dinges 2014-03-15 17:36:44 +01:00
parent cb4c49ad97
commit 211f08d89b
Notes: blender-bot 2023-02-14 11:01:33 +01:00
Referenced by issue #40325, UILists do not save their height anymore
Referenced by issue #39227, Multi-Number Button Editing doesn't work on Y value of the objects Dimensions on the Transform Properties Panel
Referenced by issue #39229, Limit Scale bone constraint doesn't properly account for negative values.
Referenced by issue #39209, Nodes in 2.70-RC2 and source build 211f08d extremely unstable (segfault crash)
Referenced by issue #39089, Double render times with Cycles 2.69 vs 2.70RC
7 changed files with 19 additions and 6 deletions

View File

@ -252,10 +252,17 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
items=enum_use_layer_samples,
default='USE',
)
cls.sample_all_lights_direct = BoolProperty(
name="Sample All Direct Lights",
description="Sample all lights (for direct samples), rather than randomly picking one",
default=True,
)
cls.sample_all_lights_indirect = BoolProperty(
name="Sample All Lights",
name="Sample All Indirect Lights",
description="Sample all lights (for indirect samples), rather than randomly picking one",
default=False,
default=True,
)
cls.no_caustics = BoolProperty(

View File

@ -134,6 +134,7 @@ class CyclesRender_PT_sampling(CyclesButtonsPanel, Panel):
sub.prop(cscene, "aa_samples", text="Render")
sub.prop(cscene, "preview_aa_samples", text="Preview")
sub.separator()
sub.prop(cscene, "sample_all_lights_direct")
sub.prop(cscene, "sample_all_lights_indirect")
col = split.column()

View File

@ -197,7 +197,8 @@ void BlenderSync::sync_integrator()
#endif
integrator->method = (Integrator::Method)get_enum(cscene, "progressive");
integrator->sample_all_lights_direct = get_boolean(cscene, "sample_all_lights_direct");
integrator->sample_all_lights_indirect = get_boolean(cscene, "sample_all_lights_indirect");
int diffuse_samples = get_int(cscene, "diffuse_samples");

View File

@ -957,7 +957,8 @@ ccl_device_noinline void kernel_branched_path_integrate_lighting(KernelGlobals *
PathState *state, PathRadiance *L, ccl_global float *buffer)
{
#ifdef __EMISSION__
kernel_branched_path_integrate_direct_lighting(kg, rng, sd, state, throughput, num_samples_adjust, L, true);
bool all = kernel_data.integrator.sample_all_lights_direct;
kernel_branched_path_integrate_direct_lighting(kg, rng, sd, state, throughput, num_samples_adjust, L, all);
#endif
for(int i = 0; i< sd->num_closure; i++) {

View File

@ -836,8 +836,9 @@ typedef struct KernelIntegrator {
int ao_samples;
int mesh_light_samples;
int subsurface_samples;
int sample_all_lights_direct;
int sample_all_lights_indirect;
/* mis */
int use_lamp_mis;
@ -850,7 +851,6 @@ typedef struct KernelIntegrator {
int volume_max_steps;
float volume_step_size;
int volume_samples;
int pad1;
} KernelIntegrator;
typedef struct KernelBVH {

View File

@ -130,6 +130,7 @@ void Integrator::device_update(Device *device, DeviceScene *dscene, Scene *scene
kintegrator->mesh_light_samples = mesh_light_samples;
kintegrator->subsurface_samples = subsurface_samples;
kintegrator->volume_samples = volume_samples;
kintegrator->sample_all_lights_direct = sample_all_lights_direct;
kintegrator->sample_all_lights_indirect = sample_all_lights_indirect;
kintegrator->sampling_pattern = sampling_pattern;
@ -199,6 +200,7 @@ bool Integrator::modified(const Integrator& integrator)
volume_samples == integrator.volume_samples &&
motion_blur == integrator.motion_blur &&
sampling_pattern == integrator.sampling_pattern &&
sample_all_lights_direct == integrator.sample_all_lights_direct &&
sample_all_lights_indirect == integrator.sample_all_lights_indirect);
}

View File

@ -63,6 +63,7 @@ public:
int mesh_light_samples;
int subsurface_samples;
int volume_samples;
bool sample_all_lights_direct;
bool sample_all_lights_indirect;
enum Method {