Elza's Creative note

ARTICLE PAGE

スカイリムでのリムライトの検証メモ

この記事では、スカイリムのNifに使われているマテリアル設定ノード「BSLightingShaderProperty」のうち、「Shader Flags2」の「SLSF2_Rim_Lighting」と「SLSF2_Back_Lighting」について、効果を検証した結果を扱っています。

結論から申し上げると、どうやら各々のグラフィック環境に依存するということがわかったので、参考程度にご覧くださいませ。





リムライトってなに?


リムライトとは、逆光になったシーンで対象物のアウトラインを浮かび上がらせたり、対象物に当たる周囲からの反射光を再現し内面から発光しているような表現を与えるライティング効果です。

こちらの写真を見本にして説明すると、逆光で影になっている猫の縁に光が射して白くなっているのがわかると思います。これを3Dのライティングで再現しようとしているのがリムライトです。

photo161108.png

現実では、一定方向から光が当たっていたとしても、壁や地面など他の面が近ければそこから反射した光が対象物に当たりますし、対象物に透明度があれば内側で屈折した光が漏れ出るので、光を受けない側が背景に溶け込んでしまうようなことはまずありません。


スカイリムにおいては、どうやら上手く機能していないようですが、リムライトを実装するMODもあります。あくまでフェイクとのことですが、EffectShadersを編集して実装しているようです。

Cobb Rim Lighting at Skyrim Nexus - mods and community

上記MODの説明用動画も、リムライトについて知る参考になります。




オブジェクトごとにリムライトを設定する


スカイリムの全世界規模での変更となると、ENBなどの力を借りた方が速い気がしますが、nifファイルを開き、冒頭で触れたマテリアル設定ノード「BSLightingShaderProperty」のうち、「Shader Flags2」の「SLSF2_Rim_Lighting」と「SLSF2_Back_Lighting」をオンにすることでオブジェクトごとにリムライトの効果を与えることができます。
リムライトは「SLSF2_Rim_Lighting」ですが、「SLSF2_Back_Lighting」とセットで設定します(後述)。

flags01.png


また、Nifskopeではリムライトとバックライト用にテクスチャを指定することができます。上から4段目がリムライト用のテクスチャ、下から2段目がバックライト用です。

flags02.png



ゲーム内での効果を確認してみる

今回見本にするのは、拙作のリソースMOD「Melt in the Mouth」のホールケーキのオブジェクトです。効果がわかりやすいように、リムライト用のテクスチャは赤でベタ塗りにしました。

Cakebase01_backrim1.png


変化がわかりやすい紙芝居でご覧ください。

rimlightpreview001.gif


では、1枚づつ説明していきます。

1枚目:Rim_Lighting / Back_Lighting OFF, No texture
リムライト・バックライト共にオフ、テクスチャも未設定の状態です。
スカイリムの多くのオブジェクトはこの状態になっています。

rimlight001.png


2枚目:Rim_Lighting / Back_Lighting ON, No texture
リムライト・バックライト共にオン、テクスチャは未設定の状態です。
この時点でオブジェクトが明るくなったのがわかります。

rimlight002.png


3枚目:Rim_Lighting / Back_Lighting ON, Add texture
リムライト・バックライト共にオン、そしてテクスチャを設定した状態です。
影になっているオブジェクトの左下の部分に赤みが射したと思います。
これがリムライト用のテクスチャが反映された状態です。

rimlight003.png


一見するとリムライト用のテクスチャ指定が無くても効果が表れたように見えるのですが、ゲーム内、とくに判定の厳しいSSE環境で表示したときにはテクスチャ未設定の判定がされるので注意が必要です。

ScreenShot79.png
左下が青みがかっていますが、青い光が当たっているのではなく、テクスチャ指定のエラー色(青色)が表示されています。



続いて、リムライトとバックライトの違いについて、それぞれのオンオフで比較してみます。
こちらもまずは紙芝居を。

rimlightpreview002.gif


では、1枚づつ説明です。

1枚目:Rim_Lighting OFF / Back_Lighting ON
ENBオフの画像では、リムライト用のテクスチャの色が見えますね。
テクスチャ指定は「Rim_Lighting」と「Back_Lighting」の両方で指定する必要がありますが、実際のテクスチャ表示については「Back_Lighting」の担当のようです。

rimlight004.png


2枚目:Rim_Lighting ON / Back_Lighting OFF
ENBオンの画像では、オブジェクトの明るさが変わりましたね。
実際のライティングを担当するのが「Rim_Lighting」のようです。

rimlight005.png


これらを踏まえると、効果的にリムライトを利用するには「Rim_Lighting」と「Back_Lighting」の両方をオンにする必要があることがわかりました。



リムライトはどこで使われているの?


身近なところで挙げるならば、トマトです。

ScreenShot2727.png


ダイニングなどで様々なオブジェクトが並ぶなか、トマトだけは明らかに様子が違って、接地面に反射光が見え、中が透けているかのように見えます。

ScreenShot2665.png


ためしにトマトのnifファイル(tomato.nif)をNifskopeで開いてみると、リムライトの設定、「SLSF2_Rim_Lighting」と「SLSF2_Back_Lighting」の両方がオンになっていました。また、リムライト用のテクスチャに「gray.dds」というファイルが指定されていました。

flags03.png


「gray.dds」は中間グレー一色で塗られた32*32ピクセルの画像です。
つまり、トマトのリムライトでは色をグレーに指定していることになります。

gray161109.png


トマトの色は、少なくとも「赤っぽい色」ですので、反射光も赤っぽい色になると考えられますが、ここでグレーが指定されている理由として考えられることは、無彩色にすることで色の指定を除外し、白から黒の濃度でリムライトの輝度を調整しているのではないか、ということです。

試しにリムライト用のテクスチャを白一色と黒一色に差し替えて比べてみたところ、やはり輝度が変化しているようです。リムライト用のテクスチャでは、色と輝度を調整できるということですね。

rimlightpreview003.gif


続いてBlock Detailsを見てみると「Specular Color」に薄い赤色が指定されています。この「Specular Color」はオブジェクトが光を受けたときの反射光の色なので、このトマトのオブジェクトでは「Specular Color」で反射光の色を指定していることになりますね。

flags04.png



まとめ


さて、ここまで読んでいただいて察しがついたとは思いますが、このリムライトはENBのプリセットによっては輝度以外の効果がほとんど見込めません。特に色は全く反映されない場合があります。

どの環境でも対応できるようにリムライトを設定するには、「Shader Flags2」の「SLSF2_Rim_Lighting」と「SLSF2_Back_Lighting」を両方オンにし、テクスチャは輝度の調整などがなければバニラで用意されている「gray.dds」を指定し、反射光の色は「Specular Color」で設定するのがベターといえるでしょう。


何かの制作の参考になれば幸いです。


参考:
MOD作成wiki - BSLightingShaderProperty
MOD作成wiki - テクスチャ作成
Skyrimにおけるメッシュの詳細とNifskopeの使い方(BSLightingShaderPropertyその1)
tktkさんからいただいたサンプルnifファイルとアドバイス
関連記事
Category: Skyrim関連
Published on: Wed,  09 2016 03:26
  • Comment: closed
  • Trackback: closed