Shader "Custom/Circle" { Properties { _Center("Center", Vector) = (0,0,0,0) _Radius("Radius", Range(0,1)) = 0.5 _Color("Color", Color) = (1,1,1,1) _MainTex("Texture", 2D) = "" } SubShader { Tags { "RenderType"="Opaque" } LOD 200 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float4 vertex : SV_POSITION; float2 uv : TEXCOORD0; }; float4 _Center; float _Radius; float4 _Color; sampler2D _MainTex; v2f vert(appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } fixed4 frag(v2f i) : SV_TARGET0{ float2 uv = i.uv; float dist = distance(uv, _Center.xy); if(dist <= _Radius) { fixed4 texColor = tex2D(_MainTex, uv); return texColor * _Color; } else { discard; } } ENDCG } } FallBack "Diffuse" }
时间: 2024-02-10 21:28:12 浏览: 210
这是一个自定义的Shader代码示例,用于绘制一个圆形的渲染效果。该Shader在Unity中命名为"Custom/Circle"。
在这个Shader中,定义了几个属性用于控制圆形的位置、半径、颜色和纹理:
1. _Center:表示圆形的中心点位置,默认为(0,0,0,0)。
2. _Radius:表示圆形的半径,范围在0到1之间,默认为0.5。
3. _Color:表示圆形的颜色,默认为白色(1,1,1,1)。
4. _MainTex:表示圆形的纹理,为一个2D纹理,默认为空。
在SubShader中,使用了"RenderType"="Opaque"标签来指定渲染类型为不透明。LOD设置为200,表示使用中等级别的细节层次。
在Pass中,使用CGPROGRAM和ENDCG之间的代码块来定义顶点和片段着色器函数。
顶点着色器函数vert接收输入的顶点数据,并将顶点位置和纹理坐标传递给片段着色器函数frag。
片段着色器函数frag根据传入的纹理坐标计算与中心点的距离,并判断是否在半径范围内。如果在范围内,则从纹理中采样颜色,并与_Color属性相乘返回;否则,丢弃该像素。
最后,使用FallBack "Diffuse"指定了一个回退的渲染效果,即如果设备不支持该Shader,将使用Diffuse着色器作为回退方案。
这个Shader可以用于在物体表面绘制一个圆形区域,并根据纹理和颜色属性进行渲染。可以根据需要自定义属性值来实现不同的效果。
阅读全文
相关推荐

















