04/01/13

Kung fu majstra Hao Wanga


Textúrovanie alebo obalenie telesa obrázkom. Naše hry ešte stále používajú príliš veľké polygóny /vyspelejšie mikropolygóny sú same o sebe texelom - otextúrovaným pixelom/ a nie je teda možné s nimi dosiahnúť potrebnú bohatosť scény a povrchov, alebo aspoň jej zdanie bez textúr. Skôr než sa spýtate - áno, existuje množstvo nadradených grafických techník, ktoré textúry nepožívajú. O tom niekedy v ďalšej generácií na PS4ke, kde sa to určite aspoň raz experimentálne použije. Slabinou textúr je ich veľkosť v priamej úmere s rozlíšením. Jedna vcelku bežná textúrka o veľkosti 4x2 kilopixely má v 32 bitoch /iba 8 bitov na alfu/ bežne aj 5 megabajtov, nejde pritom o žiadnu zarážajúco vysokú kvalitu. Špičková hra môže obsahovať na jednej scéne stovky, alebo tisícky podobných textúr. Veľmi rýchlo zahltíte aj 2 giga vram. Niekde tam ale ešte musíte natrieskať rendertargety, geometriu, buffery. V prípade súčasných konzol je situácia z tohto pohľadu dosť tragická. Streaming z pomalého DVD, HDD vám príliš nepomôže. Požiadavka enginu je takmer vždy ďaleko väčšia.


Takže skúsime prinútiť malého gašparka zahrať veľké divadlo. Použijeme menšie textúry. Fajn. Čo sa však stane, kde chcete pokryť obrovskú plochu /platí to aj pre blbú stenu z tehál s opakujúcim sa vzorom/ tými našimi pidi sráčmi o veľkosti 512x512 pixelov alebo dokonca menej . Stane sa toto - na obrázkoch sledujte hlavne otextúrovanie zeme v hrách : Falcon 4.0 /ešte jeden obrázok / alebo GUN pre PS2. Tomuto javu sa hovori tiling a stále je masívne rozšírený naprieč celým spektrom hier a platforiem. Dnes ho iba vieme lepšie maskovať. Vyvstal teda problém ako spájať dlaždice týchto malých textúr, aby medzi nimi nebolo jednak vidieť švíky /"How to make a seamless tiling texture"/ a zároveň aby nedochádzalo ku viditeľnému a značne rušivému opakovane textúrovacej vzorky ako na obrázku vyššie /platí to pre akúkoľvek textúru - pre trávu, tehlový múr, vodnú hladina !!/. Bungie dokonca v jednej svojej prednáške z postmortem HALO 4 radí ako minimalizovať tiling vodnej hladiny, ktorý bol tuším v HALO 3 dosť strašný /pohľad z vysokej skaly, ponad vodu, do diaľky/.

hrany nesedia, slzy v očiach - hrany sedia, miešame karty

Najprv teda ošetríme hrany, názorné obrázky máte vyššie. Máme povedzme konkrétnu hru s exteriérmi pre DVD xcrap a v nej pochopiteľne veľké kusy voľných plôch, ktoré musíme pokryť textúrami. Variantu A - neopakovateľnú megatextúru ala Carmack a Rage engine zavrhneme, chce to aspoň 20++ gigové úložisko na optickej placke /tá ma však iba 6-8 giga a za každé DVD navyše nad 2 kusy chce bill nekresťanské poplatky/. Zvolíme variant B - a to 16 menších, nenáročných textúr pre základnú grafiku bežnej "piesčitej zeme". Hrany ručne volíme tak, aby nám všetky na na oboch osiach pekne sedeli. Dôležité. Vtedy je jedno čo sa nachádza v strede textúry /banán, hručka, ananás/ a my nimi môžeme šachovať tak, aby čo najlepšie maskovali artefakt opakujúcej sa vzorky.



mnohoraké použitie

A tu nám konečne prichádza na pomoc rafinovaný majster Wang a jeho skvelý matematický algoritmus použiteľný aj pre miešanie týchto našich dlaždíc/stromov/mrakov/kvetov, pričom s nimi teoreticky môžte oplácať aj nekonečne veľkú plochu. Wangov fraktál sa bude snažiť, aby to príliš nebilo do oči. Nejde samozrejme o dokonalé riešenie, keď sú vaše prostriedky priliš obmedzené. Názorná ukážka - z jednej základnej maličkej textúrky si vygenerujete Wangove dlaždice, ktoré vám jeho model rozhádže tak, aby to vyzeralo ako jedna oveľa väčšia a zdanlivo neopakovateľná textúra. Túto techniku môžte použiť aj v CG filmoch pri filmovačke masových scéne tisícok neexistujúcich členov komparzu. Pre našu hernú potrebu dokonca existujú celé knižnice "Wangových textúr", alebo generátory, ktoré ich z tej vašej "hravo" vyrobia. Teraz keď už viete čo máte hĺadať, skúste to nájsť sami. Uncharted 2, Crysis 1, Battlefield 3. Mierne som vám to sťažil, na väčšej ploche je to vidieť lepšie. Viď pole slnečníc.

hore je klasika, dole je Wang

No comments:

Post a Comment

**** pre vloženie hypertextového odkazu do komentára použi CSS kód: hyperlink ****