forked from bartvdbraak/blender
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:
parent
cb4c49ad97
commit
211f08d89b
@ -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(
|
||||
|
@ -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()
|
||||
|
@ -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");
|
||||
|
@ -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++) {
|
||||
|
@ -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 {
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user