Jump to content

Dev Workshop - Problemy wysokich rozdzielczości.


[DE]Grzegorz
 Share

Recommended Posts

Aktualizacja 25.0 zawiera wiele niewidzialnych poprawek i zmian obsługi trybu pełnoekranowego. Wiele z tych wysiłków nie miało nic wspólnego z trybem pełnoekranowego i było związane z czymś dużo bardziej skomplikowanym, czymś, czego nie byliśmy gotowi wydać, czegoś, co sprawiało graczom problemy od dłuższego czasu. Lubimy powiedzenie "żaden dobry uczynek nie obejdzie się bez kary" w odniesieniu do naprawiania lub poprawiania funkcji gry, a to jest opowieść o jednym z takich przypadków.

By lepiej pojąć ten bajzel, potrzebujecie trochę kontekstu. W ostatnich latach, ekrany komputerowe poprawiły się na wiele sposobów: lepsze odwzorowanie barw, krótszy czas reakcji i, co najważniejsze, więcej pikseli. Wydawać się może, że wśród producentów laptopów trwa wyścig zbrojeń prowadzący do coraz to większych rozdzielczości, na coraz to mniejszych panelach - nikogo nie dziwi ekran 4K w 15" laptopie, ze słabą, zintegrowaną kartą graficzną, która musi go obsłużyć.

Pierwszy problem z ekranami wysokiej rozdzielczości (znanymi też jako wysokie DPI) jest taki, że tekst może być zbyt mały by odczytać go w natywnej rozdzielczości. Przez wiele lat rozwiązanie było proste: nakaż Windowsowi powiększać aplikacje. Niektóre programy są świadome tego skalowania i zamiast "rozciągać" tekst, rysują go w natywnej rozdzielczości w większym rozmiarze czcionki; to wygląda świetnie - uważam czytanie na ekranach 4K za dużo przyjemniejsze dla oczu.

Drugim problemem ekranów wysokiej rozdzielczości są oczywiście gry, to tutaj zaczynają się problemy. Wychodzi na to, że Windows obsługuje gry w bardzo skomplikowany sposób, który próbuje z całych sił zrobić to jak najlepiej, ale utyka między młotem a kowadłem. Pierw, pogadajmy o młocie.

Jaka jest różnica między 1080p (1920x1080 pikseli) a 4K (3840x2160 pikseli)? Prócz tego, że zmieniono konwencje nazw z wysokości na szerokość, możecie zauważyć że rozdzielczośc okna została podwojona. Jeśli zmienicie ekran z 1080p na 4K, a chcecie by programy pozostały w tym samym rozmiarze, wystarczy że ustawicie skalowanie na 200% i wszystko znów będzie wyglądać świetnie.

Problemem jest to, że gracze wymagają ogromu mocy od karty graficznej: wiele rzeczy jest wykonywane piksel po pikselu - więcej pikseli zajmie więcej czasu - jeśli podwoicie rozdzielczość, ilość pikseli do wypełnienia wzrasta czterokrotnie! Zamiast 2 milionów pikseli w 1080p, macie ponad 8 milionów w 4K! Potrzebujecie potężnej karty graficznej by uciągnąć rozdzielczość 4K i oto dlaczego prawdopodobnie nie chcecie grać w Warframe w 4K na biurowym laptopie!

Pamiętacie, jak wspomniałem, że Windows skaluje programy za was? Jak się okazuje, w przypadku gier nie zawsze ma to miejsce. Przygotujcie się - to was zaskoczy!

Jeśli uruchamiacie niezależną od DPI grę w trybie okna, lub okna pełnoekranowego, Windows przeskaluje je automatycznie. Gra w 720p uruchomi się w 1440p, a Windows nawet nałoży filtr wyostrzający, by wyglądało to ładniej. Takie jest domyślne zachowanie i próbuje wyjć jak najlepiej z kiepskiej sytuacji: wygląda świetnie, nie musi rysować 4x więcej pikseli i jest to idealny tryb dla laptopa 4K bez dedykowanej karty graficznej.

Po przejściu w tryb ekranowy nawet raz - tylko raz - wszystko się zmienia. By przejść w natywny tryb pełnoekranowy, Windows musi uświadomić grę, co do prawdziwej rozdzielczości ekranu, jeśli gracie tylko w trybie pełnoekranowym nie jest to problemem - nigdy tego nawet nie zauważycie - ale gdy tylko spróbujecie powrócić do trybu w oknie, macie problem - teraz gracie w natywnej rozdzielczości: okno będzie znacznie mniejsze, niż przedtem.

