Graphics and Simulation
Forward+ Renderer - CIS-565 GPU Programming and Architecture Final Project / November - December 2015
Implemented a real-time GPU-based Forward+ renderer based on the paper Forward+: Bringing Deferred Rendering to the Next Level by Takahiro Harada, Jay McKee, and Jason C. Yang in C++ and OpenGL. Our implementation uses OpenGL compute shaders to perform a light culling stage. In this stage we divide the screen into tiles and determine which lights are visible in each tile. In the final shading calculations, we only consider lights that passed the previous culling stage for that fragment's tile. In testing, our Forward+ method showed a 53x performance increase over a naive Forward rendering implementation in a scene featuring 1024 point lights. The average frame rate jumped from 1.7 to 89.8 frames per second.
Additional features include high dynamic range lighting with Reinhard tone mapping, tangent space normal mapping, interactive controls, and support for complex model loading using Assimp.
For more detailed information on our implementation, performance analysis, and continued development, follow the GitHub link below.
Group Member: Megan Moore
WebGL Based Deferred Shader - CIS-565 GPU Programming and Architecture Project / October 2015
Implemented an interactive deferred shader on the GPU using WebGL. Features Blinn-Phong shading, optional bloom and toon shading effects, scissor test culling for point lights, and material defined specular exponents.
Live Demo: bcrusco.github.io/WebGL-Deferred-Shader
CUDA Based Rasterizer - CIS-565 GPU Programming and Architecture Project / October 2015
Implemented an interactive GPU accelerated rasterizer. The project uses a scanline rasterization technique and can render obj models using triangle, line, or point primitives. Additional features include interactive mouse controls, backface culling, scissor test culling, and color and normal interpolation to support smooth models.
CUDA Based Path Tracer - CIS-565 GPU Programming and Architecture Project / September 2015
Implemented an interactive GPU accelerated path tracer with support for diffuse, specular, mirrored, and refractive surfaces. Additional features include depth of field, motion blur, and work efficient stream compaction. Implementation details of each feature and performance results can be found on the project's GitHub repository bellow.
Paanipuri: Real-Time Fluid Solid Coupling Simulation - CIS-563 Physically Based Animation Final Project / May 2015
Developed a real-time fluid solid coupling simulation in C++ based on the paper Unified Particle Physics for Real-Time Applications by Miles Macklin, Matthias Müller, Nuttapong Chentanez, and Tae-Yong Kim. The system can simulate rigid bodies and fluids simultaneously using a particle representation and a mass-weighted version of Position Based Fluids. To represent rigid bodies, particles are held in the correct configuration by shape matching constraints. Interaction between fluids of differing densities is supported, as is buoyancy for rigid body objects. Neighbor search for particle-particle collision detection is sped up by using a Spatial Hash Grid. The simulation is multithreaded using Intel's Threading Building Blocks (TBB) library.
Monte Carlo Path Tracer - CIS-560 Computer Graphics Final Project / Fall 2014
Implemented a Monte Carlo path tracer that allows the user to render images with indirect lighting, indirect and direct lighting, or render a standard ray traced image with depth-of-field, soft shadows, and antialiasing.
3D Smoke Fluid Simulation - CIS-563 Physically Based Animation Project / March 2015
Implemented a 3D Semi-Lagrangian smoke fluid simulation using the Navier-Stokes equations and a marker-and-cell (MAC) grid in C++ and rendered in real-time using OpenGL. Velocity, density, and temperature are advected onto the smoke particles and buoyancy and vorticity confinement external forces are applied on the system. Incompressibility is maintained by doing a pressure solve using a conjugate gradient solver and then projecting it onto the system.
My implementation is based off the SIGGRAPH 2007 Course Notes on Fluid Simulation by Robert Bridson and Matthias Müller.
Position Based Dynamics Cloth Simulation - CIS-563 Physically Based Animation Project / February 2015
Implemented a real-time deformable body cloth simulation using both force based methods (RK4, RK2, Euler, and Symplectic integration) and Position Based Dynamics in C++. Users can switch between these different methods and configure many parameters including stretch, attachment, and bend constraints, and damping and restitution coefficients. Collisions are supported between the cloth and static plane, sphere, or cube objects in the scene.
Position Based Dynamics implementation is based on the paper Position Based Dynamics by Matthias Müller, Bruno Heidelberger, Marcus Hennix, and John Ratcliff.
Rigid Body Simulation - CIS-563 Physically Based Animation Project / February 2015
Implemented a real-time rigid body simulation in C++ and rendered using OpenGL. Resolves collisions by reflecting velocity using a restitution coefficient. Contacts occur when two objects are stacking and are resolved by canceling the normal direction velocity between them. Determining intersections between rigid bodies is optimized by using the Sweep and Prune algorithm.