UnityShader开发之径向模糊(实现镜头中间不模糊,四周模糊的效果)
1.因为项目中需要中间清晰四周模糊的效果
对场景模型有效果对UI没有效果
实现效果
效果图(这是拖出来的3D图片)没模糊前
效果图 模糊后(中间清晰,四周模糊,中间大小可调节)
首先是shader脚本
Shader "Custom/GaoShiMoHu" { Properties{ _MainTex("纹理",2D) = "while"{} _Level("强度",Range(1,100)) = 10 _CenterX("中心X坐标",Range(0,1)) = 0.5 _CenterY("中心Y坐标",Range(0,1)) = 0.5 _BufferRadius("缓冲半径",Range(0,1)) = 0 } SubShader{ Tags { "RenderType" = "Opaque" } Pass{ CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" sampler2D _MainTex; float _Level; float _CenterX; float _CenterY; float _BufferRadius; struct v2f { fixed4 vertex : POSITION; fixed2 uv : TEXCOORD; }; v2f vert(appdata_base v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.texcoord; return o; } fixed4 frag(v2f i) :COLOR { fixed4 finalColor; fixed2 center = fixed2(_CenterX,_CenterY); fixed2 uv = i.uv - center; fixed3 tempColor = fixed3(0,0,0); fixed blurParams = distance(i.uv,center); for (fixed j = 0;j < _Level;j++) { tempColor += tex2D(_MainTex,uv*(1 - 0.01*j*saturate(blurParams / _BufferRadius)) + center).rgb; } finalColor.rgb = tempColor / _Level; finalColor.a = 1; return finalColor; } ENDCG } } FallBack "Diffuse" }
第二步 是C#脚本
挂在Camera上面
using System.Collections; using System.Collections.Generic; using UnityEngine; //什么模式都可以运行 ExecuteInEditMode [ExecuteInEditMode] public class ImageEffect_GaussianBlur : MonoBehaviour { public Shader RadiaBlurShader; [HideInInspector] public Material RadiaBlurMaterial; [Range(1, 100)] public float Level = 10; [Range(0, 10)] public float BufferRadius = 0.5f; [Range(0, 1)] public float CenterX = 0.5f; [Range(0, 1)] public float CenterY = 0.5f; private void Awake() { RadiaBlurMaterial = new Material(RadiaBlurShader); } void OnRenderImage(RenderTexture src, RenderTexture dest) { if (RadiaBlurMaterial != null) { RadiaBlurMaterial.SetFloat("_Level", Level); RadiaBlurMaterial.SetFloat("_CenterX", CenterX); RadiaBlurMaterial.SetFloat("_CenterY", CenterY); RadiaBlurMaterial.SetFloat("_BufferRadius", BufferRadius); Graphics.Blit(src, dest, RadiaBlurMaterial); } else { Graphics.Blit(src, dest); } } }
最后shader拖上去即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器