如何创建一个螺旋亮度梯度

2021-02-03 12:44

我被困在创建一个如下所示的亮度梯度(值从内圈开始是连续的)。什么公式能产生这样的亮度梯度?所以当时间加在上面时,它会以螺旋的形式从内圈慢慢变亮?尝试了

解答动态

  • 在我看来你想要的是这个:
    shaderquot;{Properties{u Turns(quot;,float)=3}子影{Tags{RenderTypequot;Opaquequot;UnityCG.cginc公司;结构appdata{float4顶点:位置;float2 uv:TEXCOORD0;};struct v2f{float2 uv:TEXCOORD0;float4 vertex:SV\u POSITION;};float\u Turns;v2f vert(appdata v){v2f o;o.vertex=UnityObjectToClipPos(v.vertex);//将(0,0)放置在坐标空间/四边形的中心//并缩放极值以适应n圈螺旋。o、 uv=(v.uv-0.5f)*2.0f*\u匝数;return o;}fixed4 frag(v2f i):SV\u Target{//转换为极坐标,角度标准化为每匝1。浮动半径=长度(i.uv);浮动角度=atan2(i.uv.y,i.uv.x)/(2.0*3.141592653589);//添加达到此半径所需的整圈数。angle+=floor(radius-angle);//形成一个从明亮的内部到黑暗的外部的渐变,//随着时间的推移,渐变会逐渐变大以填充螺旋。return 4.0f*(frac(3.0f*_Time.x)*(_Turns+1.0f)-angle-1.0f);}ENDCG}}}} 上面的版本很简单,但有点丑陋。亮度随着角度线性上升,这意味着你会得到一个粗糙的马赫带,它撞到白色-看起来像一个锐角,而不是一个平滑的融合。它也以一个恒定的角速率移动,这意味着它在像素距离上移动得更快,因为我们在半径上走得更远,并且渐变渐变变长。
    如果你需要的话,对代码进行一些调整可以使其平滑首选:
    4固定框架(v2f i):SV_目标{浮动半径=长度(i.uv);浮动角度=atan2(i.uv.y,i、 uv.x)/(2.0*3.141592653589);角度+=地板(半径-角度)+1.0f;角度=角度*角度;浮动t=分形(3.0f*\u时间.x);浮动梯度=饱和(1.0f-(0.25f+0.5f*t)*(t*(\u转弯*\u转弯+1.0f)-角度-1.0f));梯度*=梯度;返回1.0f-梯度*梯度;} 此版本在螺旋的匝数之间仍然有一个尖锐的锯齿边,但是如果您的应用程序需要,也可以对其进行平滑处理。

    • End

    免责声明:

    本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。