unity 全屏乱影 BlitMultiTap

时间:2023-03-08 17:31:31
unity 全屏乱影 BlitMultiTap

http://m.blog.csdn.net/blog/stalendp/40859441

官方例子AngryBots的链接地址:http://u3d.as/content/unity-technologies/angry-bots/5CF

《Unity Shaders and Effects Cookbook》的章节:

Chapter 10 Screen Effects with Unity Render Textures

Chapter 11 Gameplay and Screen Effects

[GPU Gems] Real-Time Glow:http://http.developer.nvidia.com/GPUGems/gpugems_ch21.html

using UnityEngine;
[ExecuteInEditMode]
public class _MultiTap_y: MonoBehaviour
{
public GUISkin skin;
public string[] labels;
public Rect[] rLabels;
public float[] vals;
public Rect[] rSliders;
public Material myMat;
void OnGUI()
{
GUI.skin = skin;
for (int i = 0; i < labels.Length; i++)
{
GUI.Label(rLabels[i], labels[i]);
}
vals[0] = GUI.HorizontalSlider(rSliders[0],vals[0],-8f,8f);
}
void OnRenderImage (RenderTexture src, RenderTexture dst)
{
Graphics.BlitMultiTap(src,dst,myMat,
new Vector2(vals[0],vals[0]),
new Vector2(vals[0],vals[0])
);
}
}

//====================

Shader "Tut/Effects/ConeTap_0y" {
Properties {
_MainTex ("", 2D) = "white" {}
}
Subshader {
ZTest Always Cull Off ZWrite Off Fog { Mode Off }
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"

struct v2f {
float4 pos : POSITION;
half4 uv[2] : TEXCOORD0;
};
float4 _MainTex_TexelSize;
float4 _BlurOffsets;
v2f vert (appdata_img v)
{
v2f o;
float offX = _MainTex_TexelSize.x * _BlurOffsets.x;
float offY = _MainTex_TexelSize.y * _BlurOffsets.y;

o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
float2 uv = MultiplyUV (UNITY_MATRIX_TEXTURE0, v.texcoord.xy-float2(offX, offY));

o.uv[0].xy = uv + float2( offX, offY);
o.uv[0].zw = uv + float2(-offX, offY);
o.uv[1].xy = uv + float2( offX,-offY);
o.uv[1].zw = uv + float2(-offX,-offY);
return o;
}
sampler2D _MainTex;
fixed4 frag( v2f i ) : COLOR
{
fixed4 c;
c = tex2D( _MainTex, i.uv[0].xy );
c += tex2D( _MainTex, i.uv[0].zw );
c += tex2D( _MainTex, i.uv[1].xy );
c += tex2D( _MainTex, i.uv[1].zw );
return c/4.0;
}
ENDCG
}
}
Fallback off
}