.[ ČeskéHry.cz ].
Lit Particles
Jdi na stránku 1, 2  Další
 
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
pcmaster



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

PříspěvekZaslal: 6. září 2011, 16:24:33    Předmět: Lit Particles Odpovědět s citátem

Caute, davam to sem, ale mozno sa to hodi do grafickej sekcie.

Moj problem je vymysliet, ako rasterizovat osvetlene castice (billboardy). Hlavna poziadavka je:

Lubovolny pocet svetiel roznych typov (spot/dir/point) x (no-shadow/pcf/...) -- svetla bez tiena sa ale v podstate pouzivat vobec nebudu (nijaky deferred shading s 1000 svetlami bez shadowmap, lez jednotky az desiatky svetiel s transparentnymi (obyc/deep opacity/fourier opacity) shadowmapami). Pocty particlov budu v radoch iba desiatok az stoviek tisic.

Real-time rychlost nie je pri vysokom pocte svetiel poziadavkou, staci interaktivna rychlost a nizsia. Kazde svetlo so sebou nesie vacsinu parametrov, ktore Maya ma pre svetla, tj zozere i viac nez desat textur. To vylucuje moznost zapojit viac nez 1-3 svetla do shadera naraz (nedostatok texturovacich jednotiek).

Pristup stylu vybrat len niektore dolezite svetla a spravit lighting (a shadowing) len s nimi mi pride nepouzitelny, ale mozno nebude ina cesta. Popping chyby pri zmene sady dolezitych svetiel su ale uplne neprijatelne.

Vykreslovat ich na viac prechodov, tj aplikovat jednotlive svetla postupne v passoch je pre tento typ transparentnej geometrie (i keby bola depth-sortovana, co obcas je, obcas nie), je zial zhola nemozne (napravte ma, ak sa mylim).

Samotny osvetlovaci model, zial, tiez este nemam uplne premysleny Sad

Takze, nejake napady, ako kreslit osvetlene, univerzalne particle? Ako z toho von? Very Happy
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.


Naposledy upravil pcmaster dne 6. září 2011, 16:55:46, celkově upraveno 2 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



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

PříspěvekZaslal: 6. září 2011, 16:50:49    Předmět: Odpovědět s citátem

Tak. Dolezite bolo si to takto povedat. Napad teda vznikol, nie moj, poradil kolega, ale asi takto.

Pred samotnou rasterizaciou sa vo vertex shaderi (ci dokonca compute shaderi, to je celkom jedno) spravi pre kazde svetlo osvetlenie particlu (per-vertex), pricom k rasterizacii nedojde a vystup z VS sa naakumuluje do bufferu (stream out/feedback/RWBuffer/atomicke/whatever). Nascitany vystup bude teda v podstate finalna farba, zmodulovana vsetkymi svetlami i shadowmapami. No a tento buffer sa potom pripoji k ostatnym vstupnym bufferom do input assemblera a particle sa vyrasterizuju prave raz, uz bez svetiel. Ano, per pixel osvetlenie takto nevyrobim, ale zase chlapci od NVIDIE ukazali, ze staci billboard prehnat cez teselator a spocitat osvetlenie na jemnejsich vertexoch a je to pekne Smile To sa uvidi, ci bude potrebne.

Tak, co si myslite? Niekto? Nieco? Very Happy
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VladR



Založen: 30. 07. 2007
Příspěvky: 1322
Bydliště: Greater New York City Area

PříspěvekZaslal: 6. září 2011, 16:59:50    Předmět: Odpovědět s citátem

Nemas nejaky link po ruke, kde by bolo viac detailov tejto techniky ? Celkom ma to zaujalo.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



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

PříspěvekZaslal: 6. září 2011, 17:03:23    Předmět: Odpovědět s citátem

Nie, pretoze sme ju vymysleli pred asi 15 minutami! Ak sa podari, tak mozno paper napiseme Very Happy Tu je miesto nad nou filozofovat. Alebo nad osvetlovacim modelom, ci cimkolvek.

Inak hodne este spomenut, ze sa snazim podporovat vsetky mozne shading typy particlov, ktore su v Autodesk Maya (tam niektore idu len v SW rendereroch, niektore len v HW renderoch a niektore su divne Very Happy).
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Vilem Otte



Založen: 18. 09. 2007
Příspěvky: 462
Bydliště: Znojmo - Sedlesovice, Kravi Hora

PříspěvekZaslal: 6. září 2011, 17:32:18    Předmět: Odpovědět s citátem

