Doświadczenie zawodowe
Akademia Górniczo-Hutnicza - Silnik dźwiękowy RAYA ( od IV.2013 )

Od niedawna wspomagam kilkuosobowy zespół na AGHu w tworzeniu silnika dźwiękowego do gier. Na razie w moje ręce przeszło utrzymanie "starej" wizualizacji (DX11) - w tym poprawa jej wizualnej strony, napisanie od nowa renderera dla nowej wizualizacji (DX11 + przejściówka dla WPF) oraz (w trakcie prac) - napisanie drzewa, w którym jest trzymana geometria sceny (drzewo, dynamika, LODy, zapytania itp).

Blog projektu (z linkiem do filmiku demonstracyjnego): TUTAJ

Drago Entertainment - Programista silnika. ( od X.2010 do II.2013 )

Pomagałem rozwijać silnik do gry MMO, głównie od strony graficznej. Napisałem dwa duże podsystemy (pogoda i partikle) wraz z edytorami do nich oraz całkowicie przepisałem oświetlenie i cienie w silniku. Do tego kilka mniejszych usprawnień (np w systemie materiałów) oraz efektów (np SSAO, efekt mokrej powierzchni, motion blur itp). Całóść w technologii DirectX 9.0 + shadery 3.0, oraz MFC.

Wszystko jest na takim poziomie ukończenia, że z powodzeniem spełniało dobrze swoje zadanie w wersji beta gry i możliwe że dotrwałoby do wersji finalnej bez zmian gdyby taka wersja się pojawiła (niestety finansowanie projektu zostało wstrzymane :/).

System pogodowy + edytor

  • Całkowicie dynamiczna pogoda. Edycja pogody polega na składaniu jej z komponentów. Tak przygotowane presety pogodowe mogą być potem w dowolnej ilośći łączone z odpowiednimi wagami (używane przy płynnym przejściu jednej pogody w inną). Komponenty pogodowe reagują poprawnie na swoją obecność lub jej brak (np. mgła nie koloruje się od nieba i słońca jeśli nie dodano tych komponentów)
  • Cykl dobowy. Płynne przejście między dniem i nocą. Fizyczna symulacja dziennego nieba, oraz tekstury dla nocnego.
  • Kilka rodzajów dynamicznych chmur. Efekt 'god-rays' na geometrii świata i chmurach.
  • Wolumetryczna mgła, na którą ma wpływ słońce i niebo.
  • Sterowanie z pogody niektórymi globalnymi paramerami jak np. rim-lighting, wiatr, SSAO...
  • Podpinanie na kilka sposobów partikli do pogody.
  • Łatwa rozbudowa o nowe komponenty. Wystarczy dodać nowe klasy w silniku, a w edytorze automatycznie pojawią się do edycji bez dopisywania żadnego kodu.
  • Edytor który umożliwia wizualnie zdefiniować dowolną pogodę. Definiowanie krzywymi kolorów i parametrów dla różych pór doby. Podpinanie partikli, i innych parametrów specjalnych (np tekstur dla color-gradingu) i inne
Efekty cząsteczkowe (partikle) + edytor
  • Elastyczna budowa efektu z grup łączących emitery z partiklami
  • Krzywe (sześcienne beziera) do kontroli parametrów, z możliwością ustawienia (losowej) krzywej między dwoma zadanymi.
  • Dwa rodzaje generowania geometrii: quady i traile. Obracanych zgodnie z krzywymi, do kamery lub do kieruku ruchu.
  • Pełne oświeltenie wraz z reagowaniem na cienie (per-vertex). Obsługiwana jest dowolna ilość dowolnych świateł.
  • Poprawne reagowanie na mgłę. Z możliwością jej sztucznego zwiększenia.
  • Reagowanie na shadowmapę pogodową - dzięki temu partikle nie pojawią się np wewnątrz budynków lub pod dachami (np deszcz, piasek).
  • Efekty kaskadowe. Mozliwość przypięcia grupy pod pojedyńcze partikle z innej grupy. Dodatkowo możliwość wygenerowania zadanych grup na kolizję.
  • Zaawansowane mapowanie tekstur. Wycinanie losowo z zadanego ciągu prostokątów na teksturze. Animacje tekstury z zadaną liczbą klatek. Dla traili możliwość mapowania tekstury po długości traila w świecie, lub per cały trail.
  • Kolizje fizyczne, reagowanie na wiatr, ruch zgodnie z grawitacją, przyciąganie do terenu.
  • Podpinanie świateł i dźwięków oraz definiowanie ich parametrów.
  • Kilka trybów rysowania partikla: alpha-blend, solid (alpha-test), distortion. Do tego kilka modyfikacji: soft-particle, przesunięcie głębi bez zmiany wyglądu partikla itp.
  • Rozbudowane debugowanie. Podgląd w dowolnej chwili: fill-rate partikli, różne statystyki (ilość partikli, efektów, widocznych efektów, załadowanych itp)
  • Zaawansowany edytor. Łatwa edycja krzywych, możliwość uruchamiania efektów krokowo, edycja parametrów z natychmiastowym podglądem, zarządzanie efektami, definiowanie trajektorii dla efektów, podpinanie obiektów i animacji z gry, i do nich efektów (np pod zadaną kość w animacji), wiele opcji testowania (np strzelanie z broni, generowanie partikli na kolizje przy kliknięciu myszką), podpinanie dowolnej pogody i testowanie reakcji na oświetlenie i inne
Oświetlenie
  • Światło słoneczne: kaskady, stablizacja cienia przy ruchach kamerą (shimmering). Dla terenu i dużych obiektów cienie VSM (dwa zasięgi 500m i 3000m) przeliczane co pewien czas. Światła stożkowe - zwykłe cienie - z dostosowywaniem się rozmiaru shadowmapy do odległości od światła. Dla cieni VSM i pogodowych używane są tekstury float, dla pozostałych sprzętowe cienie i rozmycie z 16 próbkowym kernelem.
  • Zaawansowane testowanie widoczności. Branie pod uwagę odpowiednich ścian z brył widoczności kamery i światła / kaskady oraz rozmiaru obiektu.
  • Zunifikowane shadery. Wszystkie światła / cienie liczą się współnym kodem, z małymi modyfikacjami poprzez makra. Wbudowana w ten system obsługa oświetlenia partikli.
Efekty graficzne
  • Efekt SSAO. Wynik z poprzedniej ramki jest brany pod uwagę przy generowaniu bieżącej. Efekt będzie jeszcze ulepszany.
  • Efekt mokrej powierzchni. Symulacja powierzchni wody generowana w czasie rzeczywistym i przekazywana do właściwego shadera. Shadowmapa pogodowa jest dynamicznie generowana co jakiś czas i wykorzystywana do testowania miejsc, które są zasłonięte przed deszczem. Ta sama shadowmapa jest też wykorzystywana, w niektórych partiklach pogodowych.
  • Motion blur od ruchów kamery oraz od poruszających się obiektów (wymaga dopracowania jeszcze).
  • Efekty pogodowe - wolumetryczna mgła oraz efekt god-rays.
Screenshoty z gry/edytorów. Należy pamiętać, że mojego autorstwa są tylko wspomniane wcześniej rzeczy. WIĘCEJ...

Teyon - Programista silnika / technologii. ( VI 2008 - IX 2010 )

Pomagałem rozwijać technologię, głównie od strony graficznej - napisałem renderer na PC DirectX 9.0 i XBoxa 360 (95% wspólnego kodu). Wcześniej - trochę nieudany i zbyt skomplikowany - dwu warstwowy renderer na PC DirectX 9.0 (kolega napisał port na XBoxa 360). Pisałem też edytory (MFC i C#), a także emulatory API silnika dla innych platform (np 3DS, iPhone, PSP) uruchamiane na PC:

Renderer PC DirectX 9.0 i XBOX 360

  • Jednowarstwowy, lekki renderer typu light-prepass na platformy PC i XBOX 360 (kolega dopisał implementację dla PS3) z prawie całkowicie wspólnym kodem C++ i shaderów.
  • Dynamiczne, gładkie cienie (PCF) od świateł stozkowych, punktowych (rozbijanych wewnętrznie na 6 stożkowych) i światła słonecznego. Dla wszystkich świateł jeden zunifikowany algorytm generowania cieni (głownie po stronie shaderów).
  • Zaawansowane renderowanie cieni dla światła słonecznego. Dowolna ilość kaskad. Stabilizacja cienia przy ruchach kamery. Płynne przejście między kaskadami. Separacja kaskad po shadowmapie (bboxy ograniczające cień w przestrzeni świata) co mocno zwiększyło dokładność.
  • Kilka podstawowych nowoczesnych efektów - glow, normal mapping, parallax mapping, refrakcja, woda, realistyczna animacja roślin, oraz kilka bardziej zaawansowanych typu SSAO, wolumetrycna mgła, efekt god-rays (trochę niedoskonały)
  • Zaawansowany system materiałów, automatyczne templatowanie kodu shaderów w zależności od użytych parametrów materiału.
  • Dla tego renderera napisałem też edytor materiałów. Pozwałał wczytać dowolną scenę, edytować materiały, i ustawić kilka podstawowych parametrów sceny (typu pozycja słońca, ustawienia mgły, SSAO itp)
Dwu warstwowy renderer PC DirectX 9.0
  • Forward renderer z bardzo mocnym templatowaniem shaderów w zależności od świateł oświetlających obiekt (do 4 dowolnych w jednym przebiegu) oraz otaczającego środowiska.
  • Dowolna ilość dowolnych świateł z cieniami. Gładkie cienie (PCF). Kaskady dla światła słonecznego (nieco gorsze niż w późniejszym rendererze).
  • Zaawansowany system materiałów, automatyczne templatowanie kodu shaderów w zależności od użytych parametrów materiału (jak w późniejszym rendererze).
  • Automsatyczne renderowanie wielu luster. Zaawansowany efekt wody (refrakcja i odbicie światła), zanik widoczności po głębokości. Zaawansowany wielo krokowy parallax mapping (m.in. dla terenu). I wiele innych podstawowych efektów.
Emulatory
  • Napisałem specjalne środowisko (MFC), które pozwalało uruchamiać programy pisane na inne platformy (np 3DS, PSP, iPad, iPhone) używające API silnika, na komputerze PC, tak że uruchomione programy (gry) "myślały", że działają na prawdziwym emulowanym sprzęcie. Oczywiście emulator używał renderera dla PC, który specjalnie udawał renderery z poszczególnych platform (z DS-em było najgorzej). Dzięki temu dużą część gry można było tworzyć na PC. Emulatory wyświetlały graficznie emulowaną platformę, z wszystkimi przyciskami tak że można było generować dowolne eventy emulowanej platformy.
Inne
  • Napisałem jeszcze pracujący w tle program dla PC umożliwiający sterowanie starszymi grami przy użyciu padów (generował sztucznie eventy od klawiatury).
  • Przez 3 miesiące pisałem w C# edytor do nowej technologii. Niestety technologia nie została ostatecznie wdrożona
Screenshoty. Należy pamiętać, że mojego autorstwa jest tylko renderer. WIĘCEJ...

DreamLab Onet.pl ( X 2007 – VI 2008 )

Większość czasu pracowałem przy projekcie multimedialnym w C++ i DirectX 9.0 (ale też OpenGL, HLSL, Cg). Projekt był mocno komponentowy (mozillowe XPCOM'y) i wielowątkowy, a także bardzo dużo korzystał ze skryptów. W bardzo niedużym stopniu miałem też styczność z SQL i programowaniem webowym - php, python, perl.

QS.INFOrmation s.c. ( 2005 – 2007 )

Program wspomagający pracę biur nieruchomości. W skład systemu wchodzi program wraz z serwerem do lokalnej wymiany danych w firmie oraz edytor i skaner gazet do prawie zautomatyzowanego przygotowywania plików z ogłoszeniami oraz zarządzania uprawnieniami. Pliki te są pobierane przez lokalne serwery (TPC) i dalej przez programy klientów bądź od razu przez sam program klienta z globalnego serwera (FTP). Wszystkie komponenty napisane są w MFC.

Drago Entertainment - Programista narzędzi. ( VII 2005 – IX 2005 )

Przez 3 miesiące w wakacje zajmowałem się programowaniem narzędzi w MFC.

Forum Doradców Podatkowych ( 2002 - 2003 )

Dla firmy napisałem dwa programy. Interaktywne testy wspomagające naukę do egzaminu na doradcę podatkowego. Program umożliwia założenie wielu profili użytkownika i dla każdego prowadzi oddzielne statystyki. Wyświetlanie pytań może odbywać się w jednym z kilku trybów. Drugi program to zbiór standardowych druków firmowych. Program ułatwia ich wypełnianie i obsługę (zapis, odczyt) a także obsługuje drukowanie. Oba programy napisałem w Borland C++ przy użyciu biblioteki OWL.