当前位置: 首页 > news >正文

Unity中Shader的UV扭曲效果的实现

文章目录

  • 前言
  • 一、实现的思路
    • 1、在属性面板暴露一个 扭曲贴图的属性
    • 2、在片元结构体中,新增一个float2类型的变量,用于独立存储将用于扭曲的纹理的信息
    • 3、在顶点着色器中,根据需要使用TRANSFORM_TEX对Tilling 和 Offset 插值;以及根据需要使用_Time相乘实现流动效果
    • 4、在片元着色器中,使用fixed4变量来存储,对扭曲纹理的采样结果
    • 5、使用lerp(A,B,alpha)进行线性插值
    • 6、最后用 线性插值后的结果对 主纹理进行采样
  • 二、测试代码


前言

Unity中Shader的UV扭曲效果的实现


一、实现的思路

1、在属性面板暴露一个 扭曲贴图的属性

2、在片元结构体中,新增一个float2类型的变量,用于独立存储将用于扭曲的纹理的信息

3、在顶点着色器中,根据需要使用TRANSFORM_TEX对Tilling 和 Offset 插值;以及根据需要使用_Time相乘实现流动效果

4、在片元着色器中,使用fixed4变量来存储,对扭曲纹理的采样结果

fixed4 distortTex = tex2D(_DistortTex,i.uv2);

5、使用lerp(A,B,alpha)进行线性插值

float2 distort = lerp(i.uv.xy,distortTex,_Distort);

6、最后用 线性插值后的结果对 主纹理进行采样

fixed4 col = tex2D(_MainTex, distort);


二、测试代码


