Unity制作护盾——1、闪电护盾

Unity引擎制作闪电护盾效果

  大家好,我是阿赵。
  这期做一个闪电护盾的效果。

一、效果说明

在这里插入图片描述
在这里插入图片描述

可以改变闪电的颜色
在这里插入图片描述

可以改变范围
在这里插入图片描述
在这里插入图片描述

改变贴图的平铺次数,也可以做出各种不同感觉的护盾。

二、原理

这个效果看着很复杂,其实只是用了一张Noise贴图
在这里插入图片描述

在这里插入图片描述

把贴图贴在一个球上,得到这样的效果
在这里插入图片描述

常规操作,先乘再power,得到一个可以控制亮度和范围的效果。

  这里我想这个效果是流动起来的。所以可以选择用UV动画来做。我这里做一个稍微复杂一点的UV动画,叫做Flow效果:

float3 Flow(sampler2D tex, float2 uv, float2 dir, float2 strength, float speed)
{
	float2 dirx = dir + 0.5f;
	float timeSpeed = _Time.y*speed;
	float2 uv1 = uv + (dirx*strength*frac(timeSpeed));
	float2 uv2 = uv + (dirx*strength*(frac(timeSpeed + 0.5f)));
	float3 result = lerp(UnpackNormal(tex2D(tex, uv1)), UnpackNormal(tex2D(tex, uv2)), (abs((frac(timeSpeed) - 0.5)) / 0.5));
	return result;
}

通过传入贴图、uv、流动方向、流动强度和速度,得到一个流动的动画效果。
在这里插入图片描述

  对上面的效果继续做power和取反(被1减)的操作,得到这样的一个效果,我们拿到的是刚才那个噪声图的边缘。
在这里插入图片描述

  接下来我们再做一次Flow,但这次传入的dir是不同的。然后把两次的结果相乘,得到这么一个随机变化的遮罩。
在这里插入图片描述

给rgb乘以一个颜色,就得到了这个护盾的基础颜色了
在这里插入图片描述

  然后把遮罩给到alpha通道,就看到了这样的效果了。
  如果想闪电有一定的闪烁效果,那么简单的用Time作为x,0作为y,组成UV采样一下给噪声图。就能得到一个闪烁的过程,这个值乘以原来的Alpah通道。

三、代码

Shader "azhao/azhaoShield1"
{
    Properties
    {
		_Size("Size", Range(0 , 10)) = 1
		_colorPow("colorPow", Float) = 1
		_colorMul("colorMul", Float) = 1
		_mainColor("mainColor", Color) = (1,1,1,0)
		_Noise1Tex("Noise1Tex", 2D) = "white" {}
		_dir1("dir1", Vector) = (0,0,0,0)
		_dir2("dir2", Vector) = (1,1,0,0)
		_alphaSpeed("alphaSpeed", Float) = 1
		_colorAdd("colorAdd", Float) = 1
		_flowSpeed("flowSpeed", Float) = 1
		_flowStrength("flowStrength", Vector) = (1,1,0,0)
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
		Blend SrcAlpha OneMinusSrcAlpha, SrcAlpha OneMinusSrcAlpha
		ZWrite Off
        LOD 100

        Pass
        {
            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;
            };

			uniform float4 _mainColor;
			uniform sampler2D _Noise1Tex;
			uniform float4 _Noise1Tex_ST;
			uniform float _Size;
			uniform float3 _dir1;
			uniform float2 _flowStrength;
			uniform float _flowSpeed;
			uniform float _colorMul;
			uniform float _colorPow;
			uniform float3 _dir2;
			uniform float _colorAdd;
			uniform float _alphaSpeed;

			float3 Flow(sampler2D tex, float2 uv, float2 dir, float2 strength, float speed)
			{
				float2 dirx = dir + 0.5f;
				float timeSpeed = _Time.y*speed;
				float2 uv1 = uv + (dirx*strength*frac(timeSpeed));
				float2 uv2 = uv + (dirx*strength*(frac(timeSpeed + 0.5f)));
				float3 result = lerp(UnpackNormal(tex2D(tex, uv1)), UnpackNormal(tex2D(tex, uv2)), (abs((frac(timeSpeed) - 0.5)) / 0.5));
				return result;
			}

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _Noise1Tex)/+_Size;
                return o;
            }

            half4 frag (v2f i) : SV_Target
            {
				float3 col1 = Flow(_Noise1Tex,i.uv,_dir1,_flowStrength,_flowSpeed);
				float3 col2 = Flow(_Noise1Tex, i.uv, _dir2, _flowStrength, _flowSpeed);
				float val1 = 1.0 - saturate( pow(col1.r*_colorMul, _colorPow));
				float val2 = 1.0 - saturate(pow(col2.r*_colorMul, _colorPow));
				float4 noiseCol = tex2D(_Noise1Tex, float2(frac(_Time.y*_alphaSpeed), 0));
				float alpha = val1*val2*noiseCol.r*noiseCol.r;
				float3 rgb = _mainColor.rgb*val1*val2*_colorAdd;
                return half4(rgb,alpha);
            }
            ENDCG
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用 docker 创建 jmeter 容器,能做性能测试?

