UnityのシェーダーではGrabPass
を使うことで、シャーダー内で簡単にスクリーンの絵を取得できて便利です。
使い方は
GrabPass
{
}
と書くだけ。
後は普通のTextureと同じように
sampler2D _GrabTexture
grabPos = ComputeGrabScreenPos(o.pos);
half4 color = tex2Dproj(_GrabTexture, grabPos);
のようにして使えます。
_GrabTexture
の名称を変更したい場合は、GrabPass
に
GrabPass
{
"_BackgroundTexture"
}
という風に書くと良いようです。
リンク
Unity – Manual: ShaderLab: GrabPass
https://docs.unity3d.com/Manual/SL-GrabPass.html
関連記事
Cgで使えるbuilt-in関数のリファレンス
Cgで使えるbuilt-in関数のリファレンス
The Cg Tutorial - Appendix E. Cg Standard Library Functionshttp://developer.download.nvidia.com/CgTutorial/cg_tutorial_appendix_e.html
Cg-3.1_April2012_ReferenceManual.p...
UnityのImage Effectsで上下反転してしまう場合の対策
UnityのImage Effectsで上下が反転してしまう場合は、UNITY_UV_STARTS_AT_TOPを使って次のようなコードを追加してみると良いそうです。
sampler2D _MainTex;
float4 _MainTex_TexelSize;
#if UNITY_UV_STARTS_AT_TOP
if (_MainTex_TexelSize.y < 0) {
...
ブラウン管風のシェーダー
ブラウン管風のシェーダーを試してみました。
ノイズ版
使いどころは少し難しそうですが、良い雰囲気のシェーダーと思います。
※ノイズ版はUniRXを使わない形に改変したものを使っています。
リンク
[Unity3D]ブラウン管風シェーダーを作った | notargs.comhttp://wordpress.notargs.com/blog/blog/2...
Shader.Findでエラーが発生してしまう場合
Unity Editor上では問題なく動作しているのに、ビルドしたゲームのShader.Findでエラーとなる場合はAlways Included Shadersを設定するとうまくいく場合があるそうです。
var s = Shader.Find("Custom/Example");
Assert.IsNotNull(s); //error
Always Included Shader...