У меня проблема с настройкой правильной работы BlendState на графическом устройстве и корректным отображением альфа-наложения.
В некоторых случаях вы можете видеть листья через другие листья, в других - нет. И багажник тоже всегда скрыт.
Я пробовал так много разных комбинаций настройки BlendState. На данный момент это выглядит так:
GraphicsDevice.DepthStencilState = DepthStencilState.Default;
GraphicsDevice.RasterizerState = RasterizerState.CullCounterClockwise;
//GraphicsDevice.BlendState = BlendState.AlphaBlend;
GraphicsDevice.BlendState = new BlendState()
{
AlphaBlendFunction = BlendFunction.Add,
AlphaDestinationBlend = Blend.InverseSourceAlpha,
AlphaSourceBlend = Blend.One,
BlendFactor = new Color(1.0F, 1.0F, 1.0F, 1.0F),
ColorBlendFunction = BlendFunction.Add,
ColorDestinationBlend = Blend.InverseSourceAlpha,
ColorSourceBlend = Blend.One,
ColorWriteChannels = ColorWriteChannels.All,
ColorWriteChannels1 = ColorWriteChannels.All,
ColorWriteChannels2 = ColorWriteChannels.All,
ColorWriteChannels3 = ColorWriteChannels.All,
MultiSampleMask = -1
};
Код шейдера выглядит следующим образом:
float alpha = 1,0F;
if (HasAlphaTexture)
alpha = tex2D (AlphaSampler, IN.UV) .xyz;
// ...
// определить значения цвета и т. д.
///...
return float4 (result.xyz, alpha);
Карты, которые я использую для этого, выглядят следующим образом: