Shader每日一练(2)护盾

Shader "Custom/Shield"
{
    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) // 流动方向1
        _dir2("dir2", Vector) = (1,1,0,0) // 流动方向2
        _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 // 混合模式:源颜色的 alpha 与目标颜色的反 alpha 进行混合
        ZWrite Off // 关闭深度写入
        LOD 100 // 设置 LOD 等级

        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 变量
            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;

            // 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;
            }

            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/791577.html

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

相关文章

政安晨:【Keras机器学习示例演绎】(五十四)—— 使用神经决策森林进行分类

目录 导言 数据集 设置 准备数据 定义数据集元数据 为训练和验证创建 tf_data.Dataset 对象 创建模型输入 输入特征编码 深度神经决策树 深度神经决策森林 实验 1:训练决策树模型 实验 2:训练森林模型 政安晨的个人主页:政安晨 欢…

【机器学习】独立成分分析(ICA):解锁信号的隐秘面纱

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 独立成分分析(ICA):解锁信号的隐秘面纱引言I…

人工智能算法工程师(中级)课程3-sklearn机器学习之数据处理与代码详解

大家好,我是微学AI,今天给大家分享一下人工智能算法工程师(中级)课程3-sklearn机器学习之数据处理与代码详解。 Sklearn(Scikit-learn)是一个基于Python的开源机器学习库,它提供了简单有效的数据挖掘和数据分析工具。Sklearn包含了…

webstorm问题解决:无法识别 @

问题解决tsconfig.json 问题 本地的 vite.config.ts 已经配置 路径 但是,我用webstorm 上识别不了 解决 新增文件tsconfig.json,添加 baseUrl 和 paths 的配置,以告诉 TypeScript 和 WebStorm 如何解析路径别名 tsconfig.json {&quo…

无需构建工具,快速上手Vue2 + ElementUI

无需构建工具,快速上手Vue2 ElementUI 在前端开发的世界中,Vue.js以其轻量级和易用性赢得了开发者的青睐。而Element UI,作为一个基于Vue 2.0的桌面端组件库,提供了丰富的界面组件,使得构建美观且功能丰富的应用变得…

禁止使用存储过程

优质博文:IT-BLOG-CN 灵感来源 什么是存储过程 存储过程Stored Procedure是指为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户可通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行。 …

AndroidStudio2023.3版本avd manager模拟器无法创建

创建到最后一步的时候提示WARN - #com.android.sdklib.internal.avd.AvdManager - com.android.prefs.AndroidLocationsException: Can’t locate Android SDK installation directory for the AVD .ini file. 前提: 1.sdk路径没问题 2.安装了下图内容 那是什么原因…

Linux /etc/profile 详解

概述 Linux是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。通常每个用户默认的环境都是相同的,这个默认环境实际上就是一组环境变量的定义。用户可以对自己的运行环境进行定制,其方法就是修改相应的系统环境变量&…

原生小程序生成二维码并保存到本地

需求:我要在一个页面中生成一个二维码,并且这个二维码可以长按保存到本地或者发送给好友; 我这里是将生成的canvas二维码转换成图片,利用长按图片进行保存或转发 效果图: 第一步先下载对应的包: npm instal…

C语言笔记31 •单链表经典算法OJ题-3.反转链表•

反转链表 1.问题 给你单链表的头节点 head&#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 2.代码实现&#xff1a; //3.反转链表 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <assert.h>typedef int …

LLM——langchain 与阿里 DashScop (通义千问大模型) 和 DashVector(向量数据库) 结合使用总结

文章目录 前言预览直接调用大模型使用 prompt template格式化输出使用上下文 RAG 增强检索 自定义 langchain AgentPromptTemplate 和 ChatPromptTemplate使用少量示例创建ChatPromptTemplate 前言 langchain 是一个面向大模型开发的框架&#xff0c;其中封装了很多核心组件&a…

设计模式之外观模式(Facade)

Facade设计模式&#xff0c;也称为外观模式&#xff0c;是一种结构型设计模式&#xff0c;它主要用于为子系统中的一组接口提供一个统一的高层接口&#xff0c;从而使得子系统更加容易使用。以下是关于Facade设计模式的详细介绍&#xff1a; 一、定义 Facade模式为多个复杂的…

期权专题12:期权保证金和期权盈亏

目录 1. 期权保证金 1.1 计算逻辑 1.2 代码复现 1.3 实际案例 2. 期权盈亏 2.1 价格走势 2.2 计算公式 2.2.1 卖出期权 2.2.2 买入期权 免责声明&#xff1a;本文由作者参考相关资料&#xff0c;并结合自身实践和思考独立完成&#xff0c;对全文内容的准确性、完整性或…

【Linux】管道命令

命令执行的时候有时会输出数据&#xff0c;有的命令输出的数据太繁杂了。 那么我们怎么去筛选这些信息来得到我们所想要的格式&#xff1f; 这就牵涉到管道命令的问题了&#xff08;pipe&#xff09;&#xff0c;管道命令使用的是【|】这个界定符号。另外&#xff0c;管道命令与…

Mongodb单字段索引详解

学习mongodb&#xff0c;体会mongodb的每一个使用细节&#xff0c;欢迎阅读威赞的文章。这是威赞发布的第89篇mongodb技术文章&#xff0c;欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题&#xff0c;欢迎在文章下面点个赞&#xff0c;或者关…

概率论期末速成(知识点+例题)

考试范围 一&#xff1a; 事件关系运算性质全概率公式、贝叶斯公式古典概型 二&#xff1a; 离散分布律连续密度函数性质 -> 解决三个问题&#xff08;求待定系数、求概率、求密度函数&#xff09;分布函数 -> 解决三个问题常用分布&#xff08;最后一节课的那几个分…

Linux 调试命令记录

查看CPU信息 cat /proc/cpuinfo 显示当前电源功耗 top 命令能够清晰的展现出系统的状态&#xff0c;而且它是实时的监控&#xff0c;按 q 退出。 uptime 与 w 这两个命令只是单纯的反映出负载&#xff0c;所表示的是过去的1分钟、5分钟和15分钟内进程队列中的平均进程数量。…

【机器学习】机器学习详解-小白入门(随记)

&#x1f388;边走、边悟&#x1f388;迟早会好 机器学习&#xff08;Machine Learning&#xff09;是一种人工智能技术&#xff0c;通过让计算机系统从数据中学习并改进其性能&#xff0c;而不是通过显式编程来完成特定任务。其核心概念是利用算法和统计模型对大量数据进行分…

「解析」Cosine-Warmup 学习率策略

参考论文&#xff1a;SGDR: Stochastic Gradient Descent with Warm Restarts Bag of Tricks for Image Classification with Convolutional Neural Networks 梯度下降算法需要我们设置一个值&#xff0c;用来控制权重更新幅度&#xff0c;我们将其称之为学习率。它是控制模型学…

统信UOS桌面操作系统上删除系统升级后GRUB中的回滚条目与备份

原文链接&#xff1a;统信UOS删除升级后GRUB中的回滚条目与备份 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于在统信UOS桌面操作系统上删除系统升级后GRUB中的回滚条目与备份的文章。在进行系统升级后&#xff0c;GRUB引导菜单中可能会出现多个回滚条目和备份…