Uwaga! Informacje na tej stronie mają ponad 6 lat. Nadal je udostępniam, ale prawdopodobnie nie odzwierciedlają one mojej aktualnej wiedzy ani przekonań.
Możliwości
Moduły bazowe
Stanowią osobną bibliotekę w C++ złożoną z różnorodnych modułów, przenośną
na Linuksa, którą udostępniłem osobno na licencji GNU LGPL jako
CommonLib.
Więcej informacji o jej możliwościach znajdziesz na stronie biblioteki.
W skrócie:
- Moduł matematyczny
- Operacje na łańcuchach, konwersje
- Inteligentne wskaźniki
- Obsługa plików konfiguracyjnych
- Moduł do daty i czasu
- Hierarchia klas wyjątków do obsługi błędów
- Obsługa systemu plików
- Hierarchia klas strumieni
- Szybki alokator FreeList
- Rozbudowany logger, profiler
- Biblioteka do wielowątkowości i synchronizacji
- Tokenizer
- Obsługa kompresji zlib
Framework
- Asynchroniczna konsola
- Narzędzia wspomagające do Direct3D
- Szkielet aplikacji Direct3D - w tym obsługa klawiatury i myszki
- Moduł graficzny 2D - rysowanie spritów oraz tekstu
- Moduł GUI i różnorodne kontrolki
- Uniwersalny manager zasobów
- Multishader - shader kompilowany na żądanie z podaną kombinacją ustawień
Silnik
- Wygodna klasa kamery
- Materiały - dostępne ustawienia:
Diffuse, Specular, Emissive, Alpha-Blending, Alpha-Testing, WireFrame,
Backface Culling, Team Color, Texture Animation, Fresnel Term,
Environmental Mapping, Half-Lambert, Normal Mapping, Per-Vertex/Per-Pixel,
Gloss Mapping
- W pełni dynamiczne oświetlenie i cienie
- Światła - Ambient, Directional, Spot, Point
- Cienie - Shadow Mapping
- Podział przestrzeni dla mapy i encji - Octree
- Mgła
- Kolizja promienia ze sceną
- Encje - obiekty sceny
- Modele - własny format QMSH
- Animacja szkieletowa - liczona na GPU i w razie potrzeby na CPU
- Efekty cząsteczkowe - liczone w pełni na GPU
- Stripe - paski w kształcie linii, elipsy, ciągu punktów, funkcji parametrycznej lub krzywej
- Text
- Quad, w tym Billboard
- Indoor - przestrzeń zamknięta
- Mapa Indoor - własny format QMAP
- Outdoor - przestrzeń otwarta
- Drzewa (wzorowane na SpeedTree)
- Trawa
- Woda
- Opady (np. deszcz, śnieg)
- Niebo - jednolity kolor, Skybox lub generowane:
- Chmury
- Słońce, Księżyc itp.
- Postprocessing
- Zamalowanie ekranu na jednolity kolor
- Namalowanie na ekranie tekstury
- Przetworzenie ekranu funkcją - np. jasność, kontrast, odwrócenie kolorów,
odcienie szarości, sepia
- Tone Mapping
- Bloom
- Feedback (w tym Motion Blur)
- Lens Flare
- Heat Haze
Narzędzia wspomagające
- Eksporter formatu modeli QMSH do Blendera
- Eksporter formatu map QMAP do Blendera
- Narzędzie do przetwarzania siatek modeli, w tym wyliczanie wektorów Tangent Space
(z pomocą NvMeshMender)
- Narzędzie do przetwarzania map, w tym podział przestrzeni, wyliczanie normalnych, automatyczne teksturowanie
- Narzędzie do przetwarzania tekstur, w tym poprawianie krawędzi tekstur przeznaczonych do alfa-testu
Czego brakuje
Mówią, że "lepsze jest wrogiem dobrego".
Każdą pracę można bez końca ulepszać, dodawać nowe rzeczy i poprawiać błędy,
ale wtedy nigdy nie można jej skończyć.
Dlatego ten silnik nie jest idealny.
Brakuje mu wielu rzeczy i doskonale zdaję sobie z tego sprawę.
- Refleksji, czyli wszelkich odbić, które umożliwiłyby efekty takie jak
lustro, odbicie w powierzchni wody albo obiekty błyszczące jak metal.
- Parallax Mapping, Parallax Occlusion Mapping lub podobnego efektu materiałowego.
- Refrakcji i różnych innych efektów graficznych, które mogłyby być, a których nie ma.
- Pełnego wpływu świateł i cieni na: teren, drzewa, trawę.
Normal Mappingu dla tekstur terenu.
- Oświetlenia obiektów półprzezroczystych.
Obecnie niestety obiekty półprzezroczyste nie podlegają oświetleniu,
co uniemożliwia uzyskanie efektów takich jak płynnie znikający model.
- LOD.
Silnik posiada Level of Detail dla terenu, efektów cząsteczkowych oraz trawy
(która z odegłością po prostu zanika).
Przydłby się również dla siatek modeli, dla materiałów, dla drzew itd.
- CLOD (Continuous LOD) dla siatki terenu, bo obecnie widać przeskoki (Popping) przy
przełączaniu się sektorów terenu między poziomami szczegółowości.
- Oświetlenia statycznego, wsparcia dla Lightmap.
Nie każda gra potrzebuje w pełni dynamicznego oświetlenia, a tylko takie posiada mój silnik.
Oświetlenie statyczne wciąż bywa używane i działałoby dużo szybciej.
- Obsługi Shadow Volume.
W obecnej chwili wspierana jest tylko jedna technika cieni - Shadow Mapping.
- Reparametryzacji dla Shadow Mappingu w przestrzeniach otwartych, czyli LiSPSM lub TSM.
Obecnie tego nie ma, dlatego cienie są bardzo rozpikselowane.
- Lepszego podziału przestrzeni.
Obecnie usuwanie niewidocznych obiektów działa na podstawie Octree,
Occlusion Query i Frustum Culling.
Do przestrzeni zamkniętych najlepsze byłyby portale.
- Asynchronicznego managera zasobów, który wczytywałby potrzebne tekstury,
modele, shadery itd. w tle, w osobnym wątku.
- Streamingu dla terenu i mapy, który pozwoliłby doczytywać tylko potrzebne
fragemnty i dzięki temu poruszać się po planszy większej, niż mieści się na raz
w pamięci RAM.
- Optymalizacji, przede wszystkim lepszego zarządzania zmianami stanów urządzenia Direct3D.
- Bardziej uniwersalnej, rozszerzalnej, modułowej architektury materiałów,
efektów postprocessingu i całego silnika.
- Lepszej organizacji shadera głównego.
W obecnej chwili jest on kompilowany warunkowo z podanymni ustawieniami na podstawie
jednego źródła liczącego 907 linii, co czyni go trudnym w konserwacji.
- Eksportera modeli i map do programów graficznych innych niż Blender lub
konwertera z innych formatów na moje własne.
- Wyodrębnienia silnika jako osobnej biblioteki gotowej do użycia w grach.
- Porządnej, kompletnej dokumentacji w estetycznym formacie.
Wszystkie formaty plików oraz trudniejsze zagadnienia związane z używaniem niektórych klas są
obecnie udokumentowane w plikach TXT, a szczegółowy interfejs klas opisują komentarze
w kodzie, w plikach nagłówkowych.
- Edytorów.
Obecnie wszystkie parametry ustala się za pomocą specjalnych plików tekstowych,
specjalnych tekstur (np. mapa wysokości terenu, rozmieszczenie drzew i trawy) albo wprost w kodzie.
- Silnika gry.
To, co napisałem, to jest tylko silnik graficzny (renderer).
Czego używam
- Platforma: PC, Windows
- Sprzęt graficzny: Shader Model 2.0 (minimum GeForce FX)
- Język i środowisko programowania: Visual C++ 2005 Professional
- Biblioteka graficzna: DirectX 9.0c
- Edytor grafiki 2D: GIMP
- Edytor modeli 3D: Blender
- Generator czcionek: Bitmap Font Generator
- Pomocniczy edytor tekstu: jEdit