Teksty Opublikowane przez

Poprawianie jakości obrazu w grach

poprawianie_obrazuKilka lat temu, wśród gamerów z zacięciem do kombinowania, całkiem popularne były narzędzia do wymuszania wygładzania obrazu (AA). Ich geneza jest stosunkowo prosta i postaram się ją przybliżyć w paru zdaniach. Mianowicie, twórcy gier z tamtego okresu nie mieli do dyspozycji tak wielkiej mocy obliczeniowej jaka dzisiaj drzemie w komputerach graczy i bardzo często rezygnowali z wykorzystywania funkcji poważniej obciążających ówczesne karty grafiki. Do takich rozwiązań należało wygładzanie obrazu. Dzisiaj ciężko jest w to uwierzyć ale te 4 czy 5 lat temu nawet najprostsza forma antyaliasingu potrafiła sprowadzić na kolana drogie układy graficzne. Wszystko zaczęło się zmieniać w momencie kiedy ATi opracowało i wprowadziło w sterownikach kart Radeon obsługę algorytmu MLAA opartego na pixel shaderach. Nowe rozwiązanie przyniosło więcej niż zadowalające rezultaty a przy tym konsumowało nieporównywalnie mniejszą ilość mocy obliczeniowej w porównaniu do klasycznego FSAA. Firma Nvidia oczywiście błyskawicznie skontrowała ofertę konkurencji odpowiednikiem wspieranym sprzętowo przez GeForce’y – wygładzaniem FXAA. Krótko potem pojawił się, opracowany między innymi przez inżynierów z firmy Crytek, algorytm SMAA. Było to, z grubsza rzecz biorąc, rozwinięcie idei MLAA i okazało się być najlepiej zoptymalizowane z całej trójki. W ten sposób w krótkim czasie pojawiły się aż trzy propozycje na bardzo wydajne wygładzanie obrazu oparte na pixel shaderach.

Gracze byli zachwyceni, nowe gry nie kłuły w oczy ostrymi pikselami a przy tym działały płynnie. Niestety starsze tytuły, bez zaimplementowanej obsługi nowego wygładzania, wciąż cierpiały na wszędobylskie „schodki”. Tutaj z pomocą przyszli sprytni hakerzy, którzy wykombinowali sposób na „wstrzykiwanie” nowych pixel shaderów do gier. Ogólna, uproszczona zasada działania takiego wybiegu jest prosta – obraz renderowany przez silnik graficzny gry jest przechwytywany, potem modyfikowany nowym shaderem i dopiero wtedy wysyłany na ekran monitora.

W ten sposób w sieci pojawiły się takie rozwiązania jak FXAA Injector, InjectSMAA, FXAAtool i inne. Oczywiście cieszyły się sporym wzięciem a dyskusje na ich temat napędzały całkiem przyzwoity ruch na wielu forach. W związku z tym bardzo szybko ich podstawowa funkcjonalność została rozszerzona o dodatkowe funkcje pozwalające manipulować kolorami i dodawać proste efekty. Z czasem jednak autorzy tych narzędzi przestali rozwijać swoje projekty. Spowodowane to było przede wszystkim wzrostem skomplikowania silników graficznych gier, „wstrzykiwanie” shaderów przestało być banalnie proste. Również jakość grafiki nowych tytułów wzrosła na tyle, że większość graczy zrezygnowała ze stosowania „upiększeń”. Do niedawna na polu bitwy pozostały właściwie tylko stosunkowo prosty ale niezawodny SweetFX i dość problematyczne ale za to rozbudowane ENBSeries.

ENBSeries nie będę się tutaj zajmował ponieważ jest to narzędzie, którego poziom skomplikowania nie pozwoliłby mi ograniczyć się wyłącznie do zwięzłych instrukcji umożliwiających szybkie i bezbolesne uruchamianie efektów. Być może w przyszłości znajdę trochę czasu żeby nasmarować poradnik dotyczący tego rozwiązania.

Jeśli chodzi o SweetFX to jego autor, CeeJay.dk, przejął w zasadzie schedę po twórcach starszych „wstrzykiwaczy” shaderów. SFX przez dłuższy czas pozostawało jedynym tego typu narzędziem, które było aktualizowane. Stosunkowo niedawno CeeJay.dk związał się współpracą z autorami całkiem świeżych rozwiązań – ReShade i GEMFX. Chłopaki prowadzą dość bliską kooperację i może kiedyś jej efektem będzie świetny, uniwersalny „wstrzykiwacz”. Do tego czasu jednak przede wszystkim wymieniają się doświadczeniami i kodem shaderów. To właśnie na ich rozwiązaniach będę opierał proste instrukcje, którymi z czasem zapełnię ten poradnik.

Zanim przejdę do konkretnych wskazówek, szybka informacja na temat usuwania wstrzykniętych shaderów – wszystko co trzeba zrobić to usunięcie dorzuconych do gry plików. W zasadzie wystarczyłoby wywalić tylko dołożoną bibliotekę .dll ale wypada po sobie porządnie sprzątać i dlatego sugeruję czyszczenie wszystkich plików z paczki.

W razie wystąpienia problemów z uruchomieniem gry najlepiej jest zajrzeć na forum ReShade i tam poszukać rozwiązania problemu. Warto jednak pamiętać o paru sprawach:

  • ReShade może nie zadziałać na starszych (np.: GeForce 9600, Radeon 4700), zintegrowanych lub mobilnych układach graficznych – nie jest to reguła więc warto testować
  • niektóre programy wyświetlające informacje na ekranie (liczbę FPS, temperaturę CPU, obciążenie GPU, poziom głośności itp.) generują konflikty z ReShade
  • niektóre programy zarządzające monitorem lub wieloma monitorami (np.: UltraMon) również generują konflikty z ReShade
  • w przypadku niektórych gier konieczne jest doinstalowanie paczki DirectX 9
  • ReShade wymaga zainstalowania Visual C++ Redistributable

 

Instrukcje:

 

Diablo III

aktualizacja: 30 marca 2015

Wersja testowa SweetFX działa poprawnie z D3 więc zamiast pobierać wydanie stabilne 1.5 z oficjalnego wątku na forum Guru3D pokombinujemy z przedpremierową edycją 2.0.

Pierwszy wariant:

  1. Pobieramy archiwum z paczką ReShade aktywującą shadery SweetFX.
  2. Archiwum należy następnie rozpakować do folderu Diablo III.
  3. Uruchomić grę i odpowiedzieć twierdząco na pytanie o podjęcie ryzyka związanego z uruchomieniem magii ReShade.
  4. Po uruchomieniu Diablo III na ekranie powinno pojawić się powiadomienie o „wstrzyknięciu” shaderów.

Diablo III nie wymaga jakichś specjalnych zabiegów upiększających. Przygotowana przeze mnie konfiguracja SFX porządnie wyostrza grafikę gry, podkreśla intensywność źródeł światła oraz lekko manipuluje kolorami w celu wyeliminowania przesadzonego żółtawego zabarwienia. Jeśli wszystko zadziałało zgodnie z planem to różnica powinna prezentować się następująco:

Drugi wariant:

  1. Pobieramy archiwum z paczką ReShade łączącą shadery dostępne w SweetFXMasterEffect oraz GemFX.
  2. Archiwum należy następnie rozpakować do folderu Diablo III.
  3. Uruchomić grę i odpowiedzieć twierdząco na pytanie o podjęcie ryzyka związanego z uruchomieniem magii ReShade.
  4. Po uruchomieniu Diablo III na ekranie powinno pojawić się powiadomienie o „wstrzyknięciu” shaderów.

Druga wersja zestawu zawiera więcej bajerów niż pierwsza ale jest trochę bardziej wymagająca w stosunku do karty graficznej. Oprócz trochę mocniejszego wyostrzania obrazu zawiera również efekt poświaty, który momentami w zasadniczy sposób zmienia wygląd gry. Dorzuciłem także dodatkowe cieniowanie postaci w menu, już nie jest tak płaska jak w „czystym” Diablo III.

Drugi wariant prezentuje się następująco:

Poniżej bezpośrednie porównanie:

 

Assetto Corsa

aktualizacja: 23 marca 2015

Niestety Assetto Corsa nastręcza trochę problemów przy „wstrzykowaniu” shaderów bo gra działa na dość słabym silniku opartym na odrobinę archaicznych założeniach. Dodatkowo, przyglądając się rozwiązaniom zaimplementowanym przez Kunos Simulazioni można dojść do wniosku, że w szeregach firmy brakuje prawdziwych fachowców od silników graficznych czy pisania shaderów. Dlatego w przypadku tej gry przygotowałem prekonfigurowaną paczkę ReShade.

  1. Pobrać archiwum z paczką i rozpakować jego zawartość do folderu Assetto Corsa zlokalizowanego w  … \ Steam \ steamapps \ common \ assettocorsa  nadpisując wszystkie pliki.
  2. Uruchomić grę i odpowiedzieć twierdząco na pytanie o podjęcie ryzyka związanego z uruchomieniem magii ReShade.
  3. Upewnić się, że w opcjach grafiki włączone jest Enable post-processing effects a parametr Effect preset ustawiony jest na Egregorikoi).

Podstawowa zmiana to wyostrzenie obrazu oraz dodanie efektu poświaty. Zwiększyłem też intensywność oświetlenia samochodów z góry dzięki czemu niebo powinno się bardziej odbijać w karoserii. Zmieniłem nasilenie oraz kształt błysków Słońca na nadwoziu aut i dodałem pseudo-refleksy światła. Starałem się również poprawić kolory tak żeby były bardziej naturalne a przede wszystkim wyeliminować mało realistyczne, rozlewające się na wszystko żółte zabarwienie. Zmniejszyłem też trochę kontrast ponieważ silnik Assetto Corsa odrobinę przesadza z ekspozycją. Bardzo szybko zorientowałem się, że oświetlenie w Assetto Corsa jest za bardzo uproszczone żeby dało się zmontować uniwersalną konfigurację shaderów, która w każdych warunkach wpływałaby pozytywnie na fotorealizm gry. W związku z tym postanowiłem pójść w kierunku rozwiązań graficznych z Gran Turismo, które – według mnie – idealnie wyważa stosunek bajerów do realizmu.

Jeśli wszystko zadziałało prawidłowo to gra powinna prezentować się, mniej więcej, tak:

Natomiast bezpośrednie porównanie z „gołym” Asetto Corsa wypada następująco:

RashbaNor

Założyciel ^E^ i jednocześnie obleśny gadżetofil. Weteran grania z prawie trzydziestoletnim doświadczeniem. Stuprocentowy nerdziuch i totalny geek. Kompletnie uzależniony od komputera oraz konsol.

Latest posts by RashbaNor (see all)