Jak się okazuje, gdy Windows zauważy że weszliście w tryb pełnoekranowy, zapamiętuje to. Oznacza w rejestrze flagę, która mówi "ta aplikacja może przejść w tryb pełnoekranowy, więc lepiej żeby traktować ją jako świadomą wysokiego DPI przy każdym uruchomieniu". Koniec automatycznego skalowania, koniec filtra wyostrzającego, zostało tylko malutkie okienko. Uruchomienie gry ponownie nie pomoże. Ponowne uruchomienie komputera też nie. Zainstalowanie Warframe również tego nie naprawi. Utknęliście.

Więc co zrobili gracze? Powiększali okna: dwukrotnie, czterokrotnie więcej pikseli i nie byli w stanie zrozumieć, dlaczego Warframe nagle chodzi dużo wolniej. Oto, co zaczęło całą podróż: gracze z ekranami 4K który zastanawiają się, dlaczego ilość FPS w grze spadła z 60 do 15. Jako że był to coraz częstszy problem, musieliśmy coś zrobić, pamiętajcie: żaden dobry uczynek nie obejdzie się bez kary.

Gdy wszczęliśmy dochodzić co mogło by poprawić naszą obsługę wysokiego DPI, pierwszą rzeczą jaką zauważyliśmy było to, że kod obsługujący tryb pełnoekranowy był pełen nadużyć sterownika karty graficznej. Jako, że nasz kod obsługujący tryb okna i pełnoekranowy dzieli wiele wspólnego kodu, postanowiliśmy zacząć od porządków.

Zanim przejdę dalej, pozwólcie mi opowiedzieć jak trudnym jest debugowanie gier pełnoekranowych. Nikt tego nie lubi, bo niemożliwe jest typowe uruchomienie gry i debuggera, ponieważ tryb pełnoekranowy uniemożliwia użycie okna debuggera! Nie możesz podejrzeć zmiennych, zajrzeć w kod, jest to bardzo frustrujące. Gdy lata temu mieliśmy działający kod trybu pełnoekranowego, zostawiliśmy go - nikt nie chciał go ruszać - gdy trzeba było cokolwiek w nim naprawić, nie było to przyjemne.

Spędziłem tydzień pracując na słabym laptopie 4K podpiętym do stacji roboczej, by zdalnie debugować i naprawić problemy we wsparciu pełnego ekranu i zaimplementować funkcje obsługi wysokiego DPI. Jako, że wszystkie dane były przesyłane po sieci, każdy test zajmował 5 minut. Była to ciągła walka o postęp - naprawienie jednego błędu ujawniało kolejny - a na samym końcu trzeba dokonać optymalizacji (przyśpieszyliśmy przełączanie pełnego ekranu, ale z odrobiną dalszej pracy może być nawet i dwukrotnie szybsze, niż obecnie!).

Wraz z nadejściem Aktualizacji 25.0, wsparcie wysokiego DPI działało, ale nie było dosyć czasu na przetestowanie, więc w ostatniej chwili zostało to przełożone, aż sytuacja z Aktualizacją Główną się uspokoi; wydaliśmy wszystkie poprawki, ale żadnego wsparcia wysokiego DPI. By pomóc graczom, którzy utknęli w natywnej rozdzielczości dodaliśmy obejście do launchera, które sprawia, że system zapomina że gra kiedykolwiek weszła w tryb pełnoekranowy. Wszystko powinno działać tak, jak gdybyście uruchomili Warframe z filtrem skalowania Windows - szybko i płynnie - ale pamiętajmy, żaden dobry uczynek nie obejdzie się bez kary.

Porozmawialiśmy o młocie, przejdźmy teraz do kowadła.

Jedną z krytycznych pomyłek, było przyjęcie, ze gdy DirectX przełączył się w tryb pełnoekranowy i uświadomił grę co do DPI, byłby w stanie robić to płynnie. Pamiętajcie, że chcieliśmy być domyślnie niezależni od DPI, by Windows aplikował ładny filtr wyostrzający. Mieliśmy raptem parę maszyn obsługujących 4K do testów i kiedy wyglądało na to, że działa to u nas, wychodziło, że wielu ludziom sprawiało to całą gamę problemów.

Jeśli przejrzycie dokumentacje MSDN o obsłudze wysokiego DPI, zauważycie, że raz po raz odradza się robić to, co zrobiliśmy: mówi, że przełączanie obsługi DPI na żywo może prowadzić do nieprzewidzianego zachowania aplikacji. . Mieliśmy nadzieję, że ujdzie nam na sucho a gra będzie dobrze działać i wyglądać we wszystkich przypadkach, ale nie poszło zgodnie z planem: zaczęliśmy otrzymywać zgłoszenia utykania kursora w lewej górnej części okna, okna skalowane od krawędzi ekranu i inne, dziwne problemy.

