55 lines
1.1 KiB
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;
|
||
|
}
|