외곽선만 표시하는 쉐이더
이미지의 외곽선을 판단해서 해당 외곽선을 부각시키기 위한 쉐이더이다.
반응형
반응형
< Material 속성 >
< Shader Code >
Shader"Custom/EdgeShader"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_EdgeColor ("Edge Color", Color) = (1, 1, 1, 1) // 사용자 정의 Edge 색상
_Threshold ("Edge Threshold", Range(0, 1)) = 0.1
_EdgeSize ("Edge Size", Range(1, 10)) = 1 // Edge 크기 조절
}
SubShader
{
Tags { "RenderType"="Transparent" "Queue"="Transparent" }
Pass
{
ZTest Always
Cull Off
ZWrite Off
Blend SrcAlpha
OneMinusSrcAlpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _MainTex;
float4 _MainTex_TexelSize;
float4 _EdgeColor; // 사용자 정의 Edge 색상 (RGBA)
float _Threshold;
float _EdgeSize; // Edge 크기 조절 값
struct appdata_t
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
v2f vert(appdata_t v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
float4 frag(v2f i) : SV_Target
{
// Sample the texture
float4 texColor = tex2D(_MainTex, i.uv);
// Preserve Alpha from the original texture
if (texColor.a == 0)
{
return float4(0, 0, 0, 0); // 투명 영역 유지
}
float2 texelSize = _MainTex_TexelSize.xy * _EdgeSize; // Edge Size 조절 적용
// Sample neighboring pixels
float3 col = texColor.rgb;
float3 colRight = tex2D(_MainTex, i.uv + float2(texelSize.x, 0)).rgb;
float3 colLeft = tex2D(_MainTex, i.uv - float2(texelSize.x, 0)).rgb;
float3 colUp = tex2D(_MainTex, i.uv + float2(0, texelSize.y)).rgb;
float3 colDown = tex2D(_MainTex, i.uv - float2(0, texelSize.y)).rgb;
// Compute differences
float diffX = length(col - colRight) + length(col - colLeft);
float diffY = length(col - colUp) + length(col - colDown);
// Combine differences to detect edges
float edge = step(_Threshold, diffX) + step(_Threshold, diffY);
// If it's an edge, apply the Edge Color, otherwise make it transparent
if (edge > 0)
{
return float4(_EdgeColor.rgb, _EdgeColor.a); // Edge 색상과 Alpha
}
else
{
return float4(0, 0, 0, 0); // 투명
}
}
ENDCG
}
}
}
★★☆☆☆
반응형
'개발 > Unity) Shader' 카테고리의 다른 글
Unity Shader) 다이아몬드 형태로 프리즘 효과 처리하기 (0) | 2024.12.08 |
---|---|
Unity Shader) 컬러를 오버레이 해서 스포트라이트 효과 내기 (0) | 2024.11.28 |
Unity Shader) 얼어있는 느낌 텍스쳐 외곡해서 다양한 시각적인 효과 (0) | 2024.11.27 |
Unity Shader) 도트 팝아트 형식으로 표현하기 (0) | 2024.11.22 |
Unity Shader) 컬러 톤 변경해서 표현하기 (0) | 2024.11.21 |
댓글