В настоящее время у меня есть 3 текстуры, которые смешиваются с использованием величины уклона в моем проекте ландшафта. Я делаю это, сэмплируя каждую текстуру, определяя величину наклона и устанавливая цвет текстуры на основе лерпа между двумя текстурами. Это фрагмент из моего пиксельного шейдера:
static const float TEX_LOW_BOUND = 0.4f;
static const float TEX_HIGH_BOUND = 0.7f;
...
float4 texColour;
float4 lowColour = lowerTex.Sample(SWrap, pin.Tex);
float4 midColour = middleTex.Sample(SWrap, pin.Tex);
float4 hiColour = upperTex.Sample(SWrap, pin.Tex);
float slope = 1.0f - pin.Normal.y;
if (slope < TEX_LOW_BOUND)
{
texColour = lerp(lowColour, midColour, slope / TEX_LOW_BOUND);
}
else if (slope >= TEX_LOW_BOUND && slope < TEX_HIGH_BOUND)
{
texColour = lerp(midColour, hiColour, (slope - TEX_LOW_BOUND) * (1.0f / (TEX_HIGH_BOUND - TEX_LOW_BOUND)));
}
else if (slope >= TEX_HIGH_BOUND)
{
texColour = hiColour;
}
Я хочу добавить финальную текстуру снега, чтобы применить ее выше определенной высоты. Я получаю значение высоты в своем вершинном шейдере, используя:
vout.WHeight = mul(vin.Pos, worldMatrix).y;
Затем я могу просто установить цвет текстуры на снег выше определенной высоты, используя это в своем пиксельном шейдере:
if (pin.WHeight > 35.0f)
{
texColour = snowTex.Sample(SWrap, pin.Tex);
}
Что производит следующее:
Как я могу смешать край снега с другими текстурами, чтобы край не был таким резким. Принимая во внимание, что другие текстуры, возможно, уже были изменены, и я хотел бы сохранить цвет текстуры.
Спасибо за уделенное время