piątek, 6 marca 2009

Statystyka i jeszcze “futro” do tego

Zaczął się marzec, a co za tym idzie – nowy semestr. Czeka mniescr001 w  nim programowanie na niskim poziomie, kodzenie deklaratywne, algorytmika, elektronika, fizyka, systemy operacyjne oraz inne “pyszności”. Co za tym idzie, mogę mieć mniej czasu na rozwijanie czegokolwiek i odnotywanie swych postępów na devblogu, zatem znowu będę zmuszony prosić o wybaczenie.

Jeszcze w ferie jednak zacząłem pewne zagadnienie, które ciągnęło się aż do teraz i tak naprawdę nie zostało do końca rozwiązane. Dlaczego tak uważam – wyszło na screenie. Najpierw jednak chciałbym wspomnieć o innym zagadnieniu, które dla frameworka jest nowe, ale w kontekście moich poprzednich programów – niekoniecznie.

Statystyka

Można by się zastanawiać, po co w grach funkcje statystyczne. Uznałem jednak, iż miejscami mogą się przydać – chociażby dlatego, iż w większości framework wykorzystuję do normalnych aplikacji graficznych, gdzie czasem takie wynalazki mogą mieć zastosowanie. A poza tym uznałem, że po co mają się marnować implementacji funkcji w Statmasterze, które popełniłem jakiś czas temu, kiedy można rozszerzyć strukturę CMath i chwalić się, że ma już ponad 300 linijek więcej.  Dlatego też dodałem m.in. średnią arytmetyczną, medianę, kwartyle, odchylenie standardowe, funkcję Gaussa czy quicksort. Niektóre w ramach treningu, inne dlatego, iż przydały się przy jednej z prób stworzenia czegoś, co opisałem poniżej.

Futro

Zainteresowałem się tym tematem poprzez notki i prace Chariba (to jest odmienne?) i Riddlemastera opisujące metodę skorupek i żeberek (ang. shells and fins). Znalazłem dwa ciekawe przykłady opisujące ten ciekawy efekt pod ciekawym kątem (i ciekawym podejściem do ciekawej sprawy). Pierwszy to efekt badań naukowców z Uniwersytetu w Utah i na tym przykładzie (choć uproszczonym) oparłem swoje starania, natomiast drugi to program “ofutrzający” i “owłosiający” dwa różne modele, który też testowałem, ale efekty były mizerne. Fakt faktem, że obecnie efekt też jest niewiele lepszy, ale tak czy siak na razie starczy – zwłaszcza, że nic z tym na razie ciekawego nie zrobię. W skrócie:

Sama idea polega na wyciąganiu geometrii wzdłuż normalnej i teksturowaniu jej odpowiednio spreparowaną teksturę wolumetryczną - to shells (…).

A także:

Często dodaje się również tzw. fins, czyli żeberka. Są to “poprzeczne” trójkąty wystające z siatki, z nałożoną teksturą sierści. Mają one za zadanie maskować artefakty powstałe przez extrusion  geometrii.

(źródło: Charibo)

Efekt powinien być mniej więcej taki. Stosuje się go często i gęsto w nowoczesnych grach, czasami bez użycia żeberek, jeśli obiekt jest na tyle daleko, że maskowanie artefaktów (niedoskonałości graficznych) jest niepotrzebne. Ciekawostką jest też fakt, że można stosować efekt futra dla różnych elementów sceny – chociażby dla trawy.

Cóż, dzisiaj notka krótka i dosyć mało konkretna. Dołożę jeszcze jednak jeden z wielu znamienitych cytatów z ostatnio przeczytanej książki z serii Świata Dysku – Ruchome Piaski.

A potem Ridcully Bury przybył i okazało się, że rzeczywiście rozmawia z ptakami. Właściwie to krzyczy na ptaki, a krzyczy zwykle “Trafiłem cię, draniu!”.

Terry Pratchett

Pozdrawiam i dziękuję – SceNtriC.

2 komentarze:

Riddlemaster pisze...

To że często unika się w grach żeberek jest zrozumiałe. Efekt i bez tego jest niezły, a skoro można uniknąć renderingu dodatkowej geometrii to czemu tego nie zrobić? Zresztą futro zwykle ogląda się z dalszej perspektywy (jakoś nie mogę przypomnieć sobie FPSa w którym by go użyto), więc tym bardziej to nie przeszkadza.

SceNtriC pisze...

Racja. Akurat w "mojej" implementacji "futra" da się ustawić jeden parametr w taki sposób, aby żeberka nie były prawie w ogóle renderowane. Choć - prawdę mówiąc - miałem małą kontrolę nad tym kodem...