Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/render/integrator.cpp
| Show First 20 Lines • Show All 59 Lines • ▼ Show 20 Lines | NODE_DEFINE(Integrator) | ||||
| SOCKET_INT(transmission_samples, "Transmission Samples", 1); | SOCKET_INT(transmission_samples, "Transmission Samples", 1); | ||||
| SOCKET_INT(ao_samples, "AO Samples", 1); | SOCKET_INT(ao_samples, "AO Samples", 1); | ||||
| SOCKET_INT(mesh_light_samples, "Mesh Light Samples", 1); | SOCKET_INT(mesh_light_samples, "Mesh Light Samples", 1); | ||||
| SOCKET_INT(subsurface_samples, "Subsurface Samples", 1); | SOCKET_INT(subsurface_samples, "Subsurface Samples", 1); | ||||
| SOCKET_INT(volume_samples, "Volume Samples", 1); | SOCKET_INT(volume_samples, "Volume Samples", 1); | ||||
| SOCKET_BOOLEAN(sample_all_lights_direct, "Sample All Lights Direct", true); | SOCKET_BOOLEAN(sample_all_lights_direct, "Sample All Lights Direct", true); | ||||
| SOCKET_BOOLEAN(sample_all_lights_indirect, "Sample All Lights Indirect", true); | SOCKET_BOOLEAN(sample_all_lights_indirect, "Sample All Lights Indirect", true); | ||||
| SOCKET_FLOAT(light_sampling_threshold, "Light Sampling Threshold", 0.05f); | |||||
brecht: We should enable this by default I think, something like `0.1`?
I would be somewhat… | |||||
| static NodeEnum method_enum; | static NodeEnum method_enum; | ||||
| method_enum.insert("path", PATH); | method_enum.insert("path", PATH); | ||||
| method_enum.insert("branched_path", BRANCHED_PATH); | method_enum.insert("branched_path", BRANCHED_PATH); | ||||
| SOCKET_ENUM(method, "Method", method_enum, PATH); | SOCKET_ENUM(method, "Method", method_enum, PATH); | ||||
| static NodeEnum sampling_pattern_enum; | static NodeEnum sampling_pattern_enum; | ||||
| sampling_pattern_enum.insert("sobol", SAMPLING_PATTERN_SOBOL); | sampling_pattern_enum.insert("sobol", SAMPLING_PATTERN_SOBOL); | ||||
| ▲ Show 20 Lines • Show All 83 Lines • ▼ Show 20 Lines | void Integrator::device_update(Device *device, DeviceScene *dscene, Scene *scene) | ||||
| else { | else { | ||||
| kintegrator->sample_all_lights_direct = false; | kintegrator->sample_all_lights_direct = false; | ||||
| kintegrator->sample_all_lights_indirect = false; | kintegrator->sample_all_lights_indirect = false; | ||||
| } | } | ||||
| kintegrator->sampling_pattern = sampling_pattern; | kintegrator->sampling_pattern = sampling_pattern; | ||||
| kintegrator->aa_samples = aa_samples; | kintegrator->aa_samples = aa_samples; | ||||
| if(light_sampling_threshold > 0.0f) { | |||||
| kintegrator->light_inv_rr_threshold = 1.0f / light_sampling_threshold; | |||||
| } | |||||
| else { | |||||
| kintegrator->light_inv_rr_threshold = 0.0f; | |||||
| } | |||||
| /* sobol directions table */ | /* sobol directions table */ | ||||
| int max_samples = 1; | int max_samples = 1; | ||||
| if(method == BRANCHED_PATH) { | if(method == BRANCHED_PATH) { | ||||
| foreach(Light *light, scene->lights) | foreach(Light *light, scene->lights) | ||||
| max_samples = max(max_samples, light->samples); | max_samples = max(max_samples, light->samples); | ||||
| max_samples = max(max_samples, max(diffuse_samples, max(glossy_samples, transmission_samples))); | max_samples = max(max_samples, max(diffuse_samples, max(glossy_samples, transmission_samples))); | ||||
| ▲ Show 20 Lines • Show All 50 Lines • Show Last 20 Lines | |||||
We should enable this by default I think, something like 0.1?
I would be somewhat conservative here as we don't want dark areas where it's difficult to get rid of noise. With adaptive sampling this kind of thing could probably be more aggressive, but currently the noisiest areas determine the overall required number of samples for the image.