キャラクターのスプライト(表情と全身)

スプライトとは、うれしい、悲しいなど、1つの気分を表したキャラクターの絵です。Marinaraはそれをチャットのシーンの上に重ねて表示します。スプライトは自分でアップロードすることも、AIで生成することもできます。背景をきれいにしたり、表示のされ方を調整したりもできます。

始める前に: Marinaraが選べるように、各ファイルにはhappy.pngのように気分の名前を付けてください。Roleplayのチャットでスプライトを使うには、Expression Engineエージェント(スプライトを選ぶヘルパー)をオンにする必要もあります。チャットでのスプライトの表示を参照してください。

スプライトには2種類あります。

スプライトが画面に表示されるのはRoleplay ModeとGame Modeで、Conversationのチャットでは表示されません。キャラクターはどのチャットでも同じスプライトを持つので、アップロードはどのモードでもできます。ペルソナにも同じSprites(スプライト)タブがあります。

Spritesタブの場所

  1. キャラクター(またはペルソナ)をエディターで開きます。
  2. Spritesタブをクリックします。
  3. 上部で、Facial Expressions、Full-body、Clipsのいずれかのカテゴリーを選びます。

以下のセクションでは、Facial ExpressionsとFull-bodyを扱います。Clipsは通話機能の一部です。Conversationの音声通話とビデオ通話を参照してください。

手持ちのスプライトをアップロードする

PNG、JPEG、GIF、WebP、AVIF、SVGの画像をアップロードできます。いちばんきれいに見えるのは透過PNGです。キャラクターの周りの余白が透けるためです。不正な差し替え画像は受け付けられず、保存済みのスプライトはそのまま残ります。

1つまたは複数のスプライトをアップロードする

  1. Spritesタブを開き、Facial ExpressionsかFull-bodyを選びます。
  2. Add sprites(スプライトの追加)をクリックします。
  3. Upload images(画像のアップロード)をクリックし、フォルダーの中に移動してその画像を選びます。複数のファイルをまとめて選べます。
  4. Import images(画像のインポート)で、Import(インポート)をクリックします。Cancel(キャンセル)を押した場合は何も追加されません。

各ファイル名が、スプライトの名前(ラベル)になります。あとで名前を変えるときは、スプライトを開きます。新しいスプライトは、どのフォルダーにも入らない状態でグリッドに並びます。サブフォルダーの中は読み込まれません。インポートしたスプライトを整理するには、New folder(新しいフォルダー)を使います。

ペルソナエディターでスプライトを1つだけ追加するときは、Add Sprite(スプライトの追加)の名前欄とUpload(アップロード)ボタンを使います。

フォルダーごとアップロードする

フォルダーごとのアップロードは、ペルソナエディターで使えます。キャラクターの場合は、上のUpload images(画像のアップロード)を使い、フォルダーの中の画像を選んでください。

  1. ペルソナのSpritesタブを開きます。
  2. Add Sprite(スプライトの追加)ボックスで、Upload Folder(フォルダーをアップロード)をクリックします。
  3. 画像が入っているフォルダーを選びます。

拡張子を除いたファイル名が、スプライトの名前になります。処理中は「Uploading X/Y sprites」という進行状況の行が表示されます。サブフォルダーは、任意のスプライトフォルダーになります。エクスポートで作られたcatalog.jsonがあれば、フォルダーと編集したラベルも復元されます。フォルダーの項目に問題があれば報告されますが、使える画像はそのままインポートされます。

うまくいかなかった場合: インポートが失敗したり一部だけ成功したりした場合は、0枚の成功として表示せず、失敗を報告します。上に挙げたファイル形式を確認してください。

名前のバリエーション

ファイル名意味
happy_01.png、happy_blush.pnghappyの絵が2枚。どちらも名前をhappy_で始めます。
happy_pajamas.pngパジャマ姿のhappy。気分を先に、衣装を後に書きます。
angry_formalwear_soaked_01.pngangryで、正装で、ずぶ濡れ。末尾の番号は、同じ絵の別バージョンであることを示すだけです。

Expression Engineには、表情名(happy)と完全な名前(happy_pajamas)の両方が見えます。すべての単語に一致するスプライトがない場合は、最後の単語から先に外されます。そのため、happy_pajamas_woundedがなければhappy_pajamasが使われ、それもなければいずれかのhappyのスプライトが使われます。

チャットでのスプライトの表示

スプライトをいつ、どのように表示するかは、キャラクターのエディターではなく、チャットの設定で決めます。

Roleplay Mode

Roleplayでは、Expression Engineエージェントがスプライトの表示を担当します。エージェントとは、返信と並行して動くヘルパーです。エージェント: チャットを支えるAIヘルパーを参照してください。Expression Engineはメッセージごとの気分を読み取り、合う表情のスプライトを選びます。チャットに追加してください。持っていない場合は、Agent Organizerからインストールします。ダウンロードできるエージェント一覧を参照してください。

