This is a transcription of the product description in Japanese. 2020年4月現在開発中の「トンネルシェーダー2.0」のサンプルです。 ■トンネルシェーダーとは ・Unity、VRChat上での使用を想定したシェーダーです。 ・立体形状の「トンネル」を作ります。 ・トンネル内を通る視線上に別の景色を描画することで、別世界に通じる3次元の穴が存在するように見せかけるシェーダーです。 ・トンネル内部に侵入すると、周囲が360度別世界の景色になり、あたかも自分が別世界に移動したかのような感覚を作り出すことが出来ます。 ・別世界のオブジェクトと自身のアバター等が違和感なく描画されます。 ・トンネル自体を持てるようにするなど、動かしても破綻しません。 以下のような機能があります。 ・レイキャストによるトンネルの形状指定 ・レイマーチングによるトンネルの形状指定 ・別世界としてレンダリングするSkybox ・別世界としてレンダリングする任意のメッシュ ・トンネルの境界により切断されたメッシュのボリューム表現(メッシュの内側が充填されているように見えます。) 製品版では以下のような機能が追加される予定です。 ・シェーダージェネレーター ・軽量化やライティングのカスタマイズ ■使い方 パッケージ内には2つのサンプルがありますが、トンネル形状の計算方式以外はほぼ同じです。 ・レイキャストによる形状指定 ・レイマーチングによる形状指定 1つのトンネルシェーダーは、2種類のシェーダーファイル及び2種類の関連ファイル(計4ファイル)によって構成されています。 ・トンネル内のメッシュの描画および、切断面のボリュームレンダリングを行う「Interiour」 ・トンネル内のSkyboxの描画および、トンネルの向こうに外のメッシュが描画されるのを防ぐ「Background」 ・トンネル形状を決定するロジックが記述された「Shape」 ・その他のユーティリティ関数、マクロが記述された「Utilities」 トンネルシェーダーを利用する際には、内部用メッシュにInteriourシェーダー、UnityデフォルトのQuadメッシュにBackgroundシェーダーを張り付けたうえで、それぞれを同じ座標に配置してください。 ・Interiourにはお好みのメッシュを利用出来ますが、現在ライティングには非対応なので、事前にBlender等でライティングをベイクしたものを利用してください。 ・また、ボリューム表現を利用する場合は、閉じたメッシュの利用を推奨します。 (閉じたメッシュとは、ポリゴン同士の交差を持たず、外側からはポリゴンの表、内側からはポリゴンの裏しか見えないメッシュの事です。) ・Backgroundにトンネル形状より小さいメッシュを利用した場合、トンネルの中心から視線を外した際に背景がレンダリングされなくなってしまう事があります。その場合はSkinned Mesh Rendererをご利用ください。 ・トンネルの形状を変更したい場合は、「****_Shape.cginc」ファイル内のロジックを編集してください。 ・その他細かい使い方はサンプルを参照してください。 ■細かい仕様(サンプル版) ・シェーダーの機能を選択して無効化するにはシェーダー内の該当パスを削除する必要があります。 ・ボリューム表現のライティングは単純なHalf-Lambertです。 ・ボリューム表現の実現のためにステンシルを1ビット使用します。使用するビットはマテリアルパラメータで変更可能です。 ・Geometryより先にレンダリングされるように、レンダリングキューを変更しています。VRChatの仕様上マテリアルパラメータでの変更はアップロード時に消えてしまう為、シェーダー内でハードコーディングしています。 ・Isometricカメラには非対応です。 ・移動、回転、3軸一括での拡大縮小は問題ありませんが、X軸のみ等の偏った拡大縮小で破綻を生じます。 ・シーン内に同じシェーダーを使った機構を複数置くと、違和感を生じる場合があります。
TunnelShader2.0(Sample) is released under the MIT License. For more information on licenses, see the LICENSE file in the unitypackage.