컬러를 오버레이 해서 스포트라이트 효과 내기
반응형
반응형
< 코인 아이템 적용 >
코인 아이콘을 기준으로 해당 효과를 적용하면 다음과 같다.
< Material 속성 >
< Shader Code >
Shader"Custom/InnerCardGlow_Offset"
{
Properties
{
_MainTex ("Main Texture (With Transparent Background)", 2D) = "white" {}
_GlowRadius ("Glow Radius", Float) = 0.3
_BorderGradientSpeed ("Border Animation Speed", Float) = 1
_BlurAmount ("Glow Blur Amount", Float) = 0.75
_GlowOffset ("Glow Center Offset (UV)", Vector) = (0.5, 0.5, 0, 0) // 중심 좌표 기본값
}
SubShader
{
Tags { "Queue"="Transparent" "RenderType"="Transparent" }
Blend SrcAlpha
OneMinusSrcAlpha
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
// Properties
sampler2D _MainTex;
float _GlowRadius;
float _BorderGradientSpeed;
float _BlurAmount;
float4 _GlowOffset; // Glow 중심 좌표 오프셋 (UV 좌표)
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;
}
fixed4 conicGradient(float2 uv, float angle)
{
// UV를 Polar 좌표로 변환
float2 centeredUV = uv - 0.5;
float theta = atan2(centeredUV.y, centeredUV.x) + angle;
float t = frac(theta / (2 * UNITY_PI)); // [0, 1] 범위로 정규화
// 12개 색상 팔레트 정의
fixed4 colors[12] =
{
fixed4(0.4, 0.6, 0, 1), // #669900
fixed4(0.6, 0.8, 0.2, 1), // #99cc33
fixed4(0.8, 0.9, 0.4, 1), // #ccee66
fixed4(0, 0.4, 0.6, 1), // #006699
fixed4(0.2, 0.6, 0.8, 1), // #3399cc
fixed4(0.6, 0, 0.4, 1), // #990066
fixed4(0.8, 0.2, 0.6, 1), // #cc3399
fixed4(1, 0.4, 0, 1), // #ff6600
fixed4(1, 0.6, 0, 1), // #ff9900
fixed4(1, 0.8, 0, 1), // #ffcc00
fixed4(0.4, 0.6, 0, 1), // 반복 시작
fixed4(0.6, 0.8, 0.2, 1) // 첫 색상과 일치 (부드러운 전환용)
};
// 색상 인덱스 계산 및 보간
float scaledT = t * 11;
int index1 = int(floor(scaledT));
int index2 = (index1 + 1) % 12;
float blendFactor = frac(scaledT);
return lerp(colors[index1], colors[index2], blendFactor);
}
fixed4 frag(v2f i) : SV_Target
{
// 텍스처 샘플링
fixed4 texColor = tex2D(_MainTex, i.uv);
// Glow 중심 좌표를 기준으로 거리 계산
float2 glowCenter = _GlowOffset.xy; // UV 공간에서 중심 오프셋 적용
float2 centeredUV = i.uv - glowCenter;
float dist = length(centeredUV);
// 애니메이션 그라디언트 계산
float time = _Time.y * _BorderGradientSpeed;
fixed4 gradientColor = conicGradient(i.uv, time);
// Inner Glow 생성
float innerMask = smoothstep(_GlowRadius, _GlowRadius - _BlurAmount, dist);
fixed4 innerGlowColor = gradientColor * innerMask;
// 텍스처와 Glow 혼합
fixed4 finalColor = texColor + innerGlowColor;
// 텍스처의 알파 값 유지
finalColor.a = texColor.a;
return finalColor;
}
ENDCG
}
}
FallBack"Transparent"
}
★★★☆☆
반응형
'개발 > Unity) Shader' 카테고리의 다른 글
Unity Shader) 다이아몬드 형태로 프리즘 효과 처리하기 (0) | 2024.12.08 |
---|---|
UnityShader) 외곽선만 표시하는 쉐이더 (0) | 2024.12.05 |
Unity Shader) 얼어있는 느낌 텍스쳐 외곡해서 다양한 시각적인 효과 (0) | 2024.11.27 |
Unity Shader) 도트 팝아트 형식으로 표현하기 (0) | 2024.11.22 |
Unity Shader) 컬러 톤 변경해서 표현하기 (0) | 2024.11.21 |
댓글