以下のモデルを例にUniToonシェーダを使った調整方法を解説します。
VRMモデルをUnityにインポートするとモデルのマテリアルはすべてVRM/MToonシェーダとなるので、マテリアルをすべて選択し以下のメニューからUniToonシェーダに変換します。
シーンに配置し調整していきます。
全体的に色が淡いので、全てのマテリアルのShade Saturationを調整し陰影の彩度を高めます。
また、肌の色が白いので、肌に関するマテリアルのBase Colorを少しだけ調整します。
Shade Saturation = 2.5
Shade Brightness = 0.8
色味はこんな感じになりました。
通常のシェーダだとReceiveShadowを切ってセルフシャドーが入らないようにし、Unlitにすることで陰影も切り顔に変な陰影が出来ないようにしますが、UniToonはシャドーと陰影両方を調整する事で理想的な状態に近づける事が出来ます。
顔の陰影を良い感じにするために、球面法線補正を動的に行います。そのためには、顔の中心の座標を知る必要があります。
モデルのルートからの相対的な顔の中心点を知りたいので、モデルのルートに「CenterPos」というGameObjectを置きます。後で削除するので名前は適当でいいです。(※モデルによってはルートがHipsである場合がありますのでご注意ください)
以下の位置にCenterPosが来るようにします。おすすめは、高さYは鼻の位置辺り、奥行きZは首の中心辺りです。
今回のモデルの場合、Y=1.37, Z=-0.025が顔の中心点となります。これを、顔に関係する全てのマテリアルの「Spherical Normal Correct Origin」にセットします。
そして「Spherical Normal Correct」を1に近づけると、顔の法線を自動的に補正出来ます。
完全に球面化してしまうと逆に変に見える可能性があるので、0.9位にする事をお勧めします。
補正すると、顔の陰影が改善されます。
陰影は改善されますが、セルフシャドーはまだ改善されていないので、次はセルフシャドーを改善します。
※この機能はまだ実験的な機能なのでご注意ください
セルフシャドーを改善するためにも顔の中心点が必要なので、先ほどの「CenterPos」の座標をそのまま使います。(例:Y=1.37, Z=-0.025、場合によっては中心位置を変えた方が良い可能性があるので、その場合は各々良い座標を見つけてください。
これを「Spherical Shadow Correct Origin」にセットします。
次に、影の位置とみなすためのCenterPosからの半径を設定します。雑に、「顔の中心から顔のちょっと前方までの距離」で大丈夫です。位置的には顔のちょっと前方なのでこの辺りになります。
この場合、顔の中心から顔の前方までの距離は0.145だったのでこれを「Spherical Shadow Correct Radius」にセットします。
全て設定が終わった後の値はこんな感じになります。
Spherical Shadow Correctの値を1に近づけると影判定の座標が補正されるので、変なセルフシャドーが改善されます。
今回の場合は顔の前方が影判定の位置になるので、髪などのセルフシャドーが掛からなくなります。
CenterPosはもう必要ないので削除してください。
この状態で、ライトの方向を変えたり物陰に移動したりして、変な影にならないかを確認してください。
TODO
TODO