lilToon 2.x の VRCLV 逆光リムライトで口の中が光らないようにする

2025年8月16日

(thumbnail was taken with @ReinaS_64892)

拙作 NDMF プラグインの宣伝が含まれます。

「口の中が光る」とは?

画像を見てもらった方がわかりやすいと思うので早速お見せします。 撮影ワールドは Sunset Bay です。

before
口の中の舌や歯の部分のメッシュが逆光を受けて光っている状態

詳細

lilToon 2.x で VRC Light Volumes (以下 VRCLV) の方向(L1 coefficient?)が考慮されるようになったことで、対応しているワールドでは(元からある逆光リムライトとは異なる)逆光表現を得られるようになりました。

一方、VRCLV によるライティングは「元のライトの位置」のような情報を参照できないため、ライトとの位置関係に応じた遮蔽、また影の有無といったものを考慮することができません。 結果として、 VRCLV によるライティング成分については当該ピクセルの world position と world normal によってのみ決定されることになります(僕はそのように認識していますが、違ったらマサカリを投げてください)。

要するに、「口の中だから後頭部(のメッシュ)で後方からの光が遮られているはず」などというのは VRCLV ライティングには通用しないということです。

回避策

以上の話は VRCLV に限った話ではなく、遮蔽による影のないライティング1では常に発生することになります。

この問題の回避策はいくつかありますが、最も一般的なのは「口腔内パーツのメッシュの法線を正面方向に曲げる」というものでしょう。 例えば形状的には真上を向いている面でも法線データは手前方向を向いている状態にすることで、ライティングの計算の際にあたかも手前方向であるかのように扱われるわけです。 これをピクセル単位でテクスチャでやるのがノーマルマップです。

法線の編集は通常モデリングソフトなどで行う必要があります。面倒ですね(面倒じゃない人はブラバしていいぞ!)。

アバターのビルド時にやっちまいましょう。 Zatools Ad-hoc Normal Bendingで。

使い方

まず Zatools: kb10uy’s Various Tools を導入します。

依存パッケージがいくつかありますが、NDMF と MA はまあまず入っていると思います。Haï~ 氏の VPM リポジトリは登録していない方もいらっしゃるかと思うので左のリンクから登録してください。

次に、修正したいアバターの顔のメッシュの GameObject (Body とか)を選択し、そこに Add Component から Zatools Bend Normal on Build を追加してください。以下のようなものが出てくるはずです。

component view
コンポーネントを追加した直後

ひとまず口の中の法線を修正するだけであれば、以下の手順を行えば問題ありません。

  1. マスクテクスチャを作成する、あるいはインポートする。
    • 作成する場合は nekobako 氏のマスクテクスチャエディタ などが便利です。これで作成した場合後述の Read/Write はデフォルトで有効です。
    • インポートする場合は必ず Read/Write のチェックが入った状態にしてください。
  2. マスクテクスチャ に 1. で用意したテクスチャを指定する。
  3. マスクのサンプリング方法Black にする。
    • マスクテクスチャのうち黒と白どちらの領域を法線の修正対象とするかの設定です。上記エディタの場合は通常黒で塗った部分を修正することになるはず。

あとはビルドして法線が修正されているのを確認すればおしまいです。 とはいっても現状エディタで確認するのは困難なので VRChat 内で確認するぐらいしかないが……。

必要に応じて ウェイト の値を調整して曲げ具合を調整するなどしてください。 詳しい使い方は上記リンクのリファレンスを参照くださいな。

おしまい

よき VRCLV ライフを!

マスクテクスチャ配布


  1. Unity でいえば No Shadow に設定されているリアルタイムライトなど。 ↩︎