fc2ブログ

    Maya2014用プラグインをVisual Studio 2010 Expressでコンパイルする

     そろそろアチキもMaya2014に移行せねばと思いつつも、未だに2012の現実・・・
     って事で一念発起して2014へ移行だぁぁぁ!!

     となると自前のプラグインとかも移行しないといけないっすね。Maya2014APIからはVisualStudio2010が対応となりました。ついに2010です!!(時代はもう2014ですが・・・)
     しかしガッツリプラグイン書ける人でもないのでで、無料のVisualStudio2010Expressでコンパイルしようと思ってみましたが、記事探してもVisualStudio2010ExpressでのAPIのコンパイル方法が無かったんで、ここにメモります。

    続きを読む

    スポンサーサイト



    Locator ver.3

     以前のロケータのプリセット形状に、ポリゴンを貼り付けました。
    locator_03.jpg
     あ~、やっと出来たぁぁ\(^o^)/ ポリゴンの描画ってこんなに面倒なんですね・・・
     自分でやってみると、オペレーションしてる時は当たり前に使ってる事が、こんなに難しい事だったとは・・・と実感しますねぇ。 ワシ無能杉ワロタ

    locator_04.jpg
     曲線のあるプリセットは、サンプル数によってカクカク度が変わるようにしました。
     Mayaのノードだと当たり前の機能ですが、コレをやるには裏で計算を走らせる必要があります。いざ自分でやってみると難し過ぎww  意味がわからないんで、参考文献をパクリまくりましたwww元にコードに落とし込みました。


     さて、上記状態ではライティング無し状態で非常に見づらいんで、陰影をつけたいですね。
     しかしOpenGLでシェーディング(陰影)をつけるにあたって、その前に各頂点に法線情報を持たせないとダメなんですね。なんと面倒な・・・
     OpenGLでポリゴンを描画する時、デフォルトではスムースシェーディングがONになってるらしいので、とりあえず法線は作成する面に垂直に立つベクトルを外積でもとめて、適応。したつもりがちゃんとならず・・・困り果てること1週間、またまた通りすがりの天才プログラマー様にお助けを頂き、無事解決できました!!
     今後へのメモとして、方法論を残しておきます。それぞれ形状は原点に作られることを前提とした話です。
    ■球
     球の各頂点の法線は、頂点の座標を正規化したものと同一
    今回もっとも目からウロコ的なTipsはこれです。確かに言われてみればなるほど~って感じなんですが、頭の硬いワシにはこの答えはでなかった。。。
    ■シリンダー
     シリンダー側面の頂点の法線は、その頂点座標を正規化してY軸を0にしたものと同一
    球がでれば、当然シリンダーも簡単に求まりますね。一所懸命ベクトルの外積で頑張ってたのが阿呆らしくなりますw

     ライトの方向はdrawメソッドで与えられるM3dViewの逆マトリクスのZ成分だけ頂けばOK。これでライティングされたポリゴンの描画も可能になりました。
    locator_05.jpg


    いやぁ、ポリゴンの描画って裏でこんなに色々やってたのね・・・
     そう考えると今数百万~数千万ポリゴンが普通に動くのって、恐ろしいです((((;゚Д゚))))



     ついでにYoutubeで初動画アップロード! 一回目は失敗して、世の中の厳しさをしっかり痛感しました。
    その後、作成した動画を一度BatchDOOと言うフリーのMP4エンコーダを使用したあとに再度アップロードしたら、今度は無事アップロード完了。世の中難しいことだらけですよ。。。

     まだ未完成ですが、とりあえずこのロケータの雰囲気はわかるであろう動画。ひとまず動画アップは成功したんで、次はいよいよトラックさんのデモリールでも上げてみますかねぇ~

    ロケータできた!

    ■カスタムロケータ
    locator.jpg
     ようやっとカスタムロケータが出来ましたぁ~! ばんざ~い\(^o^)/

    今回ロケータを作成するにあたって、色々な方のHPを参考にさせて頂きました、ありがとうございました!
    ↓今回参考にさせて頂いた方々のHP一覧。今後の自分へのメモも込めて・・・
    • たっきゅんのガ☆チンコ開発日記
      C++の準備から各種プラグインの作成方法まで詳しくのせて下さってます。ほとんどこのサイト様の教えにそって作った感じですw
    • memlog
      とにかく色々なことを検証されてる情報ブログ。プラグインにかかわらず色々参考にさせて頂きました 。
    • pythonを使ったmayaプラグインの作り方 -Locatorノード編
      デジタル・フロンティアさんのコラム。Pythonでのロケータの作り方を詳細に説明して下さってます。
    • OpenGL入門
      OpenGLの描画に関して詳しく段階を追って説明して下さってます。描画関係はかなり参考になりました。



     それにしてもワシ自身C++まともに触ったことなかったんで、C++の基礎レベルでつまづきまくりでした。
     特に今回、意外な部分で躓いたのが、形状のスイッチ。上記画像のロケータは1種類のロケータで、プリセットアトリビュートによって形状が変わります。これらをスイッチする時に、draw関数の中でswitch文で振り分けるワケですが、caseの中にダラダラ描画命令をかくのはカッコ悪いので、それぞれのshapeを描画するクラスを作りました。
     それらは一つの基底クラスからの派生クラスで、switch文で各形状を描画するクラスのインスタンスを変数に割り当て、描画メソッドを呼べばOKと言う形にしたかった訳です。
    (例えば描画メソッドを持つRootクラス、Rootクラスから派生した球を描画するSphereクラス、箱を描画するCubeクラスみたいな感じ)

     が! Pythono場合、変数にインスタンスを入れる際動的に変わってくれるので問題なかったのですが、C++の場合は変数を宣言する際にあらかじめ型も宣言しとかないといけない、しかし入れたいオブジェクトはSphere型だったりCube型だったりで、型が一致しないワケです。
     どうにもこうにもならず、通りすがりの天才プログラマに教えを請い、ようやく解決しましたので、メモを残しときます。
    (基底クラスをRoot、球描画クラスをSphere、箱描画クラスをCubeとし、それぞれdrawメソッドを持っていると仮定)
    //基底クラスのポインタを作成
    Root *drawer;
    
    switch( drayStyle ){
        case 1: //Sphereの場合
            drawer = new Sphere();
            break;
        case 2: //Cubeの場合
            drawer = new Cube();
            break;
    }
    
    //描画メソッドを呼ぶ
    drawer->draw();
    
     ポイントは、最初に基底クラスの”ポインタ”を作成すること、振り分け時にはポインタ変数にnewを使用してインスタンスを渡すこと。
     うん、こらわからんわ・・・w
     ありがとうプログラマさま


    C++勉強の道のりは長そうです

    Mayaでプラグイン

     Pythonでロケータを作ってみました。

     が、重い・・・ロケータ1000個くらい出しただけで1.5fpsとかになっちゃいました。コードが悪いのか・・・しかも、Maya2011からMaya2012へのバージョンアップの段階でMScriptUtil周りの仕様が変わった(廃止?)っぽくて、結局バージョンごとに管理が必要に・・・
     Pythonだと同一コードでも複数バージョンでも使えるかなぁ~と言う怠け者精神満載で期待してた部分もあったのですが、これだとその旨味もあんまりなさそうです。(本当はよくないんでしょうけど)

     もう色々面倒になってきたので、結局C++で作成する方針に変更します。
     ・・・が、C++なんてやったことな~い\(^o^)/オワタ まずはコンパイル環境を整えるためにVisualC++2008Express Editionをインストールし、Maya Plugin Wizardなるものを入れてみたりしてみたのですが、うまくいかず。意味わかりません(ーー;)

     諦めきれず色々ググった結果、下記サイトさまで物凄く丁寧にMayaプラグイン導入までの手続きを説明して下さってました。大変感謝!!
    [Maya]プラグイン開発環境の構築(VC++2008/VC++2010)
    [Maya]MayaPluginWizard2.0を、VC++2008/2010 Expressで使う方法

     無事環境構築終了~、とりあえず適当に触ってみますか!
    プロフィール

    Eske

    Author:Eske
    萌えイラストレーターを目指す3DCGイラストレーター。
    現在ポケモンカードゲーム、ガンダムトライエイジ、ガンダムコンクエスト、妖怪ウォッチとりつきカードゲームなどで3DCGを使用したイラストレーターとして参加中。

    主にここでは日々気づいたメモなんかを残してます。
    イラストのお仕事も受け付けております。ココのメールアドレスからご連絡できますので、お気軽にご相談下さい。

    最新記事
    最新コメント
    カテゴリ
    最新トラックバック
    月別アーカイブ
    検索フォーム
    リンク
    QRコード
    QR