Metódy 3D grafiky (5. časť, obloha)
... pokračovanie z minulej lekcie
Obloha je zavŕšením nášho 3D sveta. Je to jeden z najviac viditeľných prvkov scény. Prvok nenápadný, ale silne ovplyvňujúce dojem hráčov z hry. Preto stojí za to venovať oblohe osobitnú starostlivosť.
1. Jednofarebná obloha
Jednofarebná obloha je úplne najjednoduchším riešením oblohy. Nestojí nás skoro nič, stačí len nastaviť farbu pozadia scény na vybranú farbu. Samozrejme náročnejšieho hráča týmto štýlom oblohy príliš neuspokojíme.
2. Hmla
Ak je scéna trochu komplikovanejšia, môžeme naraziť na nedostatočnú rýchlosť vykresľovanie grafiky. Jedným z možných riešení je obmedzenia vzdialenosti dohľadu. Vykresľujú sa len blízke objekty a tým je možné výrazne prispieť k rýchlosti grafiky. Ak chceme zabrániť náhlemu objavovanie sa objektov, môžeme použiť hmlu. Hmla zabezpečí, že objekty s rastúcou vzdialenosťou pomaly mizne v hmle a až sú v hmle úplne potopenej, môžu zmiznúť obmedzením hranice dohľadu a pritom miznutie vyzerá prirodzene a nenásilne.
Pre účel obmedzenia viditeľnosti objektov je vhodnejšie lineárny hmla. U lineárne hmly zadávame počiatok a koniec hmly. Na začiatku hmly začnú objekty pomaly šednúť až na hranici konca hmly zmizne úplne. Medzi začiatkom a koncom sa hmla lineárne zvyšuje. Koniec lineárne hmly preto môže byť zhodný so vzdialenosťou dohľadu.
Hmla sa renderovací jednotkou realizuje tak, že jednotlivé vykresľovanie body objektov sa lineárne interpolujú s farbou hmly, v závislosti od pozorovanej vzdialenosti. Ak ako oblohu používame jednofarebné pozadie scény, hmla sa na pozadí neuplatňuje (nie je to objekt čo by mal nejakú vzdialenosť). Je preto nutné pozadia nastaviť na presne rovnakú farbu, akú používame pre hmlu. V opačnom prípade by sme pozorovali šedej siluety kopcov vystupujúce na blankytné oblohe.
Pri použití hmly je vhodné vypínať tiene pod objektmi (v ukážkovom programu nie je riešené) a dať pozor na zobrazenie priesvitných objektov. Vzhľadom k modulácii priehľadných objektov hmlou môže dôjsť k násobenie efektu hmly a napríklad tiene pod objektmi potom vyzerajú ako obdĺžniky z hmly. Ak nemožno to riešiť vyradením priehľadných objektov, je nutné efekt hmly zoslabiť.
3. Rovina
Najjednoduchším typom textúrované oblohy je rovina. Je to veľká štvorcová plocha roztiahnutá vo výške nad scénou a pokrytá textúrou oblohy.
Rovinná textúra vyzerá prirodzene pri použití ako nízko položená oblaky. Pri pohľade je zrejmé zhusťovanie mrakov v diaľke. Obzvlášť je to viditeľné pri lete lietadlom, kedy vidíme ako sa približujeme k rovine mrakov.
Nevýhodou rovinné oblohy je, že nezasahuje až k horizontu. Pri použití v otvorenom teréne je viditeľný koniec textúry vznášajúce sa v diaľke nad terénom. Môžeme to ošetriť dvoma spôsobmi. Po prvé, hráča umiestnime do terénu s vysokými okrajmi (skalami), takže hráč nebude nikdy vidieť na horizont. Po druhé (to je prípad v ukážkovom programe), použijeme hmlu. Hráč vidí len časť oblohy, zvyšná časť v diaľke vrátane pozadí scény sa strácajú v hmle. Tento prípad riešenie vyzerá veľmi prirodzene a pôsobivo. Dobre sa tak vytvára napríklad ponuro ladená scéna alebo krajina pred búrkou.
Mraky na rovinné oblohe môžeme ľahko animovať. Stačí, ak budeme celú rovinnou pomaly rotovať okolo osi Y a tým vytvoríme celkom vierohodný pohyb mrakov po oblohe.
4. Kopule
Ak chceme oblohu bez hmly a zasahujúce až k horizontu, môžeme k tomu využiť objekt pologule, ktorý nám nad hlavou vytvorí nebeskú klenbu, kopulu. Postačí pologule s nízkou zložitosťou, bez dolnej podstavy. Po vytvorení vykonáme inverzii objektu, ktorá obráti orientáciu plôšok. Pologuľa tak bude viditeľná nie zvonku, ale zvnútra. Obloha je roztiahnutá predovšetkým do šírky, cez celú plochu scény. Na výšku je oveľa menšia. Vzhľadovo sa tak blíži podobe roviny, napriek tomu ale zasahuje dole k horizontu.
Na povrchu kupoly je položená bezšvová textúra oblak. Textúra je namapovaná rovinným premietaním s opakovaním. Mapovanie sa vykonáva opakovane s pomalým posúvaním začiatku textúry. Tým je zaistená animácia oblak, ktorá pomaly plynú oblohou. Celkovo tento typ oblohy vytvára veľmi dobrý dojem príjemného letného neba.
5. Viacvrstvová obloha
Nasledujúce typ oblohy je opakom oblohy predošlé, pokiaľ ide o vytvorený dojem. Používa tiež objekt pologule pre vytvorenie nebeskej klenby, avšak s tým rozdielom, že pologule sú dve. Spodná pologule je polopriehľadná a prekrýva hornú. To umožňuje dosiahnuť pôsobivý efekt pohyblivých mrakov, kedy sa mraky na oblohe akoby preháňajú rôznymi smermi cez seba vplyvom búrky. Animácia posúvanie textúr prebieha rýchlejšie ako u predošlej oblohy a smery pohybu sú na seba kolmé.
Preto je scéna v ukážkovom programe u tohto typu oblohy ladená ako prebiehajúce búrka. Je pridaná hmla vytvárajúce dojem búrkového šere. Opakovane sa ozýva zvuk dažďa a fúkania vetra. Dážď je tiež vizuálne animovaný a to tak, že pred kamerou je pripevnená stena opatrená polopriehľadnou textúrou s obrazom padajúcich dažďových kvapiek. Opakovaným mapovaním textúry sa textúra rýchlo posúva zhora nadol a vytvára tak dojem padajúceho dažďa.
Ďalším efektom vytvárajúcim dojem búrky sú hromy a blesky. V náhodných okamihoch obloha zableskne a ozve sa hrom. Záblesk sa vykoná tak, že sa na chvíľu (na 100 ms) zvýši jas hlavného osvetlenia scény, inak je osvetlenie udržiavané na šere. Súčasne sa počas záblesku vypne na chvíľu hmla (tma), čo vytvorí dojem osvetlenie krajiny bleskom.
Pri prehrávaní zvuku hromu je zvolené náhodné číslo rozlišovacieho kódu zvuku. To umožní prehrávanie viac hromov súčasne, zvuky sa prekryjú. Parametre zvuku sú náhodné - rýchlosť prehrávania, hlasitosť zvuku a stereo vyváženie. To vytvára dojem pestrosti zvukov hromov, hromy neznie všetky rovnako.
Ukážkový program v tomto móde oblohy skrýva ešte jeden efekt prispievajúce ku strašidelnosti scenérie. Ale ten vám neprezradím a nechám vás scénu si vyskúšať. Odporúčam zvoliť si mravca, plávajúce kameru a trochu sa porozhliadnuť po okolí. Upozorňujem ale, že je to vhodné len pre odolné nelekavé povahy.
6. Skybox
Skybox, čiže nebeská krabička. Asi to nie je najlepší preklad, tak radšej zostaneme u Skybox. Čo si pod Skybox predstaviť? Je to kocky. Na stenách kocky sú nalepené textúry s obrázkami oblohy. Nie sú to však hocijaké obrázky. Keby sme tam nalepili bežnú textúru oblohy, poznali by sme hneď, že sa jedná o kocku a to predovšetkým vďaka perspektívnemu skreslenia. U Skybox sú textúry oblohy vytvorené špeciálne pre tento účel a to tak, že obraz je vyrenderované v 3D programe (konkrétne bol použitý Bryce 3D) premietaním pohľade do niekoľko navzájom pravouhlých smerov. Usadením vygenerovaných textúr na pravouhlé steny dosiahneme presne rovnaké reprodukcie obrazu ako v okamihu snímania. Nedochádza k žiadnemu perspektívnemu skreslenie a tvar kocky nemožno rozpoznať. Rovnaký efekt by sme dosiahli bežným fotoaparátom tak, že by sme vyfotili okolitý svet v niekoľkých navzájom kolmých smeroch a výsledné snímky usadili na rovnako pravouhlé premietacej steny. Podmienkou však je, že fotoaparát musí mať pozorovací uhol 90 °. Rovnaká podmienka platí aj pre kameru renderovacieho programu generujúceho textúru.
Samozrejme musíme pozorovať steny s obrazmi z rovnakého miesta presne uprostred kocky, ako tomu bolo vo chvíli snímanie obrazu. Raz variantom je, že okolo celého 3D sveta by sme vytvorili obrovskú kocku. To má nevýhodu v tom, že musíme použiť veľkú vzdialenosť dohľadu, aby bola celá kocky stále viditeľná. Ak použijeme kocku malú, bude viditeľná deformácia pohľade na oblohu ak sa budeme svetom pohybovať.
Preto skybox riešime iným spôsobom. V skutočnosti použijeme kocku veľmi malú, napríklad s rozmerom 5 jednotiek. Počas pohybu kamery sa Skybox neustále pohybujeme spolu s kamerou tak, že skybox kameru stále obklopuje. Teda - akoby mal hráč neustále okolo hlavy malú kocku. To, že hráč vidí skybox ako oblohu na vzdialenom pozadí, zabezpečíme tak, že stenám Skybox vypneme ukladanie hĺbkové informácie a skybox zaradíme do najnižšej renderovací skupiny (s indexom 0). To zaistí, že skybox bude na obrazovku vykreslovaný ako prvý a až po ňom všetky ostatné objekty scény. Pretože skybox neukladá hĺbkovú informáciu, chová sa tak, akoby v scéne vôbec nebol. Tak môžu byť ostatné objekty cez jeho steny prekresľovanie, hoci sú v skutočnosti od kamery ďalej.
Pomocou Skybox ľahko vytvoríme nielen oblohu, ale aj slnko a scenériu pozadia, napríklad vzdialenej pohoria. Obraz pozadie scény tak môže vyzerať veľmi realisticky. Nevýhodou Skybox je, že oblaky nemožno animovať. Ale aj to by bolo možné riešiť - prekrytím obrazu Skybox iným typom oblohy, s priehľadnosťou a animovaný. Tip: Hľadaním kľúčových slov "skybox texture" môžete nájsť na internete veľa hotových textúr pre Skybox.
7. Superbox
Supexbox je v skutočnosti tiež skybox, len sme pozmenili označenie, aby sme odlíšili trochu inú variantu Skybox. Nevýhodou predošlého Skybox je to, že na dosiahnutie dostatočne vysokého stupňa detailov pozadí musíme použiť veľkú textúru. Rozlíšenie textúry nemôžeme zvyšovať donekonečna, sme obmedzení prinajmenšom schopnosťami grafických kariet.
Riešenie obmedzenia veľkosti textúr je v tom, že stenami Skybox budú nie len jednoduché steny, ale sústava stien poskladaných vedľa seba. Tak môžeme zvyšovať rozlíšenie textúr prakticky neobmedzene.
V ukážkovom programe sme steny Skybox nahradili sietí 4 x 4 = 16 segmentov. Aby sme nemuseli s toľkými segmentmi textúry manipulovať ručne, rozsekali sme textúru na časti programovo. K dispozícii sme mali veľkú textúru, ktorú sme postupne po malých úsekoch vykresľovali na plochu ako 2D obrázok, úsek sňali do malého obrázka a nastavili príslušnému segmentu ako textúru. Vďaka tomu sme dosiahli ďaleko vyššej kvality zobrazenia Skybox, hoci sme použili malé textúry.
Ako doplnkový efekt sme u tohto typu oblohy vytvorili lens flares, čiže šošovkový odlesk od Slnka. Zámerne, pre demonštračné účely, sme to s odleskami trochu prehnali, tak vo vašich programoch buďte trochu striedmejšie.
8. Noc
Posledným typom oblohy je príklad nočnej scenérie. Nad hráčom sa nachádza pologule tvoriace kupolu s textúrou hviezdnej nočnej oblohy. Textúra je namapovaná s projekciou gule s vyšším počtom opakovaní textúry.
Pre vytvorenie dojmu noci je scéna opatrená čiernou hmlou. Tým je zaistené, že hráč vidí len v blízkom okruhu okolo seba. Pravdepodobne má pri sebe lampu a preto použijeme plné osvetlenie. V opačnom prípade by sme hlavné osvetlenie scény trochu stlmili. Kvôli použitie hmly sme zvolili len malé rozmery pologule oblohy. Objekt pologule má zvolenú renderovací skupinu 0 s vypnutým ukladaním hĺbkové informácie. Hráč si oblohu nosí neustále so sebou, podobne ako tomu bolo v prípade Skybox.
.... Dokončenie nabudúce
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 185x (6.09 MB)
Aplikácia je vrátane zdrojových kódov v jazyku Petr Lite (sú obsiahnuté v EXE súbore, ktorý možno v programe priamo otvoriť)