ENB

このページではENBの調整について解説します。
3Dグラフィックはアート&サイエンスの結集なのでアートセンスと根本的な性質の理解の双方が必要です。
ENBはいじれる範囲が多い分、手っ取り早く扱えるものではないので、項目の解説より技術的な解説を多くしてます。
ただの色付けや明度調整ではないENBの調整ができることを目指してます。

ENBとは

Boris Vorontsovさんが作ったゲーム用のグラフィックスを改変するものです。レンダーの関数呼び出しの部分での改変やポストプロセスエフェクトで最新のグラフィックスに負けないリッチな表現ができます。
なかでもスカイリム用のENBは特に進んでいて、メモリーマネージャー的な要素からゲーム画面内でリアルタイムで編集するGUIまでついてます。
ポストプロセスエフェクト
3DCGはまず3D空間上でポリゴンを表示します(頂点シェーダ)。ディスプレイで表示するには2D画像(ピクセル)に変換してフレームバッファという場所に一時保管しておきます。
このフレームバッファ上でかけるエフェクトのことをポストプロセス(事後処理の意味)エフェクト言います。2D化した画像にリアルタイムでフォトショップでレタッチしているというとイメージしやすいでしょうか。

自由に設定をカスタマイズできるために様々な人によって様々なENB modがあり、Nexus等modサイトで多く配布されています。

ENBの基本

設定

ENBのホームページで左側のメニューのDownloadを押し、下から四番目のTES Skyrim、バージョンを選んで(大抵は最新版で可)、Downloadを押します。
2つ入ってますが基本的に使うのはWrapperVersionの方でこちらのフォルダの中身をスカイリムのフォルダ(Dataフォルダではない)に入れます。その後はお好みに応じてENB modを上書きしてください。
Documents\My Games\Skyrim\SkyrimPref.iniのDisplay項目の数値を以下のようにしてください(ない項目は追加)。
[Display]
bFloatPointRenderTarget=1
bTreesReceiveShadows=1
bDrawLandShadows=1
bShadowsOnGrass=1
iMultiSample=0
bFXAAEnabled=0
iMaxAnisotropy=0

操作方法

Shift+F12 ENB効果のOn/Off
Shift+Enter 編集メニューの表示
テンキー側の*キー FPS表示
F4 VRAM開放
PrintScreenキー スクリーンショットの撮影。スカイリムのフォルダに作成。ENBによってはInsertキー
Homeキー FPS制限

ファイル構成

enbseries.ini 最も調整項目が多く、これがメインの調整ファイルになります。
enbeffect.fx 絞りの設定やトーンマッピングの設定、全体的な明るさやコントラスト、彩度も。ベースとなるものなので最重要。
effect.txt ノイズフィルターなどオプションのエフェクト集。これ自体は必ずしも必須ではないものの、SweetFXから移植されたLumaSharpenエフェクトはよく使います。
enbeffectprepass.fx DoF(被写界深度)の設定。
enbbloom.fx ブルームの設定。
enbsunsprite.fx レンズフレア(ゴースト)の設定。
enblens.fx レンズマスクの設定。
enblocal.ini メモリー設定やキーコンフィグなど直接グラフィックにかかわらない部分の調整やアンチエイリアスの設定。

※ENBseriesフォルダの方に.fx等のファイルが入ってる場合はそちらが優先されるようなので編集ファイルの間違いに注意。GUIで弄る分には気にしないでいいですが。

ディスプレイの調整

ディスプレイの写り方はディスプレイの種類・個体差・経年劣化、グラフィックボード、OS、出力端子、カラープロファイル、室内の照明等でも違いがあります。
「おおよそ正しく色が表示される」基準に合わせるのをモニターキャリブレーション(校正)と言います。

まずはENBを弄る前にそれを行います。ディスプレイのガンマやカラー調整しておきます。
コントロールパネル→色の管理→詳細設定→ディスプレイの調整→あとはガイドに従って調整してください。

この調整も気休め程度で、本来はキャリブレーターという測定器(3万円~)使って行います。
目には自動補正機能があるので、目視での調整はあんまり当てになりません。


弄る前に

基本的にGUIメニューをコンソールコマンド中にだして、項目の右端の+-あるいは丸い部分をドラッグして調整して、どう変わるのか見ながら調整します。
Save Configuration を押さないと保存されません。

フィルターの種類や品質設定等の一部設定項目を変更した場合はリアルタイムで反映されませんのでSave Configurationを押したあとに、Apply Changesを押してください。

ただし、例えば夜をもう少し暗くしたいと思ってもそういう項目はありません(改造して追加されてるのもあります)。
こうしたいとイメージしたものがあるのにそれを実現するのにどこを弄ったらいいか分からないのが陥りやすいパターンかもしれません。
いきなり弄る前に現実の世界とゲームで表現する時の制約について知っておきましょう。
NPR(Non Photorealistic Rendering=非現実的なレンダリング。セルアニメ風など)でも知っておくと役に立ちます。

工程の分離

ENBはライティングとシャドウの改善部分とレタッチ(カラーグレーディング)部分が一緒になってるので同時に行いがちですが本来は全然別の工程です。
ライティングとシャドウで適切に見えるように設定する工程をまずはじめにしておいて、色調補正やコントラストを弄る等の工程はあとにしてください。
カメラと同じく、撮影した写真がそもそもひどい場合(極端に白飛びや黒つぶれ)はレタッチしても非常に難しいです。

最初の工程
トーンマッピングやAdaptation、Enviroment項目の設定、SSAOやDetailed Shadow等のシャドウ設定

最終工程(カラーグレーディング)
コントラスト、チャンネルミキサー、カラーパレットなど

フォトリアルとは

ゲームのみならずCG映像業界、写真・カメラの考え方を元に構成されてます。
きちんとカメラの特性をシミューレートし、写真で撮ったかのようなリアルさを持たせるのがフォトリアルといえます。
つまり 「カメラ的に正しい」 ということです。

しかし、処理の重さを考慮しなければならないリアルタイムレンダリング、ENBは基本的にポスト処理中心でしか弄れず、またDirectX9という旧世代の技術が基になる以上、常に制約がついてまわります。
現行(PS4,XboxOne,DX11)の技術(PBR、IBLなど)を駆使して、莫大な研究/予算投じて、ようやくフォトリアルに近いものが出せるようになったのが最近のことで、ENBでそれに近い絵を出すのはやはり無理があります。

フォトリアルとは一つの基準となりますが、正しい≠美しいです。
プロのカメラマンが撮影する時に、その表現技法は千差万別で、題材にも、機材もセッティング、現像も異なります。
意図を表現するために味付けする場合、カメラ的に正しいのは表現技法を多様に取れることから前提条件として非常に大切なことです。
カメラの原理原則、何が良いとされるか等を知っておいて損はないです。


白飛びと黒つぶれ

明るい箇所が階調や色を失って白一色でつぶれてしまうのが白飛び、暗い部分が黒一色で潰れてしまうのが黒つぶれです。
現実はずっと豊かに階調を持っているので基本的には避けるべきです。はじめからコントラストを上げて画が締まるというような安易な発想は避けてください。
意図した演出する場合もありますが、ディテール保持できるぎりぎりの範囲かどうか意識するだけで全然印象違います。
それに加えてカメラと違ってリアルタイムで動いて実際に遊ぶのでプレイ快適性は低下します。

HDRレンダリング

現実に目を通して見る風景とディスプレイごしに見るゲームや写真などの風景とで違うのは明暗の階調の幅です。
一般的な"画像データ"は24bitRGB=赤、緑、青の光の三原色をそれぞれ8bit(256段階)割り当ててその色の組み合わせで表現します。
(255,255,255とか#FFFFFFというのを見た事あると思いますがRGBで同じく白を表します。)
色数こそ約1677万色と人間の目で感知できる範囲では必要十分ですが、一番黒いのを0、一番明るいのを255とするので明るさの階調の幅は0-255しかありません。
この256の階調幅をディスプレイはそのまま表示してるわけではなくて、コントラスト比(一番明るい部分と一番暗い部分の比)1000:1ぐらいで映します。
風景でコントラスト比10万:1を超えるぐらいですから、リアルな世界を表現するには全然足りません。
ディスプレイで見ている世界は目で見ている世界よりもずっと表現力に乏しいわけです。

そこでできるだけ現実に近い範囲で記録しておくHDR(ハイダイナミックレンジ)が登場します。
ですが、結局のところディスプレイで表示できる範囲(LDR=ローダイナミックレンジ)は決まってるのでそれに合わせて変換する必要あります。
その変換がトーンマッピングです。

結局LDRまで落としてしまってはHDRの意味ないと思うかもしれません。
ブルーム(Bloom)、順応(Adaptation)、陰影の表現力向上(影の落ち込みがちなディテールがきちんと表現できる)というメリットがあります。

バニラでもすでにHDRの機能群はありますが、ENBのHDRはレンジの幅を広げたり、または自分で弄ったりできます。

Bloom

カメラでも目でも起こる現象で、例えば太陽光などの一定以上の高輝度のものをみると遮蔽物を超えてあふれだす光の現象です。
全体的に淡くぼやけさせる機能ではなく、強く光る光源の眩しさを表現するものです。
BloomAmoutの数値が高いと、本来かかるべきではない全体にかかってしまうのでデフォルト0.25以下をおすすめします。

Bloom On
杖の部分にあふれ出ている光がBloomです。
Bloom Off


Adaptation

快晴時の昼間で大体10万ルクス(照度の単位)、月明かりで0.5-1ルクスぐらいと言われます。
これだけ明るさの幅があるのに、自然と適切に見えるのは目に入ってくる光の量を虹彩(瞳孔のサイズを変える)で調整できるからです。
これをAdaptation(順応)といい、例えばトンネルから出ると眩しく感じますが、10秒もすれば慣れます。
逆に明るいところから暗いところに行くと最初は見えませんが、次第に見えるようになってきます。

目の順応は猫の目で考えるとわかりやすいです。

HDRからトーンマッピングする時に時間差をつけると次第に目が慣れていく表現ができます。

enbseries.iniのAdaptationは目のシュミレートで、時間差や感度の設定できます。
enbeffect.fxのAdapatationはトーンマッピングに関わるベースの部分(シーン全体の明るい時(絞り)にどれたけ暗くするか、シーン全体が暗い時(開放)に明るくするかを決めます。)で時間や感度はできなく役割が違うので注意が必要です。

テスト用カラーチャートを出す

色みやトーンを確認する時に便利なのがTestHDRBox02というHDR確認用チャートです。
コンソールコマンドでplayer.placeatme 00013F46で出せます。

上の数字は発光の強さでnifskopeのBS ShaderPropertyのEmissive Multipleの値です。
1.0が発光してない通常の設定値で、2.0や4.0では発光してます。

下の明暗のチャートはきれいなトーンになるように調整しましょう。一番明るい白近辺は基本的には発光します。


項目についての解説

絞りやトーンマッピング等の基本的な設定をenbeffect.fxのテキストファイルの方でまずはじめにしておきます。
GUI側でいじれるように改造してあるファイル(後々公開する予定)もありますが、基本的にテキストで編集→保存→ゲームに戻るLoad Configuration→Apply Changesで確認→編集を繰り返す。
※2014/12/27 POSTPROCESS 2の設定をGUIで変更することが出来る(1,3,4には変更しないでください。)enbeffect.fxをアップロードしました。保存→ロードという手順を踏まなくても効果を確認できます。リンク


enbeffect.fx

#define POSTPROCESS	数字
ポストプロセスのモードで基本は1,2,3,4あって、拡張されたのだと6とかもあります。
カスタマイズされたENBはそのモード用に最適化されてたりするので、そのまま使うのが良いです。

AdaptationとToneMapping

画面の明度や彩度バランスを決める上でベースになる部分で非常に重要です。
ここで適切な明度レンジ幅さえ取れていれば、いくらでも応用が効く、あとの作業は味付けのようなものです。

enbseries.iniのUsePaletteTextureのオン/オフと、Adaptationのオン/オフや設定項目が明度バランスに大きく関わってくるので、
これらの設定も検討しておいてください。

コントラストやブライトネスなどの設定項目のほとんどはこれらの後からかけるエフェクトなので、
そちらを中心にバランスを取ろうとするとレンジ幅が狭くなるだけで見栄えが悪くなったり、様々なシーンに対応する力がなくなります。

EAdaptationMin~ 絞り値の最小(数値が低いほど開放した時に明るい)
EAdaptationMax~ 絞り値の最大(数値が高いほど絞られた時に暗くなる)

猫の目を思い出します。
暗い時は光を取り込もうとして瞳孔を開放するので、 Minは画面全体が暗い時にどれだけ明るくするか の設定。
明るい時に光を減らそうとして瞳孔を絞るので、 Maxは画面全体が明るい時にどれだけ暗くするか の設定。

※EAdaptationMinはEAdaptationMaxより小さくする。

EToneMappingCurve 露出度の調整。全体的に白飛びしている時は値を大きくする。逆に暗すぎる時は値を小さくする。自然な値があるので変化を見ながら調整する。

その他

EBrightness 基本的な明るさの調整。値を大きくし過ぎると白飛びの原因になる。

EIntensityContrast コントラストの調整。値を大きくするとなんとなくメリハリが出るように見えるがやり過ぎると白飛びや黒つぶれの原因になる。ちょうどいい具合を探って調整する。

EColorSaturation 彩度の調整。ほどほどに調整する。


enbserise.ini

こちらのブログ記事も合わせてお読みください。
ENB設定 enbseries.iniの編集

Effect

各種エフェクトのオフ
UseOriginalPostProcessing バニラのポストプロセスを優先。Bloom,Adaptation,ENBeffect.fxの調整は効かなくなる。
UseOriginalObjectsProcessing バニラのオブジェクト描写の優先。Environment、Skyなどの項目は効かなくなる。

2つオンにするとバニラに近い色味と露光バランスになるので結構便利。ENBの効果的なエフェクトSSS、SSAO、Dof、Detailed Shadowだけ効かせたい時などに。

Environment

Directional Lightingは直接光で直接光源から当たる光です。シーン全体を照らす明かりで例えば太陽光など。スカイリムでは室内にも存在します。

Ambient Lightingは環境光(間接光)で直接当たる光ではなく、周囲の物体から反射して空気中で拡散した光です。
まじめにシミュレートすると計算コストがかかりすぎるので、スカイリムではだいぶ簡略化して物体に一律明るさと色を乗せるような感じです。
Directionalと違って影の部分にも影響が及びます。

Point Lightingは個別の光源です。例えばろうそく、洞窟の隙間から漏れる太陽光、焚き火など。ゲーム中では見えないですが設置されています。

Specularは明るいハイライトを作る光沢です。

光源とそれによる影は以上の4つが基本にして成り立っています。しかし、現実世界を美しく見せるのはは簡略化された一律な影や光ではなく、様々な濃淡の影や光です。
特に間接光の複雑な性質を物理的に正しく再現するのが大域照明(GlobaI illumination=GI ※厳密にはシーン全体を考慮した照明)と呼ばれ、このGIに近づけるのがリアリスティックの目指す方向性の一つと言えます。

様々な濃淡の影や光、GIに近づけるために補助する技術がAmbient Occlusion、Indirecting Lighting、Detailed Shadow、Image Based Lighting、SkyLightingなどです。

CKでの光源設定
色は室内(Interior)の方はCell Viewウィンドウで室内のセルを選択→右クリック→Edit→Lighting→Ambientに設定してあるカラーが適用されます。
Objectウィンドウの光源のテンプレート使ってる場合はWorldData->LightingTemplateです。屋外はWorldData->Weatherです。
PointLightは個別の光源なのでWorldObjects->Light

Ambient Occlusion(AO)

アンビエントオクルージョン、日本語では環境遮蔽と訳されます。
環境光もさえぎられる箇所は影が濃くなることです。

画像で言うと腕と腿の間とか手に持ってる球と手の間は環境光(間接光)があまり届かないので影が濃くなります。
より詳しい解説はアンビエントオクルージョンちゃん参考に。

エフェクト自体は重いものの効果が高いので多くのENBで採用されてます。

AOAmount=AOの適用量。AOで生成される影の量が増えます。
AOIntensity=AOの強さ。AOで生成される影が強く出ます。

Detailed Shadow

影の描写がいまいちなバニラのシャドウに代わって描写します。



Image Based Lighting(IBL)

パノラマ画像を球体にしてシーン全体を覆い、それを光源代わりにする技術です。複雑な設定なしに現実に近いライティングができるため、急速に普及しました。
特にMarmoset Toolbag等のリアルタイムレンダーでは欠かせません。
Marmoset Toolbagでの例(ボバ・フェット)。はじめは背景の森の写真が光源になってます。

ENBのはあくまで擬似的で、おそらく空のテクスチャを使って表現されます(そのため強めにかけるとやや青みがかった灰色になります)。
効果は環境光(Indirect Lightingや、Ambient Lighting)に近いですが、それらとは効果の出方が違います。

ENBのIBLのその真骨頂は、曇や雨などの太陽が隠れた時の間接光表現です。
現実世界では直接光(太陽光)が弱くなると、相対的に間接光が強くなって柔らかいハイライトとシャドウができますが、その表現にピッタリです。

IBLON
IBLOFF

Additive Amount
Multiplicative Amount
Reflect Amount

SkyLighting

屋外限定で、ブラーかけたシャドウを乗せて(厳密には違うかも)濃淡をつけます。
AOと違ってキャラクターの影などには付きません。やや重い。

水面

フレネル反射率について
http://d.hatena.ne.jp/hanecci/20130525


参考リンク

ゲームCGの原理から学ぶ!イラストの色塗りのコツ
イラストの色塗り講座ですが、ゲームCGのひと通り解説してあります。

Color Reel - The House On Pine Street
カラーグレーディング(表現のための色調補正)