픽셀 셰이더에서는 팔레트 색상이 모두 가로로 일렬로 정렬 된 256x256 Texture2D를 전달할 수 있습니다. 그런 다음 NES 텍스처는 픽셀을 0-255 인덱스 값으로 변환하여 direct3D Texture2D로 변환됩니다. 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;
}