July 2007

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

13:52
Mon
30
Jul 2007

Inna grafika

Czasami myślę sobie, że programowanie renderowania grafiki innej niż tradycyjne wyświetlanie geometrii mapy Indoor czy siatki terenu Outdoor z animowanymi postaciami i skyboksem nieba - na przykład kosmicznej jak w grze Eve Online czy jakiejś zupełnie odjechanej, jak w filmie Tron, też byłoby ciekawe, a przy tym dużo prostsze. Cóż... na coś trzeba się zdecydować.


Tron


Eve Online

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

23:52
Sat
28
Jul 2007

Szum perlina

Fajnie mieć pod ręką proste funkcje takie jak:

float PerlinNoise3(float x, float y, float z);

generujące szum wynaleziony przez Kena Perlina. Wygląda na to, że tak naprawdę formalnie szum perlina to ciągła funkcja pseudolosowa jednej lub wielu zmiennych o "częstotliwości" równej np. 1, a to co nazywamy zazwyczaj szumem perlina - ta funkcja używana m.in. do generowania chmur albo mapy wysokości terenu, posiadająca oktawy - nazywa się Fractional Brownian Motion. Mniejsza o nazwy - ja od dzisiaj w swojej bibliotece mam obie :) Mowa oczywiście o bibliotece CommonLib.

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

14:41
Sat
28
Jul 2007

Renderowanie ducha

Przeglądając różne teksty nie mogę oprzeć się pokusie czytania o różnych ciekawych rzeczach, które akurat napotkam. Dzięki jednej z nich wiem już, jak renderować duchy :) Pomocny jest tu tzw. Fresnel Term - prosty wzór, którego jednak nie nauczają razem ze wzorami Lamberta, Phonga czy Blinna na oświetlenie Diffuse i Specular. Chodzi o "podświetlanie" powierzchni tym bardziej, im bardziej są zwrócone prostopadle do kamery. Załatwia to oczywiście iloczyn skalarny z wektorem normalnym. Ten wzór nadaje się jako dodatek do normalnego oświetlenia, ale można go też wykorzystać tak jak tutaj - wyłączyć Backface Culling i zapis do Z-bufora, ustawić addytywny alfa-blending i oto jest skodzony na szybko duch słonia:

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

21:59
Fri
27
Jul 2007

Valve Steam - Survey Results

SURVEY RESULTS - bardzo ciekawe znalezisko. Prezentuje wyszpiegowane przez mechanizm Steam (aktualne!) dane statystyczne dotyczące sprzętu posiadanego przez korzystających z niego graczy. To dane dotyczące całego świata i niekoniecznie adekwantne do warunków polskich, ale warto zobaczyć ile statystyczny Kowalski czy raczej Smith ma pamięci RAM, jaką ma kartę graficzną, jaki duży dysk i ile wolnego miejsca na nim, jaki procesor, jaką wersję sterowników graficznych, jaki system operacyjny i dużo innych rzeczy.

Comments (0) | Tags: web hardware | Author: Adam Sawicki | Share

20:33
Fri
27
Jul 2007

Architektura całej gry

Architektura całej gry, choć nie o nią mi w obecnej chwili chodzi, przewija się w literaturze którą obecnie analizują i też mnie interesuje. Szczególnie, że ilekroć staję przed tym zadaniem, zawsze mój kod zamienia się w jedną wielką kulę błota, w której wszystko korzysta ze wszystkiego beztrosko rzutując klasy w dół hierarchii dziedziczenia. Ciekawy wątek forum na ten temat jest TUTAJ.

Wyczytałem właśnie, że architekturę gry można podzielić na:

Wprowadzanie takich podziałów wydaje się trochę na siłę, szczególnie że można tu wymyślić jeszcze dużo innych opcji. Gdzieś kiedyś na forum pisali nawet o takiej, w której każdy obiekt gry posiadać ma swoje pod-obiekty odpowiedzialne za grafikę, dźwięk, fizykę itd. Tylko czy coraz większe komplikowanie rozwiązuje ten i tak skomplikowany problem? :)

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

