Sterowanie, a nie skryptowanie
Motyl w tej symulacji nie podąża za zadanym wcześniej ścieżką – jest on sterowany zachowaniami kierunkowymi, techniką wprowadzoną przez Craiga Reynolda w jego artykule z 1999 roku "Steering Behaviors For Autonomous Characters" (ten sam badacz stojący za modelem boidów z 1987 roku). Zamiast obliczać pełną trajektorię z góry, każdy agent zadaje znacznie prostsze pytanie w każdym kadrze: biorąc pod uwagę moje położenie i cel, jaki mam osiągnąć, jaką małą siłę kierunkową powinienem zastosować tu i teraz?
Podstawowym elementem jest 'seek': oblicza się wektor od bieżącego położenia agenta do jego celu, traktuje się go jako pożądane prędkości (skalowane do maksymalnej prędkości agenta) oraz odejmuje się od niej bieżącą prędkość agenta, aby uzyskać siłę kierunkową. Ta siła jest następnie stosowana, ograniczona do maksymalnej siły skrętu, dzięki czemu agent płynnie wygina się w stronę celu zamiast gwałtownie zatrzymywać się na prostej linii.
desired = normalize(target - position) * maxSpeed steer = desired - velocity steer = clamp(steer, maxForce) velocity += steer position += velocity
Wander: Wyglądanie celowo, podczas gdy wcale się nigdzie nie kieruje
Prawdziwe motyle nie latają prostymi liniami między kwiatami – machają skrzydełkami, krążą i unoszą się. Symulacja to odzwierciedla zachowaniem 'wander': mały punkt docelowy jest projektowany w krótkim dystansie przed motylem, a następnie delikatnie poruszany po obwodzie niewidzialnego okręgu poprzez stopniowo zmieniający się losowy kąt za każdym klatką. Kierowanie się w ten 'wanderujący' punkt generuje te same łagodne, zakrzywione, ale ciągłe ścieżki, które prawdziwe motyle rysują, bez potrzeby, aby ruch wydawał się losowy z klatki na klatkę – 'wanderujący' punkt zmienia się jedynie nieznacznie za każdym krokiem, co zapewnia płynność ruchu zamiast jego drgań.
Przyciąganie do kwiatów i związek w stadzie
Gdy kwiat znajduje się w zasięgu, siła rozbieżna miesza się z (lub jest zastępowana przez) siłą poszukiwania w kierunku najbliższego kwiatu, ważoną odległością, dzięki czemu motyl może być "zainteresowany" płatkiem bez natychmiastowego skierowania się na niego. Kliknij, aby zasadzić nowy kwiat i lista celów każdego pobliskiego motyla aktualizuje się w następnej klatce — nie ma globalnego planisty, tylko każdy indywidualny agent ponownie ocenia swoje lokalne otoczenie, co jest dokładnie tym samym zdekcentralizowanym principem stojącym za oryginalnymi boidami Reynolda: złożone, organicznie wyglądające zachowanie grupy powstaje dzięki agentom, które patrzą jedynie na siebie i najbliższe otoczenie, nigdy na całą stado.
Dlatego też zachowania sterowania skalują się tak dobrze — podwojenie liczby motyli nie wymaga ponownego przemyślenia algorytmu, ponieważ koszt każdej decyzji agenta wynosi w przybliżeniu niewielką, stałą ilość pracy niezależnie od tego, ile innych agentów istnieje.
Często zadawane pytania
Czy motyle planują trasę do kwiatów z wyprzedzeniem?
Nie. Każdy motyl ponownie oblicza siłę sterowania w każdym kadrze, bazując wyłącznie na swojej aktualnej pozycji, prędkości i najbliższym kwiatcie lub celu błądania – nie ma planowania trasy ani przewidywania, dlatego ścieżki wyglądają organicznie i natychmiast reagują, gdy zasadzisz nowy kwiat.
Dlaczego motyle nie latają prostymi liniami?
Zachowanie błądania ciągle popycha niewidzialny punkt docelowy w niewielkim okręgu przed motylem, a motyl steruje w kierunku tego unoszącego się punktu. Ponieważ cel przesuwa się tylko nieznacznie w każdym kadrze, wynikowy trajektoria lotu jest gładka zamiast skakać losowo.
Czy ta sama technika jest wykorzystywana do formowania się grup ptaków lub ryb w grach?
Tak – to jest taka sama rodzina zachowań sterujących (poszukiwanie, błądanie, separacja, ujednolicenie), wprowadzona przez model boidów Craiga Reynoldsa, tylko zastosowana do pojedynczego latającego agenta przyciągniętego do kwiatów zamiast zsynchronizowanej grupy.
Wypróbuj na żywo
Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz Butterflies & Flowers i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.
▶ Otwórz symulację Butterflies & Flowers