65 lines
No EOL
1.4 KiB
C
65 lines
No EOL
1.4 KiB
C
#ifndef cgim_h_included
|
|
#define cgim_h_included
|
|
|
|
// creates more light by a vector from the sky
|
|
#define SMALLSKY_TOP_VECTOR_POWER 0.75f
|
|
|
|
// Break default bloom to soften the overall picture
|
|
#define BROKE_BLOOM_POWER 1.5f
|
|
|
|
#define CGIM_LUM float3(0.2126f, 0.7152f, 0.0722f)
|
|
|
|
float Luminance(float3 Color)
|
|
{
|
|
return dot(Color, CGIM_LUM);
|
|
}
|
|
|
|
float3 TonemapRobo(float3 c)
|
|
{
|
|
float l = Luminance(c);
|
|
return c / sqrt(1.0 + l * l);
|
|
}
|
|
|
|
float TonemapRobo(float c)
|
|
{
|
|
return c / sqrt(1.0 + c * c);
|
|
}
|
|
|
|
float4 BrokeBloom(float4 c)
|
|
{
|
|
c *= BROKE_BLOOM_POWER;
|
|
c = float4(TonemapRobo(c.rgb), TonemapRobo(c.a));
|
|
c /= BROKE_BLOOM_POWER;
|
|
|
|
return c;
|
|
}
|
|
|
|
float3 Uncharted2ACES(float3 x)
|
|
{
|
|
static const float A = 0.15f; // Shoulder strength
|
|
static const float B = 0.50f; // Linear strength
|
|
static const float C = 0.10f; // Linear angle
|
|
static const float D = 0.20f; // Toe strength
|
|
static const float E = 0.02f; // Toe numerator
|
|
static const float F = 0.30f; // Toe denominator
|
|
return ((x * (A * x + C * B) + D * E) / (x * (A * x + B) + D * F)) - E / F;
|
|
}
|
|
|
|
// Uncharted 2 tonemapping
|
|
#define UNCHARTED2TONEMAP_WHITEPT 1.35
|
|
#define UNCHARTED2TONEMAP_EXPOSURE 1.0
|
|
|
|
float3 Uncharted2Tonemap(float3 c)
|
|
{
|
|
c *= UNCHARTED2TONEMAP_EXPOSURE;
|
|
|
|
float3 tc = Uncharted2ACES(c);
|
|
float l = Luminance(c);
|
|
|
|
c = lerp(c * Uncharted2ACES(l) / l, tc, tc);
|
|
c /= Uncharted2ACES(UNCHARTED2TONEMAP_WHITEPT);
|
|
|
|
return c;
|
|
}
|
|
|
|
#endif |