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

Založen: 16. 01. 2008 Příspěvky: 49
|
Zaslal: 16. leden 2008, 16:25:49 Předmět: Nekonečný příběh průhlednosti |
|
|
Předem bych chtěl říct že se nechci, jako je zvykem začátečníků, ptát na normální průhlednost.
Můj problém je jiného rázu. Po přečtení všech možných knih jsem dospěl k následujícímu postupu (zatím pouze teoreticky a v DirectX), ve kterém ale není místo pro průhlednost:
Nejprve vykreslit scénu s ambientním osvětlením a pak vykreslovat znovu osvětlenou ostatními světly a přičítat je k tomu co již bylo nakresleno.
Není možno kreslit více světel v jednom průběhu, protože se využívá shadowmapping (dynamický) a nestačily by texturovací jednotky.
No a ted bych se právě rád zeptal, kam sem můžu zakomponovat průhlednost ? Do průběhu kreslení světel to nelze protože blending je nastaven na přičítání. Pokud dám kreslení průhledných na konec jako normálně pak se připravím o možnost je jakkoliv osvětlovat...
Máte s tímto nějaké zkušenosti ? Jak tam dát půhlednost ?
PS. Tento dotaz jsem položil i na foru builder.cz a odkázali mě sem  |
|
Návrat nahoru |
|
 |
tempicek

Založen: 04. 12. 2007 Příspěvky: 62
|
Zaslal: 16. leden 2008, 23:56:23 Předmět: Re: Nekonečný příběh průhlednosti |
|
|
Khaj napsal: |
Do průběhu kreslení světel to nelze protože blending je nastaven na přičítání. Pokud dám kreslení průhledných na konec jako normálně pak se připravím o možnost je jakkoliv osvětlovat...
Máte s tímto nějaké zkušenosti ? Jak tam dát půhlednost ? |
Predpokladam, ze objekty serazujes pred vykreslovanim (od nejblizsiho k nejvzdalenejsimu), takze je jasne, ze pri tom nemuzes renderovat i pruhledne objekty. Ale proc bys je nemohl delat na konec? Tak se to bezne dela. Proc bys je pri tom nemohl osvetlit? Pro vsechna svetla si prece muzes hodit cely novy cyklus. |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 17. leden 2008, 00:34:48 Předmět: |
|
|
Vzpomněl jsem si na jeden starý thread, který jsem na builderu nezmiňoval:
OpenGL.org - Translucency and multi-pass lighting
Mělo by tam být popsané vše, co potřebuješ k osvětleným průhledným objektům. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
Khaj

Založen: 16. 01. 2008 Příspěvky: 49
|
Zaslal: 17. leden 2008, 15:25:55 Předmět: Re: Nekonečný příběh průhlednosti |
|
|
tempicek napsal: |
Predpokladam, ze objekty serazujes pred vykreslovanim (od nejblizsiho k nejvzdalenejsimu), takze je jasne, ze pri tom nemuzes renderovat i pruhledne objekty. Ale proc bys je nemohl delat na konec? Tak se to bezne dela. Proc bys je pri tom nemohl osvetlit? Pro vsechna svetla si prece muzes hodit cely novy cyklus. |
Ani nevis jak rad bych je serazoval ... jenomze meneni konstant v shaderech, prepinani vertex bufferu a samozrejme samotne razeni by me poslalo do pekel snimky za sekundu (=zatim se spokojim s artefakty).
To ze to vlastne muzu delat novym cyklem mi vubec nenapadlo ... diky.
A nebude to potom moc pomaly ?
Eosie napsal: |
Mělo by tam být popsané vše, co potřebuješ k osvětleným průhledným objektům. |
Diky moc uz si to ctu. |
|
Návrat nahoru |
|
 |
tempicek

