Trawa

•luty 27, 2009 • 8 komentarzy

Hej!

Skoro założyłem sobie, iż będę pisał o największych nawet bzdurach, byleby pisać jakiekolwiek notki, oto jest – trzecia notka w Lutym. :P

Tak więc przez ostatnie parę dni pracowałem nad trawą. Pomyślałem sobie, że trawę chciałem napisać od dawna, a jednak wydawała mi się prosta i zawsze odkładałem te plany. Wczoraj jednak wziąłem się w garść – tak powstało coś takiego:

image

Dorzuciłem jeszcze parę drzewek ściągniętych (znaczy – ukradzionych) z jakieś strony internetowej, bo sama łąka pełna trawy wyglądała pusto. ;)

W każdym razie, sprawa okazała się nie tak banalna – ponieważ miałem problem projektowy. Na początku rysowałem trawę z włączonym Alpha Blendingiem i wyłączonym zapisem Z. Jednak wtedy trzeba sortować pojedyńcze kępki według odległości od kamery (od tył) – co też oznacza, że musimy rysować je osobnymi DIP-ami, albo pakować do dynamicznych VB/IB co klatkę. Oba rozwiązania średnio mi się podobały pod względem wydajnościowym. Jednak, jako że nie wpadłem na nic lepszego – pakuję wszystkie kępki do jednego bufora w preprocessie, a wyświetlam z wyłączonym blendingiem i włączonym ZWrite – używając jedynie Alpha Testu. Nie wygląda to gorzej, a lepszego pomysłu na rozwiązanie tego problemu nie mam. W arcie opisującym tworzenie trawy w GPU Gems w ogóle o tym zagadnieniu zaś nie piszą. :)

Na koniec notki, mała dygresja. Wzorując się na Gynvaelu zwracałem ostatnimi czasy na frazy pod jakimi wyszukiwarki podwały adres mojego bloga. Spośród wielu zwykłych, znajdują się dwie perełki – rysowanie urządzeń, oraz coś, co kompletnie mnie zaskoczyło: vertex shader za darmo. Oto pragnę uświadomić każdego, kto odwiedza mojego bloga a jeszcze o tym nie wie – jeśli kiedykolwiek płaciliście za możiwość pisania własnych vertex shaderów – zostaliście oszukani. :P

Compo 2h i Screen Tygodnia

•luty 21, 2009 • 6 komentarzy

Hej!

Na początek mała dygresja – tą i poprzednią notką postanowiłem przełamać trochę konwencję tego bloga. Od dzisiaj nie będę pisał tu o tym, co działo się miesiąc temu jednocześnie oszukując was że nie miałem czasu pisać (no dobra, zazwyczaj nie oszukuję, po prostu nicnierobienie pożera cały mój czas i faktycznie go nie mam). :) Dlatego też możecie spodziewać się notek o tym, o czym tylko da się napisać. ;)

Oto więc mniej-więcej w połowie lutego meehav zorganizował Compo 2h. Szlachetna ta inicjatywa tym razem nie spaliła na panewce i udział wzięło 11 (!) osób. Mi przyszło zająć zaszczytne trzecie miejsce, wespół z naisho. Aby to osiągnąć wystarczyło D3DXCreateTeapot i trochę klepania kodu, którego nigdy w  życiu nikomu bym nie pokazał – z tej mieszanki wyszedł taki oto arkanoid:

image

Gra moja jest o tyle dopracowana i grywalna, że da się w nią przegrać – co nie jest wcale takie oczywiste. :)

scrn

Drugim niusem jakim chcę się podzielić jest to, że zaimplementowałem futro. Nie byłoby w tym nic ciekawego, gdyby nie to, że postanowiłem z tegoż futra wrzucić screen na Warsztat – w ciągu paru godzin uzyskał on 2k punktów stając się Screenem Tygodnia. Jako że screen jest w gruncie rzeczy brzydki, to czuję się zobligowany zaznaczyć, że nie mam z tym nic wspólnego ;P

Futro natomiast zaimplementowałem metodą Shells and Fins – polega ona na “wyciąganiu” geometrii wzdłuż normalnej, a następnie teksturowaniu jej odpowiednio spreparowaną teksturą wolumetryczną – to shells (nieudolne tłumaczenie – skorupki). 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.

Na koniec tej notki, dla porównania z efektem końcowym, pierwsza próba z futrem.

// Disclaimer: screen ma charakter humorystyczny. Jego biedność nie może być podstawą do naśmiewania się z autora. :P

image

Kolorowanie składni plików .fx i podpowiedzi.

•luty 15, 2009 • 3 komentarzy

Hej!

Do edytowania shaderów powstało wiele programów. Najpopularniejsze to FX Composer firmy NVIDIA oraz RenderMonkey ATI. Programy te to jednak kombajny o wielkich możliwościach, więc nigdy nie chciało mi się uczyć ich obsługiwać. Do prostego edytowania shaderów używam więc Visual Studio.

Podpięcie kolorowania składni jest proste. Wystarczy ściągnąć paczkę z keywordami oraz Build Rule dla Visuala. Następnie oba pliki kopiujemy do katalogu Microsoft Visual Studio 9.0\Common7\IDE. Następnie odpalamy IDE, wchodzimy do opcji Visuala i ustawiamy jak na obrazku:

image

