「ENB」の編集履歴(バックアップ)一覧に戻る

ENB - (2015/04/22 (水) 14:29:39) のソース

このページでは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で弄る分には気にしないでいいですが。

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

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

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

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

Bloom On
杖の部分にあふれ出ている光がBloomです。
#image(BloomOn.jpg,width=576,height=324)
Bloom Off
#image(BloomOff.jpg,width=576,height=324)


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

目の順応は猫の目で考えるとわかりやすいです。
#ref(eyeadaptation.png)

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

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


**ディスプレイの調整
まずディスプレイのガンマやカラー調整しておきます。
コントロールパネル→色の管理→詳細設定→ディスプレイの調整→あとはガイドに従って調整してください。
#image(CalibrateDisplay.png,width=365,height=275,,http://www50.atwiki.jp/skyrim_mod?cmd=upload&act=open&pageid=57&file=CalibrateDisplay.png)

**テスト用カラーチャートを出す
色みやトーンを確認する時に便利なのがTestHDRBox02というHDR確認用チャートです。
コンソールコマンドでplayer.placeatme 00013F46で出せます。
#ref(colorchart.jpg)

上の数字は発光の強さで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をアップロードしました。保存→ロードという手順を踏まなくても効果を確認できます。[[リンク>https://drive.google.com/file/d/0B2BtCpWQUg4zUlBNZlZCQm8zWlk/view?usp=sharing]]


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

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

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

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

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

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

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

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


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

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

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


**enbserise.ini
こちらのブログ記事も合わせてお読みください。
[[ENB設定 enbseries.iniの編集>http://barom777.blog.fc2.com/blog-entry-18.html]]

***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)
アンビエントオクルージョン、日本語では環境遮蔽と訳されます。
環境光もさえぎられる箇所は影が濃くなることです。
#image(AO.jpg,width=540,height=312,,http://www50.atwiki.jp/skyrim_mod?cmd=upload&act=open&pageid=57&file=AO.jpg)

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

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

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

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



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

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

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



#image(IBLOn.jpg,width=576,height=324)

#image(IBLOff.jpg,width=576,height=324)

Additive Amount
Multiplicative Amount
Reflect Amount



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

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


*参考リンク
[[ゲームCGの原理から学ぶ!イラストの色塗りのコツ>http://oekakigakusyuu.blog97.fc2.com/blog-entry-743.html]]
イラストの色塗り講座ですが、ゲームCGのひと通り解説してあります。

[[Color Reel - The House On Pine Street>https://vimeo.com/116019668]]
カラーグレーディング(表現のための色調補正)



 
目安箱バナー