unity 利用Graphics.Blit来制作图片效果

c# 的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class GraphicsBlitTest : MonoBehaviour
{public Texture2D source;//原纹理public Material material;//效果材质public RawImage rawImage;// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){if(Input.GetKeyDown(KeyCode.Space)){UseBlit();}}void UseBlit(){material.SetFloat("_HalfPixelX", 0.005f);material.SetFloat("_HalfPixelY", 0.008f);RenderTexture renderTexture = RenderTexture.GetTemporary(source.width,source.height,0);RenderTexture renderTexture1 = RenderTexture.GetTemporary(source.width,source.height,0);Graphics.Blit(source,renderTexture,material,0);//renderTexture就是经过材质shader之后的效果// Graphics.Blit(renderTexture,renderTexture1,material,1);// RenderTexture.active = renderTexture;// Texture2D texture2D = new Texture2D(renderTexture.width,renderTexture.height,TextureFormat.ARGB32,false);// texture2D.ReadPixels(new Rect(0,0,renderTexture.width,renderTexture.height),0,0);// texture2D.Apply(false);rawImage.texture = renderTexture;}
}

source可以是当前相机的RenderTexture也可以是准备好的一张图,然后利用material提供的效果将效果输出到renderTexture,第三个参数是使用哪个pass 0表示是使用第一个

下面是例子对应的shader,是一个模糊效果

Shader "JJ/ImageEffect/DualFilterBlur"
{Properties{_MainTex ("Texture", 2D) = "white" {}}SubShader{// No culling or depthCull Off ZWrite Off ZTest Always//pass 1Pass {CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;};v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = v.uv;return o;}sampler2D _MainTex;float _HalfPixelX;float _HalfPixelY;fixed4 Downsample(float2 uv){//原理是取相邻节点,最后取平均颜色float2 UV;fixed4 sum;sum = tex2D(_MainTex, uv) * 4.0;UV = float2(uv.x - _HalfPixelX, uv.y - _HalfPixelY);sum += tex2D(_MainTex, UV);UV = float2(uv.x + _HalfPixelX, uv.y + _HalfPixelY);sum += tex2D(_MainTex, UV);UV = float2(uv.x + _HalfPixelX, uv.y - _HalfPixelY);sum += tex2D(_MainTex, UV);UV = float2(uv.x - _HalfPixelX, uv.y + _HalfPixelY);sum += tex2D(_MainTex, UV);return sum * 0.125;}fixed4 frag (v2f i) : SV_Target{return Downsample(i.uv);}ENDCG}//pass 1Pass { CGPROGRAM#pragma vertex vert#pragma fragment fragstruct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;};v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = v.uv;return o;}sampler2D _MainTex;float _HalfPixelX;float _HalfPixelY;float _MaskPower;fixed4 Upsample(float2 uv) {float2 UV;fixed4 sum;UV = float2(uv.x - _HalfPixelX * 2.0, uv.y);sum = tex2D(_MainTex, UV);UV = float2(uv.x - _HalfPixelX, uv.y + _HalfPixelY);sum += tex2D(_MainTex, UV) * 2.0;UV = float2(uv.x, uv.y + _HalfPixelY * 2.0);sum += tex2D(_MainTex, UV);UV = float2(uv.x + _HalfPixelX, uv.y + _HalfPixelY);sum += tex2D(_MainTex, UV) * 2.0;UV = float2(uv.x + _HalfPixelX * 2.0, uv.y);sum += tex2D(_MainTex, UV);UV = float2(uv.x + _HalfPixelX, uv.y - _HalfPixelY);sum += tex2D(_MainTex, UV) * 2.0;UV = float2(uv.x, uv.y - _HalfPixelY * 2.0);sum += tex2D(_MainTex, UV);UV = float2(uv.x - _HalfPixelX, uv.y - _HalfPixelY);sum += tex2D(_MainTex, UV) * 2.0;sum /= 12.0;sum.rgb *= (1-_MaskPower);sum.a = 1;return sum;}fixed4 frag(v2f i) : SV_Target {return Upsample(i.uv);}ENDCG}}
}

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

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

相关文章

前端实现轮训和长连接

简介 轮训和长连接相关内容可以参考之前的文章消息推送系统。消息推送系统-CSDN博客文章浏览阅读106次。在餐饮行业中,店内应用有pos、厨显屏等,云端应用为对应数据中心。为了实现云端数据和操作指令下发到店内应用,需要有一个系统实现这个功…

【手写数据库toadb】01 开发数据库内核准备阶段-开发环境准备

开发环境 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方便阶段学习…

配置DNS主从服务器,实现真反向解析

主服务器 [rootbogon ~]# systemctl stop firewalld.service #关闭防火墙 [rootbogon ~]# setenforce 0 #关闭selinux [rootbogon ~]# systemctl restart named #启动dns服务 [rootbogon ~]# vim /etc/named.conf #进入dns配置文件 options {#监听…

udp丢包处理方法

UDP丢包处理方法如下1: 使用前向纠错码(FEC)技术。通过在发送端添加冗余信息,使接收端能够在收到部分丢失的数据时进行纠错。 使用前向纠错码(FEC)技术是一种有效的处理UDP丢包的方法。FEC技术通过在发送…

【ARM 嵌入式 编译系列 2.4 -- GCC 编译参数学习 -Wl,--gc-sections 】

请阅读【嵌入式开发学习必备专栏 之 ARM GCC 编译专栏】 文章目录 概述-Wl 选项例子: --gc-sections --gc-sections例子: -Wshadow例子: -Wlogical-op例子: -Waggregate-return例子: -Wfloat-equal例子: -W…

2023年12月 电子学会 青少年软件编程等级考试Scratch三级真题

202312 青少年软件编程等级考试Scratch三级真题 一、单项题 第 1 题 运行左图程序,想得到右图中的效果,红色框应填写的数值是?( ) A:12 B:11 C:10 D:9 第 2 题 下列…

每天都美好的一天

每天我们都会遇到不同的事情,开心的、愤怒的、悲伤的等等,今天过完明天我们还得继续,所以一切又显得不那么重要。一天中如果有不开心的事情发生会影响我们当天很长一段时间,甚至未来几天。 今天所做之事都是自己明天的基础&#…

修改live server的默认浏览器(vscode)

在插件打开设置 修改选定浏览器

VC++中使用OpenCV进行颜色检测

VC中使用OpenCV进行颜色检测 在VC中使用OpenCV进行颜色检测非常简单,首选读取一张彩色图像,并调用函数cvtColor(img, imgHSV, COLOR_BGR2HSV);函数将原图img转换成HSV图像imgHSV,再设置好HSV三个分量的上限和下限值,调用inRange函…

C++实现一个简单的学生管理系统

目录 1.一个简单的学生管理系统简介 2.定义一个 Student 类 2.1用于表示学生信息。 3.定义一个 StudentManager 类 3.1用于管理学生信息。 4.在 main 函数中 4.1使用上述两个类来实现一个简单的学生管理系统 5.C类模板 推荐阅读: calloc与realloc和malloc的…

多线程(看这一篇就够了,超详细,满满的干货)

多线程 一.认识线程(Thread)1. 1) 线程是什么1. 2) 为啥要有线程1.3) 进程和线程的区别标题1.4) Java的线程和操作系统线程的关系 二.创建线程方法1:继承Thread类方法2:实现Runnable接口方法3:匿名内部类创建Thread子类对象标题方法4:匿名内部类创建Runn…

