mirror of
https://github.com/id-Software/DOOM-3-BFG.git
synced 2025-03-13 22:22:05 +00:00
Replaced Sega retro shader quant with a fixed 64 color palette
This commit is contained in:
parent
19946a4f4e
commit
dc71c0e8c5
1 changed files with 680 additions and 34 deletions
|
@ -3,7 +3,7 @@
|
|||
|
||||
Doom 3 BFG Edition GPL Source Code
|
||||
Copyright (C) 1993-2012 id Software LLC, a ZeniMax Media company.
|
||||
Copyright (C) 2023 Robert Beckebans
|
||||
Copyright (C) 2024 Robert Beckebans
|
||||
|
||||
This file is part of the Doom 3 BFG Edition GPL Source Code ("Doom 3 BFG Edition Source Code").
|
||||
|
||||
|
@ -34,8 +34,8 @@ If you have questions concerning this license or the applicable additional terms
|
|||
Texture2D t_BaseColor : register( t0 VK_DESCRIPTOR_SET( 0 ) );
|
||||
Texture2D t_BlueNoise : register( t1 VK_DESCRIPTOR_SET( 0 ) );
|
||||
|
||||
SamplerState samp0 : register(s0 VK_DESCRIPTOR_SET( 1 ) );
|
||||
SamplerState samp1 : register(s1 VK_DESCRIPTOR_SET( 1 ) ); // blue noise 256
|
||||
SamplerState s_LinearClamp : register(s0 VK_DESCRIPTOR_SET( 1 ) );
|
||||
SamplerState s_LinearWrap : register(s1 VK_DESCRIPTOR_SET( 1 ) ); // blue noise 256
|
||||
|
||||
struct PS_IN
|
||||
{
|
||||
|
@ -50,52 +50,693 @@ struct PS_OUT
|
|||
// *INDENT-ON*
|
||||
|
||||
|
||||
#define RESOLUTION_DIVISOR 4.0
|
||||
#define Dithering_QuantizationSteps 8.0 // 8.0 = 2 ^ 3 quantization bits
|
||||
#define RESOLUTION_DIVISOR 4.0
|
||||
#define NUM_COLORS 64 // original 61
|
||||
|
||||
float3 Quantize( float3 color, float3 period )
|
||||
|
||||
float3 Average( float3 pal[NUM_COLORS] )
|
||||
{
|
||||
return floor( color * Dithering_QuantizationSteps ) * ( 1.0 / ( Dithering_QuantizationSteps - 1.0 ) );
|
||||
float3 sum = _float3( 0 );
|
||||
|
||||
//return floor( ( color + period / 2.0 ) / period ) * period;
|
||||
for( int i = 0; i < NUM_COLORS; i++ )
|
||||
{
|
||||
sum += pal[i];
|
||||
}
|
||||
|
||||
return sum / float( NUM_COLORS );
|
||||
}
|
||||
|
||||
|
||||
float3 BlueNoise3( float2 n, float x )
|
||||
float3 Deviation( float3 pal[NUM_COLORS] )
|
||||
{
|
||||
float2 uv = n.xy * rpJitterTexOffset.xy;
|
||||
float3 sum = _float3( 0 );
|
||||
float3 avg = Average( pal );
|
||||
|
||||
float3 noise = t_BlueNoise.Sample( samp1, uv ).rgb;
|
||||
for( int i = 0; i < NUM_COLORS; i++ )
|
||||
{
|
||||
sum += abs( pal[i] - avg );
|
||||
}
|
||||
|
||||
noise = frac( noise + c_goldenRatioConjugate * rpJitterTexOffset.w * x );
|
||||
return sum / float( NUM_COLORS );
|
||||
}
|
||||
|
||||
noise.x = RemapNoiseTriErp( noise.x );
|
||||
noise.y = RemapNoiseTriErp( noise.y );
|
||||
noise.z = RemapNoiseTriErp( noise.z );
|
||||
// squared distance to avoid the sqrt of distance function
|
||||
float ColorCompare( float3 a, float3 b )
|
||||
{
|
||||
float3 diff = b - a;
|
||||
return dot( diff, diff );
|
||||
}
|
||||
|
||||
noise = noise * 2.0 - 1.0;
|
||||
// find nearest palette color using Euclidean distance
|
||||
float3 LinearSearch( float3 c, float3 pal[NUM_COLORS] )
|
||||
{
|
||||
int index = 0;
|
||||
float minDist = ColorCompare( c, pal[0] );
|
||||
|
||||
return noise;
|
||||
for( int i = 1; i < NUM_COLORS; i++ )
|
||||
{
|
||||
float dist = ColorCompare( c, pal[i] );
|
||||
|
||||
if( dist < minDist )
|
||||
{
|
||||
minDist = dist;
|
||||
index = i;
|
||||
}
|
||||
}
|
||||
|
||||
return pal[index];
|
||||
}
|
||||
|
||||
#define RGB(r, g, b) float3(float(r)/255.0, float(g)/255.0, float(b)/255.0)
|
||||
|
||||
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
|
||||
// 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( 76, 2, 91 ),
|
||||
RGB( 209, 57, 103 ),
|
||||
RGB( 255, 94, 67 ),
|
||||
RGB( 255, 130, 87 ),
|
||||
RGB( 255, 211, 200 ),
|
||||
RGB( 247, 236, 206 ),
|
||||
RGB( 197, 180, 161 ),
|
||||
RGB( 156, 130, 119 ),
|
||||
RGB( 82, 48, 55 ),
|
||||
};
|
||||
|
||||
#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 ),
|
||||
};
|
||||
|
||||
#elif 1
|
||||
|
||||
// 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( 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, 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( 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 ),
|
||||
};
|
||||
|
||||
#elif 0
|
||||
|
||||
// Resurrect 64 - Most popular 64 colors palette
|
||||
// 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( 117, 60, 84 ),
|
||||
RGB( 162, 75, 111 ),
|
||||
RGB( 207, 101, 127 ),
|
||||
RGB( 237, 128, 153 ),
|
||||
RGB( 131, 28, 93 ),
|
||||
RGB( 195, 36, 84 ),
|
||||
RGB( 240, 79, 120 ),
|
||||
RGB( 246, 129, 129 ),
|
||||
RGB( 252, 167, 144 ),
|
||||
RGB( 253, 203, 176 ),
|
||||
};
|
||||
|
||||
#elif 1
|
||||
|
||||
// https://lospec.com/palette-list/twilioquest-76
|
||||
|
||||
const float3 palette[NUM_COLORS] = // 76
|
||||
{
|
||||
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 ),
|
||||
};
|
||||
|
||||
#elif 0
|
||||
|
||||
// Endesga 64 - very colorful and more complete
|
||||
// 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( 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( 3, 25, 63 ),
|
||||
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( 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 ),
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
float2 uv = ( fragment.texcoord0 );
|
||||
float2 uvPixelated = floor( fragment.position.xy / RESOLUTION_DIVISOR ) * RESOLUTION_DIVISOR;
|
||||
|
||||
// the Sega Mega Drive has a 9 bit HW palette making a total of 512 available colors
|
||||
// that is 3 bit per RGB channel
|
||||
// 2^3 = 8
|
||||
// 8 * 8 * 8 = 512 colors
|
||||
// although only 61 colors were available on the screen at the same time but we ignore this for now
|
||||
|
||||
const int quantizationSteps = Dithering_QuantizationSteps;
|
||||
float3 quantizationPeriod = _float3( 1.0 / ( quantizationSteps - 1 ) );
|
||||
float3 quantizationPeriod = _float3( 1.0 / NUM_COLORS );
|
||||
float3 quantDeviation = Deviation( palette );
|
||||
|
||||
// get pixellated base color
|
||||
float3 color = t_BaseColor.Sample( samp0, uvPixelated * rpWindowCoord.xy ).rgb;
|
||||
float3 color = t_BaseColor.Sample( s_LinearClamp, uvPixelated * rpWindowCoord.xy ).rgb;
|
||||
|
||||
float2 uvDither = uvPixelated;
|
||||
//if( rpJitterTexScale.x > 1.0 )
|
||||
|
@ -116,7 +757,7 @@ void main( PS_IN fragment, out PS_OUT result )
|
|||
{
|
||||
// quantized
|
||||
color = HSVToRGB( float3( uv.x, 1.0, ( uv.y - 0.0625 ) * 16.0 ) );
|
||||
color = Quantize( color, quantizationPeriod );
|
||||
color = LinearSearch( color, palette );
|
||||
|
||||
result.color = float4( color, 1.0 );
|
||||
return;
|
||||
|
@ -126,8 +767,8 @@ void main( PS_IN fragment, out PS_OUT result )
|
|||
// dithered quantized
|
||||
color = HSVToRGB( float3( uv.x, 1.0, ( uv.y - 0.125 ) * 16.0 ) );
|
||||
|
||||
color.rgb += float3( dither, dither, dither ) * quantizationPeriod;
|
||||
color = Quantize( color, quantizationPeriod );
|
||||
color.rgb += float3( dither, dither, dither ) * quantDeviation * rpJitterTexScale.y;
|
||||
color = LinearSearch( color, palette );
|
||||
|
||||
result.color = float4( color, 1.0 );
|
||||
return;
|
||||
|
@ -135,14 +776,19 @@ void main( PS_IN fragment, out PS_OUT result )
|
|||
else if( uv.y < 0.25 )
|
||||
{
|
||||
color = _float3( uv.x );
|
||||
color = Quantize( color, quantizationPeriod );
|
||||
color = floor( color * NUM_COLORS ) * ( 1.0 / ( NUM_COLORS - 1.0 ) );
|
||||
color += float3( dither, dither, dither ) * quantDeviation * rpJitterTexScale.y;
|
||||
color = LinearSearch( color.rgb, palette );
|
||||
|
||||
result.color = float4( color, 1.0 );
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
color.rgb += float3( dither, dither, dither ) * quantizationPeriod;// * rpJitterTexScale.y;
|
||||
color.rgb += float3( dither, dither, dither ) * quantDeviation * rpJitterTexScale.y;
|
||||
|
||||
// find closest color match from Sega Mega Drive color palette
|
||||
color = Quantize( color, quantizationPeriod );
|
||||
// find closest color match from C64 color palette
|
||||
color = LinearSearch( color.rgb, palette );
|
||||
|
||||
result.color = float4( color, 1.0 );
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue