Scatter SOPの使用例。
面積あたりでポイントを散布する
対象メッシュを変えるたびに散布する密度が変わらないようにするため、面積あたり(m^2)で散布するようにする。
事前に面積の計算をしておく
表面積の計算
Detail Wrangleをつくり、以下のコードで総面積を計算する。(メッシュはDivide SOPで事前に三角分割しておく)
// Run Over: Detail
float sum = 0;
for(int i = 0; i < nprimitives(0); i++)
{
int npts[] = primpoints(0, i);
vector p0 = point(0, "P", npts[0]);
vector p1 = point(0, "P", npts[1]);
vector p2 = point(0, "P", npts[2]);
vector cross = cross(p0 - p1, p2 - p1);
float area = length(cross) / 2;
sum += area;
}
f@area = sum;
つづいてScatter SOPをつなぎ、
Force Total Countに以下のように書く。掛ける値はメートル平方あたりのポイント数にしておく。
ch("../parameters/pointsPerArea")*detail(0,"area",0)