Primitiveに色をつける
//
// RunOver:Primitives
//
int numiterations = nprimitives(0);
int iteration = @primnum;
float range = 0.5; // 0~1までの彩度幅
int sign = -1; // 1か-1のグラデーションの向き
float offset = 0.5; // 彩度の開始位置
float hue = (iteration / (float)numiterations) * range * sign + offset;
@Cd = hsvtorgb(hue, 1, 1);
彩度によるグラデーションをプリミティブのインデックスに掛けている。
色の並びをランダムにする場合
//
// RunOver:Primitives
//
int numiterations = nprimitives(0);
float iteration = numiterations * random(@primnum);
float range = 0.5; // 0~1までの彩度幅
int sign = -1; // 1か-1のグラデーションの向き
float offset = 0.5; // 彩度の開始位置
float hue = (iteration / (float)numiterations) * range * sign + offset;
@Cd = hsvtorgb(hue, 1, 1);
Named Primitiveに色をつける
For-Each Named Primitivesを使う。Block BeginノードからCreate Meta Import Nodeをつくる。
Block EndのPiece Attributeに変数名を入れる。
//
// RunOver: Primitives
//
int iteration = detail(1, "iteration");
int numiterations = detail(1, "numiterations");
float range = 0.5; // 0~1までの彩度幅
int sign = -1; // 1か-1のグラデーションの向き
float offset = 0.6; // 彩度の開始位置
float hue = (iteration / (float)numiterations) * range * sign + offset;
@Cd = hsvtorgb(hue, 1, 1);
Input1にMeta Import Nodeをつなげて、Iteration番号を利用する。
勾配の視覚化
// 最大勾配(%)
float maxSlople = 45;
vector N = normalize(@N);
vector up = set(0,1,0);
// 傾斜角
float angle = acos(dot(N, up));
// 勾配(%)へ変換
float slope = atan(angle)*100;
float range = 0.5; // 0~1までの彩度幅
int sign = -1; // 1か-1のグラデーションの向き
float offset = 0.5; // 彩度の開始位置
float hue = clamp(slope / maxSlople, 0, 1) * range * sign + offset;
@Cd = hsvtorgb(hue, 1, 1);
面法線Nとupの内積から角度を求める。上を向いている面が0°になり、絶壁が90°になる。