int pcwrite(string filename, ...)
現行シェーディングポイント用のデータをポイントクラウドファイルに書き出します。
filename
書き出し先のファイルの名前。その結果のファイルをFileサーフェスノードでジオメトリネットワークに読み込むことができます。
このファイルの拡張子を.pc
にしてください(Houdiniは拡張子からファイルをインポートする方法を決めます)。
…
その後の引数では、チャンネル名(保存するアトリビュートの名前が付けられた文字列で、例えば"P"
、"N"
、"v"
、"area"
、"u"
など)/値(保存したい値)のペアを1つ以上指定します。
pcwrite("out.pc", "P", P, "N", N)
変数を3つのコンポーネントではなくてベクトルタイプとして書き出すには、チャンネル名に:vector
を追加します。
pcwrite("out.pc", "P", P, "N:vector", N)
マイクロポリゴンレンダリングでは、ポイントは近接ポイントで補間されるので、コーナーとエッジ上の重複したポイントがポイントクラウドから除去されます。
この動作を無効にしたい場合は、上記の"interpolate"
引数を使ってください。
"interpolate",
int
=1
この引数の値を1
(デフォルト)にすると、1個の補間されたポイントが書き出され、これはマイクロポリゴンの4つのコーナーを意味しています。
これは重複した値が書き出されるのを回避します。
pcwrite("out.pc", "P", P, "interpolate", 1)
値を0
にすると、補間が無効になり、P
に基づいていないポイントを書き出す時に役に立ちます。補間はレイトレースモードでは何の効果もありません。
(これは、データチャンネルの名前としてinterpolate
を使うことができないことを意味していることに注意してください。)
"countphotons",
int
フォトン生成モードでは、保存されたポイントの数をフォトンの総数に加算します。 これは、進捗状況のレポートとフォトンマップ生成の終了が目的です。
"mkdir",
int
=0
1
の引数を渡すと、この関数は、見つからないサブディレクトリ/パスを自動的に作成します。
Examples ¶
surface dumpsomepoints(string fname = "points.$F4.pc"; int do_cull = 0; float keepamt = 0.05) { vector nn = normalize(frontface(N, I)); int rval=0; float A = area(P,"smooth",0); // 滑らかな微分を無効にした面積。 if( !do_cull || do_cull & (nrandom()<keepamt) ) { if( do_cull && keepamt > 0 ) { A = A/keepamt; } rval = pcwrite(fname, "interpolate", 1, "P", ptransform("space:camera","space:world", P), "N", ntransform("space:camera","space:world", normalize(N)), "area", A); // pcに"area"チャンネルを出力します。 } Cf =abs(nn)*rval; }
See also | |
file | |
ptcloud |
|