欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > unity中实现流光效果——世界空间下

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

2024/10/24 12:23:14 来源:https://blog.csdn.net/l17768346260/article/details/140855858  浏览:    关键词: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模型,流光可以沿着一个方向流动

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com