Ik heb 3 Textures (rendertargets) met data
ColorRT
NormalRT
DepthRT
In een vierde RT wordt de lighting data opgeslagen.
Voor het maken van een point light gebruikt een tutorial die ik volg het renderen van sphere mesh met speciale culling settings om te berekenen waar wel en geen licht zou moeten zijn. Hoewel het renderen van 1 sphere niet zwaar is, lijkt het me dat het nog makkelijker moet kunnen.
Je zou immers in de vertex shader of pixel shader de 3D positie van een pixel kunnen uitrekenen, dan zou je belichting in de pixel shader kunnen uitreken aan de hand van de afstand tussen de 3D positie van het licht en de 3D positie van die pixel. Voordeel hiervan is het niet nodig hebben van een sphere model en de veel hogere kwaliteit.
Nu denk ik dat alle data aanwezig is in de shader om dit te doen. de DepthRT kan gewoon uitgelezen worden om de diepte van een pixel te bepalen (laten we even aannemen dat de camera recht naar voren kijkt, dan is dit de Z).
De X en Y worden normaal berekend door de input positie te vermenigvuldigen met enkele matrices (world matrix, projectie matrix, etc..).
In de pixel shader heb ik het screen coordinate (van -1 tot 1) beschikbaar, dus als ik een manier zou kunnen vinden om dit terug te rekenen naar world coordinates. Helaas kan ik zelf niet een manier bedenken om dit te doen.
Dus uiteindelijk vraag is dus eigenlijk: hoe kom je van (screenX, screenY, depth) naar -> (worldX, worldY, depth(aka worldZ))?
(Een van de oplossingen is om ook een render target te hebben met 3D posities gecodeerd in XYZ->RGB, maar dat zou weer extra geheugen kosten).
Een vriend van me meent ooit wel eens zo'n techniek gelezen te hebben, maar kon het niet meer vinden
, dus dat schiet ook niet op. Heeft iemand anders een idee, tip, of kent hij de paper waar dit in gebeurt?
ColorRT
NormalRT
DepthRT
In een vierde RT wordt de lighting data opgeslagen.
Voor het maken van een point light gebruikt een tutorial die ik volg het renderen van sphere mesh met speciale culling settings om te berekenen waar wel en geen licht zou moeten zijn. Hoewel het renderen van 1 sphere niet zwaar is, lijkt het me dat het nog makkelijker moet kunnen.
Je zou immers in de vertex shader of pixel shader de 3D positie van een pixel kunnen uitrekenen, dan zou je belichting in de pixel shader kunnen uitreken aan de hand van de afstand tussen de 3D positie van het licht en de 3D positie van die pixel. Voordeel hiervan is het niet nodig hebben van een sphere model en de veel hogere kwaliteit.
Nu denk ik dat alle data aanwezig is in de shader om dit te doen. de DepthRT kan gewoon uitgelezen worden om de diepte van een pixel te bepalen (laten we even aannemen dat de camera recht naar voren kijkt, dan is dit de Z).
De X en Y worden normaal berekend door de input positie te vermenigvuldigen met enkele matrices (world matrix, projectie matrix, etc..).
In de pixel shader heb ik het screen coordinate (van -1 tot 1) beschikbaar, dus als ik een manier zou kunnen vinden om dit terug te rekenen naar world coordinates. Helaas kan ik zelf niet een manier bedenken om dit te doen.
Dus uiteindelijk vraag is dus eigenlijk: hoe kom je van (screenX, screenY, depth) naar -> (worldX, worldY, depth(aka worldZ))?
(Een van de oplossingen is om ook een render target te hebben met 3D posities gecodeerd in XYZ->RGB, maar dat zou weer extra geheugen kosten).
Een vriend van me meent ooit wel eens zo'n techniek gelezen te hebben, maar kon het niet meer vinden
