ピクセルシェーダーでは、パレットの色がすべて横一列に並んだ256x256 Texture2Dを渡すことができます。次に、NESテクスチャは、常にピクセルが0〜255のインデックス値に変換されたdirect3D Texture2Dに変換されます。D3D9の赤の値のみを使用するテクスチャ形式があります。そのため、テクスチャは1ピクセルあたり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;
}
3番目の方法は、アルファカラーをトゥーンシェーディングすることにより、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;
}