12.4 高斯模糊

article/2025/11/10 15:19:56

 代码来源于 冯乐乐 shader入门精要

 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class MyGaussianBlur : PostEffectsBase {public Shader gaussianBlurShader;private Material gaussianBlurMat;public Material material{get{gaussianBlurMat = CheckShaderAndCreateMaterial(gaussianBlurShader,gaussianBlurMat);return gaussianBlurMat;}}[Range(0,4)]public int iterations = 3;[Range(0.2f,3f)]public float blurSpread = 0.6f;[Range(1,8)]public int downSample = 2;/// <summary>/// OnRenderImage is called after all rendering is complete to render image./// </summary>/// <param name="src">The source RenderTexture.</param>/// <param name="dest">The destination RenderTexture.</param>void OnRenderImage(RenderTexture src, RenderTexture dest){if(material != null){int rtW = src.width/downSample ;int rtH = src.height/downSample;RenderTexture buffer0 = RenderTexture.GetTemporary(rtW,rtH,0);buffer0.filterMode = FilterMode.Bilinear;Graphics.Blit(src,buffer0);for(int i = 0;i < iterations;i++){material.SetFloat("_BlurSize",1.0f + i * blurSpread);RenderTexture buffer1 = RenderTexture.GetTemporary(rtW,rtH,0);Graphics.Blit(buffer0,buffer1,material,0);RenderTexture.ReleaseTemporary(buffer0);buffer0 = buffer1;buffer1 = RenderTexture.GetTemporary(rtW,rtH,1);Graphics.Blit(buffer0,buffer1,material,1);RenderTexture.ReleaseTemporary(buffer0);buffer0 = buffer1;}Graphics.Blit(buffer0,dest);RenderTexture.ReleaseTemporary(buffer0);}else{Graphics.Blit(src,dest);}}}
Shader "MyGaussianBlur"{Properties{_MainTex ("Main Tex(RGB)", 2D) = "white" {}_BlurSize ("Blur Size", Float) = 1.0}SubShader{CGINCLUDE#include "UnityCG.cginc"sampler2D _MainTex;half4 _MainTex_TexelSize;float _BlurSize;struct v2f{float4 pos: SV_POSITION;half2 uv[5]: TEXCOORD0;};v2f vertBlurVertical(appdata_img v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);half2 uv = v.texcoord;o.uv[0] = uv;o.uv[1] = uv + float2(0,_MainTex_TexelSize.y*1.0) * _BlurSize;o.uv[2] = uv - float2(0,_MainTex_TexelSize.y*1.0) * _BlurSize;o.uv[3] = uv + float2(0,_MainTex_TexelSize.y*2.0) * _BlurSize;o.uv[4] = uv - float2(0,_MainTex_TexelSize.y*2.0) * _BlurSize;return o;}v2f vertBlurHorizontal(appdata_img v) {v2f o;o.pos = UnityObjectToClipPos(v.vertex);half2 uv = v.texcoord;o.uv[0] = uv;o.uv[1] = uv + float2(_MainTex_TexelSize.x * 1.0, 0.0) * _BlurSize;o.uv[2] = uv - float2(_MainTex_TexelSize.x * 1.0, 0.0) * _BlurSize;o.uv[3] = uv + float2(_MainTex_TexelSize.x * 2.0, 0.0) * _BlurSize;o.uv[4] = uv - float2(_MainTex_TexelSize.x * 2.0, 0.0) * _BlurSize;return o;}fixed4 fragBlur(v2f i):SV_TARGET{float weight[3] = {0.4026,0.2442,0.0545};fixed3 sum = tex2D(_MainTex,i.uv[0]).rgb*weight[0];for(int j = 1; j < 3;j++){sum += tex2D(_MainTex,i.uv[j*2-1]).rgb * weight[j];sum += tex2D(_MainTex,i.uv[j*2]).rgb * weight[j];}return fixed4(sum,1.0);            }ENDCGZTest Always Cull Off ZWrite OffPass{NAME "GAUSSIAN_BLUR_VERTTICAL"CGPROGRAM#pragma vertex vertBlurVertical#pragma fragment fragBlurENDCG}Pass{NAME "GAUSSIAN_BLUR_HORIZONTAL"CGPROGRAM#pragma vertex vertBlurHorizontal#pragma fragment fragBlurENDCG}}Fallback "Diffuse"
}

 


http://chatgpt.dhexx.cn/article/ow805yj0.shtml

相关文章

Gamma矫正,先有鸡还是先有蛋的故事

先上图 此图出于LearnOpenGl CN。原文可能由于翻译的关系&#xff0c;导致内容其实并不好理解。翻阅了不少资料后&#xff08;其实就是冯乐乐老师的入门精要&#xff0c;逃...&#xff09;&#xff0c;想对gamma矫正做一个简单的总结。 先剖析一下这张图的含义&#xff08;此图…

记录参加CSDN上海大联欢活动

CSDN官方北上广三地同时举行的活动小结&#xff1a;http://geek.csdn.net/news/detail/50482&#xff0c;下面是本人参加上海站的小结。 今天很荣幸参加CSDN技术大牛上海聚会&#xff0c;首先申明一点我只是一个不起眼的小程序员&#xff0c;首先就是要感谢CSDN给我这么一个机…

Unity Shader入门精要学习笔记 - 第6章 开始 Unity 中的基础光照

转自冯乐乐的《Unity Shader入门精要》 通常来讲&#xff0c;我们要模拟真实的光照环境来生成一张图像&#xff0c;需要考虑3种物理现象。 首先&#xff0c;光线从光源中被发射出来。 然后&#xff0c;光线和场景中的一些物体相交&#xff1a;一些光线被物体吸收了&#xff…

shader基础学习摘要(一)

开篇致谢&#xff1a; 感谢冯乐乐老师的shader入门精要。 // Upgrade NOTE: replaced mul(UNITY_MATRIX_MVP,*) with UnityObjectToClipPos(*)Shader "Unity Shaders Book/Chapter 5/Simple Shader" {Properties{_Color("Color Tint", Color) (1, 1, 1, …

对谈 | “计算机学神”闫令琪:我不希望别人说Rendering已经没东西可解了

我还要继续学习图形学吗&#xff1f; 是继续在学术界钻研&#xff0c;还是进入工业界&#xff1f; 元宇宙的到来&#xff0c;就是图形学的春天了吗&#xff1f; 以上&#xff0c;是我们常在后台收到的问题。于是&#xff0c;2022年8月&#xff0c;GAMES104课程组邀请了王希、…

Unity 之 Scriptable Objects 更直观的序列化

在日常开发中总会在Inspector面板中填写一些序列化信息&#xff0c;如&#xff1a;名称、血量、或者秘钥序列号等&#xff08;图一&#xff09;。但看似方便&#xff0c;还是有些缺点的&#xff0c;例如填写的序列化信息不能共享&#xff0c;如果在prefab上对应的脚本丢失&…

Unity Shader入门精要学习笔记 - 第17章 Unity的表面着色器探秘

转自 冯乐乐的《Unity Shader 入门精要》 2010年的Unity 3 中&#xff0c;Surface Shader 出现了。 表面着色器的一个例子。 我们先做如下准备工作。 1&#xff09;新建一个场景&#xff0c;去掉天空盒子 2&#xff09;新建一个材质&#xff0c;新建一个Shader&#xff0c…

从图形渲染管线谈游戏性能优化

从图形渲染管线谈性能优化 最近做一个3D场景类项目&#xff0c;其中涉及到各种建筑模型、植物模型、地形等等。画面效果还不错&#xff1b;可是运行起来&#xff0c;那性能啊&#xff0c;没得玩。索性尝试了各种优化手段&#xff0c;这里简单和大家分享一下。当然&#xff0c;在…

《Unity Shader入门精要》笔记01 前言

《Unity Shader入门精要》笔记01 前言 ——本系列是基于人民邮电出版社《Unity Shader入门精要》&#xff08;冯乐乐著 &#xff09;的自学Unity Shader笔记&#xff0c;如果您发现了本文的纰漏&#xff0c;还望不吝指正。 写在前边 本书旨在从基础开始&#xff0c;帮助读者逐…

unity学习-shader(一)

渲染流水线 1 CPU流水线2 GPU流水线2.1 顶点着色器2.2 剪裁2.3 屏幕映射2.4 三角形设置2.5 三角形遍历2.6 片元着色器2.7 逐片元操作 应用阶段 需要准备好场景数据&#xff0c;比如摄像机、模型、光源等。需要再这里做粗粒度剔除&#xff08;culling&#xff09;工作&#xff0…

Unity Shader入门精要--第4 章 学习Shader 所需的数学基础:矩阵

Unity系列文章目录 文章目录 Unity系列文章目录前言4.4.3 矩阵运算4.4.4 特殊的矩阵2&#xff0e;单位矩阵 参考 前言 不幸的是&#xff0c;没有人能告诉你母体&#xff08;matrix&#xff09;究竟是什么。你需要自己去发现它。 —电影《黑客帝国》&#xff08;英文名&#xf…

【转】《Unity Shader入门精要》冯乐乐著 书中彩图

为方便个人手机学习时候查阅,从网上转来这些彩图。 如属过当行为&#xff0c;联系本人删除。 勘错表 http://candycat1992.github.io/unity_shaders_book/unity_shaders_book_corrigenda.html 转自:http://candycat1992.github.io/unity_shaders_book/unity_shaders_book_image…

【转】《Unity Shader入门精要》冯乐乐 随书彩图

绕了好多圈子终于还是沉下心来好好看这本书了… 以下是原项目GitHub中分享的随书彩图 学习的时候看到色彩丰富的东西会心情更好咯 原项目GitHub链接 前言 第2章 渲染流水线 图2.1 真实生活中的流水线 图2.2 渲染流水线中的三个概念阶段 图2.3 渲染所需的数据&#xff08…

《Unity Shader入门精要》冯乐乐著 书中彩图

为方便个人手机学习时候查阅,从网上转来这些彩图&#xff0c;然后整合所有资料。 如属过当行为&#xff0c;联系本人删除。 勘错表 http://candycat1992.github.io/unity_shaders_book/unity_shaders_book_corrigenda.html 前言 第2章 渲染流水线 图2.1 真实生活中的流水线…

冯乐乐之二 shader的数学

冯乐乐目录 第2章渲染流水线介绍 第三章 Unity shader基础 基础shaderLab语言&#xff0c;shader结构&#xff0c;属性properties&#xff0c;主角SubShader&#xff0c;备胎Fallback。 shader三大类型&#xff1a; Unity宠儿表面着色器&#xff0c;聪明boy顶点片元着色器…

各大浏览器清除缓存(cache)详细步骤

1. Firefox 1.1 选择“Options”&#xff1a; 1.2 选择“Advanced”->“Network”->“Cached Web Content”&#xff0c;点击“Clear Now”&#xff1a; 2. Chrome 2.1 选择“Settings”&#xff1a; 2.2 点击页面底部“Show advanced settings”&#xff1a; 2.3 选择…

浏览器如何清除缓存教程

打开浏览器—设置—隐私设置—清除浏览器数据

清除浏览器的缓存

第一种方法 在浏览器界面按F12之后,再选择Network,选中Disable cache, 然后刷新(这里有个玄学的问题就是即使你已经选中了Disable cache, 也需要打开network这个页面再刷新才有效, 亲测有效, 但是我也不知道为什么) 第二种方法 在浏览器界面直接Ctrl Shift R 比较方便,但…

Edge浏览器如何清除缓存

浏览器在使用过程中会产生大量的缓存&#xff0c;Edge浏览器如何清理缓存&#xff1f;下面是Edge浏览器清理缓存的操作步骤。 1.双击Edge图标打开Edge浏览器。 2.单击右Edge浏览器上角的“更多操作”。 3.弹出菜单&#xff0c;选择“设置”。 4.选择单击“选择要清除的内容”…