技術仕様・既知の制限
このページでは Real Sweat System v2.0.0 の現在の動作を説明します。Setupが生成するメニュー、パラメーター、オブジェクトは、導入したModule、アバターのRig、選択したElement/対象、有効にしたオプションによって変わります。
Module別の技術範囲
| 項目 | Sweat Base Module | Sweat Effects Module | Full Pack |
|---|---|---|---|
| 肌の汗(アニメ / リアル)と流れ落ちる表面の水滴 | ○ | — | ○ |
| Bodyの汗マテリアルとRestデータ | ○ | — | ○ |
| 水滴の立体感(Tess / No Tess)と相手側を低負荷 | ○ | — | ○ |
| 発生マスク、最終の表示マスク、肌の汗を非表示、表面のミラー品質 | ○ | — | ○ |
| 複数のBody Elementと追加のSkinned Mesh対象(実験的) | ○ | — | ○ |
| 落下する滴、はね、床の濡れ跡 | — | ○ | ○ |
| 2Dまたは任意の3Dの吐息・落下する滴・体の湯気 | — | ○ | ○ |
| Custom Steamと任意の共通の濃さラジアル | — | ○ | ○ |
| 手動モード | ○ | ○ | ○ |
| 互換性のあるRigでの自動モード | ○ | ○ | ○ |
| BodyのMaterial、Body Mesh、Restの対応を変更 | ○ | なし | Base経由のみ |
Effectsだけの導入でも、パーティクルの放出元としてBody Meshが必要です。BodyのMaterial、Body Mesh、Rest Vertex Data、水滴の立体感の構成は変更しません。
対応環境
- Unityエディター用のWindows(購入認証がWindowsでのみ動作します)
- Unity 2022.3
- VRChat Avatars SDK 3.10.3以降(3.10.6まで確認)
- Modular Avatar(NDMF 1.14.0 / Modular Avatar 1.17.1、NDMF 1.14.8 / Modular Avatar 1.18.7で確認)
- PC版VRChat(Direct3D 11)
本製品は PC版VRChat 向けです。Quest では汗は表示されません(安全な Hidden フォールバック)。
主な対応対象はHumanoidアバターです。Motion Pendulumを作成できるHumanoid Rigでは、手動モードと自動モードの両方を使用できます。Non-Humanoidアバター、または必要なボーン情報を取得できない構成では手動モードになります。Rigによる機能の違いは対応環境・互換性を確認してください。
現在の公式対応範囲
- 1つのメインBody
SkinnedMeshRendererが、スケールとEffectsの既定の放出元の基準になります。 - そのBody内の複数のMaterial Elementを設定できます。
- Faceなどの別
SkinnedMeshRendererは、個別のRestデータ、マスク、マテリアル、描画負荷を持つ 実験的 機能として対応します。 - 切り替え式のすべてのBody構成の自動処理は保証しません。対象は明示的に設定する必要があります。
- 他社の最適化ツール、メッシュ統合、マテリアル統合、ビルド時の変換ツールとの全組み合わせでの互換性は保証しません。
実験的なFace対象は、アバターのBlendShape、表情、フェイストラッキング構成と一緒に確認してください。目や唇周辺のTessは推奨しません。
同期パラメーター
次の値は、Humanoidの自動モードと、自分にだけ表示 を含む標準の任意トグルを導入したときの 最大値 です。Setupは、導入していないModule、無効なエフェクト、使えない機能のパラメーターを省くため、実際のコストはこれより低くなる場合があります。
| 構成 | 標準の同期コスト(最大) | 体の湯気・吐息の濃さを導入した場合 |
|---|---|---|
| Base / No Tess | 21bit | 該当なし |
| Base / 水滴の立体感(Tess)あり | 22bit | 該当なし |
| Effects | 23bit | 31bit |
| Full Pack / No Tess | 26bit | 34bit |
| Full Pack / 水滴の立体感(Tess)あり | 27bit | 35bit |
v2.0.0 で「VRCライトボリューム」のメニュートグルと同期パラメーター(1bit)を削除しました。任意の保存・同期の体の湯気・吐息の濃さFloatは、EffectsのみとFullの導入に8bitを追加します。Baseのみの構成は変わりません。BaseとFull Packの値には、濡れた肌の膜 トグルの1bitが含まれます。このトグルは、Setupの 濡れるほど肌のツヤ がオンのときだけ導入されます。
吐息は既存の Cooki/SweatAmount Float を再利用するため、同期Floatパラメーターは追加されません。運動強度・体熱・落下活動・皮膚の濡れの内部信号はNotSyncedで、パラメーターのコストはありません。メニューの汗量は1%刻みで更新され、リモートの Float 同期精度は約1/127 (0.8%)です。
汗マテリアルと同時描画
このマテリアル数は、Baseが管理するBodyの汗の表面マテリアルだけを数えたものです。Effectsのパーティクルマテリアルは含みません。
| Baseの導入設定 | 設定した対象ごとのマテリアル | 対象ごとの描画 |
|---|---|---|
| 水滴の立体感を導入しない | No Tessマテリアル1つ(RealSweatSystem No Tessellation) | 1 |
| 水滴の立体感を導入する | Tess + No Tessの2つ | 1 |
| Effectsのみ | Bodyの汗マテリアルを追加しない | 0 |
水滴の立体感を導入しても、TessとNo Tessを同時に描画するわけではありません。設定した各スロットを、両者の間で切り替えます。そのため、複数のBody Elementや追加Rendererを選択すると、複数の汗マテリアルが同時に描画されます。
- シェーダー名は
RealSweatSystem No TessellationとRealSweatSystemです。レンダーキューが2350以外の汗は、名前の後ろに(Late Queue)が付いたシェーダーを使います。 - アバターは、選んだ汗のスタイルのシェーダーだけを使います。
- はねはパーティクルシステムとマテリアルスロットを2つずつ追加します。
PhysBoneとCollider
| 項目 | Setupが作成する数 |
|---|---|
自動モード用 VRCPhysBone | 互換性のあるRigでは1、手動のみの構成では0 |
VRCPhysBoneCollider | 0 |
自動モード用のPhysBoneは、RealSweat の下の専用Motion Pendulumに作成されます。Real Sweat Systemは、胸、髪、衣装、その他のシステムが使う既存のPhysBoneやColliderを意図的に編集しません。
標準のReal Sweat Setupは既存のPhysBoneを編集しません。ボーンやコンポーネントを統合する他のツール、アバターのConstraint、その他のビルド時の変更がないか、Play Modeの最終構成を確認してください。
Rest Vertex Data
Base Moduleは、設定した表示Meshごとに、頂点単位のRestデータテクスチャを3つ作成します。
- Rest Position
- Rest Normal
- Rest Tangent
新しい見た目は、Rest データが有効な場所にだけ汗を描きます。1.1.x のように UV 模様で代わりに描くことはありません。Setup が Rest データを自動でベイクするため、通常は気にする必要はありません。
- まだインストールしていないマテリアルや、ベイクの後に変わったメッシュでは、Scene ビューに汗が表示されないことがあります。マテリアルインスペクター上部の Rest データ 欄と Tuning の メッシュおよびRestデータ診断 がこれを知らせます。メッシュが変わった場合は、次のビルド(アップロード)時に最終メッシュから再ベイクします。
- 上方向はヒューマノイドのボーン(Hips→Head)から決め、メッシュ内で体が軸の負の方向に立っていても正しく保存します。ヒューマノイドではないアバターは、メッシュの形(最も長い軸)から決めます。
- Restデータは Material ElementごとではなくMeshごと です。1つのRenderer内で選択した複数のElementは、同じMeshの対応を使います。別のRenderer/Meshには個別のRestデータが作成されます。
- Rest Vertex Data Bakerは、Meshを読み取り、生成したテクスチャを対象の汗マテリアルに割り当てます。元のFBX、
sharedMesh、UV、BlendShape、他のマテリアルは直接変更しません。Restデータは特定のMesh構成に対応するため、生成された汗マテリアルとRestデータを別の対象と共有してはいけません。
Setup後にBody Meshを置き換える、頂点構成を変える、SubMeshを統合すると、Restデータと最終の表示Meshの対応が無効になることがあります。
水滴サイズと模様
- 水滴サイズはアバターの体の大きさに自動で合わせます。胴と脚のヒューマノイドのボーンの長さで測るため、髪、帽子、姿勢、メッシュの単位(cm/m)に左右されず、どのアバターでも水滴は体に対して同じ大きさになります。バウンディングボックスは使いません。
- 顔などの他のメッシュもボディと同じ大きさになり、アバターの倍率を変えると水滴も同じ割合で変わります。ヒューマノイドではないアバターは視点の位置(目の高さ)で測ります。さらに大きさを変えるには 水滴サイズ を使ってください。
- Setup がアバターごとに模様番号を一度決めて Tuning に保存し、そのアバターのすべての汗マテリアル(他のメッシュを含む)に書き込みます。そのため、同じアバター2体が同じ場所に汗をかくことはありません。再インストールしても番号は変わりません。
- 削除してから新しくインストールすると、新しい番号になります。複製したアバターも、Setup が新しい生成フォルダを作るときに新しい番号になります。
- 水滴は10~25秒残り、流れ跡は水滴が止まってから2~5秒で乾きます。
描画順と影
- 自動描画順は、メインBodyの汗をレンダーキュー 2350 で描画します。
- 2350以降のボディマテリアル(不透明・Cutout)があると、[インストール / 更新] が2349に下げるか一度だけ確認し、削除のときに元に戻します。そのままにする を選ぶと、汗はそれらの中で最も高いキュー + 1 で描画され、2459を超えません。
- 追加対象には
max(ボディの汗のレンダーキュー(通常2350), 選択マテリアルのレンダーキュー + 1)を使用します。 - 自動描画順を使えない場合は手動のキューを使えますが、2501以上の値はTransparentの並べ替えの影響を受けます。
- レンダーキューが2350以外の汗は RealSweatSystem (Late Queue) シェーダーを使い、描画するときに画面を個別にコピーします。
- ボディの Shadow Strength に合わせる が有効な場合、[インストール / 更新] または FX に適用 で、対象Bodyマテリアルの
_ShadowStrengthを汗マテリアルへコピーします。
詳細と例外は対応環境・互換性を確認してください。
水滴の立体感・相手側を低負荷・エフェクトの技術的な動作
水滴の立体感(テッセレーション)
水滴の立体感は、Base Moduleの任意の機能です。オンにすると、近くでは水滴と流れ落ちる水滴が実際に肌から盛り上がり、横から見ても丸く見えます。両方の汗のスタイルで動作します。近くでは GPU 負荷が増え、既定の精度(簡素)では約 0.7 m より離れると立体感なしと同じ描画になります。導入しない場合は、No Tessマテリアルが1つだけアップロードされます。
相手側を低負荷
相手側を低負荷は、Baseを導入した場合に使用できます。
- 肌の汗: 相手側ではNo Tessで、汗腺の小さな水滴なしに描き、低負荷と軽量では残り滴とアニメの膜の細い線も省き、面の向きが切り替わる所の処理を減らします(相手側の GPU 時間は低負荷で約 4
8 %、標準で 2329 % 減ります)。 - 相手側を低負荷では、水滴の立体感は盛り上がりません。
- 自分の画面: 自分で選んだ品質と水滴の立体感の状態を保ちます。
- 体の湯気: 相手側の体の湯気/Custom Steamは数はそのままで濃さを0.6倍にします(3Dの体の湯気は数が25%)。
- 3Dパーティクル: 相手側の落下する滴を50%へ減らし、強い動きによる追加水滴を停止します。
- 同時描画: 設定した対象ごとに汗マテリアル1つです。
ミラーとライティング
- ミラーでも汗を高品質は任意で、既定ではオフです。オフのときはミラーで汗腺の小さな水滴を省き、水滴の立体感も盛り上がりません。オンにすると、ミラーでも通常の画面と同じに描きます。
- 体の湯気のミラー表示は Full、Low、Hidden です。2Dの
Lowはパーティクル数を変えずに、ミラー内の湯気をFullの0.8倍の濃さで描きます。3DのLowは現在Fullと同じ見た目と負荷です。 - 肌の汗の環境光は Unity のライトプローブ(SH)だけを使います。VRC Light Volumes への対応は v2.0.0 で削除しました。
- Light Limit Changer でアバターの明るさを変えると、肌の汗も同じ割合で追従します(ボディの肌が lilToon または Poiyomi の場合)。
エフェクト
Effects Moduleは、落下する滴、はね、床の濡れ跡、吐息、体の湯気にパーティクルを使います。既定は軽量な2Dモードで、任意の高負荷の3Dパーティクルでは、吐息・落下する滴・体の湯気がメッシュパーティクルの描画に変わります。Setupで選んだエフェクトだけが項目とパラメーターを追加し、それぞれゲーム内でオフにできます。
- 落下する滴とはねは汗のスタイルに従います。Effects Module だけのときはリアルの見た目です(2.0.0 ですでに導入したアバターは、そのときの見た目のままです)。落下水滴の最大数(システムごと) の既定値は12で、強い動きの滴はその3分の2の8個までを使います。
- 床の濡れ跡は落下する滴の衝突サブエフェクトで、落下する滴が有効な間だけ使用できます。衝突にはワールドの Default と Environment レイヤーを使い、アバター・Player系レイヤーは除外するため、ワールドの床のColliderやレイヤーが合わない場合は濡れ跡が出ません。
- 吐息と体の湯気は、必要なHeadとChestのアンカーを取得できる場合だけ生成されます。
- 体の湯気: 既定値での最大パーティクル数は、湯気12か所で131、既定の導入の7か所で95です。
- 3Dの体の湯気・吐息: 既定の導入の Mesh Particle Active Polys は92です。
- 有効なCustom Steamのスロットは最大4つで、左右ミラーペアは2つを使います。内蔵/Customを合わせて10個を超えるとミラー負荷の警告を表示し、合計12個が上限です。発生量ウェイトの合計が
4.0を超える場合は、同じ比率で下げて上限内に収めます。
生成した対象の整合性とビルドの停止
Setupは、実験的な追加対象ごとに、想定される生成マテリアルとRendererスロットを記録します。生成スロットの欠損、空欄化、移動、置換、統合は、導入状態の破損として扱われます。
- Tuningに 修復が必要 と表示されます。
- アバタービルドは、別のマテリアルスロットへ切り替えたり対象を黙って省略したりせず、停止します。
- 追加対象を管理... または Setup ウィンドウで修復... を使い、[インストール / 更新] を押して修復または削除してください。
ビルド中にメッシュを変更するツール
Unity Editorでは汗が正しく見えるのに、VRChatでだけ位置、形、表示が壊れる場合は、別のビルド時のツールが次のいずれかを変更している可能性があります。
- 対象のBody RendererまたはMesh
- 頂点またはSubMeshの構成
- マテリアルスロットの順番
- Restデータが参照する最終の表示Mesh
そのツールに除外リストがある場合は、Real Sweatが使うBody Rendererを最適化や統合の対象から除外 してください。Body Rendererを除外する機能が無いツールとの互換性は保証できません。
先にメッシュの変更を確定できるワークフローでは、最終メッシュを作ってからReal Sweat SystemのSetupを実行してください。ビルド中にだけメッシュが変わる場合は、その構成で最終結果との互換性を確認する必要があります。
既知の制限
- 有効な Rest データがないと汗は描かれません。たとえば Setup 前のマテリアルや、ベイク後に変わったメッシュです(次のビルドで再ベイクされるまで)。
- 水滴の立体感は近くで GPU 負荷が増える高負荷オプションのままです。
- 汗 0 % と汗の表示オフは完全に無料ではありません。屈折のための画面コピー(GrabPass、約 +0.05 ms)が残ります。負荷がなくなるのは肌の汗を非表示だけです。
- 相手側を低負荷: 面の向きが切り替わる所(胴の横や腕など)で、他の人の画面では水滴の下の端がまっすぐ切れて見えることがあります。まれで、小さな差です。
- リアル: 折れ目(おへその上など)では小さな水滴が2つに分かれて見えることがあり、水滴どうしが実際に合わさることはありません。リアルの軽量は、リアルの低負荷・標準と水滴の並びが少し違います。
- 服に付く RealRain 自身のリアルな雨粒は、RealRain のアップデートで提供されます。RealRain が肌に付ける雨は、すでに汗のスタイルに従います。
- 2.0.0 に以前の見た目は含まれません。以前の見た目を使い続けるには、v1.1.3 のままにしてください。