Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
mafian89
Založen: 21. 10. 2012 Příspěvky: 51
|
Zaslal: 12. listopad 2012, 15:50:20 Předmět: Dual Paraboloid Shadow Mapping - GLSL [VYŘEŠENO] |
|
|
Zdravím,
nějakou dobu si lámu hlavu s DPSM. Konkrétně s generováním texturovacích souřadnic. Mám dvě depth mapy (pro každou "polokouli") a fragment shader vypadá nějak takto:
Namapované "stíny" vypadají dost hrozně, respektive jsou uplně rozházené po scéně. Takže mám pár otázek:
1) Když generuji paraboloid, dělám to následovně (jde mi o view matici světla):
Cyklus dvou průchodů -> v každém průchodu nastavím view matici světla tak, aby "koukala" podél osy z nahoru a dolu (tj. posunu jedničkovou matici na -pozici světla a následně ji vynásobím příslušnou rotační maticí). Takže asi nějak takhle:
kód: |
v_light_translate = ... //posun na -lightpos
v_light = rotation[i] * v_light_translate |
Uvažuji správně?
2) Vyplívá z 1). Jelikož mám 2 view matice světla, tak kterou mám hodit do shaderu? Aktuálně tam mám první.
( 3) Postupuji správně? Nebo to mám uplně blbě? )
Díky všem za názory, mám v DPSM ještě zmatek trochu
Naposledy upravil mafian89 dne 24. únor 2013, 23:14:01, celkově upraveno 4 krát |
|
Návrat nahoru |
|
|
pcmaster
Založen: 28. 07. 2007 Příspěvky: 1824
|
Zaslal: 12. listopad 2012, 23:41:14 Předmět: |
|
|
Vstupom VS (ci GS) bude len ci je to prva, alebo druha hemisfera (pripadne pusti geometry shader a vygeneruj rovno obe, ze). On musi dostat vsetky vertexy do plochy "kruhu" v cielovej shadow mape, takze transformacia akousi maticou asi nebude stacit. Tj. cela transformacia je: [World Pos] -> [Tex Pos, Tex Slice Index]
Pixel shader bude ziskavat texturovacie koordinaty (a ci je to prva alebo druha hemisfera) z dopocitanej world-pos podla uplne zhodnych vzorcov. Transformacia je znovu: [World Pos] -> [Tex Pos, Tex Slice Index]
Moze byt uplne jedno, aku mas "view" maticu. Transformaciu vertexov maticou svetla mozes uplne vynechat, je to predsa vsesmerove svetlo a tymto padom by si len "otacal" artefakt, ktory vznikne medzi hemisferami. Aplikacia translacie svetla moze lokalne snad trochu zvysit presnost, ale na zaciatok to nepotrebujes vobec.
Pamataj na to, ze geometria bude musiet byt rozumne teselovana, to len tak na okraj, vseobecny problem tejto techniky. To sa da pri generovani celkom pekne vyriesit SM5 teselatorom. To uz je ale optimalizacia. Cele sa to da naimplementovat aj s snad s SM3.
Edit, "vzorec" asi takto:
kód: |
firstOrSecond = worldPos.z > 0 ? -1 : +1
texPos = float4(worldPos, 1)
len = length(texPos.xyz)
texPos.xyz /= len
texPos.z += firstOrSecond
texPos.xy /= texPos.z |
worldPos je jasny, texPos je stransformovana pozicia, ktoru skonzumuje rasterizator, texPos.z sa zapise na vystup do textury shadow mapy. firstOrSecond urci, ci pojde vertex do jedneho alebo druheho paraboloidu, takto prosto (pripadne to potom daj relativne k pozicii svetla).
Pravda je, ze som dual paraboloid mapping robil len pre environment mapu, nie pre shadow mapu, ale bude to velmi podobne. Neuvazujes uplne zle. _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
|
mafian89
Založen: 21. 10. 2012 Příspěvky: 51
|
Zaslal: 13. listopad 2012, 10:35:34 Předmět: |
|
|
Díky za reakci, špatně jsem se vyjádřil. Obě mapy mám již vygenerované. Jen mi šlo o nejasnost s tou pohledovou maticí. Ještě něco vyzkouším a dám vědět. |
|
Návrat nahoru |
|
|
mafian89
Založen: 21. 10. 2012 Příspěvky: 51
|
Zaslal: 13. listopad 2012, 23:27:08 Předmět: |
|
|
Konečně se mi to povedlo rozchodit, ale mám menší problém při překrývání paraboloidů. Viz obrázky:
CMSM:
DPSM:
Jde mi o ten stín vlevo, jak je rozpůlený. Nevíte někdo, čím by to mohlo býti? |
|
Návrat nahoru |
|
|
Vilem Otte
Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 13. listopad 2012, 23:34:48 Předmět: |
|
|
Spodní paraboloid je převrácený podél osy X (vzhledem ke kameře)... _________________ Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. |
|
Návrat nahoru |
|
|
mafian89
Založen: 21. 10. 2012 Příspěvky: 51
|
Zaslal: 16. listopad 2012, 19:12:31 Předmět: |
|
|
Vilem Otte: Díky, taky mě to napadlo a vskutku to bylo tím. Vyřešeno. |
|
Návrat nahoru |
|
|
|