April 2007

Uwaga! Informacje na tej stronie mają ponad 3 lata. Nadal je udostępniam, ale prawdopodobnie nie odzwierciedlają one mojej aktualnej wiedzy ani przekonań.

10:24
Sun
29
Apr 2007

Ostatni efekt

Trochę filozofii: Mówi się, że koniec końców wszystko w komputerze sprowadza się do zer i jedynek. Wg mnie na takim poziomie, na jakim piszemy w językach wysokiego poziomu, wszystko (a przynajmniej dużo) sprowadza się do funkcji. Czy to będzie funkcja jednej czy wielu zmiennych, czy będzie operowała na liczbach czy całych wektorach, czy wielkości będą opisywały pozycję, kierunek, kolor, rozmiar czy jakieś zależności czasowe... Umiejętność opisania zależności wzorami to moim zdaniem klucz do programowania wszelkich efektów. W modelowaniu funkcji o takim kształcie, jaki akurat jest potrzebny bardzo pomaga Evaldraw.

Wracając na Ziemię: Wczoraj skończyłem ostatni efekt - Heat Haze, czyli falowanie powietrza pod wpływem ciepła. Zostaje teraz troche prac porządkowych i połączenie tego wszystkiego razem.

Heat Haze

Comments (0) | Tags: rendering gallery | Author: Adam Sawicki | Share

23:20
Fri
27
Apr 2007

Dalsze prace

Dwa nowe efekty. Pierwszy to Feedback, czyli sprzężenie zwrotne. Dzięki niemu (zależnie od ustawionych parametrów) można uzyskać na przykład efekt upojenia alkoholowego (bardziej moim zdaniem realistyczny, niż stosowany najczęściej w grach Blur, czyli rozmycie) albo też Motion Blur (rozmycie ruchu):

Feedback - Motion Blur

Drugi to Lens Flare, czyli odblask od Słońca na soczewkach wirtualnej kamery. W przeciwieństwie do niespatchowanego Gothic 3 u mnie Słońce nie prześwituje przez teren i inne obiekty :)

Comments (0) | Tags: rendering engine productions gallery | Author: Adam Sawicki | Share

21:40
Wed
25
Apr 2007

Długi weekend

Od dzisiaj mam (bardzo) długi weekend. Dawno nic nie pisałem... To znaczy tutaj nie pisałem, bo nowego kodu powstało sporo. Skończyłem materiały, światła i cienie. Jest oświetlenie Per Vertex i Per Pixel, jest Bump Mapping i kilka innych rzeczy, jest nawet Environmental Mapping. Nie ma tylko Parallax Mapping (stwierdziłem że jednak go nie zrobię), a cienie (Shadow Mapping) wyszły tak średnio (zwłaszcza LiSPSM, którego używam do świateł kierunkowych, trochę szwankuje).

Postanowiłem teraz wziąć się za Post Processing. Na pierwszy ogień poszły proste efekty zamalowania całego ekranu na jakiś kolor albo jakąś teksturą. Dzisiaj natomiast zrobiłem Bloom:

Bloom

Jeszcze jedno: Jeśli kiedyś rysując na całym ekranie quada albo jeszcze coś innego będziecie zachodzić w głowę dlaczego nie działa Vertex Shader, zamiast stracić godzinę na szukaniu błędu tak jak ja dzisiaj zapamiętajcie, że Vertex Shader po prostu nie uruchamia się, kiedy używamy wierzchołków przetransformowanych XYZRHW.

Comments (0) | Tags: rendering engine productions gallery | Author: Adam Sawicki | Share

23:43
Mon
23
Apr 2007

Poisson Disc Generator

Poisson Disc

Poisson Disc is one of the best methods for determining places from which to sample some data, next to Grid, Random or Jittered methods. It prevents aliasing thanks to random distribution while preserving minimum distance between sample positions not to focus too many samples in a particular region. Unfortunately, an algorithm for generating such samples is slow and we don't know how many points we will manage to generate with specified minimum distance.

That's why I thought it would be useful to have an array of many numbers, each defining new Poisson Disc sample in the way that the more first samples you take, you still have a correct Poisson Disc samples but with more points and smaller minimum distance. I've coded a small console application for generating such arrays of 1D, 2D or 3D points in 0..1 range. I've also generated ready 1000-element arrays. Here you can find the details: PoissonDiscGenerator.

I've called it "Progressive Poisson Disc", described it in my master thesis [PDF, pl], used in my The Final Quest engine [pl] and also integrated into Math module of my CommonLib library.

Comments (2) | Tags: algorithms math productions | Author: Adam Sawicki | Share

14:12
Fri
13
Apr 2007

Dobra dokumentacja na wagę złota

