09. 시야 연출 4 - Elysia-ff/UE4-Custom_Stencil_Tutorial GitHub Wiki

Post Process 추가

BP_Hitman -> LosComponent의 스텐실을 First bit (1), ignore depth, 1로 지정한다.
image

캐릭터의 시야가 닿는 곳은 버퍼가 1로 채워진다.
image

먼저 스텐실 값을 검사하고 첫번째 비트가 켜져있는지 확인하는 코드가 필요하다.
다음 단계에서도 사용할 코드이기 때문에 Material Function MF_IsStencilMasked로 만들어 놓겠다.
image
입력으로 스텐실 값과 마스크비트를 받고 마스킹되어있는지 확인 후 결과를 반환한다.

그다음 Place Actors -> Volumes -> Post Process Volume을 Level에 끌어다 놓는다.
image

모든 위치에 대해 Post Process를 적용할 것이므로 Post Process Volume Settings -> Infinite Extent (Unbound)를 체크한다.
새 마테리얼을 생성하고 Rendering Features -> Post Process Materials에 등록한다.
image

이제 마테리얼에 스텐실 버퍼의 첫번째 비트가 켜져있는 곳은 밝게, 그렇지 않은 곳은 어둡게 렌더링하는 코드를 추가하면 된다.
먼저 Material Domain을 Post Process로 설정하고
image

아래 코드를 추가한다.
image

SceneTexture:CustomStencil은 스텐실버퍼의 값을, SceneTexture:PostProcessInput0는 Post Process직전의 렌더링 결과를 반환한다.
스텐실 값의 첫번째 비트가 켜져있는 경우에는 SceneTexture:PostProcessInput0의 값을 그대로 사용하고 그렇지 않으면 0.2를 곱해서 색을 어둡게 만든다.

이제 실행하면 메시만 원래의 색으로 나오고 다른 부분은 어둡게 표시된다.
image

메시 때문에 바닥이 보이지 않으니 메시는 화면에 그리지 않되 스텐실 버퍼에는 그리도록 옵션을 변경하면 된다.
BP_Hitman -> LosComponent의 Rendering -> Render in Main PassRender in Depth Pass옵션을 꺼준다.
그리고 Line Of Sight -> Debug -> DrawDebugLine옵션도 꺼준다.
image

image