마스코트로 제품 광고를 만들면 실제로 무엇이 나오는지 궁금한 분을 위한 글입니다. 방법론은 앞 글에 적었고, 여기에는 완성된 결과물을 그대로 싣습니다. 브랜드 필름 한 편과 제품별 광고 일곱 편이고, 캐릭터별 학습은 하지 않았습니다.

먼저, 일곱 제품을 한 편으로

25초짜리 브랜드 필름입니다. 빈 유리 아트리움에서 시작해 일곱 마스코트가 각자의 세계에서 한 박자씩 맡습니다.

브랜드 필름 여덟 샷 여덟 샷입니다. 세계는 매번 바뀌고 캐릭터는 각자 유지됩니다.

이 편은 앞의 일곱 편과 만드는 방식이 다릅니다. 캐릭터를 조건으로 주는 것에 더해, 캐릭터가 어떻게 움직일지를 동작 영상으로 같이 넣었습니다. 그 영상은 레퍼런스 스틸 한 장을 파이썬으로 늘이고 줄여 만든 회색 판때기입니다. 배경도 소품도 없고 실루엣만 움직입니다. 세계는 전부 모델이 지었습니다.

이 방식을 쓰게 된 경위와 그 과정에서 나온 숫자는 글 뒤쪽에 적었습니다.

제품별 광고 일곱 편

각 42초입니다.

Paxis

업무 자동화 제품입니다. 우주선 함교가 흔들리고 콘솔마다 붉은 경보가 터지는 데서 시작합니다.

Metis

추론과 토큰을 다루는 제품이라 공장 라인을 세계로 잡았습니다. 병입 컨베이어와 증기가 그 은유입니다.

Maxis

모델을 길러 내는 제품입니다. 정글에서 덩굴을 걷어내고 싹을 틔우는 쪽으로 갔습니다.

Telox

GPU를 실어 나르는 제품이라 증기 기관차와 철로를 세계로 썼습니다.

Velox

가상화를 걷어낸 속도가 주제입니다. 폭풍이 치는 부두 위를 달립니다.

Aegis

폐쇄망 안에서 버티는 제품입니다. 불타는 벌판에서 물러서지 않는 금고로 그렸습니다.

Signum

신원을 먼저 묻는 제품이라 밤 골목을 세계로 잡았습니다.

어느 방법으로 만들었나

일곱 편이 같은 방법으로 만들어지지 않았습니다. 캐릭터 스틸을 조건으로 주는 방법과 스토리보드 시트를 조건으로 주는 방법을 제품마다 골랐는데, 고르는 규칙을 먼저 정하고 그 규칙에 맡겼습니다. 컷이 적은 쪽이 이기고, 다만 정체성이 0.05를 넘게 벌어지면 그쪽으로 뒤집습니다.

정체성 평균이 0.636 대 0.617로 붙어 있고 컷 수는 중앙값 15개 대 5개로 벌어졌으니, 실제로 갈리는 축에 결정을 맡기고 안 갈리는 축에는 큰 문턱을 둔 셈입니다. 규칙을 돌리자 다섯 편이 스토리보드로, 두 편이 스틸로 갔습니다. 스틸로 남은 둘은 이유가 분명합니다. Metis는 스토리보드 쪽 컷이 26개로 튀어 오른 유일한 예외였고, Telox는 정체성이 0.063 벌어져 문턱을 넘었습니다.

최종 일곱 편 일곱 편을 한 장에 놓았습니다. 세계는 제품마다 다르고 캐릭터는 각자 유지됩니다.

만들면서 고친 것

해상도 기본값. 처음 뽑은 편들이 눈에 띄게 흐렸는데 원인이 생성 해상도 832×480이었습니다. 스크립트 기본값이었고 아무도 올리지 않았습니다. 1280×720으로 바꾸자 비트레이트가 0.41 Mbps에서 3.0 Mbps로 올라갔습니다. 거기에 재인코딩이 세 번 겹쳐 화질을 더 깎고 있었습니다. 지금은 중간 단계를 무손실급으로 두고 마지막에 한 번만 압축합니다.

끝 카드 잘림. 제품 이름과 슬로건이 들어가는 카드를 832픽셀 화면에 877픽셀로 그린 적이 있습니다. 폭을 계산해 놓고 그 값을 확인하지 않았습니다. 지금은 카드를 영상과 같은 해상도로 그리고, 안전 영역을 넘으면 글자를 줄이며, 어떤 크기로도 안 들어가면 예외를 던집니다. 폭을 계산하는 코드는 그 폭에 대한 검사도 함께 져야 합니다.

학습 클립의 잘림. 이 프로젝트는 한 번 어댑터 여덟 종을 통째로 버렸습니다. 학습 클립 48개 중 38개에서 캐릭터가 프레임 밖으로 잘려 있었고, 한 캐릭터는 열두 개 전부 잘렸습니다. 그런데 모든 지표가 통과했습니다. 지표가 물은 것이 “일관적인가”였고 아무도 “쓸 만한가”를 묻지 않았기 때문입니다. 잘린 것끼리 일관되면 일관성 점수는 오히려 올라갑니다.

학습은 하지 않았습니다

일곱 편 어디에도 캐릭터별 학습이 들어가지 않았습니다. 스틸 넉 장이나 시트 한 장이 전부이고 소리도 모델이 함께 만듭니다. 준비 시간이 없다는 것이 학습 경로와의 가장 큰 차이입니다.

같은 캐릭터로 어댑터를 400스텝 학습시킨 결과도 갖고 있습니다. 정체성 점수가 0.560이었습니다. 이후 실험에서 학습 없이 동작 지시만 넣는 방식이 같은 캐릭터, 같은 평가기, 같은 레퍼런스에서 0.704를 냈습니다. 프롬프트 세트가 서로 달라 통제된 비교는 아니지만, 큰 영상 모델이 이미 아는 것을 다시 가르치기보다 무엇을 그릴지만 지시하는 편이 싸게 먹힌다는 방향은 읽힙니다.

남은 한계

정체성 지표로 쓴 CLIP-I는 프레임 전체를 보기 때문에 배경이 비슷하면 점수가 올라가고, 캐릭터 형태가 무너져도 색과 실루엣이 남으면 잘 떨어지지 않습니다. 상대 비교로는 쓸 만하지만 절대 품질로 읽으면 안 됩니다.

그리고 이 방식은 아직 동작 어휘가 좁습니다. 지금 확실히 전달되는 것은 다가오기와 도약 둘이고, 느린 정면 밀어넣기처럼 미묘한 동작은 모델이 무시했습니다. 광고 한 편을 지탱하려면 어휘가 더 필요합니다. 그것이 다음 작업입니다.

동작 영상을 넣는 방식은 어떻게 나왔나

브랜드 필름에 쓴 방식은 세 번 실패한 뒤에 나왔습니다. 캐릭터가 움직이는 영상을 조건으로 넣는 경로가 원래 있었는데, 세 번 다 결과가 납작한 만화처럼 나왔고 원본 배경이 그대로 비쳤습니다. 이 스택으로는 안 되는 축이라고 적어 두었습니다.

틀린 판단이었습니다. 파이프라인에는 그 조건의 강도를 정하는 값이 있는데 세 번 모두 건드리지 않았습니다. 기본값이 최대치이고, 최대치에서는 모델이 지시 영역 바깥을 통째로 검게 지웁니다. 저희가 “배경이 샌다”고 읽은 그림이 사실은 세계를 지운 그림이었습니다. 강도를 0.6으로 낮추자 모델이 지시를 따르면서 세계도 지었습니다.

그다음 확인한 것이 이 방식이 캐릭터를 가리지 않는가입니다. 골격이 서로 다른 넷을 골라 두 동작씩 돌렸습니다. 둥근 물방울, 뾰족한 별, 바퀴 달린 사각, 납작한 연입니다. 여덟 편 모두 정체성을 유지했고 평균 0.715, 최저 0.670이 나왔습니다. 뼈대를 공유하지 않는 몸에 같은 동작이 옮겨 간 셈입니다.

한 번 더 틀린 것도 적어 둡니다. 그 여덟 편 중 네 편에서 프레임 일부가 검게 죽었고, 저희는 그것을 “다가오는 동작이 화면을 비운다”로 읽을 뻔했습니다. 그런데 도약은 밝은 온실에서, 다가오기는 어두운 밤거리에서 돌렸으니 동작과 장면을 함께 바꾼 셈이었습니다. 빠진 두 칸을 채워 보니 답이 갈렸습니다. 동작은 검은 프레임에 기여하지 않았고(12.4 대 12.3), 장면이 전부였습니다(낮 0.0 대 밤 24.7). 밝은 장면 여덟 칸은 예외 없이 0이었습니다.

브랜드 필름의 여덟 세계를 전부 대낮으로 잡은 것이 그래서입니다.

지표가 다섯 번 눈과 어긋났습니다

이 작업에서 가장 자주 걸린 함정은 모델이 아니라 지표였습니다.

정체성 지표는 프레임 전체 임베딩을 보기 때문에 색이 틀려도 잘 떨어지지 않습니다. 브랜드 필름에서 Paxis가 주황이 아니라 진갈색으로 나온 적이 있는데, 그 편의 정체성 점수는 0.731로 멀쩡했습니다. 결국 캐릭터 중앙부 RGB를 레퍼런스와 직접 재서 잡았습니다. 렌더가 (99, 52, 22), 레퍼런스가 (236, 137, 23), 거리 161이었습니다. 아트리움을 차가운 청백색으로 발주했더니 주황이 그 빛을 따라간 것이었고, 따뜻한 오후 햇빛으로 바꾸자 거리가 90으로 좁혀졌습니다.

수직 위치를 재서 점프를 따르는지 보려 한 적도 있습니다. 배경을 가장 흔한 밝기로 잡는 방식이라 온실 식물을 피사체로 집어서, 분명히 뛰고 있는 편을 “거의 안 움직인다”고 보고했습니다. 프레임을 눈으로 늘어놓고서야 알았습니다.

자동 지표가 눈과 다투면 대개는 지표가 다른 것을 재고 있습니다. 그럴 때 지표를 믿고 넘어가면 잘못된 결론이 그대로 배포됩니다.

태그: ad-production, character-consistency, mascot, video-generation

카테고리:

업데이트: