Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
am!go
Založen: 19. 08. 2007 Příspěvky: 61 Bydliště: Praha
|
Zaslal: 9. leden 2008, 22:32:28 Předmět: organizace fx souboru |
|
|
Zdarec, pustil jsem se do psani grafickyho engine s pouzitim DX9, kterej nebude pouzivat Fixed function pipeline a vsechno bude reseny pres effect soubory. Jenomze premejslim o tom, jak ty efekty poskladat. Kdyz si vemu treba osvetleni. Muzu napsat jeden fx soubor, kterej bude shadery pro directional lighting a jeden fx soubor, kterej bude obsahovat point lighting. Ale co kdyz chci pouzit oboji na stejnou mesh? Nebo to dokonce s michat napriklad s pruhlednosti. Vyplatí se napsat jeden velkej effect soubor, kterej bude umet vsechno? Nebo co je podle vás nejlepší způsob? |
|
Návrat nahoru |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 9. leden 2008, 22:56:56 Předmět: |
|
|
No asi by si to chtělo přesně specifikovat, jak to budeš moct všechno kombinovat. Dokonce jsem někde viděl, že pro jednotlivý efekty (např. výpočty osvětlení) byly jen nějaký fragmenty kódu a ty se podle potřeby skládaly do *.fx souborů a za běhu kompilovaly.
Takže zkus popsat čeho přesně bys chtěl dosáhnout (to doporučuju už jen kvůli Tobě) - hlavně nepiš, že chceš napsat univerzální engine, kterej bude umět všechno a cokoliv do něj půjde dokódit Univerzálnost a výkonost jdou dost proti sobě, resp. dá HODNĚ práce tyhle dvě věci skloubit.
Jinak v HLSL existuje include |
|
Návrat nahoru |
|
|
tempicek
Založen: 04. 12. 2007 Příspěvky: 62
|
Zaslal: 9. leden 2008, 23:57:20 Předmět: |
|
|
No, to je uz vice filosoficka otazka a zalezi na konkretni situaci a vkusu. V zasade je vice moznosti:
1) Ubershader - vytvorit ohromny shader, ktery bude na zaklade podminek delat vhodne veci - ty podminky samozrejme mohou i vyrazne ovlivnit rychlost provadeni kodu, nebo dokonce znemoznit kompilaci pro starti shader modely. Muzes ale vyuzit i statickych podminek (znamych v dobe prekladu) - tohle je nejsnazsi reseni ve vsech smerech, ale ne vzdy pouzitelne.
2) Vlastni preprocesor - napsat si vlastni kompilacni krok, kterym zpracujes ten shader pred tim, nez ho zkompilujes. Nejaka makra, kterymi dodefinujes ty shadery dle promennych, nebo rozvines shader v nekolik ruznych ocislovanych variant (treba podle poctu svetel apod).
3) Videl jsem to delat i pomoci "generovani" kazde radky shaderu programem:
Write('mul r1.x,10');
Write('add r1.xyz,r2.xyw');
... (brrrrrr, tohle povazuji za silenstvi)
4) Hromady vlastnich rucne psanych shaderu. To se da samozrejme jen do urcite miry slozitosti enginu, jakmile tech shaderu jsou stovky, uz je to dost o usta provadet tam nejakou zmenu.
Ty jsi se ptal mozna spis na rozdeleni do souboru, ale to mi prijde jako daleko mene podstatne - jak Augi uvedl, muzes pouzit include a delit se vzdy vyplati. |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 10. leden 2008, 10:35:17 Předmět: |
|
|
Tohle sem řešil do jednoho menšího projektu, kterej teď dělám, ale měl sem to řešit víc. Moje postřehy a řešení:
a) tohle se asi moc netýká otázky, ale hodit se to může:
Definoval sem si xmlko ve kterým jsou jednotlivý typy objektů (typy shaderů). V tom xmlku jsou (kromě definování uniformů a map) pro každý typ shaderu odkazy na jejich zdrojové soubory a to pro různý případy renderingu. Nad vodou, pod vodou, reflexe, depth map, shadow. Objekt pak používá některý z těchto "složených shaderů" a podle případu renderingu renderer přepíná (nad vodou, pod vodou...). Je to celkem fajn, ale hodně se upíšeš, pokud to navíc uděláš jako já, že máš pro vertex a fragment shadery různý soubory (dělám s GLSL).
b) Hodně částí kódu se v těch shaderech víceméně opakuje, příště bych rozhodně použil #include a #define. Asi bych udělal nějaký globální funkce, který by se do těch shaderů vkládaly (bylo-li by to řečeno v xmlku z bodu a) )
c) Pak je ještě potřeba pamatovat na nějaký možnosti vypínání detailů. Piš ty shadery tak, abys mohl nějakým makrem třeba vypnout stíny, nebo vyřadit (nahradit) nějaký složitější výpočet. Proto doporučuju nějaký globální #defiine, který budeš shaderům před kompilací předávat z enginu.
Tady tohle by šlo taky vyřešit bodem b), kde by ty vkládané funkce měly různé úrovně detailu.
EDIT:
citace: |
.... Nebo to dokonce s michat napriklad s pruhlednosti. |
v tom xmlku jsou ještě navíc stavy framebufferu 3DApi, protože to se už shaderů netýká.
Ať už použiješ můj způsob s xmlkem, nebo ne, vždycky asi budeš muset mít nějakou podobnou definici.
a pro zajímavost http://nopaste.ceske-hry.cz/757 _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
Icek
Založen: 29. 07. 2007 Příspěvky: 45 Bydliště: Banov 375
|
Zaslal: 10. leden 2008, 11:37:40 Předmět: |
|
|
OT:
semo > neuvažoval jsi o využití COLLADy?
All > používá to tu někdo? |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 10. leden 2008, 11:39:19 Předmět: |
|
|
Icek> neuvažoval, neznám to _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
Icek
Založen: 29. 07. 2007 Příspěvky: 45 Bydliště: Banov 375
|
Zaslal: 10. leden 2008, 11:47:01 Předmět: |
|
|
http://www.collada.org, je to xml popis, popíšeš s tím v podstatě všechno (grafiku, fyziku, zvuky). A když se podíváš na dokumentaci, tak uvidíš, že to vypadá skoro stejně jako to co jsi napsal ty. |
|
Návrat nahoru |
|
|
am!go
Založen: 19. 08. 2007 Příspěvky: 61 Bydliště: Praha
|
Zaslal: 10. leden 2008, 16:22:22 Předmět: |
|
|
Diky za rady. Osobne mam rozhodne radsi mit to rozhazeny do vic souboru, nez napsat jeden obrovskej effect soubor. Docela zajimava mi prijde ta myslenka pouzit include a vkladat takhle funkce, jsem vubec nevedel, ze to jde. |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 11. leden 2008, 04:05:01 Předmět: |
|
|
Icek napsal: |
http://www.collada.org, je to xml popis, popíšeš s tím v podstatě všechno (grafiku, fyziku, zvuky). A když se podíváš na dokumentaci, tak uvidíš, že to vypadá skoro stejně jako to co jsi napsal ty. |
No tak on popsal něco, čemu se normálně říká "efekt" (popsáno mnohokrát výše). Na podobném principu pracuje ta Collada, potom DX effects, CgFX, RenderMonkey a další. Všechno je to v podstatě stejnej koncept jenom jiná implementace. Osobně se mi víc líbí, když mám celej efekt v jednom souboru se všema shaderama a renderovacíma průchodama - člověk pak nemusí furt přeskakovat ze souboru do souboru. Tady je na ukázku můj XML formát (bloom effect): http://nopaste.ceske-hry.cz/758
Ten zmiňovaný UberShader je poslední dobou docela populární, používá se v některých AAA hrách (např. HL2) a ATI ho používá ve svých demech (v těch, kde nedávaj zdrojáky). Co jsem slyšel, tak lidi si akorát stěžují na dobu kompilace shaderů, v D3D jdou sice nějak předkompilovat, ale v GL už je to o hubu, když to vygeneruje např. 1024 shaderů (= tj 10 statických ifů).
]semo[ napsal: |
b) Hodně částí kódu se v těch shaderech víceméně opakuje, příště bych rozhodně použil #include a #define. |
Akorát v GLSL není #include, bude tam až v GL3 (pokud ho tam náhodou máš, pak je to nestandardní). _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
Icek
Založen: 29. 07. 2007 Příspěvky: 45 Bydliště: Banov 375
|
Zaslal: 11. leden 2008, 07:38:12 Předmět: |
|
|
No jasně, já jsem slovem grafika myslel všechno okolo, meshe, efekty, animace, kameru ... ale prostě pokud bych neměl nic takového implementovaného, tak bych asi nevymýšlel svůj vlastní formát, ale pokusil bych se využít třeba tu COLLADU. Ikdyz jestli chce dělat jen s dx, tak by asi bylo lepší zvolit něco jiného... |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 11. leden 2008, 09:29:02 Předmět: |
|
|
eosie> nemám #include samozřejmě, ale napsal sem to tak, že to skoro tak znělo...ale on to v HLSL má, ne? _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
tempicek
Založen: 04. 12. 2007 Příspěvky: 62
|
Zaslal: 11. leden 2008, 11:07:06 Předmět: |
|
|
]semo[ napsal: |
eosie> nemám #include samozřejmě, ale napsal sem to tak, že to skoro tak znělo...ale on to v HLSL má, ne? |
Ma.
Eosie napsal: |
Co jsem slyšel, tak lidi si akorát stěžují na dobu kompilace shaderů, v D3D jdou sice nějak předkompilovat |
Myslis behem vyvoje nebo za behu hry? Ta kompilace dokaze byt extremne dlouha (mizerny MS kompilator - i minuty), ale do hry uz muze putovat v bytecodu a kompilace bytecode v driverech uz mi nikdy problemy nedelala. |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 11. leden 2008, 15:59:50 Předmět: |
|
|
tempicek napsal: |
Myslis behem vyvoje nebo za behu hry? |
V D3D během vývoje samozřejmě, v GL se to musí dělat za běhu. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
|