【プラグイン配布】スクリーンショット強化&FoVを制限解除する「Desktop Screenshot」を作りました

Virt A Mate(VaM)をデスクトップでプレイしている際のスクリーンショットを使いやすくするためのプラグイン「Desktop Screenshot」を製作しました。

このプラグインの機能を解説する前に、まずは撮影における基礎知識を解説いたします。

VaMのFoV

プレイヤーカメラのFoVは20までしか下げられない

FoVによる違い 切り抜き無しの正方形の写真を、被写体が同等の大きさになるように前後調節して撮影した写真。FoV:1はものすごく遠くから、FoV:50はかなり近くで撮影している。顔をここまで画角いっぱいに取ることは無いので、実際にはここまで歪まない。

カメラは画角(FoV=Field of View)によって、視野の広さ(≒拡大率)、画像の歪みが決まります。。FoVが高いほど広角になり、その分歪みが大きくなり、小さいほど、視野が狭まり、歪みがなくなっていきます。

VaM起動時の標準設定ではFoV40ですか、この数字は人の肉眼に近いと言われている数値です。ウィンドウと肉眼の視野の大きさが一緒であれば、肉眼にかなり近い印象を受けます。

一般的なVRもこのあたりの数値を目指して調整されています。なお、実際には人間の目は常に補正が掛かっていて、ある種の錯視のような状態になっているので、肉眼を再現できているわけではありません。

VaMデスクトップでは画面下の「FoV」のスライダーでプレイヤーカメラ(CameraRig)のFoVを調整できますが、スライダーの目盛りは20までしか下げることができません。FoVは20を下限に制限されています。

このFoV20という数字は、フルサイズのカメラのレンズでいうと焦点距離が105mmのレンズです。さきほどのFoV40は50mmのレンズくらい(ざっくり)です。この焦点距離が大きいほどFoVは小さくなります。望遠鏡があんなに長いのは、焦点距離が長いからです。望遠鏡のFoVは極小ということですね。

実際のカメラで人物を撮影するときは105mmのレンズよりも焦点距離の大きいレンズを使うことがあります。特に、顔をアップで撮影したいときなどは、歪みを抑えるために135mmのレンズを使うことがあります。先程の画像でも、FoV10あたりが丁度いいですよね。

135mmのレンズは、FoVでいうと15~18くらいです。VaMのプレイヤーカメラは20までしか下げることができませんから、このような映し方ができません。

VaMのスクリーンショット

デスクトップでは撮りづらい

VaMはもともとVRを前提に作られているので、スクリーンショットの仕様もVR用になっています。VRでは、スクリーンショットモードに移行するとシーン内にスクリーンショット用カメラとそのプレビュー画面が出現し、それを手にとって撮影します。

プレイヤーのカメラと、スクリーンショットのカメラは別々になっているということですね。

デスクトップ版の場合もスクリーンショット用カメラとプレビュー画面がプレイヤーカメラの目の前に出現します。しかし手には取れないので、プレイヤーカメラを動かすことで、スクリーンショット用カメラが追従するような仕組みになっています。

文章ですでにややこしいですが、画作りはプレイヤーカメラで行いつつ、スクリーンショットカメラのプレビューを見て撮影することになるので、大変ややこしいです。もちろん操作性もややこしい。

スクリーンショットのカメラはプレイヤーカメラと違い、FoVが10まで下げられるので、歪みの少ないスクリーンショットを取ることが可能です。ただ、プレイヤーカメラで、FoV10のスクリーンショットカメラを覗くことになるので、通常カメラが撮影前の位置から程遠い位置に移動してしまうのを避けられません。

解像度が決まっている

スクリーンショットカメラで撮影する画像は解像度が1920×1080に固定されています。解像度を上げることも、アスペクト比を変えることもできません。

戻るときにUIを手動で再表示しないといけない

スクリーンショットモードからはEscキーで戻ります。スクリーンショットモードへ移行する際にすべてのUIが消えるのですが、通常モードに戻っても、再表示されず、手動で再表示しなければいけません。ただただめんどくさいです。

プラグイン「Desktop Screenshot」

Desktop Screenshotは上記の問題をすべて解決します。

FoVの問題解決

Desktop Screenshotを使うと、FoVが1まで下げれるようになります。プレイヤーカメラでも超望遠レンズ並の画角で画作り可能です。

また、プレイヤーカメラとスクリーンショットカメラのFoVが同期します。これにより、スクリーンショットを、通常カメラで捉えているままの画で記録できるようになります。

このプラグインにはスクリーンショット機能を強化する目的がありますが、FoVの制限解除のためだけに使っても問題ありません。スクリーンショットを取るとき以外は、ほとんど負荷はありません。

自由な解像度とアスペクト比で撮影可能

プラグインUIで長辺ピクセル数と、スクリーンショットのアスペクト比(縦横比)を元に、スクリーンショットを生成します。

長辺ピクセル数は「1920」、「3840」、「7680」、「9600」から選択可能です。縦と横長い方の長さが、この数値に揃います。

アスペクト比は、この数値は「ウィンドウの縦横比」、「16:9」、「3:2」、「4:3」、「1:1」から選択可能です。

No Adjustment(Window)

No Adjustment(Window) VaMのウィンドウサイズで高解像度スクショが可能

アスペクト比で「No Adjustment(Window)」を選択していた場合は、ウィンドウで見えているままの状態でスクリーンショットを生成できます。

