XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
// Original embedded final-HDR pass5, FilmicU2_ManExposure. The actual original
// PS is independently compared in GalaxyHdrShaderProbe. Runtime post-process
// options, bloom and per-view exposure remain separate restoration work.
cbuffer OriginalHdrConstants : register(b7) { float4 OriginalHdr[11]; };
Texture2D OriginalHdrScene : register(t17);
SamplerState OriginalHdrSampler : register(s2);
struct OriginalHdrVertex { float2 uv:TEXCOORD1; float4 position:SV_POSITION; };
OriginalHdrVertex VSOriginalHdr(uint id:SV_VertexID)
{
    OriginalHdrVertex output;
    output.uv=float2((id<<1)&2,id&2);
    output.position=float4(output.uv*float2(2,-2)+float2(-1,1),0,1);
    return output;
}
float4 PSOriginalHdr(OriginalHdrVertex input):SV_TARGET
{
    float4 value=OriginalHdrScene.Sample(OriginalHdrSampler,input.uv)*OriginalHdr[2].x;
    value=clamp(value,0,64500*OriginalHdr[2].x);
    float3 x=value.rgb*OriginalHdr[7].x;
    float4 abcd=OriginalHdr[3];float4 efWhite=OriginalHdr[4];
    float3 numerator=x*(abcd.x*x+abcd.z*abcd.y)+abcd.w*efWhite.x;
    float3 denominator=x*(abcd.x*x+abcd.y)+abcd.w*efWhite.y;
    x=(numerator/denominator-efWhite.x/efWhite.y)/efWhite.z;
    x=exp2(log2(x)*OriginalHdr[9].z);
    x=saturate(x*OriginalHdr[10].y+OriginalHdr[9].y);
    float luminance=dot(x,float3(.3086,.6094,.082));
    x=(x-luminance)*OriginalHdr[10].z+luminance;
    value.rgb=x*OriginalHdr[10].x;
    return clamp(value,0,64500);
}