2010年5月28日金曜日

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

以前からフォトリアルな画作りにはカメラ(リアル・CGとも)の勉強がもっと必要だと
感じていたので、実際の制作に役立つかはさておき、自由研究的なノリで作ってみた。
画角、トーンマップ、被写界深度が正しく連動するカメラ。



内部的にでたらめな計算が多いので、物理的(Physical)というよりは現象的、
「Phenomenon Camera」と言った方が正確かもしれない。 詳細は以下に。


【制作目的】
 HDR環境下で、実在のスチルカメラと同じ設定のみを用いて、現実に近い
 レンダリングイメージが作れるカメラを目指す。
 現実のカメラの知識のみで絵作りが出来る事が目標。
 画角・トーンマップ・被写界深度の物理的な相互連動に加え、クオリティと
 計算負荷の自動コントロールも行う。

【条件・設定】
 光源はHDR。マテリアルは物理的に正しいシェーダを用いて、正しい
 ダイナミックレンジを持ったシーンを用意する。

 レンズは14~54mm、f2.8~3.5のズームレンズという設定。
 ズームに合わせてリニアにf値が変化するものとする。
 Aimカメラをベースとし、オートフォーカスを実現する。
 カメラシェイプノードに、一般的なスチルカメラの設定項目を
 エクストラ・アトリビュートとして追加。
 そのパラメータを使って各アトリビュートのエクスプレッションを作成していく。
 追加アトリビュートは以下の5つ。

 ・焦点距離
 ・開放F値
 ・絞り値
 ・シャッター速度
 ・フィルムのISO感度


【エクスプレッションの構築】
 エクスプレッションで以下のように計算を行い、関連付けしていく。

  ・焦点距離 から 開放F値 を算出
  ・開放F値絞り値 から 最終的なF値 を算出
  ・合焦距離焦点距離最終的なF値 から 被写界深度 を算出
  ・最終的なF値シャッター速度ISO感度 から トーンマップを算出
  ・被写界深度 から レイサンプル数 を算出
 
 最後の項目はカメラと関係なく、クオリティと負荷のバランスのための設定。
 レンダー結果を比較すると、ボケの面積が広いほどノイズが多かったので
 被写界深度が浅い(ボケが多い)ほどサンプル数が上がるように設定した。
 
 
【完成したカメラでのレンダリング】
 いろいろな設定でのレンダー結果。
 
F001
① f=32mm,1/140sec,F1.4,ISO100,距離113.5cm
 
F060
② f=14mm,1/140sec,F1.4,ISO100,距離113.5cm
 
F120
③ f=54mm,1/140sec,F1.4,ISO100,距離113.5cm
 
F180
④ f=20mm,1/140sec,F1.4,ISO100,距離40.2cm
 
F240
⑤ f=20mm,1/140sec,F1.4,ISO100,距離63.8cm
 
F300
⑥ f=20mm,1/140sec,F1.4,ISO100,距離19.1cm
 
F360
⑦ f=20mm,1/140sec,F1.4,ISO100,距離67.5cm
 
F420
⑧ f=20mm,1/140sec,F4.0,ISO100,距離67.5cm
 
F480
⑨ f=20mm,1/140sec,F1.0,ISO100,距離67.5cm
 
・レンズが広角になるほど画面が明るく、被写界深度が浅くなる(①②③)
・被写体(合掌距離)が近いほど、被写界深度が浅くなる(④⑤⑥)
・絞りが大きいほど画像が暗く、被写界深度が深くなる(⑦⑧⑨)
 
というような連動が割と自然に実現できた気がするので、今後しばらく使ってみて、
さらに精度を上げてみようと思う。



2010年5月20日木曜日

オクルージョンマップの生成

Aomap_01

このブログのアクセス解析を見たら、検索フレーズのトップが「オクルージョン」だったので、
もしかしたら多くの方が探してるのはこっちかも、と思って書いてみた。
という事で、アンビエントオクルージョンマップ(テクスチャ)の生成方法。
 
 
 
Aomap_02_2

オクルージョンを作成するモデルは、事前にUV展開しておく。
その際、展開したUV同士が重ならないように配置する。
 


1.レンダーセッティングを開き[render using]を[mentalray]に変更。
 
2.モデルを選択し、[Lighting/Shading]→[BatchBake(mentalray)■]を選択。
 
3.開いたオプションウインドウの左上[Edit]→[Reset Settings]で初期設定に戻す。
 
4.初期状態から以下の項目を変更する

Aomap_03

 ・[Use bake set override]にチェック
 ・[Color mode]を[Occlusion]に
 ・[Orthogonal reflection]にチェック
 ・[Prefix]に任意のテクスチャファイル名を入力
 ・[X resolution]に任意のテクスチャ横サイズを入力
 ・[Y resolution]に任意のテクスチャ縦サイズを入力
 ・[File format]から任意の画像フォーマットを選択
 ・[Bake to one map]にチェック
 ・[Convert and Close]か[Convert]をクリック(その後に多少時間が掛かる)
 
 
 
Aomap_04
     【出来上がったオクルージョンマップ】
 
  
生成された画像はカレントプロジェクト内の、
\renderData\mentalray\lightMap\」に保存される。
 
画像サイズが充分なのに画像が荒く感じる場合は[Occlusion rays]の値を上げる。
ノイズが多く感じる場合は[Number of samples]の値を上げ、アンチを強くかける。


 
 
最近多くの方にアクセス頂いてるようです。ありがとうございます。
間違いやわかりにくい点などありましたらお教え下さい。



