У піксельному шейдері ви могли пройти в форматі 256x256 Texture2D з кольорами піддону, усі вишикувалися горизонтально підряд. Тоді ваші текстури NES будуть перетворені на direct3D Texture2Ds з будь-коли пікселем, перетвореним на значення індексу 0-255. Існує формат текстури, який використовує лише червоне значення в D3D9. Таким чином, текстура займе лише 8 біт на піксель, але дані, які надходять у шейдер, становитимуть від 0-1.
// Піксельний шейдер може виглядати приблизно так:
float4 mainPS() : COLOR0
{
float4 colorIndex = tex2D(MainTexture, uv);
float4 palletColor = tex2D(PalletTexture, float2(colorIndex.x, 0);
return palletColor;
}
РЕДАКТУВАННЯ: Більш правильним способом було б додати до всієї версії піддону, що потрібно змішувати, по вертикалі вирівняти текстуру і посилати їх на значення "альфа" вашого colorIndex:
float4 mainPS() : COLOR0
{
float4 colorIndex = tex2D(MainTexture, uv);
float4 palletColor = tex2D(PalletTexture, float2(colorIndex.x, colorIndex.a);
return palletColor;
}
Третім способом було б просто підробити NES з низькою якістю в’янення, відтіняючи альфа-колір тоном:
float4 mainPS() : COLOR0
{
float4 colorIndex = tex2D(MainTexture, uv);
float4 palletColor = tex2D(PalletTexture, float2(colorIndex.x, 0);
palletColor.a = floor(palletColor.a * fadeQuality) / fadeQuality;
//NOTE: If fadeQuality where to equal say '3' there would be only 3 levels of fade.
return palletColor;
}