悪のアバター研究室 Vol.3-VRCミラーに映らない姿-
記録日:
よぉ!虚映魔人のバーツ様だ!
異形の力の一端をVRC内で再現したいと思わないか?
そんな貴様らに今回俺様が紹介する技術はズバリ「VRC内のミラーに映らなくなる」方法だ!
※今回説明する内容はシェーダの改変になる為、シェーダを改変することでサポートを受けれなくなったり不具合が生じたりする可能性がある。それを念頭においた上で自己責任で頼むぞ
【環境】
基本的に、今回説明する内容はVRChat内の機能に依存せずに実装されている為、指定のSDK等はない。
【改変方法】
まず改変するシェーダについてだが、今回はUnlitをベースに説明する。
UnityのAssetsから右クリックで[Create]>[Shader]>[Unlit Shader]を選択する。
次にエクスプローラーから作成したシェーダをテキストファイルとして開く 後はこの位置に「if(UNITY_MATRIX_P[2][2] <= 0 ){ clip(-1);}」を突っ込めば完了だ 簡単だろ?
後は作ったシェーダーをマテリアルにドラッグアンドドロップしてやれば準備完了だ、それを使えば一番上の画像のように鏡にだけ映らない物体のできあがりだ。
ちなみに既存のシェーダでも改変方法は同じだが自己責任での改変になるから注意しろよ。
※Standardシェーダーのようにfragって囲いがないやつもあるから注意な
【補足】
ここから先は何故この一行を追加するだけで、鏡に映らなくなるのかっていう説明を簡単にしていくぞ、興味のないやつは読み飛ばせばいい。
まずShaderの説明の前にVRCミラーについての話だ。
まぁこいつは状況証拠から見る俺様の解釈だから間違っている可能性がある、俺の理解の話だ。
VRCミラーは現実世界の鏡と違い反射で表示されているわけじゃねぇ、鏡の前に存在するものを再描画しているってことだ。
そしてこの一行
if (UNITY_MATRIX_P[2][2] <= 0){clip(-1);}
鏡に再描画されている時にUNITY_MATRIX_P[2][2]の値が0以下として描画されている為、clip(-1)によって描画されなくなるって命令が実行されるってことだ。
描画に関してはShaderは様々なことができる。
消えるように出現や消失できる「ディゾルブシェーダー」
特定のシェーダーを組み合わせることである条件でのみ描画される「ステンシルシェーダー」なんかもあるから興味があれば調べてみるといい。
以上だ!