カメラ座標(NDC)


カメラ画角のボックス

カメラの空間はNDC(normal device coordinates)と呼ばれ、カメラから見てX,Y軸は0~1、Z軸はマイナスを使ってカメラの距離を表す
ボックスの中心が基点のままなので{0.5, 0.5, 0}にオフセットしてスケールを掛けれるように左端を基点に変更

wrangle
vector offset = {0.5, 0.5, 0}; //カメラの縦と横が0-1に対してカメラの中心を基点(0.5,0.5)に
vector cameraScale = set(ch("camera_X"), ch("camera_Y"), 1);
if (@group_near)  @P = set(@P.x, @P.y, ch("near")*-1); //near(Z軸)の距離
if (!@group_near) @P = set(@P.x, @P.y, ch("far")*-1);  //far (Z軸)の距離
vector xformpos = @P *  maketransform(0,0, offset,{0,0,0},cameraScale,{0,0,0}); //縦と横の大きさ
@P = fromNDC(chs("camera_path"), xformpos); //カメラの空間にボックスを変換

カメラ外のポイントを削除

カメラ外のポイントやプリミティブを削除するとエミッターのパーティクル数を減らせるなど作業の軽量化に役立つ

一度もカメラ(アニメーション)に入っていないポイントを削除

キャッシュが重い時に手っ取り早く軽くする方法

i@insideCamera = @Frame; // カメラ内のポイントにフレーム数を設定
vector offset = {-0.5, -0.5, 0}; //カメラの縦と横が0-1に対してカメラの中心を基点(0.5,0.5)に
vector xformuv = @uv *  maketransform(0,0, offset,{0,0,0},{1,1,1},{0,0,0}); // カメラスケールをUVに適用
if ( xformuv.x < ch("camera_X")*-0.5 || xformuv.x > ch("camera_X")*0.5 ) i@insideCamera = 0; // 左右の画角外を後で削除できるように目印
if ( xformuv.y < ch("camera_Y")*-0.5 || xformuv.y > ch("camera_Y")*0.5 )  i@insideCamera = 0; // 上下の画角外を後で削除できるように目印
if ( @uv.z >= ch("far") || @uv.z  <= ch("near"))  i@insideCamera = 0; // 手前と奥の範囲外を後で削除できるように目印

HIPファイル