15:23
Fri
27
Jul 2007

Kwestia shaderów

W kwestii shaderów używanych do rysowania wszelkich obiektów (na czele ze zwykłymi, nieprzezroczystymi powierzchniami o określonych parametrach materiału) można wymyślić trzy rozwiązania różniące się trudnością:

1. Sposób najprostszy to stały, napisany wcześniej zestaw shaderów. Każdy z nich byłby uniwersalny w jakimś zakresie. Dostępny w nowych kartach Static Branching i Dynamic Branching pozwalają włączać i wyłączać poszczególne fragmenty, aczkolwiek mnie i tak szkoda byłoby marnować instrukcje na sprawdzanie warunku zamiast wygenerować osobny shader bez danego fragmentu.

2. Metoda subtraktywna: Można napisać jeden albo kilka wielkich shaderów posiadających wszystkie potrzebne możliwości, w których źródle znajdą się warunki typu if (MAKRO == 1) albo też #if (MAKRO == 1). Taki kod będzie kompilowany na żądanie z odpowiednimi makrami preprocesora jako konkretny shader. Tak mam zrobione obecnie.

3. Metoda addytywna, najtrudniejsza: Przed kompilacją składać kod shadera z fragmentów w postaci definiowanych jakoś w tekstowy albo graficzny sposób bloczków, których wyjścia jednych łączy się z wejściami innych.

Nie wiem, który sposób będzie najlepszy.

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

10:20
Thu
26
Jul 2007

Silnikologia Teoretyczna

Wieści z pierwszej linii frontu (walki o lepszy silnik): Doszedłem na razie do tego, że do studiowania silnikologii podejść można z trzech stron. Po pierwsze, można czytać teksty. Większość rzeczy i tak pewnie trzeba będzie wymyślić samemu, a z tekstów najwięcej pomogą artykuły i rozdziały książek na temat konkretnych rzeczy (np. renderwowania terenu albo podział przestrzeni), ale udało mi się dowiedzieć o kilku książkach ogólnie na temat. Nauczyłem się rozróżniać, że "3D Game Engine Programming", "3D Game Engine Design" i "3D Game Engine Architecture" to trzy różne ksiażki. Na początek dobre i tyle :)

Po drugie, można analizować kody istniejących silników np. Ogre3D albo Irrlicht. To trudne, ale moża uda się podpatrzeć jakieś ciekawe rozwiązania.

Po trzecie, nieuchronnie trzeba będzie zaprojektować swój silnik. Najlepiej chyba wyjść od ogólnego celu i założeń, potem wypisać funkcje jakie ma posiadać, a potem zastanowić się nad szczegółami wewnętrznymi, czyli jak to zrealizować. Co do tych ostatnich, najtrudniejsze problemy to moim zdaniem:

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

13:29
Wed
25
Jul 2007

Filozofia #2 - Układ odniesienia

Jakie współrzędne ma punkt? To oczywiście zależy od układu odniesienia. W grafice 3D stosujemy różne układy współrzędnych - współrzędne globalne świata, współrzędne lokalne modelu, kamery, Image Space, Bone Space, Interial Space i jeszcze inne.

Wielu ludzi stara się zrobić coś w ich mniemaniu wielkiego, coś co inni docenią, za co będą podziwiani, co po nich zostanie. Wtedy przychodzi ktoś drugi, kto robi to samo szybciej, lepiej, albo ktoś kto stwierdza, że to wszystko jest głupie i bez sensu. I wg swoich kryteriów ma rację.

Wszystko jest względne. Tym lepiej się żyje, im szybciej człowiek to zauważy i się z tym pogodzi. Gdziekolwiek w przestrzeni jesteś, zawsze ktoś może znaleźć układ odniesienia, w którym twoja pozycja wynosi zero.

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

