2012年8月8日水曜日

続・物理挙動っぽいカメラを作ってみた



ローカルな勉強会で発表するため、過去に作った物理カメラを
久しぶりに改造してみた。(過去記事はこちら)


【前回からの変更点】
・パラメータ連動の計算をより正確なものに変更
・ズームレンズのf値自動調整を削除
・画像素子サイズを追加。35mm、APS-C、フォーサーズから選択。
 画像素子サイズは設定に応じて焦点距離・F値に補正が掛かる
・シャッター速度に連動するモーションブラーを実装

【追加アトリビュート】
物理カメラは以下の追加アトリビュートのみで設定できる。



・焦点距離(レンズ)
・開放F値(レンズ)

・画像素子サイズ
・絞り
・シャッター速度
・ISO感度


【レンダリング作例】



【画像素子サイズ比較】

画像素子以外変更していないので35mmではオーバー気味に
なっているが、画角・露出が変化しているのが確認できる。



【モーションブラー比較】

シャッター速度を落とす事でモーションブラーが発生する事と合わせて、
露光調整の為に絞りを変更している影響で被写界深度にも違いが
出ていることが確認できる。



相変わらず自習・趣味の域をでない内容だが、手軽にリアリティが
得られるので、急ぎの仕事などでは役に立つかもという感触が得られた。

【追記】
ここで作ったカメラRIGを使い、CEDEC2014「スカルプトマイスター!」の
完成動画をレンダリングさせて頂きました。

【CEDEC 2014】スカルプト・マイスター!

プラスチカ 浅井真紀 / 沙悟浄・完成動画

カプコン 黒籔裕也 / 猪八戒・完成動画

ModelingCafe 山家遼 / 孫悟空・完成動画


Double Negative Visual Effects 田島光二 / 三蔵法師・完成動画

2012年5月4日金曜日

[MEL]シーン内インスタンスオブジェクトの取得

タイトルの通り、シーン内のインスタンスのリストを取得するMEL。
関数にしてみたので取得後の使い道はいろいろ。
ダウンロードしたファイルをスクリプトフォルダにコピー後、
Mayaを起動すると使用できる。

「SelectInstance.mel」をダウンロード

//【シーン内インスタンスリストの取得】
global proc SelectInstance(string $ReturnList[])
{
//変数の宣言
    string $Trans[];
    string $Shape[];
    string $ListDAG[];
    int $NoT;
    int $NUM;
    int $NoI = 0;
//配列の初期化
    clear $Trans;
    clear $Shape;
//トランスノードリストの作成
    $Trans =`ls -tr`;
    $NoT =`size $Trans`;
//シェイプノードリストの作成
    for ($i=0 ; $i<$NoT ; $i++)
    {
        select -r $Trans[$i];
        clear $ListDAG;
        $ListDAG =`ls -sl -dag -s`;
        $Shape[$i]=$ListDAG[0];
    }


//インスタンスの選出
    for ($i=0 ; $i<$NoT ; $i++)
    {
        $NUM = 0;
        for ($j=0 ; $j<$NoT ; $j++)
        {
            if ($Shape[$i] == $Shape[$j])
            {
                $NUM++;
            }
        }
        if ($NUM>1)
        {
            $ReturnList[$NoI]=$Trans[$i];
            $NoI++;
        }
    }
}

【使い方】
下のサンプルのように配列を引数として渡す事により、
その配列にインスタンスのリストが書き込まれる。


//インスタンスを選択する
string $a[];
SelectInstance($a);
select -r $a;




2012年4月17日火曜日

BatchBakeをMELで使用する


リアルタイム系のデータなどでは重宝する"BatchBake"だが、
mentalrayを使った機能であるためかスクリプトでの使用法がわかりにくい。
とりあえずわかった範囲での、MELで"BatchBake"を使う方法。

メニューから選択する"BatchBake"は2つの過程で実行されている。
 1."BakeSet"ノードを作成、オブジェクトのシェイプノードに接続
 2.対象オブジェクトの"BakeSet"ノードを参照し、ベイクを実行

これはそれぞれ、以下の命令でMELから実行できる。
 1.createAndAssignBakeSet

 2.convertLightmapSetup


"createAndAssignBakeSet"は焼き込み先がバーテックスカラーか
テクスチャーかによって書き分ける。
createAndAssignBakeSet vertexBakeSet "";     //バーテックスカラー
createAndAssignBakeSet textureBakeSet "";     //テクスチャー
""内は対象となるモデル名。指定無しの場合は選択中のモデルが選択される。

実行後作成されたノードのアトリビュートを編集し、ベイクオプションを設定する。
詳細はアトリビュートを編集しながらScriptEditorを眺めるか、
listAttrでアトリビュートの一覧を取得すれば把握しやすい。

"convertLightmapSetup"はなぜかMayaのドキュメントに載っていないが、
ScrptEditorに入力すればコマンドとして認識される。
("convertLightmap"はマニュアルに載っているが、こちらは上手く使えなかった)
もちろんhelpコマンドでオプションフラグも調べる事ができるので、そちらも参考になる。

以下、サンプルのMEL。選択したモデルのライトマップをバーテックスに焼き込む。

string $TransName[];
$TransName =`ls -sl`;
for ($Obj in $TransName)
{
        createAndAssignBakeSet vertexBakeSet $Obj;
        setAttr "vertexBakeSet1.colorMode" 1;
        setAttr "vertexBakeSet1.bakeColor" 1;
        setAttr "vertexBakeSet1.colorBlending" 0;
        convertLightmapSetup -camera persp -vm -bakeSetOverride vertexBakeSet1 -showcpv;
        delete vertexBakeSet1;
}

2012年4月2日月曜日

DiamantModelingToolsによるリトポロジー作業


先日Richard Diamant氏が無償公開した”DiamantModelingTools”(最新はAlpha1.01a)
モデリングツールやUVエディタなどの機能がセットになっていてどれもかなり使いやすい。
なかでもモデリングツールはリトポロジー作業を意識した機能となっており、
標準でリトポロジー機能のないMayaにとってはとても有用なツールだと思った。
そこで今回、リトポロジー作業に絞って同ツールの使用方法をまとめてみた。


Maya2011/2012の64bitのみ対応、32bitでは動作しないので注意。


【インストール】
1."http://rd3d.com/dtools.htm"から圧縮ファイルをDL。
2.解凍したフォルダ”DiamantToolsAlpha1.0”をCドライブ直下に置く。
3.同フォルダの”modules”フォルダ中の”DiamantTools.txt”を
4.”C:\Program Files\Autodesk\Maya2012\modules”にコピー。
5.Mayaを起動、[Window]→[Settings/Preference]→[Plug-in Manager]を
 開き、[ModelingTool_201X_x64.mll]の[Loaded]にチェック。
6.初回起動時、シェルフにツール起動用のアイコンが作成される。


【ツールの起動/終了】
インストール時に作成されたシェルフのアイコンをクリックして起動。
専用のツールウインドウが開く。
DiamantModelingToolsからMayaの通常機能へ戻るには"Q"を押す。
(単に他ツールを選択するだけでは切り替わらない事がある)




【ベースモデルの指定】
1.ベースモデルの含まれたシーンを開く。もしくはシーンにベースモデルを読み込む
2.DiamantModelingToolsのウインドウを開き、[Modeling]タブに切り替え
3.[Slide On Surface of Mesh]欄の[List]ボタンをクリック、リストからモデル名を選択
(以前に別モデルを読み込んでいた場合などは[Clear Objects]で選択をクリアする)




【リトポロジーモデルの生成】

1.ツールウインドウ内Modelingタブの左側[Quad Draw]アイコンを左クリック





2.ベースモデル上で左クリックすると緑のポイントが打たれるので、これを4点配置。





3.4点の緑のポイントに囲まれた範囲を"Shift+左クリック"すると最初のポリゴンが生成される
 以降も緑のポイントを設置→ポリゴン生成を繰り返す。生成に使うポイントは設置する
 緑のポイントと既存メッシュモデルのバーテックスから任意の4点を選択できる。
 生成されるポリゴンは青い半透明でプレビューされるので、希望の状態で生成する。




※注意点
四角ポリゴンのみで制作する。三角や五角形以上のポリゴンも一応作れるが不安定
大量のポイントを一度に配置するより、こまめにポリゴンを生成していく方が動作が安定する
ポイントの削除はアンドゥで行う。



【リトポロジーモデルの編集】
ベースメッシュ上に頂点をスナップさせた状態でコンポーネントの移動やスムージングを
行う事ができる。
このツールで生成したモデル以外でも、通常のMayaの機能で作成したモデルや追加した
頂点などもベースメッシュ上にスナップさせる事ができる


・移動/スムージングの共通操作
1.ツールウインドウ内[Modeling]タブの左側[AdvancedModeringTools]アイコンを左クリック
2.ビューポート上で"中クリック+マウス移動"でブラシの拡大/縮小が出来る




・頂点/エッジ/フェースの移動
1.モデル上にカーソルを乗せると、直近の頂点/エッジ/フェースのいずれかが強調表示される
2.そのまま状態から"Ctrl+左ドラッグ"で任意の場所に移動。
ブラシのサイズに応じて周囲のコンポーネントもソフト選択される




