URP 를 공부하며, 기존 레거시 쉐이더에서 자주 쓰이는 2Pass 방식을 어떻게 적용할지 고민하고 있다.

 

URP 는 기본적으로 싱글패스만 지원하기 때문에 멀티패스를 쓰기 위해선 별도 처리가 필요한데, 이를 위해 유니티에서 마련해준 기능이 RenderFeature 중 RenderObjects 이다.

(물론 이 RenderFeature 또한 직접 구현이 가능하며, RenderObjects 는 유니티에서 편하게 쓰라고 만들어준 RenderFeature 의 일종이다)

 

어떻게 쓰느냐에 따라 활용방법이 무궁무진 한데, 멀티패스 구현 또한 가능하다.

 

여기서는 알파 블렌딩 시 가려지는 뒷쪽 메시들이 부분부분 보이는 문제를 해결하기 위한 RenderFeature 사용 방식을 설명할 것이다.

이런 Convex 한 반투명 메시들은 뒷 메시가 보여져버렷..

 

먼저 우리의 가장 중요한 ForwardRenderer 를 보자

 

이녀석은 ScriptableRenderer 를 상속받아 유니티에서 마련해놓은 포워드렌더링 방식의 파이프라인이다.

여기에 Add RenderFeature 가 보일것이다.

버튼을 눌러보면 Render Objects(Experimental) 이라는 항목이 하나 있을텐데 그걸 선택한 뒤 다음처럼 셋팅하자

아 참, 아래 ZWriteOnly 메테리얼은 새로 만든 셰이더로서 이렇게 셋팅하면 된다

ZWriteOnly 메테리얼의 Inspector

중요한 부분은 Base Map 의 알파를 0 으로 셋팅해서 안보이게 해야 한다는 것이다 (추후 설명하겠지만 Z 버퍼에 쓰기만 할 용도임)

 

아래 부분이 Render Object 에 대한 설정값

각 셋팅에 대한 설명은 아래에..

그 후 반투명 처리할 물체의 메시에 적용해줄 메테리얼을 하나 만들고 다음과 같이 셋팅한다

URP 기본 쉐이더로 셋팅 (원한다면 lit 을 해도 상관 없지만, Surface Type, Blending Mode 는 꼭 저대로 셋팅해야 반투명 오브젝트로 인식하고, 알파 블렌딩도 적용된다.)

Base Map 항목에 컬러값을 셋팅할 수 있는걸 볼 수 있는데 여기에서 알파를 조절하면, 씬뷰에서 반투명 처리되는 메시를 볼 수 있을 것이다.

이 메시의 Layer 도 위 값에 셋팅된 대로 ZTestTransparent 라는 걸로 만들어서 적용하면, 아래처럼 깔끔히 알파처리된 메시를 볼 수 있다.

왼쪽이 깔끔처리된 메시, 오른쪽이 알파 블렌딩 문제 메시

 

위 코드는 저의 깃헙에서도 확인할 수 있습니다. (Assets/Scenes/ConvexMeshAlphaScene.unity 를 열어서 확인가능함)

https://github.com/SeonHwan/ShaderExample

 

SeonHwan/ShaderExample

Contribute to SeonHwan/ShaderExample development by creating an account on GitHub.

github.com

 

자 이제 어떻게 이렇게 구현이 되는지 하나하나 따져볼 시간이지만 포스팅이 길어지므로 다음 포스팅에 자세히 설명하겠습니다.

 

Universal RP 패키지의 몇몇 버전에서 제대로 동작하지 않는 버그가 있습니다. (7.2.0 ~ 7.4.3 쯤에서 비정상 동작하는거 같음)

각 유니티 버전에 verified 된 버전을 사용하거나 최신 유니티 버전을 사용하세요

'Unity > Universal Render Pipeline' 카테고리의 다른 글

알파 블렌딩 (2)  (0) 2020.12.10

+ Recent posts