1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

カメラ座標(NDC)

Last updated at Posted at 2020-04-09

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

image.png

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); //カメラの空間にボックスを変換

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

image.png

###一度もカメラ(アニメーション)に入っていないポイントを削除
キャッシュが重い時に手っ取り早く軽くする方法
image.png

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ファイル

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?