Založen: 04. 12. 2007 Příspěvky: 62
|
Zaslal: 17. leden 2008, 17:42:07 Předmět: Re: Nekonečný příběh průhlednosti |
|
|
Khaj napsal: |
Ani nevis jak rad bych je serazoval ... jenomze meneni konstant v shaderech, prepinani vertex bufferu a samozrejme samotne razeni by me poslalo do pekel snimky za sekundu (=zatim se spokojim s artefakty). |
No tak setridit objekty bys mel tak jako tak (samozrejme ne na urovni polygonu). Pokud je dokazes seskupit (aby skupina mela vzdy nejaky rozumny pocet polygonu), muzes tridit skupiny objektu, nebo pokud mas scenu ve strome, muzes si spravnym zpusobem projit ten strom. V kazdem pripadet tridit, tridit, tridit - to Te zase tak moc casu nestoji. Krom toho ty pruhledne objekty tridit musis at chces nebo ne, musis je prece vykreslit odzadu (leda bys nezapisoval do depth bufferu?).
Co se tyce nastavovani parametru (bufferu,konstant...), to se holt zvedne, ale da se predpokladat, ze tech pruhlednych objektu tam nebude tolik, ne? Takze pokud ten pruchod udelas pres ty objekty a pak pres svetla, tak to nemuze byt nic tak hrozneho.
Rykl bych, ze pokud sis s tim na tehle bazi jeste nehral, tak ten framerate jeste muzes pekne vytahnount nahoru, jen to chce zapremyslet kolik tam ceho mas, jak je muzes seskupit (materialy, vzdalenost, shader ... ), jak jsou ty objekty komplikovane a jak moc se prekryvaji... Taky to nemusis tridit stale, staci "tu a tam", zvlast pokud to mas ve strome. |
|
Návrat nahoru |
|
 |
Khaj

