.[ ČeskéHry.cz ].
Deformacie terenu - Unity3D

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
RS



Založen: 21. 02. 2012
Příspěvky: 551

PříspěvekZaslal: 18. leden 2017, 17:37:02    Předmět: Deformacie terenu - Unity3D Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



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

PříspěvekZaslal: 19. leden 2017, 10:51:31    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
McMagic



Založen: 06. 08. 2012
Příspěvky: 615

PříspěvekZaslal: 20. leden 2017, 12:13:31    Předmět: Odpovědět s citátem

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 Very Happy

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
RS



Založen: 21. 02. 2012
Příspěvky: 551

PříspěvekZaslal: 20. leden 2017, 13:07:26    Předmět: Odpovědět s citátem

Ďakujem Vám obom za rady! Podumem poskúšam
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
RS



Založen: 21. 02. 2012
Příspěvky: 551

PříspěvekZaslal: 20. leden 2017, 13:08:25    Předmět: Odpovědět s citátem

Ď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
Zobrazit informace o autorovi Odeslat soukromou zprávu
skiparktycoon



Založen: 15. 03. 2012
Příspěvky: 148

PříspěvekZaslal: 20. leden 2017, 18:12:04    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
RS



Založen: 21. 02. 2012
Příspěvky: 551

PříspěvekZaslal: 22. leden 2017, 20:26:48    Předmět: Odpovědět s citátem

Ďakujem!
_________________
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 -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
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