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,
|
items=enum_use_layer_samples,
|
||||||
default='USE',
|
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(
|
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",
|
description="Sample all lights (for indirect samples), rather than randomly picking one",
|
||||||
default=False,
|
default=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
cls.no_caustics = BoolProperty(
|
cls.no_caustics = BoolProperty(
|
||||||
|
@ -134,6 +134,7 @@ class CyclesRender_PT_sampling(CyclesButtonsPanel, Panel):
|
|||||||
sub.prop(cscene, "aa_samples", text="Render")
|
sub.prop(cscene, "aa_samples", text="Render")
|
||||||
sub.prop(cscene, "preview_aa_samples", text="Preview")
|
sub.prop(cscene, "preview_aa_samples", text="Preview")
|
||||||
sub.separator()
|
sub.separator()
|
||||||
|
sub.prop(cscene, "sample_all_lights_direct")
|
||||||
sub.prop(cscene, "sample_all_lights_indirect")
|
sub.prop(cscene, "sample_all_lights_indirect")
|
||||||
|
|
||||||
col = split.column()
|
col = split.column()
|
||||||
|
@ -197,7 +197,8 @@ void BlenderSync::sync_integrator()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
integrator->method = (Integrator::Method)get_enum(cscene, "progressive");
|
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");
|
integrator->sample_all_lights_indirect = get_boolean(cscene, "sample_all_lights_indirect");
|
||||||
|
|
||||||
int diffuse_samples = get_int(cscene, "diffuse_samples");
|
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)
|
PathState *state, PathRadiance *L, ccl_global float *buffer)
|
||||||
{
|
{
|
||||||
#ifdef __EMISSION__
|
#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
|
#endif
|
||||||
|
|
||||||
for(int i = 0; i< sd->num_closure; i++) {
|
for(int i = 0; i< sd->num_closure; i++) {
|
||||||
|
@ -836,8 +836,9 @@ typedef struct KernelIntegrator {
|
|||||||
int ao_samples;
|
int ao_samples;
|
||||||
int mesh_light_samples;
|
int mesh_light_samples;
|
||||||
int subsurface_samples;
|
int subsurface_samples;
|
||||||
|
int sample_all_lights_direct;
|
||||||
int sample_all_lights_indirect;
|
int sample_all_lights_indirect;
|
||||||
|
|
||||||
/* mis */
|
/* mis */
|
||||||
int use_lamp_mis;
|
int use_lamp_mis;
|
||||||
|
|
||||||
@ -850,7 +851,6 @@ typedef struct KernelIntegrator {
|
|||||||
int volume_max_steps;
|
int volume_max_steps;
|
||||||
float volume_step_size;
|
float volume_step_size;
|
||||||
int volume_samples;
|
int volume_samples;
|
||||||
int pad1;
|
|
||||||
} KernelIntegrator;
|
} KernelIntegrator;
|
||||||
|
|
||||||
typedef struct KernelBVH {
|
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->mesh_light_samples = mesh_light_samples;
|
||||||
kintegrator->subsurface_samples = subsurface_samples;
|
kintegrator->subsurface_samples = subsurface_samples;
|
||||||
kintegrator->volume_samples = volume_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->sample_all_lights_indirect = sample_all_lights_indirect;
|
||||||
|
|
||||||
kintegrator->sampling_pattern = sampling_pattern;
|
kintegrator->sampling_pattern = sampling_pattern;
|
||||||
@ -199,6 +200,7 @@ bool Integrator::modified(const Integrator& integrator)
|
|||||||
volume_samples == integrator.volume_samples &&
|
volume_samples == integrator.volume_samples &&
|
||||||
motion_blur == integrator.motion_blur &&
|
motion_blur == integrator.motion_blur &&
|
||||||
sampling_pattern == integrator.sampling_pattern &&
|
sampling_pattern == integrator.sampling_pattern &&
|
||||||
|
sample_all_lights_direct == integrator.sample_all_lights_direct &&
|
||||||
sample_all_lights_indirect == integrator.sample_all_lights_indirect);
|
sample_all_lights_indirect == integrator.sample_all_lights_indirect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,6 +63,7 @@ public:
|
|||||||
int mesh_light_samples;
|
int mesh_light_samples;
|
||||||
int subsurface_samples;
|
int subsurface_samples;
|
||||||
int volume_samples;
|
int volume_samples;
|
||||||
|
bool sample_all_lights_direct;
|
||||||
bool sample_all_lights_indirect;
|
bool sample_all_lights_indirect;
|
||||||
|
|
||||||
enum Method {
|
enum Method {
|
||||||
|
Loading…
Reference in New Issue
Block a user