선생님: 오늘은 렌더링 파이프라인에서 동적 배칭(dynamic batching)과 정적 배칭(static batching)에 대해 이야기해 볼게요. 먼저 동적 배칭과 정적 배칭이 해결하고자 하는 문제가 무엇인지 알아보도록 하죠. 이들 배칭 방법의 주요 목표는 현재 뷰의 모든 오브젝트를 렌더링하는 데 필요한 드로우 콜(draw calls)의 수를 줄이는 것입니다.
학생: 드로우 콜은 무슨 뜻인가요?
선생님: 드로우 콜은 CPU가 GPU에 객체를 그려달라고 부탁하는 요청을 보내는 거예요. 화면에 물체를 그려달라고 GPU에 요청하는 것과 비슷하죠.
학생: 렌더 상태(Render State)란 무엇인가요?
선생님: 랜더 상태(Render State)는 오브젝트를 렌더링하기 직전에 렌더링 파이프라인을 준비할 수 있도록 구성해야 하는 방대한 양의 설정 배열을 의미해요. 이러한 설정에는 그려야 할 메시, 사용할 텍스처 및 셰이더, 오브젝트의 위치, 회전 및 스케일을 고려한 오브젝트 그리기 지점 등이 포함되죠. 랜더 상태 설정을 변경하는 데는 시간이 오래 걸리므로 GPU의 처리 시간에도 영향을 미칠 수 있어요.
학생: 커맨드 버퍼는 무엇인가요?
선생님: 커맨드 버퍼는 CPU가 생성한 명령어를 담은 대기열이에요. Unity는 커맨드 버퍼에 새 명령을 밀어넣고, GPU는 기존 명령이 완료될 때마다 이 버퍼로부터 새 명령을 가져와요.
학생: 배칭이란 무엇인지 알려주세요.
선생님: 배칭이란 렌더링 프로세스의 성능을 향상시키는 방법이에요. 두 개의 오브젝트가 정확히 동일한 렌더 상태 정보를 공유할 경우, 마지막 오브젝트를 완료한 후에도 동일한 렌더 상태가 유지되기 때문에 GPU는 새로운 오브젝트를 즉시 렌더링할 수 있어요. 따라서 렌더 상태 동기화로 인해 낭비되는 시간을 없애고 CPU와 GPU 양쪽의 작업 부하를 줄일 수 있지요.
학생: 그러면 동적 배칭과 정적 배칭의 차이점은 무엇인가요?
선생님: 동적 배칭은 동일한 머티리얼을 가진 오브젝트를 그룹으로 묶는 반면, 정적 배칭은 Unity 에디터에서 스태틱으로 표시된 오브젝트만을 그룹으로 묶어요. 따라서 동적 배칭은 움직이는 오브젝트를 처리하는 데 적합하고, 정적 배칭은 움직이지 않는 오브젝트를 처리하는 데 알맞습니다.
학생: 아, 이제 개념이 잡히네요. 감사합니다, 선생님!
더 공부할 자료 - 개발 능력 다양화를 위한 학습의 필요성
유니티 엔진의 대안으로서, 인디 개발자들에게 선풍적인 인기를 끌고 있는 엔진이 바로 고도 엔진입니다. 혹시 고도 엔진을 배워 보려고 하신다면, 다음의 온라인 강의를 체크해 보시기 바랍니다.