.[ ČeskéHry.cz ].
Alien invasion tower defense
Jdi na stránku Předchozí  1, 2
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Inkubátor
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Ladis



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

PříspěvekZaslal: 24. červenec 2018, 22:53:57    Předmět: Odpovědět s citátem

Už je to rychlé (teda asi 30 fps, ne 60) - Explorer, Edge, Firefox, Chrome (všude stejně).
_________________
Why is biocunt so angry, master?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
nou



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

PříspěvekZaslal: 26. červenec 2018, 20:39:16    Předmět: Odpovědět s citátem

Mne to na Firefox na Linuxe beha dobre. Nevidim FPS ale chodi to plynulo.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
dzejkob



Založen: 17. 08. 2013
Příspěvky: 43

PříspěvekZaslal: 19. srpen 2018, 22:06:08    Předmět: Odpovědět s citátem

Milý deníčku, vývoj stále pokračuje Smile Zatím dělám content - optimalizace spritů jsem ještě neřešil.

Přidáni noví vetřelci:

Chodící alien jenž spawnuje létající alieny:



Kteří vypadají takto:



Bug alien - jenž umí castovat štíty alienům kolem:



Pak snail alien - který má poměrně komplikovanou genezi - původní verze nevypadala příliš vetřelsky:



Ale zásadní problém je pak celkem samozřejmé zjištění, že ty jasné úhly v těch 8 pohledech nefungují v perspektivě - ledaže by se zrušil perspektivní pohled - což jsem zkoušel - nevypadá to hezky + hlavně ostatní sprity pro to nejsou stavěné. Tak jak to je teď mi přijde ok - neboť vzadu budou vždy periferně vidět hordy nepřátel a hráč bude řešit co se děje vepředu.

Proto nový snail:



Jenž když dojde k hitu, tak se v určitých intervalech schová a damage je 0 - a je tak zaměstnána věž co má focus.

DD to nemá žádný - dělám co mě o víkendu napadne - výsledek bude asi trochu "pejsek s kočičkou ...". Ale v akci to celé podle mě vypadá dobře.

Potom několik dalších věcí jako stíny pod alieny, princip skillů atp.

Toť zatím vše. Build aktualizován není - aktualizuju až to bude více optimalizované.

Co se týče 30ti fps - tak zatím počítám s tím, že to takto zůstane zafixované - musel bych dodělat nějaké posuvy rychlosti herní logiky, když někomu nebude stačit fps (na integrovaných kartách) atp - popř. to nechám na konec.

Potom sleduju, že "Alien invasion tower defense" je už bohužel obsazeno - takže to posléze přejmenuju na [NĚCO_A] Alien [NĚCO_B] Tower defense/TD + nějakou landing-page, aby něco začal zaindexoval gůgl. Kdyby vás nějaký nazev napadl klidně pište Smile Z podstaty hry to vůbec nemusí být chytrý. "Alien smash tower defense" .. "Kick alien tower defense" .. cokoliv. Mimochodem pod alien kick jsem našel nostalgickou hru.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
satik



Založen: 06. 05. 2010
Příspěvky: 154
Bydliště: Krkonose -> Praha

PříspěvekZaslal: 21. srpen 2018, 15:34:05    Předmět: Odpovědět s citátem

v cem to animujes? ty animace jsou husty Very Happy
_________________
https://www.facebook.com/peasantsandcastles/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
dzejkob



Založen: 17. 08. 2013
Příspěvky: 43

PříspěvekZaslal: 22. srpen 2018, 16:50:23    Předmět: Odpovědět s citátem

satik napsal:
v cem to animujes? ty animace jsou husty Very Happy


Díky Smile Animace jsou polo-vynález přes animate tag u svg. Udělám několik frames v inkscape a zbytek je lineární aproximace. V některých případech to funguje až překvapivě dobře - v jiných až překvapivě špatně. Nejde přes to udělat všechno - ale principielně by se to dalo rozšiřovat. Zatím jsem si vystačil s tím co mám. Mám to popř. popsaný na webu (aby se tam alespoň něco indexovalo).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
dzejkob



Založen: 17. 08. 2013
Příspěvky: 43