スプライトを表示するには、次の条件をすべて満たす必要があります。

Chat Settings → Agents(チャット設定 → エージェント)を開き、Expression Engineのカードを探します。

Game Mode

Game Modeでは、話しているキャラクターや戦っているキャラクターの全身スプライトが自動で表示されます。Expression Engineは必要なく、そのキャラクターの全身スプライトがあれば十分です。Game Mode: はじめにを参照してください。

スプライトの移動とサイズ変更

スプライトの表示対象をオンにすると、Expression EngineのカードにSprite Layout(スプライトの配置)が表示されます。

  1. Arrange(配置)をクリックし、各スプライトを好きな位置へドラッグします。
  2. Done(完了)をクリックします。

Reset(リセット)は、自分で決めた位置を消して自動配置に戻します。Default Side(デフォルトの表示位置)はLeftかRightで、最初はLeftです。ここを変えると、現在の配置の左右が入れ替わります。Apply to(適用対象)では、配置をすべてのキャラクターに設定するか、1人のキャラクターに設定するかを選べます。

サイズと透け具合は、4つのスライダーで決めます。Expression SizeとFull-body Sizeは5%から200%まで、Expression OpacityとFull-body Opacityは0%から100%までです。サイズと不透明度の初期値は、どれも100%です。

AIでスプライトを生成する

始める前に: 画像生成用の接続を追加してください。アニメーションするスプライトには、動画用の接続も必要です。AIプロバイダーへの接続を参照してください。

  1. Add spritesを開き、Generate Sprite(スプライトの生成)をクリックします。ペルソナエディターでは、このボタンはAdd Spriteにあります。Generate Spritesウィンドウが開きます。
  2. 上部でソースを選びます。Expressions (Portrait)(ポートレートの表情)かFull-bodyです。
  3. Image Generation Connection(画像生成の接続)を選びます。
  4. 必要に応じてReference Images(参照画像)を最大4枚まで追加するか、チェックボックスにチェックを入れて現在のアバターを参照画像として使います。
  5. Appearance Description(外見の説明)を書きます。これは必須です。
  6. 必要に応じてTransparent sprite background(スプライトの背景を透過)をオンにします。Marinaraが背景を透明にします。サービスがそれに対応していない場合、MarinaraはAppearance Descriptionの色とは異なる単色のグリーン、マゼンタ、シアンのいずれかで背景を描き、そのあとで背景を取り除きます。
  7. Expression Count(表情の数)、全身の場合はPose Count(ポーズの数)を設定し、作る表情やポーズを選びます。
  8. Generate(生成)をクリックします。

画像が届いたら、1枚ずつオンとオフを切り替えたり、名前を変えたり、切り抜いたりします。そのあと、選んだ画像をキャラクターのスプライトに保存します。そのカテゴリーで、生成されたラベルと同じラベルを持つ保存済みスプライトがちょうど1つだけある場合は、保存するとその画像が置き換わり、フォルダーとハンドルはそのまま残ります。そのラベルから名前を変えたスプライトは残ります。別々のフォルダーに同じラベルがある場合は、置き換えたいスプライトを手作業で置き換えてください。

Full-bodyのソースで、キャラクターにすでにポートレートの表情がある場合は、Match existing expression sprites(既存の表情スプライトに合わせる)にチェックを入れると、それぞれの表情名に合わせた全身のポーズを作れます。

生成には数分かかることがあり、遅いサービスではさらに時間がかかります。やり直さずに待ってください。一部のデバイス、たとえばAndroidの一部の環境では、AIによるスプライト生成と背景のクリーンアップを利用できません。その場合はボタンが無効になり、Marinaraが理由を表示します。

アニメーションするポートレート

Expressions (Portrait)のソースでは、Generate animated portraits(アニメーションするポートレートを生成)を使うと、短い動画クリップを作り、それぞれをループするGIFスプライトに変換します。GIFは、短いアニメーションを再生する画像ファイルです。この機能は、画像用の接続ではなく動画用の接続を使います。アニメーション表情を参照してください。

スプライトの背景をきれいにする

スプライトは、キャラクターだけが見えている状態がいちばんきれいです。生成したスプライトは、サービスが対応していれば本来の透過を使います。対応していない場合、Marinaraは画像に合わせて選んだ単色の背景色をふちをぼかしながら取り除き、髪や布などの半透明な部分に残ったその色も落とします。以前の白背景のスプライトも引き続き使えます。

スプライトを1枚ずつ手作業できれいにする

キャラクターのスプライトのプレビューを開いて杖のクリーンアップ操作を使うか、ペルソナのスプライトの画像をクリックします。クリーンアップの編集画面では、背景を消したり、部分を塗り戻したり、暗い背景、明るい背景、市松模様の背景に重ねて結果を確認したりできます。取り消し、元の画像へのリセット、終わったときの適用も行えます。

