Unity Batching & render pass

 https://mathmakeworld.tistory.com/61


https://docs.unity3d.com/kr/2021.1/Manual/SRPBatcher.html

Static Batching

Static Batching은 움직이지 않고 같은 Material을 공유하는 Object들을 랜더링할 때 적용되는 방식입니다.

조건이 만족하는 Object들에 대해 옵션을 켜줌으로써 활성화 할 수 있습니다.

각 Object의 Mesh 정보를 한 곳에 모으고 World Space로 Transform한 것을 따로 모으는 방식으로 적용됩니다.

즉 작은 여러 개의 Static Mesh들을 각각의 Model Transform Matrix로 World Space로 옮긴 후 하나의 Vertex, Index Buffer에 넣고 따로 Model Transform을 하지 않는 것입니다. 

 

따라서 추가적으로 하나의 큰 Mesh 정보를 한 곳에 모아야 하기 때문에 더 많은 메모리가 소요된다는 단점이 있습니다.

단, DrawCall간의 Render State 변화를 확실히 줄일 수 있고 World Space로 Transform하는 것을 그래도 GPU를 이용해서 함으로 속도는 확실히 빨라집니다.

 

움직이지 않는 Object에 대해서는 이 외에도 속도 최적화 요소가 많으므로 사용할 수 있는 상황이라면 사용하는게 대부분 좋습니다.

 

Dynamic Batching

Dynamic Batching은 따로 설정하지 않아도 조건만 만족하면 자동으로 해줍니다.

조건을 간략하게 설명하면, Vertex 정보가 많지 않고, 같은 Material을 사용하고, Multi Render Pass를 사용하지 않을 때 등입니다.

World Space로 Transform을 하는 것을 CPU에서 처리하고 나머지를 한 DrawCall로 처리하는 방식입니다.

 

CPU를 이용해 World Space로 Transform하는데 걸리는 시간 < GPU를 이용해 World Space로 Transform하는데 걸리는 시간 + Render State를 바꿔서 Draw하는데 걸리는 시간인 경우 사용합니다.

 

SRP Batcher

다음은 Scriptable Render Pipeline이 나오면서 추가된 SRP Batcher입니다.

자세한 내용은 아래 참고 자료에 있습니다.

 

기존 방식과 SRP Batcher의 동작 방식 차이는 아래와 같습니다.

댓글

이 블로그의 인기 게시물

About AActor!!! "UObject" has no member "BeginPlay"

UNREAL Android build information

C++ 생성자 위임 (delegating constructor)