아웃 라인 처리 방식 모음
자료 링크: https://teodutra.com/unity/shaders/outline/2018/03/26/Outline-shaders/
번역 본문

바로 본론으로 갑니다. 윤곽선을 만드는 3.5가지 방법은 다음과 같습니다.
- 거꾸로 선체
잘 알려진 거꾸로 선체. 2번의 패스. 첫 번째 단계에서는 다음을 수행합니다.
- 앞면을 잘라냅니다.
- 정점을 법선 방향으로 밀어냅니다.
- 외곽선 색상을 이용하여 반전된 선체를 렌더링합니다.
두 번째 패스에서는 메쉬를 정상적으로 렌더링합니다.
내부 윤곽선 렌더링을 방지하기 위해 Z 쓰기를 비활성화할 수 있지만 메시의 그리기 순서에 유의하세요. 또한 ZWrite를 끄면 Unity의 스카이박스 앞에 윤곽선이 표시되지 않습니다. 나중에 그려지기 때문입니다.

- 스텐실 버퍼 사용
2번의 패스. 첫 번째 단계에서는 다음을 수행합니다.
- 스텐실 버퍼에 일부 값을 설정합니다.
- 메쉬를 정상적으로 렌더링합니다.
두 번째 패스에서는:
- 스텐실 값이 첫 번째 패스에서 설정한 값과 다른 경우:
- 정점을 법선 방향으로 밀어냅니다.
- 외곽선 색상을 이용하여 선체를 렌더링합니다.

- 내부/외부 별도 제어가 가능한 스텐실 버퍼 사용
이 셰이더에서는 외부 윤곽선과 내부 윤곽선의 두께를 별도로 제어할 수 있습니다. 세 가지 패스가 있습니다. 첫 번째 패스:
- 스텐실 버퍼에 일부 값을 씁니다.
- 메쉬를 정상적으로 렌더링합니다.
두 번째 패스(내부 윤곽선):
- 스텐실 값이 첫 번째 패스에서 설정한 값과 동일한 경우:
- 내부 두께를 이용하여 외곽선(역선체)을 렌더링합니다.
세 번째 패스(외부 윤곽선):
- 스텐실 값이 첫 번째 패스에서 설정한 값과 다른 경우:
- 외부 두께를 이용하여 외곽선(역선체)을 렌더링합니다.

3.25) “림 라이트” 사용하기
이는 개요는 아니지만 유용할 수 있으며 한 번만 통과하면 됩니다. 다음을 수행해야 합니다.
- 보는 방향과 법선 방향 사이의 내적을 계산합니다.
- Smoothstep을 사용하여 원하는 강도와 부드러움에 따라 도트 값을 조정합니다.
- 최종 값을 사용하여 외곽선 색상과 메쉬 텍스처 사이를 이동합니다.

3.5) MatCap 사용
또한 이것은 개요는 아니지만 꽤 좋아 보이고 한 번의 패스가 필요하며 게임에 원하는 아트 스타일에 따라 유용할 수 있습니다. MatCap 텍스처에는 일종의 조명 설정이 포함되어 있으며, "유사한" 조명을 얻기 위해 뷰 공간에서 표면의 법선을 사용하여 그러한 종류의 텍스처를 샘플링할 수 있습니다. 단계는 다음과 같습니다.* 노멀을 뷰 공간으로 변환합니다.
- 법선을 [-1, 1]에서 [0, 1]로 다시 매핑합니다.
- matcap 텍스처를 샘플링하려면 Normal.xy를 사용하세요.
- matcap 값을 사용하여 윤곽선 색상과 메쉬 텍스처 사이를 이동합니다.

끝
대략적인 정보를 담은 포스팅이었습니다. 블로그 게시물 작업을 하고 싶은 만큼 시간이 많지 않기 때문에 게시물 작성보다 코드에 더 집중할 것 같습니다. 따라서 다음 게시물은 이 빠른 형식을 따를 수 있습니다.
모든 셰이더는 https://github.com/teofilobd/BlogProject/tree/master/Assets/05%20-%20Outline에서 사용할 수 있습니다.
로봇은 Unity의 에셋 스토어: https://assetstore.unity.com/packages/3d/characters/robots/space-robot-kyle-4696에서 다운로드되었습니다.