当前位置: 首页 > 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模型,流光可以沿着一个方向流动

http://www.lryc.cn/news/414297.html

相关文章:

  • 项目经验分享:用4G路由器CPE接海康NVR采用国标GB28181协议TCP被动取流一段时间后设备就掉线了
  • 【RabbitMQ】RabbitMQ不公平分发_预取值
  • 最新AI模型使用指南和模型
  • 数据结构之八大基本排序方法
  • 《Milvus Cloud向量数据库指南》——什么是高可用:深入理解数据库系统中的高可用性架构
  • C++ | Leetcode C++题解之第319题灯泡开关
  • C# 使用 NLog 输出日志到文件夹
  • node.js使用NodeMachineID 生成唯一UUID和注意事项
  • AI大模型在数据治理中的应用
  • 【初学人工智能原理】【12】循环:序列依赖问题
  • 【QT】无法打开QT的ui文件,出现闪退情况
  • 三、Spring-WebFlux实战案例-流式
  • html+css 实现hover双层按钮
  • SPIFFS与LittleFS的对gz文件格式的区别
  • STM32L051K8U6-开发资料
  • Markdown语法学习
  • [最短路Floyd],启动!!!
  • 7月29(信息差)
  • ubuntu中禁止使用鼠标拖动来移动文件
  • 【密码学】椭圆曲线密码体制(ECC)
  • 第25集《大佛顶首楞严经》
  • python 读写文件之 open 和 with open() 详细解析
  • 操作系统:内存----知识点
  • pfx如何配置到nginx中
  • 详细测评下搬瓦工香港CN2 GIA VPS
  • Java中的五种线程池类型
  • FFmpeg Windows安装教程
  • ‘#‘ is not followed by a macro parameter 关于宏定义的错误
  • 内网穿透--meterpreter端口转发实验
  • Python 数据类:减少样板并提高可读性