« 私が翻訳です | トップページ | モーションを作るにあたって »

2012年12月17日 (月)ICEを使ってみる 第8回 別オブジェのUVを参照する

おはようございます、本日の当番モーションデザイナーのY.Nです。

相変わらずICEを触っていきたいと思います。
今回はテクスチャ付きのオブジェクトAのUVをオブジェクトBが参照するということをしてみたいと思います。

図では、大きさと分割数が違う2つのグリッドに同じテクスチャを貼って縦に並べて配置し、適当に動かして形状も変えてみました。
大きい方(grid1)が下、小さい方(grid)が上です。
大きい方の変形が小さい方を透して見えるような感じになっています。

2012_1214_01

ここでは小グリッドの頂点(vertex)から一番近い大グリッドの点上のUV座標を取って、それを小グリッドのvertex位置のUV値に渡すということをやっています。
TopViewから見ると、2つのグリッドのUV座標値が同じ位置にあるので透過しているように見えます。

横から見ると大小のグリッドのUV座標が同一視線上ではなくなるので透過している感じにはならないですね。

2012_1214_02

今回説明しようとしている事柄
・Locationの使い方
・VertexToNodesが変



以下、本日の流れです。
1.参照先のオブジェクト(大グリッド)のUVを変数Xに入れる
2.参照元オブジェクト(小グリッド)のvertex位置に合うUV座標X'をXから求める
3.X'を参照元のオブジェクトのUVに入れる?



■1.参照先のオブジェクト(大グリッド)のUVを変数Xに入れる
まずは前準備から。
後で参照元オブジェが簡単に参照できるように参照先オブジェのUVを変数X(B_uv)に入れておきます。

2012_1214_03


■2.参照元オブジェクト(小グリッド)のvertex位置に合うUV座標X'をXから求める
お題は求めるとか言っててなんだか仰々しいですが何の複雑な計算はいりません。
ここでLocationを使って、参照元のvertexから最も近い位置の参照先オブジェのUV座標を取得します。

2012_1214_04


参照元オブジェのvertexからもっとも近い点には参照先オブジェのvertexは無いんですが、
このようにLocationを使うと参照先オブジェのvertex座標から適切に補間計算されたUV座標を
引っ張ってくることができちゃいます。


■3.X'を参照元のオブジェクトのUVに入れる
あとはこのUV座標値X'を自分のUVに入れるだけ。

先ほど頂点位置のUVをX'に入れてやったので、あとは参照元のUVに頂点番号順に
X'の中身を入れていけば完了しそうな感じです。


が、実は全然そうはいきません。
UV値の入力先と頂点は数が合わないからです。

各頂点は共有しているポリゴンの数だけUV座標を受け持っています。
なので、今のX'は参照元のUVの受け皿より数が少ないのです。

つまり、2番の工程で既にUV座標をちゃんと取れてないことになりますね。
しかし参照先Locationにアクセスするのにvertex座標を使う以外の方法がちょっと見当たらなかったのでやむなくこのようにしていました。

これを解消するためにちょっと強引なことをこれからやっていきます。
まずその前に、これから何をしたいかをまとめておきます。

①UV座標の受け皿の数と同じだけUV座標を用意して、
②ちゃんと対応する番号の皿に座標を入れる


これで、参照先のUVを参照元に適用させるということが達成できます。

ところでICEでは、
空間上でジオメトリサイズを規定するために三次元座標で表現する点をvertexという名で取り扱っている他、
UV空間中でテクスチャを貼るサイズを規定するためにUV座標で表現する点、先ほどから受け皿と呼んでたやつもちゃんと取り扱っています。
その名前は単にNodeと表されています。Node関連の情報は全部Nodeなんたらという感じで名前が付けられています。
たとえばNodeのIndexはNodeIndexです。

で、この品揃えの中にNodeToVertexなんてのがありますね。ということはその逆もあるはず。
はい、ありました。VertexToNodes。
使ってみるとこんな感じ。
vertexに対応するNode番号がとれているっぽいですね。

2012_1214_05


これで各vertexに対応しているNode数やNodeIndexがわかります。
先ほどvertexの座標を使って引っ張ってきたUV座標をごにょごにょすれば何とかなるはず!

ということで、今度はグリッドに対して使ってみたところ…
2012_1214_06


あれ、何か…!?
試しにVertexToNodesの計算結果とNodeIndexの数を比較してみると、
VertexToNodesの方がNodeIndexの数より多いという結果に。

2012_1214_07


なんだこれ???
とりあえずグリッドに関しては、端にあるvertexは正しい値を返さないことだけはわかりました。
さてどうしたものか。

何かVertexToNodesの代わりになるものを作る必要がありそうです。
NodeToVertexを使えば作れそうですね。

というこの辺りで、次回に引っ張らせていただきます。

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2012/12/ice8uv-229e.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を使ってみる 第8回 別オブジェのUVを参照する:

« 私が翻訳です | トップページ | モーションを作るにあたって »