.[ ČeskéHry.cz ].
Tvorba 3D scény v praxi
Jdi na stránku 1, 2, 3, 4, 5, 6, 7  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Svestka



Založen: 08. 07. 2010
Příspěvky: 32

PříspěvekZaslal: 10. červenec 2010, 13:43:25    Předmět: Tvorba 3D scény v praxi Odpovědět s citátem

Doufám, že se nikdo nebude pohoršovat nad mými dotazy, jelikož nejsem nijak zběhlý v oblasti 3D projekcí.

Přiblížení mého cíle:
  • To co se učím postupně zužitkovávám v tvorbě osobního miniaturního 3d enginu.
  • Nejvíce kladu důraz na efektivitu, znovupoužitelnost a průhlednost kódu.
  • Engine dělám pouze proto abych se měl na čem učit.
  • Chci aby byl engine multiplatformní, proto používám OpenGl + SDL.
  • Kód tvořím plně objektově v C++


Průběžně bych zde rád doplňoval své otázky ohledně praktického řešení různých problémů a byl bych moc rád, kdyby někdo zběhlý v dané problematice se zapojil do diskuze a projevil své názory. Nejvíce mě zajímají subjektivní názory nejlépe přímo z praxe jelikož návody jak "něco nějak" zbastlit jdou už dnes sehnat snad všude ale z praktického hlediska to nemusí být moc košér. (Na NeHe tutoriály odkazovat nemusíte, ty beru jako poměrně kvalitní zdroj informací pro začátečníka)

Pár dní už jsem tvořil kostru enginu (při psaní se zároveň učím a nikam nespěchám, takže práce nepostupuje po kilometrech zdrojového kódu). To jen aby jste si nemysleli, že chci cpát 3d scénu někde do mainu nebo podobné zvěrstvo.

Teď konečně k otázce:
Chci vytvořit objekt starající se o terén, tedy načítání, zobrazování, nastavování parametrů apod.
Jak se v praxi tedy generuje pouze holý terén. Je jasné, že lze použít klasickou bitmap height mapu v odstínech šedi, zde ale nastává problém s omezeným rozsahem Z souřadnice (256 úrovní terénu), zde mě napadlo, použít barevnou škálu a Z souřadnici počítat z intenzity barvy to by ale bylo problematičtější při samotné tvorbě bitmapy a nepříjde mi to taky úplně ideální. Dále mě napadá načítat terén jako 3D model ale zde netuším jestli by byly nějaké problémy. Bitmapu bych nerad používal také kvůli tomu, že bych měl v terénu rád velké skoky jako velmi nízké kaňony pod úrovní moře a zároveň velmi vysoké hory, zároveň bych chtěl aby nebyl problém mít krásně uhlazenou louku kde by kopec byl tvořen velkým množstvím polygonů aby nešly vidět ostré hrany a naopak hory aby byly ostré a tak stačil menší počet polygonů což by se u bitmapy dle mého mínění dosahovalo hůř. Zvlášť při velkých rozdílech výšky nemusí stačit těch 256 úrovní. Ještě mě napadlo vkládat hory zvlášť jako objekty ale to mi opět nepříjde moc košér. Podmínkou by bylo i aby engine byl schopen tvořit například jeskyně, pukliny nebo různě ohnuté skály, zde mě ale napadá jediný způsob vložit tyto části zvlášť jako objekty.

Budu vděčný za vaše názory popřípadě když se někdo rozepíše podrobněji o těchto tématech a nějak téma i rozšíří taky si ztěžovat nebudu. Smile Nechci tady žádné zdrojové kódy jde mi pouze o samotné data (jak data uložit a jaký způsob interpretace dat použít)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
univi



Založen: 05. 02. 2010
Příspěvky: 27

PříspěvekZaslal: 10. červenec 2010, 14:45:08    Předmět: tvorba terenu Odpovědět s citátem

Zdravím,

Podla mňa tvorba terénu z bitmapy nie je až taká zlá vec. Konkrétne na svojom projekte: http://www.ceske-hry.cz/forum/viewtopic.php?t=2124 som používal na terén bitmapy a fungovalo to celkom pekne.
Tu výšku som počítal nasledovne:
Red kanál - 1x násobok farby
Green kanál - 256x násobok farby
Blue kanál - 65536x násobok farby
týmto spôsobom sa normálne dá dosiahnuť v obrázku okolo 16mil. farieb.
Potom som si výslednú farbu predelil nejakým večším číslom a terén vyzerá celkom hladko hlavne po rozblurovaní obrázka v grafickom programe a dajú sa tam dosiahnuť naozaj obrovské výškové rozdiely.

