目次
今記事の目的:
マスクを使用して地形を任意の形状に調整、任意の箇所にマスクを作成する方法を試してみたいと思います。
基本セットアップ
- Geometryノードを作成
- Gridノードを作成(Size 10×10 Rows/Columns : 100程度)
- attribute Wrangleを接続
ノイズのスケールを調整してみる

vector pos = @P * 0.3;
float n = noise(pos);float mask = fit(@P.y, 0.0, 0.8, 0.0, 1.0);
mask = clamp(mask, 0.0, 1.0);float finalMask = smooth(0.3,0.5,n*0.8+mask*0.5);
vector baseColor = set(0.4, 0.25, 0.1);
vector addColor = set(0.2, 0.5, 0.2);@Cd = lerp(baseColor, addColor, finalMask);
・今回はGridのy座標がマスクに影響するので適宜変えて見てください。画像の状態は0で作成しました。
// fit()の仕組み
float new = fit(value, oldMin, oldMax, newMin, newMax);
valueが oldMin〜oldMax の間にあるとき、それを newMin〜newMax の範囲に変換してくれます。
そのあと、clampで0~1の範囲に絞ることで扱いやすくなります。
// smooth()の仕組み
float new = smooth(value, edge0, edge1);
value が edge0〜edge1 の間をゆるやかに 0→1 に変換してくれます
作成したマスクをもとに高さに変化を加えてみる

vector pos = @P * 0.3;
float n = noise(pos);float mask = fit(@P.y, 0.0, 0.8, 0.0, 1.0);
mask = clamp(mask, 0.0, 1.0);float finalMask = smooth(0.3,0.5,n*0.8+mask*0.5);
float dispAmp = 2.0;
@P.y += finalMask * dispAmp;vector baseColor = set(0.4, 0.25, 0.1);
vector addColor = set(0.2, 0.5, 0.2);@Cd = lerp(baseColor, addColor, finalMask);
・緑色の箇所のみ高くすることができました。
法線ベースでマスクを作ってみる

float upMask = fit(@N.y,0.0,1.0,0.0,1.0);
upMask = clamp(upMask,0.0,1.0);vector pos = @P*0.5;
float n = noise(pos);
float topMask = smooth(0.4,0.8,upMask*0.7+n*0.3);
@P.y += topMask * 0.15;vector baseColor = set(0.4, 0.25, 0.1);
vector topColor = set(0.2, 0.5, 0.2);@Cd = lerp(baseColor, topColor, topMask);
・前段階で作成した地形に対して、上向きの面に対してマスクを作成してみました。
・画像の通り、緑色の箇所は高さが変化していて、茶色の箇所は変化していないことがわかります。
特定の箇所のマスクを作成してみる

vector north = normalize({0,0,1});
float d = dot(@N,north);float northMask = fit(d,0.0,1.0,0.0,1.0);
northMask = clamp(northMask,0.0,1.0);vector pos = @P*0.6;
float n =noise(pos);
float mask = smooth(0.2,0.8,northMask*0.8+n*0.2);
vector red = set(0.9,0.3,0.2);
vector green = set(0.1,0.4,0.15);@Cd = lerp (red,green,mask);
・今回は、法線がZ+方向に向いている箇所のマスクを作成してみました。狙った箇所にマスクをかける方法の紹介でした。
次回について
ここまで読んでいただきありがとうございます。次回はペイントを使用してみようと思います。