20:40
Mon
23
Jul 2007

Bezszwowe tekstury i High Pass Filter

Nauka robienia bezszwowych tekstur - dwa ważne kroki. Pierwszy to transformacja Offset, którą w GIMP-ie znajdziesz w menu Layer > Transform > Offset. Dzięki niej można pracować nad złączeniem na krawędziach, a potem wrócić do początkowego przesunięcia.

Drugi to filtr górnoprzepustowy - High Pass Filter. Co on robi? Świetny artykuł na jego temat jest tu: The Power of the High Pass Filter. GIMP nie ma tego filtru, ale jego efekt można zrobić tak:

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

18:55
Mon
23
Jul 2007

Biblioteki - gotowe czy własne?

Wyczytałem wczoraj przy okazji w jednym z artykułów na GameDev.net, że potencjalnemu pracodawcy bardziej spodoba się, kiedy zobaczy, że programista w swojej amatorskiej produkcji skorzystał z gotowych bibliotek (co jakoby dowodzi jego umiejętności używania cudzego kodu i skupiania się na swoim celu), niż gdyby pisał wszystko samemu (co pokazuje jego umiejętności programistyczne). Ciekawa teoria. Brzmi całkiem logicznie.

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

20:19
Sun
22
Jul 2007

The Final Quest 7

Animacja szkieletowa już (prawie) działa, ale kod się odrobinę zamotał i chyba najwyższy czas wziąć się za studiowanie literatury tudzież inne poważne przygotowania do mojej pracy magisterskiej, a innymi słowy za zaprojektowanie i napisanie siódmego już (i - za każdym razem sobie to obiecuję - ostatniego) podejścia do mojego silnika. Wyjdzie mi pewnie że nie jest tak źle i trzeba tylko trochę zmienić a potem pisać dalej, ale to się okaże.

Mówią, że podstawą jest abstrakcja. Ale jak tu uogólnić rzeczy takie jak efekty postprocessingu typu Heat Haze czy Bloom, kiedy każdy z nich działa w zupełnie inny sposób i wymaga innej obsługi? Jak sortować obiekty wg materiału, tekstury czy shadera, jeśli każdy powinien sam siebie odrysować i ukryć w sobie sposób, w jaki to robi? Jak rozdzielić parametry obiektów, materiałów i świateł, kiedy one i tak muszą się razem spotkać w chwili kompilowania i ustawiania shadera? Na te wszystkie pytania znam jakieś odpowiedzi, ale niezbyt mnie one zadowalają. Macie może jakieś dobre materiały na ten temat?

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

15:20
Sun
22
Jul 2007

Moja własna sonda

To zaskakujące, jak łatwo jest obecnie zdziałać coś w Internecie. Wymyślając ot tak, hasło do Google "darmowe osobiste sondy" już po dwóch sekundach znalazłem stronę www.websonda.pl, a po następnych minutach miałem swoją własną sondę w wybranych kolorach.

Może kiedyś napiszę, co myślę o tym wszystkim co się obecnie dzieje w Sieci. Tymczasem zapraszam do głosowania, ale podkreślam, że to tylko zabawa i nie obiecuję, że zastosuję się do wyników :)

Comments (0) | Tags: web teaching | Author: Adam Sawicki | Share

17:54
Sat
21
Jul 2007

Filozofia #1

Kiedy człowiek ma dużo wolnego czasu, to za dużo myśli i przychodzą mu do głowy różne dziwne rzeczy. Dlatego to jest pierwsza cyklu notek filozoficznych. Wszystkich zdegustowanych czytelników mojego bloga przepraszam i obiecuję, że kiedyś mi to przejdzie :)

