forked from bartvdbraak/blender
Cycles: Fix rng_state initialization when using resumable rendering
This commit is contained in:
parent
92258f3678
commit
fa19940dc6
@ -1352,6 +1352,9 @@ void BlenderSession::update_resumable_tile_manager(int num_samples)
|
|||||||
VLOG(1) << "Samples range start is " << range_start_sample << ", "
|
VLOG(1) << "Samples range start is " << range_start_sample << ", "
|
||||||
<< "number of samples to render is " << range_num_samples;
|
<< "number of samples to render is " << range_num_samples;
|
||||||
|
|
||||||
|
scene->integrator->start_sample = range_start_sample;
|
||||||
|
scene->integrator->tag_update(scene);
|
||||||
|
|
||||||
session->tile_manager.range_start_sample = range_start_sample;
|
session->tile_manager.range_start_sample = range_start_sample;
|
||||||
session->tile_manager.range_num_samples = range_num_samples;
|
session->tile_manager.range_num_samples = range_num_samples;
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ ccl_device_inline void kernel_path_trace_setup(KernelGlobals *kg,
|
|||||||
|
|
||||||
int num_samples = kernel_data.integrator.aa_samples;
|
int num_samples = kernel_data.integrator.aa_samples;
|
||||||
|
|
||||||
if(sample == 0) {
|
if(sample == kernel_data.integrator.start_sample) {
|
||||||
*rng_state = hash_int_2d(x, y);
|
*rng_state = hash_int_2d(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1187,6 +1187,9 @@ typedef struct KernelIntegrator {
|
|||||||
int volume_samples;
|
int volume_samples;
|
||||||
|
|
||||||
float light_inv_rr_threshold;
|
float light_inv_rr_threshold;
|
||||||
|
|
||||||
|
int start_sample;
|
||||||
|
int pad1, pad2, pad3;
|
||||||
} KernelIntegrator;
|
} KernelIntegrator;
|
||||||
static_assert_align(KernelIntegrator, 16);
|
static_assert_align(KernelIntegrator, 16);
|
||||||
|
|
||||||
|
@ -64,6 +64,7 @@ NODE_DEFINE(Integrator)
|
|||||||
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_INT(start_sample, "Start Sample", 0);
|
||||||
|
|
||||||
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);
|
||||||
@ -161,6 +162,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->start_sample = start_sample;
|
||||||
|
|
||||||
if(method == BRANCHED_PATH) {
|
if(method == BRANCHED_PATH) {
|
||||||
kintegrator->sample_all_lights_direct = sample_all_lights_direct;
|
kintegrator->sample_all_lights_direct = sample_all_lights_direct;
|
||||||
|
@ -66,6 +66,7 @@ public:
|
|||||||
int mesh_light_samples;
|
int mesh_light_samples;
|
||||||
int subsurface_samples;
|
int subsurface_samples;
|
||||||
int volume_samples;
|
int volume_samples;
|
||||||
|
int start_sample;
|
||||||
|
|
||||||
bool sample_all_lights_direct;
|
bool sample_all_lights_direct;
|
||||||
bool sample_all_lights_indirect;
|
bool sample_all_lights_indirect;
|
||||||
|
Loading…
Reference in New Issue
Block a user