PříspěvekZaslal: 26. srpen 2018, 13:25:04    Předmět: Odpovědět s citátem

Tak si hraju s výkonem a vyrábím buffered sprite komponentu - a vypadá to nadějně.

Zde sprite tester:

http://www.dzejkobgames.eu/alien_td/test.php

2000 klasických spritů (dole vybrat classic sprite a pak T přidá 1000 spritů) už má výkonostní problémy na integrované gf.

Kdežto buffered sprite je celý jeden mesh a je to rychlé - má to teda pomalejší zápis ale výkon znatelně lepší - zvládá to i 20 tis spritů na integrované gf.

Zvládá to transformace a natočení na kameru + vertex colors + změny uv per face - což je vše co potřebuju.

Textury / animace patrně vyřeším přes atlas mapy a změny uv.

EDIT: problém je, že jedna animace se horko těžko vejde na texturu o velikosti max_texture_size - patrně teda bude nezbytný zredukovat rozlišení

když udělám test, že každý sprite má jiný material index - tak to evidentně navýší počet draw calls a blíží se to výkonově zpátky k nativním spritům (ale pořád to je o něco rychlejší - ale ne řádově)

lze to ale rozsegmentovat - že sprity s materiálem 0 jsou na začátku a sprity s materiálem 1 na konci - nicméně to by se muselo nějak sortovat za běhu - nebo to zkombinovat s těma atlas mapama podle toho, co se do textury vejde - a pak ty sprity vytahávat a přesouvat podle toho kterej typ kde je třeba zobrazit - a na pozadí mít třeba 20 meshů se sprity přes atlas mapy posouvanými podle UV

začíná mi to připadat docela složitý

nenapadá vás nějaký jednoduchý řešení?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
satik



Založen: 06. 05. 2010
Příspěvky: 154
Bydliště: Krkonose -> Praha

PříspěvekZaslal: 26. srpen 2018, 18:13:31    Předmět: Odpovědět s citátem

U mně při targetu 100fps: 3120 classic sprites a cca 44 000 buffered sprites
_________________
https://www.facebook.com/peasantsandcastles/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
mar



Založen: 16. 06. 2012
Příspěvky: 500

PříspěvekZaslal: 26. srpen 2018, 18:31:05    Předmět: Odpovědět s citátem

dzejkob napsal:
lze to ale rozsegmentovat - že sprity s materiálem 0 jsou na začátku a sprity s materiálem 1 na konci - nicméně to by se muselo nějak sortovat za běhu - nebo to zkombinovat s těma atlas mapama podle toho, co se do textury vejde - a pak ty sprity vytahávat a přesouvat podle toho kterej typ kde je třeba zobrazit - a na pozadí mít třeba 20 meshů se sprity přes atlas mapy posouvanými podle UV

začíná mi to připadat docela složitý

nenapadá vás nějaký jednoduchý řešení?

Proč sortovat? Můžeš mít třeba 2D pole [material][sprite] a pak to z toho poskládáš Dá se to vylepšit ještě tak, že si do dalšího 1D pole zapamatuješ použité material indexy a ty pak přeskáčeš, pokud těch materiálů (u tebe textura?) bude hodně.
Nebo prostě přeindexovat ty materiály podle pořadí, jak byly použitě jako primární index do toho 2d pole, možností je spousta.
Pokud ti jde o sorting hloubky, tak pokud použiješ alpha test (=discard), tak to za tebe vyřeší depth buffer.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
dzejkob



Založen: 17. 08. 2013
Příspěvky: 43

PříspěvekZaslal: 26. srpen 2018, 22:12:08    Předmět: Odpovědět s citátem

mar napsal:
Proč sortovat? Můžeš mít třeba 2D pole [material][sprite] a pak to z toho poskládáš Dá se to vylepšit ještě tak, že si do dalšího 1D pole zapamatuješ použité material indexy a ty pak přeskáčeš, pokud těch materiálů (u tebe textura?) bude hodně.
Nebo prostě přeindexovat ty materiály podle pořadí, jak byly použitě jako primární index do toho 2d pole, možností je spousta.
Pokud ti jde o sorting hloubky, tak pokud použiješ alpha test (=discard), tak to za tebe vyřeší depth buffer.


