speciál
Vývoj her v XNA #5: Základní principy 3D grafiky

Vývoj her v XNA #5: Základní principy 3D grafiky
Vývoj her v XNA #5: Základní principy 3D grafiky
13:56, 15.01.2011

Můžeme se zabývat zobrazováním ve 2D. Grafiku naší hry řešit skládáním obrázků k sobě přímo na konkrétní souřadnice obrazovky. Nalevo nahoře mít bod (x=0, y=0), napravo dole bod o souřadnicích šířky a výšky obrazovky. Poté nám už stačí doprogramovat herní logiku, případně přidat nějaké poloprůhledné efekty nebo zvuky a hra máme hotovou. Pomocí 2D grafiky bylo navrženo mnoho úspěšných her, například Tetris, Sokoban, Bejeweled nebo Mario. Takové hry většinou bývají snadnější na vytvoření. Jak budou dobré, záleží hlavně na nějakém originálním a pěkném nápadu.

Když se ale podíváme na hry z poslední doby, vidíme, že jejich grafika urazila obrovský kus cesty. Hraní už připomíná spíš filmový zážitek, můžeme se pohybovat rozlehlými prostorovými světy. Není to už jen o překrývajících se obrázcích, ale ve hře máme umístěné složité 3D modely, které mají animace, mohou se pohybovat a podobně. Spolu s dalšími objekty, jako například budovami, utváří celé virtuální prostředí. Na takovýchto hrách pracují v dnešní době týmy desítek lidí – programátoři, animátoři, herní designéři, návrháři levelů a další. Většina velkých her využívá již nějakých hotových enginů, z nichž některé jsou vyvíjeny i více jak deset let.

3D hry v XNA

XNA Framework nám také umožňuje vytvářet 3D hry. Je ideální technologií pro jednotlivce a menší herní týmy. Velké hry se většinou tvoří pomocí rozsáhlejších a složitějších nástrojů, to nám ale vůbec nevadí. Jak už bylo řečeno, jeho hlavní myšlenkou je zjednodušit práci vývojářům. Není už tedy potřeba psát tak velké množství pomocného opakujícího se kódu. Máme zde předpřipravenou herní smyčku, funkce pro přehrávání hudby nebo pro různé pomocné matematické výpočty. Oproti klasickému přístupu pomocí DirectX nebo OpenGL je programování v XNA mnohem pohodlnější. Protože píšeme v některém z jazyků .NET (například v C# nebo ve Visual Basicu .NET), funguje zde automatická správa paměti (garbage collection). Nemusíme se tedy tolik bát o každý naalokovaný objekt, jako je to například potřeba v jazyce C++.

Je ale potřeba připomenout, že samotný XNA Framework není kompletní herní engine, ani nemá k dispozici nějaké nástroje, kde by šla hra jednoduše “naklikat”. Přeci jenom už je potřeba znát nějaké základy 3D grafiky a orientovat se v programování. Například vytvoření reálných kolizí mezi objekty už může dát docela dost práce, pokud nevyužijeme již nějaké hotové knihovny. Jinak je to ale moc pěkná technologie, dobře zdokumentovaná, s mnoha články a návody na internetu. Většina z těchto zdrojů je sice zatím jen v angličtině, ale to se snad časem bude postupně měnit.

Principy 3D grafiky

Zkusíme si projít základní principy 3D grafiky a podívat se, jak to tam funguje. U 2D scény jsme to měli jednoduché, přímo na souřadnice monitoru jsme umisťovali text, obrázky, nebo různé čáry, obdélníky apod. Prostor, který jsme uvažovali, byl plochý, návrh celého herního levelu jsme si mohli jednoduše nakreslit na papír.

3D grafika nám dává mnohem více možností. Na monitoru zobrazujeme pohled na prostorový svět, jako bychom se na něj dívali kamerou. Objekty se mohou překrývat, na některé vůbec nemusíme vidět, protože mohou být například skryty za námi. Virtuálním světem se většinou můžeme pohybovat a prohlížet si ho. Pomocí 3D grafiky mohou být renderované FPS střílečky, ale například i strategie nebo prostorové logické hry.

Pokud chceme začít uvažovat ve 3D, většinou si musíme určit nějaký pevný bod, okolo kterého potom budeme umisťovat objekty. Bývá to bod (0, 0, 0). Máme zde tři souřadné osy – x, y, z. Ty si můžeme představit v základním pohledu tak, že osa x je horizontální (míří zleva doprava), osa y míří zdola nahoru a osa z směrem z dálky k nám. Těmto souřadnicím se říká světové souřadnice, pozicujeme v nich všechny naše objekty. Pokud se chceme herním světem pohybovat, asi nejlogičtější představa je taková, že všechny objekty stále zůstávají na svém stejném místě, na daných světových souřadnicích. Jen se na ně díváme kamerou z různých stran.

Přikládám obrázek souřadných os, doporučuji si ho pro začátek vytisknout a položit vedle počítače. Než vám prostorové uvažování přejde úplně do krve, určitě vám to při programování pomůže s orientací.

Klik pro zvětšení (Vývoj her v XNA #5: Základní principy 3D grafiky)

Modely

Další, na co se podíváme, je, z jakých stavebních kamenů se dá náš virtuální svět stavět. Stejně jako máme 2D scénu složenou z jednotlivých obrázků a plochých objektů, 3D scénu si můžeme skládat z takzvaných modelů. To jsou většinou objekty konkrétního tvaru (auto, zbraň) vytvořené v některém ze specializovaných grafických 3D editorů (například v Blenderu, nebo v placeném 3D Studiu Max). Abychom s nimi mohli dále pracovat ve hře, stačí nám si je do ní načíst. O jejich správné zpracování se nám postará přímo XNA Framework. Modely ve správném formátu se dají sehnat i zdarma na internetu, případně jako příloha některých odborných knížek. V příštím díle si ukážeme, odkud se dají stáhnout a jak využít. Jen si je potřeba dát pozor, často takto dostupné modely bývají zdarma jen pro osobní nekomerční použití.

Když se na nějakou scénu podíváme ještě více zblízka, zjistíme, že každý model nebo 3D objekt je složen z jednotlivých malých trojúhelníčků. To bylo dobře poznat u starých her, kdy byly u objektů často vidět hranaté okraje. V dnešní době, díky velkému nárustu výkonu počítačů, už vypadají koule mnohem kulatěji, ale princip zůstává pořád stejný. Grafická karta je na operace s trojúhelníky dobře optimalizovaná a provádí je rychle.

Vytváření vlastních objektů

Modely nemusí být jen vytvořeny v grafických editorech, ale nějaké objekty si můžeme generovat přímo v naší hře. Často se takto vytváří například terén, nebo nějaký tvarově méně složitý obsah. Tyto objekty se potom skládají v podstatě trojúhelníček po trojúhelníčku, propojováním jednotlivých bodů. Poté se jim nastavují textury a takzvané normálové vektory (jejich směry), podle kterých se potom posuzuje osvětlení. Odvětví 3D grafiky je opravdu rozsáhlé. Dá se třeba řešit, jak na sebe objekty vrhají stíny. Mohou se řešit různé výkonové optimalizace, aby se vždy scéna nepřekreslovala celá, ale jen její viditelné objekty. Existuje opravdu mnoho knížek zabývajících se těmito oblastmi a stále se zde dá na něco nového přicházet.

V příštích dílech určitě zmíníme alespoň některé z těchto zajímavých věcí a pustíme se už do skutečného programování jednoduché 3D hry.

Předchozí díly seriálu naleznete zde.


CGwillWin