カテゴリー: Maya

CG, Maya

Mayaのノードで数学の演算を実現する

Maya Advent Calendar 2018 の記事です。@rt_sporty さんがリグっぽいネタ無いですかね~?とかつぶやいていた気がするので、リグっぽいけど関係ありそうな無さそうなネタを投下します。

リグを組むとき、sin とか cos とか abs とかベクトルの計算とか多用しますよね。

でも、Expression で書くと遅い。そしてダサい。ノードベースなんだし全部ノードで組みたいじゃん!って思うのが人情です。

組みましょう。

足し算, 引き算

まずは手始めにここからいきます。これはそのままノードがあります。数値もベクトルもこれで行けます。

掛け算, 割り算, a の b 乗

四則演算を揃えます。

うむ。チョロいチョロい。

逆数

これは割り算がそのまま使えます。

絶対値

これは Maya 上にはズバリそのもののノードはありません。どうしようか。。。ということですが、0 からの距離と考えれば簡単です。

floor

アニメーションカーブと、 Pre Infinity, Post Infinity を使えば実現できます。
アニメーションカーブは通常は input に時間が入力されますが、このように任意の値を入れることもできます。この辺りは結構使うテクニックですね。

Mod

mod(a, b) = a – b * floor(a / b) なので、既にあるノードを組み合わせることで計算できます。

三角関数

これはちょっと困りものです。そのものズバリなものも無いですし、既存のノードで代替するのも難しそうです。展開して近似とかもめんどくさいし重たそうです。
しかたないのでアニメーションカーブで近似します。Pre Infinite/Post Infinite を使えば一周期だけデータを用意しておくだけで対応できます。厳密な計算をする場合はもうちょっとちゃんとやる必要があるんでしょうが、リグ用とかならこれで十分かなと。sin, cos, asin, acos はこの方法で対応できますね。

tan は sin/cos で計算できます。

Log

これも良い感じに軽く計算できる方法が思いつかないのでアニメーションカーブで逃げます。ある程度の精度とデータの軽さを両立するために、キーフレームの打ち方を工夫したりして悪あがきします。あと、余り使わなさそうな部分は Linear で外挿しています。

これくらいあれば必要な演算は大体できるのではないでしょうか。(ゼロ除算は全く考慮してないですが~;;)