У меня возникла проблема с правильной работой 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
};
Код шейдера выглядит следующим образом:
поплавок альфа = 1.0F; if (HasAlphaTexture) alpha = tex2D(AlphaSampler, IN.UV).xyz;
//... //определение значений цвета и т.д.. ///...
вернуть float4 (результат.xyz, альфа);
Карты, которые я использую для этого, выглядят следующим образом: