그룹 간의 빈 공간에 집착하는 이유
그룹화된 2D 네스팅, 경계선 문제, 그리고 Pressria Bridge를 구축하며 배운 것들에 대하여.
네스팅의 쉬운 절반
갱잉(ganging) 소프트웨어 데모를 본 적이 있다면, "하나의 시트에 낭비되는 공간 없이 많은 작업물을 빽빽하게 채워 넣습니다"라는 전형적인 홍보 문구를 접해 보셨을 것입니다. 트루 쉐이프(True-shape) 네스팅이죠. 스티커로 하는 테트리스라고 할 수 있습니다.
비슷한 항목들을 조밀하게 포장하는 그 부분은 이미 잘 알려져 있습니다. 수십 년간의 연구, 수십 개의 오픈 소스 라이브러리, 그리고 수많은 상용 구현체들이 존재합니다. 휴리스틱을 선택하고, 항목을 입력하면 레이아웃이 나옵니다.
진짜 문제는 그 다음에 일어나는 일입니다.
진짜 문제: 분류(Sorting)
인쇄기에서 시트가 나와 재단기를 거치고 나면, 누군가는 그 결과물을 분류해야 합니다. 같은 디자인은 같은 봉투에, 다른 주문은 다른 상자에 넣어야 하죠.
트루 쉐이프 네스팅은 시트 활용도를 극대화하지만, 그 결과물은 뒤죽박죽이 됩니다. 인쇄기 조작자에게는 아름다워 보일지 모르지만, 주문을 배송해야 하는 사람에게는 악몽입니다.
이에 대한 업계의 대응은 격리된 섹션 갱판(isolated-section ganging)이었습니다. 재단 후 분류가 쉬워지도록 각 작업물에 시트상의 고유한 직사각형 영역(zone)을 할당하는 방식입니다.
효과는 있습니다. 하지만 낭비도 심합니다.
그룹 연속성을 유지하는 플로우 네스팅(Flow Nesting)
현재 우리의 접근 방식은 다음과 같이 작동합니다:
- 동일한 디자인을 슈퍼 아이템(super-items)으로 그룹화합니다. 동일한 디자인이 정렬되고 같은 방향을 향하고 있는 하나의 행을 의미합니다.
- 플로우(흐름) 순서에 따라 슈퍼 아이템을 배치합니다. 가장 큰 그룹부터 시작하여 왼쪽에서 오른쪽으로, 위에서 아래로 흘러가듯 배치합니다.
- 행 경계를 넘어 그룹의 연속성을 보존합니다. 그룹이 행을 넘어가더라도 연속해서 배치된 다음 다른 그룹으로 전환됩니다.
- 남는 공간(negative space)은 싱글톤으로 채웁니다. 모든 슈퍼 아이템이 배치되고 나면, 그룹이 없는 단일 항목들이 틈새에 패킹됩니다.
그 결과: 그룹의 연속성이 보존되어 분류가 쉽고, 영역으로 인한 죽은 공간이 없으며, 그룹 내의 빈틈은 싱글톤으로 채워져 높은 활용도를 달성합니다.
어려운 부분은 그룹 '내부'가 아닙니다
우리가 배운 것은 다음과 같습니다. 그룹 내부를 패킹하는 것은 쉬운 절반입니다. 어려운 나머지 절반은 크기와 모양이 다른 그룹들 사이의 경계입니다.