・頂点/エッジ/フェースのスムース
1.モデル上にカーソルを乗せると、直近の頂点/エッジ/フェースの何れかが強調表示される
2.そのまま状態から"Shift+左ドラッグ"で任意の場所に移動。
ブラシのサイズに応じて周囲のコンポーネントもソフト選択される。
ボーダーエッジにスムースを掛けるとフェースが縮むので注意




以上の機能を使ってリトポロジー作業を進めるが、手順としては、
最初は大まかにメッシュを生成。必要に応じてMayaの基本機能も使ってポリゴン分割等を行い、
メッシュのスムース機能でトポロジーを整えていくと手間が少なく済みそう。
生成されたモデルは多少不安定な事もあるので、早めに保存するか
FBXやOBJでエクスポートしておく事をお勧めする。

2011年11月21日月曜日

[MEL]テクスチャファイルのパスを変更する

他人から受け取ったデータなどで、テクスチャのパスが通らずに
正しく表示出来ない時、BonusToolsの”Change Texture Paths”を
使う事が多いが、カレントプロジェクトをセットしたりといろいろ面倒なので、
もっとシンプルで乱暴なMELを作ってみた。
Maya2011から追加されたfileDialog2コマンドを使用しているので、
2010以前は非対応。そこだけ旧fileDialogコマンドに変えれば動くとは思う・・・。

【使い方】
1.HyperShade等で、テクスチャを変更したいFileノードを選択(複数可)
2.MELを実行(スクリプトエディタで"ReplaceTexPath();")
3.フォルダ選択ダイヤログが表示されるので、テクスチャのあるフォルダを選択し”Accept”
4.選んだフォルダにテクスチャがあれば差し替え、無ければスルーされる




// 【ReplaceTexPath.mel】
global proc ReplaceTexPath()
{
    string $NewPath[] = `fileDialog2 -fileMode 3 -okCaption "Accept" -dialogStyle 2`;
    string $FileLs[] =`ls -sl -type "file"`;
    for ($FileNd in $FileLs)
    {
         $TexPath =`getAttr ($FileNd+".fileTextureName")`;
         $Texname =`basename $TexPath ""`;
         $TexTest =`filetest -f ($NewPath[0]+"/"+$Texname)`;
         if ($TexTest == 1)
         {
              setAttr -type "string" ($FileNd+".fileTextureName") ($NewPath[0]+"/"+$Texname);
              print ($NewPath[0]+"/"+$Texname+"に差し替えました\n");
         } else {
              print ($NewPath[0]+"/"+$Texname+"が見つかりせんでした\n");
         }
    }
}



2011年10月23日日曜日

法線とカメラ方向の角度をシェーディングに使用する

カメラから見た各フェースの向き情報をシェーディングに利用する方法。



Rimlight_00





1.HyperShadeなどから、
 [Utilities]→[Sampler Info]ノードを作成
 [2DTexture]→[Ramp]ノードを作成
 [Surface]→[Surface Shader]ノードを作成



 Rimlight_01

 Sampler Infoノードのアトリビュート[Facing Ratio]は法線とカメラ間の角度によって
 0~1の値を生成する(法線とカメラが正対=1、法線とカメラが直角以上=0)





2.[Sampler Info]ノードの[Facing Ratio]を[Ramp]ノードの[V Coord]に接続。
 [Ramp]ノードのカラーを任意に設定する
 [Ramp]ノードの[Out Color]を[Surface Shader]ノードの[Out Color]に接続。



 Rimlight_02





以上で、カメラと法線の向きによって色が変化するマテリアルが完成。
これを基本として接続先や設定を工夫することで色々な効果に応用できる。
以下はこれを利用してリムライトを付加したLambertマテリアル。
上が通常のLambert、中がリムライト付加版。下がそのノード構成。



Rimlight_04



Rimlight_05_2



Rimlight_03_2





欠点として、[Facing Ratio]はサーフェイス法線の向きしか扱えないので、
バンプやノーマルマップによる法線変化の効果は反映されない。
それを可能にする方法もあるが、ちょっと複雑になったので次回以降に記載予定。



2011年8月5日金曜日

ホットボックスの表示不具合について

Maya2011以降、HotBoxを表示した際にMayaのメインウインドウより奥にある筈の
背景画像が表示されてしまうという不具合がある。
これはWacomタブレットのドライバとの相性が原因の場合がほとんどなので、
その対処方法。



 



1.[コントロールパネル]→[システム]→[デバイスマネージャ]を開く
2.[ヒューマン インターフェイス デバイス]→[Wacom Virtual Hid Driver]を右クリック、
 [無効]を選択
3.再起動の指示が出たらPCを再起動



 



※この操作による影響はMaya・タブレット共にない筈ですが、
 くれぐれも操作は自己責任でお願いします。