Unity5.6で主婦写真講座をやってみる
イメージエフェクトなどの使い方を知るために、GOROmanさんの主婦写真講座をやってみた記録です。
こんな感じになりました。
要点まとめ
- Unity5.6なので、Effects Post-processing Stackを使う。
- standard assetのImage Effectや Cinematic Imageは使わない。
- ColorSpaceをLinearにする。
- standard shaderを使う。
- 透明なものは、RenderingModeをTransparentにする。
作業内容
実際の作業は以下のとおり。
ColorSpaceをLinearにする。
なぜやるのか
Unityには、ColorSpaceという設定項目があり、「Gamma」「Linear」の2つが設定できる。 このうち、「Linear」のほうが、綺麗な絵になるらしい。
リニアワークフローでは、レンズフレアやグローのような「光モノ」の合成がよりリアルにしやすいというメリットがあります。 http://compojigoku.blog.fc2.com/blog-entry-26.html
なお、Unity5.6.0f3時点では、ColorSpaceのデフォルトは「Gamma」。
手順
Edit > PlayerSettings > ColorSpace を Linearにする。
環境光の設定(DirectinalLight削除 + IBL設定)
なぜやるのか
- IBLという手法をつかうと、フォトリアリスティックなイメージがつくれる。
- IBLを実現するにはHDR画像が必要。
- IBLで必須ではないDirectinalLightは消す。
- IBLでは、Ligthの設置が必須ではない。http://3dcg.homeip.net/3d_reading/light_camera_render/global_light/01_e.php
- 主婦写真講座では消すことを推奨している。https://twitter.com/GOROman/status/637989636841730048
イメージ ベースド ライティングはフォト リアリスティックなイメージを作成するためのテクニックです。イメージ ベースド ライティングでは、環境(Environment)テクスチャ(イメージ ファイル)を使用して、シーンを照らすことができます。 https://knowledge.autodesk.com/ja/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2016/JPN/Maya/files/GUID-A7758B82-59A7-47CE-A6F5-8754282531C1-htm.html
IBLを実現するには HDRI (High Dynamic Rengi Image) と呼ばれる特殊なイメージフォーマットの画像が必要になります。
通常、コンピューター上のイメージは、RGB (Red / Green / Blue ) の 3チャンネル 256階調 のグレースケール画像で表現されていますが、256階調では光源(ライト)に必要な輝度をカバーする事が出来ません。 そこで256階調を超えるダイナミックレンジを持つ特殊な画像が必要となります。 http://3dcg.homeip.net/3d_reading/light_camera_render/global_light/01_e.php#ibl
手順
- 最初からシーンにある、Directional Lightを消す。
- IBL用のSkyboxとして使えるアセット https://www.assetstore.unity3d.com/jp/#!/content/34761 を購入してインポート。
- Window > Lighting > Settings > SkyboxMaterial を 2k_Modern_Loft にする。
なおこのアセット、2017年5月現在では有料になっている。無料でやりたいなら、http://www.hdrlabs.com/sibl/archive.html の画像を使わせていただくとよいらしい。
Tda式初音ミクのインポート
なぜやるのか
手順
- MMD4Mechanim をダウンロード、解凍してAsset/ 配下に配置
- Tda式初音ミク・アペンドVer1.10をダウンロード、Asset/ 配下に配置
- Tda式初音ミク・アペンド_Ver1.10.MMD4Mecanim を選択。
立ちポーズのアニメーション設定
なぜやるのか
- T字ポーズではなく、自然な立っているポーズにしたいため。
- イメージエフェクトとは関係ないので、T字ポーズのままで良いならスキップ。
手順
- 生成されたPrefab
Tda式初音ミク・アペンド_Ver1.10
を選択。Rig > AnimationTypeを Humanoidに変更する。- デフォルト(Generic)では MecanimのHumanoidAnimationをうまく利用できないため、Humanoidにしている。
- UnityChan Official Webサイトから「ユニティちゃん 3Dモデルデータ」をダウンロードしてAnimationsフォルダをインポート。
- Project Window で右クリック > Create > Animator Controllerで、Animator Controller を新規作成。
- Animator Windowで右クリック > Create State で、Stateを新規作成、Motionに WAIT00 を指定する。
MainCameraのRenderingPathを変更
なぜやるのか
RenderingPathをDefferedにすると、デフォルトのForwardと比べて、よりリアルな光と影にできるため。
Deferred Shading is the rendering path with the most lighting and shadow fidelity https://docs.unity3d.com/Manual/RenderingPaths.html
手順
- RenderingPathをDeferredにする。
- MSAAをオフにする。(Deferredのときには使用できないため。)
RenderingPathは、グローバルな設定を Edit > Project Settings > Graphics > TierSettings > Rendering Path から変更し、カメラではuse graphic settings のままにするのでも良いようだ。
構図の調整
Transform, Field Of Viewを調整して、好きな構図にする。 ClippingPlanesのNearを0.01(最低値)にすると、モデルの中身が見える事故が少なくなる。
マテリアルの調整
なぜやるのか
- Unity5のStandard Shaderは、物理ベースレンダリングに対応している。
- 物理ベースレンダリングを使用すると、「異なるライティングの条件でも一貫性のあるもっともらしい見た目を実現できる」(ref)らしい。
手順
- 17個のマテリアルすべて、シェーダーをstandard shaderにする。
- 以下のマテリアルを調整する。
- RenderingMode
- 不透明なものはopaque、透明なものはTransparentにする。
- Metalic
- smoothness
- Emission
- 自己発光しているものに指定する。
- カラーピッカーの右にある、数字入力箇所で数字を増やすと、発光が強くなる。
- RenderingMode
私の場合、設定は以下のようになった。
name | AlbedColor | RenderingMode | Metallic | smoothness | Emission | EmissionColor |
---|---|---|---|---|---|---|
0.face00 | RGBA(1.000, 1.000, 1.000, 1.000) | opaque | 0 | 0 | ||
1.face01 | RGBA(1.000, 1.000, 1.000, 1.000) | opaque | 0 | 0 | ||
2.eye_hi | RGBA(0.690, 0.882, 0.745, 1.000) | Transparent | 1 | 1 | ||
3.eye_hi2 | RGBA(0.400, 0.800, 0.700, 1.000) | Transparent | 0 | 1 | TRUE | RGBA(0.651, 0.651, 0.651, 1.000) |
4.skin | RGBA(1.000, 1.000, 1.000, 1.000) | opaque | 0 | 0 | ||
5.body00 | RGBA(1.000, 1.000, 1.000, 1.000) | opaque | 0 | 1 | ||
6.body01 | RGBA(1.000, 1.000, 1.000, 1.000) | opaque | 1 | 1 | ||
7.body_pink | RGBA(0.700, 0.180, 0.430, 1.000) | opaque | 1 | 1 | TRUE | RGBA(1.200, 0.308, 0.737, 1.000) |
8.body_green | RGBA(0.400, 0.900, 0.600, 1.000) | opaque | 0 | 0.5 | TRUE | RGBA(0.532, 1.200, 0.798, 1.000) |
9.body_green2 | RGBA(0.400, 0.900, 0.600, 1.000) | Transparent | 0 | 0 | ||
10.body02 | RGBA(1.000, 1.000, 1.000, 1.000) | opaque | 0 | 1 | ||
11.hair00 | RGBA(1.000, 1.000, 1.000, 1.000) | opaque | 0 | 0 | ||
12.hair01 | RGBA(1.000, 1.000, 1.000, 1.000) | opaque | 0 | 0 | ||
13.hairshadow | RGBA(1.000, 1.000, 1.000, 1.000) | Transparent | 0 | 0.5 | ||
14.cheek | RGBA(1.000, 1.000, 1.000, 1.000) | opaque | 0 | 0.5 | ||
15.lens | RGBA(1.000, 1.000, 1.000, 1.000) | opaque | 0 | 0.5 | ||
16.wing | RGBA(0.400, 0.900, 0.600, 1.000) | Transparent | 0 | 1 |
ハイライトについて
「Emissionは本当に光ってる物体に対してのみ使用する(明るさの調整に使わない)」 http://unityshader.hatenablog.com/entry/2017/02/25/130016
というのがルールらしい。 目のハイライトは自己発光していないので、Emissionを指定しないのが正しいのかもしれない。 が、Emissionなしでハイライトっぽくする方法がわからなかった。
https://www.slideshare.net/Unite2017Tokyo/unite-2017-tokyovr-magic4 ※p34 上記によれば、「ハイライト成分だけ加算半透明」「ハイライト成分だけHDR環境マップ」「リフレクションプローブ」といった手法でできるらしい。
お願い
このあたりのハイライトの設定、ご存知の方がいらっしゃったらよろしければ教えてください。
Post Processing Stackの導入
カメラに取り付けて、画面を綺麗にしたり映像効果を付けるモノを「イメージエフェクト」というらしい。 Post Processing Stackは、この「イメージエフェクト」を使うための提供は、Unity Technologies製アセット。
なぜPost Processing Stackか
Unity Technologies提供の「イメージエフェクト」を実現するアセットとして、より古い以下2つがある。
これらは、カメラにアタッチする順番を間違えると正しく動かないなどの欠点がある。
手順
- Post Processing Stack をインポート。
- Project Window上で右クリック > Create > Post-Processing Profile 。
- Main Cameraに PostProcessingBehaviour スクリプトをアタッチ。
- 2で作成したProfileをインスペクタにドラッグドロップする。
- インスペクタで下記にチェックを入れる
チェックを入れるもの
- Anti aliasing(ギザギザをとる。)
- Ambient Occlusion(くぼみなどを暗くする。)
- Screen Space Reflection(反射を作成する。)
- Bloom(光が漏れるような効果)
- Color Grading ( カラーコレクション。画面全体の色合いを変えること。 )
- Vignette(画面の辺・四隅を暗くしてレンズっぽくする。)
デフォルトから変えるとよさそうなのは、以下のとおり。
- Tonemapperをneutral → Filmic に変更(なぜかは覚えていない)
- Contrastをデフォルトより若干強めた(1 → 1.13)。対比がきれいになる気がする。
- Temperatureを-12.4、Channel MixerでGreen, Blueを強くした。
おわりに
本文中にリンクしました、GOROmanさんの主婦写真講座を はじめとするインターネット上のたくさんの解説から、 イメージエフェクトやマテリアルなどの使い方を勉強させていただきました。
また、Tdaさんの素晴らしいモデル、 NoraさんのMMD4Mechanimを 使わせていただいたおかげで、大変楽しく作業できました。 誠にありがとうございました。
この記事について、ご指摘や改善点などありましたら、ぜひコメント等でお知らせいただければと思います。