Unity3D Shader 2D扭曲

Unity3D Shader 2D扭曲_第1张图片
效果图
fixed4 frag (v2f i) : SV_Target
{
    float2 uv = i.uv;

    //uv 扭曲代码 
    if (_RotScal > 0)
    {
        //计算距离
        float2 dt = uv - center;
        float len = sqrt(dot(dt, dt));

        //根据距离 计算出旋转角
        float theta = -len * _RotScal;

        //旋转矩阵
        float2x2 rot =
        {
            cos(theta), sin(theta),
            -sin(theta) ,cos(theta)
        };
        dt = mul(rot, dt);
        uv = dt + center;
    }


    
    fixed4 col = tex2D(_MainTex, uv);
    return col;
}

原理:通过UV偏移,实现扭曲,距离中心越远,扭曲角度越大
备注1:_RotScal ,扭曲缩放

你可能感兴趣的:(Unity3D Shader 2D扭曲)