Shader每日一练(2)护盾

news2024/10/7 21:06:22
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
        }
    }
}

效果:

简化版:

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

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

相关文章

如何在 Python 中创建一个类似于 MS 计算器的 GUI 计算器

问题背景 假设我们需要创建一个类似于微软计算器的 GUI 计算器。这个计算器应该具有以下功能: 能够显示第一个输入的数字。当按下运算符时,输入框仍显示第一个数字。当按下第二个数字时,第一个数字被替换。 解决方案 为了解决这个问题&am…

el-date-picker 限制选择六个月内的日期

效果如图&#xff1a; 代码&#xff1a; <el-date-picker v-model"serchTimes" type"daterange" size"small" start-placeholder"开始时间"range-separator"~" end-placeholder"结束时间" format"yyyy /…

防火墙安全策略及用户认证实验

一、实验拓扑 二、实验要求 1、DMZ区内的服务器&#xff0c;办公区仅能在办公时间&#xff08;9&#xff1a;00-18&#xff1a;00&#xff09;内可以访问&#xff1b;生产区的设备全天可以访问 2、生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 3、办公区设…

逆向案例十一——华强北登录逆向

网址&#xff1a;aHR0cHM6Ly9wYXNzcG9ydC5ocWV3LmNvbS9sb2dpbg 登陆页面&#xff1a; 打开开发者工具会出现debugger调试&#xff1a; 直接使用一律不再此处暂停即可。点击登录&#xff0c;找到登录包。 发现有三个参数进行了加密&#xff0c;分别是Password,UserName和Devic…

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

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

Auslogics Disk Defrag Pro v11激活版下载、安装、使用教程 (磁盘碎片整理工具)

前言 Auslogics Disk Defrag Pro 是一款支持 FAT16 文件系统的磁盘碎片整理工具&#xff0c;它可以快速整理磁盘碎片&#xff0c;使磁盘空间更加整洁&#xff0c;显著提升电脑的运行速度。该软件无需任何分析阶段&#xff0c;并且速度比大多数其他碎片整理软件更快。它可以帮助…

算法力扣刷题记录 四十一【N叉树遍历】

前言 依然是遍历问题。由二叉树扩展到N叉树遍历。 记录 四十一【N叉树遍历】 一、【589. N叉树的前序遍历】 题目 给定一个 n 叉树的根节点 root &#xff0c;返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示&#xff0c;每组子节点由空值 null 分隔…

Node.js_fs模块

文件删除 文件重命名和移动&#xff08;本质都是修改路径&#xff09; 文件夹操作 创建文件夹(mkdir) 读取文件夹(readdir) &#xff08;打印出来是该文件夹下名称的数组形式&#xff09; 读取当前的文件夹(readdir) 删除文件夹 &#xff08;rmdir&#xff09; 查看资源状态…

合合信息大模型加速器亮相WAIC大会:文档解析与文本识别新突破

合合信息大模型加速器亮相WAIC大会&#xff1a;文档解析与文本识别新突破 文章目录 合合信息大模型加速器亮相WAIC大会&#xff1a;文档解析与文本识别新突破前言合合信息TextIn平台&#xff1a;智能文档处理的领军者文档解析引擎&#xff1a;百页文档秒级处理大模型的发展背景…

文件数据跨境传输这些常见问题,要怎么解决?

越来越多的企业和机构面临文件数据跨境传输的场景和需求&#xff0c;数据跨境流通的过程还是比较复杂的&#xff0c;所以在传输过程中会面临各种问题。 比如法律法规和数据保护、技术标准、网络带宽和速度、数据安全风险控制等&#xff0c;企业要如何解决这些问题呢&#xff1…

数据仓库介绍_维度表(三)

维度表概述 维度表是维度建模的基础和灵魂。前文提到&#xff0c;事实表紧紧围绕业务过程进行设计&#xff0c;而维度表则围绕业务过程所处的环境进行设计。维度表主要包含一个主键和各种维度字段&#xff0c;维度字段称为维度属性。 表设计步骤 确定维度&#xff08;表&…

UI设计工具选择指南:Sketch、XD、Figma、即时设计

在数字产品设计产业链中&#xff0c;UI设计师往往起着连接前后的作用。产品经理从一个“需求”开始&#xff0c;制定一个抽象的产品概念原型。UI设计师通过视觉呈现将抽象概念具体化&#xff0c;完成线框图交互逻辑视觉用户体验&#xff0c;最终输出高保真原型&#xff0c;并将…

2.电容(常见元器件及电路基础知识)

一.电容种类 1.固态电容 这种一般价格贵一些&#xff0c;ESR,ESL比较低,之前项目400W电源用的就是这个&#xff0c;温升能够很好的控制 2.铝电解电容 这种一般很便宜&#xff0c;ESR,ESL相对大一些&#xff0c;一般发热量比较大&#xff0c;烫手。 这种一般比上一个贵一点&am…

this.$confirm不要取消按钮以及右上角的差号

this.$confirm(保存成功! 订单号为&#xff1a;${res.data}, , {confirmButtonText: 确定,showCancelButton: false, // 不显示取消按钮showClose: false, // 不显示右上角的叉号type: success}).then(() > {}) 效果图下&#xff1a;

香港物理服务器租用优势

香港物理服务器租用因其独特的地理位置、先进的网络设施以及优质的服务&#xff0c;成为了众多企业和个人开发者青睐的选择。以下是香港物理服务器租用的主要优势&#xff1a; 稳定性与性能 香港物理服务器直接依赖其高性能硬件运行&#xff0c;不受虚拟化层的影响&#xff0c;…

24小时悬停系留照明无人机技术详解

24小时悬停系留照明无人机是一款专门设计用于提供长时间、高效能照明服务的无人机系统。该系统结合了无人机技术与先进的照明设备&#xff0c;通过系留技术实现无人机的稳定悬停&#xff0c;从而提供连续不断的照明服务。该无人机能够在各种环境条件下进行24小时不间断工作&…

对controller层进行深入学习

目录 1. controller层是干什么的&#xff1f;1.1 controller原理图1.2 controller层为什么要存在&#xff1f;1.2.1 分离关注点1.2.2 响应HTTP请求1.2.3 数据处理与转换1.2.4 错误处理与状态管理1.2.5 流程控制1.2.6 依赖注入与测试 1.3 controller层的优点1.3.1 多端支持1.3.2…

PHP 程序员是学 Swoole ?还是学 Go ?

大家好&#xff0c;我是码农先森。 面临现状 这次为什么要讨论这个话题&#xff0c;因为 Swoole 和 Go 在 PHP 程序员坊间一直都是茶语饭后的谈资&#xff0c;觉得懂 Swoole 和 Go 的就高人一等。相信有很多的 PHP 程序员&#xff0c;自打 Swoole 发布以来就从来没有使用过。…

Z-Fighting 深度冲突权威指南

Z-Fighting 是渲染管道中深度测试中出现的问题。它是由深度值的有限数值精度引起的。故障将表现为不正确的渲染&#xff0c;即屏幕上错误地显示应该被遮挡在另一个后面的对象。故障主要发生在透视投影变换中&#xff0c;但也可能发生在正交投影变换中。到目前为止&#xff0c;一…

GaussDB关键技术原理:高性能(五)

GaussDB关键技术原理&#xff1a;高性能&#xff08;四&#xff09;从USTORE存储引擎、计划缓存计划技术、数据分区与分区剪枝、列式存储和向量化引擎、SMP并行执行等五方面对高性能关键技术进行解读&#xff0c;本篇将从LLVM动态查询编译执行、SQL-BYPASS执行优化、线程池化、…