.[ ČeskéHry.cz ].
Dual Paraboloid Shadow Mapping - GLSL [VYŘEŠENO]

 
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
mafian89



Založen: 21. 10. 2012
Příspěvky: 51

PříspěvekZaslal: 12. listopad 2012, 15:50:20    Předmět: Dual Paraboloid Shadow Mapping - GLSL [VYŘEŠENO] Odpovědět s citátem

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:
kód:

//smazano


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ě? Smile )

Díky všem za názory, mám v DPSM ještě zmatek trochu Smile


Naposledy upravil mafian89 dne 24. únor 2013, 23:14:01, celkově upraveno 4 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



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

PříspěvekZaslal: 12. listopad 2012, 23:41:14    Předmět: Odpovědět s citátem

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



Založen: 21. 10. 2012
Příspěvky: 51

PříspěvekZaslal: 13. listopad 2012, 10:35:34    Předmět: Odpovědět s citátem

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



Založen: 21. 10. 2012
Příspěvky: 51

PříspěvekZaslal: 13. listopad 2012, 23:27:08    Předmět: Odpovědět s citátem

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
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. listopad 2012, 23:34:48    Předmět: Odpovědět s citátem

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



Založen: 21. 10. 2012
Příspěvky: 51

PříspěvekZaslal: 16. listopad 2012, 19:12:31    Předmět: Odpovědět s citátem

Vilem Otte: Díky, taky mě to napadlo a vskutku to bylo tím. Vyřešeno.
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