Noo já pořád žiju v restriktivním světě three.js Smile A ono to poskytuje pouze addGroup(faceIndex, facesCount, materialIndex) - a v tom rozsahu faces to udělá jeden drawCall. Ale opět dobrej postřeh - proč neudělat svůj princip na separování drawcallů - jenom musím upravit patrně renderBufferDirect ve WebGLRenderer.js - dodělat patch

EDIT: no asi to tak jednoduchý nebude - ty pole vertexů to "nějak" sype do toho gl - a tam se to renderuje opět přes gl funkce drawArrays start - count - musel bych toho přepsat hodně + patrně víc rozumět webgl

Nějak to vymyslím - asi se nevyhnu těm atlas mapám a prostě bude několik buffered geometries (pro každou mapu)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
mar



Založen: 16. 06. 2012
Příspěvky: 500

PříspěvekZaslal: 26. srpen 2018, 22:40:43    Předmět: Odpovědět s citátem

dzejkob napsal:
Noo já pořád žiju v restriktivním světě three.js Smile A ono to poskytuje pouze addGroup(faceIndex, facesCount, materialIndex) - a v tom rozsahu faces to udělá jeden drawCall.

No však to by ti mohlo stačit, ne? Smile Co ti brání to setřídit ručně a až pak to nasypat do three.js? Ten buffer si totiž stejně vyrábíš sám.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
dzejkob



Založen: 17. 08. 2013
Příspěvky: 43

PříspěvekZaslal: 26. srpen 2018, 23:44:47    Předmět: Odpovědět s citátem

No ten buffer se mění ale uvnitř to musí být fixed-length pole - a kompletní aktualizace toho bufferu je pomalá. Přitom potřebuju, aby material indexy šly po sobě a nestřídaly se uvnitř toho bufferu. Co ale jde jsou updaty coordinates. Takže já to můžu sortovat způsobem, že swapnu coordinates spritů a změním material indexy - to si ale nemyslím, že dokážu udělat rychle pro hodně spritů. Podobně nedává smysl udělat nějakej hash material x sprites a pak to sypat do toho bufferu, kterej bude třeba předalokovanej (a ty faces nějak skrytý) - důvod je, že to je javascript - a mám obavu, že to bude taktéž pomalý.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
dzejkob



Založen: 17. 08. 2013
Příspěvky: 43

PříspěvekZaslal: 16. září 2018, 22:49:13    Předmět: Odpovědět s citátem

Update:

* vyroben atlas map generátor - současná grafika se vejde do cca 13 map 2048x2048 (prostor pro optimalizaci tam bude). + při použití pngquant se to zredukuje do několika MB

* úspěšně implementovány buffered sprites - funguje to nakonec tak, že tam je mesh per atlasmapu - takže to dělá max 13 drawcallů. Vzhledem k tomu, že předtím těch callů byly tisíce, tak ten performance boost je hodně znát. Přesun spritu z jednoho meshe do druhého to dělá optimálně, že mrtvý sprit posune mimo viewport a vytvoří nový nebo použije jiný mrtvý sprit. Kompletní rebuild těch meshů to dělá v okamžicích, kdy se nic neděje.

* loop herní logiky je už plynulý - problém byl v tom, že setTimeout negarantuje přesné msec - teď to bere v potaz náročnost každého cyklu i ty nepřesnosti - takže se to drží na 30 fps (předtím to mohlo být tak 25 - v závislosti na dost jiných aspektech).

* beam z pušek jede přes PointCloud + ShaderMaterial - tj. je to rychlejší

* herní plocha se renderuje do WebGLRenderTarget - takže stínečky opisují geometrii terénu + přidány cákance krve (+ prostor pro další efekty) - vypadá to dobře

* další drobnosti a bugfixy


Dalo to dost práce - přitom výsledek je víceméně pořád tamtéž. Běhá to ale už slušně i na 7 let starém přehřívajícím se notebooku s intel-hd.

Nicméně už můžu zase pokračovat v dělání contentu a herní logiky.

(aktuální build ještě není)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Inkubátor Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2
Strana 2 z 2

 
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