🐼
Single Pass InstancedでGrabPass取得できない時の対処
経緯
vrchatのunity2020化に向けて自作シェーダーのSingle Pass Instanced
対応をしようとした中で、GrabPass
が取得できず灰色になったときの対応の備忘録
現象 (GrabPassで色反転させるシェーダーの例)
-
Multi Pass
時の表示
-
Single Pass Instanced
時の表示
確認したUnityのバージョン
バージョン |
---|
2019.4.31f1 |
解決方法
UNITY_DECLARE_SCREENSPACE_TEXTURE
とUNITY_SAMPLE_SCREENSPACE_TEXTURE
を使う。
具体的に
NGシェーダー
...
GrabPass {"_PandaGrabNg"}
Pass
{
...
sampler2D _PandaGrabNg;
float4 _PandaGrabNg_ST;
...
fixed4 frag(v2f i): SV_Target
{
UNITY_SETUP_INSTANCE_ID(i);
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
fixed4 col = tex2D(_PandaGrabNg, i.grabUv);
return (1 - col);
}
}
OKシェーダー
GrabPass {"_PandaGrabOk"}
Pass
{
...
UNITY_DECLARE_SCREENSPACE_TEXTURE(_PandaGrabOk);
...
fixed4 frag(v2f i): SV_Target
{
UNITY_SETUP_INSTANCE_ID(i);
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
fixed4 col =
UNITY_SAMPLE_SCREENSPACE_TEXTURE(_PandaGrabOk, i.grabUv);
return (1 - col);
}
}
修正結果
-
Single Pass Instanced
時の表示
-
Multi Pass
時の表示も問題ない
備考
Single Pass Instanced
のUnityマニュアルにあるポストプロセスシェーダー
の場合と同じ話のよう
参考
Discussion