Forum Média Blog Kontakt Presskit

Herní smyčka

2020-01-17

Ahoj a vítejte našeho dalšího blogu z lehce technického pohledu na herní vývoj. V dnešním díle obsáhneme skoro celou hru protože se podíváme na to co to je a jak vypadá herní smyčka.

Herní smyčka je hlavní část programu, kde hra stráví většinu svého času. Je to základní logika řídící prakticky celý běh hry. Samozřejmě jsou tu kroky, které se dějí před herní smyčkou i po jejím skončení, ale ty nejsou pro tento článek podstatné. Základní architektura herní smyčky může mít mnoho podob, ale ta nejjednodušší a často plně dostačující vypadá takto:

Herní smyčka s inicializací a ukončením.

Ano, to je opravdu všechno. Ale nezapomeňte, že pod každou z těchto tří částí se můžou schovávat tisíce nebo i miliony řádků zdrojového kódu. Takže se pojďme na ně podívat podrobněji.

Na začátku smyčky je nutné zpracovat všechny vstupy, které můžou ovlivnit stav hry. Typicky jsou to vstupy od hráčových periférií jako je klávesnice, myš nebo ovladač. Ale třeba v mutliplayerových hrách to může být informace přijatá od serveru. Ve VR hrách to zase může být poloha či pohyb VR ovladače. A určitě bychom mohli najít plno dalších. Tato část herní smyčky bude typicky nejjednodušší ale o nic méně důležitá.

Druhá část je simulace herního světa. Každý průchod herní smyčky posune herní čas o nějakou část dopředu a úkolem této fáze je spočítat jak se změnil stav světa během tohoto času. Typicky to znamená projít všechny herní objekty, spočítat jejich vzájemnou interakci (kulka letící do zdi) a také interakci se vstupy zpracovanými v předchozí části (hráč stiskne klávesu pro pohyb dopředu). Po spočítání jejich nového stavu tento stav uložíme a můžeme se dostat ke třetí fázi.

A tou je vykreslení. V této fázi tedy vykreslujeme současný stav světa na výstupní periférii. U moderních her je tato fáze výkonově nejnáročnější. U her zaměřujících se na pokročilou simulaci světa však může být simulační fáze náročnější než vykreslování.

Paralelizace

Největší nevýhodou výše uvedeného modelu je, že nevyužívá optimálně moderní hardware hlavně co se týče paralelizace. Tedy využití více vláken procesoru. Nejjednodušší zapojení paralelizace je počítání simulace a vykreslování na dvou různých vláknech paralelně. Tady ovšem nastává problém. Pokud budeme současně měnit svět v simulační fází a zároveň ho vykreslovat ve vykreslovací fázi pak budou nastávat situace kdy část světa bude vykreslena před spočtením nového stavu a část až poté. A to určitě nechceme.

Porovnání jedno-vláknové a jednoduché více-vláknové herní smyčky.

Jedno z řešení by bylo počkat s prací vykreslovacího vlákna, než se dokončí výpočet simulace, ale tím bychom se dostali zpátky do původní neparalelní smyčky a navíc bychom zbytečně měli nevyužité vlákno. Lepší řešení je takové, kdy v prvním cyklu spočteme pouze simulaci a její výsledek si uložíme bokem. Ve druhém cyklu už můžeme počítat simulaci i vykreslováním paralelně protože vykreslování používá data spočítaná simulací v předchozím cyklu a tedy nekoliduje se simulací v aktuálním cyklu. Jediná nevýhoda může být, že vykreslení je jeden cyklus pozadu, ale toho si hráč ve většině případů ani nevšimne.

Už na tomto drobném problému můžete vidět, že obecný problém paralelizace her je často velmi obtížný, protože ve hrách máte typicky mnoho navzájem závislých výpočtů a takové není vůbec jednoduché paralelizovat.

Samozřejmě i výše zmíněný návrh je velmi primitivní a moderní hry používají velmi komplexní herní smyčky, ve kterých může běžet mnoho paralelních vláken s různou mírou závislostí nebo dokonce běží paralelně několik herních smyček, kdy každá obstarává svou část simulace nebo vykreslování.

To je ve stručnosti vše k osvětlení pojmu herní smyčka, tedy procedury běžící na pozadí každé a tedy i naší hry. Doufám, že se vám dnešní článek líbil a že jste se dozvěděli něco nového. Podělte se s námi s vašimi dojmy na forum, twitteru, facebooku nebo redditu. Ahoj příště.

Diskutujte o tomto příspěvku na našem fóru nebo redditu.

Add Nebuchadnezzar to wishlist

DO STEAM OBCHODU

Aktuální blog

Zůstaňte v kontaktu