티스토리 뷰
//테크니컬 아티스트를 위한 유니티 쉐이더 스타트업 발췌
Properties{
_Color("Color", Color) = (1,1,1,1)
_Size("Out Line Size", float) = 1
}
SubShader{
Tags { "RenderType" = "Opaque" }
LOD 200
//cull은 '배제'를 의미한다. front를 배제하여 렌더링 하지 않았으니 그릴 것은 면의 뒷면일 뿐이다.
//그러니까 면을 뒤집는 것과 같다. (= flip)
cull front
//여기서 부터가 면을 뒤집고 버텍스를 이동시키는 첫번째 Pass
CGPROGRAM
#pragma surface surf _Outline vertex:vert noshadow noambient
#pragma target 3.0
//OutLine의 두께를 조절하기 위해 float 값 하나를 받아왔다.
//정확히는 버텍스를 각 노말 방향으로 _Size 만큼 이동시켜서 그리는 것이다.
//주의할 것은 _Size = 1 이 1m를 의미한다.
//적당히 조절하자.
float _Size;
//버텍스를 조작하는 함수
void vert(inout appdata_full v) {
//_Size 1당 0.01을 곱해주어 1cm로 이동하게 해준다.
v.vertex.xyz += v.normal.xyz*.01*_Size;
}
//아무 값도 받아오지 않으면 오류가 생기기에...
struct Input {
float4 color:COLOR;
};
//OutLine 컬러를 설정하는데 사용한다.
float4 _Color;
//딱히 역할이 없다.
void surf(Input IN, inout SurfaceOutput o) {
}
fixed4 Lighting_Outline(SurfaceOutput s, float3 lightDir, float atten) {
return _Color;
}
ENDCG
+
외곽선 안쪽으로 그리고 싶은 Pass를 작성해 주면 끝이다.
대신 뒤집었던 면은 원래대로 만들어 줘야하기 때문에
두번째 CGPROGRAM을 작성하기 전에
cull back을 작성해주자.
void vert(appdata_full v)는 처음 보는 것인데,
#pragma에서 vertex 쉐이더를 vert라는 이름으로 사용한다는 것을 알려주기 위해
vertex:vert라고 적어주는 것이다.
'유니티 > Shader' 카테고리의 다른 글
유니티 URP Shader Training 01 (0) | 2021.06.23 |
---|---|
가려져도 보이는 쉐이더 (0) | 2021.02.01 |
알파테스팅(컷아웃)쉐이더를작성할뿐인초라한글 (0) | 2020.07.10 |
알파블렌딩쉐이더작성 (0) | 2020.07.09 |
2Path를 이용한 Clean한 AlphaBlending (0) | 2020.07.09 |