🎮使い方の例

ここでは具体的に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を設定します。

ゲームシステムの基礎となるステージ3Dモデルの作成

作りたいゲームのステージのベース形状を作ります。今回はProBuilderを使って制作しています

Depth2Imgによる画像生成

※Depth2ImgにはControlNetを使用しておりVRAMをかなり使用します。VRAM不足で生成できない場合は解像度を落とすなどが必用となります。

作った3Dモデルの形状に合わせて画像生成をします。

RawImageのText2ImgWithControlNetコンポーネント上でパラメータを設定してGenerateより画像生成を行います。

ControlTypeでDepth/Normalを選ぶことでUnity上のカメラ位置からの情報を利用してUnity上の3Dモデル形状に則した画像生成を行うことが可能です。

InputDepthNormal

Depth/Normalはそれぞれ3Dモデルの形状に則した画像が生成されますがそれぞれ上記の画像のような情報が入力となっています。大まかにNormalの方が直線的な線は正しく生成されますが平行な段差などが表現されにくいといった特性があります。

思ったような画像を出力できない場合、CfgScale, Weightなどのパラメータを調整したりModelやLoRAの設定を行ってください。

各パラメータの設定方法はこちらをご確認ください

pageText 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を適切に設定することでゲームステージとしてりようすることが出来ます。

Last updated