def render_task(self, task_index: int, bucket_index: int, bucket_order_info: BucketOrderInfo, sample, renderer: Renderer): sampler = self.main_sampler.get_sub_sampler(bucket_index, bucket_order_info) if sampler is None: return print("start render task : id(" + str(task_index) + ") (" + str(sampler.bucket_extend.start_x) + "," + str( sampler.bucket_extend.start_y) + ") " + "(" + str(sampler.bucket_extend.end_x - 1) + "," + str( sampler.bucket_extend.end_y - 1) + ")") self.draw_bucket_extend(sampler.bucket_extend) pixels = [] maxSamples = sampler.get_maximum_sample_count() samples = [] rays = [] Ls = [] Ts = [] intersections = [] for n in range(maxSamples): samples.append(deepcopy(sample)) rays.append(Ray()) Ls.append(Spectrum(0.0)) Ts.append(Spectrum(0.0)) intersections.append(Intersection()) # preallocate array for each pixels # rays = [Ray()]*maxSamples # Ls = [Spectrum(0.0)]*maxSamples # Ts = [Spectrum(0.0)]*maxSamples # intersections = [Intersection()]*maxSamples while True: if sampler.get_more_samples(samples) == 0: break for i in range(len(samples)): rays[i] = self.camera.generate_ray(samples[i]) Ls[i] = renderer.get_li(self.scene, rays[i], intersections[i], samples[i]) s = Spectrum(0.0) for i in range(len(samples)): s += Ls[i] s /= float(len(samples)) s = s.get_clamp(0.0, 1.0) pixels.append(s) print("end render task " + str(task_index)) return pixels, sampler.bucket_extend