Imho nejlepším řešením zde je, překvapivě, ray tracing (ušetří ti spousty práce). Nicméně tomu se zřejmě chceš vyhnout, takže k tomu co můžeme použít...

Deferred shading by to hodně usnadnil, jenže ten asi použít nemůžeme (Deep G-Buffery by byly asi příliš velké). Teoreticky bys mohl jejich počet srazit stipplingem, ale... - tím se pipeline stane příliš komplikovanou a tím bude velmi pomalá.

Zůstává tedy Forward shading, kde je možné řešení brute force (tedy ve více fázích budeš osvětlovat postupně po 3, nebo 4 světlech) a additivní blending výsledků do sebe. Tedy mýlíš se, není to nemožné. Bohužel co se týče rychlosti, nebude to nijak extrémně rychlé (ale vzhledem k jinému řešení - deep G-Buffery - to bude mnohem rychlejší).
_________________
Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
]semo[



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

PříspěvekZaslal: 7. září 2011, 09:35:18    Předmět: Odpovědět s citátem

Pěkně ste to vymysleli :-).

Otázky:
1) Jak bude fungovat ta "akumulace do bufferu"? Nemám teď moc přehled, co se dá v nových shader modelech dělat a co ne. Bude možné výsledek osvětlení z VS přímo přičíst do bufferu, nebo budeš sečítat dva buffery v dalším kroku (ať už na CPU, nebo na GPU)?

2) Pro jaký shader model to bude? Předpokládám že dost nový, číst shadowmapy ve vertex shaderu by jinak bylo pomalý nebo nemožný (ostatně stejně jako akumulace do toho bufferu).

Vilem Otte: Deferred shading by byl komplikovaný, particly bejvají často průhledný a to si s deffered shadingem moc nerozumí.
_________________
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
pcmaster



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

PříspěvekZaslal: 7. září 2011, 09:53:51    Předmět: Odpovědět s citátem

Semo, AFAIK, je uz teraz uplne jedno, ci a ako pristupujes k texturam v shaderoch. Samozrejme, ak budes citat vzdialene texely z dovodu, ze kazda castica moze byt niekde uplne inde, tak to asi nebude velmi koherentne (cache friendly). Predsalen, blizke fragmenty sahaju vacsinou na blizke texely. Takze z tohto hladiska to je urcite bude trochu horsie. No na druhej strane tam bude ovela menej texture loads (per-vertex lighting).

V DX10+ (urcite i GL3.x) mozes veselo posielat vystup do stream-output bufferu uz z vertex shaderu (ci geometry shaderu), v DX11 potom logicky i z domain shaderu, proste z poslednej casti pred rasterizaciou. Zatial je plan taky, ze:

kód:
for each light:
  bind light (light color tex, intensity decay, shadowmaps, ...)
  for each affected particle system:
    bind input vertex attributes (pos, vel, opacity, accumColor, ...)
    draw stream out into temporary buffer
    overwrite accumColor with temporary

Vertex streaming shader dostane od IA na vstupe uz naakumulovanu farbu a na vystup posle sucet s novym svetlom. Vystupnym bufferom potom prepiseme originalny (GPU-side copy). Kedze sa nijaky output-merger (blending) nekona, musi sa to spravit rucne.

Nove SM5 veci ako RWBuffer, AppendBuffer a podobne nie je mozne na toto celkom pouzit, pretoze sa zapajaju ako UAV do Pixel/Compute shaderov (UAV i RTV sa zapajaju na vystup z PS vzdy naraz), nie do GS, VS a podobne. Ale citat z nich mozes.

Inak samozrejme sa bavim o DX11 a nejde o herny (ani celkom real-time) renderer.
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



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

PříspěvekZaslal: 7. září 2011, 11:17:58    Předmět: Re: Lit Particles Odpovědět s citátem

pcmaster napsal:
Vykreslovat ich na viac prechodov, tj aplikovat jednotlive svetla postupne v passoch je pre tento typ transparentnej geometrie (i keby bola depth-sortovana, co obcas je, obcas nie), je zial zhola nemozne (napravte ma, ak sa mylim).


Mýlíš. Samozřejmě můžeš nasvětlovat i průhledné objekty, ale je potřeba se na pixely, které blenduješ, dívat, jako by byly předem přednásobeny alphou. Ono se to pak líp chápe. (rgb*a je skutečná intenzita pixelu, kterou potřebuješ pro osvětlení)

Je to easy. Pro první světlo použiješ klasickou blendovací funkci pro premultiplied-alpha pixel:
(ONE, INV_SRC_ALPHA)

