見出し画像

生成AIを活用してFFXIVスクリーンショットを高精細に加工する方法~写実風編~



前書き

Stable DiffusionのControl Net「Tile Resample」を使用してスクリーンショットから加筆加工したようなイメージを作成することが目的です。

髪や目が描き直されて高精細に。またポリゴン感やドット感もなくなり服のシワなどが表現されてリアルになっています。

準備

Stable Diffusion web UI

ローカルでもGoogle Colabでもいいのでこちらを準備してください。(ローカルの方が何かと融通が利きます。)
インストール方法はいろんなところで紹介されている思いますので検索から探しましょう。(できるだけ新しい記事を参考にするとよいかと思われます。)FFXIVをPC版で遊んでいる方は動作スペックは満たしていると思われます。GPUメモリ8GB以上であれば下記の作業は同様に動作するはずです。

2024年01月にマシンの再インストールをしたのでそのときの覚書を記事にしました。なんとインストールだけならダブクリを2回するだけで終わるようになってます。時代は進みました。

Photoshopβ版

細かいところで最新のPhotoshopの機能「生成塗りつぶし(ジェネレーティブ塗りつぶし)」を少々、AIガチャからの解放の為に「被写体の自動合成」を大量に利用します。他の画像編集アプリケーションを利用される場合はその箇所は読み飛ばすか読み替えるかして対応をお願いします。AIどうだこうだという記事ですが作業時間のほとんどはPhotoshopで画像を編集している時間になります。
30日間は無料体験版が利用できますのでそちらを利用していい感じなら購入というのもいかがかと。SS加工にしか利用しないのであれば980円/月のフォトプランがベターかと思われます。

Tagger Extensions

元SSの特徴をプロンプトに反映する為に、Stable Diffusionの拡張である「Tagger」を利用します。

https://github.com/toriato/stable-diffusion-webui-wd14-tagger

こちらのリポジトリをStable Diffusionから指定して拡張機能をインストールしてください。
具体的なインストール方法や利用方法などは
https://minorgame.syowp.com/archives/stable-diffusion-tagger.html
この辺りを参考にされてください。

Ultimate SD Upscale Extensions

最終出力イメージを高解像度にするために、Stable Diffusionの拡張である「Ultimate SD Upscale」を利用します。

https://github.com/Coyote-A/ultimate-upscale-for-automatic1111

こちらのリポジトリをStable Diffusionから指定して拡張機能をインストールしてください。
具体的なインストール方法や利用方法などは
https://self-development.info/ultimate-sd-upscale%E3%80%90%E6%8B%A1%E5%BC%B5%E6%A9%9F%E8%83%BD%E3%81%AE%E3%82%A2%E3%83%83%E3%83%97%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%A9%E3%83%BC%E3%80%91/

https://chitose-nanase.com/stable-diffusion-ultimate-sd-upscale/
この辺りを参考にされてください。

4x_foolhardy_Remacri アップスケーラー

最終出力イメージを高解像度にする際に利用するアップスケーラー「4x_foolhardy_Remacri」を追加します。

こちらからダウンロードしてStable Diffusionへインストールしてください。
具体的な導入方法や利用方法は
https://self-development.info/%e3%82%a2%e3%83%83%e3%83%97%e3%82%b9%e3%82%b1%e3%83%bc%e3%83%a9%e3%83%bc%e3%81%ae%e8%bf%bd%e5%8a%a0%e3%80%90automatic1111%e7%89%88web-ui%e3%80%91/
この辺りを参考にされてください。

RealDosMix Check Point

今回使用するモデル(CP)です。3次元と2次元のいいとこどりの様な絵を得意としているのでポリゴンゲームのSSを高精細にするのに向いています。

こちらからダウンロードしてStable Diffusionへ展開してください。
(stable-diffusion-webui\models\Stable-diffusion)

EasyNegativeV2とnegative hand Text Inversion

ネガティブプロンプトに付与するText Inversionです。

https://civitai.com/models/56519/negativehand-negative-embedding

