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

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend