Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Mayaカメラ設定をUnityにインポートするTipsUnity Technologies Japan 合同会社コミュニティエバンジェリスト小林 信行
このセッションについてMayaのカメラの位置、回転、ニアおよびファークリッピングプレーン、FOVをUnityに移すためのHow-Toです。本セッションでは、このような作業をしたい場合の基本的な考え方をご紹介します。多分、同じような方法で様々な値...
このセッションについて本セッションの関連データは以下にアップしてあります。http://d.pr/lLDx
このセッションでお話すること一言で説明しちゃいますと、「MayaからUnityに直接カメラパスは引き渡せないので、カメラパス等のアニメーションデータを焼き付けたロケータを代わりにUnityに引き渡してやり、Unity側ではロケータが持っているア...
このセッションでお話すること答えを言ってしまうと、• FOVは、焦点距離(focalLength)と垂直画角(verticalFilmAperture)から計算してもとめる• Maya側のFOVのキーは、焦点距離にキーを打つ• ロケータに、Ma...
サンプルシーン:Maya上でのシーンビュー
サンプルシーン:Maya上でのカメラビュー
サンプルシーン:Unity上でのカメラビュー
Maya側での作業
カメラにアニメーションをつける● 以下、Mayaのカメラ名をMain_Camera、  カメラシェイプをMain_CameraShapeとする● アトリビュートエディタよりカメラシェイプ内のFit Resolution Gateを  Verti...
カメラにアニメーションをつける
ロケータを作成する● Create>Locator からロケータを作成する● ロケータ名をlocator_Cameraにするコンストレインまで終わった状態
ロケータをカメラにコンストレインする● PointとOrientで、ロケータの位置と回転をカメラに  コンストレインする● Main_Camera→locator_Cameraの順に選択して、  Constrain>Point□、Constra...
ロケータのスケールX値にニアクリッピングプレーンを転送する● locator_CameraのチャンネルボックスよりScale Xを選択し、チャンネルボックスのメニューよりEdit>Expressionを選択する● Expression Edit...
ロケータのスケールY値にファークリッピングプレーンを転送する● 同じく、Scale Yを選択し、Expressionを追加する。Scale Yには、ファークリッププレーンを納める// ScaleYの処理// 使用する変数の宣言float $fcp...
ロケータのスケールZ値にUnity互換のFOVを計算し、転送する● 最後にScale Zを選択し、Expressionを追加する。Scale Zには、FOVを納める// ScaleZの処理// 使用する変数の宣言float $fl;float $vf...
ロケータの値をシミュレーションベイクする● locator_Cameraのチャンネルボックスより、Translate X∼Scale Zまで選択する● Edit>Keys>Bake Simulationsより全キーをシミュレーションベイクする●...
FBXで出力する● アニメーションしているオブジェクトおよびシーンオブジェクト等とは別に  locator_CameraのみFBXに出力する● locator_CameraのみのFBXをUnityではカメラオブジェクトのパスとして使用します● ...
Unity側での作業
FBXデータの取り込み● カメラパスをFBXで転送する場合には、MayaとUnity側でシーンのスケールを合わせておくことが重要● FBXをUnityのProjetctウィンドウにドロップし、ドロップしたFBXをInspactorで表示し、Mo...
FBXデータの取り込みデフォルト値 Maya上でCentimeter単位で作業している場合には、FBXの出力単位をCentimetersに設定した上で、読み込み時にこちらの値を1にしますMaya上でMeter単位で作業している場合には、FBXの...
UnityのMain CameraをMayaCameraの子にする● Hierarchyウィンドウで、UnityのMain CameraをMayaCameraオブジェクトの子にします● Main Cameraのローカル座標を以下のようにします ...
MayaCameraにスクリプトをアタッチする● MayaCameraオブジェクトにMayaCameraConverterスクリプトを添付します。  このスクリプトは、MayaCameraのScale座標に入っている、ニアクリッププレーン、ファ...
ご静聴ありがとうございました!
Upcoming SlideShare
Loading in …5
×

Mayaカメラデータunityインストール

23,192 views

Published on

UniteJapan 2013での講演資料です。
Mayaのカメラ設定をUnityにインポートするTipsをまとめてあります。
サンプルファイルは以下にアップされていますので、合わせてご利用ください。
https://dl.dropboxusercontent.com/u/6488074/POSTBOX/UniteJapan/mayaUnity130415.zip

  • Be the first to comment

Mayaカメラデータunityインストール

  1. 1. Mayaカメラ設定をUnityにインポートするTipsUnity Technologies Japan 合同会社コミュニティエバンジェリスト小林 信行
  2. 2. このセッションについてMayaのカメラの位置、回転、ニアおよびファークリッピングプレーン、FOVをUnityに移すためのHow-Toです。本セッションでは、このような作業をしたい場合の基本的な考え方をご紹介します。多分、同じような方法で様々な値をMayaから引き渡すことができますので、皆さんも研究してみてください。面白いTipsを発見した方は、ぜひfacebookの『Unityユーザー助け合い所』のほうにご報告を!
  3. 3. このセッションについて本セッションの関連データは以下にアップしてあります。http://d.pr/lLDx
  4. 4. このセッションでお話すること一言で説明しちゃいますと、「MayaからUnityに直接カメラパスは引き渡せないので、カメラパス等のアニメーションデータを焼き付けたロケータを代わりにUnityに引き渡してやり、Unity側ではロケータが持っているアニメーションデータをメインカメラに引き渡すスクリプトを作成しアタッチします」ということだけなのですが、3つ問題があります。• FOV(MayaだとAOV?)がキーが打てるアトリビュート として存在してない• なので、そもそもMayaでアニメーションキーが打てない• だから、ドリブンキーとかも使えない→どうする?
  5. 5. このセッションでお話すること答えを言ってしまうと、• FOVは、焦点距離(focalLength)と垂直画角(verticalFilmAperture)から計算してもとめる• Maya側のFOVのキーは、焦点距離にキーを打つ• ロケータに、Mayaメインカメラの必要なアトリビュートを MELで転送し、シミュレーションベイクして、FBX形式で取り出すこれで終了です。後は具体的なやり方になります。
  6. 6. サンプルシーン:Maya上でのシーンビュー
  7. 7. サンプルシーン:Maya上でのカメラビュー
  8. 8. サンプルシーン:Unity上でのカメラビュー
  9. 9. Maya側での作業
  10. 10. カメラにアニメーションをつける● 以下、Mayaのカメラ名をMain_Camera、  カメラシェイプをMain_CameraShapeとする● アトリビュートエディタよりカメラシェイプ内のFit Resolution Gateを  Verticalにしておく● カメラのアニメーションで主に使用するキー ● カメラのチャンネルボックス内の    Translate X/Y/Z、Rotate X/Y/Z、Focal Length ● 「FOV変更」を記録する時には、Focal Lengthにキーを打ちます ● MayaのAngle of Viewは内部計算値なので、キーは打てないので注意
  11. 11. カメラにアニメーションをつける
  12. 12. ロケータを作成する● Create>Locator からロケータを作成する● ロケータ名をlocator_Cameraにするコンストレインまで終わった状態
  13. 13. ロケータをカメラにコンストレインする● PointとOrientで、ロケータの位置と回転をカメラに  コンストレインする● Main_Camera→locator_Cameraの順に選択して、  Constrain>Point□、Constrain>Orient□でコンストレインする● オプションでMaintain offsetはチェックアウトしておく● PointとOrientで2回コンストレインをおこなう● 結果、locator_Cameraの位置と回転にカメラと同じ値が入る (ボックスが青くなる)
  14. 14. ロケータのスケールX値にニアクリッピングプレーンを転送する● locator_CameraのチャンネルボックスよりScale Xを選択し、チャンネルボックスのメニューよりEdit>Expressionを選択する● Expression Editorが立ち上がるので、Expressionの欄にScale X用のMELをコピペする。Scale Xには、ニアクリッププレーンを納める// ScaleXの処理// 使用する変数の宣言float $ncp;// nearClipPlaneを取得$ncp = `getAttrMain_CameraShape.nearClipPlane`;// カメラのscaleXにnearClipPlaneを納めるsetAttr locator_Camera.scaleX $ncp;
  15. 15. ロケータのスケールY値にファークリッピングプレーンを転送する● 同じく、Scale Yを選択し、Expressionを追加する。Scale Yには、ファークリッププレーンを納める// ScaleYの処理// 使用する変数の宣言float $fcp;// farClipPlaneを取得$fcp = `getAttr Main_CameraShape.farClipPlane`;// カメラのscaleXにfarClipPlaneを納めるsetAttr locator_Camera.scaleY $fcp;
  16. 16. ロケータのスケールZ値にUnity互換のFOVを計算し、転送する● 最後にScale Zを選択し、Expressionを追加する。Scale Zには、FOVを納める// ScaleZの処理// 使用する変数の宣言float $fl;float $vfa;float $FoV;// シェイプノードから焦点距離を取得$fl = `getAttr Main_CameraShape.focalLength`;// シェイプノードから垂直画角を取得$vfa = `getAttr Main_CameraShape.verticalFilmAperture`;// 垂直画角と焦点距離からFOVを計算する$FoV = 2.0 * atan((0.5 * $vfa) / ($fl * 0.03937)) * 57.29578;// FOVをscaleZに納めるsetAttr locator_Camera.scaleZ $FoV;FOVの計算は以下のHPを参考にさせていただきました。http://hideapp.cocolog-nifty.com/blog/2012/12/mayafov-997f.html
  17. 17. ロケータの値をシミュレーションベイクする● locator_Cameraのチャンネルボックスより、Translate X∼Scale Zまで選択する● Edit>Keys>Bake Simulationsより全キーをシミュレーションベイクする● もしFカーブを最適化したいなら、グラフエディタを開き、Translate X∼Scale Zまで選択した  後で、グラフエディタのメニューよりCurves>Simplify Curveで最適化するシミュレーションベイクが終了すると、全フレームにキーが打たれます。ボックス内は赤くなります
  18. 18. FBXで出力する● アニメーションしているオブジェクトおよびシーンオブジェクト等とは別に  locator_CameraのみFBXに出力する● locator_CameraのみのFBXをUnityではカメラオブジェクトのパスとして使用します● 例として、アニメーションしているボールをBall.fbx、床をFloor.fbx、  local_CameraをMayaCamera.fbxとして出力したものとします
  19. 19. Unity側での作業
  20. 20. FBXデータの取り込み● カメラパスをFBXで転送する場合には、MayaとUnity側でシーンのスケールを合わせておくことが重要● FBXをUnityのProjetctウィンドウにドロップし、ドロップしたFBXをInspactorで表示し、Modelボタンを押すと、Meshesの中にScale Factorという項目があります。もしMayaとUnityとでサイズが違う場合にはこの値を調整します。デフォルトでは0.01が入っています。 ● Maya上でMeter単位で作業している場合:FBXに変換する時に出力単位をCentimetersにして、    Unity上のScale Factorはデフォルトの0.01のままとします ● Maya上でCentimeter単位で作業している場合:FBXに変換する時に出力単位をCentimetersにして、Unity上のScale Factorは、1にします。● Scale Factorを調整した後で、ProjectウィンドウからFBXモデルをHierarchyにドロップします。するとMaya上と同じスケールでモデルが表示されます。● Ball.fbx、Floor.fbxを配置したシーンに、MayaCamera.fbxを配置します。この状態でMayaCameraを選択してプレイすると、ギズモが動くことが確認できると思います。
  21. 21. FBXデータの取り込みデフォルト値 Maya上でCentimeter単位で作業している場合には、FBXの出力単位をCentimetersに設定した上で、読み込み時にこちらの値を1にしますMaya上でMeter単位で作業している場合には、FBXの出力単位をCentimetersに設定して出力すると、デフォルト値のままでMaya上のサイズとUnity上のサイズが一致します。
  22. 22. UnityのMain CameraをMayaCameraの子にする● Hierarchyウィンドウで、UnityのMain CameraをMayaCameraオブジェクトの子にします● Main Cameraのローカル座標を以下のようにします ● Position(x,y,z) = (0,0,0)、Rotation(x,y,z)= (0,180,0)、Scale(x,y,z)=(1,1,1) ● Y軸のみ180度回転させるのは、MayaとUnityで座標系が左右異なるからです● この時点で、カメラの位置と回転に関してはMayaのシーンと同じになります。UnityのMain CameraをMayaCameraオブジェクトの子にするY軸周りに180度回転すると、UnityとMayaのカメラの向きが一致する
  23. 23. MayaCameraにスクリプトをアタッチする● MayaCameraオブジェクトにMayaCameraConverterスクリプトを添付します。  このスクリプトは、MayaCameraのScale座標に入っている、ニアクリッププレーン、ファークリッププレーン、FOVの値をUnityのMain Cameraに転送するものです。using UnityEngine;using System.Collections;public class MayaCameraConverter : MonoBehaviour {Camera _camera;void Awake (){_camera = GetComponentInChildren<Camera>();}void LateUpdate (){ _camera.nearClipPlane = transform.localScale.x; _camera.farClipPlane = transform.localScale.y; _camera.fieldOfView = transform.localScale.z;}}
  24. 24. ご静聴ありがとうございました!

×