Trong trình tạo bóng pixel, bạn có thể chuyển qua Texture2D 256x256 với các màu pallet được xếp theo hàng ngang trong một hàng. Sau đó, kết cấu NES của bạn sẽ được chuyển đổi thành direct3D Texture2Ds với từng pixel được chuyển đổi thành giá trị chỉ số 0-255. Có một định dạng kết cấu chỉ sử dụng giá trị màu đỏ trong D3D9. Vì vậy, kết cấu sẽ chỉ chiếm 8 bit cho mỗi pixel, nhưng dữ liệu đi vào trình đổ bóng sẽ từ 0-1.
// Pixel shader có thể trông như thế này:
float4 mainPS() : COLOR0
{
float4 colorIndex = tex2D(MainTexture, uv);
float4 palletColor = tex2D(PalletTexture, float2(colorIndex.x, 0);
return palletColor;
}
EDIT: Một cách chính xác hơn sẽ là thêm vào tất cả các phiên bản pallet trộn mà bạn cần căn chỉnh theo chiều dọc trong kết cấu và tham chiếu chúng với giá trị 'alpha' của colorIndex:
float4 mainPS() : COLOR0
{
float4 colorIndex = tex2D(MainTexture, uv);
float4 palletColor = tex2D(PalletTexture, float2(colorIndex.x, colorIndex.a);
return palletColor;
}
Cách thứ ba là chỉ giả mạo chất lượng mờ dần của NES bằng cách tô màu cho màu alpha:
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;
}