Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Shader "morvaly/RoundedSquare"
- {
- Properties {
- _scaleX ("scaleX", Float ) = 0
- _scaleY ("scaleY", Float ) = 0
- _Color ("Color", Color) = (0.5,0.5,0.5,1)
- _rounded ("rounded", Range(0,5) ) = 0
- }
- SubShader
- {
- Tags {
- "IgnoreProjector"="True"
- "Queue"="Transparent"
- "RenderType"="Transparent"
- }
- Pass
- {
- Blend SrcAlpha OneMinusSrcAlpha
- ZWrite Off
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment frag
- #include "UnityCG.cginc"
- uniform float _rounded;
- uniform float _scaleX;
- uniform float _scaleY;
- uniform float4 _Color;
- struct appdata
- {
- float4 vertex : POSITION;
- float2 uv : TEXCOORD0;
- };
- struct v2f
- {
- float2 uv : TEXCOORD0;
- float4 vertex : SV_POSITION;
- };
- float DoRoundSquare( float2 UV , float val , float scaleX , float scaleY ){
- UV = UV - float2(0.5,0.5);
- UV *= 2.0;
- UV.x *= scaleX;
- UV.y *= scaleY;
- float dist = val;
- float2 f1 = float2(-scaleX+dist,scaleY-dist);
- float2 f2 = float2(-scaleX+dist,-scaleY+dist);
- float2 f3 = float2(scaleX-dist,-scaleY+dist);
- float2 f4 = float2(scaleX-dist,scaleY-dist);
- if(distance(UV,f1)<dist){
- return 1.0;
- }
- if(distance(UV,f2)<dist){
- return 1.0;
- }
- if(distance(UV,f3)<dist){
- return 1.0;
- }
- if(distance(UV,f4)<dist){
- return 1.0;
- }
- if(UV.x>(-scaleX+dist) && UV.x<(scaleX-dist)){
- return 1.0;
- }
- if(UV.y>(-scaleY+dist) && UV.y<(scaleY-dist)){
- return 1.0;
- }
- return 0.0;
- }
- v2f vert (appdata v)
- {
- v2f o;
- o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
- o.uv = v.uv;
- return o;
- }
- fixed4 frag (v2f i) : SV_Target
- {
- float val = DoRoundSquare( i.uv , clamp(_rounded,0.0,(min(_scaleX,_scaleY)/1.5)) , _scaleX , _scaleY );
- return fixed4(_Color.rgb,val);
- }
- ENDCG
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment