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

•Luty 15, 2009 • 8 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. :)

Reklamy

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

•Styczeń 28, 2009 • 3 Komentarze

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 Komentarze

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

Nowości

•Sierpień 31, 2008 • 3 Komentarze

Hej!

Nie pisałem od dawna. Było to spowodowane przede wszystkim wmożoną moją aktywnością „pozakomputerową” na koniec wakacji. Używając komputera jedynie chwilami, nie miałem za bardzo czasu na dodawanie nowych notek. Na szczęście, zaczyna się szkoła, a więc czas odpoczynku (;)) – dlatego też w najbliższym czasie można spodziewać się znaczących update`ów i nowych części Kursu D3D, oraz w miarę regularnych wpisów na tym blogu.

Od jakiegoś nosiłem się z chęcią zmiany Windowsa XP na inny system. Myślałem o Viście, jednak ta jest trochę ciężka, jak na mój nienowy komputer. Postanowiłem więc spróbować jednego z alternatywnych systemów operacyjnych. Mój wybór padł na Windows Server 2008 – mimo, iż jest to serwerowy sysop, bardzo łatwo da się przystosować go do pracy w charakterze stacji roboczej. Poza tym, jest lekki i, co ważne, mogę na nim pisać w D3D10. No, przynajmniej teoretycznie. ATI znów popisało się swoją wirtuozerią pisania sterowników, więc żaden z oficjalnych naturalnie nie działa, wywalając pięknego BSoD-a w czasie bootowania. Napotkałem już ten problem wcześniej, więc postanowiłem poszukać alternatywnych sterów – niestety, bezskutecznie. Omeg jeszcze nie ma, zaś nic innego poprostu nie znalazłem. Cóż, pozostaje czekać…

Nie kodowałem również wiele. No, w sumie to nic nie kodowałem. Między innymi dlatego postanowiłem dołączyć do projektu Warsztatowej Gry. Projekt nieprawdopodobny, ale ma szansę się udać – co z resztą czas pokaże.

Kończąc tę notkę, chciałbym napisać o polskiej grupie scenowej – Plastic. Na tegorocznym NVISION[1][2], jak już zwykle, zaprezentowali bardzo smaczną produkcję Into The Pink, zajmując drugie miejsce w compo. Pomimo względnie technicznie nieskomplikowanych efektów, demo dzięki wyśmienitej muzyce oraz przedniej pracy kamerą bardzo mi się podobało. Poniżej kilka screenów:

plastic snapshot1

 

snapshot3 snapshot4

Co w shaderze piszczy?

•Czerwiec 26, 2008 • 2 Komentarze

Hej!

Przeglądając forum Warsztatu, oraz siedząc non-stop na kanale #warsztat słyszę, iż początkujący w dziedzinie grafiki 3D mają bardzo dużo wątpliwości co to są shadery, jak działają oraz jak ich używać. W wielu wypowiedziach można dostrzec tendencję, do wyolbrzymiania problemów związanych z tym zagadnieniem, oraz nieznajomość tego, niezbędnego dzisiaj, narzędzia objawiającą się irracjonalnym, panicznym wręcz strachem sięgnięcia po te cudowne mechanizmy. Powodowane jest to między innymi (moim zdaniem przynajmniej) ogromem możliwości, który przerasta adeptów tej dziedziny, oraz – a może przede wszystkim – brak przystępnych „tutoriali” omawiających tę dziedzinę; jedynym, w polskiej sieci, omawiającym shadery w ogóle jest (notabene bardzo dobry) tutorial Robala. Mówi on jednak jedynie o shaderach SM1, assemblerowych.

Motywowany tym, postanowiłem napisać tę notkę (jako, że lepszego tematu i tak nie miałem, a a nuż komuś się przyda ;) ). Mam zamiar wyjaśnić tutaj chociaż część tych wątpliwości. Zacznijmy:

  • Shadery są szybsze czy wolniejsze od Fixed Pipelnine?

Shadery są zamiennikiem Fixed Pipeline. Nie są ani szybsze, ani wolniejsze – są inne, a przede wszystkim ich prędkość zależy od tego co tam sobie napiszemy! Mechanizmy te dają nam pełną kontrolę (no, prawie…) nad obliczeniami prowadzonymi przez kartę grafiki dla każdego wierzchołka i piksela. Innymi słowy, możemy zrobić z naszymi vertexami i fragmentami to samo co „robi” Fixed Pipeline szybciej lub wolniej – zależnie od chęci i umiejętności.

  • Shadery to takie brzydkie, assemblerowe programiki w których nie wiadomo o co chodzi!

Nieprawda. Mamy dzisiaj dostępne co najmniej 3 języki wysokiego poziomu pozwalające na wygodne pisanie shaderów w profilach od SM1 do SM4.1. Assembler GPU teraz przydaje się właściwie jedynie przy hardcore`owych optymalizacjach.

  • Co to jest ten cały Shader Model? Który powinienem wybrać?

