VRChatアバターまたは衣装全体のマテリアル案を、AS ISと比較して編集するUnity Editor拡張です。
Gokoukotori > MaterialPreview > 編集を選択します。選択オブジェクト自身に対応Rendererがあれば、そのRendererの比較を開始します。RendererがなくMaterialModifier/AOMEがあればその設定の編集モードを開始し、いずれもなければアバター全体の比較を開始します。複数の設定がある場合は編集対象を選択します。Tools > Gokoukotori > MaterialPreview > 開くからの指定も可能です。比較中はアバター・衣装ルートの指定を固定します。対象を変える場合は「比較を終了・対象を変更」を使用します。プレビューの初期化に失敗した場合は「プレビューを復旧」で描画側も再作成します。
中央上部の「表示」で「3D比較」と「プロパティ比較」を切り替えられます。プロパティ比較では、選択マテリアルのAS ISを左(参照専用)、すべてのTO BEを案の順に右へ並べ、シェーダー付属のGUIで表示・編集できます。3D比較のチェック状態や同時表示上限にかかわらず全案を表示し、収まらない列は横スクロールで確認できます。右側にあった編集欄は中央へ移動し、既存の上書き・今回の変更も確認できます。左右は独立してスクロールでき、条件付き表示によって項目の位置が異なる場合があります。表示切り替えでは編集値・案・3Dカメラの状態を保持します。
3D比較の「照明」で、標準・逆光・横光・暗所・強い光・暖色・寒色を切り替えられます。AS ISとすべてのTO BEに同じ照明を適用します。「照明の調整・落ち影確認」を開くと、球のドラッグまたは左右・高さのスライダーで光の方向を変更でき、光の強さ・環境の明るさ・光の色も調整できます。左右0°は正面、±90°は横、±180°は逆光で、カメラの左右回転に追従します。高さは床の水平面を基準にします。球の黄丸は手前、白い輪は背後の光です。手動調整時は「カスタム」と表示します。「光を一周」は光を自動で一周させ、再クリックで停止できます。プロパティ比較へ切り替えた場合も停止します。
「影」でリアルタイムの影を切り替え、「床」「遮蔽物」で落ち影の確認用オブジェクトを表示できます。元RendererのCast Shadows/Receive Shadowsとシェーダー側の影設定に従うため、影を無効にした対象では表示されません。衣装モードでは選択範囲外のアバター本体は影を落としません。照明設定はプレビュー復旧・表示切り替えでも保持し、元Sceneやマテリアルの保存内容には含めません。暗所では直接光と環境光を下げ、発光や明るさの下限を確認できます。Bloomによるにじみ、発光による周囲への間接照明、ワールド固有のLight Probe・反射・ポストエフェクトの再現は対象外です。
保存は選択した案を採用して編集を終了する操作です。成功後は採用案と開始時のAS ISを表示用に保持し、他の案を破棄します。他にも変更した案がある場合は、その案名を示して破棄を確認します。保存をUndoしても破棄した案は復元されず、編集は再開しません。保存内容の確認ダイアログでは、検証・保存を開始する前にキャンセルできます。キャンセル時は保存処理を実行せず、各案を保持します。開始後は途中キャンセルできないため、完了または失敗までお待ちください。保存に失敗した場合は、Material Previewの保存による変更を復元し、各案を保持します。保存対象に変更がなければ保存ボタンは無効です。
案は複数マテリアルの変更をまとめて保持します。同じ元Materialでも適用設定・Prefab由来が異なるスロットは別項目になります。案は一時編集データであり、閉じた後に案を読み戻すプリセット機能はありません。
「既存の上書き」にはPrefab継承階層のMaterial割り当て、Material Variant、AOME、TTT MaterialModifierの設定元と変更前後の値を表示します。後段で同じプロパティが上書きされる設定も表示します。既存の設定を読み込んだだけでは未保存扱いになりません。「今回の変更」は読み込み時点のAS ISからの差分です。リセットはAS ISへ戻す操作であり、既存Overrideを解除する操作ではありません。
Scene上のアバター内にあるMeshRenderer/SkinnedMeshRendererを持つGameObjectを右クリックし、Gokoukotori > MaterialPreview > Rendererのマテリアルを編集(または編集)を選択します。子や兄弟のRendererを含めず、選択したRendererだけを通常・VRの3D比較に表示します。非表示のRendererはプレビューでも非表示です。EditorOnly、Prefab編集モード、アバター外のオブジェクトは対象外です。
一覧はマテリアルスロット番号付きで表示します。同じMaterialの重複スロットや未割り当てを区別し、AOMEのスロット除外も反映します。Rendererからアバタールートを特定し、ルート配下の別の枝も含めて、そのスロットに適用されるAOME/TTT MaterialModifierを調べます。空の設定も候補に含み、有効な設定が1件なら自動的に既存設定の編集を開始します。複数の設定、または無効な設定だけがある場合は、一覧上部の「編集先」から選択してください。候補は適用順に並び、階層パスとコンポーネント番号、有効状態を表示します。「通常のマテリアル編集」へ明示的に切り替えることもできます。
既存設定の編集では、そのコンポーネントが対象とするすべてのRenderer・スロットに変更が及びます。画面と保存確認で対象数を表示します。選択Rendererだけに変更を保存したい場合は、通常編集のMaterial Variant等を使用してください。編集欄は選択設定の直後、3Dは後続設定も含めた結果です。後段で上書きされるプロパティや、無効な設定の変更は3Dへ反映されません。
別の編集先や通常編集へ切り替える際、未保存の案があれば保存・破棄・キャンセルを確認します。同じ設定内のスロット選択では案を保持します。複数の異なる設定を同時に編集・一括保存する機能ではありません。元データの変更で比較が停止した場合は「比較を開始」で同じRendererを読み込み直せます。既存コンポーネントのInspectorコンテキストメニューからは、従来どおりコンポーネント単位で開けます。
MaterialModifier/AOMEを選択してウィンドウを開くか、「選択中の設定を編集」、コンポーネントのコンテキストメニュー「Gokoukotori > MaterialPreview > 編集」を使用します。Scene上のアバター内の設定が対象です。
Windows x64 / Direct3D 11のUnity Editorから、SteamVR対応HMDへ一つの比較空間を表示します。Edit Mode専用です。PC接続したQuest等もSteamVR経由で使用します。Quest単体では実行できません。
目線の位置と体感スケールを調整するには、「現実の目の高さ (cm)」と「VR空間の目の高さ (cm)」を指定します。どちらも床から目までの高さで、頭頂までの身長ではありません。初期値は両方160cm(倍率1)です。VR空間側は目の高さを手入力するか、「比較中アバターのView Positionから取得」でSDKの基準値を読み込みます。VRChatで拡大・縮小している場合は、その変更後の目の高さを手入力してください。
現実側は手入力のほか、VR開始後の「HMDから現実の目の高さを取得」、またはVRメニューの「More → Measure height」で取得できます。SteamVRの床設定を確認し、立って正面を向いて取得してください。取得は明示的な操作時だけ行い、その後にしゃがんでも基準値を変更しません。HMD中心ではなく左右の目の中心の高さを使います。
体感スケールは「VR空間の目の高さ / 現実の目の高さ」を倍率とし、床を原点に頭・手・両眼の位置へ同じ倍率を適用します。現実160cm/VR空間104cmなら0.65倍で、現実の10cmの移動はVR空間の6.5cmになり、立った目線は104cmになります。現実の床はVR空間の床に対応し、しゃがむ量も同倍率で反映します。HMD固有の視野角は維持し、両眼の間隔による体感スケールを調整します。メニューのサイズと手からの距離、近距離クリッピングも同倍率にします。設定変更時は現在の水平位置・対象との水平距離と手動の高さ移動を保持します。スティック操作速度は変更しません。
設定はウィンドウのシリアライズ状態に保持し、新しいウィンドウでは初期値に戻ります。通常のPC画面の3D比較は従来の投影方法を使用します。
これは目の高さを基準にする体感スケールの調整です。VRChatの腕の長さによる測定、IK・キャリブレーションの内部処理、ミラーの位置や距離までの一致を保証するものではありません。実際の違和感の解消は、同じHMD・VRChatの目の高さ・対象との距離を揃えて確認してください。
| 操作 | 入力 |
|---|---|
| 移動 | 左スティック。左Gripを押すと加速。 |
| 旋回 | 右スティック左右。頭の位置を中心に連続旋回。 |
| 高さ | 右Grip+右スティック上下。 |
| ラジアルメニューの表示/非表示 | 左Yまたは右Bを0.5秒長押し。Indexは左右B、Viveは左右Menu。手を離しても表示を保持し、次の長押しで閉じます。 |
| メニュー選択・決定 | 開いた側のスティックを項目の方向へ倒し切ってフリック選択。途中まで倒すとカーソルとハイライトで候補を確認できます。トリガーでも決定でき、Viveは既定でトリガー確定です。「オプション」の「フリック選択」で切り替えます。 |
| 照明調整 | 照明、左右・高さ(左右=方位±180°・上下=仰角±80°)、光の強さ(0〜5)、環境の明るさ(0〜100%)、光の色(左右=色相・上下=彩度)。光の強さ/環境の明るさは上端0%から時計回りの角度で調整します。中央へ戻しても値を保持し、中央+トリガーで戻ります。 |
| 影の確認 | 「影」、オプション → 「床」「遮蔽物」。 |
| 現実の目の高さを取得・位置を戻す・終了 | オプション → 「HMDから現実の目の高さを取得(VR開始後)」「位置リセット」「VRを終了」。Editorの「VRを終了」からも終了できます。 |
各ページの上端は「戻る」(ルートでは「閉じる」)です。スティック中央+トリガーでも一階層戻れます。メニューボタンの長押しで非表示にした場合は現在の階層を保持します。円形の中央、アイコン、選択カーソル、有効/無効表示、プリセットの選択マーカーとPuppetゲージで現在の状態を確認できます。床・遮蔽物・目の高さ取得・位置リセット・VR終了は「オプション」から操作します。メニュー項目と値表示・操作案内は日本語で表示し、照明プリセットと照明調整・VR終了・目の高さ取得の名称をEditorWindowと揃えています。
左右それぞれに同じメニューがあります。開いた手の移動/旋回入力はメニューへ割り当て、閉じた後もスティックとGripを一度離すまで移動を再開しません。両手が同じフレームで照明を書き換えた場合は左手を優先します。トラッキング・入力フォーカスを失うとメニューを閉じて移動を止めます。SteamVRのコントローラーバインド設定からボタンを変更できます。既定バインドはTouch / Quest Touch Plus / Index / Viveです。
SteamVRダッシュボードの操作中も、HMDの追従と背景の比較描画は続けます。別のVRアプリに表示が切り替わった場合は待機し、表示権限が戻ると同じ視点原点から再開します。
照明はデスクトップ比較と共有します。VR空間では光の方位を空間に固定するため、移動・旋回だけで照明方向は変化しません。表示対象の形状とマテリアルの対応範囲は通常の3D比較と同じです。アニメーション・PhysBoneやVRChat本番の完全再現ではありません。全案を両眼に描くため、案の数やアバターの負荷でフレームレートが下がります。初期描画サイズはSteamVR推奨値の縦横比を保持し、長辺2048以下に制限します。両眼を4x MSAA(非対応GPUでは対応サンプル数)で描き、輪郭のジャギーを抑えてから単一サンプルの送信用テクスチャへ解決します。GPU処理時間・VRAM使用量はMSAAなしより増えます。
VR表示中はデスクトップ比較画像の更新を休止し、モデル形状は変更を検出した場合だけ作り直します。案の編集は引き続きVRに反映し、VR終了後はデスクトップ比較の更新を再開します。VR欄には送信要求fps、両眼のCPU描画・送信要求時間、片眼の解像度を表示します。fpsはUnityから画像の送信を要求した頻度で、SteamVRの再投影後の表示fpsではありません。時間には非同期のネイティブ待機・GPU処理時間を含みません。
VR中の定期検査では変更バージョンを確認し、変更がない間はMaterialのJSON化・コンポーネント評価・依存ハッシュ検査を省略します。元データの編集・階層変更・アセット更新・Undoを検出すると完全検証を実行し、保存前にも必ず完全検証を行います。VR表示中は比較ウィンドウの再描画も要求し、準備済みフレームを更新時と描画直前に処理します。両眼の送信後はD3D11の保留コマンドをFlushでGPUへ発行してからSteamVRへ引き渡し、描画スレッドで続けて次のフレームを待機します。
Editor/VR/ThirdParty/LICENSE.txt に含めています。Library/MaterialPreview/VR/OpenVR-1.16.8/material_preview_openvr_api.dll、利用ON/OFFは Library/MaterialPreview/VR/settings.json です。DLLはVR開始前にもハッシュ検証します。途中キャンセルや検証不一致では利用しません。HMDの両眼表示、トラッキング遅延、機種ごとのバインド、SteamVRからの復帰、実アバターの負荷は実機で確認してください。Editor自動テストは機器なしで比較配置・描画・入力状態・解放処理を検証します。
| 方式 | 結果・条件 |
|---|---|
| TTT MaterialModifier | アバター配下に新しい設定を作成。対象外Rendererと元マテリアルを共有する場合は拒否します。 |
| AO Material Editor | アバター配下に新しい設定を作成。衣装以外の共有スロットを除外します。 |
| Direct Material | Assets内の書き込み可能な元.matを更新。他のPrefabやSceneの参照にも影響します。元がVariantの場合は未対応です。 |
| Material Variant | 指定したAssets内フォルダにVariantを作成し、対象内のRendererスロットへ割り当てます。Shader変更と親でロックされたプロパティ変更は拒否します。 |
| 既存設定を更新 | 各マテリアルの「既存の上書き」欄で選択したAOME / TTT MaterialModifierを更新します。今回変更したプロパティのみを更新し、その他の明示設定は維持します。Prefab由来の設定もSceneのOverrideとして保存し、Prefabアセットへは適用しません。 |
選択した案の変更分だけを保存します。「既存設定を更新」以外のTTT/AO保存では、新しい設定を追加します。PrefabのMaterial差し替えのみで更新先コンポーネントがない場合はVariant保存等を選択してください。既存設定との競合や対象外スロットへの波及を含め、保存予定結果と保存後のMaterial状態を複製アバターのNDMF処理で検証します。Material状態が不一致の場合は保存を中止し、保存中の変更は復元します。更新先の既存設定が後段で上書きされる場合も、期待するMaterial状態と一致しなければ保存できません。
保存検証が保証するのは、追跡可能なRenderer/スロットのMaterial状態の一致です。Shader・プロパティ値・Texture参照とScale/Offset・Render Queueの実効値・Keyword・GI・Instancing・Tag・Pass状態を照合します(これらすべての編集を保存できる意味ではありません)。数値等は既存の差分判定の許容誤差で比較します。MLICの一時生成画像は参照が異なるため、画像データとサイズ・形式・MipMap等を照合します。その他のTexture画像自体、Mesh・骨・BlendShape等の形状、照明、描画画像および最終的な外観の一致は保証しません。
検証中はAssets直下に専用の一時フォルダを作成し、終了時に削除します。検証が処理中にUnity自体の異常終了で中断された場合、一時フォルダが残る可能性があります。
UnityのUndo履歴が保持されている間、保存方式ごとに次の範囲を取り消し・やり直しできます。
| 保存方式 | Undo / Redoの対象 | ファイルへの反映・残るもの |
|---|---|---|
| TTT / AOの新規保存 | Sceneに追加した設定オブジェクト・コンポーネント | Undo / Redo後にSceneを再保存してください。 |
| 既存設定の更新・コンポーネント編集 | Scene上の設定値・PrefabインスタンスのOverride | Undo / Redo後にSceneを再保存してください。Prefabアセットは変更しません。 |
| Direct Material | 読み込まれているMaterial値 | 本ツールはUndo / Redo時に.matを自動保存しません。アセットを再保存すると戻した値がファイルへ反映されます。 |
| Material Variant | RendererのMaterial割り当て | 生成したVariantアセットは削除しません。Redoは同じVariantへ再割り当てします。Sceneの再保存が必要です。 |
Redo前に生成Variantを削除・変更した場合、元のVariantを自動再生成する機能はありません。保存失敗時に行う元ファイルの復元・途中生成アセットの削除は、成功後のUndo / Redoとは別の処理です。
com.gokoukotori.material-preview
未設定
0.1.1
2022.3 以降
なし
なし
未設定
GokouKotori