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・タブレット共にない筈ですが、
 くれぐれも操作は自己責任でお願いします。



2011年7月19日火曜日

Unfoldを活用したUV展開

Uvunfold_00

 
MayaはUVの自動展開機能が優秀なので、活用すると複雑な形状の
モデルのUVも短時間で綺麗に展開できる。


1.サンプルモデル。1スキンの髪の毛モデルで、比較的複雑な形状。
 
Uvunfold_01


2.展開しやすいようシンプルな形状にモデルを分割する。

Uvunfold_02


3.分割したモデルを選択、[CreateUVs][Planer Mapping]で適当なUVを作成。
 これは一度全てのUVボーダーのカットをキャンセルする為。

Uvunfold_03


4.平面に展開しにくい形状はエッジを選択し、[Edit UVs][Cut UV Edges]
 UVに切れ込みを入れる。

Uvunfold_04


5.自動展開の基準になるUVを1点選択する【重要】

Uvunfold_05


6.[Edit UVs][Unfold UVs ■]を選択。
 ・[Pin UVs]にチェック、
 ・[Pin selected UVs]を選択
 [Apply]で、UVが展開される。

Uvunfold_06a Uvunfold_06b


7.同様の手順を全ての分割したモデルに行った後で、モデルをマージ。
 配置の調整などを行って完成。

Uvunfold_07



実際のポリゴンの形状と展開したUVの形状が違い過ぎる結果になった際は、
オプション項目の
[Weight solver towards:]
[Optiomize to original:]
で調整を行う。
調整はどちらの値も0.5から始めると良い結果が出やすいと思う。



2011年4月24日日曜日

フラットシェーディングの設定

Constant_00
 
 
Softimageのコンスタントマテリアルのように、
カラーのみで陰影の出ないマテリアルの設定。
リアルタイムビュー(左・High Quality Renderingのみ)、
レンダリング(右)のどちらにも反映される。



Constant_01



1.lambertマテリアルを作成
2.AmbientColorを1、Deffuseを0に設定する



半透明表示も問題なく出来る。



Constant_03





2011年3月29日火曜日

自己流レンダリング手順のまとめ

最近リアル系のレンダリングによく使っている手法のまとめ。
 

 

カメラにレンズシェーダの[mia_exposure_photographic]、サーフェイスに
[mia_material]を使用することによりこれら2つの要素を物理ベースに固定した上で、
ライトの調整のみで全体のイメージを固めるやり方。
比較的シンプルに画作りが進められると思うが、カメラの知識は少し必要かもしれない。
 

  
0.レンダリングするシーンを用意する
 


    【サンプルシーンのワイヤーフレーム】
  

   
1.評価用シェーダとレンダラーを設定する

 全オブジェクトに評価用の仮シェーダをアサインする。
 とりあえず不透明素材は全て[illum-Lambert]、ガラスの部分には
 [mia_material]のプリセット[GlassPhysical]を使用。
 これは素材感を考慮せずにライト・カメラの効果のみを正しく評価するため。
 レンダラーは[mentalray]、[Quality Presets]の[preview:Finalgather]を使用。
 透明なオブジェクトが多い場合は[Quality]タブの[Raytracing]欄、
 [Refractions]と[Max Trace Depth]の値を調整。
   

  
2.カメラのトーンマップ設定を行う
 カメラのレンズシェーダに[mia_exposure_photographic]をセット。
 [mia_exposure_photographic]については以前の記事を参照
 [Cm2Factor]を1000に変更。
 その他設定は実際のカメラでこのシーンを撮る事を想定したパラメータを入力する。
 サンプルは日中の室内なので[ ISO 200、Camera Shutter 100、F Number 8.0 ]とした。
 デフォルト設定通りだが、[Gamma 2.2]も確認しておく。
 
 

 
 ここまでの作業ではライトを一切置いていないので、
 レンダリングしてもほとんど真っ黒の画像になる。
 

  
3.影用ライトを配置する
 

 全体の光の方向性と影生成の為のライトを1灯配置。
 サンプルではderectionallightを使用。
 RaytraveShadowを使って影を落とす。
 ボケ具合の調整は以前紹介のこの方法で行う。
 Intensityで光の強さを調整。ここではシーン全体の明るさではなく、
 影の落ちている場所とそれ以外の場所のコントラストを決める。
 サンプルは[Intensity 4.0]