Založen: 16. 01. 2008 Příspěvky: 49
|
Zaslal: 17. leden 2008, 18:57:27 Předmět: Re: Nekonečný příběh |
|
|
Zatim si s tim hraju pouze teoreticky. S tim vypnutym depthbufferem mas pravdu, od zacatku jsem s nim pocital. S cim ale naopak nepocitam jsou jakekoliv stromy (celej ho prekopavat pri sebemensi zmene pozice cehokoli se mi moc nezamlouva).
Jelikoz me svrbi nos, ze sem prave narazil na ty spravne odborniky, popisu celou svoji ideu (jakakoli kritika vitana):
Predem si chci udelat (vlastni format modelu ?) modely s animacema resenejma animacnima maticema - kazdy bod si pamatuje jaka matice ho jak moc ovlivnuje, animace si pamatujou zmeny matic v case a ve vertex shaderu se proste sectou a vynasobi s bodem. Samozrejme to jeste nejak poresim aby mi stacil udelat vlastni editor na animace a ne na modely - nahravat budu z 3ds. Ve scene jsou objekty, kazdy z nich ma svuj vlastni model. U modelu jsou treba i nastaveny dalsi matice pod-modelu ktery rikaj ze helma na telo patri nahoru a kalhoty dolu . Je samozrejme ze jeden objekt muze bejt v druhym (auto v hangaru) a z toho duvodu neuvazuju zadnej teren - vsechno resi kolize mezi objekty.
Pixel shadery resi offset mapping, normaly, osvetleni, stinovani shadowmapama a nakonec to jeste vynasobi globalni matici barev (zeleny brejle atd...). Self Shadowing tam nehodlam davat protoze to neni nic extra a stejne tak tam nedavam zadny materialy - barva je proste barva dle textury vynasobena s barvama bodu modelu a hotovo. Casticove systemy a zrcadla zatim neresim, ale zrcadla budu chtit udelat nak chytre abych moch mit i kristalovou sosku jako zrcadlo a navic bez stencil bufferu (nemam ho rad ).
Jo jinak vsechno budu kreslit v samostatnym vlakne protoze tim se u directXu nemusi resit ze mi Alt-Tab nebo jini gangsteri ukradne device a budu muset znova inicializovat.
Rendering rozhodne nebude 1-pass ale urcite multi-pass a momentalne si ctu i cosi o defered renderingu coz vypada nadherne ale s pruhlednosti to bude jeste horsi
Otazkou zustava co je vlastne pruhledne ... asi v nepruhlednem passu to otestuju alpha testem (vyradit cokoli pruhlednyho) a v pruhlednym vyradim zase vse nepruhledny...
Pokud jste se docetli az sem tak ano, mate pravdu, predstavuju si to jako Hurvinek valku , ale alespon mam na sto let co delat. Otazka proc si radsi nestahnu uz hotovej engin je vyresena tim ze I. urcite bude obsahovat spoustu veci ktery tam nechci (engin ne ta otazka ) II. nebude obsahovat veci ktery chci III. uz sem to zkousel a stazene enginy zustaly mnou nepochopeny  |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 17. leden 2008, 19:27:19 Předmět: Re: Nekonečný příběh průhlednosti |
|
|
tempicek napsal: |
Krom toho ty pruhledne objekty tridit musis at chces nebo ne, musis je prece vykreslit odzadu (leda bys nezapisoval do depth bufferu?). |
Zápis do depth bufferu nemá s průhlednýma objektama co dělat. Řadí se prostě proto, že operace alpha-blendingu (P1*(1-a) + P2*a) není komutativní (tzn. když se renderuje v jiném pořadí, výsledný obraz bude prostě jiný).
EDIT: Khaj> Pojem "vypnutý depth buffer" v 3D grafice není. Je buď depth-test (zahazování pixelů) nebo zápis do depth bufferu a obojí se nastavuje odděleně. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
Augi

Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 17. leden 2008, 20:03:15 Předmět: Re: Nekonečný příběh |
|
|
Khaj napsal: |
Pixel shadery resi offset mapping, normaly, osvetleni, stinovani shadowmapama a nakonec to jeste vynasobi globalni matici barev (zeleny brejle atd...). Self Shadowing tam nehodlam davat protoze to neni nic extra a stejne tak tam nedavam zadny materialy - barva je proste barva dle textury vynasobena s barvama bodu modelu a hotovo. |
Tohle mi moc není jasný, jak to myslíš. Shadow mapa Ti udělá self-shadowing (vychází to z jejího principu). Nebo nemyslíš shadow mapping, ale jen projektování textury, do které jsi vyrenderoval stínící objekty? |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 17. leden 2008, 20:04:32 Předmět: Re: Nekonečný příběh |
|
|
Khaj napsal: |
S cim ale naopak nepocitam jsou jakekoliv stromy |
Na stromy se zatím vykašli, mohou nadělat víc škody než užitku.
Khaj napsal: |
modely s animacema resenejma animacnima maticema |
Implementuj kosterní (= skeletální) animace. Je to možná trochu podobné tomu, co popisuješ. Hodně se to používá a snadno se to animuje ve vertex shaderu.
Khaj napsal: |
nahravat budu z 3ds |
Jako začínající vývojář rendereru se ti bude hodit mnohem víc formátů. 3ds se občas hodí, ale je dobré mít i nějaké ASCII formáty jako třeba .ASE nebo textový .X. Čím víc formátů tím líp, abys mohl přijímat data z celé řady modelovacích nástrojů.
Khaj napsal: |
a stejne tak tam nedavam zadny materialy - barva je proste barva dle textury vynasobena s barvama bodu modelu a hotovo |
Materiály jsou potřeba. Materiál = textury, shadery a parametry shaderů, takže je tam máš vždycky. Barvy bodů jsou podle mě celkem k ničemu, barevné detaily by měla vyjádřit textura, nic jiného není většinou potřeba.
Khaj napsal: |
ale zrcadla budu chtit udelat nak chytre abych moch mit i kristalovou sosku jako zrcadlo a navic bez stencil bufferu (nemam ho rad ). |
To se dá řešit pomocí renderingu do cubemapy z pozice objektu a její namapování na model. Jako koordináty cubemapy použiješ vektor odrazu od kamery, shader je na to jednoduchej...
Khaj napsal: |
Jo jinak vsechno budu kreslit v samostatnym vlakne protoze tim se u directXu nemusi resit ze mi Alt-Tab nebo jini gangsteri ukradne device a budu muset znova inicializovat. |
No podle mě ti tam to vlákno na tohle nepomůže, ztratit můžeš kdykoliv cokoliv. Je třeba s tím počítat a implementovat obnovu libovolných dat, které jsi poslal do 3D API. Nezapomeň, že hry by měly umět změnit rozlišení nebo multisampling a tam se ti toho může ztratit celkem dost, když se na to vyhrazuje místo ve videopaměti...
Khaj napsal: |
Otazkou zustava co je vlastne pruhledne ... asi v nepruhlednem passu to otestuju alpha testem (vyradit cokoli pruhlednyho) a v pruhlednym vyradim zase vse nepruhledny... |
Raději udržuj 2 seznamy, jeden na průhledné a druhý na neprůhledné objekty.
Khaj napsal: |
I. urcite bude obsahovat spoustu veci ktery tam nechci (engin ne ta otazka ) II. nebude obsahovat veci ktery chci III. uz sem to zkousel a stazene enginy zustaly mnou nepochopeny  |
I. ničemu nevadí, II. nemusí platit, pokud vybereš ten správný a III. - to je škoda.
EDIT: Augi> Asi myslí self-shadowing třeba jako horizon mapping nebo parallax occlussion mapping. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
tempicek