Problém na ktorý som narazil bol, že pri tom blurovaní bol ten terén v hre na niektorých miestach nie celkom hladký. Spravil som si teda na to malý programček ktorý si naloadoval obrázok a bluroval ho nasledovným spôsobom: Vypočítal si pre daný pixel výšku - ako hore red x1, green x256, blue x65536 a pre ostatné pixle okolné tak isto a potom spriemeroval tieto hodnoty a tak obrázok uložil. Po otvorení v grafickom programe už obrázok vyzerá "divne" ale v hre už je terén úplne hladký(možno pozrieť hore v odkaze na hru).

Takýto terén sa mi celkom páčil ale nie na všetko ide použiť ako napríklad na spomenuté jaskyne a podobne. Tam by som už priamo dal model tej jaskyne alebo niečoho čo sa z takéhoto terénu dá ťažko dosiahnuť.

Skúsil som si terén vytvoriť aj čisto z modelu ktorý som importoval v hre a bolo to tiež celkom dobré. Hlavne sa na modeli dá odstrániť mnoho nepotrebných polygónov ktoré idú v tom teréne z heightmapy odstániť ťažšie.

Výhoda terénu z z heightmapy je aj v tom že sa dá pomerne jednoducho nájsť výška terénu v hociakom bode. Pre hľadaný bod na teréne poznáme výšky 4 okolných bodov štvorca v ktorom sa bod nachádza a vzhľadom na ne sa to dá táto výška vypočítať. Pri teréne z modelu som zatiaľ nedošiel na to ako nejak jednoducho túto výšku vypočítať.

Na záver zhrniem. Terén z bitmapy je podľa mňa celkom dobrá voľba a časti terénu ktoré cez bitmapu spraviť nejdú sa stále dajú dorobiť napríklad z modelu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 10. červenec 2010, 18:28:39    Předmět: Odpovědět s citátem

Zdarec,

předem, tvoji otázku jsem prolítl jen tak letmo takže jestli sem napíšu něco co tam máš, tak se omlouvám Wink.

Asi bych použít bitmapu a nebo existuje Perlin Noise, je to neco na zpusob takovyho randomu kterej je schopnej ti taky vygenerovat terén.
Myslím že se to dalo pomocí vertex shaderu, takže to bylo relativně rychlý. Jinak se tím generují planety, takže vygenerovat kus terénu nemůže být problém.

A nebo taky můžeš zkusit Vertex Displacement je to taky podle nějaké textury,
ale pokud ten terén chceš aji aby se po něm dalo chodit (s kolizema), tak to udělej přes to generování z bitmapy.

Toť moje myšlenky..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Svestka



Založen: 08. 07. 2010
Příspěvky: 32

PříspěvekZaslal: 11. červenec 2010, 00:20:37    Předmět: Odpovědět s citátem

Děkuji za odpovědi, ještě jsem nad tím uvažoval a myslíte, že height mapa se hodí i pro rozsáhlé terény kde se jedná o velikosti na reálnou délku v řádech kilometrů?

Jatro.m:
Perlin Noise je vpodstatě to samé jako bitmapová height mapa jestli jsem to dobře pochopil akorát je generována procedurálně a to já právě nechci, chci si vytvořit terén, s kterým budu nadále pracovat a ke všemu se jedná pořád o height mapu.

Jinak jak jsi psal kolize řešit budu jelikož jedna z kamer bude určitě i z pohledu pozorovatele

univi:
Ten vyhlazený terén vypadá pěkně ale problém je právě ten, že jsou situace kdy bych na některých místech potřeboval mít uhlazený terén a jinde naopak ostrý.

Osobně bych height mapu použil rád už jenom pro svou snadnou použitlnost a editovatelnost ale utvrdil jsem se v tom, že by znamenalo mit speciální modely například hor jak jsem zmiňoval výše a vkládat je na patříčná místa a to mi nepříjde příliš univerzální řešení. (samozřejmě, že hory lze vytvořit height mapou ale byly by vyhlazené a nevypadaly by příliš "hornatě")


Neví někdo jak se takovýto problém řeší u větších projektů s důrazem na různorodost terénu? Samozřejmě předpokládám, že u většich projektů jsou specifické binární soubory šité vesměs na mírů ale na nějakém principu musí být založeny. Osobně o této problematice z praktického hlediska moc nevím a když jsem zkoušel cokoli najít tak jsem pokaždé našel pouze práce s height mapou.

Suma sumárum
Pro lepší představu ostrosti hran, které chci dosáhnout při hornatém terénu si stačí najít libovolnou fotku hor odkaz na obrázek, z kterého hned člověk vidí monumentálnost samotné hory. Znovu podotýkám, že chci aby engine byl schopný zobrazit v jedné scéně jak takto hornatý terén tak krásně uhlazené kopce.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
if.then



Založen: 13. 04. 2008
Příspěvky: 579

PříspěvekZaslal: 11. červenec 2010, 00:33:15    Předmět: Odpovědět s citátem