正確なアスペクト比でトリミングまたは拡張

「No Adjustment(Window)」以外を選択していた場合は、選択したアスペクト比を元に短辺のピクセル数が計算され、ウィンドウで見えている状態からトリミングあるいは拡張されます。

このとき、ウィンドウの横幅と高さのうち、大きいほうが長辺となります。

例えば長辺ピクセル数を「1920」にし、アスペクト比を「16:9」にしてウィンドウを縦長にして撮影した場合、ウィンドウのアスペクト比がズレていても、きっちり1080px*1920pxの画像が生成されます。もちろんウィンドウを横長にすれば1920px*1080pxの画像が生成されます。

画像編集ソフトなどによるトリミングなしにきっちりしたアスペクト比のスクショが撮影できて便利です。

ショートカットキーによる撮影と、モード自動変遷

プラグインUIでTake a Screenshotキーを押すか、ショートカットキーを押すことでスクリーンショットが撮影できます。動画ではショートカットキーで撮影しています。

Desktop Screenshotではスクリーンショットモードに移行することなくそのまま撮影が可能です。

厳密には内部ではスクリーンショットモード以降→撮影→通常モード以降という処理が行われています。「ファイル(画像)を生成する」という動作はセキュリティリスクを孕むのでプラグインでは行えず、VaMに用意された機能を使ってスクリーンショットを取らなければいけないためです。

このため、撮影時には一瞬スクリーンショットカメラが出現し、フラッシュがたかれます。

また、UIを手動で再表示する必要がないようにしてあります。もし撮影前にUIが表示されていた場合にはUIを自動で再表示します。UIが表示されていなかった場合には、非表示のままです。

連続で撮影したいときなどは、予めF1キーで全UIを非表示にし、ショートカットキーで撮影し、撮影が済んだらF1キーで再表示というのが非常にスムーズだと思います。

プラグインのダウンロードと適用方法

ダウンロード

Google Drive

VaMルートフォルダに解凍してください。

バージョンは1.18.1.4の時点で作成しました。

適用方法

シーン内のいずれかのAtomのPluginsタブで「VaMJapan/DesktopScreenshot.cslist」を読み込みます。人AtomだとLood Lookなどしたときに設定が変わってしまうので、それ以外のものに読み込むのが良いです。

Session Pluginsとしても使えます。Atomの場合はシーンごとにFoVを保存できるのが便利ですが、起動初回にセッションプラグインとして読み込んでしまえばシーンをまたいでスクリーンショットを強化できるので楽だと思います。シチュエーションに応じて使い分けてください。

また、2つ以上読み込んだとき挙動は考えてないのでお気をつけください。

MacGruber氏のSuperResolution Screenshot Pluginと競合する部分があります。VRでなければ、Desktop Screenのみをロードするようにしてください。

使用方法

ここまでに説明したとおりなので、特に問題なく使えると思います。Save Key as Defaultボタンで、ショートカットキーを保存し、次回の読み込みから自動適用できるようになります。VaM本体が使用しているショートカットキーは使えないようになっています。

また、画面したのFoVスライダーに触るとそちらの値で更新されるので、触らないようにしましょう。

MSAA Overrideで、ゲーム本体の設定のMSAAを、撮影時のみ上書きできます。

既知の問題

高解像度に注意

9600pxではアスペクト比次第で、正常に動きません。1:1で撮影したい場合は、7680pxが最大だと思います。

リロードし過ぎに注意

メモリの解放でいちぶ不明な点があり、何度もリロード(またはEnable/Disable)していると徐々にに重くなっていきます。筆者がテスト中に何度もリロードしてようやく気づくレベルなので、使用には問題ないと思いますが念の為。

Post Magicとの相性

ポストエフェクトはピクセル換算で効果を与えるので、高解像度化したスクリーンショットだと、効果の及ぶ範囲が小さくなります。

Depth Of Fieldでは顕著に違いがでます。

大げさに効果をかけるか、そこまで高解像度しなくていい場合は3840pxくらいにしておけば、プレイヤーカメラと差異を減らすことができるでしょう。

それからDepth Of FieldのAutoFocus AdjustTimeは0.00にしておかないと、スクリーンショットカメラの出現から撮影までの間にフォーカスが間に合わず、ボケてしまうので注意してください。

再配布について

当プラグイン利用者はプラグインをシーンに含んでアップロードすることが可能です。その際に特記すべき事項はありません。

このプラグインを改変して配布する場合、配布時にVaMJapan(MaF)による制作であることを明記し、この記事へリンクを貼ってください。

FAQ

謎の写真が仕上がったんですけど?

解像度(Longer Side)が高すぎると、体が透明になったりします。解像度を下げてトライしてください。

UIも一緒に撮影したいんですけど?

高解像度で撮影する必要がないので、今のところ実装の予定はありません。Alt + Print Screenで撮りましょう。

まとめ

これでいい感じのスクリーンショットが取り放題!

デバッグがほとんどできていないので、なにか不具合がありましたら教えて下さい。

Special thanks

当プラグイン作成に当たり、MacGruber氏のSuperResolution Screenshot Pluginを参考にさせていだきました。ありがとうございます。

In building the plugin, I referred to MacGruber’s SuperResolution Screenshot Plugin. I’m very grateful

Referenced Plugin: https://www.patreon.com/posts/superresolution-30701052

Patreon: https://www.patreon.com/MacGruber_Laboratory