Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
pcmaster

Založen: 28. 07. 2007 Příspěvky: 1827
|
Zaslal: 5. listopad 2007, 20:37:11 Předmět: |
|
|
Semo je velky guru a to co napisal je cista pravda. Sam som predtym mal "engine" spatlany vseliako, ale ked som dostal do ruk jeho fyzikalny solver, nad ktorym som postavil nieco ako hru (ano, to "hovno", pamatnici vedia, viz becherovka 2006 ) tak som pochopil, ze to je spravna cesta.
Clovek sa postupne dostane od lameriny a strasneho bordelu (v kode, v pamati, rychlosti...) po pekne strukturovany a funkcny kod a system, ako ho velmi dobre opisal semo.  _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 6. listopad 2007, 01:04:32 Předmět: |
|
|
]semo[ napsal: |
1) Scene Graph
- struktura (hierarchie) objektů neboli transformační strom. Většinou jsou to nějaký objekty (uzel), který mají mít jednoho rodiče a více potomků... |
Tohle by mohlo začátečníky dost zmást a navést na špatnou cestu. Scenegraph používat pouze pokud přesně vím, k jakým problémům to může vést. Jsem ke scenegraphům docela skeptický.Viz článek - Scene Graphs... (ne pro tebe, ale autora threadu samozřejmě)
]semo[ napsal: |
Objekty ještě můžeš rozdělit na Solid a Animované. |
Zřejmě máme oba jinou představu, jak by měl vypadat animační systém. Můj animační systém je založený na controllerech. Jeden controller má metodu Update(time) a nějaký parametr, který animuje. Parametr může být skalár, vektor, matice nebo celá kostra a já si jenom vyberu, na který objekty ty controllery připíchnu, tzn. můžu animovat prakticky cokoliv. I kamera je controller - podle vstupu od uživatele animuje view matici. Fyzikální engine by byl taky takový komplexní controller, apod. Takhle máš animace pěkně oddělené od zbytku. Viz přednáška: Návrh animačního systému pro 3D Engine
Pokud někdo zná nějaký efektivnější způsob řešení animací, ať napíše...
]semo[ napsal: |
Celkem se mi vyplatilo používat nějaký Singleton, pojmenovaný třeba Engine |
V čistě objektových aplikací je tendence se singletonům vyhýbat. Pokud chce textura mít přistup ke svému manažeru, musí mít na něj odkaz jako členskou proměnnou apod. Někdy je to docela úchylný. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 6. listopad 2007, 11:36:14 Předmět: |
|
|
ok, tak článek, nebo wiki? :)
Eosie:
- Mám zkušenost s outdoor závodníma hrama, tam se mi SceneGraph hodí, ale nechápej to špatně, většinou taky používám nody první úrovně, jenže kolikrát potřebuješ na nějakým objektu pohybovat s nějakou kravinkou a už potřebuješ skládat transformace. Pro rendering scenegraph nepoužívám, to mi připadá nepoužitelný (jak bylo napsaný v tom článku).
- Ohledně těch animací. Tvůj systém se mi líbí a připomíná mi 3DSMax, ale to už záleží na projektu a jeho složitosti. Tazatel (micro.21) je v 3D začátečník, proto sem poradil tohle (rozdělení objektů na animovaný a solid). Teďka používám TimeManager v kombinaci s interfacem IAnimable, který má metodu UpdateAnim(time) v níž se taky může dít všechno možný.
- Ad Singletony...postupně mě všichni přesvěčujou, že sou na hovno :) ještě chvíli a dám vám za pravdu
PcMaster:
K nevíře! :-D _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
Zaslal: 6. listopad 2007, 15:37:44 Předmět: |
|
|
]semo[ napsal: |
ok, tak článek, nebo wiki?
|
oboje ale nie to je celkom jedno.
a singletony. to sa od nich upusta kvoli tomu ze je to(aspon co som pochopil) nieco ako globalna premenna v C?? _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 6. listopad 2007, 16:05:27 Předmět: |
|
|
Asi hlavně proto, že si na nich můžeš uletět a máš pak pěkně provázanej projekt. A to se nehodí. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
goddard
Založen: 06. 11. 2007 Příspěvky: 175 Bydliště: Brno
|
Zaslal: 6. listopad 2007, 23:38:36 Předmět: |
|
|
autor dotazu to chce zrejme udelat v j3d, tam ma graf sceny zadarmo a stejne tak zakladni strukturu pro vytvareni vlastnich objektu sceny vcetne jejich vlastnosti.
ke slozitosti grafu sceny - v j3d existuje metoda compile() ktera zjednodusi hierarchii dane vetve na maximum (posklada transformace a pokud to neni urceno jinak, nasdili i nektere spolecne atributy, to se muze hosit a nemusi, da se to nastavit). v j3d 2.0 by se melo plne prejit na jogl nebo neco jineho co bude aktualni, spolu s tim ze planuji prerusit zpetnou kompatibilitu. |
|
Návrat nahoru |
|
 |
VladR
Založen: 30. 07. 2007 Příspěvky: 1322 Bydliště: Greater New York City Area
|
Zaslal: 7. listopad 2007, 13:29:21 Předmět: Re: Struktura 3D Enginu |
|
|
Nasledovny text je dlhy, preto bude obsahovat mnozstvo preklepov, ktore nemienim opravovat. Citat len na vlastnu (ne)zodpovednost !
micro.21 napsal: |
Chtel bych jen takovy teoreticky zaklad at vim co tam mam vlastne naprogramovat. |
Predovsetkym je si treba uvedomit, ze vsetky rady, ktore tu dostanes su ti uplne na hovno. Pocinajuc semo-vym nahladom a konciac mojimi konkretnymi radami.
Mohol by som tu uviest 10 dovodov, preco s polkou veci co uviedol semo nesuhlasim a mal by som pravdu, pretoze mam za sebou nejakych 7 rokov kodenia enginov, cize som presiel cez peknych par iteracii. Tym ale netvrdim, ze to co pise semo je blbost, proste si to len kazdy napise tak ako mu to vyhovuje a moze najst 10 chyb na kazdej veci, ktoru ten druhy napise - to je proste kodenie samo o sebe - o architekturach velkych projektov sa napisali stovky knih a tak ako pri prvych 50tich najdes "10 reasons why NOT using this design", pri tych druhych 50tich to bude to iste len v bledoruzovom.
Jasne uvadzas, ze nemas s 3D skusenosti. Ako chces vlastne riesit "engine", ked s tym nemas ziadne prakticke skusenosti ? To je ako keby si si skladal doma na piesocku domceky a potom sa uchadzal o zakazku na postavenie noveho mrakodrapu v Dubaji na morskom podlozi.
Je tam milion problemov o ktorych nemas ani paru, co je este samo o sebe v poriadku, ale uz nie je, ak chces z nicoho postavit nieco.
Napr. taky mensi subsystem terenu:
- Uz vies ako bude teren texturovany ? Pises engine, tak by si mal pouzivatelom dat na vyber aspon z 5 beznych metod texturovania (ak uz nie z viacerych). Samozrejme, pre kazdu treba napisat separatne render paths na DX-7-style cards (FFP), PS1.1, PS1.3, PS 2.0, PS3.0, PS4.0.
- uz vies aky bude rozsah terenu ? No nevies - mozno to bude letecky simulator s plochou 1.000.000 km2, alebo 3d pac-man odohravajuci sa na ploche 0.1 km2. Spravnemu enginu to bude jedno
- Aka bude viditelnost/dohlad ? Pokial si myslis, ze pri malej dohladnosti akurat nastavis mensi dohlad, tak to dakujem pekne za taky "engine". Potom je hned zjavne, ze si to este nerobil, lebo by si hned vedel na co narazam a preco je to blbost a preco je teda dolezite mat aj separatne metody zavisiace od mnozstva dat.
- LOD - vzhladom na obrovske rozdiely vo vykone klientskych PC musis spracovat niekolko variant LOD, aby si uzivatel enginu vedel vybrat vzhladom na min.poziadavky, ci chce LOD riesit na karte alebo na CPU, pripadne na viacerych CPU naraz.
-Indexovanie terenu - 16 alebo 32-bit ? A preco ? Spravna odpoved je aj jedno aj druhe. Ale dokym cez to sam neprejdes, tak to nepochopis preco by si mal pisat niektore sub-renderery pre oba rozsahy indexov.
- Streamovany teren - toto je dnes uz minimalna poziadavka na teren - vo VRAM je len to, co tam naozaj musi byt a zvysok sa pekne streamuje na pozadi, po troche kazdy X-ty frame (alebo kazdu 0.1 sekundu - to uz nechas na uzivatelovi enginu nech si zvoli sposob a frekvenciu streamovania). Vzhladom na aspon 5 metod texturovania terenu a LODov to vobec nie je sranda pre vsetky odladit.
-Pathfinding - tak tuna vela stastia ti prajem, pretoze tiez by si mal dat na vyber z viacerych metod uzivatelovi a to vsetko treba zosuladit so streamovanim/editovanim/LOD
-Editor s terenom - vsetko vyssie uvedene musi byt zosuladene s editorom, pretoze v editore obvykle potrebujes vacsi dohlad nez ma hrac, aby si videl pekne zhora vsetky vazby a rozmiestnenie objektov, cize to cele musi byt pekne tweakovatelne/parametrizovatelne ako pre gameplay, tak pre pouzitelnost v editore.
Dalej ani s terenom nepokracujem, vyssie uvedene je asi tak 60% beznych zalezitosti s terenom, zvysne som vynechal (pocinajuc roznymi metodami nasvetlenia a konciac optimalizaciami suvisiacimi s hustotou pokrytia vegetacie, resp. suvisiace s nizkym rozlisenim ktore hrac navoli (napr. pri rozliseniach pod 1280x1024 je mozne usetrit VELA vykonu)).
__________________________________________________________
No a to je samozrejme len subsytem na teren, ktory v mnohych hrach zabera tak 10% plochy obrazovky, lebo je napriklad totalne prekryty vegetaciou,in-game architekturou a nepriatelskymi/hracovymi jednotkami.
O subsysteme animacie bolo napisanych vela knih a clankov a este viac sa da vymysliet, resp. sa mozes aj pustit cestou, ktoru ti sice nik neodporuca z dovodov, ktore mozno ty dokazes obist (napr. keyframe animacie s "problemom" "udajnej prilisnej spotreby miesta, co s vhodnou kompresiou je mozne odstranit).
A co so subsystemom Music/SFX (dynamicka hudba, streamovanie) ? Co Networking (large-scale/small-scale /MMO) ? Co kamera ?
Je toho strasne vela co musis vyriesit, ale ty to nezriesis, lebo si to este nerobil. Preto urob to, co ti uz viaceri radili, a sice zacni robit hru a na jej zaklade postav engine pre dany STYL hry (typ kamery, dohlad v teren, 1 system texturovania, 1 render path).
Jednotlive komponenty ti casom same vystupia do popredia, ze ich stoji za to refaktorovat a zovseobecnit do enginu.
_______________________________________________________
Tiez sa rozmysli, ci URCITE chces robit ENGINE A NIE HRU, alebo ci nahodou nechces urobit engine POPRI kodeni hry. |
|
Návrat nahoru |
|
 |
wozembouch
Založen: 03. 09. 2007 Příspěvky: 31
|
Zaslal: 8. listopad 2007, 16:07:17 Předmět: |
|
|
Pokud muzu prispet svou troskou do mlyna, tak neprogramuj engine, programuj hru. Postupne se budou vynorovat konkretni problemy s kteryma se da mnohem lepe poradit. |
|
Návrat nahoru |
|
 |
wozembouch
Založen: 03. 09. 2007 Příspěvky: 31
|
Zaslal: 8. listopad 2007, 16:18:18 Předmět: Singletony |
|
|
Nesouhlasim s tim ze singletony sou na h*vno. Je to asi jako se vsim - zalezi jak jsou pouzity. Spousta veci bez nich nelze udelat nebo by to bylo neefektivni. Mozna ze si jen nerozumime a diskuze je o viditelnosti promenych |
|
Návrat nahoru |
|
 |
Ladis

Založen: 18. 09. 2007 Příspěvky: 1537 Bydliště: u Prahy
|
Zaslal: 8. listopad 2007, 17:02:36 Předmět: |
|
|
S programovanim hry misto enginu souhlasim - dokud clovek aspon jednu hru nedokonci (tj. neskonci hned po slepeni dvou NeHe tutorialu), tak nema minimalni dostatek znalosti k designovani enginu hry, bo nema zadne prakticke zkusenosti s tim, co se uvnitr hry deje.
U zacatecniku bych doporucil si jen sepsat funkce/veci, ktere tam maji byt realizovany (vykresleni ruznych objektu a prvku, vstupu, kolize, gameplay, ...), a pak je seskupit do trid/modulu podle nejake logiky (napr. vsechno co se tyka postav do tridy Postava (nacteni modelu, zobrazeni, kolize, ...), stejne tak samostatne mapu/teren, GUI, ...).
Resit veci navic, jako moznost ruzne renderery (OpenGL a Direct3D, verze shaderu a bez shaderu, ...) je zpusob, jak se v tom zamotat. Zvolte minimalni konfigurace = maximalni, zuzte podporovane konfigurace - napr. jen DX7 (bez shaderu), nebo klidne jen DX9 (shadery 2.0 - treba v OpenGL tak mate vyhodu, ze mate jen jednu extenzi na Pixel a jednu na Vertex shader - vyhnete se extension hellu; DX9 umi beztak uz 2 roky i 90 % integrovanych grafik, tj. tech nejvetsich shitu bez vlastni pameti (vcetne Intelu). Budete mit minimalni mnozstvi codepath ve zdrojaku, takze se v nom budete lepe orientovat.
Taky nepridavejte dalsi schopnosti/efekty v prubehu vyvoje - byste taky mohli donekonecna engine predelavat (nebyl na novou funkcionalitu staven) a taky byste predelavali i jiz hotove levely (aby vyuzivaly novych features).
Az pak dokoncite nejakou hru, tak teprv reste nejaky design enginu (pristu hry) . |
|
Návrat nahoru |
|
 |
MD

Založen: 29. 07. 2007 Příspěvky: 437 Bydliště: Praha
|
Zaslal: 9. listopad 2007, 10:43:50 Předmět: |
|
|
OT k singletonum: Jasne je to jak se vsim, nekdy se hodi a nekdy ne. Ale da celkem praci se jich zbavit. V nove architekture Krkala jsem chtel, aby bylo mozne spoustet napriklad dva runtimy najednou nebo dve kompilace najednou (At uz stridave v jednom threadu nebo multithreadove). Aby to bylo mozne, musel jsem zrusit singletony, ty se samozrejme pouzivaly uplne vsude , takze to bylo docela peklo. Nyni mi tam zustava singleton, ktery spravuje cache (tady je to logicke, protoze cache jsou spolecne pro vsechna vlakna) a file system (ten musim jeste hodne prekopat)
OT2 sorry, ze jsem jeste nenahodil zadne vlakno o Krkalovi, nak to nestiham. _________________ - play with objects - www.krkal.org - |
|
Návrat nahoru |
|
 |
Quiark

Založen: 29. 07. 2007 Příspěvky: 816 Bydliště: Chlívek 401
|
Zaslal: 9. listopad 2007, 18:08:21 Předmět: |
|
|
SinglOTon: No to je právě podle mě ten důvod, proč se singletonům vyhýbat. Pak když si člověk vzpomene, že by tam měl nějaký objekt víckrát, tak musí udělat přesně to, co popisuješ.
Ty singletony totiž dost zjednoduší práci a tak má člověk občas nutkání je použít i pro objekty, které nemusí být nutně vždy jen jednou. _________________ Mám strach |
|
Návrat nahoru |
|
 |
Peto

Založen: 01. 08. 2007 Příspěvky: 206 Bydliště: Košice
|
Zaslal: 10. listopad 2007, 09:50:12 Předmět: |
|
|
Prispejem aj ja trosku uz dlho som nic nenapisal. To ci pouzit uz nejaky hotovy engine alebo naprogramovat novy to uz nech sa kazdy rozhodne, obe cesty maju svoje vyhody nevyhody. Pokial sa ale rozhodne pre svoj engine tak podla mna uplne najlepsia cesta ako sa naucit strukturu enginu... je zvolit si ako prvy projekt nieco jednoduche.. napr urobit donho iba nejaku podporu pre modely, jednoduche sceny s viac materialmi uplne zakladne veci.. pozriet sa na ine enginy ako maju strukturu vyriesenu oni... naprogramovat nejaku hru na tom engine (samozrejme zas nieco jednoduche) a potom dat si "new project" a zacat odznova... nie prerabat.. odznova... , nieco trosku zlozitejsie... otvorit si v druhom okne stary engine, kopriovat.. a vylepsit to a spravit to uplne nanovo... ked niekto vo svojom engine naprogramoval hru vidi co je dobre.. co bolo nahovno... atd... to sa zial neda povedat o niektorych freewarovych enginoch. Predsa ked uz niekto zvladne svoj engine ma to plno vyhod.. pretoze vsetko som si naprogramoval ja, viem sa v tom rychlo orientovat, viem doprogramovat hocico co chcem.. mozno to trva dlhsie ako pouzit nieco.. ale ono sa ten cas raz vrati  _________________ Code or die!
 |
|
Návrat nahoru |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
Zaslal: 10. listopad 2007, 16:17:37 Předmět: |
|
|
no uz by sa zislo to rozdelit aj na diskusiu o singletonoch. ja mam v svojom projekte iba jeden singleton. a to taky ktory prevezuje vsetky ostatne. teda pri inicializacii si vytvorim napr resource manazer a jeden singleton ktory spravuje odkazy na tieto resource manazery pre zvuk textury atd. no potom uz len mozem kdekolvek v kode si zavolat singleton ktory mi vrati odkaz na pozadovany resource manazer. myslite ze je to spravny system?? _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
 |
Quiark

Založen: 29. 07. 2007 Příspěvky: 816 Bydliště: Chlívek 401
|
Zaslal: 10. listopad 2007, 16:34:03 Předmět: |
|
|
Tenhle návrh je hodně podobný tomu, kdybys měl pro každou z těch věcí jeden singleton. Když bys to náhodou chtěl rozdělit, musíš změnit kód všude. _________________ Mám strach |
|
Návrat nahoru |
|
 |
|