Danbias/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/LightPass.hlsl

42 lines
982 B
HLSL
Raw Normal View History

#include "Defines.hlsli"
#include "LightCalc.hlsli"
#include "PosManipulation.hlsli"
2014-01-08 07:01:59 +01:00
#include "SSAO.hlsli"
//todo
//LightCulling
2014-01-08 07:01:59 +01:00
//Calc Diff + Spec Done
//Calc Ambience Done
//Write Glow
[numthreads(16, 16, 1)]
2014-01-08 07:01:59 +01:00
void main( uint3 DTid : SV_DispatchThreadID, uint3 GTid : SV_GroupThreadID )
{
float2 UV = DTid.xy / Pixels;
2014-01-08 07:01:59 +01:00
UV.x = UV.x * 2 - 1;
UV.y = 1 - 2 * UV.y;
float3 ViewPos = ToVpos(DTid.xy, UV);
DiffSpec Shaded;
Shaded.Diffuse = float3(0,0,0);
Shaded.Specular = float3(0,0,0);
2014-01-08 07:01:59 +01:00
for(int i = 0; i < Lights; ++i)
{
DiffSpec light = LightCalc(Points[i], ViewPos, DTid.xy);
2014-01-08 07:01:59 +01:00
Shaded.Diffuse += light.Diffuse;
Shaded.Specular += light.Specular;
}
2014-01-30 15:12:53 +01:00
//Diffuse[DTid.xy] = float4(Shaded.Diffuse * DiffuseGlow[DTid.xy].xyz,1);
Diffuse[DTid.xy] = float4(DiffuseGlow[DTid.xy].xyz,1);
2014-01-08 07:01:59 +01:00
Specular[DTid.xy] = float4(Shaded.Specular, 1);
if(DTid.x & 1 && DTid.y & 1 )
2014-01-08 07:01:59 +01:00
{
float AmbValue = GetSSAO(ViewPos, UV, DTid.xy, GTid.xy/2);
Ambient[DTid.xy/2] = AmbValue;
}
2014-01-08 07:01:59 +01:00
}