【影用ライトを配置したレンダリング画像】
 

  
4.環境光を設定する
 

 IBLを用いてシーン全体の明るさを調整。IBLの調整は以前のこの記事から。
 環境光の効果が増すほど3.で設定した陰影のコントラストが下がるので、
 実際には3.4.を繰り返してシーンの明るさと陰影の強さを決める。
 3.4.の役割を明確に分けて考えられれば、調整は比較的簡単な筈。
 サンプルでは白ベタテクスチャで[Color Gain V:10.0]
  


      【IBLを配置したレンダリング画像】
 
 
 
5.最終的なシェーダをアサインする
 

 各オブジェクトに本番用のシェーダをアサインしていく。
 もちろん使用するのは全てmia_materialなどの物理系シェーダ。
 サンプルの床など、カラーテクスチャを使用する場合には[Gamma Corect]
 ノードを用いてデガンマ補正を行わないと正しい色が出ないので注意。
 カメラのガンマ値が2.2なのでテクスチャのガンマ値は0.45に設定。
 
 

 
   シェーダが正しく設定された後に、反射のあるマテリアルの状況に合わせて
 [Render settings]の[Refrection]の数値を必要なところまで上げる。
 ここまでで大枠では完成。
 
 
    【シェーダを設定したレンダリング画像】
 
 
  
6.仕上げ
 サンプルでは仕上げ作業として以下を行った。
 ・FinalGatherAucualtyを300、point interporiteを50に設定し、ノイズを除去
 ・mia_exposure_photographicのF Numberを5.4に設定し、全体を明るく
 ・AmbientOcclutionを別レイヤーでレンダリングして合成(方法は以前の記事を参照)
 
 


  
   【アンビエントオクルージョンの画像】
 


         【完成したサンプル画像】
 
 
 

自分のクセとしては階調を充分に使おうをとした結果、完成した絵が後に見ると
薄暗く感じる事が多い。
一般的な感覚では多少階調が飛んでも明るくメリハリのある絵が好まれる事が
多いので気をつけたいと思う。
 
 
ちょっと前になりますが、当ブログのアクセス数が10万を超えたようです。
ありがとうございます。
今回はその記念という感じでいつもより頑張って記事を書いて見ました。
間違いや疑問点などありましたら教えて頂けると嬉しいです。
今後もよろしくお願いします。




2011年3月9日水曜日

レイトレースシャドウの輪郭をぼかす

エリアライト以外のライトでレイトレースシャドウを用いた場合でも、
影の輪郭をぼかすことが出来る。



1.ライトのアトリビュート[Shadows]内の[Use Ray Trace Shadows]にチェック

2.ライトの種類によって名称が違う以下の項目の数値を上げる
 ライト毎に効果の強さは違うが、総じて数値が大きいほどボケは大きくなる
 ・アンビエントライト  ・・・[Shadow Radius]
 ・ディレクショナルライト・・・[Light Angle]
 ・ポイント/スポットライト・・・[Light Radius]

3.ボケあしが大きいほど影がノイズ状になるため、[Shadow Rays]の値を上げる


       【ディレクショナルライト】

Directionallight_n 
      LightAngle 0 , ShadowRays 1
 
 

Directionallight_b
      LightAngle 8 , ShadowRays 50
 
 
 
          【ポイントライト】

 
Pointlight_n
     LightRadius 0 , ShadowRays 1
 
 
Pointlight_b
     LightRadius 20 , ShadowRays 30
 
 
綺麗なボケが作成できるが、擬似的なものなので正確性はエリアライトに劣る筈。



2011年3月3日木曜日

Maya2012発表

今年も前年と同じく、GDCでAutodesk製品の2012バージョンが発表された。
Mayaは2010→2011の大刷新に比べると、だいぶ地味な印象。
2011は1年間のうちに、SAP含めると6バージョンリリースされているし、
2012はその延長線上かなと思った。
個人的には2011は結構気に入っているのでこのままの感じで行って欲しい。



Maya2012



すでにいろんな場所で紹介されている、動画による新機能紹介は下記(動画は英語)
http://www.autodesk.co.jp/adsk/servlet/pc/index?siteID=1169823&id=14515689



