using flex for real time fluid simulation in virtual
play

Using FLeX for Real-time Fluid Simulation in Virtual Surgery Brad - PowerPoint PPT Presentation

Using FLeX for Real-time Fluid Simulation in Virtual Surgery Brad Hittle May 11 th 2017 Slide 1 Introduction Temporal bone surgery among most complex Average $80,000/year to properly train ENT surgeons Lack of cadaveric training


  1. Using FLeX for Real-time Fluid Simulation in Virtual Surgery Brad Hittle May 11 th 2017 Slide 1

  2. Introduction • Temporal bone surgery among most complex • Average $80,000/year to properly train ENT surgeons • Lack of cadaveric training material Slide 2

  3. Virtual Surgery • Complex surgeries • Teaching/Training • Informative feedback Slide 3

  4. Fluid Simulation? • Multi-instrument process • Visibility • Temperature Slide 4

  5. Fluid Setup • Fixed number of particles • Recycle particles • Blood and saline same phase • Multiple mesh collisions • Signed Distance Field (SDF) Slide 5

  6. SDF Issues • Too expensive for real-time performance • Particles fall through SDF 3 (s) 3 (s) 3 (s) 3 (s) Dataset Size 768 384 192 96 Intel Xeon E5-1650 v3 3.5 GHz 2179.01 216.517 19.6141 1.52809 Slide 6

  7. SDF Approximation • Subsample • Edge detection • Shelling algorithm • Scale Slide 7

  8. SDF Results 10 Time (s) 1 Quadro K5000 Quadro M5000 0.1 Quadro P5000 Quadro GP100 0.01 0.001 96 192 384 768 Slide 8

  9. Cost of Approximation? Slide 9

  10. Irrigation • Emitters • Absorbers Slide 10

  11. Blood Label • Setup • Algorithm • Cull Extra Voxels Slide 11

  12. Bleeding • Create static emitter • Constant bleeders for critical structures • Blood and saline mixing Slide 12

  13. Multi-thread configuration void updateThread (FluidSim *sim) { sim->init (); std::thread upThread = std::thread([sim] { updateThread(sim); }); while (!sim->ShuttingDown) { double dt = 1.0 / float (sim->DeltaTime); double startTime = timer.read (); sim->update (); while (timer.read () - startTime < dt){} } upThread.join(); } Slide 13

  14. Multi-thread configuration void updateThread (FluidSim *sim) { sim->init (); std::thread upThread = std::thread([sim] { updateThread(sim); }); while (!sim->ShuttingDown) { double dt = 1.0 / float (sim->DeltaTime); double startTime = timer.read (); sim->update (); while (timer.read () - startTime < dt){} } upThread.join(); } Slide 14

  15. Multi-GPU Update Fluid buffers For Rendering Update Volume Main for SDF Add emitter Fluid Thread Remove suction Update (Render) FLeX Update GPU 0 GPU 1 Slide 15

  16. Simulation in Action Slide 16

  17. Simulation in Action Slide 17

  18. Simulation in Action Slide 18

  19. Simulation in Action Slide 19

  20. Special Thanks • Hector Medina-Fetterman • Dennis Sessanna (NVIDIA) • Funded by NIDCD - R01 DC011321 (2011-2016) Slide 20

  21. Contact Information Brad Hittle bhittle@osc.edu Slide 21

Recommend


More recommend