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을 만들 수 있다.