Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- float4x4 invProj;
- float4x4 invView;
- float3 lightPos;
- float3 lightColor;
- float lightIntensity;
- float3 cameraPos;
- void VS_light(in float4 inPosition : POSITION,
- out float4 outPosition : POSITION,
- out float4 outWorldPosition : TEXCOORD0) {
- outPosition = inPosition;
- outWorldPosition = mul(invView, mul(invProj, inPosition));
- }
- void PS_light(in float4 inWorldPosition : TEXCOORD0,
- out float4 outColor : COLOR)
- {
- float4 value;
- outColor = float4(0, 0, 0, 0);
- float3 position = inWorldPosition.xyz;
- float distance = length(lightPos - position);
- const float stepSize = distance / 250.0;
- const float3 rayStep = normalize(position - cameraPos) * stepSize;
- [unroll(2)]
- for (int i = 0; i < 250; i++) {
- float lightAttenuation = 1 / pow(distance, 3);
- float shadow = 1.0;//shadow(position);
- float opacity = 1.0;
- value.rgb = (1.0 - outColor.a) * (lightColor * lightIntensity * lightAttenuation * shadow);
- value.a = (1.0 - outColor.a) * opacity;
- outColor += value;
- position += rayStep;
- distance -= stepSize;
- }
- }
- technique light
- {
- pass
- {
- VertexShader = compile vs_2_0 VS_light();
- PixelShader = compile ps_2_0 PS_light();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement