2012年8月8日水曜日
続・物理挙動っぽいカメラを作ってみた
ローカルな勉強会で発表するため、過去に作った物理カメラを
久しぶりに改造してみた。(過去記事はこちら)
【前回からの変更点】
・パラメータ連動の計算をより正確なものに変更
・ズームレンズのf値自動調整を削除
・画像素子サイズを追加。35mm、APS-C、フォーサーズから選択。
画像素子サイズは設定に応じて焦点距離・F値に補正が掛かる
・シャッター速度に連動するモーションブラーを実装
【追加アトリビュート】
物理カメラは以下の追加アトリビュートのみで設定できる。
・焦点距離(レンズ)
・開放F値(レンズ)
・画像素子サイズ
・絞り
・シャッター速度
・ISO感度
【レンダリング作例】
【画像素子サイズ比較】
画像素子以外変更していないので35mmではオーバー気味に
なっているが、画角・露出が変化しているのが確認できる。
【モーションブラー比較】
シャッター速度を落とす事でモーションブラーが発生する事と合わせて、
露光調整の為に絞りを変更している影響で被写界深度にも違いが
出ていることが確認できる。
相変わらず自習・趣味の域をでない内容だが、手軽にリアリティが
得られるので、急ぎの仕事などでは役に立つかもという感触が得られた。
【追記】
ここで作ったカメラRIGを使い、CEDEC2014「スカルプトマイスター!」の
完成動画をレンダリングさせて頂きました。
【CEDEC 2014】スカルプト・マイスター!
プラスチカ 浅井真紀 / 沙悟浄・完成動画
カプコン 黒籔裕也 / 猪八戒・完成動画
ModelingCafe 山家遼 / 孫悟空・完成動画
Double Negative Visual Effects 田島光二 / 三蔵法師・完成動画
2011年10月23日日曜日
法線とカメラ方向の角度をシェーディングに使用する
カメラから見た各フェースの向き情報をシェーディングに利用する方法。
1.HyperShadeなどから、
[Utilities]→[Sampler Info]ノードを作成
[2DTexture]→[Ramp]ノードを作成
[Surface]→[Surface Shader]ノードを作成
Sampler Infoノードのアトリビュート[Facing Ratio]は法線とカメラ間の角度によって
0~1の値を生成する(法線とカメラが正対=1、法線とカメラが直角以上=0)
2.[Sampler Info]ノードの[Facing Ratio]を[Ramp]ノードの[V Coord]に接続。
[Ramp]ノードのカラーを任意に設定する
[Ramp]ノードの[Out Color]を[Surface Shader]ノードの[Out Color]に接続。
以上で、カメラと法線の向きによって色が変化するマテリアルが完成。
これを基本として接続先や設定を工夫することで色々な効果に応用できる。
以下はこれを利用してリムライトを付加したLambertマテリアル。
上が通常のLambert、中がリムライト付加版。下がそのノード構成。
欠点として、[Facing Ratio]はサーフェイス法線の向きしか扱えないので、
バンプやノーマルマップによる法線変化の効果は反映されない。
それを可能にする方法もあるが、ちょっと複雑になったので次回以降に記載予定。
2011年4月24日日曜日
フラットシェーディングの設定
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]の値を上げる
【ディレクショナルライト】
LightAngle 0 , ShadowRays 1
LightAngle 8 , ShadowRays 50
【ポイントライト】
LightRadius 0 , ShadowRays 1
LightRadius 20 , ShadowRays 30
綺麗なボケが作成できるが、擬似的なものなので正確性はエリアライトに劣る筈。
2011年1月10日月曜日
ハイディティールモデルからのノーマルマップ生成
ZBrushやその他スカルプトツールなどで作成したハイディティールモデルから
ノーマルマップを生成し、ローポリゴンモデルに転写する方法。
転写される側のローモデルは、事前にUV展開しておく。
その際、展開したUV同士が重ならないように配置する。
ハイモデルのUVは特に考慮する必要はない。
1.[Lighting/Shading]→[Transfer Maps…]を選択。
2.開いたウインドウの左上[Edit]→[Reset Setting]で初期設定に戻す。
3.初期設定の状態から以下の項目を変更する
・ローモデルのみを選択した状態で、[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ではノーマルマップは確認出来ないので注意。
2010年9月27日月曜日
トゥーンシェードとテクスチャカラーのブレンド
Maya標準のトゥーンシェーダは、プリセットされたランプシェーダ。
そのランプシェーダは、カラー設定を"Color"アトリビュートに対して
行うので、そのままではテクスチャーを接続する場所がなくなり、
「トゥーンシェード+テクスチャ」という表現はできない。
これを実現する為には以下の方法を用いる。
1.Hypershadeを開き、以下のノードを用意する。
括弧内はHypershadeウィンドウ左側の"Create"タブ内の場所。
・RampShader(Maya→Surface)
・SurfaceShader(Maya→Surface)
・File(Maya→2DTexture)
2.作成したRampShaderにグレースケールでトゥーンのカラー設定を行う。
3.作成したFileノードにテクスチャ画像を接続する
4.1で作成した全ノードを[Work Area]にドラッグし表示
5.MultuplyDivideノード(Maya→Utilities)を作成(直接Work Areaに出来る)
6.Work Areaに4つのノードが表示された状態で、以下のように接続を行う。
・FileをmulitiplyDivideのinput1に接続
・RampShaderをmulitiplyDivideのinput2に接続
・MulitiplyDivideの"output"をsurfaceShaderの"outColor"に接続
出来上がったsurfaceShaderをモデルにアサインすれば完成。
リアルタイム表示では正しく結果が出ないので注意。
レンダリングすると正しく描画される。
もっと簡単な方法がありそうな気もするので、今後も要調査。
2010年9月21日火曜日
バーテックスカラーの焼付け
レンダリングで作成した陰影の結果をバーテックスカラー(Color Set)に格納する方法。
バーテックスカラーを用いると光源計算を行わなくても事前に計算された
陰影を表現できる為、処理負荷を軽くすることが出来る。
リアルタイム(ゲームなど)の背景表現では定番の手法。
バーテックスカラーは当然ディティールの精度が頂点数に比例するため、
大きな面などはある程度分割する必要がある。
サンプルデータの板は20×20に分割している。
【シーン設定】
ライティングはmentalrayでのレンダリングで意図した結果が出るように調整する。
サンプルでは赤と青のポイントライトを1つずつ配置し、
FGを用いるため、BGカラーをグレーに変更している。
Render Settingsは「Preview:Final Gather」のデフォルト設定。
【mentalrayでのレンダリング結果】
ここまでの準備が出来たら、カラー焼付けの作業を行う。
1.レンダーセッティングを開き[render using]を[mentalray]に変更。
2.モデルを選択し、[Lighting/Shading]→[BatchBake(mentalray)■]を選択。
3.開いたオプションウインドウの左上[Edit]→[Reset Settings]で初期設定に戻す。
4.初期状態から以下の項目を変更する。
・[Bake to:]を[Vertices]に
・[Use bake set override]にチェック
・[Color mode]を[Light and color]に
・[Convert and Close]か[Convert]をクリック(その後に多少時間が掛かる)
モデルにColor Setが設定されていない場合は新たにColor Setが作成される。
事前にColor Setが存在し、選択されている場合はそれに上書きされる。
レンダリングにシャドウを用いている場合、
[Bake shadow]にチェックを入れると影も考慮したカラーが作成される。
ただし影の形状を正確に焼き付けようとすると相当なポリゴン分割が必要になるので注意。
【影の焼付けを行った結果】














