mirror of
https://github.com/id-Software/DOOM-3-BFG.git
synced 2025-03-13 22:22:05 +00:00
Optimized retro shaders by precomputing deviation
This commit is contained in:
parent
4f876b4bb5
commit
2ae6a7fe86
5 changed files with 504 additions and 795 deletions
|
@ -1248,6 +1248,41 @@ CONSOLE_COMMAND( makeImageHeader, "load an image and turn it into a .h file", NU
|
|||
Mem_Free( buffer );
|
||||
}
|
||||
|
||||
class idSortColors : public idSort_Quick< idVec3, idSortColors >
|
||||
{
|
||||
public:
|
||||
int SizeMetric( const idVec3& v ) const
|
||||
{
|
||||
return v.x * v.x + v.y * v.y + v.z * v.z;
|
||||
}
|
||||
int Compare( const idVec3& a, const idVec3& b ) const
|
||||
{
|
||||
//idVec3 diff = b - a;
|
||||
//return SizeMetric( diff );
|
||||
|
||||
return SizeMetric( a ) - SizeMetric( b );
|
||||
}
|
||||
};
|
||||
|
||||
idVec3 Average( const idList<idVec3>& colors )
|
||||
{
|
||||
idVec3 avg = vec3_zero;
|
||||
|
||||
int numColors = colors.Num();
|
||||
for( int i = 0; i < numColors; i++ )
|
||||
{
|
||||
avg += colors[i];
|
||||
}
|
||||
avg *= ( 1.0f / numColors );
|
||||
|
||||
return avg;
|
||||
}
|
||||
|
||||
idVec3 Median( const idList<idVec3>& sortedPal )
|
||||
{
|
||||
return sortedPal[sortedPal.Num() / 2];
|
||||
}
|
||||
|
||||
CONSOLE_COMMAND( makePaletteHeader, "load a .pal palette, build an image from it and turn it into a .h file", NULL )
|
||||
{
|
||||
if( args.Argc() < 2 )
|
||||
|
@ -1280,17 +1315,66 @@ CONSOLE_COMMAND( makePaletteHeader, "load a .pal palette, build an image from it
|
|||
|
||||
int numColors = src.ParseInt();
|
||||
|
||||
//idList<id
|
||||
byte rgb[3];
|
||||
idList<idVec3> colors;
|
||||
colors.AssureSize( numColors );
|
||||
|
||||
idVec3 rgb;
|
||||
for( int i = 0; i < numColors; i++ )
|
||||
{
|
||||
rgb[0] = src.ParseInt();
|
||||
rgb[1] = src.ParseInt();
|
||||
rgb[2] = src.ParseInt();
|
||||
|
||||
idLib::Printf( "RGB( %d, %d, %d ),\n", rgb[0], rgb[1], rgb[2] );
|
||||
colors[ i ] = rgb;
|
||||
|
||||
//idLib::Printf( "RGB( %d, %d, %d ),\n", (int)rgb[0], (int)rgb[1], (int)rgb[2] );
|
||||
}
|
||||
|
||||
idLib::Printf( "// SORTED ============\n" );
|
||||
colors.SortWithTemplate( idSortColors() );
|
||||
|
||||
idLib::Printf( "const float3 palette[NUM_COLORS] = // %d\n{\n", numColors );
|
||||
for( int i = 0; i < numColors; i++ )
|
||||
{
|
||||
rgb = colors[ i ];
|
||||
idLib::Printf( "\tRGB( %d, %d, %d ),\n", ( int )rgb[0], ( int )rgb[1], ( int )rgb[2] );
|
||||
}
|
||||
idLib::Printf( "};\n\n", numColors );
|
||||
|
||||
// calc the median absolute deviation
|
||||
idVec3 median = Median( colors );
|
||||
idList<idVec3> deviations;
|
||||
deviations.AssureSize( numColors );
|
||||
|
||||
for( int i = 0; i < numColors; i++ )
|
||||
{
|
||||
idVec3 diff = colors[i] - median;
|
||||
deviations[i].x = idMath::Fabs( diff.x );
|
||||
deviations[i].y = idMath::Fabs( diff.y );
|
||||
deviations[i].z = idMath::Fabs( diff.z );
|
||||
}
|
||||
|
||||
deviations.SortWithTemplate( idSortColors() );
|
||||
rgb = Median( deviations );
|
||||
|
||||
idLib::Printf( "const float3 medianAbsoluteDeviation = RGB( %d, %d, %d );\n", ( int )rgb[0], ( int )rgb[1], ( int )rgb[2] );
|
||||
|
||||
// calc the standard deviation
|
||||
idVec3 avg = Average( colors );
|
||||
|
||||
idVec3 deviation = vec3_zero;
|
||||
for( int i = 0; i < numColors; i++ )
|
||||
{
|
||||
idVec3 diff = colors[i] - avg;
|
||||
deviation.x += idMath::Fabs( diff.x );
|
||||
deviation.y += idMath::Fabs( diff.y );
|
||||
deviation.z += idMath::Fabs( diff.z );
|
||||
}
|
||||
deviation *= ( 1.0f / numColors );
|
||||
|
||||
rgb = deviation;
|
||||
idLib::Printf( "const float3 deviation = RGB( %d, %d, %d );\n", ( int )rgb[0], ( int )rgb[1], ( int )rgb[2] );
|
||||
|
||||
fileSystem->FreeFile( palBuffer );
|
||||
|
||||
filename.StripFileExtension();
|
||||
|
|
|
@ -106,73 +106,6 @@ float3 LinearSearch( float3 c, float3 pal[NUM_COLORS] )
|
|||
return pal[index];
|
||||
}
|
||||
|
||||
/*
|
||||
float3 GetClosest( float3 val1, float3 val2, float3 target )
|
||||
{
|
||||
if( distance( target, val1 ) >= distance( val2, target ) )
|
||||
{
|
||||
return val2;
|
||||
}
|
||||
else
|
||||
{
|
||||
return val1;
|
||||
}
|
||||
}
|
||||
|
||||
// find nearest palette color using Euclidean disntance and binary search
|
||||
// this requires an already sorted palette as input
|
||||
float3 BinarySearch( float3 target, float3 pal[NUM_COLORS] )
|
||||
{
|
||||
float targetY = PhotoLuma( target );
|
||||
|
||||
// left-side case
|
||||
if( targetY <= PhotoLuma( pal[0] ) )
|
||||
{
|
||||
return pal[0];
|
||||
}
|
||||
|
||||
// right-side case
|
||||
if( targetY >= PhotoLuma( pal[NUM_COLORS - 1] ) )
|
||||
{
|
||||
return pal[NUM_COLORS - 1];
|
||||
}
|
||||
|
||||
int i = 0, j = NUM_COLORS, mid = 0;
|
||||
while( i < j )
|
||||
{
|
||||
mid = ( i + j ) / 2;
|
||||
|
||||
if( distance( pal[mid], target ) < 0.01 )
|
||||
{
|
||||
return pal[mid];
|
||||
}
|
||||
|
||||
// if target is less than array element, then search in left
|
||||
if( targetY < PhotoLuma( pal[mid] ) )
|
||||
{
|
||||
// if target is greater than previous
|
||||
// to mid, return closest of two
|
||||
if( mid > 0 && targetY > PhotoLuma( pal[mid - 1] ) )
|
||||
{
|
||||
return GetClosest( pal[mid - 1], pal[mid], target );
|
||||
}
|
||||
j = mid;
|
||||
}
|
||||
else
|
||||
{
|
||||
if( mid < ( NUM_COLORS - 1 ) && targetY < PhotoLuma( pal[mid + 1] ) )
|
||||
{
|
||||
return GetClosest( pal[mid], pal[mid + 1], target );
|
||||
}
|
||||
i = mid + 1;
|
||||
}
|
||||
}
|
||||
|
||||
// only single element left after search
|
||||
return pal[mid];
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
#define RGB(r, g, b) float3(float(r)/255.0, float(g)/255.0, float(b)/255.0)
|
||||
|
||||
|
@ -283,7 +216,6 @@ void main( PS_IN fragment, out PS_OUT result )
|
|||
|
||||
// find closest color match from C64 color palette
|
||||
color = LinearSearch( color.rgb, palette );
|
||||
//color = float4( BinarySearch( color.rgb, palette ), 1.0 );
|
||||
|
||||
result.color = float4( color, 1.0 );
|
||||
}
|
||||
|
|
|
@ -240,39 +240,82 @@ void main( PS_IN fragment, out PS_OUT result )
|
|||
const float3 palette[NUM_COLORS] = // 32
|
||||
{
|
||||
RGB( 0, 0, 0 ),
|
||||
RGB( 36, 49, 55 ),
|
||||
RGB( 27, 27, 101 ),
|
||||
RGB( 53, 53, 201 ),
|
||||
RGB( 102, 30, 37 ),
|
||||
RGB( 85, 51, 97 ),
|
||||
RGB( 127, 53, 201 ),
|
||||
RGB( 188, 53, 53 ),
|
||||
RGB( 192, 70, 110 ),
|
||||
RGB( 223, 109, 155 ),
|
||||
RGB( 27, 101, 27 ),
|
||||
RGB( 27, 110, 131 ),
|
||||
RGB( 30, 121, 229 ),
|
||||
RGB( 102, 30, 37 ),
|
||||
RGB( 63, 80, 63 ),
|
||||
RGB( 85, 51, 97 ),
|
||||
RGB( 121, 95, 27 ),
|
||||
RGB( 128, 128, 128 ),
|
||||
RGB( 145, 148, 223 ),
|
||||
RGB( 201, 127, 53 ),
|
||||
RGB( 227, 155, 141 ),
|
||||
RGB( 248, 120, 248 ),
|
||||
RGB( 27, 110, 131 ),
|
||||
RGB( 53, 175, 53 ),
|
||||
RGB( 118, 132, 72 ),
|
||||
RGB( 188, 53, 53 ),
|
||||
RGB( 53, 53, 201 ),
|
||||
RGB( 128, 128, 128 ),
|
||||
RGB( 192, 70, 110 ),
|
||||
RGB( 53, 183, 143 ),
|
||||
RGB( 53, 193, 215 ),
|
||||
RGB( 127, 201, 53 ),
|
||||
RGB( 127, 53, 201 ),
|
||||
RGB( 201, 127, 53 ),
|
||||
RGB( 30, 121, 229 ),
|
||||
RGB( 172, 181, 107 ),
|
||||
RGB( 223, 109, 155 ),
|
||||
RGB( 53, 193, 215 ),
|
||||
RGB( 145, 148, 223 ),
|
||||
RGB( 225, 198, 67 ),
|
||||
RGB( 227, 155, 141 ),
|
||||
RGB( 173, 200, 170 ),
|
||||
RGB( 141, 225, 199 ),
|
||||
RGB( 225, 198, 67 ),
|
||||
RGB( 228, 221, 154 ),
|
||||
RGB( 255, 255, 255 ),
|
||||
RGB( 248, 120, 248 ),
|
||||
RGB( 238, 234, 224 ),
|
||||
RGB( 172, 181, 107 ),
|
||||
RGB( 118, 132, 72 ),
|
||||
RGB( 63, 80, 63 ),
|
||||
RGB( 36, 49, 55 ),
|
||||
RGB( 255, 255, 255 ),
|
||||
};
|
||||
|
||||
const float3 medianAbsoluteDeviation = RGB( 65, 131, 57 );
|
||||
const float3 deviation = RGB( 66, 57, 63 );
|
||||
|
||||
#elif 1
|
||||
|
||||
// https://lospec.com/palette-list/ancientheritage30
|
||||
const float3 palette[NUM_COLORS] = // 30
|
||||
{
|
||||
RGB( 2, 4, 5 ),
|
||||
RGB( 21, 33, 43 ),
|
||||
RGB( 51, 38, 20 ),
|
||||
RGB( 30, 56, 56 ),
|
||||
RGB( 32, 50, 66 ),
|
||||
RGB( 77, 59, 34 ),
|
||||
RGB( 95, 26, 41 ),
|
||||
RGB( 41, 77, 70 ),
|
||||
RGB( 97, 31, 73 ),
|
||||
RGB( 45, 71, 94 ),
|
||||
RGB( 51, 99, 83 ),
|
||||
RGB( 125, 69, 52 ),
|
||||
RGB( 83, 88, 94 ),
|
||||
RGB( 113, 89, 72 ),
|
||||
RGB( 146, 40, 62 ),
|
||||
RGB( 67, 104, 121 ),
|
||||
RGB( 140, 76, 128 ),
|
||||
RGB( 175, 107, 66 ),
|
||||
RGB( 109, 153, 106 ),
|
||||
RGB( 199, 78, 51 ),
|
||||
RGB( 122, 129, 140 ),
|
||||
RGB( 154, 116, 181 ),
|
||||
RGB( 100, 166, 194 ),
|
||||
RGB( 240, 120, 62 ),
|
||||
RGB( 176, 178, 181 ),
|
||||
RGB( 255, 168, 97 ),
|
||||
RGB( 171, 157, 227 ),
|
||||
RGB( 119, 217, 213 ),
|
||||
RGB( 255, 240, 156 ),
|
||||
RGB( 233, 241, 242 ),
|
||||
};
|
||||
|
||||
const float3 medianAbsoluteDeviation = RGB( 87, 12, 60 );
|
||||
const float3 deviation = RGB( 57, 50, 51 );
|
||||
|
||||
#elif 0
|
||||
|
||||
// Atari STE
|
||||
|
@ -354,36 +397,14 @@ void main( PS_IN fragment, out PS_OUT result )
|
|||
RGB( 46, 43, 18 ),
|
||||
};
|
||||
|
||||
#elif 0
|
||||
|
||||
// Hollow
|
||||
// https://lospec.com/palette-list/hollow
|
||||
const float3 palette[NUM_COLORS] = // 4
|
||||
{
|
||||
RGB( 15, 15, 27 ),
|
||||
RGB( 86, 90, 117 ),
|
||||
RGB( 198, 183, 190 ),
|
||||
RGB( 250, 251, 246 ),
|
||||
};
|
||||
|
||||
#else
|
||||
|
||||
// https://lospec.com/palette-list/2bit-demichrome
|
||||
const float3 palette[NUM_COLORS] = // 4
|
||||
{
|
||||
RGB( 33, 30, 32 ),
|
||||
RGB( 85, 85, 104 ),
|
||||
RGB( 160, 160, 139 ),
|
||||
RGB( 233, 239, 236 ),
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
float2 uv = ( fragment.texcoord0 );
|
||||
float2 uvPixelated = floor( fragment.position.xy / RESOLUTION_DIVISOR ) * RESOLUTION_DIVISOR;
|
||||
|
||||
float3 quantizationPeriod = _float3( 1.0 / NUM_COLORS );
|
||||
float3 quantDeviation = Deviation( palette );
|
||||
float3 quantDeviation = deviation; //Deviation( palette );
|
||||
quantDeviation = medianAbsoluteDeviation;
|
||||
|
||||
// get pixellated base color
|
||||
float4 color = t_BaseColor.Sample( s_LinearClamp, uvPixelated * rpWindowCoord.xy );
|
||||
|
|
|
@ -54,31 +54,6 @@ struct PS_OUT
|
|||
#define NUM_COLORS 64 // original 61
|
||||
|
||||
|
||||
float3 Average( float3 pal[NUM_COLORS] )
|
||||
{
|
||||
float3 sum = _float3( 0 );
|
||||
|
||||
for( int i = 0; i < NUM_COLORS; i++ )
|
||||
{
|
||||
sum += pal[i];
|
||||
}
|
||||
|
||||
return sum / float( NUM_COLORS );
|
||||
}
|
||||
|
||||
float3 Deviation( float3 pal[NUM_COLORS] )
|
||||
{
|
||||
float3 sum = _float3( 0 );
|
||||
float3 avg = Average( pal );
|
||||
|
||||
for( int i = 0; i < NUM_COLORS; i++ )
|
||||
{
|
||||
sum += abs( pal[i] - avg );
|
||||
}
|
||||
|
||||
return sum / float( NUM_COLORS );
|
||||
}
|
||||
|
||||
// squared distance to avoid the sqrt of distance function
|
||||
float ColorCompare( float3 a, float3 b )
|
||||
{
|
||||
|
@ -111,621 +86,297 @@ float3 LinearSearch( float3 c, float3 pal[NUM_COLORS] )
|
|||
void main( PS_IN fragment, out PS_OUT result )
|
||||
{
|
||||
#if 0
|
||||
// Ancient Heritage 30
|
||||
// https://lospec.com/palette-list/ancientheritage30
|
||||
const float3 palette[NUM_COLORS] = // 30
|
||||
{
|
||||
RGB( 2, 4, 5 ),
|
||||
RGB( 21, 33, 43 ),
|
||||
RGB( 32, 50, 66 ),
|
||||
RGB( 45, 71, 94 ),
|
||||
RGB( 67, 104, 121 ),
|
||||
RGB( 100, 166, 194 ),
|
||||
RGB( 119, 217, 213 ),
|
||||
RGB( 233, 241, 242 ),
|
||||
RGB( 176, 178, 181 ),
|
||||
RGB( 122, 129, 140 ),
|
||||
RGB( 83, 88, 94 ),
|
||||
RGB( 125, 69, 52 ),
|
||||
RGB( 175, 107, 66 ),
|
||||
RGB( 255, 168, 97 ),
|
||||
RGB( 255, 240, 156 ),
|
||||
RGB( 95, 26, 41 ),
|
||||
RGB( 146, 40, 62 ),
|
||||
RGB( 199, 78, 51 ),
|
||||
RGB( 240, 120, 62 ),
|
||||
RGB( 30, 56, 56 ),
|
||||
RGB( 41, 77, 70 ),
|
||||
RGB( 51, 99, 83 ),
|
||||
RGB( 109, 153, 106 ),
|
||||
RGB( 97, 31, 73 ),
|
||||
RGB( 140, 76, 128 ),
|
||||
RGB( 154, 116, 181 ),
|
||||
RGB( 171, 157, 227 ),
|
||||
RGB( 51, 38, 20 ),
|
||||
RGB( 77, 59, 34 ),
|
||||
RGB( 113, 89, 72 ),
|
||||
};
|
||||
|
||||
#elif 0
|
||||
|
||||
// Meld Plus - a Sega candidate, very colorful
|
||||
// + very colorful
|
||||
// - no blacks
|
||||
// - looks more 8 bit than 16 bit
|
||||
// https://lospec.com/palette-list/meld-plus
|
||||
|
||||
const float3 palette[NUM_COLORS] = // 45
|
||||
{
|
||||
RGB( 81, 6, 44 ),
|
||||
RGB( 149, 18, 58 ),
|
||||
RGB( 189, 101, 55 ),
|
||||
RGB( 230, 167, 88 ),
|
||||
RGB( 251, 227, 163 ),
|
||||
RGB( 255, 255, 255 ),
|
||||
RGB( 242, 230, 179 ),
|
||||
RGB( 210, 154, 173 ),
|
||||
RGB( 131, 97, 144 ),
|
||||
RGB( 64, 60, 105 ),
|
||||
RGB( 0, 0, 55 ),
|
||||
RGB( 64, 47, 93 ),
|
||||
RGB( 95, 92, 128 ),
|
||||
RGB( 149, 154, 187 ),
|
||||
RGB( 209, 234, 251 ),
|
||||
RGB( 255, 205, 243 ),
|
||||
RGB( 249, 132, 237 ),
|
||||
RGB( 194, 42, 218 ),
|
||||
RGB( 79, 10, 138 ),
|
||||
RGB( 30, 13, 78 ),
|
||||
RGB( 19, 33, 120 ),
|
||||
RGB( 29, 84, 177 ),
|
||||
RGB( 53, 135, 210 ),
|
||||
RGB( 97, 212, 255 ),
|
||||
RGB( 231, 255, 125 ),
|
||||
RGB( 133, 223, 83 ),
|
||||
RGB( 33, 165, 63 ),
|
||||
RGB( 0, 89, 86 ),
|
||||
RGB( 0, 60, 69 ),
|
||||
RGB( 4, 182, 146 ),
|
||||
RGB( 13, 233, 142 ),
|
||||
RGB( 152, 255, 192 ),
|
||||
RGB( 255, 231, 160 ),
|
||||
RGB( 255, 153, 51 ),
|
||||
RGB( 205, 80, 24 ),
|
||||
RGB( 135, 14, 87 ),
|
||||
RGB( 81, 6, 44 ),
|
||||
RGB( 82, 48, 55 ),
|
||||
RGB( 76, 2, 91 ),
|
||||
RGB( 64, 47, 93 ),
|
||||
RGB( 0, 89, 86 ),
|
||||
RGB( 19, 33, 120 ),
|
||||
RGB( 64, 60, 105 ),
|
||||
RGB( 79, 10, 138 ),
|
||||
RGB( 149, 18, 58 ),
|
||||
RGB( 135, 14, 87 ),
|
||||
RGB( 33, 165, 63 ),
|
||||
RGB( 95, 92, 128 ),
|
||||
RGB( 29, 84, 177 ),
|
||||
RGB( 131, 97, 144 ),
|
||||
RGB( 189, 101, 55 ),
|
||||
RGB( 205, 80, 24 ),
|
||||
RGB( 4, 182, 146 ),
|
||||
RGB( 156, 130, 119 ),
|
||||
RGB( 209, 57, 103 ),
|
||||
RGB( 53, 135, 210 ),
|
||||
RGB( 133, 223, 83 ),
|
||||
RGB( 13, 233, 142 ),
|
||||
RGB( 255, 94, 67 ),
|
||||
RGB( 149, 154, 187 ),
|
||||
RGB( 194, 42, 218 ),
|
||||
RGB( 230, 167, 88 ),
|
||||
RGB( 255, 130, 87 ),
|
||||
RGB( 255, 153, 51 ),
|
||||
RGB( 197, 180, 161 ),
|
||||
RGB( 210, 154, 173 ),
|
||||
RGB( 97, 212, 255 ),
|
||||
RGB( 152, 255, 192 ),
|
||||
RGB( 231, 255, 125 ),
|
||||
RGB( 249, 132, 237 ),
|
||||
RGB( 251, 227, 163 ),
|
||||
RGB( 242, 230, 179 ),
|
||||
RGB( 255, 231, 160 ),
|
||||
RGB( 255, 211, 200 ),
|
||||
RGB( 247, 236, 206 ),
|
||||
RGB( 197, 180, 161 ),
|
||||
RGB( 156, 130, 119 ),
|
||||
RGB( 82, 48, 55 ),
|
||||
RGB( 209, 234, 251 ),
|
||||
RGB( 255, 205, 243 ),
|
||||
RGB( 255, 255, 255 ),
|
||||
};
|
||||
|
||||
#elif 0
|
||||
|
||||
// https://lospec.com/palette-list/nostalgia48
|
||||
const float3 palette[NUM_COLORS] = // 48
|
||||
{
|
||||
RGB( 5, 9, 15 ),
|
||||
RGB( 36, 55, 87 ),
|
||||
RGB( 60, 82, 117 ),
|
||||
RGB( 90, 113, 148 ),
|
||||
RGB( 127, 146, 179 ),
|
||||
RGB( 167, 183, 209 ),
|
||||
RGB( 206, 215, 232 ),
|
||||
RGB( 235, 238, 249 ),
|
||||
RGB( 13, 40, 41 ),
|
||||
RGB( 21, 66, 55 ),
|
||||
RGB( 35, 92, 68 ),
|
||||
RGB( 49, 117, 69 ),
|
||||
RGB( 66, 143, 66 ),
|
||||
RGB( 110, 168, 74 ),
|
||||
RGB( 163, 194, 85 ),
|
||||
RGB( 207, 219, 114 ),
|
||||
RGB( 117, 22, 35 ),
|
||||
RGB( 148, 42, 32 ),
|
||||
RGB( 179, 68, 40 ),
|
||||
RGB( 209, 102, 48 ),
|
||||
RGB( 230, 141, 62 ),
|
||||
RGB( 240, 174, 74 ),
|
||||
RGB( 240, 201, 85 ),
|
||||
RGB( 245, 232, 93 ),
|
||||
RGB( 92, 30, 28 ),
|
||||
RGB( 120, 54, 42 ),
|
||||
RGB( 145, 82, 55 ),
|
||||
RGB( 173, 112, 68 ),
|
||||
RGB( 199, 140, 88 ),
|
||||
RGB( 224, 173, 114 ),
|
||||
RGB( 235, 196, 138 ),
|
||||
RGB( 245, 217, 166 ),
|
||||
RGB( 254, 241, 199 ),
|
||||
RGB( 63, 26, 77 ),
|
||||
RGB( 109, 41, 117 ),
|
||||
RGB( 148, 57, 137 ),
|
||||
RGB( 179, 80, 141 ),
|
||||
RGB( 204, 107, 138 ),
|
||||
RGB( 230, 148, 143 ),
|
||||
RGB( 245, 186, 169 ),
|
||||
RGB( 34, 27, 82 ),
|
||||
RGB( 38, 44, 112 ),
|
||||
RGB( 48, 72, 140 ),
|
||||
RGB( 58, 114, 171 ),
|
||||
RGB( 83, 172, 204 ),
|
||||
RGB( 118, 213, 224 ),
|
||||
RGB( 167, 232, 231 ),
|
||||
RGB( 216, 240, 238 ),
|
||||
};
|
||||
const float3 medianAbsoluteDeviation = RGB( 29, 87, 155 );
|
||||
const float3 deviation = RGB( 80, 72, 55 );
|
||||
|
||||
#elif 1
|
||||
|
||||
// + very good dithering variety at dark grey values
|
||||
// + does not leak too much color into grey values
|
||||
// + good saturation when colors are really needed
|
||||
// - a bit too strong visible dithering pattern
|
||||
// https://lospec.com/palette-list/famicube
|
||||
const float3 palette[NUM_COLORS] = // 64
|
||||
{
|
||||
RGB( 0, 0, 0 ),
|
||||
RGB( 224, 60, 40 ),
|
||||
RGB( 255, 255, 255 ),
|
||||
RGB( 215, 215, 215 ),
|
||||
RGB( 168, 168, 168 ),
|
||||
RGB( 123, 123, 123 ),
|
||||
RGB( 52, 52, 52 ),
|
||||
RGB( 21, 21, 21 ),
|
||||
RGB( 13, 32, 48 ),
|
||||
RGB( 65, 93, 102 ),
|
||||
RGB( 113, 166, 161 ),
|
||||
RGB( 189, 255, 202 ),
|
||||
RGB( 37, 226, 205 ),
|
||||
RGB( 10, 152, 172 ),
|
||||
RGB( 0, 82, 128 ),
|
||||
RGB( 0, 96, 75 ),
|
||||
RGB( 32, 181, 98 ),
|
||||
RGB( 88, 211, 50 ),
|
||||
RGB( 19, 157, 8 ),
|
||||
RGB( 0, 78, 0 ),
|
||||
RGB( 23, 40, 8 ),
|
||||
RGB( 55, 109, 3 ),
|
||||
RGB( 106, 180, 23 ),
|
||||
RGB( 140, 214, 18 ),
|
||||
RGB( 190, 235, 113 ),
|
||||
RGB( 238, 255, 169 ),
|
||||
RGB( 182, 193, 33 ),
|
||||
RGB( 147, 151, 23 ),
|
||||
RGB( 204, 143, 21 ),
|
||||
RGB( 255, 187, 49 ),
|
||||
RGB( 255, 231, 55 ),
|
||||
RGB( 246, 143, 55 ),
|
||||
RGB( 173, 78, 26 ),
|
||||
RGB( 35, 23, 18 ),
|
||||
RGB( 92, 60, 13 ),
|
||||
RGB( 174, 108, 55 ),
|
||||
RGB( 197, 151, 130 ),
|
||||
RGB( 226, 215, 181 ),
|
||||
RGB( 79, 21, 7 ),
|
||||
RGB( 130, 60, 61 ),
|
||||
RGB( 218, 101, 94 ),
|
||||
RGB( 225, 130, 137 ),
|
||||
RGB( 245, 183, 132 ),
|
||||
RGB( 255, 233, 197 ),
|
||||
RGB( 255, 130, 206 ),
|
||||
RGB( 207, 60, 113 ),
|
||||
RGB( 135, 22, 70 ),
|
||||
RGB( 163, 40, 179 ),
|
||||
RGB( 204, 105, 228 ),
|
||||
RGB( 213, 156, 252 ),
|
||||
RGB( 254, 201, 237 ),
|
||||
RGB( 226, 201, 255 ),
|
||||
RGB( 166, 117, 254 ),
|
||||
RGB( 106, 49, 202 ),
|
||||
RGB( 90, 25, 145 ),
|
||||
RGB( 23, 40, 8 ),
|
||||
RGB( 13, 32, 48 ),
|
||||
RGB( 33, 22, 64 ),
|
||||
RGB( 61, 52, 165 ),
|
||||
RGB( 98, 100, 220 ),
|
||||
RGB( 155, 160, 239 ),
|
||||
RGB( 152, 220, 255 ),
|
||||
RGB( 91, 168, 255 ),
|
||||
RGB( 10, 137, 255 ),
|
||||
RGB( 2, 74, 202 ),
|
||||
RGB( 0, 78, 0 ),
|
||||
RGB( 79, 21, 7 ),
|
||||
RGB( 52, 52, 52 ),
|
||||
RGB( 92, 60, 13 ),
|
||||
RGB( 0, 96, 75 ),
|
||||
RGB( 55, 109, 3 ),
|
||||
RGB( 0, 23, 125 ),
|
||||
};
|
||||
|
||||
#elif 1
|
||||
|
||||
// https://lospec.com/palette-list/blk-nx64
|
||||
|
||||
const float3 palette[NUM_COLORS] = // 64
|
||||
{
|
||||
RGB( 0, 0, 0 ),
|
||||
RGB( 18, 23, 61 ),
|
||||
RGB( 41, 50, 104 ),
|
||||
RGB( 70, 75, 140 ),
|
||||
RGB( 107, 116, 178 ),
|
||||
RGB( 144, 158, 221 ),
|
||||
RGB( 193, 217, 242 ),
|
||||
RGB( 0, 82, 128 ),
|
||||
RGB( 65, 93, 102 ),
|
||||
RGB( 135, 22, 70 ),
|
||||
RGB( 130, 60, 61 ),
|
||||
RGB( 19, 157, 8 ),
|
||||
RGB( 90, 25, 145 ),
|
||||
RGB( 61, 52, 165 ),
|
||||
RGB( 173, 78, 26 ),
|
||||
RGB( 32, 181, 98 ),
|
||||
RGB( 106, 180, 23 ),
|
||||
RGB( 147, 151, 23 ),
|
||||
RGB( 174, 108, 55 ),
|
||||
RGB( 123, 123, 123 ),
|
||||
RGB( 2, 74, 202 ),
|
||||
RGB( 10, 152, 172 ),
|
||||
RGB( 106, 49, 202 ),
|
||||
RGB( 88, 211, 50 ),
|
||||
RGB( 224, 60, 40 ),
|
||||
RGB( 207, 60, 113 ),
|
||||
RGB( 163, 40, 179 ),
|
||||
RGB( 204, 143, 21 ),
|
||||
RGB( 140, 214, 18 ),
|
||||
RGB( 113, 166, 161 ),
|
||||
RGB( 218, 101, 94 ),
|
||||
RGB( 98, 100, 220 ),
|
||||
RGB( 182, 193, 33 ),
|
||||
RGB( 197, 151, 130 ),
|
||||
RGB( 10, 137, 255 ),
|
||||
RGB( 246, 143, 55 ),
|
||||
RGB( 168, 168, 168 ),
|
||||
RGB( 225, 130, 137 ),
|
||||
RGB( 37, 226, 205 ),
|
||||
RGB( 91, 168, 255 ),
|
||||
RGB( 255, 187, 49 ),
|
||||
RGB( 190, 235, 113 ),
|
||||
RGB( 204, 105, 228 ),
|
||||
RGB( 166, 117, 254 ),
|
||||
RGB( 155, 160, 239 ),
|
||||
RGB( 245, 183, 132 ),
|
||||
RGB( 255, 231, 55 ),
|
||||
RGB( 255, 130, 206 ),
|
||||
RGB( 226, 215, 181 ),
|
||||
RGB( 213, 156, 252 ),
|
||||
RGB( 152, 220, 255 ),
|
||||
RGB( 215, 215, 215 ),
|
||||
RGB( 189, 255, 202 ),
|
||||
RGB( 238, 255, 169 ),
|
||||
RGB( 226, 201, 255 ),
|
||||
RGB( 255, 233, 197 ),
|
||||
RGB( 254, 201, 237 ),
|
||||
RGB( 255, 255, 255 ),
|
||||
RGB( 162, 147, 196 ),
|
||||
RGB( 123, 106, 165 ),
|
||||
RGB( 83, 66, 127 ),
|
||||
RGB( 60, 44, 104 ),
|
||||
RGB( 67, 30, 102 ),
|
||||
RGB( 93, 47, 140 ),
|
||||
RGB( 133, 76, 191 ),
|
||||
RGB( 180, 131, 239 ),
|
||||
RGB( 140, 255, 155 ),
|
||||
RGB( 66, 188, 127 ),
|
||||
RGB( 34, 137, 110 ),
|
||||
RGB( 20, 102, 91 ),
|
||||
RGB( 15, 74, 76 ),
|
||||
RGB( 10, 42, 51 ),
|
||||
RGB( 29, 26, 89 ),
|
||||
RGB( 50, 45, 137 ),
|
||||
RGB( 53, 74, 178 ),
|
||||
RGB( 62, 131, 209 ),
|
||||
RGB( 80, 185, 235 ),
|
||||
RGB( 140, 218, 255 ),
|
||||
RGB( 83, 161, 173 ),
|
||||
RGB( 59, 118, 143 ),
|
||||
RGB( 33, 82, 107 ),
|
||||
RGB( 22, 55, 85 ),
|
||||
RGB( 0, 135, 130 ),
|
||||
RGB( 0, 170, 165 ),
|
||||
RGB( 39, 211, 203 ),
|
||||
RGB( 120, 250, 230 ),
|
||||
RGB( 205, 197, 153 ),
|
||||
RGB( 152, 143, 100 ),
|
||||
RGB( 92, 93, 65 ),
|
||||
RGB( 53, 63, 35 ),
|
||||
RGB( 145, 155, 69 ),
|
||||
RGB( 175, 211, 112 ),
|
||||
RGB( 255, 224, 145 ),
|
||||
RGB( 255, 170, 110 ),
|
||||
RGB( 255, 105, 90 ),
|
||||
RGB( 178, 60, 64 ),
|
||||
RGB( 255, 102, 117 ),
|
||||
RGB( 221, 55, 69 ),
|
||||
RGB( 165, 38, 57 ),
|
||||
RGB( 114, 28, 47 ),
|
||||
RGB( 178, 46, 105 ),
|
||||
RGB( 229, 66, 134 ),
|
||||
RGB( 255, 110, 175 ),
|
||||
RGB( 255, 165, 213 ),
|
||||
RGB( 255, 211, 173 ),
|
||||
RGB( 204, 129, 122 ),
|
||||
RGB( 137, 86, 84 ),
|
||||
RGB( 97, 57, 59 ),
|
||||
RGB( 63, 31, 60 ),
|
||||
RGB( 114, 51, 82 ),
|
||||
RGB( 153, 76, 105 ),
|
||||
RGB( 195, 114, 137 ),
|
||||
RGB( 242, 159, 170 ),
|
||||
RGB( 255, 204, 208 ),
|
||||
};
|
||||
|
||||
const float3 medianAbsoluteDeviation = RGB( 63, 175, 2 );
|
||||
const float3 deviation = RGB( 76, 62, 75 );
|
||||
|
||||
#elif 0
|
||||
|
||||
// Resurrect 64 - Most popular 64 colors palette
|
||||
// - leaks too much color into grey scale bar
|
||||
// - dark greys are just dark purple
|
||||
// https://lospec.com/palette-list/resurrect-64
|
||||
|
||||
const float3 palette[NUM_COLORS] = // 64
|
||||
{
|
||||
RGB( 46, 34, 47 ),
|
||||
RGB( 62, 53, 70 ),
|
||||
RGB( 98, 85, 101 ),
|
||||
RGB( 150, 108, 108 ),
|
||||
RGB( 171, 148, 122 ),
|
||||
RGB( 105, 79, 98 ),
|
||||
RGB( 127, 112, 138 ),
|
||||
RGB( 155, 171, 178 ),
|
||||
RGB( 199, 220, 208 ),
|
||||
RGB( 255, 255, 255 ),
|
||||
RGB( 110, 39, 39 ),
|
||||
RGB( 179, 56, 49 ),
|
||||
RGB( 234, 79, 54 ),
|
||||
RGB( 245, 125, 74 ),
|
||||
RGB( 174, 35, 52 ),
|
||||
RGB( 232, 59, 59 ),
|
||||
RGB( 251, 107, 29 ),
|
||||
RGB( 247, 150, 23 ),
|
||||
RGB( 249, 194, 43 ),
|
||||
RGB( 122, 48, 69 ),
|
||||
RGB( 158, 69, 57 ),
|
||||
RGB( 205, 104, 61 ),
|
||||
RGB( 230, 144, 78 ),
|
||||
RGB( 251, 185, 84 ),
|
||||
RGB( 76, 62, 36 ),
|
||||
RGB( 103, 102, 51 ),
|
||||
RGB( 162, 169, 71 ),
|
||||
RGB( 213, 224, 75 ),
|
||||
RGB( 251, 255, 134 ),
|
||||
RGB( 22, 90, 76 ),
|
||||
RGB( 35, 144, 99 ),
|
||||
RGB( 30, 188, 115 ),
|
||||
RGB( 145, 219, 105 ),
|
||||
RGB( 205, 223, 108 ),
|
||||
RGB( 49, 54, 56 ),
|
||||
RGB( 55, 78, 74 ),
|
||||
RGB( 84, 126, 100 ),
|
||||
RGB( 146, 169, 132 ),
|
||||
RGB( 178, 186, 144 ),
|
||||
RGB( 11, 94, 101 ),
|
||||
RGB( 11, 138, 143 ),
|
||||
RGB( 14, 175, 155 ),
|
||||
RGB( 48, 225, 185 ),
|
||||
RGB( 143, 248, 226 ),
|
||||
RGB( 50, 51, 83 ),
|
||||
RGB( 72, 74, 119 ),
|
||||
RGB( 77, 101, 180 ),
|
||||
RGB( 77, 155, 230 ),
|
||||
RGB( 143, 211, 255 ),
|
||||
RGB( 69, 41, 63 ),
|
||||
RGB( 107, 62, 117 ),
|
||||
RGB( 144, 94, 169 ),
|
||||
RGB( 168, 132, 243 ),
|
||||
RGB( 234, 173, 237 ),
|
||||
RGB( 76, 62, 36 ),
|
||||
RGB( 62, 53, 70 ),
|
||||
RGB( 50, 51, 83 ),
|
||||
RGB( 22, 90, 76 ),
|
||||
RGB( 55, 78, 74 ),
|
||||
RGB( 110, 39, 39 ),
|
||||
RGB( 11, 94, 101 ),
|
||||
RGB( 122, 48, 69 ),
|
||||
RGB( 103, 102, 51 ),
|
||||
RGB( 117, 60, 84 ),
|
||||
RGB( 162, 75, 111 ),
|
||||
RGB( 207, 101, 127 ),
|
||||
RGB( 237, 128, 153 ),
|
||||
RGB( 72, 74, 119 ),
|
||||
RGB( 131, 28, 93 ),
|
||||
RGB( 105, 79, 98 ),
|
||||
RGB( 98, 85, 101 ),
|
||||
RGB( 107, 62, 117 ),
|
||||
RGB( 35, 144, 99 ),
|
||||
RGB( 84, 126, 100 ),
|
||||
RGB( 158, 69, 57 ),
|
||||
RGB( 174, 35, 52 ),
|
||||
RGB( 179, 56, 49 ),
|
||||
RGB( 11, 138, 143 ),
|
||||
RGB( 162, 75, 111 ),
|
||||
RGB( 150, 108, 108 ),
|
||||
RGB( 195, 36, 84 ),
|
||||
RGB( 127, 112, 138 ),
|
||||
RGB( 77, 101, 180 ),
|
||||
RGB( 30, 188, 115 ),
|
||||
RGB( 14, 175, 155 ),
|
||||
RGB( 205, 104, 61 ),
|
||||
RGB( 144, 94, 169 ),
|
||||
RGB( 162, 169, 71 ),
|
||||
RGB( 232, 59, 59 ),
|
||||
RGB( 234, 79, 54 ),
|
||||
RGB( 171, 148, 122 ),
|
||||
RGB( 146, 169, 132 ),
|
||||
RGB( 207, 101, 127 ),
|
||||
RGB( 251, 107, 29 ),
|
||||
RGB( 240, 79, 120 ),
|
||||
RGB( 230, 144, 78 ),
|
||||
RGB( 145, 219, 105 ),
|
||||
RGB( 245, 125, 74 ),
|
||||
RGB( 77, 155, 230 ),
|
||||
RGB( 247, 150, 23 ),
|
||||
RGB( 155, 171, 178 ),
|
||||
RGB( 178, 186, 144 ),
|
||||
RGB( 48, 225, 185 ),
|
||||
RGB( 246, 129, 129 ),
|
||||
RGB( 237, 128, 153 ),
|
||||
RGB( 213, 224, 75 ),
|
||||
RGB( 249, 194, 43 ),
|
||||
RGB( 205, 223, 108 ),
|
||||
RGB( 251, 185, 84 ),
|
||||
RGB( 168, 132, 243 ),
|
||||
RGB( 252, 167, 144 ),
|
||||
RGB( 143, 211, 255 ),
|
||||
RGB( 199, 220, 208 ),
|
||||
RGB( 143, 248, 226 ),
|
||||
RGB( 253, 203, 176 ),
|
||||
};
|
||||
|
||||
#elif 1
|
||||
|
||||
// https://lospec.com/palette-list/twilioquest-76
|
||||
|
||||
const float3 palette[NUM_COLORS] = // 76
|
||||
{
|
||||
RGB( 234, 173, 237 ),
|
||||
RGB( 251, 255, 134 ),
|
||||
RGB( 255, 255, 255 ),
|
||||
RGB( 234, 234, 232 ),
|
||||
RGB( 206, 202, 201 ),
|
||||
RGB( 171, 175, 185 ),
|
||||
RGB( 161, 136, 151 ),
|
||||
RGB( 117, 98, 118 ),
|
||||
RGB( 93, 70, 96 ),
|
||||
RGB( 76, 50, 80 ),
|
||||
RGB( 67, 38, 65 ),
|
||||
RGB( 40, 25, 47 ),
|
||||
RGB( 251, 117, 117 ),
|
||||
RGB( 251, 59, 100 ),
|
||||
RGB( 200, 49, 87 ),
|
||||
RGB( 142, 55, 92 ),
|
||||
RGB( 79, 35, 81 ),
|
||||
RGB( 53, 21, 68 ),
|
||||
RGB( 247, 74, 83 ),
|
||||
RGB( 242, 47, 70 ),
|
||||
RGB( 188, 22, 66 ),
|
||||
RGB( 252, 197, 57 ),
|
||||
RGB( 248, 123, 27 ),
|
||||
RGB( 248, 64, 27 ),
|
||||
RGB( 189, 39, 9 ),
|
||||
RGB( 124, 18, 43 ),
|
||||
RGB( 255, 224, 139 ),
|
||||
RGB( 250, 192, 90 ),
|
||||
RGB( 235, 143, 72 ),
|
||||
RGB( 209, 116, 65 ),
|
||||
RGB( 199, 82, 57 ),
|
||||
RGB( 177, 41, 53 ),
|
||||
RGB( 253, 189, 143 ),
|
||||
RGB( 240, 136, 107 ),
|
||||
RGB( 211, 104, 83 ),
|
||||
RGB( 174, 69, 74 ),
|
||||
RGB( 140, 49, 50 ),
|
||||
RGB( 84, 35, 35 ),
|
||||
RGB( 168, 88, 72 ),
|
||||
RGB( 131, 64, 76 ),
|
||||
RGB( 103, 49, 75 ),
|
||||
RGB( 63, 35, 35 ),
|
||||
RGB( 212, 149, 119 ),
|
||||
RGB( 159, 112, 90 ),
|
||||
RGB( 132, 87, 80 ),
|
||||
RGB( 99, 59, 63 ),
|
||||
RGB( 123, 215, 169 ),
|
||||
RGB( 82, 178, 129 ),
|
||||
RGB( 20, 133, 104 ),
|
||||
RGB( 20, 103, 86 ),
|
||||
RGB( 34, 71, 76 ),
|
||||
RGB( 16, 47, 52 ),
|
||||
RGB( 235, 255, 139 ),
|
||||
RGB( 179, 227, 99 ),
|
||||
RGB( 76, 189, 86 ),
|
||||
RGB( 47, 135, 53 ),
|
||||
RGB( 11, 89, 49 ),
|
||||
RGB( 151, 191, 110 ),
|
||||
RGB( 137, 159, 102 ),
|
||||
RGB( 97, 133, 90 ),
|
||||
RGB( 76, 96, 81 ),
|
||||
RGB( 115, 223, 242 ),
|
||||
RGB( 42, 187, 208 ),
|
||||
RGB( 49, 93, 205 ),
|
||||
RGB( 71, 42, 156 ),
|
||||
RGB( 160, 216, 215 ),
|
||||
RGB( 125, 190, 250 ),
|
||||
RGB( 102, 143, 175 ),
|
||||
RGB( 88, 93, 129 ),
|
||||
RGB( 69, 54, 93 ),
|
||||
RGB( 246, 186, 254 ),
|
||||
RGB( 213, 159, 244 ),
|
||||
RGB( 176, 112, 235 ),
|
||||
RGB( 124, 60, 225 ),
|
||||
RGB( 219, 207, 177 ),
|
||||
RGB( 169, 164, 141 ),
|
||||
RGB( 123, 131, 130 ),
|
||||
RGB( 95, 95, 110 ),
|
||||
};
|
||||
|
||||
const float3 medianAbsoluteDeviation = RGB( 94, 43, 86 );
|
||||
const float3 deviation = RGB( 64, 54, 46 );
|
||||
|
||||
#elif 0
|
||||
|
||||
// Endesga 64 - very colorful and more complete
|
||||
// Endesga 64
|
||||
// + great dithering in the grey scale bar
|
||||
// - makes the game look too grey
|
||||
// https://lospec.com/palette-list/endesga-64
|
||||
|
||||
const float3 palette[NUM_COLORS] = // 64
|
||||
{
|
||||
RGB( 255, 0, 64 ),
|
||||
RGB( 19, 19, 19 ),
|
||||
RGB( 27, 27, 27 ),
|
||||
RGB( 39, 39, 39 ),
|
||||
RGB( 61, 61, 61 ),
|
||||
RGB( 93, 93, 93 ),
|
||||
RGB( 133, 133, 133 ),
|
||||
RGB( 180, 180, 180 ),
|
||||
RGB( 255, 255, 255 ),
|
||||
RGB( 199, 207, 221 ),
|
||||
RGB( 146, 161, 185 ),
|
||||
RGB( 101, 115, 146 ),
|
||||
RGB( 66, 76, 110 ),
|
||||
RGB( 42, 47, 78 ),
|
||||
RGB( 26, 25, 50 ),
|
||||
RGB( 14, 7, 27 ),
|
||||
RGB( 19, 19, 19 ),
|
||||
RGB( 28, 18, 28 ),
|
||||
RGB( 57, 31, 33 ),
|
||||
RGB( 93, 44, 40 ),
|
||||
RGB( 138, 72, 54 ),
|
||||
RGB( 191, 111, 74 ),
|
||||
RGB( 230, 156, 105 ),
|
||||
RGB( 246, 202, 159 ),
|
||||
RGB( 249, 230, 207 ),
|
||||
RGB( 237, 171, 80 ),
|
||||
RGB( 224, 116, 56 ),
|
||||
RGB( 198, 69, 36 ),
|
||||
RGB( 142, 37, 29 ),
|
||||
RGB( 255, 80, 0 ),
|
||||
RGB( 237, 118, 20 ),
|
||||
RGB( 255, 162, 20 ),
|
||||
RGB( 255, 200, 37 ),
|
||||
RGB( 255, 235, 87 ),
|
||||
RGB( 211, 252, 126 ),
|
||||
RGB( 153, 230, 95 ),
|
||||
RGB( 90, 197, 79 ),
|
||||
RGB( 51, 152, 75 ),
|
||||
RGB( 30, 111, 80 ),
|
||||
RGB( 19, 76, 76 ),
|
||||
RGB( 12, 46, 68 ),
|
||||
RGB( 0, 57, 109 ),
|
||||
RGB( 0, 105, 170 ),
|
||||
RGB( 0, 152, 220 ),
|
||||
RGB( 0, 205, 249 ),
|
||||
RGB( 12, 241, 255 ),
|
||||
RGB( 148, 253, 255 ),
|
||||
RGB( 253, 210, 237 ),
|
||||
RGB( 243, 137, 245 ),
|
||||
RGB( 219, 63, 253 ),
|
||||
RGB( 122, 9, 250 ),
|
||||
RGB( 48, 3, 217 ),
|
||||
RGB( 12, 2, 147 ),
|
||||
RGB( 27, 27, 27 ),
|
||||
RGB( 26, 25, 50 ),
|
||||
RGB( 39, 39, 39 ),
|
||||
RGB( 3, 25, 63 ),
|
||||
RGB( 57, 31, 33 ),
|
||||
RGB( 12, 46, 68 ),
|
||||
RGB( 59, 20, 67 ),
|
||||
RGB( 98, 36, 97 ),
|
||||
RGB( 147, 56, 143 ),
|
||||
RGB( 202, 82, 201 ),
|
||||
RGB( 200, 80, 134 ),
|
||||
RGB( 246, 129, 135 ),
|
||||
RGB( 245, 85, 93 ),
|
||||
RGB( 234, 50, 60 ),
|
||||
RGB( 196, 36, 48 ),
|
||||
RGB( 137, 30, 43 ),
|
||||
RGB( 87, 28, 39 ),
|
||||
};
|
||||
|
||||
#elif 0
|
||||
|
||||
// like the Sega Master System
|
||||
// https://lospec.com/palette-list/6-bit-rgb
|
||||
|
||||
const float3 palette[NUM_COLORS] = // 64
|
||||
{
|
||||
RGB( 0, 0, 0 ),
|
||||
RGB( 0, 0, 85 ),
|
||||
RGB( 0, 0, 170 ),
|
||||
RGB( 0, 0, 255 ),
|
||||
RGB( 85, 0, 0 ),
|
||||
RGB( 85, 0, 85 ),
|
||||
RGB( 85, 0, 170 ),
|
||||
RGB( 85, 0, 255 ),
|
||||
RGB( 170, 0, 0 ),
|
||||
RGB( 170, 0, 85 ),
|
||||
RGB( 170, 0, 170 ),
|
||||
RGB( 170, 0, 255 ),
|
||||
RGB( 255, 0, 0 ),
|
||||
RGB( 255, 0, 85 ),
|
||||
RGB( 255, 0, 170 ),
|
||||
RGB( 255, 0, 255 ),
|
||||
RGB( 0, 85, 0 ),
|
||||
RGB( 0, 85, 85 ),
|
||||
RGB( 0, 85, 170 ),
|
||||
RGB( 0, 85, 255 ),
|
||||
RGB( 85, 85, 0 ),
|
||||
RGB( 85, 85, 85 ),
|
||||
RGB( 85, 85, 170 ),
|
||||
RGB( 85, 85, 255 ),
|
||||
RGB( 170, 85, 0 ),
|
||||
RGB( 170, 85, 85 ),
|
||||
RGB( 170, 85, 170 ),
|
||||
RGB( 170, 85, 255 ),
|
||||
RGB( 255, 85, 0 ),
|
||||
RGB( 255, 85, 85 ),
|
||||
RGB( 255, 85, 170 ),
|
||||
RGB( 255, 85, 255 ),
|
||||
RGB( 0, 170, 0 ),
|
||||
RGB( 0, 170, 85 ),
|
||||
RGB( 0, 170, 170 ),
|
||||
RGB( 0, 170, 255 ),
|
||||
RGB( 85, 170, 0 ),
|
||||
RGB( 85, 170, 85 ),
|
||||
RGB( 85, 170, 170 ),
|
||||
RGB( 85, 170, 255 ),
|
||||
RGB( 170, 170, 0 ),
|
||||
RGB( 170, 170, 85 ),
|
||||
RGB( 170, 170, 170 ),
|
||||
RGB( 170, 170, 255 ),
|
||||
RGB( 255, 170, 0 ),
|
||||
RGB( 255, 170, 85 ),
|
||||
RGB( 255, 170, 170 ),
|
||||
RGB( 255, 170, 255 ),
|
||||
RGB( 0, 255, 0 ),
|
||||
RGB( 0, 255, 85 ),
|
||||
RGB( 0, 255, 170 ),
|
||||
RGB( 0, 255, 255 ),
|
||||
RGB( 85, 255, 0 ),
|
||||
RGB( 85, 255, 85 ),
|
||||
RGB( 85, 255, 170 ),
|
||||
RGB( 85, 255, 255 ),
|
||||
RGB( 170, 255, 0 ),
|
||||
RGB( 170, 255, 85 ),
|
||||
RGB( 170, 255, 170 ),
|
||||
RGB( 170, 255, 255 ),
|
||||
RGB( 255, 255, 0 ),
|
||||
RGB( 255, 255, 85 ),
|
||||
RGB( 255, 255, 170 ),
|
||||
RGB( 42, 47, 78 ),
|
||||
RGB( 61, 61, 61 ),
|
||||
RGB( 19, 76, 76 ),
|
||||
RGB( 93, 44, 40 ),
|
||||
RGB( 0, 57, 109 ),
|
||||
RGB( 30, 111, 80 ),
|
||||
RGB( 98, 36, 97 ),
|
||||
RGB( 137, 30, 43 ),
|
||||
RGB( 12, 2, 147 ),
|
||||
RGB( 66, 76, 110 ),
|
||||
RGB( 142, 37, 29 ),
|
||||
RGB( 93, 93, 93 ),
|
||||
RGB( 138, 72, 54 ),
|
||||
RGB( 51, 152, 75 ),
|
||||
RGB( 0, 105, 170 ),
|
||||
RGB( 196, 36, 48 ),
|
||||
RGB( 101, 115, 146 ),
|
||||
RGB( 147, 56, 143 ),
|
||||
RGB( 198, 69, 36 ),
|
||||
RGB( 48, 3, 217 ),
|
||||
RGB( 133, 133, 133 ),
|
||||
RGB( 90, 197, 79 ),
|
||||
RGB( 191, 111, 74 ),
|
||||
RGB( 234, 50, 60 ),
|
||||
RGB( 200, 80, 134 ),
|
||||
RGB( 224, 116, 56 ),
|
||||
RGB( 255, 0, 64 ),
|
||||
RGB( 237, 118, 20 ),
|
||||
RGB( 255, 80, 0 ),
|
||||
RGB( 0, 152, 220 ),
|
||||
RGB( 245, 85, 93 ),
|
||||
RGB( 122, 9, 250 ),
|
||||
RGB( 146, 161, 185 ),
|
||||
RGB( 153, 230, 95 ),
|
||||
RGB( 202, 82, 201 ),
|
||||
RGB( 230, 156, 105 ),
|
||||
RGB( 255, 162, 20 ),
|
||||
RGB( 237, 171, 80 ),
|
||||
RGB( 246, 129, 135 ),
|
||||
RGB( 180, 180, 180 ),
|
||||
RGB( 0, 205, 249 ),
|
||||
RGB( 255, 200, 37 ),
|
||||
RGB( 219, 63, 253 ),
|
||||
RGB( 12, 241, 255 ),
|
||||
RGB( 211, 252, 126 ),
|
||||
RGB( 246, 202, 159 ),
|
||||
RGB( 255, 235, 87 ),
|
||||
RGB( 199, 207, 221 ),
|
||||
RGB( 243, 137, 245 ),
|
||||
RGB( 148, 253, 255 ),
|
||||
RGB( 249, 230, 207 ),
|
||||
RGB( 253, 210, 237 ),
|
||||
RGB( 255, 255, 255 ),
|
||||
};
|
||||
|
||||
#elif 0
|
||||
|
||||
// Sega Genesis Evangelion
|
||||
// https://lospec.com/palette-list/sega-genesis-evangelion
|
||||
|
||||
const float3 palette[NUM_COLORS] = // 17
|
||||
{
|
||||
RGB( 207, 201, 179 ),
|
||||
RGB( 163, 180, 158 ),
|
||||
RGB( 100, 166, 174 ),
|
||||
RGB( 101, 112, 141 ),
|
||||
RGB( 52, 54, 36 ),
|
||||
RGB( 37, 34, 70 ),
|
||||
RGB( 39, 28, 21 ),
|
||||
RGB( 20, 14, 11 ),
|
||||
RGB( 0, 0, 0 ),
|
||||
RGB( 202, 168, 87 ),
|
||||
RGB( 190, 136, 51 ),
|
||||
RGB( 171, 85, 92 ),
|
||||
RGB( 186, 47, 74 ),
|
||||
RGB( 131, 25, 97 ),
|
||||
RGB( 102, 52, 143 ),
|
||||
RGB( 203, 216, 246 ),
|
||||
RGB( 140, 197, 79 ),
|
||||
};
|
||||
const float3 medianAbsoluteDeviation = RGB( 33, 166, 46 );
|
||||
const float3 deviation = RGB( 82, 65, 64 );
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -733,7 +384,8 @@ void main( PS_IN fragment, out PS_OUT result )
|
|||
float2 uvPixelated = floor( fragment.position.xy / RESOLUTION_DIVISOR ) * RESOLUTION_DIVISOR;
|
||||
|
||||
float3 quantizationPeriod = _float3( 1.0 / NUM_COLORS );
|
||||
float3 quantDeviation = Deviation( palette );
|
||||
float3 quantDeviation = deviation;
|
||||
//quantDeviation = medianAbsoluteDeviation;
|
||||
|
||||
// get pixellated base color
|
||||
float3 color = t_BaseColor.Sample( s_LinearClamp, uvPixelated * rpWindowCoord.xy ).rgb;
|
||||
|
|
|
@ -79,6 +79,19 @@ float3 Deviation( float3 pal[NUM_COLORS] )
|
|||
return sum / float( NUM_COLORS );
|
||||
}
|
||||
|
||||
float3 StandardDeviation( float3 pal[NUM_COLORS] )
|
||||
{
|
||||
float3 sum = _float3( 0 );
|
||||
float3 avg = Average( pal );
|
||||
|
||||
for( int i = 0; i < NUM_COLORS; i++ )
|
||||
{
|
||||
sum += pow( pal[i] - avg, 2.0 );
|
||||
}
|
||||
|
||||
return sqrt( sum );
|
||||
}
|
||||
|
||||
// squared distance to avoid the sqrt of distance function
|
||||
float ColorCompare( float3 a, float3 b )
|
||||
{
|
||||
|
@ -119,62 +132,65 @@ void main( PS_IN fragment, out PS_OUT result )
|
|||
const float3 palette[NUM_COLORS] = // 55
|
||||
{
|
||||
RGB( 0, 0, 0 ),
|
||||
RGB( 252, 252, 252 ),
|
||||
RGB( 248, 248, 248 ),
|
||||
RGB( 188, 188, 188 ),
|
||||
RGB( 124, 124, 124 ),
|
||||
RGB( 164, 228, 252 ),
|
||||
RGB( 60, 188, 252 ),
|
||||
RGB( 0, 120, 248 ),
|
||||
RGB( 0, 0, 252 ),
|
||||
RGB( 184, 184, 248 ),
|
||||
RGB( 104, 136, 252 ),
|
||||
RGB( 0, 88, 248 ),
|
||||
RGB( 0, 0, 188 ),
|
||||
RGB( 216, 184, 248 ),
|
||||
RGB( 152, 120, 248 ),
|
||||
RGB( 104, 68, 252 ),
|
||||
RGB( 68, 40, 188 ),
|
||||
RGB( 248, 184, 248 ),
|
||||
RGB( 248, 120, 248 ),
|
||||
RGB( 216, 0, 204 ),
|
||||
RGB( 148, 0, 132 ),
|
||||
RGB( 248, 164, 192 ),
|
||||
RGB( 248, 88, 152 ),
|
||||
RGB( 228, 0, 88 ),
|
||||
RGB( 168, 0, 32 ),
|
||||
RGB( 240, 208, 176 ),
|
||||
RGB( 248, 120, 88 ),
|
||||
RGB( 248, 56, 0 ),
|
||||
RGB( 168, 16, 0 ),
|
||||
RGB( 252, 224, 168 ),
|
||||
RGB( 252, 160, 68 ),
|
||||
RGB( 228, 92, 16 ),
|
||||
RGB( 136, 20, 0 ),
|
||||
RGB( 248, 216, 120 ),
|
||||
RGB( 248, 184, 0 ),
|
||||
RGB( 172, 124, 0 ),
|
||||
RGB( 80, 48, 0 ),
|
||||
RGB( 216, 248, 120 ),
|
||||
RGB( 184, 248, 24 ),
|
||||
RGB( 0, 184, 0 ),
|
||||
RGB( 0, 120, 0 ),
|
||||
RGB( 184, 248, 184 ),
|
||||
RGB( 88, 216, 84 ),
|
||||
RGB( 0, 168, 0 ),
|
||||
RGB( 0, 104, 0 ),
|
||||
RGB( 184, 248, 216 ),
|
||||
RGB( 88, 248, 152 ),
|
||||
RGB( 0, 168, 68 ),
|
||||
RGB( 0, 88, 0 ),
|
||||
RGB( 0, 252, 252 ),
|
||||
RGB( 0, 232, 216 ),
|
||||
RGB( 0, 136, 136 ),
|
||||
RGB( 80, 48, 0 ),
|
||||
RGB( 0, 104, 0 ),
|
||||
RGB( 0, 64, 88 ),
|
||||
RGB( 248, 216, 248 ),
|
||||
RGB( 0, 120, 0 ),
|
||||
RGB( 136, 20, 0 ),
|
||||
RGB( 0, 168, 0 ),
|
||||
RGB( 168, 16, 0 ),
|
||||
RGB( 168, 0, 32 ),
|
||||
RGB( 0, 168, 68 ),
|
||||
RGB( 0, 184, 0 ),
|
||||
RGB( 0, 0, 188 ),
|
||||
RGB( 0, 136, 136 ),
|
||||
RGB( 148, 0, 132 ),
|
||||
RGB( 68, 40, 188 ),
|
||||
RGB( 120, 120, 120 ),
|
||||
RGB( 172, 124, 0 ),
|
||||
RGB( 124, 124, 124 ),
|
||||
RGB( 228, 0, 88 ),
|
||||
RGB( 228, 92, 16 ),
|
||||
RGB( 88, 216, 84 ),
|
||||
RGB( 0, 0, 252 ),
|
||||
RGB( 248, 56, 0 ),
|
||||
RGB( 0, 88, 248 ),
|
||||
RGB( 0, 120, 248 ),
|
||||
RGB( 104, 68, 252 ),
|
||||
RGB( 248, 120, 88 ),
|
||||
RGB( 216, 0, 204 ),
|
||||
RGB( 88, 248, 152 ),
|
||||
RGB( 248, 88, 152 ),
|
||||
RGB( 104, 136, 252 ),
|
||||
RGB( 252, 160, 68 ),
|
||||
RGB( 248, 184, 0 ),
|
||||
RGB( 184, 248, 24 ),
|
||||
RGB( 152, 120, 248 ),
|
||||
RGB( 0, 232, 216 ),
|
||||
RGB( 60, 188, 252 ),
|
||||
RGB( 188, 188, 188 ),
|
||||
RGB( 216, 248, 120 ),
|
||||
RGB( 248, 216, 120 ),
|
||||
RGB( 248, 164, 192 ),
|
||||
RGB( 0, 252, 252 ),
|
||||
RGB( 184, 248, 184 ),
|
||||
RGB( 184, 184, 248 ),
|
||||
RGB( 240, 208, 176 ),
|
||||
RGB( 248, 120, 248 ),
|
||||
RGB( 252, 224, 168 ),
|
||||
RGB( 216, 184, 248 ),
|
||||
RGB( 184, 248, 216 ),
|
||||
RGB( 164, 228, 252 ),
|
||||
RGB( 248, 184, 248 ),
|
||||
RGB( 248, 216, 248 ),
|
||||
RGB( 248, 248, 248 ),
|
||||
RGB( 252, 252, 252 ),
|
||||
};
|
||||
|
||||
const float3 medianAbsoluteDeviation = RGB( 96, 0, 160 );
|
||||
const float3 deviation = RGB( 87, 70, 86 );
|
||||
|
||||
#else
|
||||
|
||||
// NES Advanced
|
||||
|
@ -183,69 +199,73 @@ void main( PS_IN fragment, out PS_OUT result )
|
|||
const float3 palette[NUM_COLORS] = // 55
|
||||
{
|
||||
RGB( 0, 0, 0 ),
|
||||
RGB( 38, 35, 47 ),
|
||||
RGB( 49, 64, 71 ),
|
||||
RGB( 89, 109, 98 ),
|
||||
RGB( 146, 156, 116 ),
|
||||
RGB( 200, 197, 163 ),
|
||||
RGB( 252, 252, 252 ),
|
||||
RGB( 27, 55, 127 ),
|
||||
RGB( 20, 122, 191 ),
|
||||
RGB( 64, 175, 221 ),
|
||||
RGB( 178, 219, 244 ),
|
||||
RGB( 24, 22, 103 ),
|
||||
RGB( 59, 44, 150 ),
|
||||
RGB( 112, 106, 225 ),
|
||||
RGB( 143, 149, 238 ),
|
||||
RGB( 68, 10, 65 ),
|
||||
RGB( 129, 37, 147 ),
|
||||
RGB( 204, 75, 185 ),
|
||||
RGB( 236, 153, 219 ),
|
||||
RGB( 63, 0, 17 ),
|
||||
RGB( 179, 28, 53 ),
|
||||
RGB( 239, 32, 100 ),
|
||||
RGB( 242, 98, 130 ),
|
||||
RGB( 150, 8, 17 ),
|
||||
RGB( 232, 24, 19 ),
|
||||
RGB( 167, 93, 105 ),
|
||||
RGB( 236, 158, 164 ),
|
||||
RGB( 86, 13, 4 ),
|
||||
RGB( 196, 54, 17 ),
|
||||
RGB( 226, 106, 18 ),
|
||||
RGB( 240, 175, 102 ),
|
||||
RGB( 42, 26, 20 ),
|
||||
RGB( 93, 52, 42 ),
|
||||
RGB( 166, 110, 70 ),
|
||||
RGB( 223, 156, 110 ),
|
||||
RGB( 142, 78, 17 ),
|
||||
RGB( 216, 149, 17 ),
|
||||
RGB( 234, 209, 30 ),
|
||||
RGB( 245, 235, 107 ),
|
||||
RGB( 47, 84, 28 ),
|
||||
RGB( 90, 131, 27 ),
|
||||
RGB( 162, 187, 30 ),
|
||||
RGB( 198, 223, 107 ),
|
||||
RGB( 15, 69, 15 ),
|
||||
RGB( 0, 139, 18 ),
|
||||
RGB( 11, 203, 18 ),
|
||||
RGB( 62, 243, 63 ),
|
||||
RGB( 17, 81, 83 ),
|
||||
RGB( 12, 133, 99 ),
|
||||
RGB( 4, 191, 121 ),
|
||||
RGB( 106, 230, 170 ),
|
||||
RGB( 63, 0, 17 ),
|
||||
RGB( 38, 39, 38 ),
|
||||
RGB( 38, 35, 47 ),
|
||||
RGB( 15, 69, 15 ),
|
||||
RGB( 86, 13, 4 ),
|
||||
RGB( 68, 10, 65 ),
|
||||
RGB( 47, 84, 28 ),
|
||||
RGB( 49, 64, 71 ),
|
||||
RGB( 24, 22, 103 ),
|
||||
RGB( 93, 52, 42 ),
|
||||
RGB( 17, 81, 83 ),
|
||||
RGB( 81, 79, 76 ),
|
||||
RGB( 0, 139, 18 ),
|
||||
RGB( 27, 55, 127 ),
|
||||
RGB( 150, 8, 17 ),
|
||||
RGB( 90, 131, 27 ),
|
||||
RGB( 142, 78, 17 ),
|
||||
RGB( 12, 133, 99 ),
|
||||
RGB( 59, 44, 150 ),
|
||||
RGB( 89, 109, 98 ),
|
||||
RGB( 179, 28, 53 ),
|
||||
RGB( 129, 37, 147 ),
|
||||
RGB( 196, 54, 17 ),
|
||||
RGB( 11, 203, 18 ),
|
||||
RGB( 166, 110, 70 ),
|
||||
RGB( 167, 93, 105 ),
|
||||
RGB( 4, 191, 121 ),
|
||||
RGB( 136, 126, 131 ),
|
||||
RGB( 20, 122, 191 ),
|
||||
RGB( 232, 24, 19 ),
|
||||
RGB( 146, 156, 116 ),
|
||||
RGB( 162, 187, 30 ),
|
||||
RGB( 226, 106, 18 ),
|
||||
RGB( 62, 243, 63 ),
|
||||
RGB( 239, 32, 100 ),
|
||||
RGB( 216, 149, 17 ),
|
||||
RGB( 112, 106, 225 ),
|
||||
RGB( 204, 75, 185 ),
|
||||
RGB( 64, 175, 221 ),
|
||||
RGB( 242, 98, 130 ),
|
||||
RGB( 223, 156, 110 ),
|
||||
RGB( 106, 230, 170 ),
|
||||
RGB( 179, 170, 192 ),
|
||||
RGB( 240, 175, 102 ),
|
||||
RGB( 143, 149, 238 ),
|
||||
RGB( 234, 209, 30 ),
|
||||
RGB( 198, 223, 107 ),
|
||||
RGB( 200, 197, 163 ),
|
||||
RGB( 236, 158, 164 ),
|
||||
RGB( 245, 235, 107 ),
|
||||
RGB( 236, 153, 219 ),
|
||||
RGB( 178, 219, 244 ),
|
||||
RGB( 252, 252, 252 ),
|
||||
};
|
||||
|
||||
const float3 medianAbsoluteDeviation = RGB( 55, 13, 120 );
|
||||
const float3 deviation = RGB( 73, 61, 60 );
|
||||
|
||||
#endif
|
||||
|
||||
float2 uv = ( fragment.texcoord0 );
|
||||
float2 uvPixelated = floor( fragment.position.xy / RESOLUTION_DIVISOR ) * RESOLUTION_DIVISOR;
|
||||
|
||||
float3 quantizationPeriod = _float3( 1.0 / NUM_COLORS );
|
||||
float3 quantDeviation = Deviation( palette );
|
||||
float3 quantDeviation = deviation;// = Deviation( palette );
|
||||
//quantDeviation = medianAbsoluteDeviation;
|
||||
|
||||
// get pixellated base color
|
||||
float3 color = t_BaseColor.Sample( s_LinearClamp, uvPixelated * rpWindowCoord.xy ).rgb;
|
||||
|
|
Loading…
Reference in a new issue