Porównanie integratorów SPH

Blender podczas symulacji fizyki cząstek w modelu fluid używa różnej precyzji integratorów. Czas zobaczyć, jak one działają!

Witajcie. W tym poście pokazuję malutkie zastosowanie fizyki cząstek do wizualizacji precyzji obliczeń czterech dostępnych w Blenderze metod obliczania ruchu cząstek. Są to metody mające podstawowy wpływ na stabilność obliczeń. Nazywają się: Euler, Verlet, Midpoint oraz RK4. Bez większego skupienia na matematyce, która tym wszystkim rządzi, zapraszam do obejrzenia króciutkiego filmu renderowanego z Widoku 3D, który pokazuje dokładnie ten sam system cząstek, jednak za każdym razem liczony inną metodą. Zapraszam!

Dowiedziałem się od programisty Janne Karhu, który napisał parę lat temu system cząstek w Blenderze,  nieco więcej jak działają te systemy. Rozmawialiśmy o stabilności obliczeń, no i Janne był uprzejmy nieco wyjaśnić kilka tajemnic, co przytaczam poniżej, w wersji tłumaczonej przeze mnie.

Janne Karhu: Inną metodą stabilizacji cząstek jest zmiana metody całkowania używanej w obliczeniach. Domyślnie wybrana jest metoda „Midpoint” i jest to prawdopodobnie druga w kolejności najgorsza opcja do wyboru po „Euler”. Metoda całkowania ma wielkie wpływ na dokładność obliczeń wykonywanych w każdym kroku symulacji.

Metoda Eulera używa po prostu każdej siły wyliczonej w bieżącym momencie symulacji symulacji i używa tych sił oraz poprzednich prędkości cząstek aby wyliczyć ich nowe położenia. Błąd wprowadzany przez tę metodę może być rzędu około 10% w każdym kroku czasowym obliczeń, zatem wielkie błędy pojawiają się bardzo prędko.

Metoda Midpoint najpierw oblicza przybliżenie prędkości w środku kroku czasowego a wtedy używa tego wyniku razem z wyliczonymi siłami aby przesunąć cząstki do ich kolejnych położeń. To jest o wiele lepszy sposób niż metoda Eulera, ale nadal łatwo jest wkraść się większym błędom w symulację. Błąd wprowadzany przez tę metodę jest około 1% na krok czasowy.

Metoda Verletta jest podobna w założeniach do metody Midpoint, ale jest odrobinę lepiej dostosowana do symulacji płynów gdzie cząstki muszą zachować określoną odległość od siebie nawzajem. Błąd wprowadzany przez tę metodę jest tego samego rzędu jak w przypadku metody Midpoint.

Metoda RK4 jest najstabilniejsza ponieważ przybliża ona prędkości i siły wpływające na cząstki działając na nich w wielu punktach zanim dojdzie do ich przesunięcia. Błąd tej metody jest niewielki, i wynosi jedynie około 0.01%, zatem jest to dalece bardziej precyzyjna metoda niż pozostałe, ale oczywiście jest też najwolniejsza.

Oto porównanie, króciutki dwuminutowy filmik, z muzyką wprost z YouTube. Mam nadzieję, że sami zobaczycie, która metoda ma jaką stabilność. Do wyrenderowania tych scen wykorzystałem bardzo szybki proces renderowania w Widoku 3D, co jest opisane nieco dokładniej w tutorialu na temat wizualizacji fal uderzeniowych tutaj.

 

A Ty co o tym myślisz?