VRCアバターに無段階のスキンカラー調整を実装する手順

この手順ではAvatars 3.0環境のVRCアバターでExMenuからスキンカラーを無段階に調整する方法を解説します。応用として日焼け跡などを出したり消したりすることが可能です。
現在の手順ではSunaoShaderが必須となります。
他シェーダーでの設定や動作確認はできていません。

■用意するファイルは以下の通りです。
・vrc_AvatarV3HandsLayer
・VRCExpressionParameters
・VRCExpressionsMenu
・各種テクスチャファイル
・合成用アニメーションファイル

vrc_AvatarV3HandsLayerは/Assets/VRCSDK/Examples3/Animation/Controllers にありますので別の場所にコピーします。
VRCExpressionParameters、VRCExpressionsMenuは右クリック>Create>VRChat>Avatars から作成します。
テクスチャとアニメーションファイルの作り方は後述します。

名称未設定 1

用意したファイルをアバターのVRC Avatar DescriptorのPlayable Layersに上図のようにセットします。

■ここからはスキンカラー合成についての手順を解説していきます。
スキンカラーに合成するためのアンビエントオクルージョンマップを用意します。

画像2

右がアンビエントオクルージョンマップです。
肌テクスチャの合成させたい部分を肌色で塗りつぶしそれ以外の部分を白で塗りつぶします。
色味はPhotoShopなどで乗算で合成した際の色味に近くなります。
日焼け跡を作りたい場合には水着の形に白抜きしておきます。
ボディの他にフェイス用のアンビエントオクルージョンマップを作るのを忘れないでください。

画像3

肌マテリアルのOcclusionに上で作成したアンビエントオクルージョンマップをセットします。Occlusion Modeを「Final Color」に変更し、Occlusion Strengthを0~1に動かして肌色が加算されていることを確認します。確認後は0(加算していない状態)に設定します。

右クリック>Create>Animation で空のアニメーションファイルを作り、名前をskinに変更しておきます。
Hierarchyから設定中のアバターを選択し、Crtrl+Dで複製します。
設定中のアバターは非表示にし、複製した側でアニメーションファイルを設定します。
アニメーションファイルskinを複製したアバタールートにドラッグ&ドロップし、複製したアバターを選択した状態でアニメーションウィンドウを開きます。

画像4

Add Propertyから色合成させたいオブジェクトのSkinned Mesh RendererからMaterial._Occlusion Strengthを+で追加します。
今回は肌なのでボディとフェイスを追加しました。
追加したらキーを設定します。0:00部分のキーを0に設定します。
0:01部分のキーを右クリックから追加して1に設定します。
1:00など他にキーがあれば削除します。
これでアニメーションファイルの作成は完了です。
複製したアバターを非表示にし、設定中のアバターを表示に戻して続きの作業を行います。

画像5

上でコピーしておいたvrc_AvatarV3HandsLayerを選択してAnimatorタブを開開きます。
Layersタブの右上にある+から項目を追加し、名前をSkinColorに変更しました。この時右端にある歯車のマークを開き、Weightを1に変更します。
Parametersタブでも右上の+から項目でFloatを追加し名前をskinに変更します。

画像6

Layersに戻りSkinColorを選択した状態で真ん中のウィンドウのEntryの横で右クリックしCreate State>Emptyを作成します。
作られたNew Stateの名前を適当に変更し、InspectorのMotionに作成したアニメーションファイルをセット。
Normalized Timeの右側にあるチェックを入れ、項目にParametersで作成した項目名と同じskinをセットする。

画像7

コピーしておいたVRCExpressionParametersを選択し、InspectorからParameterの空きにParametersで作成した項目名と同じskinとFloatをセットする。

画像8

コピーしておいたVRCExpressionsMenuを選択し、InspectorからAdd Controlで項目を追加する。
TypeにRadial Puppetを指定し、Paramater Rotationに「skin,Float」をセットする。
これで作業は完了です。VRC内のExMenuから実際に合成できるか試してみましょう。


いいなと思ったら応援しよう!