当前位置:   article > 正文

Shader——3D流光效果_流光 shader

流光 shader

一:流动光效效果

  1. Shader "Custom/Flow"
  2. {
  3. Properties
  4. {
  5. _MainTex ("Texture", 2D) = "white" {}
  6. _WaveSpeed("贴图移速",float)=3
  7. }
  8. SubShader
  9. {
  10. Blend One ONE
  11. CULL OFF
  12. Tags{"Queue"="Transparent"}
  13. Pass
  14. {
  15. CGPROGRAM
  16. #pragma vertex vert
  17. #pragma fragment frag
  18. #include "UnityCG.cginc"
  19. struct appdata
  20. {
  21. float4 vertex : POSITION;
  22. float2 uv : TEXCOORD0;
  23. };
  24. struct v2f
  25. {
  26. float2 uv : TEXCOORD0;
  27. float4 vertex : SV_POSITION;
  28. };
  29. //下面是顶点着色器,有四个可控量,控制振幅、波长、频率、偏移
  30. float _Frequency;
  31. float _Attruibte;
  32. float _K2;
  33. float _B2;
  34. v2f vert (appdata v)
  35. {
  36. v2f o;
  37. o.vertex = UnityObjectToClipPos(v.vertex);
  38. o.uv = v.uv;
  39. return o;
  40. }
  41. //下面是片段着色器 控制像素的移动
  42. sampler2D _MainTex;
  43. float _WaveSpeed;
  44. fixed4 frag (v2f i) : SV_Target
  45. {
  46. float2 tmpUV=i.uv;
  47. tmpUV.y+= _WaveSpeed*_Time.y;
  48. //tmpUV.x+=_WaveSpeed*_Time.x;
  49. fixed4 col = tex2D(_MainTex,tmpUV);
  50. return col;
  51. }
  52. ENDCG
  53. }
  54. }
  55. }

二:旋转光效效果

  1. Shader "Custom/Glow"
  2. {
  3. Properties
  4. {
  5. _MainTex ("Texture", 2D) = "white" {}
  6. _Speed("旋转速度",Float)=1
  7. }
  8. SubShader
  9. {
  10. cull off
  11. Blend SrcAlpha One
  12. Tags{"Queue"="Geometry+2"}
  13. Pass
  14. {
  15. CGPROGRAM
  16. #pragma vertex vert
  17. #pragma fragment frag
  18. #include "UnityCG.cginc"
  19. struct appdata
  20. {
  21. float4 vertex : POSITION;
  22. float2 uv : TEXCOORD0;
  23. };
  24. struct v2f
  25. {
  26. float2 uv : TEXCOORD0;
  27. float4 vertex : SV_POSITION;
  28. };
  29. v2f vert (appdata v)
  30. {
  31. v2f o;
  32. o.vertex = UnityObjectToClipPos(v.vertex);
  33. o.uv = v.uv;
  34. return o;
  35. }
  36. //像素的矩阵旋转
  37. //思路:
  38. //1.先将旋转中心设为(0.5,0.5) 默认中心为(0,0)
  39. //2.套用旋转公式
  40. //3.旋转完毕,中心回到(0,0)
  41. sampler2D _MainTex;
  42. float _Speed;
  43. fixed4 frag (v2f i) : SV_Target
  44. {
  45. float2 tmpUV =i.uv;
  46. tmpUV -=float2(0.5,0.5); //变换旋转中心
  47. float2 angle =_Time*_Speed; //角度随时间变化而变化
  48. float2 result =float2(0,0); //创建一个容器
  49. result.x =tmpUV.x * cos(angle) -sin(angle)*tmpUV.y; //套公式
  50. result.y =tmpUV.x * sin(angle) +cos(angle)*tmpUV.y; //套公式
  51. tmpUV+=float2(0.5,0.5); //旋转中心回归
  52. fixed4 col = tex2D(_MainTex, result);
  53. // just invert the colors
  54. //col = 1 - col;
  55. return col;
  56. }
  57. ENDCG
  58. }
  59. }
  60. }
  61. // 关于矩阵旋转的公式: X: 1 0 0 0 (A为随时间变化而变化的角度,下同)
  62. // 0 cosA -sinA 0
  63. // 0 sinA cosA 0
  64. // 0 0 0 1
  65. // Y: cosA 0 sinA 0
  66. // 0 1 0 0
  67. // -sinA 0 cosA 0
  68. // 0 0 0 1
  69. // Z: cosA -sinA 0 0
  70. // sinA cosA 0 0
  71. // 0 0 1 0
  72. // 0 0 0 1

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/109515
推荐阅读
相关标签
  

闽ICP备14008679号