Height mapa se hodí obzvláště na rozsáhlé terény. Je použita např. v Operaci Flashpoint nebo Far Cry (a spoustě dalších, ale o těchto to vím jistě).

Pokud někde potřebuješ vyhlazený a jinde ostrý terén, tak by na to asi byl dobrý barevný přechod. Avšak by bylo nutné vyřešit barvy tak, aby to bylo použitelné.

Jinak - malé hory obecně nejsou špičaté kusy šutrů zasunuté do země - jsou to spíše kopce s větším úhlem stoupání.

Hlavní je zvolit si správnou velikost čtverce heightmapy - ve válečné simulaci ti přechody v řádech desítek stupňů vadit nebudou, pokud to ušetří výpočetní čas, a v závodní hře asi dělat terén o několika desítkách km2 nebudeš.

EDIT: Teď jsem si všimnul toho "suma sumárum" a pokud chceš opravdu hory stylem velikých hor a velmi detailně, tak bych to možná řešil nějakou překryvnou heightmapou.
_________________
For guns and glory, go to www.ceske-hry.cz.
For work and worry, execute VC++.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Svestka



Založen: 08. 07. 2010
Příspěvky: 32

PříspěvekZaslal: 11. červenec 2010, 08:52:42    Předmět: Odpovědět s citátem

Tou překryvnou height mapou myslíš mít dvě height mapy jednu se základním terénem a jednu se stejným rozložením pouze pro hory?

Moc jsem nepochopil toto:
if.then napsal:
Pokud někde potřebuješ vyhlazený a jinde ostrý terén, tak by na to asi byl dobrý barevný přechod

Jak by mi barevný přechod pomohl v tomto problému? Chápu, že mi přinese více úrovní ale neovlivním s ním přece vyhlazenost scény. Možná tě ale chápu špatně.

Mimochodem
Co se týče zaměření enginu tak má představa je nejblíže něčemu jako simulace a vykreslování běžného světa (samozřejmě v omezené míře).

Nápad
Napadlo mě zkombinovat tvé nápady dohromady, i když netuším jestli jde o nejideálnější řešení ale docela mě zaujala myšlenka mít jednu barevnou height mapu kde by jednotlivé barevné kanály označovaly druh terénu napříkald: modrá nížiny, zelená kopce, červená hory. V takovém použití by se samozřejmě nesměly míxovat barvy tudíž vždy by byl pro jeden pixel použit aktuálně jenom jeden kanál. Vpodstatě dalo by se říct, že ta jedna height mapa by se rozdělila na 3 samostatné height mapy se kterými by se pracovalo jiným způsobem. Největším úskalím by ale bylo pravděpodobně tyto 3 height mapy zpracovat tak aby na sebe plynule navazovaly.

Budu rád, když se budete k tématu vyjadřovat i nadále.


Naposledy upravil Svestka dne 11. červenec 2010, 09:09:03, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Poky



Založen: 29. 06. 2009
Příspěvky: 184
Bydliště: Písek / Plzeň

PříspěvekZaslal: 11. červenec 2010, 09:03:16    Předmět: Odpovědět s citátem

To Svestka: Co vím o RPG hrách, tak Pyranha Bytes (hry: Gothic, Risen) modelují vždy vše, prostě celý térén se vším všudy. Naopak The Elder Scrolls jsou dělány pomocí Height mapy. Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Svestka



Založen: 08. 07. 2010
Příspěvky: 32

PříspěvekZaslal: 11. červenec 2010, 09:10:28    Předmět: Odpovědět s citátem

Díky za info.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



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

PříspěvekZaslal: 11. červenec 2010, 10:08:11    Předmět: Odpovědět s citátem

Já bych hory řešil modelem už proto, že se na něj bude líp nanášet textura. Nižší zatravněné kopce můžou být heightmapa. Není problém udělat model hor tak, aby seděl kamkoliv do heightmapy. Stačí, aby začínal na výšce nula a měl obdélníkový půdorys. Pak by se posunul každý bod modelu hor o výšku bodu terénu pod ním (která se dá snadno spočítat). Přechod mezi heightmapou a modelem by šel udělat přes shadery.
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Svestka



Založen: 08. 07. 2010
Příspěvky: 32

PříspěvekZaslal: 11. červenec 2010, 10:24:22    Předmět: Odpovědět s citátem

A nebude potom problém s kolizemi jak psal Jatro ?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 11. červenec 2010, 11:07:10    Předmět: Odpovědět s citátem

