제품 마스코트로 광고 영상을 만들려는 분이라면 첫 결정이 “캐릭터를 무엇으로 붙잡을 것인가”입니다. 저희는 두 가지를 같은 시나리오와 같은 40초로 일곱 제품에 돌려 재봤고, 정체성은 거의 갈리지 않았습니다. 갈린 것은 컷 수였습니다. 그리고 진작 포기했던 셋째 방법이 사실은 파라미터 하나 때문에 죽어 있었다는 것도 뒤늦게 알았습니다.

최종 일곱 편 제품마다 한 편씩, 각 42초입니다. 어느 방법으로 만들었는지는 제품마다 다릅니다.

두 가지 방법

두 방법 모두 출발점은 같습니다. 이미지 모델로 만든 1024×1024 캐릭터 스틸 넉 장입니다.

첫째는 그 스틸을 영상 모델에 그대로 조건으로 줍니다. 프롬프트에 캐릭터를 산문으로 기술하고 스틸이 생김새를 잡습니다. 둘째는 스틸에서 3×3 시네마틱 스토리보드 시트를 먼저 그리고 그 시트를 조건으로 줍니다. 시트에는 아홉 개 패널마다 타임코드와 카메라 지시가 손글씨로 적혀 있습니다. 생김새만이 아니라 구도까지 같이 넘어갑니다.

스토리보드 시트 아홉 패널짜리 시트입니다. 각 칸 아래에 타임코드와 카메라 지시가 붙습니다.

일곱 제품 전부를 두 방법으로 만들었습니다. 시나리오와 길이, 시드와 해상도를 고정했으니 다른 것은 조건화 방식 하나뿐입니다.

정체성은 생각보다 안 갈립니다

레퍼런스 스틸 대비 CLIP-I 평균이 스틸 쪽 0.636, 스토리보드 쪽 0.617이었습니다. 차이가 0.019입니다. 일곱 중 다섯에서 스틸이 앞서고, 둘에서는 스토리보드가 앞섭니다.

저희가 먼저 틀렸던 이야기를 적어 둡니다. 처음에는 두 제품만 재고 “스토리보드는 정체성을 깎는다”고 결론 냈습니다. 그 두 제품에서 차이가 각각 0.047과 0.049였습니다. 눈으로 봐도 시트를 거친 쪽이 확실히 달라 보였습니다. 일곱으로 늘리자 평균 차이가 절반 아래로 줄었습니다. 두 제품에서는 부호까지 뒤집혔습니다. 방향은 맞았지만 크기를 두 배 넘게 과장했고, 그것을 “확인했다”고 불렀습니다.

정체성과 컷 수 왼쪽이 정체성, 오른쪽이 40초에 들어간 컷 수입니다. 왼쪽은 붙어 있고 오른쪽은 벌어집니다.

갈리는 것은 컷 수입니다

같은 40초인데 컷 수는 스틸 쪽 중앙값 15개, 스토리보드 쪽 5개였습니다. 일곱 중 여섯에서 스틸 쪽이 더 많이 끊었습니다. 남은 하나는 반대로 크게 벌어져서, 스토리보드 쪽이 26개로 스틸 쪽 10개를 훌쩍 넘겼습니다.

이유는 시트가 하는 일을 생각하면 자연스럽습니다. 시트는 구도를 정해 주기 때문에 모델이 장면을 덜 바꿉니다. 결과물은 차분합니다. 반대로 스틸만 주면 모델이 매 순간 프레임을 다시 잡고, 클로즈업과 와이드가 섞여 영화처럼 읽힙니다. 어느 쪽이 맞는지는 취향이 아니라 목적이 정합니다. 제품을 차분히 보여줘야 하면 시트, 시선을 붙잡아야 하면 스틸입니다.

시트는 구도만 옮기지 않습니다

숫자 밖에서 눈에 띈 것이 하나 있습니다. 저희 마스코트는 둥근 물방울 형태인데, 시트를 거친 쪽은 몸이 더 뾰족하고 길어졌습니다. 허리에 두른 남색 띠가 어깨에서 내려오는 사선 새시로 바뀐 캐릭터도 있었습니다.

시트를 연필 스케치로 그렸기 때문입니다. 스케치는 형태를 단순화하면서 비율을 조금씩 바꾸고, 그 비율이 영상까지 따라옵니다. 구도를 통제하려고 도입한 장치가 실루엣까지 같이 옮겨온 셈입니다. 시트를 쓸 거라면 스케치 스타일을 원본 렌더에 가깝게 잡는 편이 안전합니다.

두 방법 비교 같은 제품, 같은 시점입니다. 왼쪽이 스틸 조건화, 오른쪽이 스토리보드 조건화입니다.

기본값이 두 번 우리를 속였습니다

처음 뽑은 광고가 눈에 띄게 흐렸는데, 원인이 조건화 방식이 아니었습니다. 생성 해상도가 832×480에 머물러 있었습니다. 그 값이 스크립트의 기본값이었고 아무도 올리지 않았습니다. 1280×720으로 바꾸자 같은 파이프라인에서 비트레이트가 0.41 Mbps에서 3.0 Mbps로 올라갔습니다.

거기에 저희가 한 번 더 깎고 있었습니다. 컷을 자르며 한 번, 이어붙이며 한 번, 배포용으로 압축하며 한 번, 재인코딩이 세 번 겹쳐 있었습니다. 중간 단계를 무손실급으로 두고 마지막에 한 번만 압축하면 됩니다.

