LWRP Renderer feature

2019. 5. 29. 08:57Unity Engine/Info

Unity 2019에서 소개된 막강한 기능 중 하나인 Renderer feature.
이전 LWRP와 Shader Graph에는 사실 불편한 점이 많았다.


실제로

커스텀노드를 추가하거나 멀티 패스 렌더를 만들거나 특정 오브젝트의 렌더 방식을 수정하고 싶은 경우

순수 셰이더 그래프 기능만 사용 하기에는 어느정도 한계가 있구나, 불편하다라는 생각을 많이 했으니...

하지만 Renderer feature 기능 덕분에 이러한 불편함이 크게 줄 것이라 생각된다. 
Renderer feature를 사용해보고 느낀점은 LWRP를 릴리즈로 내놓은 이유가 있구나... 

개인적인 생각이지만 Renderer Feature가 추가 되면서 LWRP가 완성되었다는 느낌을 받았다.

 

아래는 LWRP 5.13 문서이며, 최신버전인 5.16은 아직 문서가 업데이트 되지 않은 것 같다.

 

About the Lightweight Render Pipeline | Package Manager UI website

About the Lightweight Render Pipeline The Lightweight Render Pipeline (LWRP) is a prebuilt Scriptable Render Pipeline, made by Unity. The technology offers graphics that are scalable to mobile platforms, and you can also use it for higher-end consoles and

docs.unity3d.com

근데 Renderer feature 관련 내용을 아무리 찾아도 Document에 내용이 없다. 추가가 안 된건가...

일단 보이는 것만 대충 정리 해보자.


LWRP Renderer Feature

제공되는 LWRP의 렌더 루프를 커스텀 하는 기능으로 렌더 루프에 추가 적인 작업을 삽입하거나, 특정 오브젝트를 분리해서 처리할 수 있게 되었다. 레이어 마스크를 통해 오브젝트를 구분하며, 렌더 모드와 시점, Depth 및 스텐실 작업에 대한 옵션도 제공된다. 

 

Unity Tech에서 Git을 통해 이와 관련된 예제를 제공하고 있다.

예제를 훓어보면 Renderer Feature의 기본적인 사용법과 생성 및 패스를 어떻게 커스텀 할 것인지 알아 볼수 있으니 이 기능을 사용하실 분들은 꼭 받아보도록 하자.

 

Unity-Technologies/LWRP-CustomRendererExamples

This project contains a collection of Custom Renderer examples. This will be updated as we refine the feature and add more options. - Unity-Technologies/LWRP-CustomRendererExamples

github.com

 

 


생성 및 설정

LWRP 파이프라인 생성 목록에 기존에 없던 녀석이 생겼는데 이 녀석이 렌더 루프를 커스텀 할 Renderer Feature이다. 

LWRP 파이프라인의 RendererType을 Custom으로 두고 생성한 Forward Renderer을 Set해주면 된다.

 

이제 아래의 +와 -를 통해 Forward Renderer에 Feature를 추가하거나 삭제 할 수 있다. 


[+를 눌렀는데도 목록이 생기지 않는 경우 ]
LWRP 버전을 확인하자. 5.7.2에서는 별도의 기능이 제공되지 않으며, 사용자가 직접 스크립팅으로 커스텀하여  사용해야 하는 것 같다.

이후 버전(확인한건 5.10과 5.13)에서는 기본적으로 Render Object Feature 항목이 제공되므로 최신버전을 설치해서 사용하자.

또한 유니티 2019.1.1f 버전에서는 5.13 패키지가 문제가 있다고 하니 문제가 생기면 유니티 버전도 업데이트 해주자.

 

그리고 Blit, Full Screen Quad Feature의 경우 패키지에 기본적으로 제공되는 기능이 아닌 링크해 둔 예제에 추가되어 있는 기능이다. 해당 기능을 사용하거나 커스텀 하기를 원한다면 예제를 받도록 하자.


디폴트 레이어 마스크


디폴트 레이어 마스크는 오브젝트를 디폴트 렌더를 통해 그릴것인지 결정한다.
레이어마스크가 체크되어 있으면 해당되는 오브젝트는 기존과 같이 오브젝트에 셋팅된 마테리얼을 통해 그려지며, 제외된 레이어의 오브젝트는 오브젝트 렌더에서 제외된다.

 

아래와 같이 씬에 오브젝트를 셋팅하고 레이어 그룹을 분리해 두었다.

오른쪽은 프레임 디버거로 현재 셋팅된 파이프라인의 루프를 볼 수 있다.

디폴트 레이어 마스크에서 Box와 Sphere를 제외하면 오브젝트 렌더에서 제외되는 것이 보인다.

프레임 디버거를 보면 어디까지나 오브젝트 렌더에서 제외되는 것이지 셰도우에서 제외되는 것은 아니다. 


Renderer Features
Renderer feature를 추가하고 레이어 마스크를 셋팅하면 셋팅된 레이어의 오브젝트를 feature에 설정된 마테리얼을 통해 추가로 그린다. Override된 수 만큼 오브젝트는 여러번 그려질수 있다. 패스가 추가된다고 보면된다.

 

Objects Render Feature

오브젝트를 타겟으로 패스가 추가 된다.

+를 눌러 Render Object 를 추가하고 렌더할 마테리얼을 오버라이딩 한다. 그리고 대상이되는 오브젝트의 레이어를 셋팅하면 렌더 패스가 추가되어 오버라이딩한 마테리얼로 한번 더 그리는것을 확인 할 수 있다.

 

또한 Event를 통해 추가된 패스의 렌더링 순서도 지정 할 수 있다.

 

Blit

디폴트 파이프라인에서 Custom Post Process 를 할때는 주로 OnRenderImage(.., ..)를 오버라이딩 해서 Graphics.Blit 함수를 이용해 정해진 마테리얼로 렌더했다.

 

LWRP에서는 이 방법을 더 이상 사용할 수 없기 때문에 PostEffect를 사용하기 위해서는 PostProcessing 패키지를 설치하고 커스텀 이펙트를 볼륨에 추가해서 사용하거나 LWRP를 직접 커스텀 해야했다.

그리고 간단한 Camera ImageEffect 같은 경우는 Camera 앞에 Quad Object를 잘 위치해놓고 Material교체 하면서 사용했는데 예제에서 제공되는 스크립트로 사용 가능한 Blit Feature는 이런 PostEffect를 처리하기 위한 Feature로 보인다.

 

실제로 이 기능을 이용하면 스크립팅 하나없이 ScreenEffect를 쉽게 적용할수 있다. 

 

셰이더 그래프와 Renderer Features Blit 기능을 이용해 간단하게 화면 효과를 만들어보았다.

지금 보니 렌더 순서를 변경하지 않았구나...

 

아직은 예제에 추가되어 있는 기능이지만 나중에 패키지에 정식으로 추가되거나, 추가되지 않아도 제공된 스크립트가 매우 간단하기 때문에 쉽게 커스텀 해서 사용 할 수 있을것 같다.

 

'Unity Engine > Info' 카테고리의 다른 글

SRP Batcher  (0) 2019.05.27
Unity Adaptive Performance  (0) 2019.04.26
유니티 2019.1 Release  (0) 2019.04.18
Unity FBX Exporter  (0) 2019.03.04
Unity Editor Coroutine  (1) 2019.03.03