我目前有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);
}
將會產生以下內容:
我怎樣才能融入雪與其他材質的邊緣,使邊緣不那麼苛刻。銘記其他紋理可能已經lerped,我想保持紋理的顏色。
謝謝您的時間
與斜坡一樣。 – Drop
我該如何將高度值與基於斜率的線性插值進行積分。我只是想融合雪的邊緣,所以它會逐漸消失。 – Daniel
斜坡部分(我們稱之爲「草」)取最終顏色,取雪色。計算你的插值係數作爲高度的函數(例如:絕對雪:高度200和更高,雪色數量100%;絕對草:高度低於150,雪色數量0%)。做lerp(或者你喜歡的任何混合功能)。 – Drop