2D이미지를 3D 처럼 표현하기
2D 이미지를 여러가지 레이어를 나눠서 움직임을 주는 형태로 작업을 하면 좀 꿀렁거리긴하지만 3D 처럼 효과를 낼수 있다. 해당 방법을 통해서 조금더 입체감 있는 형태의 표현을 진행했다.
반응형
< Material 속성 >
< Shader Code >
Shader"Custom/MetallicShinyEffect"
{
Properties
{
_MainTex ("Base (RGB)", 2D) = "white" { }
_ShinyColor ("Shiny Color", Color) = (1, 1, 0, 1)
_Metallic ("Metallic", Range(0, 1)) = 0.5
_Smoothness ("Smoothness", Range(0, 1)) = 0.5
_Location ("Location", Vector) = (0.5, 0.5, 0, 0) // Location을 좌표값으로 설정 (x, y)
_Width ("Width", Range(0, 1)) = 0.25
_Softness ("Softness", Range(0.01, 1)) = 0.5
_Brightness ("Brightness", Range(0, 1)) = 1.0
_Highlight ("Highlight", Range(0, 1)) = 0.5
}
SubShader
{
Tags { "Queue"="Overlay" "RenderType"="Opaque" }
Pass
{
Blend SrcAlpha
OneMinusSrcAlpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata_t
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
float _Metallic;
float _Smoothness;
float _Width;
float _Softness;
float _Brightness;
float _Highlight;
float4 _ShinyColor;
sampler2D _MainTex;
float2 _Location; // (x, y) 좌표 값
v2f vert(appdata_t v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
half4 frag(v2f i) : SV_Target
{
half4 texColor = tex2D(_MainTex, i.uv);
// Location 값을 사용하여 화면 좌표를 기준으로 빛나는 부분을 계산
float dist = distance(i.uv, _Location); // UV 좌표에서 Location 좌표까지의 거리 계산
half3 shiny = _ShinyColor.rgb * (1 - smoothstep(0.0, _Width, dist)); // 거리 기반으로 효과 적용
texColor.rgb = lerp(texColor.rgb, shiny, _Brightness);
// Smoothness에 따라 Alpha 처리
texColor.a *= _Smoothness; // 투명도 적용
texColor.rgb *= texColor.a; // 최종 색상에 alpha 적용
return texColor;
}
ENDCG
}
}
Fallback"Unlit/Transparent"
}
★★★☆☆
반응형
'개발 > Unity) Shader' 카테고리의 다른 글
Unity Shader) 컬러 톤 변경해서 표현하기 (0) | 2024.11.21 |
---|---|
Unity Shader) 녹아서 사라지는 효과 (Dissolve) (0) | 2024.11.20 |
Unity Shader) 오래된 효과 / 빈티지 표현하기 (Sepia) (0) | 2024.11.19 |
UnityShader) 픽셀화 표현하기 (0) | 2024.11.15 |
Unity Shader) 금속 재질 처럼 표현하는 효과 (1) | 2024.11.13 |
댓글