Dokumentacja... Najbardziej znienawidzona część każdego programu. Prawie nikt nie lubi jej pisać, ale wszyscy wiedzą, że jest niezbędna. Dokumentacja jest tym, co najlepiej odróżnia prawdziwy, dopracowany program od eksperymentu/prototypu.

Dla odbiorcy danego programu (czy - przede wszystkim - biblioteki) dobra dokumentacja to nieoceniona pomoc. Zaawansowani tym się właśnie różnią od początkujących, że nie boją się do niej zaglądać, bo wiedzą, że znajdą tam systematyczny i szczegółowy opis każdej funkcji, jej działania i parametrów. Tylko czy na pewno kompletny?

MSDN zawsze pozostaje dla mnie pod tym względem wzorem. Ale już dokumentacji w DirectX SDK można co nieco zarzucić, szczególnie jej części poświęconej D3DX. Oprócz braku rozdziałów opisujących ogólnie sposób używania poszczególnych interfejsów doskwierają liczne drobiazgi. Na przykład:

D3DXMACRO Macros[MACRO_COUNT+1];
for (int i = 0; i < MACRO_COUNT; i++) {
  Macros[i].Name = // ...
  Macros[i].Definition = // ...
}
Macros[MACRO_COUNT].Name = NULL;
Macros[MACRO_COUNT].Definition = NULL;

Comments (0) | Tags: directx philosophy software engineering | Author: Adam Sawicki | Share

09:16
Fri
13
Apr 2007

Substractive Particles

Efekty cząsteczkowe rysuje się zwykle addytywnie - czyli z BlendOp=ADD, SrcBlend=SRCALPHA, DestBlend=ONE. Chcąc uzyskać inne efekty niż świecenie, np. dym albo kurz, uciekamy się czasem do zwykłego alfa-blendingu, czyli BlendOp=ADD, SrcBlend=SRCALPHA, DestBlend=INVSRCALPHA. Wtedy jednak cząstki trzeba sortować wg odległości od kamery.

Ja wymyśliłem sobie kiedyś, że możnaby rysować cząstki subtraktywnie, czyli z BlendOp=REVSUBTRACT, SrcBlend=SRCALPHA, DestBlend=ONE. Odejmowanie tak jak dodawanie jest przemienne, więc nie trzeba niczego sortować (tylko nie łapcie mnie za słówka - tu jest grafika nie matematyka :) a wygląda to, jak się okazuje, całkiem nienajgorzej. Może się przydać do robienia wspomianego dymu, kurzu oraz wszelkich cząstek "mrocznej magii". Trzeba tylko pamiętać że tekstura używana przy takim blendingu musi mieć *odwrócone* kolory - na przykład ta tutaj, żeby wyglądać jak ciemnobrązowa, w oryginale jest jasnoniebieska.

Subtractive Particles

Comments (0) | Tags: rendering | Author: Adam Sawicki | Share

18:23
Thu
12
Apr 2007

HLSL + Point Sprites

Point Sprites to fajny mechanizm. Dzięki niemu możemy rysować D3DPT_POINTLIST, a każdy wierzchołek automagicznie zamienia się w oteksturowany quad zwrócony zawsze przodem do kamery. To jest doskonałe do pisania efektów cząsteczkowych (dopóki nie chcemy mieć wielkich albo obracających się cząsteczek).

Ostatnio zmuszony byłem (przez brak dostępu do osobnych macierzy widoku i rzutowania) zaprzęc do pracy HLSL i wreszcie udało mi się dojść do tego, jak połączyć shader z Point Sprites. Tutaj macie przykład: HLSL_PointSprites.fx. Tak więc:

Comments (0) | Tags: rendering | Author: Adam Sawicki | Share

17:37
Wed
11
Apr 2007

Evaldraw

Evaldraw

Widziałeś wiele filmików, dem i myślisz, że nic cię już nie zdziwi? Zobacz Evaldraw! Kim jest jego autor - Ken Silverman - nie trzeba chyba wyjaśniać. Dość powiedzieć, że to autor silnika Build Engine napędzającego m.in. Duke Nukem 3D oraz autor innowacyjnego silnika wokselowego Voxlap.

Wykorzystana w tym problemie biblioteka Evallib (też oczywiście jego autorstwa), dostępna dla C++ pod Windows w postaci biblioteki OBJ+H (niestety bez źródeł), przyjmuje łańcuch znaków z kodem w specjalnym języku wzorowanym na C, a zwraca... wskaźnik do funkcji skompliowanej do najprawdziwszego kodu natywnego, którą można normalnie wykonywać i która działa niezwykle szybko.

Evaldraw natomiast to program... do wszystkiego. Początkowo podchodziłem do niego sceptycznie obawiając się o jakość jego interfejsu użytkownika albo dokumentacji. Teraz jestem jednak naprawdę zachwycony jego możliwościami jak i wykonaniem. Choć potrafi się czasami wysypać, działa nieźle i przede wszystkim bardzo wydajnie. Mimo własnego interfejsu jest też całkiem intuicyjny. Jest jednocześnie tak potężny, że możnaby o nim napisać długi tutorial gdyby nie to, że... tutaj nie ma się czego uczyć! Całość jego obsługi i możliwości można opanować w ciągu 1-2 godzin.

