.[ ČeskéHry.cz ].
organizace fx souboru

 
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
am!go



Založen: 19. 08. 2007
Příspěvky: 61
Bydliště: Praha

PříspěvekZaslal: 9. leden 2008, 22:32:28    Předmět: organizace fx souboru Odpovědět s citátem

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



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 9. leden 2008, 22:56:56    Předmět: Odpovědět s citátem

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 Wink Univerzálnost a výkonost jdou dost proti sobě, resp. dá HODNĚ práce tyhle dvě věci skloubit.

Jinak v HLSL existuje include Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
tempicek



Založen: 04. 12. 2007
Příspěvky: 62

PříspěvekZaslal: 9. leden 2008, 23:57:20    Předmět: Odpovědět s citátem

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



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

PříspěvekZaslal: 10. leden 2008, 10:35:17    Předmět: Odpovědět s citátem

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



Založen: 29. 07. 2007
Příspěvky: 45
Bydliště: Banov 375

PříspěvekZaslal: 10. leden 2008, 11:37:40    Předmět: Odpovědět s citátem

OT:
semo > neuvažoval jsi o využití COLLADy?
All > používá to tu někdo?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



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

PříspěvekZaslal: 10. leden 2008, 11:39:19    Předmět: Odpovědět s citátem

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



Založen: 29. 07. 2007
Příspěvky: 45
Bydliště: Banov 375

PříspěvekZaslal: 10. leden 2008, 11:47:01    Předmět: Odpovědět s citátem

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



Založen: 19. 08. 2007
Příspěvky: 61
Bydliště: Praha

PříspěvekZaslal: 10. leden 2008, 16:22:22    Předmět: Odpovědět s citátem

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



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 11. leden 2008, 04:05:01    Předmět: Odpovědět s citátem

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



Založen: 29. 07. 2007
Příspěvky: 45
Bydliště: Banov 375

PříspěvekZaslal: 11. leden 2008, 07:38:12    Předmět: Odpovědět s citátem

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



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

PříspěvekZaslal: 11. leden 2008, 09:29:02    Předmět: Odpovědět s citátem

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



Založen: 04. 12. 2007
Příspěvky: 62

PříspěvekZaslal: 11. leden 2008, 11:07:06    Předmět: Odpovědět s citátem

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



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 11. leden 2008, 15:59:50    Předmět: Odpovědět s citátem

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