All blog entries, ordered from most recent. Entry count: 1198.
# Oren-Nayar
Fri
06
Jun 2008
Trafiłem przypadkowo na hasło oświetlenia wg modelu Orena-Nayara i sobie go na szybko skodziłem z pomocą tego artykułu. Jest to model oświetlenia rozproszonego (Diffuse) uogólniający stosowane powszechnie prawo Lamberta na powierzchnie o współczynniku chropowatości 0..1. Nie chodzi o żadne mapowanie nierówności takie jak Normal Mapping, a raczej tylko o odpowiednie "spłaszczenie" funkcji liczącej oświetlenie. Fajnie to wygląda, ale niestety jest skomplikowane obliczeniowo. Dlatego wartoby poszukać jakiejś prostej aproksymacji tej funkcji albo zakodować ją w jakiejś teksturze przeglądowej.
# HDR i Glare
Fri
06
Jun 2008
Na czym to ja skończyłem... Miałem mapę i Deferred Shading, dopisałem HDR i miałem zrobić Tone Mapping. W ramach HDR akumuluję oświetlenie sceny kolejnymi światłami do Render Targeta o formacie zmiennoprzecinkowym. Już samo to znacznie poprawia kolorystykę sceny. Żeby było pełne HDR, wypada potem mierzyć średnią jasność sceny i zależnie od tego robić Tone Mapping. Nie udało mi się jednak znaleźć takiego wzoru, któryby dał ładny wygląd.
Kolejną rzeczą jest rozbłysk od źródeł światła. To nie jest żaden Bloom, tylko zwykłe quady zwrócone przodem do kamery, pokryte odpowiednią teksturą. One są rysowane z wyłączonym Z-buforem, ale tylko wtedy, kiedy liczony na CPU test kolizji promienia od kamery do światła nie wykaże żadnej przeszkody po drodze. Odpowiednią teksturę wyliczyłem na podstawie wzoru, który znam od Krzyśka K. i wrzuciłem ją też do pobrania:
# Ostatni artykuł - Zaawansowana kamera 3D
Thu
05
Jun 2008
Mój nowy artykuł nosi tytuł Zaawansowana kamera 3D. Jest bardzo długi i opisuje kilka zagadnień programistyczno-matematycznych dotyczących grafiki 3D: koncepcję kamery i jej implementację jako zestaw klas, rysowanie prostokątów zwróconych przodem do kamery (Billboard), w tym efektów cząsteczkowych, testowanie kolizji obiektów z polem widzenia kamery w celu nierysowania tego co niewidoczne (Frustum Culling) oraz testowanie kolizji promienia celem sprawdzania, który obiekt 3D gracz wskazał myszką (Picking). Dołączony kod zawiera spory kawałek mojej biblioteki matematycznej.
Na tym kończę maraton pisania artykułów i wracam do kodu :) Nie zrealizowałem nawet połowy z listy pomysłów na artykuły, ale myślę, że wybrałem te najlepsze.
Comments | #rendering #math #productions Share
# Praca magisterska o silniku 3D
Fri
30
May 2008
Wiem o istnieniu trzech prac dyplomowych poświęconych silnikowi 3D, jakie dotychczas były obronione w Polsce:
Wkrótce do tego grona dołączy moja praca magisterska:
Właśnie dotarłem do kolejnego kamienia milowego w jej przygotowaniu - praca została wydrukowana i oprawiona :)
Comments | #rendering #engine #studies Share
# Nowy artykuł - Szybki alokator FreeList
Wed
28
May 2008
Mój następny artykuł nosi tytuł Szybki alokator FreeList. Opisuje przykład implementacji mechanizmu zwanego Free List. Jest to samodzielne zarządznie pamięcią polegające na utrzymywaniu listy wolnych elementów, z której można przydzielać elementy dużo szybciej, niż to robi alokacja pamięci ze sterty standardowym operatorem new. Mój kod oparty jest na artykułach z książek "Game Programming Gems", a przeprowadzony test pokazuje, że faktycznie osiąga on bardzo dobrą wydajność.
Comments | #productions #c++ #algorithms Share
# Nowy artykuł - Preprocesor w shaderach HLSL
Thu
22
May 2008
W następnym artykule opisałem, jak używa się preprocesora w języku shaderów HLSL. Pisząc coś bardziej skomplikowanego niż pojedyncze efekty graficzne - np. silnik - na vertex shader i pixel shader trzeba czasem spojrzeć jak na zestaw ustawień, tak jak w starym dobrym Fixed Function Pipeline. Pojawia się taki problem, że każda kombinacja ustawień to powinien być osobny shader. W artykule przedstawiłem jedno z rozwiązań - kompilowanie kodu HLSL z użyciem proprocesora (#if itp.), z ustawieniami wpisanymi jako wartości makr. Zapraszam do lektury: Preprocesor w shaderach HLSL.
Comments | #rendering #productions #directx Share
# Nowy artykuł - Unicode w Visual C++
Wed
21
May 2008
Mój kolejny artykuł to Unicode w Visual C++. Jest prosty - wymaga tylko znajomości podstaw programowania w C++. Wszystkim tym, którzy kodują pod Windows i z użyciem Visual C++, może pomóc zacząć używać w swoich projektach kodowania znaków Unicode. Trzeba jednak przyznać, że to nie zawsze ma sens - przynosi korzyści tylko jeśli program ma używać plików tekstowych Unicode albo będzie tłumaczony na różne języki. W przeciwym razie szkoda zachodu :)
Comments | #productions #c++ #visual studio Share
# Nowy artykuł - Kwaterniony w praktyce
Tue
20
May 2008
Mój następny artykuł nosi tytuł Kwaterniony w praktyce. Przeznaczony jest dla tych, którzy znają już podstawy matematyki potrzebnej w programowaniu grafiki 3D (wektory, macierze), ale dotychczas omijali temat kwaternionów szerokim łukiem myśląc, że są bardzo trudne. Artykuł pokazuje (mam nadzieję), że nie ma w nich żadnej czarnej magii - są po prostu wygodnym narzędziem do zapisywanie obrotów i orientacji w 3D, z którego można się nauczyć korzystać bez rozumienia, że kwaternion to rozszerzenie liczb zespolonych mające trzy pierwiastki urojone :) Zamiast wzorów pokazałem fragmenty kodu C++.