###カメラ画角のボックス
カメラの空間は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; // 手前と奥の範囲外を後で削除できるように目印