複数のスプライトをまとめてきれいにする

  1. キャラクターエディターでは、Select(選択)をクリックしてスプライトを選びます。ペルソナエディターでは、クリーンアップボタンは選んだスプライトに、何も選んでいなければ表示中のカテゴリーに対して働きます。
  2. Clean Backgrounds(背景のクリーンアップ)をクリックします。
  3. Cleanup strength(クリーンアップの強さ)スライダーを、SoftからAggressiveまで、0から100の範囲で設定します。初期値は35です。値を大きくすると背景をより多く取り除きますが、キャラクター側まで削れることがあります。
  4. 確定します。

Marinaraは安全のためにコピーを残します。「Last cleanup has a restore point」という行とUndo Cleanup(クリーンアップの取り消し)が表示されます。クリックすると、影響を受けたスプライトがすべて元に戻ります。

クリーンアップに対応している形式はPNG、JPG、JPEG、WEBP、AVIFです。GIFとSVGには使えません。

自動のクリーンアップは、まず画像を調べます。動作の速い内蔵のクリーンアップは、単色の背景と以前の白背景を処理します。ふちの色が均一でない場合、任意のAI背景除去機能がインストールされていれば、Marinaraはそちらに切り替えて使えます。込み入ったシーンや、背景と色が似ているキャラクターには、手作業の編集画面がいちばん安全です。

スプライトを管理する

キャラクターのスプライトを開くと、プレビューと操作が表示されます。ペルソナのスプライトは、操作がタイル上にあります。

フォルダーと選択

New folder(新しいフォルダー)をクリックすると、unnamedという名前の折りたたまれたフォルダーができます。名前をダブルクリックまたはダブルタップすると名前を変えられ、山形の矢印で展開できます。表情と全身のスプライトは、フォルダーが別々です。フォルダーは、フォルダーに入っていないスプライトより上に表示され、ドラッグで並べ替えられます。

スプライトをフォルダーにドラッグするか、フォルダーに入っているスプライトをフォルダーなしの領域にドラッグしてフォルダーから外します。スマートフォンでは、タイルを長押しするとドラッグが始まります。普通にスワイプすれば、これまでどおりスクロールします。フォルダーは整理のためだけのもので、アクティブなセットを選んだり、チャットやエージェントから画像を隠したりすることはありません。フォルダーを削除しても、中のスプライトはフォルダーなしで残ります。

Select(選択)をクリックすると、チェックボックスとSelect all sprites(すべてのスプライトを選択)が表示されます。選んだスプライトをまとめてドラッグしたり、クリーンアップや削除を使ったりできます。Cancel(キャンセル)で選択モードを終わります。検索は表示中のスプライトを絞り込みます。検索で何も見つからなくても、ライブラリーが空だという意味ではありません。

Character Sheet

キャラクターエディターのCharacter Sheetの行は、Manage(管理)で開きます。そこでシートを作成またはアップロードします。キャラクターの見た目を再現するときに優先させるには、Use as reference image(参照画像として使う)をオンにします。

スプライトのエクスポート

  1. Spritesタブを開きます。
  2. キャラクターのグリッドの上、またはペルソナのAdd Sprite欄にあるExport(エクスポート)をクリックします。
  3. 表示中のカテゴリーをエクスポートするならExpressions onlyまたはFull-body onlyを、すべてならAll spritesを選びます。

スプライトのファイルと、ラベルとフォルダーを記録したcatalog.jsonが入ったzipが作られます。キャラクターとペルソナのネイティブ形式でのエクスポートと、プロファイルのバックアップでも、このデータは保持されます。

関連ガイド

開発者向けリファレンス: スプライトのAPIとリンク

GET /api/sprites/:ownerIdは、フォルダーの有無にかかわらずすべてのスプライトを返します。GET /api/sprites/:ownerId/catalogは、フォルダーを1つずつインポートするツールのために、フォルダーと割り当てを加えて返します。各スプライトには、変わらないexpressionハンドル、編集できるlabel、folderId、URLが含まれます。割り当てにはフォルダーIDを使ってください。folders配列は保存されている順序で、新しいフォルダーが先頭に来るように、エディターでは逆順に表示されます。フォルダーの順序は、エージェントの優先度や利用可否を決めません。

チャットのアセットブラウザーは編集したラベルを表示しますが、挿入するのは具体的なcard://sprites/<ownerId>/<filename>リンクで、名前を変えたあとも使えます。card://sprites/facial/joy.pngのようなチャット単位のリンクも、編集したラベルを解決できます。一致するファイル名がすでにある場合は、そちらが優先されます。

任意のメタデータがない、または読めない場合でも、使える画像は隠れません。編集では、壊れたメタデータを置き換えずに拒否します。読み取り専用の一覧はアクセスできないライブラリーを飛ばし、エクスポートと書き込みの処理はリンクされた所有者ディレクトリーを拒否します。