こちらからダウンロードしてStable Diffusionへ展開してください。
(stable-diffusion-webui\embeddings)


作業

基礎SSの撮影

当たり前ですが基になるSSがないと始まりません。さくっとグループポーズして撮影してきましょう。コツ・・・というか後の手間を減らしたり、加工の見栄えをよくするためには「ソロでそこそこ大きめに撮影されたポートレート」なSSがやりやすいです。全身ではなく膝上や腰上の構図の方が加工で高精細になった感がわかりやすくなります。

ゴールドソーサーフェスティバルだったのでバニー装備を交換したついでに撮影しました。

AIに入れる前準備

・コピーライトの削除
文字をAI君に入れると何とか認識して「何か描かないと」と思われることが多いので最初に消しておきます。Photoshopの「コンテンツに応じた塗りつぶし」を使うとすんなり消せます。もともとReShadeやGEを利用してSSを撮影している場合はコピーライトは付与されていない為、飛ばしてください。

コピーライトを選択して「コンテンツに応じた塗りつぶし」を実行。
綺麗に消えました。

・貫通と埋没の処理
絵作りによっては飛ばせますがものすごく大事なところです。FFXIVは特に物理演算などを行わないので装備品や体の一部は物理法則を無視して貫通したり埋没したりしています。これをそのままAI君に読み込ませるとあるはずの物体を誤認したりないはずの物体を描きこんだりされます。要はいろんなところから手や指や変なオブジェクトが生えたり消えたりします。その為、この手の箇所を最初に画像編集で消してしまいます。今回のサンプルだと特にそういう箇所がないので違うSSを例示します。

例えばこのSSは白の抜刀ポーズ変更で撮影したものですが、タイラス(杖)がローブに完全に埋もれてしまっています。
端の柄の部分をコピーして描き足しました。
鎧の腰当と手が干渉しあっています。親指は完全に腹部に埋没しています。
手が完全に上にある形にしました。小指をもとにコピーペーストして修正しています。

・「手」の縮小
FFXIVのキャラは手が大きいです。特に通常身長の女性キャラは相対的に(通常の人間女性と比べて)かなり手が大きくなっています。これをAI君にそのまま読み込ませてしまうと手じゃない物体だと認識したり、1本の指を2本の指に描いてしまったり(指が途中で終わってそこからもう一本指が生えている)指の関節を5個くらいに(FFXIVのキャラクターは指に節がないのでAI君が長さから想像して描き足してしまう)してしまったりします。その為、画像編集で「手」を縮小してしまいます。

ペンツールなどを使って「手」を選択します。
「手」を別レイヤーに保存して選択範囲を読み込み、8pxほど拡張してその部分を「生成塗りつぶし」します。プロンプトに「delete hand」と指示します。
手が消えました。
Wを90%Hを80%くらいに縮小します。指の方向(今回は縦)を多めに縮小します。「指を短くする」イメージです。
手の比較。比べてみると元は顔くらいの大きさだったのがわかります。

・画像の保存(準備)
上記まで編集の終わった画像をPNG形式で保存しておいてください。
もしもの為に(あとで直し漏れに気づいた等)この段階のPSDファイルを別に残しておくのもオススメします。

この画像をAI君に加工させていきます。

・「顔」の切り取りと別画像の保存
上記までで基礎となる画像の準備は終わりですが、準備した画像から「顔の周囲部分だけを切り取った別画像」をさらに準備しておいてください。これはAI君が全身像から絵を生成する際に要素の多い顔部分はさぼりガチというかスポイルしやすい部分になっていまして、これを描きこむまでガチャを引くのも現実的ではない為「顔部分は別で生成AIに読み込ませてあとでPhotoshopで合成する。」という手法を採るためです。

顔周りを1280px*1280pxで切り取っておきました。

指定プロンプトの決定

まずTaggerを使ってSSからプロンプトを逆引きします。

Stable Diffusion web UIのTaggerタブを開きます。
対象の画像を指定してしばらく待つとプロンプトが推察されます。

1girl, avatar (ff14), solo, animal ears, pantyhose, rabbit ears, fishnets, au ra, fishnet pantyhose, hair over one eye, short hair, bow, scales, horns, grey hair, wrist cuffs, tail, underwear, panties, brown eyes, white hair

ここから必要だと思われる(実際に画像にその要素がある)プロンプトだけを抜粋します。また同じ意味で重複しているものも片方破棄します。個人的に「avatar (ff14)」はあまりいい結果にならないため外しています。

1girl, solo, pantyhose, rabbit ears, au ra, fishnet pantyhose, hair over one eye, short hair, scales, horns, grey hair, wrist cuffs, tail, panties, brown eyes

「顔」に必要な要素とそうでないものを並べ替えます。顔に関連するものを前にもってきます。

1girl, short hair, grey hair, brown eyes, hair over one eye, scales, horns, au ra, rabbit ears, solo, pantyhose, fishnet pantyhose, wrist cuffs, tail, panties 

これに品質関連のプロンプトを付与します。

best quality, masterpiece, realistic, photorealistic, unreal_engine, photograph, 1girl, short hair, grey hair, brown eyes, hair over one eye, scales, horns, au ra, rabbit ears, solo, pantyhose, fishnet pantyhose, wrist cuffs, tail, panties 

AIに基礎画像を読み込ませる~全体~

Stable Diffusion web UIのimg2imgタブを開きます。

以下の様に設定します。

img2img

Stable Diffusion checkpointにRealDosMixを選択します。 

プロンプトは上記で整理したものを指定します。ネガティブプロンプトにはEasyNegativeV2, negative_hand-negのみを指定します。

EasyNegativeV2, negative_hand-neg

上記で編集した元SSを選択します。

パラメータを指定。

それぞれの意味は何処か解説サイトなどをご確認ください。

Sampling method:DPM++ 2M SDE Karras

解像度:1008*1792
元SSにアスペクト比を合わせます。今回は2160*3840の9:16です。
筆者はメモリ8GBのGPUを使用しています。メモリオーバーしない最大の解像度を選ぶ形になります。解像度は縦横ともに8の倍数を入れるようにしてください。

計算用のスプレッドシートを共有しておきます。アスペクト比を入力すると解像度を算出してくれます。これが短長辺それぞれ整数になるようにするとドットずれしません。

Sampling steps:30
25~30くらいがオススメです。Seedガチャをしている状態では少なめに設定すると結果が早く取得できます。

CFG Scale:7
5~7くらいがオススメです。

Denoising strength:0.5
0.4~0.6くらいがオススメです。

ControlNetにtile_resampleを利用します。

ConrolNetを設定します。img2imgと同じ画像を指定してtile_resampleを使用します。

Control Weight:0.75
0.50~0.75くらいがオススメです。

どんどん生成していきます。

この状態でいい感じの絵になるまでガチャを回します。最も気になる「顔」に関しては個別で処理しますのでそこは見ずに全体として「イイ感じ」に思えるものを引いたらそのseedをメモします。

生成ファイル名の後半部分がseed値になります。
いい感じの画像が生成できました。ただこの装備の特徴であるタイツの色が変色しています。またアウラ族の特徴である鱗が別の何かに変換されています。

出来上がった画像の中で「ここはちょっと盛りすぎだな」「さすがにこの部分は元イメージと違いすぎだろう」という箇所がある場合は先ほどメモしたseedに固定してDenoising strengthを元の設定から「-0.5」しながらイイ感じになるまで生成を行ってください。

seed値は生成した画像のファイル名から確認できます。
鱗らしさをなんとか残しながらタイツの色もゲームイメージ通りの画像ができました。後でこれと混ぜ合わせていきます。

AIに基礎画像を読み込ませる~顔~

同じくimg2imgで処理します。

best quality, masterpiece, realistic, photorealistic, unreal_engine, photograph, 1girl, short hair, grey hair, brown eyes, hair over one eye, scales, horns, au ra, rabbit ears

プロンプトは顔に関するものだけを抜粋します。先ほどの整理で前部に持ってきているので後ろをカットする形です。