2010年5月18日火曜日

押し出したフェイスなどの一体性を保持する

押し出し・抽出・複製を行う際に選択した連続する面の一体性を保持する/しないの設定方法。
 
1.一体性の保持/非保持
 
Keepface00
 
[Edit Mesh]→[Keep Faces Together]にチェックを入れる/外す。
 
 
 
Keepface01
   【チェックが入っている場合の押し出し】
 
 
Keepface02
   【チェックが入ってない場合の押し出し】


 
2.マーキングメニューからの切り替え
 
Keepface03
 
押し出し・抽出・複製を行った後でマニピュレータが表示されているときに、
Ctrl+Shift+右クリック、表示されるマーキングメニューから
[Keep Faces Together]を選択して切り替えることもできる。
 
 



2010年5月15日土曜日

色々なアニメーションをキーフレームアニメに変換する

パスアニメコンストレインダイナミクスなどキーフレーム以外の方法で
アニメーションさせたものを、キーフレームアニメに変換する方法。
アニメーションのベイク(焼付け)。
 



Bakesim_01
       【サンプルのパスアニメモデル】
 
1.変換する対象を選択する。
2.[Animation]→[Edit]→[Keys]→[Bake Simulation■]を選択。
3.オプションウインドウで各種設定を行い[Bake]ボタンで実行。
 
 

【Bake Simulation Options】
 Bakesim_02
 
[Hierarchy]
 ・Selected・・・選択オブジェクトのアニメのみベイク
 ・Below   ・・・選択オブジェクト以下の階層全てのアニメをベイク
[Channels]
 ・All keyable      ・・・選択オブジェクトのキー設定可能な全てのアトリビュートをベイクする
 ・From Channel Box・・・チャンネルボックスで選択されているアトリビュートのみベイクする
[Driven channels]・・・ドリブンキーをキーセットに含む
[Control points]・・・変形可能な制御点(バーテックス、CVなど)のアニメをキーセットに含む
[Shapes]・・・シェイプノードのアニメをキーセットに含む
[Time range]
 ・Time Slider・・・タイムレンジの制限なし
 ・Start/End・・・下枠のStart timeとEnd timeで指定した範囲をベイクする
[Sample by]・・・何フレーム毎にキーを生成するか。1で全てのフレームにキーが打たれる
[Keep unbaked keys]・・・ベイクしていないアニメーションを保持する
[Sparse curve bake]・・・最小限のキーのみでファンクションカーブを作成する
[Disable implicit control]・・・IKハンドルなどのコントロール効果を無効にする
 
 
Bakesim_03
 【ベイク前のファンクションカーブ(motionPath)】


Bakesim_04
【ベイク後のファンクションカーブ(Translate X,Y,Z)】



2010年5月7日金曜日

Maya2011 BonusTools 配布開始

Bonustools01



一昨日からThe AreaサイトにてMaya2011用のBonusToolsの配布が始まったので、
さっそくインストールしてみた。
 
私は問題なく入れることが出来たが、内外問わずインストール失敗の報告がある様子。
最近のバージョンでは試していないがそもそもWindowsVista以降、
普通にインストール出来ない不具合があったのだが、それは改善されているのだろうか?

うまくインストールできなかったら、過去記事のインストール手順がおすすめだが、
成功しなかったとの報告もあり、この手順も完全ではないらしい。


Maya2011BonusToolsのダウンロードはこちらから
(ダウンロードにはThe Areaへのログインが必要です)


さて、今回のBonusToolsでの新機能はHelpによると、
"Auto Unwrap UVs Tool" というUV展開ツール1つだけ。

展開方法などを設定後、開くエッジを選択し実行するとUVが展開される。
各設定の内容をわかる範囲でメモ。(誤訳あるかもしれないので参考程度に)
 
 
【Auto Unwrap UVs Tool】
 【UV Shell Creation】
   [Uniform Face Method]・・・UVスペースでのUVの各フェイスを、同じサイズにする
   [Proportional Face Method]・・・3D空間上のサイズに沿って、各フェイスをスケーリング
   [Basic Unfold]・・・シンプルなアルゴリズムを用いてUVを展開する
   [Advanced Unfold]・・・特定の軸を基準に、対称を考慮しつつ展開する

   [Initial Projection]・・・ Advanced Unfold使用時のみアクティブになる。軸の指定。

 【UV Shell Layout】
   [Uniform Fit]・・・UVが0~1のUVスペース内で歪みのないレイアウトになる
   [Stretch Fit]・・・UVが0~1のUVスペースに合うようスケーリングされたレイアウトになる
   [Proportional Fit]・・・3D空間上でのサイズに基づいて、他の既存UVにサイズを合わせる
   [None]・・・UVスペースでサイズを全く変更しないレイアウト

 【Display Settings】
   [Use Test Pattern Shader] チェッカーパターンのテスト用シェーダをアサインする
   [Set Edge Color to Red] - 展開したUVのエッジを赤く表示する
   [Isolate Select Object/Faces] - 選択されているオブジェクト・フェイスのみを表示する


以前サンプルで作ったうねったパイプでこの機能を試してみたが、綺麗な長方形にUV展開
された。人物モデルなどにどの程度有効かは今後の検証次第だが、上手く使えば
便利そうな機能だと感じた。

また、この機能以外にもデフォーマウェイトのインポート/エクスポートがメニューに
追加されているが、Helpにも未記載だったので詳細不明。
おそらく機能は名前の通りだと思う。