diff options
Diffstat (limited to 'render.py')
-rwxr-xr-x | render.py | 34 |
1 files changed, 18 insertions, 16 deletions
@@ -17,6 +17,8 @@ def render(viewable, size=(800,600), name='', bits=8, make_movie=False): lower_bound, upper_bound = geometry.mesh.get_bounds() + source_position = [0, 0, upper_bound[2]+1.0] + scale = np.linalg.norm(upper_bound-lower_bound) print 'device %s' % autoinit.device.name() @@ -39,32 +41,32 @@ def render(viewable, size=(800,600), name='', bits=8, make_movie=False): diagonal = np.linalg.norm(upper_bound-lower_bound) - source_position = [0, 0, upper_bound[2]+1.0] - source_positions_gpu = gpuarray.empty(len(geometry.mesh.triangles), dtype=gpuarray.vec.float3) source_positions_gpu.fill(gpuarray.vec.make_float3(*source_position)) source_directions = np.mean(geometry.mesh[:], axis=1) - source_position source_directions_gpu = gpuarray.to_gpu(source_directions.astype(np.float32).view(gpuarray.vec.float3)) - rgb_lookup_gpu = gpuarray.zeros(source_positions_gpu.size, dtype=gpuarray.vec.float3) + rgb_lookup1_gpu = gpuarray.zeros(source_positions_gpu.size, dtype=gpuarray.vec.float3) + rgb_lookup2_gpu = gpuarray.zeros(source_positions_gpu.size, dtype=gpuarray.vec.float3) max_steps = 10 - rgb_runs = 1000 + rgb_runs = 100 print 'building rgb lookup.' - cuda_build_rgb_lookup(np.int32(source_positions_gpu.size), rng_states_gpu, source_positions_gpu, source_directions_gpu, rgb_lookup_gpu, np.int32(rgb_runs), np.int32(max_steps), block=(64,1,1), grid=(source_positions_gpu.size//64+1,1)) + cuda_build_rgb_lookup(np.int32(source_positions_gpu.size), rng_states_gpu, source_positions_gpu, source_directions_gpu, rgb_lookup1_gpu, rgb_lookup2_gpu, np.int32(rgb_runs), np.int32(max_steps), block=(64,1,1), grid=(source_positions_gpu.size//64+1,1)) cuda.Context.synchronize() print 'done.' - rgb_lookup = rgb_lookup_gpu.get() - rgb_lookup['x'] /= rgb_runs - rgb_lookup['y'] /= rgb_runs - rgb_lookup['z'] /= rgb_runs - rgb_lookup['x'][rgb_lookup['x'] > 1.0] = 1.0 - rgb_lookup['y'][rgb_lookup['y'] > 1.0] = 1.0 - rgb_lookup['z'][rgb_lookup['z'] > 1.0] = 1.0 - rgb_lookup_gpu = cuda.to_device(rgb_lookup) + rgb_lookup1 = rgb_lookup1_gpu.get().view(np.float32) + rgb_lookup1 /= rgb_runs + rgb_lookup1[rgb_lookup1 > 1.0] = 1.0 + rgb_lookup1_gpu.set(rgb_lookup1.view(gpuarray.vec.float3)) + + rgb_lookup2 = rgb_lookup2_gpu.get().view(np.float32) + rgb_lookup2 /= rgb_runs + rgb_lookup2[rgb_lookup2 > 1.0] = 1.0 + rgb_lookup2_gpu.set(rgb_lookup2.view(gpuarray.vec.float3)) camera = Camera(size) @@ -80,7 +82,7 @@ def render(viewable, size=(800,600), name='', bits=8, make_movie=False): directions_gpu = gpuarray.to_gpu(directions.astype(np.float32).view(gpuarray.vec.float3)) pixels_gpu = gpuarray.zeros(width*height, dtype=np.int32) - nruns = 5 + nruns = 1 screen = pygame.display.set_mode(size) pygame.display.set_caption(name) @@ -97,11 +99,11 @@ def render(viewable, size=(800,600), name='', bits=8, make_movie=False): global image_index t0 = time.time() - cuda_render(np.int32(pixels_gpu.size), rng_states_gpu, origins_gpu, directions_gpu, rgb_lookup_gpu, np.int32(nruns), pixels_gpu, np.int32(max_steps), block=(nblocks,1,1), grid=(pixels_gpu.size//nblocks+1,1)) + cuda_render(np.int32(pixels_gpu.size), rng_states_gpu, origins_gpu, directions_gpu, rgb_lookup1_gpu, rgb_lookup2_gpu, np.int32(nruns), pixels_gpu, np.int32(max_steps), block=(nblocks,1,1), grid=(pixels_gpu.size//nblocks+1,1)) cuda.Context.synchronize() elapsed = time.time() - t0 - print 'elapsed %f sec' % elapsed + #print 'elapsed %f sec' % elapsed pygame.surfarray.blit_array(screen, pixels_gpu.get().reshape(size)) pygame.display.flip() |