いい感じに生成できました。ないはずの耳が見えたりする部分は後でPhotoshopで修正していきます。

コツは全体と同じですが、Denoising strengthを落としすぎると髪の毛の低解像度テクスチャ感が残りやすいので髪の毛以外だけでパーツ取りすることも検討してください。

Denoising strengthを落とした例。もとのイメージを残しやすくなるが描き直しがあまりされなくなるためドット感が残りやすくなる。

プロンプトで指示をしてもどうしても目や髪の色が思ったものにならない場合は「EasyNegativeV2」をNPから外してみるとうまくいく場合があります。

目や髪の色が具体的にどのようなプロンプトにすればよいか分からない場合は上記サイトなどを参考にされてください。

Photoshopでこれまでの生成画像を結合する

最も「イイ感じ」にできた画像をベースにします。
ベース画像に他のDSで作成したものや顔を重ねていきます。

タイツと腰部の鱗をベース画像に合成します。

大まかに切り取って。

ベース画像にペースト。座標は同じ位置になるようにします。

重ねます。

背景をレイヤーにした後、パーツの選択範囲を読込しそれを縮小(8px程度)しベース画像の部分を削除。

選択範囲を取得、縮小してベースを削除。そのあとレイヤーの自動合成を使用して結合していきます。

レイヤーを二つ選択して、編集からレイヤーの自動合成、パノラマを選択してOK。
境界線が気にならなくなりました。
なげなわツールで選択します。

顔も同様に大まかに切り取って。

ベース画像に重ねていきます。やり方は上記と同じくレイヤーの自動合成を使用します。

縮小して重ねます。1008/2160なので46.66%に縮小します。

ベース画像にいろいろなパーツをキメラ合成して出来上がったのがこの画像です。これをアップスケールして最終結果の画像を取得します。

以後はこの画像をAI君に入れていきます。

おまけ~上半身の一部を豊穣にする~

注)ここは特にやる必要はない項目です。胸部や胸囲に興味が無い方は読み飛ばしてください。

img2imgからinpaintを選択し、先ほど編集した画像を選択します。

Stable Diffusion web UIのimg2imgタブを開き、inpaintを選択します。

少し広めに塗り潰してください。

品質関連のプロンプトを設定した後に「large breast」を指示します。さらにinpaintで胸部のみを塗り潰します。

best quality, masterpiece, realistic, photorealistic, unreal_engine, photograph, large breast
inpaint maskedを選択。その他パラメータはベース画像作成時と同様にします。

いい感じのを引くまで何枚か画像を生成していきます。

出来上がった画像と元胸部との比較。ボタンは犠牲になったのじゃ…犠牲の犠牲にな…

アップスケールして最終出力画像を作る

Stable Diffusion web UIのimg2imgタブを開きます。
プロンプトを品質プロンプトのみにして

best quality, masterpiece, realistic, photorealistic, unreal_engine, photograph

パラメータを
解像度:1008*1792(ベース画像の解像度)
Sampling steps:20
Denoising strength:0.25
に設定してScriptから「Ultimate SD Upscale」を選択します。

赤枠部分を指定してください。


「Custom Size」を選択して出力したい解像度を入力します。
筆者は2160*3840(4K)を主に使っています。
しばらく待つと処理が完了してファイルが出力されます。
ファイル容量が大きくなる都合上、ブラウザから画像を取得するとJPGファイルになってしまいます。
stable-diffusion-webui\output\img2img\今日の日付
から直接PNGファイルを取得してください。

完成

編集、公開

Photoshopを使用して、ゆがみツールで顔をちょっといじったりCameraRawフィルターで色味を変えたり調整レイヤーを重ねたりした後、文字入れとコピーライトを付与して完成です。

完成画像。4K解像度になりドット感もありません。

作例

今までに加工したイメージを別記事でアップしています。

問合せ

Twwiterメール
記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。Copyright (C) SQUARE ENIX CO., LTD. All Rights Reserved.


この記事が参加している募集

#AIとやってみた

27,268件

この記事が気に入ったらサポートをしてみませんか?