修改後呈現的效果大概是這樣
另外一種方式
當然原本的旋轉也有
計算的部分就不多說了,可以參考連結裡面的說明,基本上就是使用半徑取對數(log),因為使用半徑的對數,所以距離圓心越遠(radius越大),所得的值會越大,再乘上角度就可以造成離圓心越遠偏移的角度越大,就可以形成螺旋的效果。
float amod = (angle*_Density*0.25+30.0*_Rotate-(360*alp)*log(radius)) - 30*floor((angle*_Density*0.25+30.0*_Rotate-(360*alp)*log(radius))/30); if(amod-_Cut+(_Cut*_Amount) < 0) { color = lerp (_Color2, _Color, clamp(_Amount,0.0,1.0)); }
完整Shader Code
Shader "Custom/Fading" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _Color ("Color", Color) = (1,1,1,1) _Color2 ("Color2", Color) = (1,1,1,1) _Density ("Density", Float) = 5 _Amount ("Amount", Range (0,1)) = 0 _Curve ("Curve", Range (0,1)) = 0 _Rotate ("Rotate", Range (0,1)) = 0 _Cut ("Cut", Range (0,30)) = 10 } SubShader { Pass { Cull Off Lighting Off ZWrite Off Blend SrcAlpha OneMinusSrcAlpha CGPROGRAM #pragma vertex vert #pragma fragment frag uniform sampler2D _MainTex; uniform float4 _Color; uniform float4 _Color2; uniform float _Density; uniform float _Amount; uniform float _Curve; uniform float _Rotate; uniform float _Cut; struct vertexInput { float4 vertex : POSITION; float4 texcoord : TEXCOORD0; }; struct vertexOutput { float4 pos : SV_POSITION; float2 uv : TEXCOORD0; float4 screenPos : TEXCOORD5; }; vertexOutput vert(vertexInput input) { vertexOutput output; output.uv = input.texcoord; output.pos = mul(UNITY_MATRIX_MVP, input.vertex); output.screenPos = output.pos * 0.5 + 0.5; return output; } half4 frag(vertexOutput input) : COLOR { float2 position = input.screenPos*2-1; float angle = 0.0; float radius = length(position); if (position.x != 0.0 && position.y != 0.0){ angle = degrees(atan(position.y/position.x)) ; } float alp = 1-_Curve*2; float4 color = tex2D(_MainTex, input.uv); if(radius > _Amount*2) { float amod = (angle*_Density*0.25+30.0*_Rotate-(360*alp)*log(radius)) - 30*floor((angle*_Density*0.25+30.0*_Rotate-(360*alp)*log(radius))/30); if(amod-_Cut+(_Cut*_Amount) < 0) { color = lerp (_Color2, _Color, clamp(_Amount,0.0,1.0)); } } return color; } ENDCG } } Fallback "Diffuse" }
如果有任何想法歡迎提出。
No comments:
Post a Comment