두 번째 기본값은 더 비쌌습니다. 저희에게는 셋째 방법이 있었습니다. 캐릭터가 움직이는 영상을 따로 만들어 그것을 동작 지시로 넣는 방식입니다. 세 번 시도했고 세 번 다 결과가 납작한 만화처럼 나왔습니다. 소스 배경이 그대로 비쳤고, 얼굴에서 눈이 뭉개졌습니다. 저희는 이 스택으로는 안 되는 축이라고 적어 두었습니다.

그 판단이 틀렸습니다. 파이프라인에는 동작 지시의 강도를 정하는 값이 있는데, 세 번 모두 그 값을 건드리지 않았습니다. 기본값이 최대치였고, 최대치에서는 모델이 지시 영역 바깥을 통째로 검게 지웁니다. 저희가 “소스 배경이 샌다”고 읽은 그림이 사실은 지시 영역만 남기고 세계를 지운 그림이었습니다.

조건 강도 세 단계 같은 지시, 같은 프롬프트입니다. 강도만 0.3, 0.6, 1.0으로 바꿨습니다.

강도를 세 단계로 쓸어 보니 답이 한눈에 나왔습니다. 0.3에서는 모델이 온실을 아름답게 짓지만 지시를 무시하고 그냥 서 있습니다. 1.0에서는 지시를 정확히 따르는 대신 세계가 사라집니다. 0.6이 둘을 동시에 합니다. 온실 통로가 원근으로 물러나고, 화분과 풀이 서 있고, 그 안에서 캐릭터가 웅크렸다가 떠올랐다가 내려앉습니다. 정체성 점수도 0.704로 세 단계 중 가장 높았습니다.

동작 지시로 넣은 소스는 캐릭터 스틸 한 장을 파이썬으로 늘이고 줄여 만든 무지 회색 판때기 하나였습니다. 세계는 전부 모델이 지었습니다.

화질이든 품질이든 문제를 만나면 모델을 의심하기 전에 기본값부터 세어 보십시오. 저희는 같은 함정을 두 번 밟았고, 두 번째는 축 하나를 통째로 포기할 뻔했습니다.

무엇을 골라 내보냈나

일곱 편을 실제로 배포하려면 제품마다 하나를 정해야 했습니다. 취향으로 고르지 않으려고 규칙을 먼저 정했습니다. 컷이 적은 쪽이 이기고, 다만 정체성이 0.05를 넘게 벌어지면 그쪽으로 뒤집습니다. 컷 수가 실제로 갈리는 축이고 정체성은 안 갈리니, 안 갈리는 축에 큰 문턱을 두는 편이 맞습니다.

규칙을 돌리자 다섯 제품이 스토리보드로, 둘이 스틸로 갔습니다. 스틸로 남은 둘은 이유가 분명합니다. 하나는 스토리보드 쪽 컷이 26개로 튀어 오른 그 예외였고, 다른 하나는 정체성이 0.063 벌어져 문턱을 넘었습니다.

최종본은 일곱 편 모두 1280×720에 42초입니다. 마지막 재인코딩은 한 번뿐이고, 끝에 붙는 제품 카드는 영상과 같은 해상도로 그립니다. 카드 글자는 폭을 재고 나서 안전 영역 안에 들어갔는지 검사까지 합니다. 예전에 폭을 계산해 놓고 확인은 안 해서 832픽셀 화면에 877픽셀 글자를 그린 적이 있습니다. 폭을 계산하는 코드는 그 폭에 대한 검사도 함께 져야 합니다.

학습은 필요한가

여기 나온 세 방법은 모두 캐릭터별 학습을 하지 않습니다. 스틸 넉 장이나 시트 한 장, 혹은 판때기 영상 하나가 전부입니다. 소리까지 모델이 함께 만듭니다.

저희는 같은 캐릭터로 어댑터를 학습시킨 결과도 갖고 있습니다. 400스텝을 돌려 얻은 정체성 점수가 0.560이었습니다. 학습을 전혀 하지 않은 동작 지시 방식이 같은 캐릭터, 같은 평가기, 같은 레퍼런스에서 0.704를 냈습니다. 다만 프롬프트 세트가 서로 달라 통제된 비교는 아닙니다. 지금 손에 있는 가장 비교 가능한 숫자라는 선까지만 말씀드립니다.

그래도 방향은 분명해 보입니다. 큰 영상 모델은 사물이 어떻게 움직이는지 이미 압니다. 학습으로 그것을 다시 가르치기보다, 무엇을 그릴지만 지시하는 편이 싸고 잘 먹혔습니다.

한계

정체성 지표로 쓴 CLIP-I는 프레임 전체의 임베딩을 보기 때문에 배경이 비슷하면 점수가 올라갑니다. 캐릭터 형태가 무너져도 색과 실루엣이 남으면 잘 떨어지지 않습니다. 이번 비교에서 두 방법의 배경 조건이 같았으므로 상대 비교로는 쓸 만하지만, 이 숫자를 절대 품질로 읽으면 안 됩니다.

지표에 한 번 더 속은 이야기도 적어 둡니다. 강도 스윕에서 캐릭터의 수직 위치를 프레임마다 재서 점프를 따르는지 보려 했는데, 0.6 구간이 거의 안 움직이는 것으로 나왔습니다. 배경을 가장 흔한 밝기로 잡는 방식이라 온실 식물을 피사체로 집은 탓이었습니다. 프레임을 눈으로 늘어놓고서야 잡았습니다. 자동 지표가 눈과 다투면 대개는 지표가 다른 것을 재고 있습니다.

여기 실린 수치는 사내 GPU에서 실제로 생성한 열일곱 편을 잰 값입니다.

태그: ad-production, character-consistency, 평가, storyboard, video-generation

카테고리:

업데이트: