写一个用于unity渲染的shader 要求透明外发光
时间: 2024-05-11 21:15:11 浏览: 123
unity3D自发光透明SHADER
3星 · 编辑精心推荐
好的,这个问题很棒!以下是一个使用ShaderLab编写的简单的透明外发光渲染着色器:
```
Shader "Custom/TransparentOutline" {
Properties {
_MainTex ("Texture", 2D) = "white" {}
_OutlineColor ("Outline Color", Color) = (1,1,1,1)
_OutlineWidth ("Outline Width", Range(0.0, 0.1)) = 0.01
}
SubShader {
Tags {"Queue"="Transparent" "RenderType"="Transparent"}
LOD 100
Pass {
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;
float4 _MainTex_ST;
float4 _OutlineColor;
float _OutlineWidth;
v2f vert (appdata v) {
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
return o;
}
fixed4 frag (v2f i) : SV_Target {
float4 c = tex2D(_MainTex, i.uv);
float4 outline = tex2D(_MainTex, i.uv);
outline -= tex2D(_MainTex, i.uv + float2(_OutlineWidth, 0)) * _OutlineColor;
outline -= tex2D(_MainTex, i.uv + float2(-_OutlineWidth, 0)) * _OutlineColor;
outline -= tex2D(_MainTex, i.uv + float2(0, _OutlineWidth)) * _OutlineColor;
outline -= tex2D(_MainTex, i.uv + float2(0, -_OutlineWidth)) * _OutlineColor;
outline.a = c.a;
return outline;
}
ENDCG
}
}
FallBack "Diffuse"
}
```
希望这可以帮到你。如果你需要更多帮助,可以告诉我你的具体需求。
阅读全文