日本語の新機能一覧はボーンデジタル様のサイトが一番見やすいと感じた。
http://www.borndigital.co.jp/software/info.php?id=88&pid=1



とりあえず触ってみたいのは、MotionBuilderとUI・ソルバが統一されたというHIKかな。



2011年2月4日金曜日

保存時の作業状態を書き込まない/読み込まない

デフォルトのOpen scene/Save sceneの設定では、
保存時に開いていたウィンドウの状態やツールセッティングの
パラメータなども同時に保存/読み込んでしまう。



なので、うっかり重いシーンでRenderViewやHyperShadeウィンドウを
開いたまま保存してしまうと、スペックの低いPCでは開く事が
できないなど、トラブルの原因になってしまう。それを避ける方法。



1.[Window][Setting/Preferences][Preferences]を選択。
2.開いたウィンドウの左端、[Categories][UI Elements]を選択
3.開いた項目中[Panel Configurations]欄内、
 [When saving][When opening]のチェックを外す



Saveset_001



これによって、データのみ保存/開く事ができ、作業設定はデフォルト状態が保たれる。



個人で作業する分にはどちらかのチェックが外れていれば問題ないのだが、
複数人での作業がある場合は[When saving]のチェックを外しておくのがマナー?



2011年1月10日月曜日

ハイディティールモデルからのノーマルマップ生成

Normalmap_02
        【ノーマルマップ適用後】



Normalmap_01
        【ジオメトリのみの状態】



ZBrushやその他スカルプトツールなどで作成したハイディティールモデルから
ノーマルマップを生成し、ローポリゴンモデルに転写する方法。
 
 
Normalmap_03



転写される側のローモデルは、事前にUV展開しておく。
その際、展開したUV同士が重ならないように配置する。
ハイモデルのUVは特に考慮する必要はない。
 
 
1.[Lighting/Shading]→[Transfer Maps…]を選択。
2.開いたウインドウの左上[Edit]→[Reset Setting]で初期設定に戻す。
3.初期設定の状態から以下の項目を変更する



Normalmap_04



・ローモデルのみを選択した状態で、[Target Meshes]欄内の[Add Selected]ボタンをクリック
・ハイモデルのみを選択した状態で、[Source Meshes]欄内の[Add Selected]ボタンをクリック
・[Output Maps]欄内の[Normal]アイコンをクリックし、NormalMap設定を追加する



・[Normal map]から生成した画像の保存先を指定する
・[File format:]から画像形式を選ぶ。非圧縮フォーマットが無難。
・[Use Maya common settings]にチェック。



・[Maya Common Output]欄を開く。
・[Map width:][Map height:]で出力画像サイズを指定。
・[Transfer in:]から転写方法を選択。
  双方のジオメトリ形状の誤差が少ないなら[UV Space]が精度高く転写できる。
  誤差が大きい場合は[World Space][Object Space]の方がうまく転写できる。
・[Filter size]の数値を1.5~2.0程度に下げる。初期値ではボケ過ぎる為。



・[Bake and Close]か[Bake]ボタンを押し、ノーマルマップの生成/転写を行う。



生成後には、ローモデルにノーマルマップがアサインされた新しいマテリアルが適用される。
これを確認するにはビューポートを[High Quality Rendering]にするか(グラボ性能による)、
mentalrayを使ってレンダリングを行う。
MayaSoftwareではノーマルマップは確認出来ないので注意。



Normalmap_05
        【生成されたノーマルマップ】



2011年始のご挨拶

Newyear



すっかり遅くなりましたが、明けましておめでとうございます。
昨年末は若干更新が滞りましたが今年もぼちぼちメモ書きを続けようと思います。



今年は予想通りに進めば、



・FBX出力設定の再確認
・リアルタイムシェーダへの(何度目かの)挑戦
・ゲームエンジン「Unity」の運用
・MayaのMEL、PSのjavascript、SIのvbsの作成、運用



などに挑戦することになりそうです。
なんだかMaya関連が少ないですが…。



近しいテーマで作業されている方がいらっしゃったら、
ぜひ情報交換できればと思います。
Twitterなどにもおりますのでお気軽に。



それでは今年もよろしくお願い致します。