Od teraz mamy kolorowanie składni plików .fx. Za każdym razem, kiedy chcemy kompilować w projekcie pliki .fx, wystarczy kliknąć PPM na projekt, oraz wybrać Custom Build Rules…

image

…gdzie zaznaczamy .fx-build rule.

image

Od tej chwili możemy kompilować shadery z poziomu IDE, wraz z kolorowaniem składni. Nie działa jednak Visualowe Intellisense.

Zaradzić temu można używając Visual Assist X. Wystarczy odpalić rejestr i odszukać HKEY_CURRENT_USER\Software\Whole Tomato\Visual Assist X\VANet8 (lub 9, zależnie od wersji Visuala której używamy). Następnie szukamy klucza ExtSource i dopisujemy tam .fx; (pamiętamy o kropce i średniku). Następnie zamykamy rejestr, odpalamy IDE, wchodzimy do zakładki Performance w oknie Options VA:X-a i klikamy Rebuild. Restartujemy IDE.

image

Tak oto nasz VS potrafi kolorować składnie na modłę VA:X-ową, oraz podpowiadać nazwy:

image

Niestety, VA:X nie jest w stanie podpowiedzieć typów charakterystycznych dla HLSL. Ale i tak, jest to dużo wygodniejsze niż pisanie bez tego udogodnienia. :)

Dwa i pół miesiąca z życia łże-kodera

•styczeń 28, 2009 • 3 komentarzy

Witam!

Tak oto minęło dwa i pół miesiąca od ostatniej notki. Sprawa niespecjalnie dziwna, biorąc pod uwagę, że raczej rzadko mam wenę aby pisać tutaj, jednak od czasu do czasu – trzeba. Ostrzegam jednak na wstępie – notka będzie wybitnie nudna i utrzymana w konwencji dlaczego-nie-pisałem-nic-na-blogu. :)

Zacznijmy od początku – szkoła. Ten nieboski wynalazek nie pozwala skupić się na niczym; nawet na sobie! Niestety, brak skupienia zaowocował bardzo niską średnią ocen – i samoocen – na semestr. ;) W każdym razie, niezrażony tym niepowodzeniem, śmiało brnę w nicnierobienie dalej.

Z rzeczy, które mogą kogośtam gdzieśtam zainteresować, podjąłem się prowadzenia WMaga ([1][2]). Jestem pozytywnie zaskoczony wynikiem, gdyż już pierwszy mój numer zyskał dosyć przychylne opinie jednego z najlepszych WMagów ever. Cieszę się z tego i mam nadzieję, że gazetka będzie równie pozytywnie odbierana jak dotąd.

Poza tym, nie dotknąłem kodu od czasu ostatniej notki. Tak właśnie, nic nie napisałem. Głównie przez brak czasu oraz chęci, a może małą zmianę priorytetów. Kodowanie nie bawi mnie tak jak dawniej! A może znalazłem inne zajęcia? Nie wiem, w każdym razie – ostatni commit na SVN mojego silnika miałem jakieś 3 miesiące temu.

Niepisanie prywatnego kodu oczywiście nie przeszkodziło mi napisać paru nowych części tutoriala Direct3D, który powstaje sobie spokojnie, acz stale. ;)

Małe Update`y

•listopad 4, 2008 • 2 komentarzy

Kolejna notka po dwóch miesiącach. Tak, tak, wiem że obiecywałem częste notki i dalsze części kursu. Jednak było to 31 Sierpnia. Już drugiego Września spadł na mnię kubeł zimnej wody. Liceum to nie taka prosta sprawa. Większość czasu zżerają mi dojazdy z i doń, ponad godzina w jedną stronę. Często wracam do domu po 18, a czasem później. Poza tym, właściwie zacząłem poznawać swoje miasto, chodząć często wieczorami – poprostu przestałem spędzać każdą wolną chwilę pracując z komputerem!

No, ale nie ma co marudzić. Nie działo się tu nic nowego od dawna, ale (znowu!) postaram się pisać tu częściej. Głownym problemem, prócz chronicznego braku czasu, jest brak pomysłów na notatki. Również Kurs D3D powstaje (a jak!) dosyć powoli.

Ale co to byłby za wpis, gdybym marudził bez ładu i składu. Toteż przyznam się – trzecim (no dobra, naciąganym ;) )  powodem, dla którego jest tu niewiele update`ów jest pewien projekt. NIe jest on zbyt skomplikowany, kod jest już dosyć daleko posunięty, a pisany był (od podstaw w D3D) może z dwa tygodnie, “po godzinach”. Jest to gra wyścigowa; ścigamy się różnymi ciekawymi pojazdami (znaczy, dopóki nie poszukam grafika ścigamy się sferami), po dziesiątkach różnorodnych terenów (jak znajdę grafika – narazie po jednym terenie, złożonym z paru sfer ;] ). Nie ma jednak ograniczonego toru, gracz zaś może przelatywać przez mapę w dowolny sposób – byleby zaliczył wszystkie checkpointy w odpowiedniej kolejności. Zaimplementowany mam in-game edytor map, gameplay oraz kilka pomniejszych efektów graficznych (normalmapping, bloom – tu wyłączony, oraz cubemapping). Do zaimplementowania zostało GUI, menu, a także udźwiękowienie.

Na koniec może parę screenów:

pipe1 pipe2 pipe3