コンテンツにスキップ

保存マスク

保存する形は、Capture Controllerの Masks 配列で決めます。正方形・円・ひし形・ハート形も、自作の形も、同じ配列で扱います。Selected Mask Index が選択中の番号(0始まり)です。

  • 形は撮影するときに確定します。選択を変えるだけでは、撮影済み・保存済みの画像は変わりません。
  • 撮影中の切り替えは無視されます。
配列番号 引数なしの関数 サンプルの初期マスク
0 SelectMask1() Square
1 SelectMask2() Circle
2 SelectMask3() Diamond
3 SelectMask4() Heart
4 SelectMask5() 未登録
5以降 SelectMask(int maskIndex) 任意の追加マスク

引数ありの SelectMask は、先頭5件を含むすべての番号を選べます。たとえば capture.SelectMask(5) は6件目を選びます。別のUdonSharpから直接呼べます。引数なし版は SendCustomEvent("SelectMask1") やボタンのイベントから呼べます。

引数あり版は、選択できたときは true、できなかったときは false を返し、現在の選択はそのままになります。失敗するのは、撮影中、無効な番号、画像が未設定、Read/Writeが無効、解像度が合わない場合です。引数なし版に戻り値はありません。

配列を並べ替えると、ボタンが選ぶ形も変わります。独自のマスクに置き換えるときは、対応する配列の項目とボタンの文字も変更してください。

Textures/DefaultMasks に Square.png、Circle.png、Diamond.png、Heart.png が入っています。4枚とも181×181で、白が保存する部分、黒が保存しない部分です。ひし形をキャンバス全体に描いたとき、白い画素が16,384以下になる最大の正方形が181×181です。

マスク 保存する白画素数 白領域の外接サイズ
Square.png 16,384 128×128
Circle.png 16,373 145×145
Diamond.png 16,381 181×181
Heart.png 16,384 159×143

画像の端を切り取って上限に収める処理はしていません。解像度・白画素数・外接サイズは、同梱の MaskInfo.txt に記録されています。

形の内側の色だけを詰めて保存し、外側は透明に復元します。マスク内の穴や離れた部分も、そのまま残ります。

  1. 撮影用RenderTextureと幅・高さが両方一致するPNGなどを作り、保存したい部分を白、保存しない部分を黒に塗ります。穴のある形や離れた領域も使えます。白い画素数が異なるマスク同士も切り替えられます。
  2. UnityにImportし、Import Settingsで Read/Write を有効にします。輪郭を保つため、圧縮なし・Mip Mapsなし・sRGBなしがおすすめです。181×181のように2の累乗でない画像は、Non Power of 2 を None にして、インポート後も幅・高さが変わらないようにしてください。
  3. シーンまたはPrefab Modeで UdonImageLocalCapture を選び、Play Modeを終了します。
  4. Tools > Udon Image Syncronizer > Configure Capture Masks を開きます。
  5. Capture Controller を指定し、登録するマスク にTexture2Dを入れて、マスクを登録して選択 を押します。配列の末尾に追加され、その項目が選択されます。同じTextureを登録し直しても、重複して追加されません。
  6. 登録済みマスク の一覧で項目を選ぶと、下に画像と保存対象の画素数が出ます。最後にシーンまたはPrefabを保存してください。
  7. 実行中は、撮影し直して Save で保存します。
  • 判定にはRGBの明るさを使い、マスク自身のアルファは使いません。
  • 灰色は Mask Threshold(初期値0.5)以上なら保存します。
  • Invert Custom Mask で白黒を反転できます。デフォルトマスクにも適用されます。
  • 復元する側に同じマスク画像を入れる必要はありません。透明の判定は写真ごとに保存されます。

RenderTextureが未設定のときは、最初のマスクを登録するときに、画像の解像度から自動で作ります。CameraのTarget Texture・縦横比・ライブプレビューのTextureと表示比率も合わせて設定されます。自動で作ったRenderTextureとマテリアルは CaptureTextures フォルダに保存されます。

別の解像度に変えるときは、InspectorでMasks配列を空にし、CameraのTarget Textureを未設定にしてから、新しいマスクを登録してください。

  • 保存する画素は16,384以下です。
  • キャンバスは一辺1〜2048、全体で1,048,576画素以下です。
  • キャンバス全体が128×128を超えても、保存する画素が上限内なら保存できます。ただし、解像度を上げると撮影・マスク判定・復元の処理が重くなります。

背景色の色抜き(グリーンバック)

Section titled “背景色の色抜き(グリーンバック)”

撮影するときに、カメラの背景色と同じ色の画素を透明にできます。配置したPrefabのCameraは、初期状態で緑の単色背景(Solid Color)になっていて、この色抜きも有効です。そのままでも使えます。

  1. シーンまたはPrefab Modeで、UdonImageLocalCapture を選びます。Play Modeは終了しておきます。
  2. Tools > Udon Image Syncronizer > Configure Capture Masks を開き、Capture Controller を指定します。
  3. カメラ背景・透過色 で好きな色を選びます。ボタンを押す必要はありません。選んだ色がCameraのBackgroundに入り、背景色の色抜き(Capture Controllerの Use Camera Background As Transparent Color)も有効になります。Undoにも対応しています。
  4. 変更したら、シーンまたはPrefabを保存します。

Background Color Tolerance(設定画面では 色抜きの許容差)は、RGBの各成分に対する許容差です。0〜1で、初期値は0.02です。

  • 0にすると、背景色と完全に一致する画素だけが透明になります。
  • 大きくすると、背景に近い色も透明になります。
  • 撮影対象に背景と同じ色があると、その部分も抜けます。対象と違う色を背景に選んでください。たとえば背景が黒だと、黒い髪や服も抜けます。
  • 影・照明・反射で背景色が変わる場合は、Unlit Materialなどで色をそろえてください。

固定色で抜く、色抜きをやめる

Section titled “固定色で抜く、色抜きをやめる”
  • 固定色で抜くときは、Use Camera Background As Transparent Color を無効にして、Use Transparent Color を有効にし、Transparent Color に抜きたい色を設定します。この場合は、RGB565に変換した色が一致する画素が抜けます。
  • 色抜きを使わないときは、Use Camera Background As Transparent Color と Use Transparent Color の両方を無効にします。黒い画素も保存されます。