forked from vv/efemra
1
0
Fork 0
efemra/src/shaders/RetroSky.hlsl

55 lines
1.1 KiB
HLSL

#include "common.hlsl"
#include "Color.hlsl"
struct VSInput
{
float4 positionWS : POSITION;
float4 normalWS : NORMAL;
float4 uv01 : TEXCOORD0;
uint4 texIndices : TEXCOORD1;
};
struct PSInput
{
float4 positionCS : SV_Position;
float2 uv0 : TEXCOORD0;
nointerpolation uint albedoIndex : TEXCOORD1;
};
struct PSOutput
{
float4 color : SV_Target0;
half luminance : SV_Target1;
};
PSInput VSMain(VSInput input)
{
float4 positionWS = float4(input.positionWS.xyz, 1.0);
float4 positionCS = mul(cameraData.worldToClip, positionWS);
PSInput output;
output.positionCS = positionCS;
output.uv0 = input.uv01.xy;
output.albedoIndex = input.texIndices.x;
return output;
}
PSOutput PSMain(PSInput input)
{
uint ai = input.albedoIndex;
float2 uv0 = input.uv0;
uv0.x = fmod(uv0.x, 0.5);
float3 albedo = SampleTable2D(ai, uv0).xyz;
if (dot(albedo, 0.33333) < 0.04)
{
uv0.x += 0.5;
albedo = SampleTable2D(ai, uv0).xyz;
}
PSOutput output;
output.luminance = 1.0;
output.color = float4(ExposeScene(albedo), 1.0);
return output;
}