.[ ČeskéHry.cz ].
Potrebujem radu od skúsenejších //Pozadie hry
Jdi na stránku 1, 2, 3  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Game Design
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Kroko309



Založen: 06. 06. 2015
Příspěvky: 17

PříspěvekZaslal: 16. červen 2015, 23:06:11    Předmět: Potrebujem radu od skúsenejších //Pozadie hry Odpovědět s citátem

Ahojte všetci,
Chcel by som vytvoriť hru Tunneler (1991 Geoffrey Silverton / Video: http://www.abcgames.sk/?p=hry_zobraz&id=8979) tak trochu po svojom. Budem programovať v jave za pomoci LibGDX. No mám na vás skúsenejších otázku. Nepotrebujem kód, stačí mi len váš názor a dobrá rada. To pozadie alebo teda terén by sa mal skladať s malých častí, ktoré sú menšie ako tank ktorý by som chcel mať vo velkosti asi 32x32. Mapa bude veľká kedže by som to chcel pre viacero hráčov.



Ako by ste to spravili vy tak aby to pozadie moc nezaťažovalo CPU a GPU?
_________________
Väčšinou nepotrebujem návody krok za krokom. Stačí ma len postrčiť správnym smerom. Ďakujem za vaše rady a skúsenosti pretože tie sa nedajú kopírovať.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1756

PříspěvekZaslal: 18. červen 2015, 11:36:51    Předmět: Odpovědět s citátem

V pripade, ze ti staci napriklad 8192x8192 policok (co by asi mohlo Smile), tak si vyrob 1-kanalovu texturu s 1 bajtom (8 bitmi) na kanal. To mas presne 64 MB. Tu budes mat cely cas v RAM na CPU a kopiu aj na GPU. Uplne normalne ako 2D pole (pripadne 1D pole a budes si ho indexovat sam (byteOffset = y * 8192 + x), to je jedno). Pripadne trochu mensiu, napriklad 4096x4096 na zaciatok (16 MB).

Ked dojde k vytunelovaniu nejakeho policka, tak ho proste nastavis na inu hodnotu (napriklad 1-255 je 255 roznych farbiciek a 0 bude prazdno).

Pomocou takejto textury mozes v priestore pohladu kazdeho hraca robit v pohode dotazy - je tam 0? Tank tam moze. Je tam nieco ine a leti tam strela? Tak to vymazes a nastavis na 0. A tak podobne. Kazdy takyto pohlad/vyrez bude zasahovat len niekolko100 x niekolko100 policok.

Dolezite je pristupovat k tvojej linearne ulozenej texture po riadkoch, aby si bajty cital v poradi, v akom su v RAM. Tak dojde k optimalnemu vyuzitiu cache. Cache miss budes mat len na zaciatku kazdeho noveho riadku.

Kazdy test pre pohybujuci sa projektil bude mizerny vzhladom na cache, ale s tym si este hlavu nelam. Asi ti tam nebudu lietat miliony striel.

Co sa tyka vykreslovania, tak by som uplne normalne takuto CPU texturu kazdy frame prekopiroval na GPU. Nie je to vela, 64 MB x 30 Hz = 1.8 GB/s. Tu ti nijaka Java, C++ ani assembler nijako nepomoze ani neublizi. To snad zvladne aj shitny mobil (nie?). Pripadne sa da aktualizovat len zmeneny obdlznik a vtedy budes prenasat mizive data. Pripadne si prekopirujes len vyrez aktualneho hraca (tych par100 x par100 pixelov) a ten zobrazis 1:1 na GPU do plneho okna (s point sampling filtrom, aby to malo pekny oldschool effect Smile)

No a normalne ju vykreslis -- akurat, si napises shader, ktory jednotlive farbicky prelozi pomocou palety -- tj. paleta bude vyzerat ako farebna textura 256x1 px. Pre prvy pixel (0) tam bude cierna a pre ostatne nejaka ta zlta/oranzova. A pripadne pre niektore ine tam bude zelena/cervena/modra (zakladna jednotlivych hracov).

Pixel shader: float policko = bigMap.sample(uv); float3 farbicka = paleta.sample(policko); return farbicka; // uv je normalna 0..1 screen-space pozicia, ktoru ti posle vertex shader a dojde k jej interpolacii

Tak nejak. Chapes z toho nieco? Smile
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ladis



Založen: 18. 09. 2007
Příspěvky: 1480
Bydliště: u Prahy

PříspěvekZaslal: 18. červen 2015, 12:44:48    Předmět: Odpovědět s citátem

Mě dycky pobaví, když na předělávku něčeho pro DOS jsou začátečníkům hned doporučovaný složitější shadery. Přitom by hra úplně stejně vypadala i v technologiích na úrovni Direct3D 7 (a mohla být i tak náročná - i když 1,8 GB/s je i na mobilech dneska málo: LPDDR3 má 12,8 GB/s). Takový rady maj význam spíš pro 3D programátory-hračičky s předešlými zkušenostmi, co si chtěj zkusit zajímavý možnosti řešení.

BTW1: Jak pcmaster píše, textura se dá updatovat i po částech (zlomek přenosové náročnosti).

BTW2 z historie: V dávných dobách GPU strávil cykl i pixely mimo obrazovku, takže položit quad, z něhož je jen zlomek vidět na obrazovce, znamenalo velký propad výkonu (měl jsem to tak v rychle splácnuté hře Mars Racer). Ještě GeForce 4 MX to tak měl (vycházel z GF 2), Radeony už byly ok (ořízly polygony do plochy obrazovky a přepočítaly texturové pozice apod.).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1756

PříspěvekZaslal: 18. červen 2015, 12:46:50    Předmět: Odpovědět s citátem

Prave preto som odporucil NAJJEDNODUCHSIE riesenie a to je hentaky simple shader Razz

"DX7" mi urcite nepride ani jednoduchsie na pochopenie, ani praktickejsie na implementaciu. Okrem toho som mu sotva mohol nieco take odporucit, ked som nikdy nic take archaicke nerobil alebo si to nepamatam.

Co sa tyka quadu, tak ja navrhujem vzdy kreslit prave 1 quad presne na celu obrazovku a texturu samplovat podla pohladu (normalne offset v UV). Nie je nic jednoduchsie nez shader. Jeho rychle pochopenie (ktore je nenarocne) mu pomoze v buducnosti.

2015
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
satik



Založen: 06. 05. 2010
Příspěvky: 161
Bydliště: Krkonose

PříspěvekZaslal: 19. červen 2015, 13:22:08    Předmět: Odpovědět s citátem

mapu muzes pro usporeni mista v pameti ulozit do quadtree
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1756

PříspěvekZaslal: 19. červen 2015, 14:11:04    Předmět: Odpovědět s citátem

Skus to trochu spresnit, pisal, ze je zaciatocnik.
Navrhni sposob, ako vytvorit stabilnu nahodnost 'oranzovej' farby v kazdom policku. Kde vidis prinos quadtree?
A mohol by sa aj mily Kroko309 vyjadrit Smile
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
satik



Založen: 06. 05. 2010
Příspěvky: 161
Bydliště: Krkonose

PříspěvekZaslal: 19. červen 2015, 14:30:00    Předmět: Odpovědět s citátem

Quadtree usetri spoustu pameti - staci mu jen ukladat bool s ano/ne, drtiva vetsina prostoru bude budto spojite plna nebo spojite prazdna.

Zrnitost pixelu pak muze uz udelat nakym jednoduchym pseudorandom vypoctem zalozenym na pozici - ted si neco vycucam z prstu a vubec netusim, jestli je vysledek vypadajici pseudonahodne Very Happy - treba
((((13*y*width+x*17) xor 0x71A4CC0D) ) >> 3) % 2
a podle toho tmavsi nebo svetlejsi oranzova

Koukam, ze ta moje funkce je nahodna asi jako...

Very Happy
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1756

PříspěvekZaslal: 21. červen 2015, 11:27:10    Předmět: Odpovědět s citátem

1) potrebujes pri 16-64 MB setrit nejaku RAM?
1b) v pripade, ze budes mat dost rozstrielanu mapu, k ulozeniu stromu budes mozno potrebovat i viac RAM
2) dotazy do quadtree budu pomale, dotazy do mapy budu okamzite
3) bude schopny naimplementovat nejaky vyhladavaci strom? Smile
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Kroko309



Založen: 06. 06. 2015
Příspěvky: 17

PříspěvekZaslal: 23. červen 2015, 20:43:15    Předmět: Odpovědět s citátem

Shocked Shocked Shocked Shocked
Ďakujem vám veľmi pekne ale nerozumel som ani len polovici s toho čo ste mi tu písali a to znamená googliť, googliť a zase len googliť.

Každopádne ďakujem. Pri mojom voľnom čase mi to bude trvať dlhšie ako by som chcel ale ak pochopím viac ako polovicu z uvedeného tak určite začnem klásť viac otázok.

Ďík...


PS:
1-kanalovu texturu s 1 bajtom (8 bitmi) <-- to je textura s jednym radom pixelov s dĺžkou 8 pixelov?
Idem sa začať učiť tie shaderi
_________________
Väčšinou nepotrebujem návody krok za krokom. Stačí ma len postrčiť správnym smerom. Ďakujem za vaše rady a skúsenosti pretože tie sa nedajú kopírovať.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1756

PříspěvekZaslal: 24. červen 2015, 17:48:11    Předmět: Odpovědět s citátem

Nevadi, asi sme zacali velmi zhurta, tak zacneme postupne, len sa pytaj.

Jedno-kanalova znamena, ze ma jeden jediny "farebny" kanal (casto "cerveny", ale kedze je len jeden, tak ho mozes nazvat vselijako). Stvorkanalova ma cerveny (R), zeleny (G), modry (B) a alfu (A). Viac nez 4 uz nie je, su len 1, 2, 3 a 4.

Sirka toho kanalu bude 8 bitov (1 bajt). To znamena, ze kazdy texel (pixel textury) bude mat 1 bajt. V pripade stvor-kanalovej by to boli 4 bajty (1 pre R, 1 pre G, ...).

