the Elder Scroll 5 Skyrim: 影表現を変更してウルトラの先へ

TES5の描画設定はなかなかよく練られている。
この為、ランチャーでの描画プリセットを用いれば、だいたい満足のいく画質とパフォーマンスのバランスを取れる。

しかし、iniファイルを直接編集する事で、限定的にではあるが、ウルトラクオリティを超える画質を、より軽快なパフォーマンスで実現できる。

その鍵は、シャドウマップのリアルタイム生成にある。



■TES5におけるシャドウマップ生成の仕組み
はじめに断っておくが、コード解析している訳ではないので、以下は挙動面から予測したものだ。妄想とまでは言わないが、想像であることは事実なので、伝聞調で人に語る時は注意して欲しい。

シャドウマップは、描画が必要な影をテクスチャとして生成し、それを地形やキャラクターに対して貼り付ける手法だ。
これ自体は一般的な技術で、多くのゲームで採用されている。

TES5のそれがやや個性的なのは、「描画が必要な全領域の影テクスチャ」を「固定サイズの解像度のテクスチャにリアルタイム生成している」点にある。

どういう事かというと、影を描画する面積が100平方メートルだろうと、10000平方メートルだろうと同じサイズの影テクスチャを使うので、後者の場合は影が荒く表示されてしまうのだ。

「野外だと(屋内より)キャラクターの顔や背中に落ちる影が荒いなー」と思った事はないだろうか。
これは、広い範囲の影を狭い領域に押し込んでいるので、部分的に取り出した場合、荒く見えている為である。

※Ultra設定の場合、屋内の影描画距離は屋外の4割弱になっている。



■ウルトラ設定の影はきたない
私も試して見て少し驚いたのは、「ウルトラ設定の影品質は必ずしもベストなものではない」という事だ。
とりあえず、スクリーンショットを撮ったので見て欲しい。
(解像度1920x1080の x4 スーパーサンプリングで等倍のままトリミング)

 
  ↑ウルトラ設定デフォルトのもの

 
  ↑ウルトラ設定に少し手を加えたもの

TES5の影品質には、「影を描画する距離(面積)」「影テクスチャのサイズ」「影のぼかし方」の3つの要素が存在している。
ここでのポイントは一番はじめの影を描画する距離だ。
TES5は隠面影生成を行うエンジンなので、キャラを中心とした同心円を含む正方形のサイズの影テクスチャを作る(=背面を含む)。
その上で、見えている範囲に限定してシャドウマップを適用する動作である。

影の解像度はこのシャドウマップのサイズに依存する。
しかし、シャドウマップのサイズは、ビデオメモリとメモリアクセス帯域を圧迫するので、極端に大きくは出来ない。
元の2倍のサイズにするのが精々であろう。
一方で、描画距離が2倍になると、テクスチャ生成面積は4倍になってしまう。

・Shadow Detail Low の時の設定
 描画距離: 2000
 サイズ: 512KB (≒724x724ピクセル

・Shadow Detail Ultra の時の設定
 描画距離: 8000
 サイズ: 4096KB (≒2048x2048ピクセル

TES5の場合、Ultra設定ではLow設定と比較して、描画距離が4倍、すなわち、影生成面積が16倍になっているのに、生成するテクスチャの面積では8倍にしかなっていない。
つまり、「Ultra設定の影は遠くまで描画するが、品質はLowより劣る」のである。



■影の設定をiniファイル編集で変更する
先ほど見たように、影設定をプリセットでいじると、複数の設定項目が一辺に変更になってしまう。
この為、これらの設定を変更するには、手動で設定ファイルを変更する必要がある。

設定ファイルの場所はマイドキュメントの中の以下の位置だ。
「E:\Users\Username\Documents\My Games\Skyrim」(ユーザー名は人によって異なる)
ここにある
「SkyrimPrefs.ini」をメモ帳などで開いて編集する。

・設定項目
iBlurDeferredShadowMask (影のぼかしの強さ0〜4程度まで)
fShadowDistance (影を描画する距離 1500〜10000程度まで)
iShadowMapResolution (シャドウマップの解像度 128〜8192程度までで128の倍数)

このうち、影描画距離を短くするとシャドウマップの密度がアップする。
具体的には
 (変更前)fShadowDistance=8000
   ↓
 (変更後)fShadowDistance=2000
となる。

効果は、先ほどのスクリーンショットの下側のものになる。
遠くの影までは描画されなくなるが、目の前の影に関しては、はっきりと分かる程解像度があがる。
また、単純に影描画の量が減るのでパフォーマンスもアップする。
(主にCPU側依存の最低fpsの引き上げに効果があるようだ)

おまけとして、シャドウマップ解像度をあげたものも掲載しておく
 iBlurDeferredShadowMask=1
 fShadowDistance=2000
 iShadowMapResolution=8192
この場合は、同時に影のぼかしも弱めた方が効果が見えやすい。

 

この辺まで来ると、かなり「あざとい」影になるので、パフォーマンスの低下(大きいテクスチャを毎フレーム作る処理は重い)と差し引きすると、好みが分かれるところだろう。

今回紹介した、影描画距離2000は、普通にゲームをプレイする上では、それ程違和感がない設定だが、好みに応じて、3000や4000を試してみてもいいかもしれない。