Myślałem sobie mianowicie o tym, jak wiele czasu potrzeba, by stworzyć cokolwiek - czy to będzie napisanie książki, zrobienie swetra na drutach czy napisanie jakiegokolwiek, małego nawet programu albo gry. Wielokrotnie więcej, niż wydawałoby się komuś niewtajemniczonemu albo początkującemu programiście. A czas mija nieubłaganie. Dlatego trzeba jak najstaranniej dobierać sobie zadania do wykonania - zarówno duże projekty, jak i te drobne sposoby na ich zrealizowanie.

Inna związana z tym sprawa to paradoks, że niejednokrotnie boimy się i nie możemy się zabrać za zrobienie czegoś, co w końcu zajmuje nam nie więcej niż 15 minut (np. zadana w szkole praca domowa), a innym razem angażujemy się w coś małego, co niespodziewanie zabiera wiele dni. Dlaczego tak jest? Moim zdaniem dlatego, że tym, czego podświadomie się boimy jest wysiłek, a to, co liczy się naprawdę to czas - dwie różne rzeczy.

Jeszcze inna kwestia to motywacja, która może wielokrotnie przyspieszyć robienie czegokolwiek. To jednak nie jest lekarstwo na wszystko - bo dlaczego firmy informatyczne nie zatrudnią po kilku młodych genialnych amatorów z motywacją zamiast armii tak niewydajnych w porównaniu z nimi programistów? O tym pisze Frederick Brooks w książce "Mityczny osobomiesiąc".

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

14:32
Tue
17
Jul 2007

Compile (Ctrl+F7)

To drobiazg, pewnie każdy o nim wie. Jeśli by ktoś jednak nie wiedział, warto się dowiedzieć, że w Visual C++ bardzo przydatne jest polecenie Compile (Ctrl+F7). Kompiluje tylko bieżący plik CPP, a nie cały projekt. Dzięki temu możesz szybko sprawdzić, czy napisany kod się kompiluje bez błędów i...

Odkryłem to polecenie już dawno temu, ale dopiero teraz uświadomiłem sobie, że jego potęga wcale nie musi być taka oczywista na pierwszy rzut oka.

Comments (0) | Tags: visual studio c++ | Author: Adam Sawicki | Share

21:55
Mon
16
Jul 2007

Kalkulator programisty gier

Wpadłem też dzisiaj na pomysł na pożyteczny program. Nie od dziś dręczy mnie z resztą od czasu do czasu potrzeba szybkiego policzenia znormalizowanego wektora czy przyciemnionego koloru. Ten pomysł to Kalkulator programisty gier, który pozwalałby na obliczenia na wektorach, macierzach czy kolorach. Co o tym sądzicie? Może kiedyś taki napiszę...

Ogólnie wszystkim którzy narzekają na wakacyjną nudę polecam na mojej stronie dział Download. Czasami wrzucam tam różne dziwne rzeczy, o których nawet nie piszę tutaj na blogu.

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

19:29
Mon
16
Jul 2007

Jednak jest nadzieja

Na forum Warsztatu mi nie odpowiedzieli, ale nie poddałem się i napisałem na forum Blendera. To był dobry pomysł. Niejaki ideasman42 rozwiązał mój problem w najlepszy możliwy sposób - odkrył, że to był mój błąd, w dodatku bardzo elementarny, związany z nieznajomością języka Python (co się dziwić - nauczyłem się go tylko na potrzeby napisania tego eksportera). Jest więc nadzieja na animację szkieletową z Blendera...

Dziś odkryłem (wymyśliłem na spacerze, a potwierdziłem wyprowadzając wzór na kartce), że zamiana macierzy z układu współrzędnych Blendera na DirectX i odwrotnie (gdzie zamiana punktu czy wektora to po prostu zamiana współrzednej Y z Z) polega na zamianie miejscami zarówno trzeciej z czwartą kolumną, jak i trzeciego z czwartym wierszem. To ciekawe, że jeszcze nigdy nigdzie w literaturze czy w Sieci nie spotkałem tego zagadnienia. Każdy tekst skupia się na używaniu jednego układu współrzędnych i żaden nie pokazuje, jak przechodzić między nimi. Jeszcze tylko wymyślę, jak prawidłowo przekształcać między tymi układami kwaternion i kolejny element układanki będzie gotowy :)

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

