Scatter SOP

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)
タイトルとURLをコピーしました