我们都知道,jmeter 可以做接口测试,也可以用于性能测试,现在企业中性能测试也大多使用 jmeter。docker 是最近这些年流行起来的容器部署工具,可以创建一个容器,然后把项目放到容器中,就可以构建出一个独立的…

杂记 | 记录一次使用Docker安装gitlab-ce的过程(含配置交换内存)

文章目录 01 准备工作02 (可选)配置交换内存03 编辑docker-compose.yml04 启动并修改配置05 nginx反向代理06 (可选)修改配置文件07 访问并登录 01 准备工作 最近想自建一个gitlab服务来保存自己的项目,于是找到gitla…

RabbitMQ的安装

RabbitMQ的安装 1、Windows环境下的RabbitMQ安装步骤 使用的版本:otp_win64_23.2 rabbitmq-server-3.8.16 版本说明:https://www.rabbitmq.com/which-erlang.html#compatibility-matrix 1.1 下载并安装erlang RabbitMQ 服务端代码是使用并发式语言…

mybatis-plus 用法

目录 1 快速开始 1.1 依赖准备 1.2 配置准备 1.3 启动服务 2 使用 2.1 实体类注解 2.2 CRUD 2.3 分页 2.4 逻辑删除配置 2.5 通用枚举配置 2.6 自动填充 2.7 多数据源 3 测试 本文主要介绍 mybatis-plus 这款插件,针对 springboot 用户。包括引入&…

【测试】软件测试工具JMeter简单用法

简明扼要,点到为止。 1. JMeter介绍 JMeter的全称是Apache JMeter,是一款用于软件测试的工具软件,其是开源免费的,由Apache基金会运营。 官网:Apache JMeter - Apache JMeter™ 2. 下载安装及运行 2.1 安装 Java8…

喀麦隆ECTN(BESC)申请流程

据CAMEROON喀麦隆法令,所有发货至喀麦隆的货物都必须申请ECTN(BESC)电子货物跟踪单。如果没有申请,将被视为触犯喀麦隆的条例,并在目的港受到严厉惩罚。ECTN是英语ELECTRONIC CARGO TRACKING NOTE的简称;BESC是法语BORDEREAU ELEC…

Red Hat 安装MySQL 8.0与 Navicat

目录 Red Hat 安装 MySQL 8.0 1、更新软件包列表 2、安装MySQL服务器和客户端 3、启动MySQL服务 4、确保MySQL服务器正在运行 5、root 用户的密码 6、登录MySQL,输入mysql密码 7、MySQL默认位置 Red Hat 安装 Navicat 1、下载 Navicat 2、执行命令 Red H…

Qt项目---简单的计算器

在这篇技术博客中,我们将介绍如何使用Qt框架实现一个简单的计算器应用。我们将使用C编程语言和Qt的图形用户界面库来开发这个应用,并展示如何实现基本的算术操作。 项目设置 首先,我们需要在Qt Creator中创建一个新的Qt Widgets应用程序项目…

全志F1C200S嵌入式驱动开发(soc系统集成)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 任何一个嵌入式设备都是由很多的子系统组成的。这里面有硬件、有软件,还可能有机械,并不一定就是大家看到的消费电子那样,即一个soc构成了所有的系统。现实情况是,要构建一个系…

