PFX 1.31

Bez zbędnego rozpisywania się :). Projekt wykonany na przedmiot Grafika Komputerowa i Wizualizacja. Czas pracy – około 7 – 8 miesięcy, oprogramowane w całości w C++ (niestety nie starczyło już czasu na skrypty). Wykorzystane dodatkowe biblioteki (nie licząc STL’a) – nVidia PhysX (opis poniżej) oraz Boost; także cały silnik został napisany praktycznie od podstaw. Oczywiście nie ma tu porównania do produkcji komercyjnych, nad którymi pracują sztaby ludzi.

Content – meshe, skiny, oświetlenie, HUD itp. – zostały stworzone przeze mnie. Bazowe tekstury pochodzą z CgTextures.com. Jedynie materiał nieba nie jest mojego autorstwa – „zapożyczony” został z gry Painkiller (mam nadzieje, ze panowie z PCF nie będą źli :P).

Mapa to remake DM-Stronghold z gry Unreal Tournament ’99 (także mojego autorstwa).

PFX 2.x

pfx thumb pfx thumb pfx thumb pfx thumb

PFX 1.x

pfx thumb pfx thumb pfx thumb pfx thumb

DM-Stronghold (UT'99)

stronghold thumb stronghold thumb stronghold thumb stronghold thumb

Updates

22.11.2010 - Renderer przepisany z FixedPipeline na Shader'y.
Dodane m.in.
- Dynamic per-pixel lighting,
- Specular mapping,
- Normal mapping,
- Reflection mapping,
- Emissive mapping,
- Distortion,
- HDR/Bloom + Tonemapping,
- Color Grading with LUT,
- Soft Particles,
- Volumetric Light Beams,
- Motion Blur,
oraz parę większych/mniejszych zmian i usprawnień w silniku.

04.04.2010 - Projekt miesiąca według GameDev.pl.

21.03.2010 - Dodane filtrowanie tekstur oraz LOD Bias. Rezultat można zobaczyć na screenie poniżej. Link do nowego rendera znajduje się tutaj - wystarczy podmienić odpowiedni plik w folderze Bin. Pozostałe paczki zostały zaktualizowane.

Parametry można modyfikować w pliku konfiguracyjnym Profile.ini w sekcji OpenGLDrv.CxOpenGLDrv - klucze TextureFiltering oraz LODBias. Dostępne tryby: TF_None, TF_Bilinear, TF_Trilinear, TF_Anizo1x, TF_Anizo2x, TF_Anizo4x, TF_Anizo8x, TF_Anizo16x.

texture filtering thumb

First run

Przy pierwszym uruchomieniu program automatycznie dostosowuje swoją rozdzielczość do aktualnej rozdzielczości ekranu użytkownika. Oczywiście można ją później zmodyfikować poleceniem SetRes (patrz komendy konsoli) lub poprzez odpowiednie wpisy w pliku konfiguracyjnym Profile.ini.

Jeżeli chcemy, aby program ponownie dokonał automatycznej konfiguracji należy wartość RunCount w sekcji Core.System w pliku System.ini ustawić na 0.

UWAGA:Aplikację w standardowym trybie należy uruchamiać poprzez Bin\PfxLanuch.exe (nie Benchmark\PfxBenchmark.exe).

Klawisze

W Do przodu.
S Do tyłu.
A W lewo.
D W prawo.
Spacja Podskok.
Shift Kucanie.
Esc Przechwytuje / zwalnia kursor myszy.
~ Pokazuje / ukrywa konsolę.
LMB Strzał.
RMB Naciśnij i przytrzymaj – zoom.
Naciśnij drugi raz – resetuje zoom.
ALT + F4 Wyjście.

nVidia PhysX

Aplikacja korzysta z nVidia PhysX, a więc potrzebuje sterowników do tej biblioteki. Z pewnych powodów nie zaleca sie jednak udostępniania środowiska uruchomieniowego dla nVidia PhysX zintegrowanego z własnym projektem. Jeśli więc program nie uruchamia się, informując jednocześnie o braku pliku „PhysXLoader.dll”, najprawdopodobniej sterowniki nVidia PhysX nie są na naszym komputerze dostępne. Jedyne co możemy zrobić to ściągnąć je ze strony nVidii i zainstalować. Link do aktualnej wersji znajduje się tutaj. W tym przypadku pozostaje mi tylko przeprosić za niedogodności.

Właściciele kart nVidia GeForce serii 8 i nowszych są w lepszej sytuacji. Po pierwsze nVidia PhysX jest na wyżej wymienionych kartach wspierana sprzętowo (i w związku z tym działa szybciej), a po drugie w większości przypadków nie będą zmuszeni do instalacji dodatkowego oprogramowania.

Istnieje możliwość „podglądania” fizyki poprzez nVidia Remote Debugger. Aby aktywować komunikację należy wartość bUseRemoteDebugger w sekcji Engine.CxPhysicsSubsystem w pliku System.ini ustawić na True. Klucze RemoteDebuggerHost oraz RemoteDebuggerPort ustawione zostały na wartości domyślne dla hosta lokalnego.

SSE2

Ze względu na fakt, iż niektóre procesory mogą nie obsługiwać SSE2, projekt został udostępniony w wersji działającej bez tych instrukcji. Link znajduje się tutaj. Instalacja jest trywialna – wystarczy zamienić pliki z katalogu Bin na te znajdujące się w wyżej zamieszczonym archiwum. Listy procesorów obsługujących oraz nieobsługujących SSE2 można sprawdzić tutaj.

Benchmark

Jeżeli już ściągnąłeś/ęłaś projekt to miałbym małą prośbę – aby uruchomić program poprzez Benchmark.bat, „pobiegać” ~5-10 minut, a następnie posłać na mój adres mailowy e-mail spakowany folder Logs.

Czym to się różni od standardowej wersji? W pierwszej kolejności CPU-Z zbiera informacje o konfiguracji komputera (rodzaj procesora, karty graficznej, ilość pamięci itp.). Następnie program zlicza czas działania swoich wewnętrznych funkcji, po czym zapisuje wszystkie te informacje w odpowiednim pliku *.log.

Sama aplikacja może chodzić trochę gorzej (lub więcej niż trochę – w zależności od komputera), ze względu na powyższe operacje.

Komendy konsoli

Parametry wymagane podane są w <>, natomiast opcjonalne w []. Wielkość liter samych poleceń nie ma znaczenia, natomiast parametrów już tak. Jest więc bez różnicy czy wpiszemy properites NazwaObiektu, czy PROPERTIES NazwaObiektu, ale już properites NazwaObiektu i properties NAZWAOBIEKTU to dwa różne polecenia (a przynajmniej dotyczące dwóch różnych obiektów). W poniższym opisie parametry mające na początku literkę b mogą przyjmować wartości True / False (lub odpowiednio 1 / 0).

Aby otrzymać listę dostępnych klas (przydaje się w niektórych poleceniach) należy wpisać Objects CxClass.

hide Ukrywa konsolę.
exit [bForce] Wychodzi z programu.
Parametr bForce określa, czy zamknąć program w „trybie natychmiastowym” – choć tego radziłbym używać w miarę „wstrzemięźliwie”.
flush console Czyści wiadomości oraz historię konsoli.
flush render Czyści cache rendera.
fov <Value> Ustawia pole widzenia kamery. Domyślnie 90.
get <Object> <Property> Pobiera aktualną wartość wybranej zmiennej (Property) z danego obiektu (Object).
loaded Max amunicji i zdrowia.
mousesensitivity <Value> Ustawia czułość myszki na podaną wartość.
objects [bDetails] <Class> Wyświetla listę obiektów określonej klasy egzystujących aktualnie w programie. Jeżeli parametr bDetails przyjmie wartość True, wyświetlane są także ich własności.
openviewport <Name> Tworzy nowe okno programu, z osobnym graczem, kontekstem renderowania itp. Opcja dostępna tylko w trybie okienkowym.
Każde okno musi mieć zdefiniowane własne ustawienia w pliku konfiguracyjnym. Domyślnie dostępne są 3 takie okna. Aby dodać ich więcej należy dopisać odpowiednie sekcje do pliku Profile.ini (dla ułatwienia można zapoznać sie z wpisami CxViewportWindows.CxViewportWindows_x).
properties <Object> Wyświetla dostępne pola wybranego obiektu (Object). Na zmiennych tych można następnie operować poleceniami set oraz get.
quit [bForce] Patrz exit.
rendermode <Mode> Zmienia tryb renderingu. Aktualnie dostępne są 3:
Lit – ze światłem (standardowy),
Unlit – bez świateł,
Wireframe – siatka obiektów.
say <...> Wyświetla wiadomość na ekranie.
set <Object> <Property> <Value> Ustawia wartość wybranej zmiennej (Property) w danym obiekcie (Object). Aby wyświetlić dostępne pola obiektu można wykorzystać polecenie properties.
Pewne zmienne są ograniczone systemowo, tzn. można ustawić im wartości tylko z wybranego przedziału / zbioru.
setres <Width> <Height> Zmienia rozdzielczość ekranu. Jeżeli jako parametr podamy -1, wtedy podstawiana jest wartość aktualna.
show boxes [Class] Pokazuje / ukrywa bounding box’y obiektów znajdujących się na scenie. Jeżeli podano parametr Class, wyświetlane są bounding box’y tylko dla obiektów danej klasy.
show collision Pokazuje / ukrywa kolizję obiektów. Działa tylko wtedy, kiedy wartość bDebugVisualization w sekcji Engine.CxPhysicsSubsystem w pliku System.ini ustawiona jest na True.
show hud Pokazuje / ukrywa HUD.
show speedmeter Pokazuje / ukrywa „prędkościomierz”.
show spheres [Class] Pokazuje / ukrywa bounding sphere’y obiektów znajdujących się na scenie. Jeżeli podano parametr Class, wyświetlane są bounding sphere’y tylko dla obiektów danej klasy.
slomo <Value> Modyfikuje szybkość gry. Parametr Value jest liczbą zmiennoprzecinkową, przy czym 1.0 = 100%.
stat render Pokazuje / ukrywa statystyki renderingu.
punish3r design