Založen: 04. 12. 2007 Příspěvky: 62
|
Zaslal: 17. leden 2008, 23:33:02 Předmět: Re: Nekonečný příběh průhlednosti |
|
|
Eosie napsal: |
Zápis do depth bufferu nemá s průhlednýma objektama co dělat. Řadí se prostě proto, že operace alpha-blendingu (P1*(1-a) + P2*a) není komutativní (tzn. když se renderuje v jiném pořadí, výsledný obraz bude prostě jiný). |
To samozrejme ma spolu co delat. Pokud zapisujes do depth bufferu a zobrazujes pruhledne objekty, tak je musis kreslit logicky az pote, kdy je za nimi platny finalni obsah. Jinak co rikas je pravda, ale je to jen dalsi duvod.
Khaj napsal: |
nahravat budu z 3ds |
Ten format interne neznam, takze se mohu plest, ale mam s nim velmi spatne zkusenosti - je dost stary a ne vsechno prenese, napriklad jsem v nem ztracel smoothgroupy (pri exportu z Maxka) a vysledek byl celkem tragicky. Obecne s temi formaty bych rekl, ze nejlepsi budes mit, kdyz pouzijes exporter do .X a pridrzis se ho. Delat vlastni format je fuj fuj a nemel by sis to delat do zacatku zbytecne tezsi.
citace: |
Je samozrejme ze jeden objekt muze bejt v druhym (auto v hangaru) a z toho duvodu neuvazuju zadnej teren - vsechno resi kolize mezi objekty. |
Nerozumim, kde se Ti krizi teren s tim, ze mas jeden objekt ve druhem. Pracovat s terenem jako samostatnym zvlastnim objektem je vice nez vhodne pro jeho specificke vlasnosti (pokud neuvazujes pouze uzavrene prostory).
citace: |
momentalne si ctu i cosi o defered renderingu coz vypada nadherne |
Drz se stranou, narazis jeste na dalsi problemy, i tak jich budes mit do zacatku dost, vzhledem k tomu, ze je tohle zrejme Tvuj panensky pokus.
citace: |
Otazkou zustava co je vlastne pruhledne ... |
Tuhle otazku si vyres. Je velmi dobre omezit co nejvice hranice pruhlednosti (na urcite typy objektu, napriklad auto zrejme bude pruhledne, strom ne) a je uzitecne vedet, ktere objekty pruhledne skutecne jsou nebo ne.
Jinak souhlasim plne s temi dalsimi komentari od Eosie. Pouze ten o reseni "lost device" bych podtrhl asi petkrat - to proste delat musis! A DX9 je lepsi pouzivat v jednom vlakne, pokud je to mozne, ta rezie se zapnutim multithreadingu tam proste je. |
|
Návrat nahoru |
|
 |