Spośród możliwości dostęnych z poziomu wbudowanego języka wymienić warto: Rysowanie funkcji 1, 2, 3, 4 zmiennych (jako wykres, kolory na płaszczyźnie, a także woksele w przestrzeni - niestety nie ma siatek) - także animowanych, wczytywanie dźwięków WAVE i obrazków w różnych formatach graficznych (jako funkcje które można swobodnie próbkować), obsługa klawiatury i myszy, bezpośrednie rysowanie grafiki 2D i 3D (OpenGL), synteza dźwięku, wykorzystanie systemowego syntezatora mowy i wiele, wiele innych.

Warto przejrzeć wszystkie 97 dołączonych przykładów, by przekonać się np. jak wygląda Snake 3D, a także zobaczyć jak można napisać niezwykły efekt czy nawet małą grę w kilkudziesięciu liniach kodu. Oprócz zabawy i wywoływania opadu szczęki Evaldraw może się przydać np. do modelowania różnych funkcji. Zawsze brakowało mi dobrego, darmowego programu do rysowania wykresów.

Comments (0) | Tags: rendering tools software | Author: Adam Sawicki | Share

17:13
Wed
11
Apr 2007

Najpiękniejszy wzór

Jaki jest najpiękniejszy wzór w matematyce? Mówi się, że ten który wiąże ze sobą najważniejsze stałe, w tym jednostkę urojoną:

Moim zdaniem jednak najważniejszy wzór to ten na iloczyn skalarny:

Gdyby nie związek liczącego się niezwykle szybko iloczynu skalarnego dwóch wektorow z cosinusem kąta między nimi, trzeba byłoby liczyć go dużo wolniejszymi metodami. Tymczasem bardzo często potrzebny jest właśnie cosinus (częściej nawet niż sam kąt) i mówi on dużo o wzajemnym zwrocie tych wektorów.

Comments (0) | Tags: math philosophy humor | Author: Adam Sawicki | Share

13:50
Sun
08
Apr 2007

Piękne czcionki

Microsoft wraz z nowym Windows Vista i Office 2007 wprowadził rodzinę nowych, pięknych czcionek. Jako szczęśliwy posiadacz Visio 2007 (przysługujące studentowi informatyki w ramach MSDNAA - całego Office niestety nie ma) mam te czcionki na swoim komputerze i jestem nimi naprawdę zachwycony. Wyglądają świetnie jako małe i duże, zwykłe, pogrubione i pochylone. Pośród nich najważniejsze to:

Zobacz też:

Comments (1) | Tags: graphics visual studio | Author: Adam Sawicki | Share

14:56
Tue
03
Apr 2007

Raytracer w SADOL-u

Nigdy bym się nie spodziewał, że znajdzie się ktoś tak zakręcony żeby pisać w ezoterycznym języku SADOL, który wymyślił nooga, a zaimplementowałem ja jako interpreter Badly Developed SADOL Machine 2. Okazuje się, że nooga nie tylko poprawił błędy w mojej maszynie i napisał translator do języka o trochę znośniejszej składni, ale i napisał w SADOL-u... raytracer. Zobaczcie sami:

Comments (1) | Tags: humor rendering warsztat | Author: Adam Sawicki | Share

11:19
Tue
03
Apr 2007

W czym pisać skrypty?

Przychodzi taka chwila, że trzeba napisać mały konsolowy skrypt, który przetworzy jakieś dane z plików tekstowych albo coś wygeneruje. W jakim języku najlepiej go wykonać? Opcji jest wiele:

JScript albo VBScript przez WSH? Bleh... LUA? Jest mała i prosta, ale przeznaczona raczej do osadzania w programach. Pod Windows można sobie też zainstalować dowolny język skryptowy taki jak w Linuksie - np. Python, Perl, PHP, a nawet Bash.

Ja wybrałem PHP. To język który doskonale znam (a to najważniejsze!), który ma bogatą bibliotekę standardową, intuicyjną składnię podobną do C++ i sprawdza się w roli języka skryptowego powłoki równie dobrze jak do pisania stron WWW. Jeśli masz go zainstalowanego, wystarczy że napiszesz skrypt w pliku PHP i obok niego stworzysz taki plik BAT:

@php Skrypt.php
@pause

Comments (1) | Tags: scripts | Author: Adam Sawicki | Share

STAT NO AD [Stat] [Admin] [STAT NO AD] [pub] [Mirror] Copyright © 2004-2017 Adam Sawicki
Copyright © 2004-2017 Adam Sawicki