✨ System cząstek GPGPU
Setki tysięcy cząstek aktualizowanych w całości na GPU dzięki teksturom zmiennoprzecinkowym ping-pong. Wybierz zachowanie — curl noise, atraktory N-body, boidy albo Lorenz — i obracaj kamerę wokół roju.
O tej symulacji
To system cząstek GPGPU (ang. general-purpose GPU) — zamiast aktualizować pozycję każdej cząstki na CPU po kolei, fizyka wszystkich cząstek jest liczona równolegle na karcie graficznej przy użyciu tekstur zmiennoprzecinkowych typu ping-pong: jedna tekstura przechowuje stan bieżący, shader zapisuje stan kolejny do drugiej tekstury, a obie zamieniają się rolami co klatkę. Dzięki temu setki tysięcy cząstek mogą aktualizować się jednocześnie przy interaktywnej liczbie klatek — czego pętla na CPU nigdy by nie osiągnęła.
🔬 Co pokazuje
Rój liczący nawet 250 000 cząstek, napędzany jednym z kilku zachowań siłowych — turbulencją curl noise, grawitacyjnymi atraktorami N-body, stadem w stylu boidów albo chaotycznym atraktorem Lorenza — wszystkie liczone na GPU co klatkę i renderowane jako chmura punktów, którą można obracać.
🎮 Jak korzystać
Wybierz zachowanie, a następnie dostosuj liczbę cząstek, krok czasowy dt, siłę i rozmiar punktu. Przeciągaj, aby obracać kamerę, przeciągaj atraktory bezpośrednio w trybie N-body, a pauzą i resetem zatrzymuj lub restartuj symulację.
💡 Czy wiesz, że…
Pojedyncza nowoczesna karta graficzna potrafi zaktualizować setki tysięcy niezależnych cząstek w czasie, w którym CPU zdąży zaktualizować zaledwie kilka tysięcy, bo GPU zamienia złożoną logikę pojedynczego rdzenia CPU na tysiące prostych rdzeni wykonujących tę samą operację na wielu danych naraz.
Najczęściej zadawane pytania
Dlaczego GPU są tak dużo szybsze od CPU przy symulacjach cząstek?
CPU są zoptymalizowane pod kątem sekwencyjnych obliczeń o niskim opóźnieniu — nowoczesny procesor ma od 8 do 32 rdzeni, z których każdy wykonuje złożone sekwencje instrukcji z przewidywaniem rozgałęzień i dużymi pamięciami podręcznymi. GPU ma tysiące prostszych rdzeni zoptymalizowanych pod kątem wysokiej przepustowości pracy równoległej. Symulacja cząstek aktualizuje każdą cząstkę niezależnie, tymi samymi równaniami na różnych danych, co idealnie pasuje do równoległości GPU: dla miliona cząstek karta grafiki licząca tysiące na cykl zegara potrzebuje dużo mniej przebiegów niż CPU liczący je pojedynczo.
Jak działa compute shader?
Compute shader uruchamia wiele niezależnych jednostek roboczych jednocześnie, po jednej na cząstkę. Każda jednostka odczytuje bieżącą pozycję i prędkość cząstki z bufora GPU, oblicza siły od sąsiednich cząstek lub pól, całkuje prędkość i pozycję o jeden krok czasowy do przodu i zapisuje wynik z powrotem. W kolejnej klatce shader renderujący odczytuje te zaktualizowane pozycje, podczas gdy compute shader pracuje już nad następnym krokiem.
Czym różni się WebGL od WebGPU przy symulacji cząstek?
WebGL zaprojektowano do renderowania, więc adaptuje etapy potoku graficznego do obliczeń GPGPU — przechowując dane cząstek w teksturach i przetwarzając je shaderami fragmentów, co jest podejściem pośrednim i ma realne ograniczenia. WebGPU to nowsze API z natywnym wsparciem dla compute shaderów, bardziej elastycznym dostępem do pamięci i bliższym dopasowaniem do możliwości nowoczesnych kart graficznych, umożliwiając wydajniejsze obliczenia GPGPU w przeglądarce.