Shader "MyShader/P0_9_7"
{Properties{[Header(RenderingMode)]//暴露两个属性,分别对应 源混合类型 和 目标混合类型//源混合类型[Enum(UnityEngine.Rendering.BlendMode)]_SrcBlend("Src Blend",int) = 0//目标混合类型[Enum(UnityEngine.Rendering.BlendMode)]_DstBlend("DstBlend",int) = 0//暴露属性来控制 剔除哪里[Enum(UnityEngine.Rendering.CullMode)]_Cull("Cull",int) = 1[Header(Base)]//用来控制颜色混合_Color("Color",COLOR) = (1,1,1,1)//用来控制亮度_Intensity("Intensity",Range(-4,4)) = 1//主纹理_MainTex ("Texture", 2D) = "white" {}//控制 X 轴的移动速度_MainUVSpeedX("MainUVSpeed X",float) = 0//控制 Y 轴的移动速度_MainUVSpeedY("MainUVSpeed Y",float) = 0[Header(Mask)]//流动贴图_MaskTex("MaskTex",2D) = "white"{}//流动贴图 X 轴上的移动速度_MaskUVSpeedX("MaskUVSpeed X",float) = 0//流动贴图 Y 轴上的移动速度_MaskUVSpeedY("MaskUVSpeed Y",float) = 0[Header(Distort)]_DistortTex("DistortTex",2D) = "white"{}_Distort("Distort",Range(0,1)) = 0_DistortUVSpeedX("DistortUVSpeed X",float) = 0_DistortUVSpeedY("DistortUVSpeed Y",float) = 0}SubShader{Tags{"Queue" = "Transparent"}//混合Blend [_SrcBlend][_DstBlend]Cull [_Cull]Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"sampler2D _MainTex;float4 _MainTex_ST;fixed4 _Color;half _Intensity;float _MainUVSpeedX,_MainUVSpeedY;sampler2D _MaskTex;float4 _MaskTex_ST;float _MaskUVSpeedX,_MaskUVSpeedY;sampler2D _DistortTex;float4 _DistortTex_ST;float _Distort;float _DistortUVSpeedX,_DistortUVSpeedY;struct appdata{//为了节省空间,使用 把两个 float2 合并为一个 float4float4 vertex : POSITION;float4 uv : TEXCOORD0;};struct v2f{float4 uv : TEXCOORD0;float4 vertex : SV_POSITION;//这个存储纹理扭曲的信息float2 uv2 : TEXCOORD1;};v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);//这个保存主纹理的信息o.uv.xy = TRANSFORM_TEX(v.uv, _MainTex) + float2(_MainUVSpeedX,_MainUVSpeedY) * _Time.y;//这个保存遮罩贴图的信息 (为了也实现流动,和 上面使用一样的方法)o.uv.zw = TRANSFORM_TEX(v.uv,_MaskTex) + float2(_MaskUVSpeedX,_MainUVSpeedY) * _Time.y;//这个保存纹理扭曲的贴图信息o.uv2 = TRANSFORM_TEX(v.uv,_DistortTex) + float2(_DistortUVSpeedX,_DistortUVSpeedY) * _Time.y;return o;}fixed4 frag (v2f i) : SV_Target{//先对扭曲纹理进行采样fixed4 distortTex = tex2D(_DistortTex,i.uv2);//使用lerp (A,B,alpha)函数进行线性插值float2 distort = lerp(i.uv.xy,distortTex,_Distort);//再用采样后的结果,给主要纹理采样,实现扭曲效果fixed4 col = tex2D(_MainTex, distort);//一般使用 * 来颜色混合col *= _Color * _Intensity;//对遮罩贴图进行纹理采样fixed4 maskTex = tex2D(_MaskTex,i.uv.zw);//最后 返回 遮罩 和 原结果相乘的结果return col * maskTex;}ENDCG}}
}

使用的纹理:
在这里插入图片描述

效果:

请添加图片描述

相关文章:

Unity中Shader的UV扭曲效果的实现

文章目录 前言一、实现的思路1、在属性面板暴露一个 扭曲贴图的属性2、在片元结构体中,新增一个float2类型的变量,用于独立存储将用于扭曲的纹理的信息3、在顶点着色器中,根据需要使用TRANSFORM_TEX对Tilling 和 Offset 插值;以及…...

Automotive 添加一个特权APP

Automotive 添加一个特权APP platform: android-13.0.0_r32 一. 添加一个自定义空调的app为例 路径:packages/apps/Car/MyHvac app内容可以自己定义,目录结构如下: 1.1 Android.bp package {default_applicable_licenses: ["Andr…...

自定义TimeLine

自定义TimeLine 什么是TimeLineData(数据)Clip(片段)Track(轨道)Mixer(混合) 什么是TimeLine 在 Unity 中,TimeLine(时间轴)是一种用于创建和管理…...

如何使用SQL系列 之 如何在SQL中使用WHERE条件语句

引言 在结构化查询语言 (SQL)语句中,WHERE子句限制了给定操作会影响哪些行。它们通过定义特定的条件(称为搜索条件)来实现这一点,每一行都必须满足这些条件才能受到操作的影响。 本指南将介绍WHERE子句中使用的通用语法。它还将概述如何在单个WHERE子句…...

leetcode:1941. 检查是否所有字符出现次数相同(python3解法)

难度:简单 给你一个字符串 s ,如果 s 是一个 好 字符串,请你返回 true ,否则请返回 false 。 如果 s 中出现过的 所有 字符的出现次数 相同 ,那么我们称字符串 s 是 好 字符串。 示例 1: 输入:s…...

Echarts 各种点击事件监听

目录 一、鼠标事件1.1、左击1.2、双击1.3、右击1.4、右键双击1.5、中轴滚动二、时间轴2.1、时间轴监听三、拖动3.1、拖动事件一、鼠标事件 1.1、左击 chart.on(click, function(params)...

《智能网联汽车自动驾驶功能测试规程》

一、 编制背景 2018 年4 月12 日,工业和信息化部、公安部、交通运输部联合发布《智能网联汽车道路测试管理规范(试行)》(以下简称《管理规范》),对智能网联汽车道路测试申请、审核、管理以及测试主体、测试驾驶人和测试车辆要求等…...

NVIDIA CUDA Win10安装步骤

前言 windows10 版本安装 CUDA ,首先需要下载两个安装包 CUDA toolkit(toolkit就是指工具包)cuDNN 1. 安装前准备 在安装CUDA之前,需要完成以下准备工作: 确认你的显卡已经正确安装,在设备管理器中可以看…...

Elasticsearch、Kibana以及Java操作ES 的快速使用

docker 安装elastic search 、 kibana(可视化管理elastic search) docker pull elasticsearch:7.12.1 docker pull kibana:7.12.1创建docker自定义网络 docker自定义网络可以使得容器之间使用容器名网络互连,默认的网络不会有这功能。 一定…...

逐鹿人形机器人,百度、腾讯、小米卷起来

长期不温不火的人形机器人产业迎来新风口,技术显著提升、新品层出不穷、资本投资态度也逐渐好转。 8月18日,2023世界机器人大会博览会正式开放,全面展示了机器人行业的新技术、新产品和新应用。据悉,此次展会展览总面积达4.5万平…...

AndroidStudio推荐下载和配置

1、推荐下载链接 Download Android Studio & App Tools - Android Developers 2、gradle配置案例 // Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript {repositories {maven { url https://maven.aliyun.…...

mysql异常占用资源排查

通过执行日志与连接信息排查 查看是否开启日志记录 mysql> show global variables like %general%; --------------------------------- | Variable_name | Value | --------------------------------- | general_log | OFF | | general_log_file…...

requests 库:发送 form-data 格式的 http 请求 (python)

安装 requests-toolbelt !pip install requests-toolbeltdemo from requests_toolbelt import MultipartEncoder import requestsm MultipartEncoder(fields{query: """第一,向量化匹配是有能力上限的。搜索引擎实现语义搜索已经是好几年的事情了…...

行测图形推理规律(一)元素组成

题库:粉笔网题库 (fenbi.com) 不知道和测评的行测题库是不是一样的,但是总结的规律应该是一样的。 规律并不唯一,题库的答案也只是参考答案,切勿当杠精,你觉得你的规律更合适就别管。本人所归纳的规律仅代表本人想法…...

【python爬虫】13.吃什么不会胖(爬虫实操练习)

文章目录 前言项目实操明确目标分析过程代码实现 前言 吃什么不会胖——这是我前段时间在健身时比较关注的话题。 相信很多人,哪怕不健身,也会和我一样注重饮食的健康,在乎自己每天摄入的食物热量。 不过,生活中应该很少有人会…...

深入理解联邦学习——联邦学习与现有理论的区别与联系

分类目录:《深入理解联邦学习》总目录 作为一种全新的技术,联邦学习在借鉴一些成熟技术的同时也具备了一定的独创性。下面我们就从多个角度来阐释联邦学习和其他相关概念之间的关系。 联邦学习与差分隐私理论的区别 联邦学习的特点使其可以被用来保护用…...

基于Python+DenseNet121算法模型实现一个图像分类识别系统案例

目录 介绍在TensorFlow中的应用实战案例最后 一、介绍 DenseNet(Densely Connected Convolutional Networks)是一种卷积神经网络(CNN)架构,2017年由Gao Huang等人提出。该网络的核心思想是密集连接,即每…...

旋转图片两种方法

这两种方法在旋转图像时,可能会产生一些不同的效果: rotate_image_new()旋转后的图像完全包含旋转前的内容,并且填充边界尽可能小 rotate_image() 保持原始图像的大小,并根据填充选项决定是否填充边界为白色。如果 if_fill_whit…...

10 mysql tiny/small/medium/big int 的数据存储

前言 这里主要是 由于之前的一个 datetime 存储的时间 导致的问题的衍生出来的探究 探究的主要内容为 int 类类型的存储, 浮点类类型的存储, char 类类型的存储, blob 类类型的存储, enum/json/set/bit 类类型的存储 本文主要 的相关内容是 int 类类型的相关数据的存储 …...

UI自动化测试之Jenkins配置

团队下半年的目标之一是实现自动化测试,这里要吐槽一下,之前开发的测试平台了,最初的目的是用来做接口自动化测试和性能测试,但由于各种原因,接口自动化测试那部分功能整个废弃掉了,其中和易用性有很大关系…...

vLLM-v0.17.1效果展示:多LoRA热切换,支持10+垂类模型动态加载

vLLM-v0.17.1效果展示:多LoRA热切换,支持10垂类模型动态加载 1. vLLM框架核心能力 vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库,最初由加州大学伯克利分校的天空计算实验室开发,现已发展成为社区驱动的开源项目。…...

二次元助手:OpenClaw+Phi-3-mini-128k-instruct自动整理动漫资源库

二次元助手:OpenClawPhi-3-mini-128k-instruct自动整理动漫资源库 1. 为什么需要自动化整理动漫资源库 作为一个资深动漫爱好者,我的下载文件夹常年处于混沌状态。新番、老番、剧场版混杂在一起,文件名千奇百怪——有的带字幕组前缀&#x…...

工具使用指南:提升效率的关键方法与实践

在信息爆炸的今天,我们接触到的数字工具数量呈指数级增长。从文档处理到图像编辑,从项目管理到团队协作,各类工具层出不穷。然而,一个普遍现象是:许多人工具越装越多,效率却并未显著提升。问题的根源往往不…...

彻底搞懂ScheduledThreadPoolExecutor

在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...

Unity Package Manager从入门到精通:除了导入Asset Store,你还能这样玩转自定义插件

Unity Package Manager高级指南:解锁自定义插件开发的工程化实践 在Unity开发社区中,Package Manager常被简化为一个"资源商店下载工具",这大大低估了它的真正价值。实际上,UPM(Unity Package Manager&#…...

OBS多平台同步推流插件深度解析:技术架构与实战应用

OBS多平台同步推流插件深度解析:技术架构与实战应用 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 在当今内容创作者和虚拟主播日益增长的需求下,多平台直播已成…...

javaweb高校两校区通勤校车预约系统的设计与实现 论文

目录同行可拿货,招校园代理 ,本人源头供货商功能需求分析用户管理校车班次管理预约功能核销与签到数据统计通知系统技术实现要点前端设计后端逻辑数据库设计安全机制项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招…...

企业AI应用开发:从零构建企业级AI智能体的全流程指南

一文讲透智能体开发的核心要素,让AI真正融入业务系统随着大模型技术的成熟,AI智能体正从概念走向企业核心业务。对于信息中心和软件开发团队而言,如何低成本、高效率地将AI能力嵌入业务流程,已成为技术选型的核心考量。本文将系统…...

**发散创新:基于Go语言的事件驱动式应急响应架构设计与实践**在现代云原生和微服务架构中,**快速、精准的事件

发散创新:基于Go语言的事件驱动式应急响应架构设计与实践 在现代云原生和微服务架构中,快速、精准的事件响应能力已成为系统稳定性的核心保障。传统的轮询式监控和静态规则告警已难以应对复杂多变的生产环境。本文将带你深入探索一种以 Go语言为核心 的轻…...

零基础友好:跟着快马生成的交互式脚本轻松完成openclaw安装入门

作为一个刚接触编程的新手,第一次安装openclaw这样的工具时,面对复杂的命令行操作和可能出现的各种错误,确实容易感到手足无措。最近我在InsCode(快马)平台上发现了一个特别适合新手的交互式安装教程项目,它把整个安装过程变成了一…...