프로그래밍/Unreal

[UE4] 아웃라인 : 스텐실

chance 2017. 9. 16. 17:37

기본적인 내용은 동일하나 스텐실 값을 비교한다는 점에서 차이가 있다.

static mesh 의 Rendering 설정에서

Render CustomDepth Pass 를 활성화 하고

CustomDepth Stencil Vlaue 에 원하는 값을 지정하면 된다.





1. 두께 설정 : 텍셀의 크기에 따라 라인의 두께를 설정한다.


ScreenTexlSize -> Component Mask(R) * 두께

ScreenTexlSize -> Component Mask(G) * 두께


위 값을 2차원 벡터로 만들고, 역방향 벡터들을 만든다. : AppendVector 


총 방향은 8개.


각 방향별 ScreenPosition UV 값을 더해 실제 UV 좌표를 얻는다.

 



2. ScenTexture : Custom Stensil 

각 UV 의 스텐실 값 얻기

각 방향의 최대 값 얻기 : 최대값이 0 이면 해당 픽셀 주변에는 스텐실 설정이 없음~




8곳 방향을 검사해 스텐실 여부만 확인하므로, 각 값을 보유할 필요는 없다.

이 예제에서는 MAX 값만 얻고 최종적으로Clamp max=1 로 스텐실 여부만 판단.


만약, 스텐실 값 별로 다른 색상 등 처리하려면 별도로 빼서 색상 선택하는 부분 추가 필요하다.



위는 현재 픽셀의 스텐실 값을 가져와 OneMinus 을 사용해 값을 반전시켜

스텐실 값이 있으면 0, 일반 픽셀이면 1을 리턴하게 한다.


스텐실 값이 있는 경우 외곽선이 아니므로 아웃라인을 그리지 않는다.


아래 그룹은 Occulusion 을 체크하고, 알파값 상수를 추가해 준다.

CustomDepth와 SceneDepth 값이 다르면 표시하지 않게 된다.



현재 픽셀은 일반 픽셀값이면 1

주변 픽셀에 스텐실 값 있으면 1

Occulusion 체크하고 원하는 알파값 셋팅


등으로 처리가 완료된다.