Unity背景模糊图片高斯模糊高性能的实现方案

news2025/1/18 8:50:44

环境:

unity2021.3.x

效果:

模糊前:

模糊后:

模糊前:

模糊后:

实现核心思路(shader):

 SubShader {
     CGINCLUDE
     
     #include "UnityCG.cginc"
     
     sampler2D _MainTex; // 主纹理
     half4 _MainTex_TexelSize; // _MainTex的像素尺寸大小, float4(1/width, 1/height, width, height)
     float _BlurSize; // 模糊尺寸(纹理坐标的偏移量)
       
     struct v2f {
         float4 pos : SV_POSITION; // 模型空间顶点坐标
         half2 uv[5]: TEXCOORD0; // 5个邻域的纹理坐标
     };
       
     v2f vertBlurVertical(appdata_img v) { // 垂直模糊顶点着色器
         v2f o;
         o.pos = UnityObjectToClipPos(v.vertex); // 模型空间顶点坐标变换到裁剪空间, 等价于: mul(UNITY_MATRIX_MVP, v.vertex)
         half2 uv = v.texcoord;
         o.uv[0] = uv;
         o.uv[1] = uv + float2(0.0, _MainTex_TexelSize.y * 1.0) * _BlurSize;
         o.uv[2] = uv - float2(0.0, _MainTex_TexelSize.y * 1.0) * _BlurSize;
         o.uv[3] = uv + float2(0.0, _MainTex_TexelSize.y * 2.0) * _BlurSize;
         o.uv[4] = uv - float2(0.0, _MainTex_TexelSize.y * 2.0) * _BlurSize;      
         return o;
     }
     
     v2f vertBlurHorizontal(appdata_img v) { // 水平模糊顶点着色器
         v2f o;
         o.pos = UnityObjectToClipPos(v.vertex); // 模型空间顶点坐标变换到裁剪空间, 等价于: mul(UNITY_MATRIX_MVP, 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}; // 大小为5的一维高斯核,实际只需记录3个权值
         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);
     }
         
     ENDCG
     
     ZTest Always Cull Off ZWrite Off
     
     Pass {
         NAME "GAUSSIAN_BLUR_VERTICAL"
         
         CGPROGRAM
           
         #pragma vertex vertBlurVertical  
         #pragma fragment fragBlur
           
         ENDCG  
     }
     
     Pass {  
         NAME "GAUSSIAN_BLUR_HORIZONTAL"
         
         CGPROGRAM  
         
         #pragma vertex vertBlurHorizontal  
         #pragma fragment fragBlur
         
         ENDCG
     }
 }

github地址:高斯模糊 Github地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1496468.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CubeMX入门教程(1)——环境搭建

目录 1、为什么要用CubeMX&#xff1f; 2、如何安装CubeMX? 3、HAL固件库的安装 1、为什么要用CubeMX&#xff1f; STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具&#xff0c;目的就是为了方便开发者&#xff0c; 允许用户使用图形化向导生成C …

BUUCTF---[极客大挑战 2019]BabySQL1

1.这道题和之前做的几道题是相似的&#xff0c;这道题考的知识点更多。难度也比之前的大一些 2.尝试万能密码 or 1#发现过滤了or,使用1和1,发现他对单引号也进行了过滤。于是我尝试进行双写绕过&#xff0c;发现可以通过了。 3.由之前的做题经验可知&#xff0c;这道题会涉及到…

wps没保存关闭了怎么恢复数据?恢复文件教程

Microsoft Word是我们不可或缺的工具。很多小伙伴都遇到在WPS中编辑文件时&#xff0c;它可能会突然闪退&#xff0c;或者忘记及时保存文件就直接关闭了&#xff0c;导致我们辛苦编辑的文档丢失。面对这种情况我们该如何应对&#xff0c;尽量减小损失呢&#xff1f;接下来让我为…

Java - Spring MVC 实现跨域资源 CORS 请求

据我所知道的是有三种方式&#xff1a;Tomcat 配置、拦截器设置响应头和使用 Spring MVC 4.2。 设置 Tomcat 这种方式就是引用别人封装好的两个 jar 包&#xff0c;配置一下web.xml就行了。我也并不推荐&#xff0c;这里放两个我在网上找到的配置相关文章&#xff0c;感兴趣可…

遥感分析时什么情况下需要做大气校正?

经常会遇到这样的问题&#xff1a;什么情况需要做大气校正产生&#xff1f;这个问题取决于传感器和应用目标&#xff0c;总的来说&#xff0c;如果要做光谱分析&#xff0c;那么大气校正是必须要做的。本文对于在什么情况下选择什么样的大气校正方法&#xff0c;给出了一些依据…

(3)(3.3) MAVLink高延迟协议

文章目录 前言 1 配置 2 说明 3 消息说明 前言 ArduPilot 支持 MAVLink 高延迟协议(MAVLink High Latency)。该协议专为卫星或 LoRA 等低带宽或高成本链路而设计。 在此协议中&#xff0c;每 5s 只发送一次 HIGH_LATENCY2 MAVLink 信息。对 MAVLink 命令或请求&#xff08…

今日头条 _signature逆向分析

声明&#xff1a;本文仅作学习交流&#xff0c;请遵守法律法规&#xff0c;不要恶意爬取网站。 网址&#xff1a;aHR0cHM6Ly93d3cudG91dGlhby5jb20v 接口&#xff1a;aHR0cHM6Ly93d3cudG91dGlhby5jb20vaG90LWV2ZW50L2hvdC1ib2FyZC8 本文提到的接口是头条的今日热榜接口&…

linux安装ngnix

一、将nginx-1.20.1.tar.gz上传至linux服务器目录下 二、将nginx安装包解压到/usr/local目录下 tar -zxvf /home/local/nginx-1.20.1.tar.gz -C /usr/local/三、预先安装依赖 yum -y install pcre-devel yum -y install openssl openssl-devel yum -y install gcc gcc-c auto…

m4a是什么文件格式?音质是无损吗?

m4a文件格式作为一种音频文件格式&#xff0c;源于MPEG-4标准的制定&#xff0c;该标准致力于提供高效的多媒体编解码方案。通常使用AAC编码&#xff0c;可以提供高质量的音频&#xff0c;但不是无损格式。AAC是一种有损压缩格式&#xff0c;它能够在减小文件大小的同时保持相对…

使用paypal撸BLIZZARDENT 暴雪

在Fomepay平台可以使用493193的卡绑定PayPal来支付暴雪以及退款&#xff0c;有需要的小伙伴可以提取 点击进入Fomepay官方平台获取493193卡 只要对方退款&#xff0c;卡里面有钱我们就可以提取出来&#xff0c;当天处理 开卡步骤如下

laravel-admin 头部添加操作

新建html 样式及js namespace App\Admin\Extensions\Nav;class Links {public function __toString(){return <<<HTML<li><a href"" οnclick"js_method();return false;"><i class"fa fa-floppy-o"></i><s…

【C++】学习记录

一、第一个C程序 #include<iostream> using namespace std;int main() {cout << "Hello World!";return 0; } 二、数据类型、变量与常量、运算符 2.1 数据类型 2.2 变量与常量 2.3 运算符 三 、判断语句&#xff08;if-else、switch-case&#xff09; …

芯片财务管理ERP:主要功能与内容科普

随着科技的飞速发展&#xff0c;芯片产业作为现代信息技术的核心&#xff0c;对财务管理的要求也越来越高。为满足这一需求&#xff0c;芯片企业纷纷采用财务管理ERP(企业资源规划)系统&#xff0c;以提升财务管理效率和准确性。那么&#xff0c;芯片财务管理ERP究竟具备哪些主…

你不得不知道的Python AI库

Python是人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;领域中使用最广泛的编程语言之一&#xff0c;拥有丰富的库支持各种AI和ML任务。本文介绍一些经典的Python AI库。 1. NumPy 简介&#xff1a;NumPy&#xff08;Numerical Python&#xff09;…

python词嵌入

一、词嵌入的概念 自然语言处理的突破在2023年震撼世界&#xff0c;chatgpt3出来&#xff0c;之后chatgpt4、Gemini、Claude3等出来&#xff0c;问答越来越智能&#xff0c;非常厉害&#xff0c;其中有个基础性的概念&#xff0c;计算机要如何理解语言&#xff0c;基础工作就在…

.NET项目定时任务部署到IIS停止问题

项目场景&#xff1a; 在.Net开发中定时任务我一般都是写在Windows服务中跑&#xff0c;但这次项目组要求直接将定时任务写到web项目中。 问题描述 把定时任务的项目部署到IIS后&#xff0c;定时任务总是无缘无故挂掉。 原因分析&#xff1a; 最后发现是IIS应用程序池的回收…

uniapp直接连接wifi(含有ios和安卓的注意事项)

前言 小程序中直接连接wifi-----微信小程序 代码 启动 //启动wifistartWifi() {return new Promise((resolve, reject) > {uni.startWifi({success: (res) > {console.log(启动wifi 成功, res)resolve(true)},fail: (err) > {console.error(启动wifi 失败, err)uni.s…

基于springboot+vue实现会议室预约系统项目【项目源码+论文说明】

基于springboot实现会议室预约系统演示 摘要 一个企业的发展离不开相关的规定流程。信息化到来的今天在我们的生活当中。离不开各种信息化的支持。比如钉钉会议预约、美团买菜、扫码签到等各种信息化软件。他们涉及我们生活中的方方面面给我们的生活提供了更大的便利性。大到政…

Leetcode : 506. 相对名次

思路 &#xff1a; 遍历计算每个元素比它大的元素个数&#xff0c;并判断做出对应结果标签&#xff1b; #include <iostream> #include <vector>using namespace std;class Solution { public:vector<string> findRelativeRanks(vector<int>& scor…

Subversion svn 开源的版本控制系统入门介绍 VCS

拓展阅读 Subversion 开源的版本控制系统入门介绍 VCS Git 开源的版本控制系统-01-入门使用介绍 Git 开源的版本控制系统-02-base usage 基本用法 Git 开源的版本控制系统-03-时间数据回溯 Git 开源的版本控制系统-04-branch manage 分支管理 Git 开源的版本控制系统-05-…