Jakkolwiek niefortunnie to brzmi, Shader Model jest ogólną nazwą na zbiór wszelkich ograniczeń i możliwości danej karty. Chodzi o to, iż dany SM „mówi” nam, co karta jest w stanie obsłużyć/policzyć. Dzisiaj wyróżniamy cztery Shader Modele (nie licząc podtypów), z których każdy jest milowym krokiem w stosunku do poprzedniego.

  1. SM1 – najstarszy; jest właściwie krokiem przejściowym między fixed a programmable pipeline. Nie jest dzisiaj szeroko używany.
  2. SM2 – pierwsze shadery „z rękoma i nogami”. W podstawowej karty go wspierające będą umożliwiały wywołanie 256 instrukcji arytmetycznych Vertex i 64 instrukcji arytmetycznych Pixel Shader. PS-y wspierają również instrukcje teksturujące – najwyżej 32 odczyty bezpośrednie. Wspierany od serii GeForce FX 5×00.
  3. SM3 – bodaj najszerzej dziś używany SM. Wspierają go karty serii GeForce 6×00. Wprowadził wiele udogodnień oraz znacznie zwiększył limit instruncji.
  4. SM4 – najnowszy ze standardów. Używany w znacznej większości nowych gier, wprowadza zupełnie nową jednostkę shader – Geometry Shader. Wymaga Direct3D 10.

Wybór docelowego SM zależy od tego, co chcemy sobie liczyć w naszym shaderze. Ogólnie powinniśmy starać się kompilować nasze shadery na jak najniższym profilu, gdyż nie wszystkie karty obsługują te nowsze – oczywiście jednak karty są kompatybilne w tył – czyli nawet GeForce GTX 280 obsłuży nam shader skompilowany pod SM1.

  • Moja karta ma aż xxx jednostek shader, a ja wykorzystuję tylko jeden.

Jednostki shader to coś innego niż sam program. Po pierwsze, karta graficzna działa potokowo – przetwarza duże ilości danych na raz, niekoniecznie bardzo, bardzo szybko. Jednym z elementów potoku renderującego (rendering pipeline) jest właśnie Vertex/Pixel Shader, przetwarzający wierzchołki/piksele. Ilość jednostek shader nie oznacza ile możemy „naraz” używać shaderów, bo możemy tylko jeden danego typu, a raczej ile naraz wierzchołków/pikseli jest przetwarzanych.

  • Co to są te całe pliki .fx?

Pliki FX są plikami skryptowymi pozwalającymi na wygodne zarządzanie shaderami, ich parametrami oraz stanami urządzenia czy samplera. Dużo na ten temat znajdziemy w dokumentacji Microsoftu, oraz w kursie Robala, podlinkowanym wyżej.

Uff – dzisiejsza notka dosyć niewąska. ;] Oto pytania, które są bodaj najczęściej zadawane na kanale #warsztat i forum (brane mniej-więcej z pamięci) na temat shaderów, a które mogą przysporzyć sporo problemów początkującym w tej dziedzinie. Mam nadzieję, że nie pozostawiłem czegoś niewyjaśnionego.

Dodatkowo, informuję wszem i wobec iż po udanych egzaminach gimnazjalnych, dzięki dobremu świadectwu z (biało)czerwonym paskiem oraz po tygodniu czekania na wyniki, dostałem się do VIII Liceum w Poznaniu. :)

Pozdrawiam!

Po Compo.

•Maj 28, 2008 • Dodaj komentarz

Wróciłem. Miałem lekki (!?) poślizg z nową notką, ale tak to już jest, że w tym ciężkim okresie jakim jest koniec roku szkolnego blog zszedł na dalszy plan (163 pkt!)

Sednem dzisiejszej notki jest oczywiście moja porażka w warsztatowym Compo. :P Konkurs oceniam jako całkiem udany – przede wszystkim dlatego, że się w ogóle odbył. Sprawiedliwie zwyciężyła drużyna DMA, w składzie Krzysiek K. oraz NINJA. Drugie miejsce zajął Sobol, trzeci zaś byłem ja ex aequo z drużyną Asm Force (misioslaw & unic0rn). Ostatnie, czwarte miejsce zajął rAum.

2008-05-24(6) Screen ze zwyciezkiej pracy DMA.

Od dawna nic nie skodziłem. Podczas wyjazdu nie napisałem ani linii kodu, również po powrocie prawie wcale nie odpalałem VS-a. Tym niemniej, robię coś okołokoderskiego. No, ale to mało ważny detal narazie.

Chciałbym również przeprosić wszystkich innych uczestników, oraz siebie, za użycie w moim intrze melodii z fuxpluxa. Nie było to zachowanie godne pochwały, a wręcz skrajnie lamerskie. Nie powinienem był tego robić; zostawienie intra całkowicie bez synthu, jeśli już nie zdążyłem go napisać, było lepszą opcją. Kajam się.

Wyjeżdżam.

•Maj 17, 2008 • 2 Komentarze

Ano właśnie. Nie będzie mnie na zakończeniu Compo 4k. Mogłem w sumie to przewidzieć, bo o ponadtygodniowym wyjeździe do Londynu wiedziałem do dawna, lecz jakoś mnie to trochę zaskoczyło. ;)

Oczywiście nie przeszkodzi mi to wysłać pracy – jednak intro, pomimo wcześniejszych zapowiedzi, nie jest takie jak planowałem. No, ale nie wyszło mimo to tak źle. Screenów narazie nie opublikuję, jako że chyba nikt tego nie zrobił. :P W każdym razie intro składa się z czterech scen, całość ma 119 sekund. Jest jakiś synth i parę efektów.

Do usłyszenia w niedzielę za tydzień!