Pro každý další světlo použiješ:
(ONE, ONE)

Výsledný pixel pak bude vypadat stejně, jako bys nejdřív zkombinoval obě světla v shaderu, protože:
light1*rgb*a + light2*rgb*a + ... + (1-a)*fb =
(light1 + light2 + ...)*rgb*a + (1-a)*fb

Problém asi bude s tím, že musíš zachovat pořadí vykreslování částic i tady. Nemůžeš vykreslit naráz všechny částice pro jedno světlo, pak pro druhý atd. U každé částice musíš vykonat všechny průchody, než budeš moct kreslit další částici.


Mimochodem - říkals, že nemáš dost texturovacích jednotek. Napadlo tě použít texture arrays? Všechny DX10 a novější ATI karty umí i cubemap arrays. U nVidia to umí jen DX11 karty.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



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

PříspěvekZaslal: 7. září 2011, 11:57:58    Předmět: Re: Lit Particles Odpovědět s citátem

Eosie napsal:
...
Problém asi bude s tím, že musíš zachovat pořadí vykreslování částic i tady. Nemůžeš vykreslit naráz všechny částice pro jedno světlo, pak pro druhý atd. U každé částice musíš vykonat všechny průchody, než budeš moct kreslit další částici.

Tak toto nechapem celkom. Akym sposobom mam vyrasterizovat 100000 castic v 3 systemoch pre 10 svetiel, ak nemozem vykreslit cely system naraz? To mam mat 100000x10 draw-calls?

Inak texture arrays samozrejme pouzivame vsade, kde je to mozne.
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



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

PříspěvekZaslal: 7. září 2011, 12:16:55    Předmět: Odpovědět s citátem

Já jen říkám, jak to má být správně vykresleno.

Samozřejmě řešení existuje a asi je jich víc. Mě zrovna napadá jen tohle:
Poslat z geometry shaderu do rasterizace vždy tolik instancí té samé částice, kolik máš světel. Pixel shader pak nasvítí každou instanci jedním světlem a output merger ti to ve framebufferu zkombinuje.

Nebudeš moct během toho měnit blending, takže nastavíš jen (ONE, INV_SRC_ALPHA) a pro každý nenulový světlo nastavíš výstupní alphu pixelu na 0. Tím se ti ta blendovací funkce zredukuje na (ONE, ONE).
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



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

PříspěvekZaslal: 7. září 2011, 12:18:06    Předmět: Odpovědět s citátem

To bys ale stejně musel mít v pixel shaderu nabindovaný textury pro všechny světla, což jak jsi říkal nemůžeš. Plus je teda výhodnější ty světla rovnou sčítat v pixel shaderu.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



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

PříspěvekZaslal: 9. září 2011, 07:27:13    Předmět: Odpovědět s citátem

Už ses nějak rozhodl, jak to budeš dělat? Použiješ ten per-vertex postup?
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



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

PříspěvekZaslal: 13. září 2011, 13:44:00    Předmět: Odpovědět s citátem

Nakoniec to je/bude per-particle/per-vertex akumulacny lighting-pre-pass a rasterizacia len jeden krat. Zrejme to bude krasne stacit, uvidime.
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Vilem Otte



Založen: 18. 09. 2007
Příspěvky: 462
Bydliště: Znojmo - Sedlesovice, Kravi Hora

PříspěvekZaslal: 13. září 2011, 13:55:38    Předmět: Odpovědět s citátem

Light pre-pass (nebo-li preskladany deferred shading) a polopruhledne castice - Jak to planujete vyresit?
_________________
Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
pcmaster



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

PříspěvekZaslal: 13. září 2011, 14:01:19    Předmět: Odpovědět s citátem

Presne, ako som napisal Smile RGB akumulacna operacia je add, alfa zase maximum. Na alfu totiz ma potom vplyv aj to, ci je castica v tieni, alebo nie (to je poziadavka - mat zaskrtavatko, ktore sposobi, ze castice v tieni zmiznu a nevyrenderuju cierny quad). Takze, pre kazde svetlo sa spocita osvetlenie a pricita sa, alfa podobne (max(old, new)). Vsetko bez rasterizacie. Pri rasterizacii sa uz prida len incandescence, sprite texture a podobne a pouzije sa priamo naakumulovana alfa. Co sa tyka depth sortingu, tak ten je vypinatelny.
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.


Naposledy upravil pcmaster dne 13. září 2011, 14:48:56, celkově upraveno 1 krát
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
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
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