summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2011-08-15woops. dot product should be clamped to [-1.0,1.0].Anthony LaTorre
2011-08-15fix nan bug by clamping dot() of surface normal and -photon direction to ↵Anthony LaTorre
[0.0,1.0]
2011-08-14Rewrite the color_solid function in gpu.GPU (and associated CUDA code)Stan Seibert
to make it 100x faster. Instead of having each CUDA thread loop over the full triangle list, we give each thread a single triangle and ask it to look up the hit status and color for that triangle. The hit array and color array are small enough (approx 30,000 entries) to fit into the cache, so this goes much faster. Now the event viewer is quite snappy!
2011-08-13A faulty optical process can make the position or direction of theStan Seibert
photon into NaN on the GPU. Now we abort these photons rather than let them lock up the intersect_mesh() method. There is a new history bit (#31) that indicates when a NAN_ABORT has occurred, and this bit is checked for by GPU.propagate(). If set for any of the photons, a warning message is printed. While not as good as preventing the NaN problem in the first place, this at least ensures we are aware of the problem.
2011-08-12mergeAnthony LaTorre
2011-08-12do not check child nodes of a node at which the distance to the bounding box ↵Anthony LaTorre
is further than a triangle the ray/photon has already intersected
2011-08-12Use an input and output photon queue in order to consolidate all theStan Seibert
photons that didn't die during propagation into the beginning of the list. This speeds up propagation by reducing the number of partially filled CUDA warps on the next propagation step. 2.2 million photons/sec on LBNE!
2011-08-11No need for __noinline__ now that kernel caching works.Stan Seibert
2011-08-11Switch from texture to float3 array for upper and lower bounds. 10% speed ↵Stan Seibert
boost!
2011-08-10add the ability to cache a geometry along with its bounding volume ↵Anthony LaTorre
hierarchy. cached files are stored in $HOME/.chroma. fixed the timeit() decorator so that the decorated function is still able to pass back a return value.
2011-08-09merge headsAnthony LaTorre
2011-08-09switch to indexing child nodes by start and stop indices instead of start ↵Anthony LaTorre
and length; this reduces a bit of arithmetic when traversing the bounding volume hierarchy and makes the code in Geometry.build() more concise. add an untested cuda kernel to interleave the bits in three uint64 arrays.
2011-08-09Put number of detected photons into charge value for channel.Stan Seibert
2011-08-09Store a photon history for each hit channel. If multiple photons hit theStan Seibert
same channel, their history bits are OR'ed together.
2011-08-08propagate() takes an array of photon offsets and a range ofStan Seibert
offsets to load. Now events with more photons than RNG states can be propagated through multiple kernel calls. Also lays the groundwork for consolidating photons between steps to reduce the amount of propagation work required.
2011-08-08add a simple event viewer. view events by running ./camera.py ↵Anthony LaTorre
<detector_name> -i <name_of_io_file>.
2011-08-04Don't draw a random time delta in the daq kernel unless it is necessary.Stan Seibert
2011-08-03Merge with TonyStan Seibert
2011-07-30you can rotate just the camera by holding the control key and take movies by ↵Anthony LaTorre
pressing the m key.
2011-07-30when throwing photons from the light source out onto the scene, photons are ↵Anthony LaTorre
now thrown randomly across each triangle instead of only at the center of each triangle. all of the rendering kernels have been rewritten so that they operate additively; for example, you may now throw photons from the light source onto the scene, render from the camera to the scene, then throw more photons and render again.
2011-07-28Increase alpha depth for complex models. Remove intermediate roundingStan Seibert
to integers in alpha blending until the last step.
2011-07-27camera automatically increases render quality when it is not being movedAnthony LaTorre
2011-07-26added a camera class which is able to render using the simple ray tracer or ↵Anthony LaTorre
the hybrid monte carlo ray tracer in a separate thread. the camera object is initialized by passing a pycuda.driver.Context object and a threading.Lock object; you can then run kernels and copy arrays to and from the device in the same context as that used by the camera by acquiring the lock, calling context.push(), executing the kernel and/or copying arrays, calling context.pop(), and then releasing the lock. fixed mistakes in both build_rgb_lookup() and render() where I had accidently switched the green and blue photons. updated the lbne geometry with the latest specifications. added profiles for the sno pmt and concentrator.
2011-07-25moved triangle colors to a separate global device array so that the ray ↵Anthony LaTorre
tracer and photon simulation can be run in the same context. added the ability to add alpha channel to triangle color so that triangles can be made transparent. added __noinline__ modifier to certain device functions to speed up kernel compilation.
2011-07-21pull random number generator states out of the photon struct; this allows ↵Anthony LaTorre
you to copy photon information within a thread but still keep a single random number generator throughout the thread.
2011-07-21hybrid monte carlo render now distinguishes between the two different sides ↵Anthony LaTorre
of each triangle. reduced the number of runs to average when propagating photons from each pixel in render.py from 5 to 1; the speed improvement outweighs any small improvement in the quality of the rendered image.
2011-07-20in the previous commit i wrongly edited the code to reflect/transmit across ↵Anthony LaTorre
a boundary
2011-07-20pulled a lot of the photon propagation code out of src/kernel.cu into ↵Anthony LaTorre
src/photon.h so that photon propagation by propagate() in kernel.cu and the hybrid monte carlo ray tracing use the same code. instead of a single state, photons now carry the history of the processes they've undergone. this history is stored as a bitmask; see src/photon.h. start_node and first_node of the mesh are now stored as global variables in mesh.h instead of being passed to kernel functions.
2011-07-19removed STL pmt models; pmt models are now built by calling rotate_extrude() ↵Anthony LaTorre
on a profile of the PMT model (see build_pmt() in solids/pmts.py). triangle intersection now allows one of the two coefficients multiplying the vectors which span the triangle to float slightly negative (up to -EPSILON; EPSILON is defined in src/intersect.h) in order to eliminate rays passing through the line between two triangles. cleaned up a lot of unused code. pulled duplicate code in view() and render() into functions in view.py. in order to allow view.py and render.py to search pre-defined geometries, solids, meshes, etc. without requiring them to be pre-built, pre-defined geometries, solids, meshes, etc. should be returned by a function tagged by the decorator @buildable(identifier) defined in view.py, where identifier is a string used to identify the object as an argument to either view.py or render.py. optical materials and surfaces are now defined in optics.py. added an image directory to save cool screenshots.
2011-07-10added a hybrid monte carlo ray tracing rendering algorithmAnthony LaTorre
2011-06-24argument '-j' to threadtest.py now specifies a list of device ids to be ↵Anthony LaTorre
used. GPUThread objects now shallow copy the geometry so that threads are not writing to the same memory when the geometry is loaded onto the gpu. the model number for the 12" Hamamatsu PMT is R11708, not r7081 (which is the model for the 10" PMT); all references to the 12" PMT were changed accordingly. only allocate space for 20 materials and 20 surfaces on the gpu instead of 100 to save some space. started to modify track.py to build its own photons and module since the GPUThread object only copies photon hit times back from the gpu (not track information), but I am waiting to find out if pycuda GPUArrays can be used with vector types.
2011-06-24speedup mesh intersection by skipping directly to the child node of nodes ↵Anthony LaTorre
with only one child.
2011-06-23move photon initialization to the gpu. it's unclear if this is a speed ↵Anthony LaTorre
improvement.
2011-06-22Start jittering the PMT times in the DAQ simulation.Stan Seibert
2011-06-22Switch from float4 to float3 for vertices.Stan Seibert
2011-06-22Fix accidental reuse of absorption_length when computing scattering length.Stan Seibert
2011-06-21Switch vertex list on GPU from a texture to a standard device array.Stan Seibert
This avoids the texture size limitation.
2011-06-21A GPU-side "DAQ" implementation that identifies the first photon on each ↵Stan Seibert
channel, which is presumed to trigger that channel. Major speed up in conversion of detection times to time PDFs.
2011-06-20pack material and surface indices into the fourth byte of the triangle array ↵Anthony LaTorre
on the GPU. you can now take a screenshot of an image rendered with view.py() by pressing the f12 key.
2011-06-19reverse the face orientation on all triangles in the stl files exported from ↵Anthony LaTorre
sketchup.
2011-06-18change curandstate array length to 100,000. gputhread.run() now correctly ↵Anthony LaTorre
initializes ALL of the states.
2011-06-17visually tested optics code. added models of the inner and outer meshes for ↵Anthony LaTorre
the 12" hamamatsu and sno pmts. ratdb.py is able to parse ratdb files. chromaticity.py provides a function to map wavelength -> rgb color. lbne detector model now includes an outer black cylinder and pmts with a glass layer and photocathode/reflective surfaces.
2011-06-12added some fun models; added some untested code to implement absorption, ↵Anthony LaTorre
scattering, reflection, and refraction
2011-06-07Switch triangle texture to device array, use int32 and float32Stan Seibert
datatypes everywhere, and build final mesh without concatenation of lists. This allows for very large detectors, like full size LBNE.
2011-06-03load material/surface index lookup arrays to the gpu and bind them to ↵Anthony LaTorre
textures. also, forgot to include the gpu code for material/surface structures
2011-06-03load materials/surfaces onto the gpuAnthony LaTorre
2011-06-02material/surface codes or color are packed into the fourth byte of the ↵Anthony LaTorre
triangle data texture depending on the color keyword passed to Geometry.build()
2011-06-02triangle mesh is now stored everywhere as a split list of vertices and trianglesAnthony LaTorre
2011-06-01first step towards moving to a new mesh/solid/geometry structureAnthony LaTorre
2011-05-27kernel ran off the end of the ray arrayAnthony LaTorre