Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
RS
Založen: 21. 02. 2012 Příspěvky: 551
|
Zaslal: 18. leden 2017, 17:37:02 Předmět: Deformacie terenu - Unity3D |
|
|
Zdravím komunitu. Chcel by som sa opýtať na pár veci ohľadom terénu:
1. Nemáte niekto skúsenosť s tým ako deformovať teren v realtime s rozumným performance? Jedná sa mi o vačšie plochy ako napríklad zarovnávanie plochy terénu 20x20m z celkovej velkosti 500x500. Problém by nebol ani tak zmena v terénu ako jeho plynula animácia. To dá unity neskutočne zabrať. Sú tam proste príliš velke lagy. Zmenu robim na terrain texture k tomu určenej.
2. Taktiež mi neviete prosím poradiť ako robit zmeny v realtime bez toho aby sa tie zmeny zapiekli do terenu na dobro? (Tj zmena sa prejavi aj v editore po skončení testu.
Ďakujem! _________________
|
|
Návrat nahoru |
|
|
pcmaster
Založen: 28. 07. 2007 Příspěvky: 1824
|
Zaslal: 19. leden 2017, 10:51:31 Předmět: |
|
|
Napad z brucha: Vyska terenu bude dana texturou, vertex shader bude robit displacement geometrie podla tejto textury. Tieto textury budes mat dve (na ping-pong). Zmenu terenu budes robit proste tak, ze do textury budes blendovat nejake tvary vybuchu (gule), ktore budu v danom mieste znizovat vysku.
1. Jeden off-screen shader vykresli v pripade potreby tvar do textury A (render target) -- bude ho tam blendovat postupne, ako keby si vo photoshope nastavil fill na 50% a maloval furt na jedno miesto, behom niekolkych snimkov
2. Hlavny, normalny shader bude kreslit teren samotny (z textury B, aby sa nemuselo cakat na texturu A)
3. Swap A-B
Neviem, ci je nieco take mozne v Unity, ale snad hej! _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
|
McMagic
Založen: 06. 08. 2012 Příspěvky: 615
|
Zaslal: 20. leden 2017, 12:13:31 Předmět: |
|
|
Pokud pracuješ s terénem co je vytvořený přímo v editoru, tak se ti vždy gameplay (spuštěná hra v editoru) změna provede i do terraindata v prefabu - "zapeče".
Ideální je tedy celý terén vytvořit a generovat až v gameplay (ve scriptu) - pak se ti změna "nezapeče" - případně si dávat data před startem do cache a pak obnovit, nebo si udělat zálohu
Je to dáno tím že měníš terén v editoru - pokus by jsi ho měnil v buildu tak se to "nezapeče" a je nutné data změn držet uložená a vždy při startu aplikovat.
-----------------
Lagy při změnách jsou způsobené moc velkým rozlišením terénu tj. máš třeba terén o velikosti 2048*2048 a na něm máš rozlišení také 2048(respektive 2049). Což je moc a způsobuje to lag.
Ideální je mít rozlišení nižší cca 513 - na terénu o velikosti 2048*2048 - nebo používat malé terény 512*512 a rozlišení 513 - pokud ti jde o přesný detail změn.
+ můžeš pracovat jen s výsekem terénu - a změníš jen danou část pole dat pro heightmapu, splat a detail a nemusíš tak tahat celé pole dat (to změnit) a pak aplikovat zpět.
Také se snaž různé výpočty držet v podprocesu CPU a pak aplikovat, ale vše postupně pomocí locku atd. Aby se to dávkovalo - to snižuje hodně lagy. _________________
http://www.mcmagic-productions.com/ |
|
Návrat nahoru |
|
|
RS
Založen: 21. 02. 2012 Příspěvky: 551
|
Zaslal: 20. leden 2017, 13:07:26 Předmět: |
|
|
Ďakujem Vám obom za rady! Podumem poskúšam _________________
|
|
Návrat nahoru |
|
|
RS
Založen: 21. 02. 2012 Příspěvky: 551
|
Zaslal: 20. leden 2017, 13:08:25 Předmět: |
|
|
Ďakujem Vám obom za rady! Podumem poskúšam, Je možné dať updatovat len časť terénu? Nerefreshuje to unity automaticky cele? _________________
|
|
Návrat nahoru |
|
|
skiparktycoon
Založen: 15. 03. 2012 Příspěvky: 148
|
Zaslal: 20. leden 2017, 18:12:04 Předmět: |
|
|
Nevím jestli to pomůže, ale já jsem použil tohle řešení.
http://code-phi.com/infinite-terrain-generation-in-unity-3d/
V tomhle případě máš mapu složenou z množství šachovnicově poskládaných terénů. V mém případě jsou heightmapy i splatmapy jen 128*128. Všechno se předpočítává ve vlastním vlákně. Ale - v okamžiku, když vytváříš nebo měníš height čí splatmapu bude vždy nějaký lag - v závislosti na velikosti splatmapy. Proto to mám poskládané z víc terénů. Pak ty změny, v mém případě vytváření nových terénů můžu dát do coroutiny. V nastavení na dlouhý dohled tam mám cca 40 terénů.
Část terenu updatovat jde, ale u velkého terénu tam bude vždycky lag.
Další řešení by pro tebe mohl být vlastní mesh. Záleží na tom jak složitou texturu na tom chceš mít. |
|
Návrat nahoru |
|
|
RS
Založen: 21. 02. 2012 Příspěvky: 551
|
Zaslal: 22. leden 2017, 20:26:48 Předmět: |
|
|
Ďakujem! _________________
|
|
Návrat nahoru |
|
|
|