保存マスク
保存する形は、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が無効、解像度が合わない場合です。引数なし版に戻り値はありません。
配列を並べ替えると、ボタンが選ぶ形も変わります。独自のマスクに置き換えるときは、対応する配列の項目とボタンの文字も変更してください。
デフォルトの4枚
Section titled “デフォルトの4枚”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 に記録されています。
形の内側の色だけを詰めて保存し、外側は透明に復元します。マスク内の穴や離れた部分も、そのまま残ります。
自作の白黒マスクを登録する
Section titled “自作の白黒マスクを登録する”- 撮影用RenderTextureと幅・高さが両方一致するPNGなどを作り、保存したい部分を白、保存しない部分を黒に塗ります。穴のある形や離れた領域も使えます。白い画素数が異なるマスク同士も切り替えられます。
- UnityにImportし、Import Settingsで
Read/Writeを有効にします。輪郭を保つため、圧縮なし・Mip Mapsなし・sRGBなしがおすすめです。181×181のように2の累乗でない画像は、Non Power of 2をNoneにして、インポート後も幅・高さが変わらないようにしてください。 - シーンまたはPrefab Modeで
UdonImageLocalCaptureを選び、Play Modeを終了します。 Tools > Udon Image Syncronizer > Configure Capture Masksを開きます。Capture Controllerを指定し、登録するマスクにTexture2Dを入れて、マスクを登録して選択を押します。配列の末尾に追加され、その項目が選択されます。同じTextureを登録し直しても、重複して追加されません。登録済みマスクの一覧で項目を選ぶと、下に画像と保存対象の画素数が出ます。最後にシーンまたはPrefabを保存してください。- 実行中は、撮影し直して
Saveで保存します。
- 判定にはRGBの明るさを使い、マスク自身のアルファは使いません。
- 灰色は
Mask Threshold(初期値0.5)以上なら保存します。 Invert Custom Maskで白黒を反転できます。デフォルトマスクにも適用されます。- 復元する側に同じマスク画像を入れる必要はありません。透明の判定は写真ごとに保存されます。
RenderTextureの自動作成
Section titled “RenderTextureの自動作成”RenderTextureが未設定のときは、最初のマスクを登録するときに、画像の解像度から自動で作ります。CameraのTarget Texture・縦横比・ライブプレビューのTextureと表示比率も合わせて設定されます。自動で作ったRenderTextureとマテリアルは CaptureTextures フォルダに保存されます。
別の解像度に変えるときは、InspectorでMasks配列を空にし、CameraのTarget Textureを未設定にしてから、新しいマスクを登録してください。
画素数の上限
Section titled “画素数の上限”- 保存する画素は16,384以下です。
- キャンバスは一辺1〜2048、全体で1,048,576画素以下です。
- キャンバス全体が128×128を超えても、保存する画素が上限内なら保存できます。ただし、解像度を上げると撮影・マスク判定・復元の処理が重くなります。
背景色の色抜き(グリーンバック)
Section titled “背景色の色抜き(グリーンバック)”撮影するときに、カメラの背景色と同じ色の画素を透明にできます。配置したPrefabのCameraは、初期状態で緑の単色背景(Solid Color)になっていて、この色抜きも有効です。そのままでも使えます。
背景色を変える
Section titled “背景色を変える”- シーンまたはPrefab Modeで、
UdonImageLocalCaptureを選びます。Play Modeは終了しておきます。 Tools > Udon Image Syncronizer > Configure Capture Masksを開き、Capture Controllerを指定します。カメラ背景・透過色で好きな色を選びます。ボタンを押す必要はありません。選んだ色がCameraのBackgroundに入り、背景色の色抜き(Capture ControllerのUse Camera Background As Transparent Color)も有効になります。Undoにも対応しています。- 変更したら、シーンまたはPrefabを保存します。
Background Color Tolerance(設定画面では 色抜きの許容差)は、RGBの各成分に対する許容差です。0〜1で、初期値は0.02です。
- 0にすると、背景色と完全に一致する画素だけが透明になります。
- 大きくすると、背景に近い色も透明になります。
気をつけること
Section titled “気をつけること”- 撮影対象に背景と同じ色があると、その部分も抜けます。対象と違う色を背景に選んでください。たとえば背景が黒だと、黒い髪や服も抜けます。
- 影・照明・反射で背景色が変わる場合は、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の両方を無効にします。黒い画素も保存されます。