示例#1
0
    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