도시를 걷는 영상을 자동 촬영하는데, 바닥이 자글자글 깜박였다. 멀리 있는 도로와 보도가 프레임마다 서로 이겼다 졌다 했다.
흔한 용의자가 셋 있었다. 화면 부드럽게 하는 후처리, 그림자, 텍스처 축소본.
셋을 하나씩 꺼서 재판했다
감으로 고치지 않고, 용의자를 하나씩 끄고 같은 구간을 촬영해 깜박임을 수치로 쟀다. 다행히 이 촬영 환경은 같은 조건이면 결과가 바이트까지 동일해서(3회 촬영 파일이 완전히 같았다), 차이가 나면 그게 곧 범인이다.
결과: 후처리를 꺼도, 그림자를 꺼도, 축소본을 꺼도 깜박임은 남았다. 셋 다 무죄.
진범은 카메라의 최소 거리였다
남은 가설은 깊이 정밀도였다. 3D 카메라는 “이보다 가까운 건 안 그린다”는 최소 거리가 있는데, 이 값이 작을수록 먼 곳의 앞뒤 판정 정밀도가 나빠진다. 도로 위에 보도가 살짝 떠 있는 구조라, 먼 곳에서 둘의 앞뒤가 프레임마다 뒤집히고 있었다.
공식으로 확인했다. 최소 거리 0.1에서는 약 290미터 밖에서 판정이 무너지는데, 씬은 500미터였다. 무너지는 게 정상이었던 것이다.
최소 거리를 0.1에서 1.0으로 올렸다. 깜박임이 평균 88.8% 감소했다. 코드 수정은 숫자 하나였다.
배제도 실측으로 한다
이번에 지킨 것 하나가 성과였다. 용의자를 감으로 배제하지 않고 실측으로 배제한 것. 셋 중 하나를 감으로 범인 삼아 고쳤다면, 증상은 남고 설정만 망가졌을 것이다.
재발방지 체크리스트
① 용의자가 여럿이면 하나씩 끄고 같은 조건으로 재측정한다. 배제도 증거로 한다.
② 측정 환경의 잡음 바닥을 먼저 확인한다. 잡음이 0이어야 차이가 곧 원인이다.
③ 정밀도 문제는 공식으로 한계 거리를 계산해 씬 크기와 비교한다. 감이 아니라 산수다.
④ 증상이 “먼 곳에서만” 나타나면 거리에 따라 나빠지는 것(깊이 정밀도)부터 의심한다.
① 용의자가 여럿이면 하나씩 끄고 같은 조건으로 재측정한다. 배제도 증거로 한다.
② 측정 환경의 잡음 바닥을 먼저 확인한다. 잡음이 0이어야 차이가 곧 원인이다.
③ 정밀도 문제는 공식으로 한계 거리를 계산해 씬 크기와 비교한다. 감이 아니라 산수다.
④ 증상이 “먼 곳에서만” 나타나면 거리에 따라 나빠지는 것(깊이 정밀도)부터 의심한다.