8 komentarzy

  • Mam dwa układy graficzne GeForce 680GTX oraz układ graficzny Intel. Mogę korzystać albo z nVidii albo z intela. Mam najnowsze stery grafiki, próbowałem wyłączać opcję SLI, niestety bez skutku.
    Poniżej zawartość pliku d3d9.log.
    01/04/2015 11:19:11:213 [03344] | INFO | Initializing Crosire’s ReShade version ‚0.17.0.810’ built on ‚2015-03-29 11:25:12’ loaded from „D:\Diablo III\d3d9.dll” to „D:\Diablo III\Diablo III.exe” …
    01/04/2015 11:19:11:226 [03344] | INFO | Registering hooks for „C:\Windows\system32\d3d8.dll” …
    01/04/2015 11:19:11:227 [03344] | INFO | > Delayed.
    01/04/2015 11:19:11:228 [03344] | INFO | Registering hooks for „C:\Windows\system32\d3d9.dll” …
    01/04/2015 11:19:11:228 [03344] | INFO | > Delayed.
    01/04/2015 11:19:11:228 [03344] | INFO | Registering hooks for „C:\Windows\system32\d3d10.dll” …
    01/04/2015 11:19:11:228 [03344] | INFO | > Delayed.
    01/04/2015 11:19:11:228 [03344] | INFO | Registering hooks for „C:\Windows\system32\d3d10_1.dll” …
    01/04/2015 11:19:11:229 [03344] | INFO | > Delayed.
    01/04/2015 11:19:11:229 [03344] | INFO | Registering hooks for „C:\Windows\system32\d3d11.dll” …
    01/04/2015 11:19:11:229 [03344] | INFO | > Delayed.
    01/04/2015 11:19:11:229 [03344] | INFO | Registering hooks for „C:\Windows\system32\dxgi.dll” …
    01/04/2015 11:19:11:230 [03344] | INFO | > Delayed.
    01/04/2015 11:19:11:230 [03344] | INFO | Registering hooks for „C:\Windows\system32\opengl32.dll” …
    01/04/2015 11:19:11:231 [03344] | INFO | > Delayed.
    01/04/2015 11:19:11:231 [03344] | INFO | Registering hooks for „C:\Windows\system32\user32.dll” …
    01/04/2015 11:19:11:231 [03344] | INFO | > Libraries loaded.
    01/04/2015 11:19:11:241 [03344] | INFO | > Found 4 match(es). Installing …
    01/04/2015 11:19:11:263 [03344] | INFO | > Installed 4 hook(s).
    01/04/2015 11:19:11:263 [03344] | INFO | Registering hooks for „C:\Windows\system32\ws2_32.dll” …
    01/04/2015 11:19:11:264 [03344] | INFO | > Libraries loaded.
    01/04/2015 11:19:11:266 [03344] | INFO | > Found 8 match(es). Installing …
    01/04/2015 11:19:11:311 [03344] | INFO | > Installed 8 hook(s).
    01/04/2015 11:19:11:311 [03344] | INFO | Initialized.
    01/04/2015 11:19:11:858 [03344] | INFO | Redirecting ‚RegisterClassExA(0018FE0C)’ …
    01/04/2015 11:19:11:858 [03344] | INFO | > Adding ‚CS_OWNDC’ window class style flag to ‚D3 Splash Window Class’.
    01/04/2015 11:19:11:861 [03344] | INFO | Installing delayed hooks for „C:\Windows\system32\d3d9.dll” …
    01/04/2015 11:19:11:861 [03344] | INFO | > Found 9 match(es). Installing …
    01/04/2015 11:19:11:861 [03344] | INFO | > Installed 9 hook(s).
    01/04/2015 11:19:32:857 [03344] | INFO | Redirecting ‚RegisterClassExA(0018FE40)’ …
    01/04/2015 11:19:32:887 [03344] | INFO | Redirecting ‚Direct3DCreate9(32)’ …
    01/04/2015 11:19:32:951 [03344] | INFO | Redirecting ‚IDirect3D9::CreateDevice(03E007E0, 0, 1, 00080548, 80, 198D7FA4, 198D7F5C)’ …
    01/04/2015 11:19:33:035 [03344] | INFO | Recreated effect environment on runtime 0AADEE20.
    01/04/2015 11:19:40:938 [03344] | INFO | Loading effect from „D:\Diablo III\ReShade.fx” …

    • Wywala się w momencie ładowania shaderów. Jeśli odpalasz drugi wariant to sprawdź pierwszy. Obawiam się niestety, że problem może być z mobilną wersją GeForce’a. 🙁
      Możesz też poszukać pomocy na forum ReShade: http://reshade.me/forum/troubleshooting – często sam autor wstrzykiwacza stara się tam pomóc w rozwiązaniu problemów.

  • Niestety u mnie po zainstalowaniu obu wariantów wyświetla się to samo info o skontaktowaniu się z Blizzardem. gra się nie uruchamia. Zainstalowałem Visual C++, nawet przeniosłem ręcznie pliki msvcp110.dll i msvcr110.dll do folderu z grą Diablo3 i nic, nadal to samo. Moja konfiguracja Win7 pro, nVidia GTX680M SLI.

    • Problem może leżeć w mobilnym wariancie Twojej karty grafiki. Jeśli masz dwa układy graficzne to spróbuj wymusić używanie wyłącznie mocniejszego GPU czyli GeForce’a. Sprawdź też czy używasz najnowszej wersji sterownika od NVidii i przetestuj wyłączenie obsługi SLI. Możesz też zerknąć do pliku d3d9.log – tam ReShade pakuje wszystkie komunikaty.

  • Po rozpakowaniu pliku do folderu diablo 3 nie mogę uruchomić gry. Wyświetla mi się taki komunikat, jakieś pomysły? link do screena: http://i.imgur.com/Cux1Zdm.jpg

    • Już działa, poradziłem sobie. Jednak nie polecam jeżeli chodzi o diablo, oczy bolą niemiłosiernie. Może na dużych ekranach telewizora, ale nie na komputerze gdzie jesteśmy stosunkowo blisko ekranu.

    • Bolą oczy? Od stosunkowo subtelnych zmian wprowadzonych przez wstrzyknięte shadery? Pierwszy raz spotykam się z taką opinią a sporo osób używa naszej konfiguracji ReShade. Chyba problem leży gdzie indziej. Może trzeba podejść do sprawy poważniej i nadszedł czas na wizytę u okulisty? Warto też rozważyć porządne oświetlenie miejsca, w którym gramy i nie siedzieć z nosem w monitorze. 😉

    • W razie gdyby ktoś inny spotkał się z podobnym problemem, rzecz leży w braku zainstalowanego Visual C++ Redistributable. Paczkę można pobrać na stronie Microsoftu: http://goo.gl/XNpudx

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

*