• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Mayaカメラデータunityインストール
 

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

on

  • 7,404 views

UniteJapan 2013での講演資料です。 ...

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

Statistics

Views

Total Views
7,404
Views on SlideShare
5,402
Embed Views
2,002

Actions

Likes
11
Downloads
37
Comments
0

10 Embeds 2,002

http://terasur.blog.fc2.com 1912
https://tal2tot4uenli8d3lphbjvrrl237cfes-a-sites-opensocial.googleusercontent.com 32
https://twitter.com 24
http://admin.blog.fc2.com 12
http://www.newsblur.com 11
http://rssminer.net 3
https://tweetdeck.twitter.com 3
http://feedspot.com 2
http://webcache.googleusercontent.com 2
http://translate.googleusercontent.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • Mayaカメラ設定をUnityにインポートするTipsUnity Technologies Japan 合同会社コミュニティエバンジェリスト小林 信行
    • このセッションについてMayaのカメラの位置、回転、ニアおよびファークリッピングプレーン、FOVをUnityに移すためのHow-Toです。本セッションでは、このような作業をしたい場合の基本的な考え方をご紹介します。多分、同じような方法で様々な値をMayaから引き渡すことができますので、皆さんも研究してみてください。面白いTipsを発見した方は、ぜひfacebookの『Unityユーザー助け合い所』のほうにご報告を!
    • このセッションについて本セッションの関連データは以下にアップしてあります。http://d.pr/lLDx
    • このセッションでお話すること一言で説明しちゃいますと、「MayaからUnityに直接カメラパスは引き渡せないので、カメラパス等のアニメーションデータを焼き付けたロケータを代わりにUnityに引き渡してやり、Unity側ではロケータが持っているアニメーションデータをメインカメラに引き渡すスクリプトを作成しアタッチします」ということだけなのですが、3つ問題があります。• FOV(MayaだとAOV?)がキーが打てるアトリビュート として存在してない• なので、そもそもMayaでアニメーションキーが打てない• だから、ドリブンキーとかも使えない→どうする?
    • このセッションでお話すること答えを言ってしまうと、• FOVは、焦点距離(focalLength)と垂直画角(verticalFilmAperture)から計算してもとめる• Maya側のFOVのキーは、焦点距離にキーを打つ• ロケータに、Mayaメインカメラの必要なアトリビュートを MELで転送し、シミュレーションベイクして、FBX形式で取り出すこれで終了です。後は具体的なやり方になります。
    • サンプルシーン:Maya上でのシーンビュー
    • サンプルシーン:Maya上でのカメラビュー
    • サンプルシーン:Unity上でのカメラビュー
    • Maya側での作業
    • カメラにアニメーションをつける● 以下、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は内部計算値なので、キーは打てないので注意
    • カメラにアニメーションをつける
    • ロケータを作成する● Create>Locator からロケータを作成する● ロケータ名をlocator_Cameraにするコンストレインまで終わった状態
    • ロケータをカメラにコンストレインする● PointとOrientで、ロケータの位置と回転をカメラに  コンストレインする● Main_Camera→locator_Cameraの順に選択して、  Constrain>Point□、Constrain>Orient□でコンストレインする● オプションでMaintain offsetはチェックアウトしておく● PointとOrientで2回コンストレインをおこなう● 結果、locator_Cameraの位置と回転にカメラと同じ値が入る (ボックスが青くなる)
    • ロケータのスケール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;
    • ロケータのスケールY値にファークリッピングプレーンを転送する● 同じく、Scale Yを選択し、Expressionを追加する。Scale Yには、ファークリッププレーンを納める// ScaleYの処理// 使用する変数の宣言float $fcp;// farClipPlaneを取得$fcp = `getAttr Main_CameraShape.farClipPlane`;// カメラのscaleXにfarClipPlaneを納めるsetAttr locator_Camera.scaleY $fcp;
    • ロケータのスケール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
    • ロケータの値をシミュレーションベイクする● locator_Cameraのチャンネルボックスより、Translate X∼Scale Zまで選択する● Edit>Keys>Bake Simulationsより全キーをシミュレーションベイクする● もしFカーブを最適化したいなら、グラフエディタを開き、Translate X∼Scale Zまで選択した  後で、グラフエディタのメニューよりCurves>Simplify Curveで最適化するシミュレーションベイクが終了すると、全フレームにキーが打たれます。ボックス内は赤くなります
    • FBXで出力する● アニメーションしているオブジェクトおよびシーンオブジェクト等とは別に  locator_CameraのみFBXに出力する● locator_CameraのみのFBXをUnityではカメラオブジェクトのパスとして使用します● 例として、アニメーションしているボールをBall.fbx、床をFloor.fbx、  local_CameraをMayaCamera.fbxとして出力したものとします
    • Unity側での作業
    • 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を選択してプレイすると、ギズモが動くことが確認できると思います。
    • FBXデータの取り込みデフォルト値 Maya上でCentimeter単位で作業している場合には、FBXの出力単位をCentimetersに設定した上で、読み込み時にこちらの値を1にしますMaya上でMeter単位で作業している場合には、FBXの出力単位をCentimetersに設定して出力すると、デフォルト値のままでMaya上のサイズとUnity上のサイズが一致します。
    • 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のカメラの向きが一致する
    • 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;}}
    • ご静聴ありがとうございました!