首页 > 代码库 > 无双屏幕特效
无双屏幕特效
Camera Shader
Shader "Effect/WS_Camera" {Properties {_MainTex ("Base (RGB)", 2D) = "white" {}}SubShader {Pass{Tags{"LightMode" = "Always"}ZTest AlwaysCull offZWrite offFog {Mode off}CGPROGRAM#pragma vertex vert #pragma fragment frag#pragma fragmentoption ARB_precision_hint_fastest #pragma target 3.0 #include "UnityCG.cginc"uniform sampler2D _MainTex;uniform fixed4 _MainTex_TexelSize;uniform fixed _CenterX, _CenterY;uniform fixed _Strength;uniform fixed _RadiusX, _RadiusY;uniform fixed _Hue;uniform fixed _Saturation;uniform fixed _Value; float3 RGB2HSV( float3 RGB ) { float4 k = float4(0.0, -1.0/3.0, 2.0/3.0, -1.0); float4 p = RGB.g < RGB.b ? float4(RGB.b, RGB.g, k.w, k.z) : float4(RGB.gb, k.xy); float4 q = RGB.r < p.x ? float4(p.x, p.y, p.w, RGB.r) : float4(RGB.r , p.yzx); float d = q.x - min(q.w, q.y); float e = 1.0e-10; return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); } float3 HSV2RGB( float3 HSV ) { float4 k = float4(1.0, 2.0/3.0, 1.0/3.0, 3.0); float3 p = abs(frac(HSV.xxx + k.xyz) * 6.0 - k.www); return HSV.z * lerp(k.xxx, clamp(p - k.xxx, 0.0, 1.0), HSV.y); }v2f_img vert(appdata_img v){v2f_img o;o.pos = mul(UNITY_MATRIX_MVP, v.vertex);#ifdef UNITY_HALF_TEXEL_OFFSETv.texcoord.y += _MainTex_TexelSize.y;#endif#if SHADER_API_D3D9if (_MainTex_TexelSize.y < 0)v.texcoord.y = 1.0 - v.texcoord.y;#endifo.uv = MultiplyUV(UNITY_MATRIX_TEXTURE0, v.texcoord);return o;}fixed4 frag (v2f_img i) : COLOR{fixed4 main = tex2D(_MainTex, i.uv);half2 center = fixed2(_CenterX, _CenterY);i.uv -= center;//Radial Blurfor(int j = 1; j < 10; j++) {float scale = 1.0 + (-_Strength * j / 10.0);main.rgb += tex2D(_MainTex, i.uv * scale + center);}main.rgb /= 9;//LensCirclefixed dist = distance(i.uv + center, fixed2(_CenterX, _CenterY));main.rgb *= smoothstep(_RadiusX, _RadiusY, dist);//HSV fixed3 colorTemp = RGB2HSV( main.rgb ).rgb; fixed3 finalColor = HSV2RGB( float3(float2((_Hue+colorTemp.r),(_Saturation+colorTemp.g)),(_Value+colorTemp.b)) ); main.rgb *= finalColor;return main;}ENDCG}} FallBack off}
Unity调用
using UnityEngine; [ExecuteInEditMode]public class WS_Camera : MonoBehaviour{ private Material _material; public Shader _shader; //Variables// public float centerX = 0.5f; public float centerY = 0.5f; public float radiusX = 0.8f; public float radiusY = 0.4f; public float strength = 0.1f; public float _Hue = 0.0f; public float _Saturation = 0.0f; public float _Value = http://www.mamicode.com/0.0f; //Properties Material material { get { if (_material == null) { _material = new Material(_shader); _material.hideFlags = HideFlags.HideAndDontSave; } return _material; } } void Start() { //_shader = Shader.Find("DreamFaction/Effect/WS_Camera"); if (!SystemInfo.supportsImageEffects) { enabled = false; return; } if (!_shader && !_shader.isSupported) { enabled = false; } } void OnRenderImage(RenderTexture source, RenderTexture destination) { if (_shader != null) { material.SetFloat("_CenterX", centerX); material.SetFloat("_CenterY", centerY); material.SetFloat("_RadiusX", radiusX); material.SetFloat("_RadiusY", radiusY); material.SetFloat("_Strength", strength); material.SetFloat("_Hue", _Hue); material.SetFloat("_Saturation", _Saturation); material.SetFloat("_Value", _Value); Graphics.Blit(source, destination, _material); } } void OnDisable() { if (_material) { DestroyImmediate(_material); } }}
运行测试
无双屏幕特效
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。