こんにちは。
ハピネスワークKRです。
ゲームでキャラクターを作り、
そのキャラクターが会話をするシーンを作る時
表情の差分を作りたくなりますよね。
NTRディスピュートのゲーム画面
AIイラストで差分を作る方法として有名なのは
Stable Diffusionの「inpaint anything」という手法。
しかしこの方法は意外と納得のいく絵が生成しづらい。
inpaintで表情差分を試みたアーシャ
どこか表情がボケている
筆者もこの方法をトライしたのですが、
今一つ納得のいく絵が
思った絵が生成できないことがあるんです。
キャラクターの立ち絵やイベントイラストは
出来るだけ同じような絵を生成したいですよね。
そこで今回は、作者が実践している
「同じキャラの差分を作る方法」を
解説していきます!
是非、最後までご覧ください!!
こちらの記事では立ち絵の作り方を解説しています。
是非こちらもご覧ください。
差分生成の時に大事なポイントはこれ
Stable Diffusionで差分を生成する際、
押さえておくべきポイントはズバリ以下の通り。
- プロンプトを後半の表情以外一致させる
- シード値を固定する
- ControlNetで姿勢やアウトラインを固定する
この3つを押さえておけば
表情差分を生成することが可能になります。
例えば、こちらのように。
ティルの表情差分(NTRディスピュートより)
表情豊かな差分ですよね!
この差分を作る際のポイントを
より詳しく、次の章以降では解説していきます。
ポイント①:プロンプトの一致
Stable Diffusionでイラストを生成する場合、
プロンプトと呼ばれる英単語を当てはめることで
イラストを生成していきます。
このプロンプトが一致していないと
AIは異なる絵を生成してしまうため
プロンプトを出来るだけ一致させましょう。
プロンプトを記載する際に、
①絵の質を決めるプロンプト
②キャラクターの体型や髪色のプロンプト
③服装のプロンプト
④表情のプロンプト
のように順番を決めておくと
差分を作りやすくなると思います。
プラスで抑えるべきコツ
ワンポイント、追加のコツをお伝えします。
それは表情を表すプロンプトを
後半に持ってきたうえで生成することです。
(良い例)1girl, standing, school uniform, long skirt, black eyes, open mouth, smile |
(悪い例)1girl, open mouth, smile, standing, school uniform, long skirt, black eyes |
やや専門的な話になりますが、
Stable Diffusionは先に記載されたプロンプトに
優先的な重みを付けて絵を生成します。
つまり、最初に表情に関連するプロンプトがあると
差分を作る時に思わぬ誤差を生じる可能性があるのです。
いきなり色が変わるなどは、特に避けたいところです。
画像生成AIが生成するイラストを想定通りにするには
プロンプトの順番も重要であるというのは、
必須の知識なので是非押さえてください。
ポイント②:シード値の固定
プロンプトが一致していても、
異なるイラストを次々生成するのが
画像生成AIです。
そんな生成AIに同一人物を出してもらうには
「シード値」と呼ばれる項目を一致させてあげる必要があります。
同じプロンプトで生成した絵
シード値を固定することで
上のように「特徴が同じだけど違う絵」を
生成することを防ぐことができます。
なお、シード値を固定しても
プロンプトを微調整さえすれば
全く同じ絵が生成されることはありません。
ポイント③:ControlNetの活用
そして、もう一つ押さえておきたいのが
ControlNetを活用することです。
ここを抑えると更に生成の精度が上がります。
特にチェックしておくべきControlNetは
- Scribble
- Canny
- Openpose
の3つです。
こうしたControlNetを活用する理由は
キャラのアウトラインを一定にするため。
特に差分はポーズが同じという
制限をかけて絵を生成する必要があるため、
アウトラインを固定するのが大事になります。
それぞれのControlNetを
順番に軽く解説していきます。
①Scribble
Scribbleは「落書き」という意味の通り
絵の外観を大雑把に読みとり
アウトラインを絵に反映させて生成する技術です。
例えば、こちらの線画から
Scribbleを使って生成したイラストが
こちらです。
NTRディスピュートに登場するセリル
既に生成された絵や用意した絵から
アウトラインを抽出することも可能です。
このScribbleはいろいろと応用が利くため
是非使用したい機能です。
②Canny
CannyはScribbleの精密版とも言える機能。
線画を更に細かく抽出して
生成する絵に反映させます。
例えば、先ほど登場してもらった
セリルの絵をCannyに読み込ませると
こんな線画が出来上がります。
非常にディティールが細かい線画になるため
塗り絵のための線画作成にも応用できそうです。
かなり細かく線が固定されるため
より精密にイラストのアウトラインを固定できます。
ただその分、目を閉じた表情と開いた表情など、
少し異なる絵を作るには工程が増えるという
欠点もありそうです。
③Openpose
Openposeは棒人間を写真や絵から読みとり
姿勢を固定する機能です。
特に写真から読み取るのが得意です。
先ほどのイラストであれば、
こんな棒人間が出来上がります。
ただ、このOpenposeだけで
イラストから細かいポーズを指定するのは困難です。
特に、手や足の形を指定するのが難しい。
イラストからポーズを指定したい場合、
Openposeはサブとして知っておくといいでしょう。
まとめ
如何だったでしょうか?
今回は、表情の差分を作成する方法を
解説してきました。
おさらいをすると、以下の通りです。
- プロンプトを後半の表情以外一致させる
- シード値を固定する
- ControlNetで姿勢やアウトラインを固定する
こうした点に注意すれば、
Stable Diffusionを利用して
表情差分をつくることができますよ!
キャラクターの表情差分を作ることで、
あなたのゲームに登場させるキャラクターを
活き活きとさせてみてくださいね!
こちらの記事では、
表情差分の発展形とも言える
エッチな立ち絵の差分の作り方を解説しています。
そちらも、是非読んでみてください。
ではまた!
コメント