🎮使い方の例
Last updated
Last updated
ここでは具体的に2Dゲームの背景画像を題材にstable-diffusion-for-unityの使い方の例を紹介します。
2D横スクロールゲームのステージ制作を行うワークフローを想定しています
ゲームシステムの簡易モデリング
Depth2Imgによる画像生成
必用に応じてText2Imgによる背景画像制作
画像編集+Img2Imgによる生成画像の調整
Unity内のカメラ情報から取得したDepthを用いてDepth2Imgをします。
このためのカメラ設定および生成した画像を使用するCanvasを設定します。
Gameビュー解像度 今回は横スクロールゲームを想定しており大きな横幅で生成するため1920x540を設定します
Cameraを設定
CameraをDepth用に設定します。ここではRawImageがDepthに影響を与えないようにするためCameraのRendering > Culling MuskのUIを外します。
ProjectionをOrthographicに変更
ClippingPlanes Near/Farを調整 Near<->Farの差がを小さめに設定してください。これによりDepthが反映されやすくなります。
Canvas, RawImageを作成
CanvasのRenderModeをWorldSpaceに変更
Canvas/RawImageのサイズをカメラに合わせて調整する
RawImageにText2ImageWithControlNet.csをアタッチし生成する画像のサイズを指定 今回はGameビューで設定した1920x540を設定します。
作りたいゲームのステージのベース形状を作ります。今回はProBuilderを使って制作しています
※Depth2ImgにはControlNetを使用しておりVRAMをかなり使用します。VRAM不足で生成できない場合は解像度を落とすなどが必用となります。
作った3Dモデルの形状に合わせて画像生成をします。
RawImageのText2ImgWithControlNetコンポーネント上でパラメータを設定してGenerateより画像生成を行います。
ControlTypeでDepth/Normalを選ぶことでUnity上のカメラ位置からの情報を利用してUnity上の3Dモデル形状に則した画像生成を行うことが可能です。
Input | Depth | Normal |
---|---|---|
Depth/Normalはそれぞれ3Dモデルの形状に則した画像が生成されますがそれぞれ上記の画像のような情報が入力となっています。大まかにNormalの方が直線的な線は正しく生成されますが平行な段差などが表現されにくいといった特性があります。
思ったような画像を出力できない場合、CfgScale, Weightなどのパラメータを調整したりModelやLoRAの設定を行ってください。
各パラメータの設定方法はこちらをご確認ください
Text to Image With ControlNetおすすめは絵柄を学習したLoRAを適用することで複数ステージで一貫性をもたせる使い方です。
※LoRAなどモデルの学習に許諾のない他人の画像を利用するなどの行為は規制が追い付いていない領域です。運営は一切の責任を負いません。クリエイター同士敬意を持って人の権利を侵害しないよう注意して使用してください。
ある程度よい画像が出来たら、他のツールやImage to Imageなどと組み合わせることで調整が可能です。
生成された画像をImage2Imageや別の画像編集ツールと組み合わせてこまかな調整をします。
生成された画像はStreamingAssets内にあるのでこの画像をPhotoshopで大雑把に修正
この画像をImage2ImageやInpaintを使って調整
stable-diffusion-for-unityではStableDiffusionWebUIを動かしているためコマンドプロンプトに記載のURLよりWebUIの機能を使用することが可能です。
今回はImage2ImageとInpaintを使用して整えました
調整で以下のステージ画像を作りました。
この画像を背景画像として、作った元のステージモデル上にキャラクター等を配置、SortingLayer,Order in layerを適切に設定することでゲームステージとしてりようすることが出来ます。