В настоящее время у меня есть 3 текстуры, которые смешиваются с использованием величины уклона в моем проекте ландшафта. Я делаю это путем выборки каждой текстуры, определения величины уклона и установки цвета текстуры на основе lerp между двумя текстурами. Это фрагмент кода это от моего пиксельного шейдера:DirectX11: Смешивание текстуры на основе высоты
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);
}
Который производит следующее:
Как я могу смешать край снега с другими текстурами, так что край не столь суровы. Принимая во внимание, что другие текстуры, возможно, уже были зажаты, и я хотел бы сохранить цвет текстуры.
Спасибо за ваше время
Так же, как и с наклоном. – Drop
Как именно я интегрирую значение высоты с линейной интерполяцией на основе наклона. Я просто хочу смешать край снега, так что он исчезает дальше по холму. – Daniel
Примите окончательный цвет после части склона (назовем это «травой»), возьмите снежный покров. Вычислите коэффициент интерполяции как функцию высоты (например: абсолютный снег: высота 200 и выше, количество снежного покрова 100%, абсолютная трава: высота ниже 150, количество снежного покрова 0%). Сделайте lerp (или любую функцию смешивания, которая вам нравится). – Drop