2024/04/09

unitConversionってなに?

こんにちは。
BACKBONEの島崎です。

今回は、アトリビュートを接続した際に作成される「unitConversion」ノードについてご紹介します。
リグ製作環境:Maya 2022.5

 

◆内部単位

unitConversion について

アトリビュートを接続しているとunitConversionというノードが自動的に作られることがあります。
この現象は何でしょう?

Maya2022公式ドキュメント を確認すると、

・Maya の内部計算は、センチメートル、ラジアン、秒の単位を使用して行われます。
・このノードを使用すると、単位の異なる数値アトリビュートを接続できます。

と記載されています。
Maya2022ドキュメント (内部単位)
Maya2022ドキュメント (環境)
Maya2022ドキュメント (unitConversion)

この内容の詳細を確認してみましょう。

 

内部単位を確認

まず、translate、rotate、scaleなどのアトリビュートには下図のように「型」と「内部単位」があります。

「内部単位」はMayaの環境設定(PreferencesSettings>WorkingUnits)で変更できます。


各内部単位を見ていきましょう。

 

Linear

移動やスケーリングなど、長さの値を使用する操作の計測単位を設定します。
Linearの単位では、
centimeterの他にmillimeterやmeter、inchなどがあります。
デフォルトでは「センチメートル(centimeter)」に設定されています。


centimeterでは、translateで移動させた際に1Gridが1cmとして扱われますが、meterに変更すると1Gridが1mとして扱われます。

 

Angular

回転など、角度の値を使用する操作の計測単位を設定します。
Angularの単位ではdegreesの他にradiansがあります。
デフォルトでは「度(degrees)」に設定されています。

さて、ここで「度」と「ラジアン」について確認しておきます。
「度」と「ラジアン」は角度を表すための2つの異なる単位です。

:円を360等分した単位、360度で1周を表します。例)90度など
ラジアン:円周率πの値に基づいて角度が計算されます。「1ラジアン = 180/π度」です。

それぞれの設定でRotateの値を確認してみます。
degreesでは回転した際に角度で表示されますが、radiansでは角度の変換値で表示されます。
radiansでは、変換値が表示されているので「90」と入力しても90度回転しないことが確認できます。

CG制作の作業では角度で作業したほうが分かりやすいですね。
Angularがデフォルトでは「度」に設定されているのも納得です。

 

ここで改めてMayaのヘルプを確認すると、
Maya の内部計算は、センチメートル、ラジアン、秒の単位を使用して行われます。
と記載されています。
内部単位のLinearやAngularを変更した場合、上記の動画のように表示上での見え方は変わりましたが、内部計算としてはLinearは「centimeter」、Angularは「radians」で計算されているのでしょうか?
実際に確認してみましょう。

◆内部単位を変更して確認

Linearを「centimeter」、Angularを「degrees」で確認

<translatetranslate>

直接接続されました。
unitConversionは作成されません。

<translaterotate

unitConversionが作成されました。
アトリビュートエディターでunitConversionノードの値を確認すると「0.017」という値が設定されています。


Mayaの内部計算がAngularは「radians」で計算されているとすると、この値は角度をラジアンに変換している値と考えられます。「1度=π/180​ラジアン」を計算すると「0.0174532925199444」なので「0.017」と一致しますね。

<translatescale

直接接続されました。
unitConversionは作成されません。
centimeter環境下で相対的な比率を受け取る際に数値の変換は不要、と解釈できます。

 

rotatetranslate>

unitConversionが作成されました。
アトリビュートエディターでunitConversionノードの値を確認すると「57.296」という値が設定されています。

こちらもMayaの内部計算がAngularは「radians」で計算されているとすると、角度をラジアンに変換している値と考えられます。「1ラジアン = 180/π度」を実際に計算すると57.29577951307855」なので「57.296と一致します。

rotaterotate

直接接続されました。
unitConversionは作成されません。

rotate→scale

unitConversionが作成されました。
アトリビュートエディターでunitConversionノードの値を確認すると「57.296」という値が設定されています。
rotate→translateと同様に
角度をラジアンに変換している値と考えられます。

 

scaletranslate

直接接続されました。
unitConversionは作成されません。

scalerotate

unitConversionが作成されました。
アトリビュートエディターでunitConversionノードの値を確認すると「0.017」という値が設定されています。
translate→rotateと同様に角度をラジアンに変換している値と考えられます。

scalescale

直接接続されました。
unitConversionは作成されません。

 

Linearを「centimeter」、Angularを「radians」で確認

<translatetranslate,rotate,scale

直接接続されました。
unitConversionは作成されません。

rotatetranslate,rotate,scale

直接接続されました。
unitConversionは作成されません。

scaletranslate,rotate,scale

直接接続されました。
unitConversionは作成されません。

◆まとめ

環境設定で単位を変更したとしてもMayaのヘルプに記載されている通り、Maya の内部計算は、センチメートル、ラジアン、秒の単位を使用して行われており、単位の異なる数値アトリビュートを接続する際にはunitConversionを作成して変換する、仕様であることが確認できました。
Linearをmeterに変更しての説明は割愛しますが、内部単位が異なる場合はunitConversionが作成されて、Linearは「centimeter」、Angularは「radians」に変換するための値が設定されます。

各アトリビュートの内部単位を気にしなくても接続する際にMayaが自動で変換してくれますが、変換時の誤差は含まれています。unitConversionができないようにアトリビュートやノードを接続するのが理想ですが、角度をドライバーにしてsetDrivenKeyで移動制御する補助骨などはとても良く使用する機能なので、各アトリビュートの単位や型を意識しつつ、用途に応じて接続方法を判断するのが良いと思います。
今回の記事が、リグ制作の何かしらのお役に立てると幸いです。
ではまた。

 

本記事を書くにあたり、株式会社スクウェア・エニックス 佐々木 隆典氏の「Maya®のしくみ 基礎から学ぶDGとパラレル評価、そしてキャッシュプレイバック」を参考にさせていただきました。佐々木様にはこの場を借りて深く御礼申し上げます。

<参考資料>
Maya®のしくみ 基礎から学ぶDGとパラレル評価、そしてキャッシュプレイバック
株式会社スクウェア・エニックス テクノロジー推進部 リードテクニカルアーティスト 佐々木 隆典氏

 

 

 

※免責事項※
本記事内で公開している全ての情報について、その完全性、正確性、適用性、有用性等いかなる保証も行っておりません。
これらの情報のご利用により、何らかの不都合や損害が発生したとしても、当社は何らの責任を負うものではありません。
自己責任でご使用ください。



ブログTOPへ戻る