Zdar,
ty hory, jak si odkazoval výše, se dají udělat i heightmapou. Co se týče hloubky barev, tak můžeš třeba použít nějaký 16bitový TIFF, nebo tak něco.
Hlavní výhoda heightmapového terénu, kterou tady asi zatím nikdo nezmínil, je jednoduchost. Dají se na něm dělat krásný optimalizační algoritmy úrovně detailu (směrem do dálky (a) nebo podle lokálního převýšení...).
Naopak jednoduchost editace neni výhodou. Pokud ovšem nemáš nástroje. Ve Photoshopu se opravdu špatně ladí výšky +- 0.5 metru (ve scéně nebudou jen hory, ale třeba i zahrádka vedle domu.

Druhá možnost je, načítat přímo model(y). Oproti výškové mapě můžeš vymodelovat cokoliv. Jeskyně, jakékoliv hory, silnice, ... . Navíc 3D grafické editory umí převést výškovou mapu na mesh. Přijdeš ale o jednoduchost optimalizací a snadnost kolizí.

A praxe? Vždy je potřeba přizpůsobit se datům, které chceš zobrazovat a všechno uvážit. Na začátek třeba zkus tu výškovou mapu, neni to ideální, ale uvidíš výsledky rychle. Skalnaté hory můžeš skutečně vložit zvlášť jako model. Kolize možná ani nemusejí mít (nebo stačí nepřesné). V nějaký menší hře třeba ani nebude třeba lízt po horách, stačí se na ně dívat z dálky :-).
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
if.then



Založen: 13. 04. 2008
Příspěvky: 579

PříspěvekZaslal: 11. červenec 2010, 12:32:11    Předmět: Odpovědět s citátem

Svestka napsal:
if.then napsal:

Pokud někde potřebuješ vyhlazený a jinde ostrý terén, tak by na to asi byl dobrý barevný přechod

Jak by mi barevný přechod pomohl v tomto problému? Chápu, že mi přinese více úrovní ale neovlivním s ním přece vyhlazenost scény. Možná tě ale chápu špatně.

Pokud budeš někde chtít vyhlazenou hranu, tak si označíš část obrázku, kudy hrana vede a pomocí nějakého nástroje tam uděláš barevný přechod např. z bílé na černou.

Kolize s heightmapou jsou velice jednoduché a mnohé fyzikální enginy mají třídu heightmapy vestavěnou. Naproti tomu kolize s modely jsou obtížné (je nutno používat aproximace).

Ve hrách se s úspěchem používá tato konfigurace: Je tam height mapa pro terén - 1 px = 1 políčko o např. 10x10 m, další obrázek, který definuje druh každého políčka heightmapy (travnatá oblast, pouštní oblast...) a mnoho statických modelů, které reprezentují stromy, domy, silnice apod. a poloha jejich instancí je určena v dalším speciálním souboru.
_________________
For guns and glory, go to www.ceske-hry.cz.
For work and worry, execute VC++.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Svestka



Založen: 08. 07. 2010
Příspěvky: 32

PříspěvekZaslal: 11. červenec 2010, 12:46:09    Předmět: Odpovědět s citátem

]semo[

Zkusím to tedy implementovat jak píšeš tou height na stupních šedí v 16 bitech. Ono přecejenom jak jsi psal změnit to můžu časem. Co se týče toho, že kolize hor nemusí být vždy přesné, to máš pravdu, ale když jsem psal, že se snažím přiblížit engine reálnému světu tak s tím mám do budoucna i představu fyziky tudíž kulaté předměty by se měly z kopce (včetně hory) kutálet (atd.) a proto v mém případě kolize budu potřebovat.

Ještě k tomu editování height mapy, že bych musel někde snížit nebo zvýšit terén jen o pár jednotek jsem neuvažoval a určitě to může být problém. To, že lze height mapu použít například i v 3dsmax pro deformaci plátna vím, nikde jsem ale nenašel jestli by nešlo toto udělat i obráceně například: načetl bych v grafickém editoru height mapu poté bych upravil terén klasickými nástroji pro 3D deformaci a potom znovu uložil terén jako height mapu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 11. červenec 2010, 14:22:19    Předmět: Odpovědět s citátem

Svestka

tak to si to rovnou vygeneruj z maxu a kolize provadej po trianglech je to presny a da se to pouzit na FPS, jenom potrebujes vhodnej delici system na ten teren, abys 1) nekreslil celej teren, a za 2) abys netesoval vsechny trojuhelniky meshe kdyz vim ze jsu od nich opravdu daleko a nemuzu s nima kolidovat Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
if.then



Založen: 13. 04. 2008
Příspěvky: 579

PříspěvekZaslal: 11. červenec 2010, 14:41:46    Předmět: Odpovědět s citátem

Játro> testování trianglů je nesmírně výpočetně náročné a pro hru, která bude přes mnoho km2 je přesnost, kterou přinášejí modely nevyužitelná.
_________________
For guns and glory, go to www.ceske-hry.cz.
For work and worry, execute VC++.
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 -> Obecné Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2, 3, 4, 5, 6, 7  Další
Strana 1 z 7

 
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