summaryrefslogtreecommitdiff
path: root/render.py
diff options
context:
space:
mode:
Diffstat (limited to 'render.py')
-rwxr-xr-xrender.py34
1 files changed, 18 insertions, 16 deletions
diff --git a/render.py b/render.py
index fe70492..d7a9ec4 100755
--- a/render.py
+++ b/render.py
@@ -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()