22:33
Sat
14
Jul 2007

Blender - ale dół

Dwa tygodnie nauki Blendera, przypominanie sobie Pythona, pisanie eksportera - tyle roboty na marne. Dziś skończyłem pisać wczytywanie statycznych siatek i wszystko zadziałało OK. Że Blender zwraca jakieś dziwne wektory normalne to zniosłem - policzyłem je sobie sam używając NVMeshMender - razem z wektorami Tangent i Binormal, których Blender w ogóle nie ma, bo nie używa Tangent Space, a Normal Mapping obsługuje tylko w Model Space. Zacząłem więc ochoczo pisać eksport szkieletu o oto co się okazało...

Blender zwraca do skryptu jakieś losowe liczby zamiast pozycji kości! Tego sobie już sam nie wyczaruję. Sprawdziłem to wiele razy, wyizolowałem ten bład i przygotowałem skrypt testowy: HorribleBlenderArmatureBug.py. Testowałem na wersji Blender 2.44, ale kiedy znalazłem na Google ten temat forum, zwątpiłem czy użycie wcześniejszej wersji rozwiąże problem. Najwidoczniej ludzie borykali się z tym już w 2005 roku, a jako odpowiedź można przeczytać że "być może komuś jednak udało się poprawnie wyeksportować animację" oraz żeby spróbować innych programów do modelowania.

Chciałbym żeby to był mój błąd, ale niestety nic na to nie wskazuje. Blender zyskuje więc dla mnie nowy, trzeci przydomek - "Niedorobione Oprogramowanie" (kto pamięta drugi? :)

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

19:30
Sat
14
Jul 2007

Robak w monitorze

Jeden kolega z Warsztatu padł dzisiaj ofiarą owada, który dostał się do matrycy w jego laptopie, gdzie w okolicy środka zdechł pozostawiając całą grupkę popsutych pikseli. Tenże kolega znalazł w Sieci dowód, że nie jest pierwszym, który zetknął się z tym dziwnym zjawiskiem (zobacz). Czy ktoś z was słyszał wcześniej o czymś takim? Sprawa wydaje się bardzo egzotyczna i śmieszna - śmieszna przynajmniej do czasu, aż spotka nas samych. Tak oto mam kolejny argument przeciwko monitorom LCD i laptopom :))

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

21:34
Thu
12
Jul 2007

XNL2 do kosza

Wymyśliłem kiedyś język opisu XNL2 i wiem, że kilku osobom nawet się spodobał. Teraz doszedłem do wniosku, że był oparty na błędnych założeniach i w związku z tym ogłaszam koniec "dorabiania ideologii do tokenizera", jak to jeden mój kolega kiedyś trafnie skwitował.

Zachęcam, by zamiast używać XNL2 czy innych takich wynalazków albo pisać coś w tym rodzaju samemu, skorzystać z modułu Tokenizer z mojej biblioteki CommonLib 6.1 (zobacz też online nagłówek i dokumentację). Jest dużo lepiej przemyślany, prostszy w użyciu, a co najważniejsze - parsuje język przypominający tokeny C/C++, a więc z takimi komentarzami i łańcuchami znaków, do jakich jesteśmy przyzwyczajeni. Taki tokenizer może być dobrą bazą do szybkiego zaprojektowania i zaimplementowania własnego języka opisu.

Comments (0) | Tags: libraries productions algorithms | Author: Adam Sawicki | Share

18:08
Wed
11
Jul 2007

Blenderowanie

Przesiedziawszy jakieś dwa tygodnie nam manualem przypomniałem sobie już chyba, jak się obsługiwało Blender i dowiedziałem się wielu nowych rzeczy. To co udało mi się zamodelować można obejrzeć tutaj: Galeria - Blender.

