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

unity中实现流光效果——世界空间下

Properties{_MainTex ("Texture", 2D) = "white" {}_FlowColor ("Flow Color", Color) = (1, 1, 1, 1) // 流光颜色_FlowFrequency ("Flow Frequency", Float) = 1.0 // 流光频率_FlowSpeed ("Flow Speed", Float) = 1.0 // 流光速度_FlowAmplitude ("Flow Amplitude", Float) = 0.5 // 流光振幅_FlowWidth ("Flow Width", Float) = 0.1 // 流光宽度_FlowRotationAngle ("Flow Rotation Angle", Float) = 90.0 // 流光旋转角度,以度为单位_FlowPhase ("Flow Phase", Float) = 0.0 // 流光相位}SubShader{Tags {"RenderType" = "Opaque""Queue" = "Geometry+10"}LOD 100Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#pragma shader_feature _ ENABLE_FLOWLIGHTstruct appdata{float4 vertex : POSITION;float2 texcoord : TEXCOORD0;float3 normal : NORMAL;};struct v2f{float4 pos : SV_POSITION;float2 uv : TEXCOORD0;float3 pos_world : TEXCOORD1;float3 pivot_world : TEXCOORD2;};sampler2D _MainTex;float4 _MainTex_ST;float4 _FlowColor;float _FlowFrequency;float _FlowSpeed;float _FlowAmplitude;float _FlowWidth;float _FlowRotationAngle;float _FlowPhase;v2f vert (appdata v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);float3 pos_world = mul(unity_ObjectToWorld, v.vertex).xyz;o.pos_world = pos_world;o.pivot_world = mul(unity_ObjectToWorld, float4(0.0, 0.0, 0.0, 1.0)).xyz;o.uv = v.texcoord;return o;}fixed4 frag (v2f i) : SV_Target{half3 baseColor = tex2D(_MainTex, i.uv).rgb;#ifdef ENABLE_FLOWLIGHT// 计算相对位置half2 uv_flow = (i.pos_world.xy - i.pivot_world.xy);// 将度数转换为弧度float rad = radians(_FlowRotationAngle);// 计算旋转矩阵float cosTheta = cos(rad);float sinTheta = sin(rad);float2x2 rotationMatrix = float2x2(cosTheta, -sinTheta, sinTheta, cosTheta);// 应用旋转矩阵到UV坐标uv_flow = mul(rotationMatrix, uv_flow);// 计算时间因子,包括相位调整float timeFactor = _Time.y * _FlowSpeed +_FlowPhase;// 计算流光效果float wave = sin(_FlowFrequency * uv_flow.x + timeFactor) * _FlowAmplitude;// 构建流光Maskfloat flowMask = smoothstep(0.5 - _FlowWidth, 0.5, 0.5 + wave) - smoothstep(0.5, 0.5 + _FlowWidth, 0.5 + wave);// 叠加流光颜色float3 final_col = baseColor + flowMask * _FlowColor.rgb;#elsefloat3 final_col = baseColor;#endifreturn float4(final_col, 1.0);}ENDCG}}

UV这样算,可以保证3D模型,流光可以沿着一个方向流动

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • python学习之旅(基础篇看这篇足够了!!!)
  • 文件解析漏洞
  • JVM—垃圾收集算法和HotSpot算法实现细节
  • Android Gradle开发与应用(一):Gradle基础
  • Mybatis面试
  • [BJDCTF2020]Easy MD51
  • SQL时间函数转换(持续更新中)
  • [图解]掉杠·above...duty -《分析模式》漫谈20
  • 冲击性信号的频域特征
  • python 绘制离散曲线计算包络谱
  • 二级Java真题乱序版第十一套(含真题解析)
  • 黑马Java零基础视频教程精华部分_10_面向对象进阶(2)
  • 位运算(更新中)
  • 本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——2Yolo使用之ONNX模型准备
  • PE安装win11原版系统“无法创建新的分区,也找不到现有的分区”和“windows无法对计算机进行启动到下一个安装阶段”的解决办法
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • canvas 高仿 Apple Watch 表盘
  • Computed property XXX was assigned to but it has no setter
  • EOS是什么
  • extjs4学习之配置
  • If…else
  • Java深入 - 深入理解Java集合
  • Nacos系列:Nacos的Java SDK使用
  • Objective-C 中关联引用的概念
  • Service Worker
  • Web标准制定过程
  • Web设计流程优化:网页效果图设计新思路
  • 设计模式 开闭原则
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 问题之ssh中Host key verification failed的解决
  • 我有几个粽子,和一个故事
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • Nginx实现动静分离
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • ​Redis 实现计数器和限速器的
  • !!java web学习笔记(一到五)
  • # centos7下FFmpeg环境部署记录
  • (2)空速传感器
  • (26)4.7 字符函数和字符串函数
  • (C++17) std算法之执行策略 execution
  • (补)B+树一些思想
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (三)c52学习之旅-点亮LED灯
  • (转)linux下的时间函数使用
  • (转载)CentOS查看系统信息|CentOS查看命令
  • ***通过什么方式***网吧
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .ai域名是什么后缀?
  • .md即markdown文件的基本常用编写语法
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .net core 6 集成和使用 mongodb
  • .NET MVC之AOP
  • .Net Winform开发笔记(一)
  • .NET 常见的偏门问题
  • .NET 服务 ServiceController