Shader "Custom/OutlineShader"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_LineColor ("Line Color", Color) = (0,0,0,1)
_LineWidth ("Line Width", Range(0, 0.1)) = 0.01
}
SubShader
{
Tags {"Queue"="Transparent" "RenderType"="Transparent"}
LOD 100
CGPROGRAM
#pragma surface surf Lambert alpha
sampler2D _MainTex;
fixed4 _LineColor;
float _LineWidth;
struct Input
{
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutput o)
{
// 현재 나의 uv값을 가져온다. ( 색상 정보 )
fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
// left right를 나누는 코드다
// 0 ~ 1 -> -0.5 ~ 0.5 -> abs를 통해 0 ~ 0.5
float2 uvDist = abs(IN.uv_MainTex - 0.5) * 2;
// 어느 직각에 더 가까운지 체크한다.
float maxDist = max(uvDist.x, uvDist.y);
// 1 - 두께를 하면 이것 0.8 -> maxDist 0.7 -> 0반환
// 0.8 -> maxDist 0.9 -> 1반환하는 함수
float isBorder = step(1 - _LineWidth, maxDist);
// 0 ~ 1사이 값을 반환한다.
o.Albedo = lerp(c.rgb, _LineColor.rgb, isBorder);
// 그냥 투명도 있을시 넣어주는거다.
o.Alpha = lerp(c.a, _LineColor.a, isBorder);
}
ENDCG
}
FallBack "Diffuse"
}
내부에 있는 색상도 바꿔보기
Shader "Custom/OutlineShader"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_LineColor ("Line Color", Color) = (0,0,0,1)
_SurfaceColor ("Surface Color", Color) = (1,1,1,1)
_LineWidth ("Line Width", Range(0, 0.1)) = 0.01
}
SubShader
{
Tags {"Queue"="Transparent" "RenderType"="Transparent"}
LOD 100
CGPROGRAM
#pragma surface surf Lambert alpha
sampler2D _MainTex;
fixed4 _LineColor;
fixed4 _SurfaceColor;
float _LineWidth;
struct Input
{
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutput o)
{
// 현재 나의 uv값을 가져온다. ( 색상 정보 )
fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
// left right를 나누는 코드다
// 0 ~ 1 -> -0.5 ~ 0.5 -> abs를 통해 0 ~ 0.5
float2 uvDist = abs(IN.uv_MainTex - 0.5) * 2;
// 어느 직각에 더 가까운지 체크한다.
float maxDist = max(uvDist.x, uvDist.y);
// 1 - 두께를 하면 이것 0.8 -> maxDist 0.7 -> 0반환
// 0.8 -> maxDist 0.9 -> 1반환하는 함수
float isBorder = step(1 - _LineWidth, maxDist);
// 0 ~ 1사이 값을 반환한다.
o.Albedo = lerp(_SurfaceColor.rgb, _LineColor.rgb, isBorder);
o.Albedo = lerp(_SurfaceColor.rgb, _LineColor.rgb, isBorder);
// 그냥 투명도 있을시 넣어주는거다.
o.Alpha = lerp(c.a, _LineColor.a, isBorder);
}
ENDCG
}
FallBack "Diffuse"
}
Vertex Shader와 Pixel Shader가 있다.
버텍스 쉐이더는 메쉬의 버텍스 하나하나를 다루고 픽셀은 점 하나하나를 다룬다.
따라서 픽셀쉐이더는 해상도만큼(예:1920*1080번) 호출된다.
Surface 쉐이더라고 불리기도 한다.
UV는 0~1의 정규화된 수치를 가진다.
tex2D : 현재 나의 UV값을 구해온다. (+생상 정보)
0~1 => 각각 0.5씩 빼주면 -0.5~0.5로 계산할 수 있고 여기에 절댓값을 취해서
abs : 절대값 구하는 함수.
쉐이더 만드는 방법
이름 짓고 더블클릭하여 안에 코드를 작성한다. (상단 코드 복붙)
쉐이더를 누른채 create → material 하면 머테리얼이 생성된다.
쉐이더 그래프 사용하기
New Shader Graph.shadergraph
0.04MB
아웃라인 툴킷(에셋스토어-무료) 사용하기
https://assetstore.unity.com/packages/p/outline-toolkit-98020
Outline Toolkit | Particles/Effects | Unity Asset Store
Use the Outline Toolkit tool for your next project. Find this and more particle & effect tools on the Unity Asset Store.
assetstore.unity.com
'UNITY > 유니티게임스쿨' 카테고리의 다른 글
Unity 클라이언트와 서버 통신하기 (0) | 2024.09.25 |
---|---|
프로토버퍼 (0) | 2024.09.23 |
포스트 프로세싱 (0) | 2024.07.30 |
CSV Parser (0) | 2024.07.19 |
개인 포트폴리오 작성 :: AngryBird (0) | 2024.07.02 |