Shader/유니티
FullScreenOutline
마샹스 K
2025. 2. 16. 16:30

테이블을 하나 배치하고 HalfLambert를 적용하고 DepthNormal 패스를 추가한다.

ScreenNormal을 가져오기 위해 URP Asset에서 Opaque Texture를 활성화한다.

Fullscreen Feature를 추가하고 새로운 재질을 넣어준다.

버텍스 함수에서 Screen 좌표를 받아온다.
CompueteScreenPos(positionCS);

Screen 좌표를 4방향으로 움직여준다.
움직인 값에 아웃라인 두께를 곱하고 Screen 사이즈로 나눈다.
float2 screenSize = float2(_ScreenParams.x, _ScreenParams.y);
두께가 3이고 Screen 사이즈가 (1024, 720)이라면 (-0.0029, 0.0013)라는 결과가 나온다.
거기에 Screen 좌표 xy를 더해주면 Screen 좌표를 (-0.0029, 0.0013)만큼 움직인 결과가 된다.

움직인 각각의 ScreenNormal 값에 하프 램버트 공식을 적용한다.

(leftUp - rightDown) + (rightUp - leftDown)의 결과물

x, y 중 큰 값으로 아웃라인을 표시한다.

아웃라인을 검은색으로 만들면 최종적으로 FullScreenOutline을 만들 수 있다.