Tuesday, October 25, 2011

Fluid and Rigid Body Interaction

I have finally settled on a topic for my master's thesis. I will implement some techniques discussed in GPU Gems 3 and "Two-way rigid-fluid interaction Heterogeneous Architectures"  , into Ian's EnjaParticles library to allow for rigid-fluid interaction. I will now be the primary maintainer of the library and thus I have forked it to my github account.

The original goal of Ian's project was to integrate the fluid library into Blender's Game Engine(BGE). He has a working build of blender with the fluids integrated into the BGE. The fluid simulation works quite nicely. However, it currently can't handle two-way coupling between rigidbody-fluid systems.

My project will involve upgrading EnjaParticles library to include the coupling physics. Also, I plan to integrate this library into Bullet Physics Library. If I integrate it into the Bullet library, I can then more naturally integrate the library into the BGE. The BGE already uses Bullet for rigidbody and softbody simulations. With the addition of our library into Bullet, the BGE could then have rigidbody, softbody, and fluid simulations.

Goals for the project:

  • Create OpenCL and C++ infrastructure for rigidbodies in Enjaparticles
    • Voxelize an arbitrary [closed] triangular mesh. Already Completed
    • Create data structures to hold particles position, velocity, force, torque... and a related structure which holds these values for the center of mass of the rigid body.
    • Create OpenCL kernels to perform Segmented scan. This is necessary to sum the total forces for each rigid body from its particles.
  • Restructure and optimize the EnjaParticle library.
    • Do not force Opencl/gl interoperability. Could run on CPU's in addition to GPUS.
      • This will also allow for offline simulations that could be serialized.
    • Ensure all kernels are optimized.
    • Implement Morton ordering. This can speed up the SPH simulations substantially.
    • Implement Radix Sorting.
    • General refactoring
      • Some of the methods/attributes of each system class can be abstracted.
      • Enforce encapsulation and utilize inheritance.
      • Add Extensive Documentation.
      • Consider Making renderer part of the main file or at least seperate it from the simulation. Thus giving flexability to the caller on how they wish to render the VBO.
  • Integrate the Upgraded library into Bullet.
  • Upgrade BGE with the latest Bullet library.
  • Other Features that are wishes and not requirements.
    • Improve Screenspace rendering.
      • reflection
      • refraction
      • curvature flow
    • Implement Histopyramid marching cubes into the library for fast surface reconstruction.