unity 边缘发光shader
时间: 2023-06-23 22:44:32 浏览: 194
unity边缘检测Shader
Unity中实现边缘发光的一种方式是使用Shader。以下是一个基础的边缘发光Shader示例:
```
Shader "Custom/EdgeGlow" {
Properties {
_MainTex ("Texture", 2D) = "white" {}
_Threshold ("Threshold", Range(0, 1)) = 0.5
_Color ("Glow Color", Color) = (1,1,1,1)
_Glow ("Glow Amount", Range(0, 1)) = 0.5
}
SubShader {
Tags {"Queue"="Transparent" "RenderType"="Transparent"}
Pass {
ZWrite off
ColorMask RGB
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata {
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f {
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
sampler2D _MainTex;
float _Threshold;
float4 _Color;
float _Glow;
v2f vert (appdata v) {
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
fixed4 frag (v2f i) : SV_Target {
fixed4 col = tex2D(_MainTex, i.uv);
float4 sum = 0;
sum += tex2D(_MainTex, i.uv + float2(-0.01, -0.01)) - col;
sum += tex2D(_MainTex, i.uv + float2( 0.00, -0.01)) - col;
sum += tex2D(_MainTex, i.uv + float2( 0.01, -0.01)) - col;
sum += tex2D(_MainTex, i.uv + float2(-0.01, 0.00)) - col;
sum += tex2D(_MainTex, i.uv + float2( 0.01, 0.00)) - col;
sum += tex2D(_MainTex, i.uv + float2(-0.01, 0.01)) - col;
sum += tex2D(_MainTex, i.uv + float2( 0.00, 0.01)) - col;
sum += tex2D(_MainTex, i.uv + float2( 0.01, 0.01)) - col;
if (length(sum) > _Threshold) {
fixed4 glow = _Color;
glow.a = _Glow;
return lerp(col, glow, _Glow);
}
return col;
}
ENDCG
}
}
}
```
在此示例中,我们使用了一个名为“_Threshold”的阈值属性,该属性定义了什么颜色被视为边缘。我们还使用了一个名为“_Color”的颜色属性,该属性定义了边缘发光的颜色。最后,我们使用了一个名为“_Glow”的属性,该属性定义了发光的强度。
在使用此Shader时,将其应用于一个具有透明度的材质上,并将其放置在需要发光的对象上即可。例如,你可以在场景中放置一个球体,并将具有此Shader的材质应用于该球体,以使其周围发出发光效果。
阅读全文