MySQL TINYINT(1)和TINYINT(2)有什么区别?

文章目录 1.直接建表2.查询数据3.总结 身为程序员,拿事实说话拿代码说话最直观了,show the code 1.直接建表 CREATE TABLE tinyinttest (id int NOT NULL,a TINYINT(1) NOT NULL DEFAULT 0,b TINYINT(2) NOT NULL DEFAULT 0,c TINYINT(1) ZEROFILL NOT…

JSON 基本语法以及在Java 中的使用

文章目录 一、JSON 概述1.1 什么是 JSON1.2 JSON数据类型和语法1.3 JSON 优势 二、使用 JSON2.1 在 Java程序中使用 JSON2.2 Jackson的使用2.2.1 Jackson的简单介绍2.2.2 反序列化2.2.3 序列化 参考资料 一、JSON 概述 1.1 什么是 JSON JSON(JavaScript Object No…

Unity下实现跨平台的RTMP推流|轻量级RTSP服务|RTMP播放|RTSP播放低延迟解决方案

2018年,我们开始在原生RTSP|RTMP直播播放器的基础上,对接了Unity环境下的低延迟播放,毫秒级延迟,发布后,就得到了业内一致的认可。然后我们覆盖了Windows、Android、iOS、Linux的RTMP推送、轻量级RTSP服务和RTSP|RTMP播…

VRRP协议负载分担

VRRP流量负载分担 VRRP负载分担与VRRP主备备份的基本原理和报文协商过程都是相同的。同样对于每一个VRRP备份组,都包含一个Master设备和若干Backup设备。与主备备份方式不同点在于:负载分担方式需要建立多个VRRP备份组,各备份组的Master设备可以不同;同一台VRRP设备可以加…

ctfshow信息收集(web1-web20)

目录 web1 web2 web3 web4 web5 web6 web7 web9 web10 web11 web14 web15 web16 web17 web18 web19 web20 web1 根据提示的孩子开发的时候注释没有被及时删除 web2 js原因无法查看源代码 第一种方法 在url前加入 view-source: 会显示页面源代…

【车载HMI开发工具--EB GUIDE 与 Unity 合作提供一体化的沉浸式 HMI 设计开发工具链】【转载】

随着车载高性能计算平台的日益普及以及显示器尺寸和数量的不断增加,沉浸式车载人机交互界面(HMI)的需求也在持续增长。为了将实时 3D 技术带入车载 HMI 领域,Unity 与 Elektrobit (EB)展开了合作,EB 是推进 HMI 功能安…

数据分析完整流程一般包括哪几个环节/步骤

问题定义: 确定需要解决的问题或目标,明确分析的方向和目的。 数据收集: 收集与问题相关的数据,可以包括从各种来源获取的结构化或非结构化数据。 数据清洗: 对收集到的数据进行清理,处理缺失值、异常值和…

JavaScript 中的事件

1、鼠标事件&#xff1a; 鼠标单击事件&#xff08;click&#xff09;&#xff1a; 方法一 &#xff08;onclick&#xff09; <button id"btn" onclick"alert(88888)">点击弹框</button> 方法二&#xff08;利用addEventListener&#xff09;…

洛谷(CodeForces)历年愚人节题目,难度普及+/提高,让你怀疑自己智商

INTERCALC 题目描述 DO YOU EXPECT ME TO FIND THIS OUT? WHAT BASE AND/XOR LANGUAGE INCLUDES string? DON’T BYTE OF MORE THAN YOU CAN CHEW YOU CAN ONLY DISTORT THE LARGEST OF MATHEMATICS SO FAR SAYING “ABRACADABRA” WITHOUT A MAGIC AND WON’T DO YOU …