2024/04/09
unitConversionってなに?
こんにちは。
BACKBONEの島崎です。
今回は、アトリビュートを接続した際に作成される「unitConversion」ノードについてご紹介します。
※リグ製作環境:Maya 2022.5
◆内部単位
unitConversion について
アトリビュートを接続しているとunitConversionというノードが自動的に作られることがあります。
この現象は何でしょう?
Maya2022公式ドキュメント を確認すると、
・このノードを使用すると、単位の異なる数値アトリビュートを接続できます。
と記載されています。
Maya2022ドキュメント (内部単位)
Maya2022ドキュメント (環境)
Maya2022ドキュメント (unitConversion)
この内容の詳細を確認してみましょう。
内部単位を確認
まず、translate、rotate、scaleなどのアトリビュートには下図のように「型」と「内部単位」があります。
「内部単位」はMayaの環境設定(PreferencesのSettings>WorkingUnits)で変更できます。
各内部単位を見ていきましょう。
Linear
移動やスケーリングなど、長さの値を使用する操作の計測単位を設定します。
Linearの単位では、centimeterの他にmillimeterやmeter、inchなどがあります。
デフォルトでは「センチメートル(centimeter)」に設定されています。
centimeterでは、translateで移動させた際に1Gridが1cmとして扱われますが、meterに変更すると1Gridが1mとして扱われます。
Angular
回転など、角度の値を使用する操作の計測単位を設定します。
Angularの単位ではdegreesの他にradiansがあります。
デフォルトでは「度(degrees)」に設定されています。
さて、ここで「度」と「ラジアン」について確認しておきます。
「度」と「ラジアン」は角度を表すための2つの異なる単位です。
・ラジアン:円周率πの値に基づいて角度が計算されます。「1ラジアン = 180/π度」です。
それぞれの設定でRotateの値を確認してみます。
degreesでは回転した際に角度で表示されますが、radiansでは角度の変換値で表示されます。
radiansでは、変換値が表示されているので「90」と入力しても90度回転しないことが確認できます。
CG制作の作業では角度で作業したほうが分かりやすいですね。
Angularがデフォルトでは「度」に設定されているのも納得です。
ここで改めてMayaのヘルプを確認すると、
「Maya の内部計算は、センチメートル、ラジアン、秒の単位を使用して行われます。」
と記載されています。
内部単位のLinearやAngularを変更した場合、上記の動画のように表示上での見え方は変わりましたが、内部計算としてはLinearは「centimeter」、Angularは「radians」で計算されているのでしょうか?
実際に確認してみましょう。
◆内部単位を変更して確認
Linearを「centimeter」、Angularを「degrees」で確認
<translate→translate>
直接接続されました。
unitConversionは作成されません。
<translate→rotate>
unitConversionが作成されました。
アトリビュートエディターでunitConversionノードの値を確認すると「0.017」という値が設定されています。
Mayaの内部計算がAngularは「radians」で計算されているとすると、この値は角度をラジアンに変換している値と考えられます。「1度=π/180ラジアン」を計算すると「0.0174532925199444」なので「0.017」と一致しますね。
<translate→scale>
直接接続されました。
unitConversionは作成されません。
centimeter環境下で相対的な比率を受け取る際に数値の変換は不要、と解釈できます。
<rotate→translate>
unitConversionが作成されました。
アトリビュートエディターでunitConversionノードの値を確認すると「57.296」という値が設定されています。
こちらもMayaの内部計算がAngularは「radians」で計算されているとすると、角度をラジアンに変換している値と考えられます。「1ラジアン = 180/π度」を実際に計算すると「57.29577951307855」なので「57.296」と一致します。
<rotate→rotate>
直接接続されました。
unitConversionは作成されません。
<rotate→scale>
unitConversionが作成されました。
アトリビュートエディターでunitConversionノードの値を確認すると「57.296」という値が設定されています。
rotate→translateと同様に角度をラジアンに変換している値と考えられます。
<scale→translate>
直接接続されました。
unitConversionは作成されません。
<scale→rotate>
unitConversionが作成されました。
アトリビュートエディターでunitConversionノードの値を確認すると「0.017」という値が設定されています。
translate→rotateと同様に角度をラジアンに変換している値と考えられます。
<scale→scale>
直接接続されました。
unitConversionは作成されません。
Linearを「centimeter」、Angularを「radians」で確認
<translate→translate,rotate,scale>
直接接続されました。
unitConversionは作成されません。
<rotate→translate,rotate,scale>
直接接続されました。
unitConversionは作成されません。
<scale→translate,rotate,scale>
直接接続されました。
unitConversionは作成されません。
◆まとめ
環境設定で単位を変更したとしてもMayaのヘルプに記載されている通り、Maya の内部計算は、センチメートル、ラジアン、秒の単位を使用して行われており、単位の異なる数値アトリビュートを接続する際にはunitConversionを作成して変換する、仕様であることが確認できました。
Linearをmeterに変更しての説明は割愛しますが、内部単位が異なる場合はunitConversionが作成されて、Linearは「centimeter」、Angularは「radians」に変換するための値が設定されます。
各アトリビュートの内部単位を気にしなくても接続する際にMayaが自動で変換してくれますが、変換時の誤差は含まれています。unitConversionができないようにアトリビュートやノードを接続するのが理想ですが、角度をドライバーにしてsetDrivenKeyで移動制御する補助骨などはとても良く使用する機能なので、各アトリビュートの単位や型を意識しつつ、用途に応じて接続方法を判断するのが良いと思います。
今回の記事が、リグ制作の何かしらのお役に立てると幸いです。
ではまた。
本記事を書くにあたり、株式会社スクウェア・エニックス 佐々木 隆典氏の「Maya®のしくみ 基礎から学ぶDGとパラレル評価、そしてキャッシュプレイバック」を参考にさせていただきました。佐々木様にはこの場を借りて深く御礼申し上げます。
※免責事項※
本記事内で公開している全ての情報について、その完全性、正確性、適用性、有用性等いかなる保証も行っておりません。
これらの情報のご利用により、何らかの不都合や損害が発生したとしても、当社は何らの責任を負うものではありません。
自己責任でご使用ください。