원문 캡처 · sourcebot.dev
원문 캡처 · sourcebot.dev

언리얼 엔진용 복셀 페인팅 도구의 설계 계획을 3,000줄 넘게 다듬은 뒤, 개발자는 AI 에이전트에 구현을 맡겼다. 에이전트는 14시간 동안 개입 없이 2만5,000줄이 넘는 코드를 작성했고, 편집기에서 실행되는 플러그인을 만들었다. 다만 사용자 인터페이스와 일부 구현에는 사람이 손봐야 할 문제가 남았다.

플러그인은 세계 안에 3차원 볼륨을 배치하고 그 안의 표면에 칠하는 도구다. 페인팅 결과를 GPU 상태로 갱신하고 저장·불러오기와 실행 취소·다시 실행을 지원해야 하며, 머티리얼이 결과를 읽고 볼륨이 월드와 함께 스트리밍되도록 해야 한다. 개발자는 언리얼 엔진의 규모와 복잡성을 고려해, 숙련된 프로그래머라면 보통 몇 달이 걸릴 작업을 시험 대상으로 삼았다.

개발자는 먼저 Fable에 플러그인 설명을 제공하고 질문을 주고받아 초안을 만들었다. 계획이 약 1,000줄에 이르자 마크다운으로 읽고 검토하기 어렵다고 판단해, 이를 HTML로 보여주는 VS Code 확장 프로그램을 만들었다. 메모를 남기고 에이전트가 계획을 고친 뒤 여러 검증 에이전트가 변경 사항을 확인하는 방식도 추가했다. 계획 전체를 매번 다시 출력하는 대신 확장 프로그램 안의 계획을 직접 수정하도록 바꾸자, 수정 비용과 무관한 텍스트의 변화가 줄었다.

계획 단계에서 가장 큰 난관은 사람이 미리 예상하기 어려운 문제를 찾아내는 일이었다. 개발자는 보안·실현 가능성·일관성·메모리·성능 등 관점별로 계획을 살피게 하고, 발견된 문제를 근거와 예상 결과에 따라 별도 에이전트들이 검증하도록 했다. 하지만 문제를 잘 찾아내는 Sol은 실제로는 거의 일어나지 않을 상황까지 잇달아 제기했다. 각각을 고치다 보면 설계가 복잡해지고, 새로 추가한 구조가 다시 검토 대상이 되는 순환도 생겼다.

이를 줄이기 위해 개발자는 문제를 찾는 에이전트와 해결책을 설계하는 에이전트의 역할을 나눴다. 문제를 찾는 쪽이 발생 시나리오와 결과, 근거를 제시하면 설계 담당 에이전트가 해결책을 제안하고 서로 검토한다. 또 사람이 작성한 지침을 적용하는 분류 단계를 넣어, 실제로는 드물고 대응 비용이 정당화되지 않는 문제를 걸러냈다. 예컨대 아티스트가 페인팅 도중 데이터를 버전 관리에 제출하려는 상황은, 편집기 전체가 충돌할 수 있는 경우가 아니라면 새로운 복잡성을 추가해 대응할 이유가 없다고 지침에 적었다.

Fable을 해결책 설계 담당으로, Sol을 문제를 따져보는 지원 담당으로 조합한 뒤 계획은 안정 단계에 들어섰다. Sol을 이용한 검토를 여러 차례 반복해도 설계 결정을 바꿀 만한 문제가 나오지 않자, 개발자는 계획을 완성된 것으로 판단했다. 이후 Fable에 계획과 작업 흐름을 맡기고 처음부터 끝까지 개입하지 말라고 요청했다.

완성된 도구에서는 장면에 볼륨을 놓고 크기와 브릭 해상도를 설정한 뒤, 브러시로 칠하고 채널별로 결과를 편집할 수 있었다. 지우기와 영역 채우기, 반전도 가능했고, 머티리얼에서 결과를 샘플링해 셰이딩에 사용할 수 있었다. 볼륨을 복제하거나 이동하는 동작도 기대한 대로 작동했다고 개발자는 설명했다.

다만 결과물은 완벽하지 않았다. UI는 정돈되지 않았고 사용하기 직관적이지 않았다. 렌더 그래프에서 어서션이 발생했으며, 비대칭 경계 상자에서 중심점을 다시 계산하지 않는 문제도 있었다. 희소한 데이터 구조의 모든 항목에 연산을 실행하는 컴퓨트 셰이더 몇 개는 필요한 양보다 10배 많은 작업을 수행했다. 개발자는 이런 문제가 설계 결함보다는 구현 세부 사항에 해당해 수정할 만했다고 평가했지만, 사람의 개입은 여전히 필요하다고 밝혔다.

부록에서는 메모리를 줄이기 위해 페인트 데이터를 여러 볼륨이 공유하는 3차원 텍스처에 저장하고, 이를 8×8×8 브릭으로 나누는 방식을 설명한다. 브릭 경계에서는 이웃 브릭의 데이터를 복사해 샘플링 문제를 막지만, BC7 압축은 4×4 텍셀 블록 단위로 이뤄져 같은 데이터를 복사한 경계가 서로 다르게 복원될 수 있다. 샘플 위치가 경계를 오가면 카메라 움직임에 따라 표면이 반짝이는 현상이 나타날 수 있다는 문제를 Sol이 계획 단계에서 찾아냈다고 개발자는 전했다.

개발자는 이번 실험을 통해 에이전트가 복잡한 계획을 다듬는 데 도움을 줄 수 있고, 계획이 충분히 안정된 뒤에는 구현 전체를 한 번에 맡길 수도 있다고 결론지었다. 다만 성과의 핵심은 첫 초안을 그대로 구현한 데 있지 않았다. 검토와 분류, 조사, 수정, 검증을 반복해 설계 결정을 바꿀 문제를 먼저 걷어낸 과정이 대부분의 작업을 차지했다.

구현은 GitHub 저장소에서 확인할 수 있다. 계획 작업에 사용한 도구는 개발자가 만든 실험용 VS Code 확장 프로그램이며, 공개적으로 사용할 수 있는 상태라고 원문은 밝히지 않았다.