Jednak zdania na temat interfejsu Blendera nie zmienię. Na poparcie swojej opinii napisałem mały testowy program w C#, który pokazuje róznicę między tradycyjnym, a blenderowym podejściem do rzeczy tak prostej jak lista napisów. Na dwóch zakładkach można na dwa sposoby robić te same rzeczy - czyli dodawać, usuwać i zmieniać nazwy elementów na liście. Zapraszam do pobrania i samodzielnego przemyślenia, czy podejście z zakładki drugiej ma jakiekolwiek inne zalety niż tylko mniej miejsca, jakie zajmuje na powierzchni okienka? :P BlenderSux.exe (24 KB).

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

13:13
Wed
11
Jul 2007

Blender Texture CD

Ciekawym znaleziskiem jest "Blender Texture CD". Po rozpakowaniu znajdziesz tam 250 MB tekstur, a także drobiazgi takie jak wtyczki i materiały do Blendera. Tekstur jest dość dużo, są w dobrej jakości, w rozdzielczości różnej (raczej nie potęgi dwójki), niektóre (niestety nieliczne) są bezszwowe (rozkładalne sąsiadująco? tilowalne? jak to się mówi po polsku?). Najważniejsze, że całość dostępna jest na licencji Public Domain.

Comments (0) | Tags: graphics web | Author: Adam Sawicki | Share

12:46
Sun
08
Jul 2007

Blender - pozytywnie

Uczę się ostatnio dokładnie obsługi Blendera (od czasu kiedy zajmowałem się nim ostatnio 2 lata temu sporo już zapomniałem) i choć nadal twierdzę, że jego interfejs jest niefajny mimo że już go dobrze znam, tym razem chciałbym napisać o programie pozytywnie. Otóż Blender jest niesamowicie wypasiony. Posiada ogromną ilość zaawansowanych funkcji tak do edycji siatki, jak i do teksturowania, ustawień materiałów, ustawiania obiektów na scenie, posiada stos modyfikatorów jak 3D Studio MAX, posiada (w nowej wersji 2.4) funkcje rzeźbienia jak w ZBrush, posiada zaawansowane unwrapowanie siatki... Profesjonalni graficy na pewno widzą przepaść między nim a drogimi profesjonalnymi narzędziami, ale ja widzę przepaść względem darmowych czy tanich narzędzi typu Milkshape albo Anim8or, które posiadają tylko absolutne minimum niezbędnych funkcji. Dlatego myślę, że Blender to jednak najlepszy wybór spośród darmowych programów do modelowania 3D.

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

23:02
Tue
03
Jul 2007

Modelarstwo

Było już materiałoznawstwo, teraz czas na modelarstwo :) czyli muszę wreszcie wczytać jakiś model (siatkę). Zupełnie zielony w temacie nie jestem, bo wczytywałem już w życiu formaty OBJ, MD2 i 3DS. Animacji szkieletowej, to przyznaję, jeszcze nie robiłem. Teraz chciałbym napisać to porządnie.

Jak radzicie się do tego zabrać? Wczytywać gotowy format (najfajniejszy jest chyba MD5) czy zaprojektować własny? Napisać do własnego formatu konwersję z innych formatów, czy bezpośredni eksport z programu graficznego? Który program do modelowania jest dobry? Znam mniej więcej Blender, niczego komercyjnego nie chciałbym piracić. Milkshape się bawiłem, ale nie przypadł mi do gustu - poza tym skończył mi się okres próbny. Dziś odkryłem darmowy Anim8or - co o nim myślicie? Czekam na komentarze.

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

12:07
Tue
03
Jul 2007

motyka.png

Nie wiem jak to możliwe, ale dopiero dziś zauważyłem co jest na obrazku, który w swojej stopce na forum ma Queight. To jest świetne :) Powinno być logo każdego z nas - programujących z pasją i ambicjami. Zobaczcie sami:

Motyka Queighta

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

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