Use with VRChat

VRChatで利用する時の注意点と必須の手順の説明です。

RenderQueue指定の為の必須の手順

VRChatで利用する場合、現在のVRCの仕様(?)でファイルに記載されているRenderTypeとRenderQueue(=FromShaderの値)を使うので、Inspectorで設定した値になるようにファイルで指定したシェーダーを用意する必要があります。

サンプルモデルの目に利用しているTypeA/Toon02_Geometry+20_cutoutを例にします。

  1. エクスプローラーなどで元になるシェーダーのファイルをコピーする。
    シェーダー名を変更する前にUnityをアクティブにすると(Unityに読み込ませると)シェーダー名が同じなので誤動作します。
  2. 適切にファイル名を付けたらVSなどのエディターで開き先頭にあるシェーダー名を変更する。
    画像は変更後のものです。
  3. 70行目辺りにあるSubShaderのTagを適切に変更します。
    Geometry+20というのがRenderQueueで2020を意味します。
    Geometry : 2000 / AlphaTest : 2450 / Transparent : 3000
    RenderTypeはTypeAAnimeShaderのRendering Modeです。
    Rendering Mode : RenderType
    Opaque : Opaque / Cutout : TransparentCutout
    Fade : Transparent / Transparent : Transparent
  4. 2か所を書き換えたら保存してUnityに読み込ませます。
    設定したシェーダー名のシェーダーが追加されているはずです。
    追加されていたらProjectタブでシェーダーをクリックしてInspectorに表示させ、RenderQueueを確認してください。

    正しく変更出来ていればRenderQueueが画像のように指定した値になっています。
  5. 目のマテリアルをTypeA/Toon02から変更したシェーダー名のシェーダーに切り替えます。
    例ではTypeA/Toon02_Geometry+20_cutout
    Rendering ModeとRenderQueueを確認してください。
    RenderQueueでFromShaderを選択すると指定したものになります。

同様に、必要な分のシェーダーを用意して付け替えてからアバターをアップロードしてください。

ステンシル機能使用時の注意点

ゲーム内ではミラーに映した場合なども含めて問題ないのですが、アバター選択画面で表示される時に表示がおかしくなる場合があります。
サンプルモデルをそのままの設定でアップロードした場合、目が表示されません。

ワールド内にステンシルバッファを利用した物がある場合、ステンシルの設定値によっては、透けないはずの部分が透ける場合があります。
全ては確認しきれないのではっきりとは言えないのですが、自分が遭遇したのはステンシルを利用している可能性のある透過物と前髪が重なった時、前髪全体が半透明になってしまった、という物です。
この時前髪のファイル上のRenderType指定はTransparentCutoutだったのですが、各Mask値を調整しても透け方や何と重なると透けるかという所は変化したのですが解決しませんでした。
そこでRenderTypeをOpaqueにした所、影響を受けなくなり解決しました。

別の例だとunity上ではSceneタブ、Gameタブ、どちらでも希望通りの描画になっているのに、VRCにアップロードしたら目が表示されない場合があったり、完全透過と半透明のエリアが重なっている部分の描画がおかしくなる、というような事があったりしました。

いずれの場合も各設定値を変える事で望む結果を得られましたが、どの設定値でもUnity上では変化が無い=望む表示なので、VRCにアップロードしたら描画がおかしいとなった場合、各設定値を変えて試してください。

透過物が絡む場合は要注意のように思います。