Innym problemem, było to, że pewni gracze nie byli świadomi tego skalowania i prawdopodobnie przeszli kiedyś w tryb pełnoekranowy, co sprawiło, że Windows je wyłączył.
Dostosowali swoje ustawienia pod natywną rozdzielczość, a gdy my przywróciliśmy domyślne skalowanie, ich okna stały się większe. Bardziej obeznani z tematem gracze pytali, dlaczego pełnoekranowe okno nie działa w natywnej rozdzielczości ekranu (nie zauważając, że ilość FPS uległa poprawie!)

Kolejnym problemem na jaki wpadliśmy był to, że gdy gra udawała nie być świadomą trybu DPI, może pozwolić na skalowanie okna, które nie zmieści się na ekranie: znowu, w pewnych testach było ok, ale słyszeliśmy o problemach, gdzie gracze podawali natywną rozdzielczość ekranu nie wiedząc, że Windows powiększy to dwukrotnie i kończyli z oknem tak dużym, że tracili dostęp do interfejsu który pozwoliłby cofnąć zmianę.

Pracowaliśmy do późnej nocy po wypuszczeniu Aktualizacji 25.0 szukając kompromisu. Eksperymentowaliśmy ze wsparciem wysokiego DPI nad którym pracowaliśmy wcześniej, by sprawdzić, czy możemy obsługiwać oba tryby. Ostatecznie, porzuciliśmy wszelką nadzieję korzystania z natywnego skalowania systemu Windows - nie możesz "udawać głupa", jeśli kiedykolwiek będziesz musiał zmienić zdanie później - to zdaje się wyjaśniać, dlaczego Windows nalega by oznaczać gry jako świadome wysokiego DPI na zawsze, jeśli kiedykolwiek zostaną uruchomione w pełnym ekranie.

I oto nasz młot i kowadło: niektórzy gracze chcą skalowania wysokiego DPI, bo posiadają fantastyczne ekrany, ale słabe karty graficzne; inni chcą natywnej rozdzielczości bo ich karty graficzne są w stanie to podźwignąć. Niektórzy ludzie (jak ja) chcą natywnego skalowania systemowego ponieważ jest wyraźniejsze, ale nie możemy wyłączać go w biegu bez zapraszania "niezamierzonego zachowania aplikacji".

Wkrótce, wraz z poprawką 25.0.2, nadejdzie wsparcie wysokiego DPI nad którym pracowaliśmy przed tą aktualizacją. Mieliśmy nadzieję zintegrować ją wraz z innymi rzeczami (skalowanie interfejsu i HUD) i możliwie, wewnętrznie poeksperymentować z rysowaniem mieszanych rozdzielczości, by UI pozostawało wyraźne, a gra chodziła płynnie, ale nie było czasu - musimy się tym zająć najwcześniej jak to możliwe.

W ustawieniach wyświetlania znajdziecie teraz nową opcję "Tryb Skalowania Okna"; jeśli ustawiliście skalowanie aplikacji Windows na 100%, nie zauważycie żadnej różnicy, jednak jeśli korzystacie ze skali ustawionej pod wysokie DPI, możecie wybrać między skalowaniem okna (wydajność!) lub rysować w natywnej rozdzielczości (jakość!). Jeśli graliście wcześniej w 4K i dziwi was, dlaczego wszystko powiększyło się, ustawcie opcję "Natywna" i prawdopodobnie będzie tak, jak wcześniej.

Menu opcji wyświetlania mogłoby być lepsze - wciąż jest lekko mylące, ponieważ wyświetla rozdzielczość przed skalowaniem, zamiast po (jest tak od na tyle długiego czasu, że zmiana tego byłaby równie myląca).

Inne znane problemy, których nie byliśmy w stanie naprawić przed wydaniem:

  • Jeżeli zmienisz Skalowanie Aplikacji Windows w biegu gra może źle na to zareagować (szczególnie jeśli byłeś w pełnym oknie)
  • Jeżeli przeciągniesz Warframe z jednego monitora na drugi z inną rozdzielczością DPI gra nie zaktualizuje wielkości okna (nie jestem pewien, czy musimy to naprawić?)
  • W przeskalowanym trybie możesz stworzyć komicznie ogromne okna jeśli masz kilka monitorów

Jeśli są inne problemy po poprawce 25.0.2 proszę, daj nam znać w komentarzach niżej -- jeszcze nie zakończyliśmy prac nad tym i z pewnością pojawią się jeszcze jakieś dziwactwa. Nie ma dobrych uczynków bez kary.

Edited by hotfixbot3000
  • Like 2
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...