今回は Null で UV マップを動かして視線移動させる方法についてやっていきます
一度はやってみたかった機能
特に目の視線移動と言えば
- リアル系なら目玉ごと動かす
- アニメ目ならボーンを動かす
の以上のやり方がありますが、カートゥーンによくあるような目だと、どちらも適用できない感じがします
そこでもう一つの方法としてあるのが、UV マップ自体を動かして視線移動させるタイプ
この方法ならモデルの形状に縛られることなく、動かすことができます
ただ、LightWave で具体的なやり方も見当たらなかったので、勉強もかねて探ってみました
結果として分かったのは、 Image ノードにある UV OffSet に Null の座標値を入力してあげればできることが分かりました
そして、Sign ノードとうものが結構重要であることも理解
そんなこんなで、いつものようにメモっていきます
準備
UV 展開済みのモデルを用意する

まずは物が無いと始まらないので、簡単なモデルを用意
UV アニメーションは UV マップを動かして見え方をコントロールするので、UV マップもサクッと展開しておきます
テクスチャを用意する

LightWave から EPS ファイル出力して、Affinity でEPSの読み込みと PNG へ変換出力します
テクスチャそのものは Affinity で作業しても良かったですが、自分は慣れている CLIP STUDIO PAINT PRO に読み込んで作りました
画像仕様は 1024 x 1024 の正方形
出力ファイル形式は PNG です
Null を用意する

レイアウトに読み込んで、コントロール用の Null を用意
ショートカットは Ctrl+N
必要なら編集から選択色や形状を変更します
もし勢い余ってデフォルトのまま行ってしまった場合は、オブジェクトプロパティからアピアランスタブ内の「カスタムオブジェクト追加」の中にある「アイテム形状」を追加すれば、再編集できます
UV を動かす方法の手順
それでは準備もできたので、サクサク進めていきます
手順はこのようになりました
必要なノードを用意する

オブジェクトを選択した状態で、「色・質感編集」を開く
そこからノード編集画面に飛びます
検索窓から必要なノードを呼び出して、ノード編集内に配置
使うのは以下のノードとなっています
- Sign:マイナス値を付けるノード
- image:画像を扱うノード
- Item Info:アイテム情報を扱うノード
- Vector Scalar:ベクターからスカラーにするノード
Sign というノードがありますが、これが結構重要
Null コントローラーを右に動かすと内部的に UV マップも右に動きますが、錯覚で画像は左に動くように見えます
つまり、コントローラーとは逆方向に目を動かしているような感じになっちゃうわけです
その問題を解消するために、この Sign というノードでマイナス値を付けて、コントローラーと画像の動きが一致するようにしました
各ノードを接続する

各ノードをガンガン繋げていきます
Vector Scalar と Sign というノードを二個ずつ用意しているのは、横軸と縦軸の分が必要だったからです

じゃっく
U が横軸、V が縦軸
また、最初勘違いしていたのですが、Sign 以降に繋げる先は Tile じゃなくて Offset です
Tile はUV マップのマス目の縦幅と横幅の事を指しているようなので、繋ぐとどんどんテクスチャが伸びたり縮んだりします
ノードの中身を設定する

Image ノードは、中身を画像のように設定
作ったテクスチャを指定して、UV タイリングをデフォルトの「リピート」から「エッジ」にします

じゃっく
「エッジ」にすることで繰り返し表示を回避
投影の項目も「 UV マップ」にして、マップも作った UV マップに切り替えます

さらに Item Info と Vector Scalar の中も変更します
- Item Info:コントロール用の Null
- Vector Scalar(上):X チャンネル
- Vector Scalar(下):Y チャンネル
これで一通りできました
結果

あとは動作確認です
テクスチャソリッドワイヤー表示だと何故か変化が見られなかったので、VPR 表示に切り替えて動作確認をしています
Null を動かすとコントローラーの動きに合わせて、テクスチャが動かせているのが分かります

じゃっく
できた イェ~イ♪
ついでに、モデルを複製したタイプも試してみましたが、一つの Null で問題無く両目を動かすことができました
まとめ
それでは、いつものように軽くまとめます
- Sign ノードの先は UV OffSet に繋ぐ
- Sign ノードでマイナス値を付けられる
- Vector Scalar でチャンネル軸を指定する
- Item Info にコントローラー用 Null を設定する
今回は Null で UV マップを動かして視線移動する方法についてやっていきました
一度は試してみたかったものですが、コントローラーの動き通りの結果にするのが地味に難しかったです
最初は反転を意味する Invert ノードを使うのかな?と思っていましたが、まったく違う結果になりました

じゃっく
0.8 を入力すると 0.2 が出力されるだけで、ー0.8にならなかった
なんとなく Math ノードの Scalar 群の中にマイナス値が当てられるノードがあるんだろうなという当てずっぽうでできちゃったわけですが、まあ・・・まあ良い勉強になりました
今後も Sign ノードを使うかもしれないので、よく理解しておこうと思います
今回の Null を使った UV アニメーションは今の所、目の視線移動くらいしか思いつかないですが、忘れないようにしておきたいところです
それでは、お疲れさまでした~
使用ツール
- 3DCG
- LightWave3D
- 動画
- Bandicam
- ScreenToGif
- 画像
- Affinity
- CLIP STUDIO PAINT PRO