网络:从socket编程的角度说明UDP和TCP的关系,http和tcp的区别

尝试从编程的角度解释各种网络协议。 UDP和TCP的关系 从Python的socket编程角度出发,UDP(User Datagram Protocol)和TCP(Transmission Control Protocol)是两种不同的传输协议。 TCP是一种面向连接的协议&#xff0c…

SpringBoot3---核心特性---2、Web开发III(模板引擎、国际化、错误处理)

星光下的赶路人star的个人主页 夏天就是吹拂着不可预期的风 文章目录 1、模板引擎1.1 Thymeleaf1.2 基础语法1.3 属性设置1.4 遍历1.5 判断1.6 属性优先级1.7 行内写法1.8 变量选择1.9 模板布局1.10 devtools 2、国家化3、错误处理3.1 默认机制3.2 自定义错误响应3.3 最佳实战 …

nginx+flask+uwsgi部署遇到的坑

文章目录 1.环境:2.uwsgi_conf.ini具体配置内容3.nginx 具体配置4.具体命令(注意使用pip3命令安装)5.服务异常排查 1.环境: centos8 uWSGI 2.0.22 gmssl 3.2.2 nginx version: nginx/1.18.0 项目目录: 2.uwsgi_conf.ini具体配置内容 [uws…

cocos creator 的input.on 不生效

序: 1、执行input.on的时候发现不生效 2、一直按控制台也打印不出来console.log 3、先收藏这篇,因为到时候cocos要开发serveApi的时候,你得选一款趁手的后端开发并且,对习惯用ts写脚本的你来说,node是入门最快&#xf…

IDEA中怎么使用git下载项目到本地,通过URL克隆项目(giteegithub)

点击 新建>来自版本控制的项目 点击后会弹出这样一个窗口 通过URL拉取项目代码 打开你要下载的项目仓库 克隆>复制 gitee github也是一样的 返回IDEA 将刚刚复制的URL粘贴进去选择合适的位置点击克隆 下载完成

深挖 Threads App 帖子布局,我进一步加深了对CSS网格布局的理解

当我遇到一个新产品时,我首先想到的是他们如何实现CSS。当我遇到Meta的Threads时也不例外。我很快就探索了移动应用程序,并注意到我可以在网页上预览公共帖子。 这为我提供了一个深入挖掘的机会。我发现了一些有趣的发现,我将在本文中讨论。 …

24届近5年重庆邮电大学自动化考研院校分析

今天给大家带来的是重庆邮电大学控制考研分析 满满干货~还不快快点赞收藏 一、重庆邮电大学 学校简介 重庆邮电大学简称"重邮",坐落于直辖市-重庆市,入选国家"中西部高校基础能力建设工程”、国家“卓越工程师教育培养计划…

java的StringBuffer类和StringBuilder类

目录 StringBufferStringBuffer简介StringBuffer类的继承关系StringBuffer类的底层实现创建StringBuffer对象StringBuffer类的常用方法 StringBuilderStringBuilder简介 StringBuffer StringBuffer简介 StringBuffer对象是一个字符序列可变的字符串(String类不可变)。它和Str…

Java中Integer方法

先进行专栏介绍 本专栏是自己学Java的旅途,纯手敲的代码,自己跟着黑马课程学习的,并加入一些自己的理解,对代码和笔记 进行适当修改。希望能对大家能有所帮助,同时也是请大家对我进行监督,对我写的代码进行…

springboot快速整合Memcached缓存技术

目录 Memcached基本介绍 Memcached安装 springboot技术整合 规范化定义配置属性 Memcached基本介绍 memcached是一套分布式的快取系统,与redis相似,当初是Danga Interactive为了LiveJournal所发展的,但被许多软件(如MediaWiki&#xff…

道本科技受邀参加建筑产业互联网推动建筑产业现代化体系构建座谈会,以数字化产品为建筑行业注入新动能!

2023年7月底,道本科技作为中国建筑业协会合作伙伴,受邀参加了建筑产业互联网推动建筑产业现代化体系构建座谈会。在这次座谈会上,道本科技旗下产品“合规数”“合同智能审查”和“智合同范本库”被中国建筑(中小企业)产…