tempicek

Založen: 04. 12. 2007 Příspěvky: 62
|
Zaslal: 17. leden 2008, 23:38:18 Předmět: Re: Nekonečný příběh |
|
|
Khaj napsal: |
I. urcite bude obsahovat spoustu veci ktery tam nechci (engin ne ta otazka ) II. nebude obsahovat veci ktery chci III. uz sem to zkousel a stazene enginy zustaly mnou nepochopeny  |
Jo a s tim vlastnim gr.enginem si to taky radeji 3x rozmysli. Pokud Tvym cilem neni udelat gr.engine a pokud se obzvlast netesis z toho, co se Ti v grafice povedlo, pripadne z toho reseni problemu samotneho, tak se tomu obloukem vyhni - budes psat neco, ceho uz je napsany plny pytel, neudelas to ani zpoloviny tak dobre, jako jsou ty horsi dostupne knihovny (s lepsimi ani nesrovnavat) a ztratis tim hromadu casu, ktery bys mohl venovat jinym vecem.
a I. II. a III. - presne jak psal Eosie |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 18. leden 2008, 01:22:35 Předmět: Re: Nekonečný příběh průhlednosti |
|
|
tempicek napsal: |
To samozrejme ma spolu co delat. Pokud zapisujes do depth bufferu a zobrazujes pruhledne objekty, tak je musis kreslit logicky az pote, kdy je za nimi platny finalni obsah. |
Aha sry, jasně, mě nenapadlo, že to myslíš takhle. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
Khaj

Založen: 16. 01. 2008 Příspěvky: 49
|
Zaslal: 18. leden 2008, 18:15:38 Předmět: Re: Nekonečný příběh průhlednosti |
|
|
citace: |
Asi myslí self-shadowing třeba jako horizon mapping nebo parallax occlussion mapping |
- presne
Skeletalni animace - jj ma to byt podobne tomu co popisuju, protoze sem se skeletalni animaci inspiroval (interpretoval po svem) ... s timhle mym resenim udelam ale navic i veci ktery bezny kustky neumi.
citace: |
Jako začínající vývojář rendereru se ti bude hodit mnohem víc formátů. |
Tak tak cim vic moznych importovatelnych formatu tim lip.
citace: |
Barvy bodů jsou podle mě celkem k ničemu, barevné detaily by měla vyjádřit textura, nic jiného není většinou potřeba. |
Vyjadril jsem se nejasne - jediny material ktery kdy hodlam vyuzit je textura. Ty body tam uvazuju proto, abych mohl delat i zmeny barev v animacich (dle dalsich matic ale pro zmenu na barvy).
citace: |
No podle mě ti tam to vlákno na tohle nepomůže, ztratit můžeš kdykoliv cokoliv. |
Zkousel jsem to a kupodivu to pomohlo - po vsemoznych pokusech jsem to ztratil az s vypnutim proudu.
Samozrejme sem nikdy nechtel opakovat chybu napr. Morrowindu ktery se alt tabu a jinym neuprosne brani.
citace: |
Raději udržuj 2 seznamy, jeden na průhledné a druhý na neprůhledné objekty. |
A co kdyz mam objekt který ma pruhledné i nepruhledné casti (alpha v zakladni texture) ... nebo si ma komp pamatovat vsechny potencionalne pruhledne ? Alpha test se mi libi protoze to resi na urovni pixelu, ale zase me strasi ze je pry pomaly.
citace: |
Nerozumim, kde se Ti krizi teren s tim, ze mas jeden objekt ve druhem.... |
Presne tak jsem to myslel - teren je proste jen dalsi objekt a ne nic extra special od ceho se vse odviji .
citace: |
...budes psat neco, ceho uz je napsany plny pytel.... |
Ke tvorbe vlastniho gr.enginu jsem pristoupil pote co jsem zjistil bod III. ... krom toho to mam jako zabavu
Mno ale abych se vratil zpet k me milovane pruhlednosti.
Diky Vasim napadum si ji uz ve svem postupu dokazu predstavit ale hloda ve me cervik pochybnosti, ze muj postup vykaslat se na razeni asi skutecne nebude vypadat nejlip .
Nejhezci by samozrejme bylo radit samotne pixely coz by bylo nejrychlejsi a zmizely by i artefakty pri protinani se dvou trojuhelniku... ale prohledani internetu na toto tema mi kyzene odpovedi neprineslo a me napady typu rendering do 3D textury (to snad ani nejde ne ?) nebo kazdy trojuhelnik do samostatne textury patri spis do serialu IT Crowd . |
|
Návrat nahoru |
|
 |
