unity中实现流光效果——世界空间下
创始人
2024-11-16 03:33:50
0
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 100         Pass         {             CGPROGRAM             #pragma vertex vert             #pragma fragment frag             #include "UnityCG.cginc"              #pragma shader_feature _ ENABLE_FLOWLIGHT              struct 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;                      // 构建流光Mask                     float 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;                 #else                     float3 final_col = baseColor;                 #endif                  return float4(final_col, 1.0);             }             ENDCG         }     }

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

相关内容

热门资讯

推荐十款(aa扑克)的辅助工具... 推荐十款(aa扑克)的辅助工具(透明挂软件)透视(有挂策略)详备教程(哔哩哔哩);aa扑克原来是有辅...
9分钟了解(AA PoKer)... 9分钟了解(AA PoKer)透视辅助可测试真的假的(透明挂)辅助挂(有挂启发)全面教程(哔哩哔哩)...
重大科普(aa poker)软... 重大科普(aa poker)软件发牌原理(透明挂软件)辅助挂(有挂引导)精确教程(哔哩哔哩)这是由厦...
最新研发(WePoKe)辅助工... 最新研发(WePoKe)辅助工具(辅助)辅助挂(有挂启发)细致教程(哔哩哔哩);WePoKe是一款益...
每日必看教程(WEPOKE)辅... 每日必看教程(WEPOKE)辅助透视(软件透明挂)辅助挂(有挂点拨)具体教程(哔哩哔哩),亲,有的,...
新2024版推荐(【wepok... 新2024版推荐(【wepoke】)智能ai(透明挂)透视(有挂指示)深入教程(哔哩哔哩),亲,有的...
擅于辩论的人可以将黑的说成白的... 擅于辩论的人有能力通过逻辑、证据和修辞等手段,巧妙地引导听众接受与事实相反的观点。然而...
3千米以上音视频键鼠延长解决方... KVM光纤延长器​​​​​​​是什么?        KVM光纤延长器是一种使用光纤来...
Scala学习笔记一 文章目录Scala包包的定义:Scala 关键字| @ | |变量定义声明变量...
每日必看教程(WePoKe)透... 1、让任何用户在无需AI插件第三方神器的情况下就能够完成在WePoKe下的调试。2、直接的在WePo...