BETA

【VRChat】カメラ用に特殊なフィルターシェーダーを作る

投稿日:2019-04-11
最終更新:2019-04-11

こんにちは。八ツ橋まろんです。

VRChatを使って動画撮影をしていると、ちょっとしたフィルター/エフェクトが欲しいときがあります。

そんなの動画編集ソフトで後からつけろよって話ですが笑
もし生放送などのリアルタイムでエフェクトが欲しい場合は、重宝します(たぶん?)

作ったのはこんなやつです。

この板を通して見た景色はセピアになったり、モノクロになったり、ネガ反転したりします。

以下、コード


Shader "Custom/Filter"
{
SubShader
{
Tags { "Queue" = "Transparent" }

    GrabPass  
    {  
        "_BackgroundTexture"//これでオブジェクトを通して見た後ろ側を取得  
    }  

    Pass  
    {  
        CGPROGRAM  
        #pragma vertex vert  
        #pragma fragment frag  
        #include "UnityCG.cginc"  

        struct v2f  
        {  
            float4 grabPos : TEXCOORD0;  
            float4 pos : SV_POSITION;  
        };  

        v2f vert(appdata_base v) {  
            v2f o;  
            o.pos = UnityObjectToClipPos(v.vertex);  
            o.grabPos = ComputeGrabScreenPos(o.pos);  
            return o;  
        }  

        sampler2D _BackgroundTexture;  

        half4 frag(v2f i) : SV_Target  
        {  
            half4 c = tex2Dproj(_BackgroundTexture, i.grabPos);  


            ////////////////////////////////////////////////////////////////  
            //////////////////////ネガ反転用////////////////////////////////  
            ////////////////////////////////////////////////////////////////  

// return 1 - c;
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////

            ////////////////////////////////////////////////////////////////  
            ////////////////////////セピア用////////////////////////////////  
            ////////////////////////////////////////////////////////////////  

// half4 col;
// col.r = c.r0.393 + c.g0.769 + c.b0.189;
// col.g = c.r
0.349 + c.g0.686 + c.b0.168;
// col.b = c.r0.272 + c.g0.534 + c.b*0.131;
// return col;
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////

            ////////////////////////////////////////////////////////////////  
            ////////////////////////モノクロ用//////////////////////////////  
            ////////////////////////////////////////////////////////////////  
            half4 col;  
            col = (c.r + c.g + c.b)/3;  
            return col;  
            ////////////////////////////////////////////////////////////////  
            ////////////////////////////////////////////////////////////////  

        }  
        ENDCG  
    }  

}  

}

GrabPassで、オブジェクトの後ろの景色を取得できます。
GrabPass
{
"_BackgroundTexture"//これでオブジェクトを通して見た後ろ側を取得
}

良かったら遊んでみてくださいね!それでは!

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@maronの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!