Augi

Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 18. leden 2008, 19:36:22 Předmět: Re: Nekonečný příběh průhlednosti |
|
|
Khaj napsal: |
citace: |
Raději udržuj 2 seznamy, jeden na průhledné a druhý na neprůhledné objekty. |
A co kdyz mam objekt který ma pruhledné i nepruhledné casti (alpha v zakladni texture) ... nebo si ma komp pamatovat vsechny potencionalne pruhledne ? Alpha test se mi libi protoze to resi na urovni pixelu, ale zase me strasi ze je pry pomaly. |
Když má objekt průhledné i neprůhledné části, tak by imho měly být tyto části separovatelné už jen z toho důvodu, že obě tyto části vyžadují jiné nastavení alpha-blendigu a tudíž musí být renderovány separátně (tj. pomocí více volání Draw{Indexed}Primitive). |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 19. leden 2008, 06:12:54 Předmět: Re: Nekonečný příběh průhlednosti |
|
|
Khaj napsal: |
Zkousel jsem to a kupodivu to pomohlo - po vsemoznych pokusech jsem to ztratil az s vypnutim proudu.  |
Další vlákno pomoct nemohlo, pomohlo něco jinýho - za určitých podmínek by to fungovat mohlo (buď máš Visty nebo jsi všude nastavil D3DPOOL_MANAGED nebo jsi při vytváření nastavil další kouzelné flagy, o kterých nevím, nejsem D3D coder). Problém je v tom, že takto musí být v paměti téměř všechny data, co jsou ve videopaměti, tzn. máš každou věc vždycky uloženou 2x. To je jediný způsob, jak zajistit, že D3D ty data při ztrátě obnoví za tebe. Má to svoje pro a proti. Pro: nemusíš se starat o obnovu. Proti: Pokud jsi schopen si to obnovu pohlídat sám, ušetříš hromadu paměti (až stovky MB), když je budeš načítat z disku.
Khaj napsal: |
A co kdyz mam objekt který ma pruhledné i nepruhledné casti (alpha v zakladni texture) ... nebo si ma komp pamatovat vsechny potencionalne pruhledne ? |
Klidně to měj v jednom seznamu, ale udělej to vrstvené. Tzn. pošleš celé modely do rendereru, ten si z nich vezme jednotlivé meshe a naháže si je do jednotlivých seznamů (průhledné/neprůhledné atd.), potom ten seznam seřadí a nakonec vyrenderuje. Tohle by se mohlo dělat každý snímek. Možných řešení je víc.
Khaj napsal: |
Presne tak jsem to myslel - teren je proste jen dalsi objekt a ne nic extra special od ceho se vse odviji . |
Ale pro terén musíš řešit optimalizace zvlášť.
Khaj napsal: |
Nejhezci by samozrejme bylo radit samotne pixely coz by bylo nejrychlejsi a zmizely by i artefakty pri protinani se dvou trojuhelniku... ale prohledani internetu na toto tema mi kyzene odpovedi neprineslo a me napady typu rendering do 3D textury (to snad ani nejde ne ?) nebo kazdy trojuhelnik do samostatne textury |
Bullshit. Nic takového ti nepomůže nebo je to nereálné. Holt budeš muset řadit. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
|