유니티 엔진 (Unity Engine)

유니티 그래픽스 최적화 - 9.SRP;LWRP

원생계 2019. 9. 28. 20:27

9. SRP;LWRP

최적화의 가장 중요, 병목 제거

9-1 SRP (Scriptable Render Pipeline)

유니티 2018부터 Scriptable Render Pipeline 제공. 렌더링 처리 방식을 C#으로 제어 가능. 라이팅 처리 방식, 전반적 렌더링 루프 직접 구성 가능. 새로운 렌더링 기술 직접 적용하거나, 특정 하드웨어에 맞게 최적화도.

GPU 렌더 파이프라인뿐 아니라, 어플리케이션 스테이지 렌더 루프 모두 포함. 한 프레임 렌더링에 들어가는 컬링, 펜더 패스, 멀티 패스 모든 절차 아우름.

기존 유니티 렌더 파이프라인은 블랙박스. 공개되지 않았다. SRP 를 통해 제어하고 커스터마이징 가능. 기본 렌더 파이프라인은 Built-in 파이프라인이라고 부름. 앞서 설명한 포워드 렌더링 방식은 빌트인 파이프라인에 해당.

유니티 로우레벨 렌더링 파트는 C++. 이걸 C# 스크립트로 사용/제어. 직접 렌더 루프를 구성하는 방법은 유니티 메뉴얼 참고.

https://docs.unity3d.com/Manual/ScriptableRenderPipeline.html

SRP를 이용한 LWRP 만 간략히 설명.LWRP와 HDRP는 아직 개발 중. 기존 프로젝트를 LWRP, HDRP 변환은 권장하지 않지만, 새 프로젝트라면 시도해볼만함.

9-2 HDRP (High Definition Render Pipeline)

고품질 비주얼에 적함. 유니티 빌트인 디퍼드, 포워드보다 발전/개선된 렌더링 기법 적용. (Clustered tiled lighting, Fine pruned tiled lighting ) Anisotropy, Suobsurface 등 많은 재질 표현 가능.

요구 하드웨어 스펙이 높다.

9-3 LWRP (LightWeight Render Pipeline)

모바일은 위한 파이프라인. 퍼포먼스에 최적화되어 있고, 모바일, VR, AR 등 성능민감한 환경에서 높은 성능 보여줌. 특징은, 라이팅, 쉐이딩 관련 단점들을 해결하여 성능 제약이 있는 플랫폼에서 최적화된 실시간 렌더링 퍼포먼스 제공.

01 Multi light Single pass

LWRP 가장 큰 특징은 실시간 라이팅들이 싱글 패스로 처리. 포워드 렌더링은 실시간 라이트 여러 개 그만큼 덧그리기 때문에 드로우콜 늘어남. 멀티 라이트 멀티 패스(Multi light Multi pass). 유니티 LWRP 는 실시간 라이트를 한 번의 패스로 처리하도록, 멀티 라이트 싱글 패스 (Multi light Single pass)

오브젝트 렌더링 시, 영향받는 실시간 라이트 -> 쉐이더 전달. 쉐이더는 한 번에 여러 라이트 모두 처리, 별도의 드로우콜 발생 방지. 기존 포워드 렌더링보다 드로우콜 감소.

유니티 허브로 LWRP 프로젝트 생성.

Example Assets 에서 안전모만 렌더링되게, 디렉셔널 라이트 제거(비활성). 디렉셔널 라이트 추가, 그림자 캐스팅 끄고 리얼타임 모드로 설정. 배치 7개.

그림자 캐스팅 않는 디렉셔널 라이트 4개 더 추가, 적절하게 방향, Intensity, 컬러 조절. 추가 라이트에 대한 노멀반응, 스페큘러 모두 보이지만 배치가 늘어나지 않는 것 확인. 싱글 패스로 처리.

기존 빌트인 파이프라인은 실시간 픽셀 라이트 개수를 Quality Settings 에서 설정했지만, LWR 는 Render Pipeline 에셋에서 설정. Graphics Settings / Scriptable Render Pipeline Settings 항목에 에셋 설정 확인. 빌트인 파이프라인을 쓴다면 이 항목 비어있음. SRP 면 이 에셋이 설정돼있음.

에셋 클릭하면 Project View에 에셋 선택됨. 렌더 파이프라인 별도 에셋 여러 벌 세트로 만들어 선택적 사용 가능.

LWRP-HighQuality 에셋, Pixel Lights 개수 선택 가능. 이 수치만큼 실시간 픽셀 라이트 한 번에 처리. 나머지는 Vertex Lighting 처리. Pixel Lighting 만 하이라이트, 노멀 처리. Vertex Lighting 끄면 Pixel Lights 개수만 연산.

02 스탠다드 쉐이더 (Standard Shader)

LWRP 의 스탠다드 쉐이더. 빌트인 스탠다드 쉐이더와는 다름. LWRP용 쉐이더 별도 제공.

머티리얼 쉐이더 선택 드롭다운에서 LightweightPipeline 카테고리. 두 가지 타입. Physically Based 는 물리 기반의 라이팅 연산. Simple Lighting 은 더 가벼운 연산 쉐이더. 품질은 상대적으로 떨어지지만 성능 우선. 기존 레거시 mobile/lit 쉐이더 대체. PBS 와 달리 에너지 보존법칙 따르지 않고 모바일 저사양 디바이스 커버. 파라미터 개수도 적다. 대표적으로, Simple Lighting 에선 프레넬 효과가 없다.

프레넬 효과 : http://gamedevforever.tistory.com/35

03 렌더 스케일 (Render Scale)

Part3 의 업스케일 샘플링 렌더링도 구현. Render Scale 항목 설정. 1 로 설정하면 원래 해상도, 0.5 로 설정하면 UI를 제외한 렌더링 씬의 Fill Rate 성능 부담이 줄어듬.

04 성능을 고려한 제약 사항들

유니티 빌트인 렌더러는 범용적이라 다양한 기술들이 구현되어있음. 성능에 영향을 줄 수 있는 옵션들과 선택권 존재. 실수할 여지가 많아짐. 모바일 실시간 GI 같은 성능부담 큰 기능도 특별히 제동 장치가 없음.

LWRP는 성능에 민감한 기능들을 의도적으로 제한. 사림의 실수 여지를 최소화.

05 실시간 GI

성능 제약이 많아 모바일에서는 부적합. LWRP 는 GI 기능 제거돼있음. Baked GI, 라이트맵만 사용 가능.

06 실시간 쉐도우

다이나믹 라이트로 인한 실시간 그림자 처리도 부하가 큼. 빌트인 파이프라인에선 실시간 그림자 사용 제약이 큼. 모바일 게임에선 실시간 쉐도우는 금기시 됨. LWRP 에선 실시간 쉐도우가 하나의 라이트에서만 작동하도록 구현. 여러 라이트에서 실시간 쉐도우 설정해도 하나의 라이트에만 영향을 미침.

Windows/Rendering/Light Explorer 를 통해 씬의 라이트 확인. 스팟 라이트와 디렉셔널 라이트 각 하나씩. 스팟 라이트가 Realtime인데, 디렉셔널 라이트를 Baked 에서 Mixed 로 바꾸면 디렉셔널 라이트의 그림자가 실시간으로 동작.

07 라이팅 모드

라이트맵 라이팅 모드도제한됨. MixedLighting 모드가 다수 존재. LWRP 는 성능 우선으로 성능에 큰 영향 미치는 Lighting Mode 는 지원되지 않음.

Baked Indirect와 Shadowmask 모드는 지원하지 않음. Baked Indirect 는 Baked 용어 때문에 실시간 연산이 들어가지 않는다고 착각할 수 있는데, 간접광(Indirect)만 라이트맵으로 만들고 실제 그림자는 실시간으로 연산, 오버헤드 발생 가능.

주의 : SRP를 이용한 LWRP는 계속 개발 중이라 내용들이 변경될 가능성 있음.

주의 : 기존 빌트인 파이프라인 쉐이더와 호환되지 않기 때문에, 기존 프로젝트를 LWRP로 변경하려면 충분한 테스트 필요.

.

.

728x90
반응형