1 bajt na kanal nie je jedina moznost, moze to byt aj 10 bitov, 11 bitov, 16 bitov, 32 bitov, ci dokonca 4 alebo 5. Potom je to ovela komplikovanejsie, takze na to teraz kasleme. Pre tvoje potreby sa hodi 8 bitov.

Rozmer takejto 2D jedno-kanalovej 8-bitovej textury bude zodpovedat poctu policok, ktore chces mat v hre. Ja navrhujem 4096x4096 (lebo je to pekne okruhle cislo). A kolko RAM zaberie takato textura? No 4096*4096*1 = 16 MB.

Kazde policko = kazdy texel (pixel textury) ma teda 1 bajt, co je presne 256 moznosti (hodnoty 0 az 255 vratane). Ked tam bude 0, tak je to cierne (sa dohodneme). A ked tam bude nieco ine, tak to bude obsadene niecim - pieskom, zakladnou, ... Ale nie tankami ani strelami! Co teda budu znamenat hodnoty 1 az 255, sa dohodneme neskor.

Zatial sa chapeme?
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Kroko309



Založen: 06. 06. 2015
Příspěvky: 17

PříspěvekZaslal: 25. červen 2015, 04:43:51    Předmět: Odpovědět s citátem

Zatial hej Very Happy


Toto všetko mám robiť v shaderoch? Lebo ak hej tak si šetri dych. Pozeral som si trocha dokumentáciu o shaderoch
v libgdx https://github.com/libgdx/libgdx/wiki/Shaders a zopár iných návodov no musím povedať že je to znova kopec vecí ktoré sa musím učiť. A ako vždy je toho straaašne veľa. Momentálne sa učím používať Box2d a Scene2D no a popri nich nezvládnem aj shaderi...... Princíp fungovania som pochopil ale musím na to ísť pekne postupne a najskôr dotiahnuť tie dve rozbehnuté "učivá". Takže shaderom sa nebudem tak skoro venovať.

Takže ak ich na to skutočne potrebujem tak sa ozvem neskôr.
Ďakujem.
_________________
Väčšinou nepotrebujem návody krok za krokom. Stačí ma len postrčiť správnym smerom. Ďakujem za vaše rady a skúsenosti pretože tie sa nedajú kopírovať.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1756

PříspěvekZaslal: 25. červen 2015, 13:06:55    Předmět: Odpovědět s citátem

Vsak postupne, nemusis mat na zaciatok nijaky shader. Ja budem hovorit bez akejkolvek znalosti libgdx, len vseobecne.

Zacni tym, ze celu obrovsku texturu ako je, vykreslis niekde do stredu obrazovky na obdlznik. Je uplne jedno kam, dolezite je, aby si ju videl. Na zaciatku ju napln nahodnymi datami. Finta je, ze ju nebudes nacitavat z disku, ale vytvoris si ju za behu. Na to budes potrebovat trochu experimentovat a citat dokumentaciu.

Daj nam vediet, ako sa to podarilo Smile
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Kroko309



Založen: 06. 06. 2015
Příspěvky: 17

PříspěvekZaslal: 25. červen 2015, 20:04:32    Předmět: Odpovědět s citátem

Akými dátami?
Vytvorím si obdĺžnik a naň pripnem vytvorenú textúru. V textúre mám upnutý nejaký png súbor.... alebo môžem vytvoriť prázdnu textúru ktorej do konstruktoru zadávam 3 hodnoty a to velkosť textúri x a y a tá tretia je Pixmap.Format ktorý môže byť : RGBA8888, RGB888, RGBA4444, RGB565,...

napríklad RGBA888 má na každý kanál tých 8 bitov. Ale nevidel som tam možnosť vytvoriť jednokanálovú textúru.
ciže to vyzerá nejako takto textura = new Texture(32, 32, RGBA888)
_________________
Väčšinou nepotrebujem návody krok za krokom. Stačí ma len postrčiť správnym smerom. Ďakujem za vaše rady a skúsenosti pretože tie sa nedajú kopírovať.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1035

PříspěvekZaslal: 26. červen 2015, 07:16:53    Předmět: Odpovědět s citátem

No myslim ze musis pouzit ako zdroj pre texturu nie subor ale PixmapTextureData. Aspon tak som to pochopil z nahliadnutia do LibGDX dokumentacie. teda vytvorit si pixmap s Intesity ako formatom to nahrat do PixmapTextureData a to nakoniec do Texture.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1756

PříspěvekZaslal: 26. červen 2015, 09:26:41    Předmět: Odpovědět s citátem

Vyzera to tak, ze si si vybral dost limitujucu a primitivnu "platformu", ten javovy libgdx, ked tak cumim do dokumentacie Sad

Ale nevadi, bude to neprijemnejsie, ale budeme robit, s cim sa da. Urob si RGBA8888 a skus to tak, ako napisal nou. Pohladom na dokumentaciu som ani nezistil, ako by sa asi tak dala taka textura updatovat, ako som povodne planoval, ale ani to by nemuselo vadit.
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Game Design Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2, 3  Další
Strana 1 z 3

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna