Asset / Hierarchy Watermark
アセット名・Hierarchy 構造に作者情報を埋め込み、 流出時の追跡を可能にします。 抽出ファイル単体からでも由来が辿れる。
AssetRipper による抽出そのものは止められません。
けれど、抽出した後のメッシュ・テクスチャ・シェーダーが復元できなければ、リッピング自体が意味を失います。
Anti-Ripping は、 NDMF パイプラインで 8 層の防御を 1 クリック適用する VRChat 向けツールです。
正規プレイヤーには通常通り表示されるアバターも、 AssetRipper のような抽出ツールで取り出した瞬間に、 メッシュ・テクスチャ・シェーダーのすべてが復元不能な状態になります。
あなたとフレンドには、 これまで通りのアバターが描画されます。 解錠は所有者の手元で透過的に行われるため、 操作も VRChat の体験も変わりません。
AssetRipper で取り出されたメッシュは原点からスクランブル、 テクスチャは XOR 暗号化された PNG (= ノイズ画像)、 シェーダーは locked variant の難読化済み HLSL のみ。 鍵が無ければ何も再構成できません。
追跡・形状暗号化・テクスチャ暗号化・撹乱、 4 つのカテゴリにまたがる防御を組み合わせ、 単一の手段が破られても全体としての防御が維持される多層構造です。
アセット名・Hierarchy 構造に作者情報を埋め込み、 流出時の追跡を可能にします。 抽出ファイル単体からでも由来が辿れる。
shader source に追跡情報を注入し、 locked variant としてバリエーションを焼き込み。 第三者がシェーダーから情報を抽出するのを困難にします。
頂点を ±radius でランダムスクランブルし、 解錠 BlendShape で原状回復するハイブリッド。 鍵が一致したときだけ正しい形状になります。
UV6/7 に頂点 displacement を bake し、 lilToon / Poiyomi の vertex hook 内で K0..K7 の鍵と照合してデコード。 シェーダー経路でも形状を守ります。
テクスチャを CPU XOR PRNG で暗号化し、 シェーダー側で OVERRIDE_* マクロを使って復号。 抽出された PNG はランダムノイズにしか見えません。 Custom Shaders を OFF にしているフレンドの視点では、 MainTex のみ 低解像度のプレビュー画像 (Safety Preview Texture) で fallback 表示されます。 対応シェーダーは lilToon のみで、 Poiyomi material はテクスチャ暗号化の対象外 (Mesh Lock による形状保護は適用されます)。
本物の BlendShape は一切触らず、 ランダム名のダミー BlendShape を 32〜64 個注入。 形状を保ったまま、 抽出時の識別困難化を達成します。
ダミー SMR + ダミー Animator Layer + ダミーパラメータの一式を追加し、 本物の解錠 chain を Animator 上で識別できなくします。
GameObject 名を 16 文字の hex にランダム化し、 sibling 順序を Fisher-Yates シャッフル。 Hierarchy からアバター構造の意図を読み取れなくします。
NDMF パイプラインを通したあとの実際の Unity Editor スクリーンショットです。 名前は全てランダム化され、 テクスチャはノイズに変わります。
Renderer や装飾の GameObject 名がすべて 16 文字 hex に置き換わり、 Hierarchy から構造の意図 (どこが顔 / 服 / 装飾か) を読み取れません。
Layer / State / Parameter 名がすべてランダム化され、 Decoy Animator 機能を ON にすればダミーの解錠 chain が混入します。 本物の解錠ロジックを Animator から識別するのが極めて困難になります。
抽出されたテクスチャは規則性の無いノイズ状のデータ。 元の絵柄を視覚的にも統計的にも復元することはできません。
XOR PRNG により完全にノイズ化されたメインテクスチャ。 抽出した PNG を画像ビューアで開いてもこの状態のまま、 シェーダー側の鍵が無い限り復号できません。
VRChat の Custom Shaders を OFF にしているフレンドの視点でも、 アバターが大きく崩れないように 2 つの fallback 経路を内蔵しています。 いずれも default で有効です。
SkinnedMeshRenderer のメッシュ形状は、 shader 経路と並行で BlendShape 経路でも復元されます (v0.16+)。 Custom Shaders OFF でも SMR の形状は正しく表示されます。 非 SMR (装飾品 / 武器などの静的メッシュ) は対象外で、 スクランブル状態のままです。
暗号化された MainTex は別 slot へ退避され、 元 slot には 低解像度のプレビュー画像 (default 64px、 16-256px で調整可能) が書き込まれます (v0.34.7+)。 Custom Shaders OFF のフレンド視点でもメインのテクスチャはモザイク状にならず、 全体の色合いを保ったまま表示されます。 対象は現状 _MainTex のみで、 他の暗号化テクスチャ slot は引き続き fallback shader 上ではノイズになります。
NDMF パイプラインに乗せるだけ。 5 ステップで完了します。
アバター GameObject の右側に表示されている Anti-Ripping のアイコンをクリックします。 アイコンはアバターを Hierarchy に配置すると自動で表示されます。
「VRCAvaterAntiRipping プレハブを avatar 配下に配置しますか?」 と確認されるので、 「続行」 を押します。
アバター直下に VRCAvaterAntiRipping プレハブが追加されます。 Hierarchy で選択して Inspector パネルを開きます。
Inspector の Step 1: アプリのインストール で「アプリをインストール」 ボタンをクリックします。 このクライアントが VRChat の起動を検知して OSC 解錠キーを自動送信 するため、 起動のたびに手動で鍵を入力する必要が無くなります。
実体は全 Unity プロジェクトを通じて 1 つだけ、 ユーザーフォルダ配下にインストールされます (Windows 常駐アプリ)。
Step 2 で Creator Name / License URL / Contact を入力します (一度入力すれば「現在の値をデフォルトとして保存」で次回以降に再利用できます)。
Step 3 で 「推奨」 プリセットボタンをクリックすれば、 標準的な保護レイヤー構成が一括で適用されます。 これで完了です。
Modular Avatar の前 に走るよう設計されており、 後段の MergeArmature や ShapeChanger による Path 変更は AnimatorServicesContext が自動的に再 mapping します。 既知の併用テスト: MA / FaceEmo / lilycal-Inventory / AAO TraceAndOptimize / VRC Viseme / Eyelid。localOnly のため同期されず、 Decoy が追加するダミーパラメータも全て localOnly のため Synced 予算に影響しません。_MainTex のみです。 NormalMap や Mask 等、 他の暗号化対象テクスチャは fallback shader 上では引き続きノイズ表示になります (見た目への影響は MainTex に比べて軽微)。AntiRippingTag.meshLockKeyHex として Inspector に保存され、 Unity プロジェクトと共に管理されます。 紛失した場合はビルドし直して新しい鍵を生成 + 常駐アプリに再登録すれば復旧可能です。 サーバー上に鍵情報は一切送信されません。net.ajisaiflow.anti-rippingAAO TraceAndOptimize 等のアバター最適化ツールは、 本ツールが追加するダミーパラメータや Decoy SMR、 暗号化テクスチャを「未使用」と判定して削除する可能性があります。 ダミーパラメータには Animator binding を持たせて削除を回避していますが、 アバターの構成や最適化ツールの設定によっては意図しない最適化が走ることがあります。 問題が発生した場合は各最適化ツールの除外設定をご検討ください。
テクスチャ暗号化を有効にすると、 以下の影響があります:
BC7 等の GPU 圧縮が効かないため、 非圧縮 RGBA8 で保存されます。 軽減策として 2048px を超える元 texture は自動で 2K に downsample される設定が default で有効になっており、 4K texture を含むアバターではサイズ膨張を半減できます。シェーダー注入が自動で効くのは lilToon と Poiyomi およびその派生のみです。 XSToon や Sunao 等は Inspector の手動指定リストで対象に追加できますが、 互換性は個別に確認してください。 注入できない material は BlendShape 経路のみで保護され、 シェーダー経路は適用されません。
テクスチャ暗号化は lilToon (公式) のみ対応します。 shader 経路の Mesh Lock は Poiyomi にも適用され、 それ以外のシェーダーは BlendShape 経路 (SMR のみ) で形状のみ保護されます。
| シェーダー | テクスチャ暗号化 | Mesh Lock (shader 経路) |
備考 |
|---|---|---|---|
| lilToon (公式) | ◎ 対応 | ◎ 対応 | 全 variant をフルカバー。 Safety Preview Texture / XorSortMapping 対応 |
| Poiyomi (公式 / Free) | — 未対応 | ◯ 対応 | vertex decode のみ。 テクスチャは平文で残ります |
| lilToon カスタム派生 (BBP / .lilcontainer 等) |
— skip | — skip | 視覚復元優先で完全 skip。 BlendShape Mesh Lock のみ動作 |
| 手動指定シェーダー (XSToon / Sunao 等) |
— 未対応 | — 未対応 | Inspector の ExtraShaderNamesToLock で追加可能。 BlendShape Mesh Lock fallback |
| その他 (Standard / UnlitWF / Mochie / VRChat SDK / 任意 custom) |
— 未対応 | — 未対応 | BlendShape Mesh Lock (SMR のみ) で形状のみ保護 |
| カテゴリ | 状態 | 代表的なプロパティ |
|---|---|---|
| Color RGB XOR |
◎ default ON | _MainTex, _ShadowColorTex, _MatCapTex, _RimColorTex, _OutlineTex ほか 色テクスチャ全般 |
| Normal DXT5nm unpack → RGBA XOR |
◎ default ON | _BumpMap, _Bump2ndMap, _AnisotropyTangentMap, _OutlineVectorTex, _FurVectorTex ほか 法線・接線 |
| Mask R-only XOR |
◎ default ON | _AlphaMask, _ShadowBorderMask, _DissolveMask, _EmissionBlendMask, _FurMask ほか マスク全般 |
| Emission | △ opt-in (default OFF) | _EmissionMap, _EmissionGradTex, _Emission2ndMap, _Emission2ndGradTex (Inspector で encryptEmissionGroup を ON) |
| Skip list channel pack / R&D 待ち |
— 構造的に対象外 | _Main2ndTex, _Main3rdTex, _MetallicGlossMap, _SmoothnessTex, _ParallaxMap, _TriMask, _GlitterShapeTex |
| Other integration / screen-space |
— 永久対象外 | _DitherTex, _AudioLinkMask, _AudioTexture, _GrabTexture, _CameraDepthTexture ほか |
顔デカール (_Main2ndTex / _Main3rdTex) は現状 Skip list 該当のため、 抽出時に該当スロットのテクスチャが平文で残ります。
Anti-Ripping と組み合わせることで、 アバターの軽量化やビルド時間の短縮ができる NDMF 対応の無料ツールです。 いずれも非破壊的にアバターに適用されます。
不要な BlendShape やマテリアル、 Bone を自動的に最適化してアバターを軽量化する定番ツール。 Performance Rank の改善 (Poor → Good など) に効果的です。
BOOTH で見る →テクスチャを高効率で圧縮することで、 アバター全体のサイズを劇的に削減。 Anti-Ripping のテクスチャ難読化と組み合わせると、 暗号化対象が圧縮された状態から開始されるためビルド時間も短縮でき、 サイズ膨張も抑えられます。
BOOTH で見る →VRChat Creator Companion (VCC) に下記 URL を追加するだけで、 Anti-Ripping パッケージをいつでも最新版で利用できます。
https://lighfu.github.io/vpm/index.json
いずれも VPM (VCC) 経由でインストール可能。 Unity 2022.3 が動作環境です。