« それが普通、って凄いこと | トップページ | チャレンジの春 »

2012年4月24日 (火)ICEを使ってみる 第5回 ホモグラフィ 斜めの視線を改める

おはようございます、本日の当番モーションデザイナーのY.Nです。
今回もやっぱりICEですが、その前にまずは謝罪いたします。

スミマセン、全く浅はかでした。
ICEってn次行列を扱うためのノードは用意されていなかったんですね
前回、n次正方行列が計算できると思い込んでいたので
行列使ったら云々などと、実際には出来ない事を書いてしまってました。
3次までは、ベクトルや行列を扱うためのノードが充分用意されていたので、
てっきりそれ以上の次数も対応されているのかと勘違いしていました。

さて、今回のお題について
響きはちょっと怪しげな感じがしなくも無いですが、数学やらCGやらでは
射影変換で使う便利な行列の事を指します。
で、この行列を使って実際に射影変換をしようと目論んでたのですが、
この行列を用意するには、8次の連立一次方程式を解く必要があるのでした。

n次の計算用ノードがないと計算できないし、どうしたものか・・・。

悩んでても時間が勿体無い!
せっかくICE使うんだし、無い物は作ることにしました。
基本機能使ってn次の連立一次方程式を解くコンパウンドを用意。

で、無事上手く行ったっぽい。結果はこんな感じです。
斜めった画像を貼った2つのグリッドを用意、
1つは左の参照用で見栄えが変化しないもの、もう1つが右のUVを弄る用です。
斜め画像の上の赤い4点は右のグリッドのUVを調整するための参照点です。
この点1つずつが右グリッドのUVの四隅に対応しています。

2012_0423_01_5


今回取り扱っている事柄
・UV空間へのアクセス方法
・n次連立一次方程式の解法

以下、結果を得るまでの流れです。
1.UV空間へのアクセス方法
2.参照点4点の変換前後の座標からホモグラフィを求める
3.ホモグラフィを使って座標変換する

■1.UV空間へのアクセス方法
まずはポリゴン形状をUV空間に反映させてみます。
図では、1x1のGridの1点を横に引っ張って変形させて、その結果をGridとGrid1それぞれのUV座標に返しています。

2012_0423_02


ノードツリーはこんな感じです。

2012_0423_03


Gridの形状にぴったり合うようにGridのUVを変形した結果が図の左側です。
変形後のUVの座標値を、変形していないGrid1に返した結果が右側です。

NodePositionのデータをUVsに反映させるというのが、ここでのポイントとなります。

Gridのノードポジションは、Grid1とポイント数同じですが、直接はノードを繋げることができません。
ここではGrid1のNodeIndexを使うことで、繋げるようにしています。

右側は、対角線でパキッと線の向きが変わってますが、これはどうにも回避出来ない事象のようなのでここでは詳しく触れません。
以降では、ポリゴンを細かく分割することで、変形時の見栄えの影響を小さくする事で対応していきます。


■2.参照点4点の変換前後の座標からホモグラフィを求める
ホモグラフィを求めるための参照点を4つ設定します。
これら4点のデフォルト位置4つと変形後の位置4つ、合わせて8つの座標ベクトルからホモグラフィを求めます。

8元連立一次方程式を解く必要があります。
既存の行列、ベクトルはこの解を求めるためには使えないので、配列を使って方程式を解くことにします。

今回は、係数行列と定数項を配列で入力、そこから拡大係数行列を作って掃き出し法で解を求めることにします。
中身は随分でかくなってしまったので、図無しでご容赦ください。

やり方を簡単にまとめると、行数分下のような処理をループさせて上階段行列を作ります。

1.枢軸を設定する
2.枢軸以外の行列Xを設定
3.掃き出し計算して指定列の値を0にする
4.枢軸行を配列Yに追加する
1に戻る

これでYに上階段行列が設定されます。
次にYの最下段から順に解を求めていくようループさせることで解の配列が完成します。

■3.ホモグラフィを使って座標変換する
解の配列を使って、座標変換します。
ホモグラフィの各パラメータをA~H、変換前の座標を(x,y)とすると変換後の座標(X,Y)は
下のようになるので、それをそのまま設定してやります。

X = (A*x+B*y+C)/(G*x+H*y+1)
Y = (D*x+E*y+F)/(G*x+H*y+1)

このツリーはこんな感じです。

2012_0423_04_2

全体的にごちゃごちゃしてるんで、コンパウンドにまとめてスッキリさせましょう。

2012_0423_05

2012_0423_06


射影変換は以上ということで。

1~3までの工程を経てやっと変換された図が得られるのですが、
これだとまだuv座標が変化しただけで、テクスチャ自体は元のままです。
この後レンダーマップで焼き付けることで、射影変換後の画像を作るようにするとかも出来そうです。

というわけで今回はちょっと実務寄り、汎用的な使い方を想定してみました。
次回、もう少しだけこれを弄ってみたいと思います。

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2012/04/ice4-85fc.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

« それが普通、って凄いこと | トップページ | チャレンジの春 »

モーションデザイナー」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: ICEを使ってみる 第5回 ホモグラフィ 斜めの視線を改める:

« それが普通、って凄いこと | トップページ | チャレンジの春 »