캐릭터 동작을 도시 지도 위에 올려 보여주는 작업이었다. 도시 데이터는 이미 있다. 가로세로 3,454미터, 물체 22,324개. 건물·도로·가로수·차까지 다 들어 있다.
캐릭터를 그 위에 세우고 영상을 뽑았다. 여섯 편 다 정상 크기로 나왔다. 이번엔 0바이트가 아니었다.
열어보니 회색 바닥뿐이었다
영상에서 한 장면을 뽑아 눈으로 봤다. 캐릭터는 잘 서 있다. 그런데 배경이 어두운 회색 바닥 하나다. 건물도, 도로도, 나무도 없다.
도시 위에 올렸다는 걸 화면으로는 아무도 알 수 없는 영상이었다.
원인은 두 개가 겹쳤다. 첫째, 캐릭터를 세운 자리를 “평평한 곳”이라는 조건으로 골랐는데, 그렇게 고른 44곳이 대부분 건물 없는 빈터였다. 둘째, 카메라를 캐릭터 뒤 3.4미터에 붙여놨더니 화면이 아스팔트로 꽉 찼다.
자리와 카메라를 숫자로 다시 골랐다
자리는 조건을 바꿨다. 도로 495개를 훑어서 반경 45미터 안에 건물이 4채 이상인 지점만 남겼다. 23곳이 나왔고, 제일 많은 곳은 건물이 14채였다.
카메라는 세 가지 안을 사진으로 뽑아 비교했다. 기존 안은 도시가 아예 없고, 많이 내려다보는 안은 건물이 위로 잘렸다. 뒤 7미터·옆 5.5미터·높이 2.6미터로 잡은 안에서 도로·가로수·건물·횡단보도가 한 화면에 다 들어왔다.
파일 크기만 봤으면 못 잡았다
이번 영상들은 크기가 멀쩡했다. 목록도 가지런했다. 프레임을 직접 열어봐서 잡았다.
바로 앞 작업에서 0바이트 사고를 겪고 “크기를 확인하자”는 교훈을 얻었는데, 크기 확인만으로는 이번 걸 못 잡았다. 만들어졌다는 사실과 목적을 달성했다는 사실이 또 다르다.
재발방지 체크리스트
① 보여주려고 만든 산출물은 한 장이라도 눈으로 연다. 크기·개수 확인은 그 아래 단계다.
② 자동으로 고른 위치는 고른 조건이 목적과 같은지 본다. “평평함”은 “도시가 보임”이 아니다.
③ 카메라·구도는 후보를 사진으로 뽑아 비교한다. 말로 고르면 매번 틀린다.
④ 지난번 교훈이 이번 것도 막아주리라 가정하지 않는다. 실패 종류가 다르면 검사도 달라야 한다.
① 보여주려고 만든 산출물은 한 장이라도 눈으로 연다. 크기·개수 확인은 그 아래 단계다.
② 자동으로 고른 위치는 고른 조건이 목적과 같은지 본다. “평평함”은 “도시가 보임”이 아니다.
③ 카메라·구도는 후보를 사진으로 뽑아 비교한다. 말로 고르면 매번 틀린다.
④ 지난번 교훈이 이번 것도 막아주리라 가정하지 않는다. 실패 종류가 다르면 검사도 달라야 한다.