최적화 기본기
Batching

 




Draw Call
CPU 사물 데이터 처리
GPU 이미지 처리
CPU 가 GPU 에게 이 사물을 그려라 라고 명령하는 것






SetPass Call
머티리얼, 텍스쳐를 묶어 놓은 걸 SetPass 라고 함
이걸 전덜하는게 셋패스 콜



GPU 에게 일감 전달 하는 걸 Batch 라고 부르고
이 배치 수를 줄이는 걸
최적화 라고 부른다


 

 

렌더러, 파티클 이 배치 에 해당된다

이런게 많을수록 렉 걸리는 거임

 

 

 

 


Statistics 에서 

배치수 확인 가능 

 

 

Frame Debugger 에서도 확인 가능

 

 

 

+

 

 

Atlas 활용 기법

 

여러개의 텍스쳐를

단 하나의 텍스쳐로 통일 함

 

각 캐릭터마다

UV 좌표를 수정해서 입히게 함

 

 

마치 2D 스프라이트 시트 안에 여러 그림을 동시에 넣는 거랑 비슷함

 

 

 

 

배치 수 는 여전히 8 이지만

 

셋 패스 콜은 8 -> 3 으로 줄어듦

 

 

 

 

+

 

다이나믹 배칭

Dynamic Batching

 

urp 에서

 

Preferences , Core Render Pipeline

All Visible

 

Project Setting Quality

 

 

URP 인스펙터 창

우클릭

Show Additional Properties

Dynamic Batching 킬 수 있음

 



배치 8 개 중 5개가 절약해서 3개가 됨

 

 



다이나믹 배칭
주의점

6.0 버전 urp 기준에서
배치 대상 메시는 매우 간단한 오브젝트여야 함
버텍스 수 300개 미만 이어야 함

x y z 크기 는 1 1 1 또는 2 2 2 균등해야 함

커스텀 셰이더를 사용하지 말아야 함

CPU 부하가 늘어날 수 있음

 

 

 

 

다이나믹 배칭

개별 오브젝트에 직접적으로 적용(활성화/비활성화)할 수 있는 설정이 없습니다.

동적 배치는 유니티가 씬에 있는 

모든 움직이는 오브젝트를 대상으로 내부적으로 조건을 검토하여 자동으로 처리하는 전역(Global) 설정 임

 

 

 

+

 

 

정적 배칭
static batching

다이나믹 배칭의 반대 개념

프로젝트 세팅 ㅡ 플레이어 ㅡ 오더 세팅 ㅡ 스태틱 배칭

해당 오브젝트 인스펙터 창 ㅡ 패칭 스태틱

 

 

정적 배칭으로도 배치수 8 to 3 로 절약 가능

 

+

 

 


단, 
정적으로 되었기 때문에
이동 회전 커짐 은 안됨
트랜스폼 안됨

static 된 메쉬들은 하나의 메쉬로 통일 되어버린다

+

 


3d srpg 에서의 정적 배치 사용 예

바닥 타일 (단 부숴지지 않아야 함)
마법으로 무너지지 않는 고정 배경 사물
먼 큰 산 같은 환경 메시
조명이 고정일 때

 


정적 배치 사용하면 안되는 사례


흔들리는 깃발
흐르는 물
파괴 가능한 돌
조명이 깜빡거리거나 변할 때
색상이 변경되는 오브젝트
동적 프로브 영향 받을 때

+

 

 

SRP Batching

 

글로벌 설정임

하나의 오브젝트마다 설정은 불가능

프로젝트 세팅 퀄리티
urp 인스펙터 창 
쇼 에디셔널 프로퍼티스
SRP 배쳐 온

 

 

 


셋 페스 콜을 8 to 3 으로 줄이는 효과

 

 

각 머티리얼 달라도 (아틀라스 안 써도) 최적화가 되는 모습

 

단, 

하나의 셰이더 공통적인 셰이더만 사용해야 한다는 조건이 있음

 

 

셰이더가 SRP 배치 호환가능한지 체크 해야함

 

인스펙터 창에 나와 있음

 

 

 

 

+

 

GPU 인스턴싱

 

 

urp 인스펙터 

SRP Batcher 끄기

 

해 마테리알

GPU instancing 키기

 

 

 

 

 

이렇게 여러 개를 쓸 때 배치 아낄 수 있음

 

 

같은 메쉬와 같은 마테리알을 지닌

여러 복제품 렌더할 때 쓰임

 

각 인스턴스는 트랜스폼을 다르게 할 수 있는 게 장점

위치 크기 회전 을 각각 다르게 넣어도 

 

 

 

3d srpg 에서는 이렇게 사용

 

풀 잔디

군대 npc

화살 투사체

 

 

주의점

 

하나의 오브젝트에 256 개 미만의 버텍스 를 가지고 있다면

(간단한 오브젝트라면)

gpu 인스턴싱 쓰는 게 더 비효율적

 

 

+

 

 

 3d srpg 에서 배칭 최적화 전략 요약

 

SRP Batcher ㅡ 끄기  (gpu 인스턴싱과 충돌)
SRP 배칭만 쓰기


정적 배칭 ㅡ 맵, 장식

GPU 인스턴싱 ㅡ 소환수, 잔디, 군대

아틀라스 텍스쳐 사용


gpu 인스턴싱 안쓰기

정적 배칭 안쓰기

아틀라스 안쓰기
   
 

이거 추천
   
  URP 또는 HDRP를 쓰는 프로젝트에서
 SRP Batcher는 기본 활성화
반응형
Posted by 이름이 익명
: