ในตัวแบ่งพิกเซลคุณสามารถส่งผ่าน Texture2D ขนาด 256x256 สีพาเลททั้งหมดเรียงกันเป็นแนวนอนเป็นแถว จากนั้นพื้นผิว NES ของคุณจะถูกแปลงเป็น direct3D Texture2Ds ที่มีการแปลงพิกเซลเป็นค่าดัชนี 0-255 มีรูปแบบพื้นผิวที่ใช้ค่าสีแดงใน D3D9 เท่านั้น ดังนั้นพื้นผิวจะใช้เพียง 8 บิตต่อพิกเซล แต่ข้อมูลที่เข้ามาใน shader จะมาจาก 0-1
// Pixel Shader อาจมีลักษณะเช่นนี้:
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 โดย toon การแรเงาสีอัลฟา:
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;
}