Select Git revision
script_multiprocessing.py
-
Benjamin Koltes authoredBenjamin Koltes authored
script_multiprocessing.py 1.64 KiB
# Show to python where to find the modules
import sys
sys.path.append('..')
from camera import Camera
from scene import *
from light import *
from raytracer import *
import numpy as np
from matplotlib.image import imsave
import itertools
import multiprocessing
def trace_ray_mutliprocess(t):
(i, j, camera, scene, nb_reflexion) = t
return np.array(trace_ray(camera.ray_at(i, j), scene, camera, nb_reflexion).coord())
(nx, ny, nb_reflexion) = (1000, 1000, 20)
camera = Camera(nx, ny, 1)
materiau_sphere_bleue = Material(Vector([0,0,1.]), .5, .5, .5, 1000,.1)
materiau_sphere_verte = Material(Vector([0,1,0]), .5, .5, .5, 1000, .6)
materiau_sphere_rouge = Material(Vector([1,0,0]), .5, .5, .5, 1000, .3)
materiau_sphere_blanche = Material(Vector([1,0,0]), .5, .5, .5, 1000, .7)
sphere_verte = Sphere(Vector([3,-3,4]), 2.5, materiau_sphere_verte)
sphere_bleue = Sphere(Vector([0,0,3]), .8, materiau_sphere_bleue)
sphere_rouge = Sphere(Vector([.5,.5,2]), .5, materiau_sphere_rouge)
sphere_blanche = Sphere(Vector([0,0,0]), 25, materiau_sphere_blanche)
scene = Scene()
lumiere = Spotlight(Vector([1,1,0]), Vector([1,1,1]))
scene.add_object(sphere_bleue)
scene.add_object(sphere_rouge)
scene.add_object(sphere_verte)
scene.add_object(sphere_blanche)
scene.add_light(lumiere)
affiche = np.zeros((nx, ny, 3))
rows = list(range(nx))
columns = list(range(ny))
carte = list(itertools.product(rows, columns, [camera], [scene], [nb_reflexion]))
if __name__ == '__main__':
pool = multiprocessing.Pool(8)
affiche_map = pool.map(trace_ray_mutliprocess, carte)
pool.close()
pool.join()
affiche = np.array(affiche_map).reshape(nx, ny, 3)
imsave('test.png', affiche)