Jest coś, czego nigdy nie zrozumiałem. Jak świetna, wielka gra na PC, taka jak GTA IV, może wykorzystywać 50% mojego procesora i działać z prędkością 60 klatek na sekundę, podczas gdy demo DX obracającego się czajnika @ 60 klatek na sekundę używa aż 30%?
performance
opengl
direct3d
jmasterx
źródło
źródło
Odpowiedzi:
Ogólnie rzecz biorąc, ponieważ
Na przykład jedna łatwa optymalizacja, którą możesz wykonać, polega na tym, że nie próbuję narysować rzeczy, których nie widać. Rozważ złożoną scenę, taką jak pejzaż miejski z Grand Theft Auto IV . Mechanizm renderujący w rzeczywistości nie renderuje wszystkich budynków i konstrukcji. Zamiast tego renderuje tylko to, co widzi kamera. Gdybyś mógł latać na tyły tych samych budynków, twarzą do oryginalnego aparatu, zobaczyłbyś częściowo zbudowaną wydrążoną konstrukcję skorupy. Każdy punkt, którego kamera nie widzi, nie jest renderowany - ponieważ go nie widzisz, nie musisz próbować mu tego pokazywać.
Co więcej, zoptymalizowane instrukcje i specjalne techniki istnieją podczas opracowywania w oparciu o określony zestaw sprzętu, aby umożliwić jeszcze lepsze przyspieszenie.
Inną częścią twojego pytania jest to, dlaczego demo wykorzystuje tak dużo procesora:
Dema graficznych interfejsów API (takich jak
dxdemo
) często wracają do tak zwanego renderera oprogramowania, gdy twój sprzęt nie obsługuje wszystkich funkcji potrzebnych do pokazania ładnego przykładu. Funkcje te mogą obejmować takie cienie, odbicie, śledzenie promieni, fizykę i tak dalej.Naśladuje to działanie w pełni funkcjonalnego urządzenia sprzętowego, które prawdopodobnie nie będzie istnieć, aby pokazać wszystkie funkcje API. Ale ponieważ sprzęt tak naprawdę nie istnieje, zamiast tego działa na twoim procesorze. Jest to o wiele bardziej nieefektywne niż delegowanie na kartę graficzną - stąd duże zużycie procesora.
źródło
Cierpliwość, umiejętności techniczne i wytrzymałość.
Po pierwsze, demo DX jest przede wszystkim pomocą dydaktyczną, więc robi się to dla przejrzystości, a nie szybkości wykonania.
Jest to dość duży temat, który może ulec kondensacji, ale tworzenie gier polega przede wszystkim na zrozumieniu danych i ścieżek wykonania w prawie patologicznym stopniu.
źródło
Gry 3D świetnie oszukują twoje oczy. Na przykład istnieje technika zwana okluzją otoczenia przestrzeni ekranu (SSAO), która zapewni bardziej realistyczne wrażenie poprzez zacienianie tych części sceny, które są bliskie nieciągłości powierzchni. Jeśli spojrzysz na narożniki ściany, zobaczysz, że wydają się one nieco ciemniejsze niż centra w większości przypadków.
Ten sam efekt można osiągnąć za pomocą radia opartego na dość dokładnej symulacji. Radość będzie również uwzględniać więcej efektów odbijających się świateł itp., Ale jest kosztowna obliczeniowo - to technika śledzenia promieni.
To tylko przykład. Istnieją setki algorytmów do grafiki komputerowej w czasie rzeczywistym i są one zasadniczo oparte na dobrych przybliżeniach i zwykle przyjmują wiele założeń. Na przykład sortowanie przestrzenne musi być wybierane bardzo ostrożnie w zależności od prędkości, typowego położenia kamery, a także ilości zmian w geometrii sceny.
Te „optymalizacje” są ogromne - możesz skutecznie zaimplementować algorytm i sprawić, by działał 10 razy szybciej, ale wybranie inteligentnego algorytmu, który daje podobny wynik („oszustwo”), może sprawić, że przejdziesz z O (N ^ 4) na O ( log (N)).
Optymalizacja rzeczywistej implementacji sprawia, że gry są jeszcze bardziej wydajne, ale jest to tylko optymalizacja liniowa.
źródło
Eeeeek!
Wiem, że to pytanie jest stare, ale ekscytujące, że nikt nie wspomniał o VSync !!! ???
Porównywałeś użycie procesora w grze przy 60 klatkach na sekundę do użycia procesora w demonstracji czajnika przy 60 klatkach na sekundę.
Czy nie jest oczywiste, że oba działają (mniej więcej) dokładnie przy 60 klatkach na sekundę? To prowadzi do odpowiedzi ...
Obie aplikacje działają z włączoną funkcją vsync! Oznacza to (stępiony), że liczba klatek na sekundę renderowania jest zablokowana na „pionowym przedziale pustych przestrzeni” monitora. Sprzęt graficzny (i / lub sterownik) będzie renderowany tylko z maksymalną prędkością. 60 klatek na sekundę 60 klatek na sekundę = 60 Hz (Hz = na sekundę) częstotliwość odświeżania. Prawdopodobnie używasz raczej starego, migoczącego CRT lub zwykłego wyświetlacza LCD. Na CRT pracującym z częstotliwością 100 Hz prawdopodobnie zobaczysz szybkość klatek do 100 Hz. VSync stosuje się również w podobny sposób jak wyświetlacze LCD (zwykle mają częstotliwość odświeżania 60 Hz).
Tak więc demo czajnika może działać znacznie wydajniej! Jeśli zużywa 30% czasu procesora (w porównaniu do 50% czasu procesora w GTA IV), to prawdopodobnie zużywa mniej czasu procesora na każdą ramkę i po prostu dłużej czeka na następny pionowy interwał zerowy. Aby porównać obie aplikacje, wyłącz vsync i zmierz ponownie (zmierzysz znacznie więcej FPS dla obu aplikacji).
Czasami można wyłączyć vsync (większość gier ma opcję w ustawieniach). Czasami zobaczysz „artefakty łzawiące”, gdy vsync jest wyłączony.
Możesz znaleźć szczegółowe informacje na temat tego i dlaczego jest on używany na wikipedii: http://en.wikipedia.org/wiki/Vsync
źródło
Podczas gdy wiele odpowiedzi tutaj stanowi doskonałe wskazówki, jak zamiast tego odpowiem na prostsze pytanie, dlaczego
Być może najlepszym przykładem (z pewnością jednym z najbardziej znanych) jest oprogramowanie Id. Bardzo wcześnie zdali sobie sprawę, w czasach komandora Keena (na długo przed 3D), że wymyślenie sprytnego sposobu na osiągnięcie czegoś 1 , nawet jeśli opierał się na nowoczesnym sprzęcie (w tym przypadku karcie graficznej EGA!), Który był lepszy od grafiki konkurencja, dzięki której Twoja gra będzie się wyróżniać. Było to prawdą, ale dalej zdali sobie sprawę, że zamiast samodzielnie wymyślać nowe gry i treści, mogliby licencjonować tę technologię, uzyskując w ten sposób dochód od innych, jednocześnie będąc w stanie opracować silnik nowej generacji i tym samym ponownie przeskoczyć konkurencję .
Umiejętności tych programistów (w połączeniu z doświadczeniem biznesowym) uczyniły ich bogatymi.
To powiedziawszy, niekoniecznie pieniądze motywują takich ludzi. Prawdopodobnie tyle samo pragnienia do osiągnięcia, do osiągnięcia. Pieniądze, które zarobili na początku, po prostu oznaczają, że mają teraz czas, aby poświęcić się temu, co lubią. I podczas gdy wielu ma interesy zewnętrzne, prawie wszyscy nadal programują i próbują znaleźć sposoby na osiągnięcie lepszego efektu niż ostatnia iteracja.
Mówiąc wprost, osoba, która napisała demo czajnika, prawdopodobnie miała jeden lub więcej z następujących problemów:
Te ostatnie mogą brzmieć ostro 2, ale najwyraźniej są tacy, którzy są lepsi od innych, krzywe dzwonowe czasami mają ekstremalne końce i zwykle przyciągają je odpowiednie krańcowe końce tego, co dzieje się z tą umiejętnością.
Głównym powodem są prawdopodobnie mniejsze cele. Demo czajnika było właśnie tym celem. Ale nie demonstracja umiejętności programistów 3 . Byłaby to wersja demonstracyjna jednego małego aspektu (dużego) systemu operacyjnego, w tym przypadku renderowania DX.
Dla tych, którzy oglądają demo, nie ma znaczenia, że zużywa znacznie więcej procesora niż jest to wymagane , o ile wygląda wystarczająco dobrze. Nie byłoby zachęty do eliminowania odpadów, gdyby nie było beneficjenta. Dla porównania, gra chciałaby mieć wolne cykle dla lepszego AI, lepszego dźwięku, więcej wielokątów, więcej efektów.
źródło
Z kilku powodów
EDYCJA: Aby podać kilka liczb
2,8 Ghz Athlon-64 z procesorem graficznym NV-6800. Wyniki są następujące:
źródło
Czasami scena może mieć więcej niż się wydaje. Na przykład, obracany czajniczek z tysiącami wierzchołków, mapowaniem środowiska, mapowaniem wypukłości i innymi złożonymi modułami cieniującymi piksele, które są renderowane jednocześnie, wymaga dużej ilości przetwarzania. Wiele razy te demo czajników mają po prostu pokazać jakiś efekt specjalny. Nie zawsze mogą też najlepiej wykorzystywać procesor graficzny, gdy absolutna wydajność nie jest celem.
W grze możesz zobaczyć podobne efekty, ale zwykle są one wykonywane w sposób kompromisowy, aby zmaksymalizować liczbę klatek na sekundę. Te optymalizacje obejmują wszystko, co widzisz w grze. Powstaje pytanie: „Jak możemy stworzyć najbardziej spektakularną i realistyczną scenę przy minimalnej mocy obliczeniowej?” To sprawia, że programiści gier są jednymi z najlepszych optymalizatorów.
źródło
źródło
Przy wszystkich udzielonych kwalifikowanych i dobrych odpowiedziach wciąż brakuje jednej ważnej: Licznik wykorzystania procesora w systemie Windows nie jest bardzo niezawodny. Myślę, że to proste demo czajnika po prostu wywołuje funkcję renderowania w swojej bezczynnej pętli, blokując wymianę bufora.
Teraz licznik wykorzystania procesora w systemie Windows sprawdza tylko, ile czasu procesora jest poświęcane w ramach każdego procesu, ale nie w jaki sposób ten czas procesora jest wykorzystywany. Spróbuj dodać
zaraz po powrocie z funkcji renderowania i porównaj.
źródło
Ponadto istnieje wiele wielu sztuczek z artystycznego punktu widzenia w celu oszczędzania mocy obliczeniowej. W wielu grach, zwłaszcza starszych, cienie są wstępnie obliczane i „wypiekane” bezpośrednio do tekstur mapy. Wiele razy artyści próbowali używać samolotów (dwóch trójkątów) do reprezentowania rzeczy takich jak drzewa i efekty specjalne, kiedy wyglądałyby w większości tak samo. Mgła w grach jest łatwym sposobem na uniknięcie renderowania odległych obiektów i często gry miałyby wiele rozdzielczości każdego obiektu dla widoków dalekich, średnich i bliskich.
źródło
Trzon każdej odpowiedzi powinien być taki - Transformacje, które wykonują silniki 3D, są najczęściej określane w dodatkach i mnożeniach (algebra liniowa) (bez rozgałęzień lub skoków), operacje rysowania pojedynczej klatki są często określane w taki sposób, że wielokrotność takie zadania add-mula można wykonywać równolegle. Rdzenie GPU są bardzo dobrymi dodatkami i mają dziesiątki lub setki dodatków.
Procesorowi pozostawia się wykonywanie prostych czynności - takich jak sztuczna inteligencja i inna logika gry.
źródło
Chociaż GTA jest prawdopodobnie bardziej wydajna niż wersja DX, pomiar wydajności procesora w ten sposób jest zasadniczo zepsuty. Wydajność można określić np. Przez ilość pracy wykonanej w danym czasie. Prosty kontrprzykład: spawnuj jeden wątek na logiczny procesor i pozwól na uruchomienie prostej nieskończonej pętli. Otrzymasz zużycie procesora w 100%, ale nie jest to wydajne, ponieważ nie wykonuje się żadnej użytecznej pracy.
To także prowadzi do odpowiedzi: jak gra może być wydajna? Podczas programowania „świetnych dużych gier” poświęcony jest wielki wysiłek, aby zoptymalizować grę we wszystkich aspektach (co obecnie zwykle obejmuje również optymalizację wielordzeniową). Jeśli chodzi o wersję demonstracyjną DX, jej celem nie jest szybkie działanie, ale raczej demonstrowanie koncepcji.
źródło
Myślę, że powinieneś przyjrzeć się wykorzystaniu GPU zamiast procesora ... Założę się, że karta graficzna jest znacznie bardziej obciążona w GTA IV niż w próbce Teapot (powinna być praktycznie bezczynna).
Może możesz użyć czegoś takiego jak ten monitor, aby sprawdzić, czy:
http://downloads.guru3d.com/Rivatuner-GPU-Monitor-Vista-Sidebar-Gadget-download-2185.html
Warto również rozważyć liczbę klatek na sekundę, być może próbka czajnika działa z pełną prędkością (może 1000 fps), a większość gier jest ograniczona do częstotliwości odświeżania monitora (około 60 fps).
źródło
Spójrz na odpowiedź na vsync; dlatego działają z tą samą liczbą klatek na sekundę.
Po drugie, procesor nie trafia w grę. Uproszczone wyjaśnienie jest takie, że główna pętla gry jest po prostu nieskończoną pętlą:
Nawet jeśli twoja gra (lub w tym przypadku czajnik) nie robi wiele, wciąż zjadasz procesor w swojej pętli.
50% procesora w GTA jest „bardziej produktywne” niż 30% w wersji demo, ponieważ bardziej niż prawdopodobne, że w ogóle nie robi wiele; ale GTA aktualizuje mnóstwo szczegółów. Nawet dodanie do wersji demonstracyjnej „Sleep (10)” prawdopodobnie obniży wydajność procesora o tonę.
Na koniec spójrz na użycie GPU. Wersja demo prawdopodobnie zajmuje <1% na nowoczesnej karcie graficznej, podczas gdy GTA prawdopodobnie zdobędzie większość podczas gry.
Krótko mówiąc, twoje testy porównawcze i pomiary nie są dokładne.
źródło
Demo czajnika DX nie zużywa 30% procesora wykonującego użyteczną pracę. Jest zajęty, ponieważ nie ma nic innego do roboty.
źródło
Z tego, co wiem o serii Unreal, niektóre konwencje są łamane jak enkapsulacja. Kod jest kompilowany do kodu bajtowego lub bezpośrednio do kodu maszynowego w zależności od gry. Ponadto obiekty są renderowane i pakowane w postaci siatek, a rzeczy takie jak tekstury, oświetlenie i cienie są wstępnie obliczane, podczas gdy jako czysta animacja 3D wymaga tego w czasie rzeczywistym. Gdy gra jest uruchomiona, istnieją również pewne optymalizacje, takie jak renderowanie tylko widocznych części obiektu i wyświetlanie szczegółów tekstury tylko przy zbliżeniu. Wreszcie jest prawdopodobne, że gry wideo są zaprojektowane w taki sposób, aby jak najlepiej wykorzystać platformę w danym momencie (np .: Intelx86 MMX / SSE, DirectX, ...).
źródło
Myślę, że brakuje tutaj ważnej części odpowiedzi. Większość odpowiedzi mówi „Poznaj swoje dane”. Faktem jest, że musisz w ten sam sposób i z takim samym stopniem ważności znać także:
ALE , ponadto, przy obecnych współczesnych komputerach, nigdy nie byłbyś w stanie odtwarzać prawdziwego wideo 1080p przy >> 30ftp (pojedynczy obraz 1080p w 64 bitach zająłby 15 000 Ko / 14,9 MB). Powodem tego jest próbkowanie / precyzja. Gra wideo nigdy nie używałaby podwójnej precyzji (64 bity) dla pikseli, obrazów, danych itp., Ale raczej używałaby niższej niestandardowej precyzji (~ 4-8 bitów), a czasami mniejszej precyzji przeskalowanej technikami interpolacji, aby umożliwić rozsądne obliczenia czas.
Istnieją również inne techniki, takie jak obcinanie danych (zarówno ze standardem OpenGL, jak i implementacją oprogramowania), kompresja danych itp. Należy również pamiętać, że obecne procesory graficzne mogą być> 300 razy szybsze niż obecne procesory pod względem możliwości sprzętowych. Jednak dobry programista może uzyskać współczynnik 10-20x, chyba że twój problem jest w pełni zoptymalizowany i całkowicie możliwy do zrównoleglenia (szczególnie zrównoleglenie zadania).
Z doświadczenia mogę powiedzieć, że optymalizacja jest jak krzywa wykładnicza. Aby osiągnąć optymalną wydajność, wymagany czas może być niezwykle ważny.
Aby wrócić do czajnika, powinieneś zobaczyć, w jaki sposób geometria jest reprezentowana, próbkowana i z jaką precyzją Vs widać w GTA 5, pod względem geometrii / tekstur i, co najważniejsze, szczegółów (precyzja, próbkowanie itp.)
źródło