오버롤 등급을 화면에 올리고, 항목 점수를 오각형으로 그린다
사용자 요청 두 가지를 이어서 처리했다. 오버롤 등급 시스템을 계속 만들 것과 루브릭 항목 스탯을 레이더 차트(오각형)로 보여줄 것.
오버롤의 단위가 정해졌다 — 영상 하나에 하나
앞선 회차에서 「선수 한 명의 오버롤인가, 분석 1건의 오버롤인가」를 정하지 못해 열어 두었다. 사용자 확인으로 「영상당 하나」로 정해졌다.
그러면 에이전트 쪽에 새로 계산할 것이 없다. scoring.aggregate가 내는 score(0~100)와 grade(A/B/C/D)가 이미 그 단위다. 남은 것은 보여주는 일이었고, 데모 화면이 그 값을 「개발 확인용 상세」에 접어 두고 있었다. 접어 둔 이유는 임계값이 지도자 검수 전이라는 것이었는데, 그 사실은 숨긴다고 없어지지 않는다. 그래서 숨기는 대신 등급 옆에 「잠정」을 붙여 함께 낸다.
선수 한 명을 하나로 합치는 오버롤은 만들지 않았다. 세 편을 올리면 등급이 세 개 나온다. 합치는 규칙(최근 N건? 최고점? 종목별로?)도, 저장할 자리도, 카드 노출 금지와의 관계도 정해진 것이 없다.
레이더 차트 — 등급 세 자리로는 그릴 것이 없었다
항목 등급은 0·1·2뿐이라 그대로 축에 쓰면 꼭짓점이 중심·중간·끝 세 자리에만 찍힌다. 사용자도 “등급이 아니라 점수 그 자체로” 그려 달라고 했다.
그래서 항목마다 연속 점수를 하나 더 낸다. 뜻은 「이상 구간(2등급 구간)에서 얼마나 떨어져 있는가」이고, 등급별로 겹치지 않는 자리에 놓는다 — 2등급 85~100 · 1등급 50~85 · 0등급 0~50. 겹치지 않게 두는 것이 요점이다. 겹치면 2등급 항목이 1등급 항목보다 안쪽에 찍히는 오각형이 나오고, 선수는 잘한 항목을 못한 것으로 읽는다. 그 성질은 루브릭 6종 전체를 값 범위째 훑는 검사로 고정했다.
만들면서 한 번 틀렸던 것
처음에는 「구간 한가운데가 최고점」으로 짰다. 그런데 hip_rotation의 2등급은 25~180도이고 180도 위에는 아무 등급도 없다 — 위가 물리적 한계일 뿐 위험한 끝이 아니다. 한가운데를 최고점으로 재면 골반을 끝까지 돌린 175도가 한가운데 102도보다 낮게 찍힌다. 잘한 값을 깎는 것이라, 실제로 아래 등급이 붙어 있는 끝만 세도록 고쳤다.
총점은 축 점수의 평균이 아니다
이 점이 화면에서 오해되기 쉽다. 총점·등급은 지금까지대로 등급의 가중합이고 축 점수는 거기에 관여하지 않는다. 표시 전용이라 측정값을 주지 않으면 null일 뿐 나머지 결과는 한 비트도 같다 — 「구간 위 0등급」 표시와 같은 성질이고, 그래서 임계값 검수 전에도 넣을 수 있었다(B-6 재실행을 부르지 않는다). 데모 화면에는 그 구분을 캡션 한 줄로 적어 두었다.
축 개수는 루브릭이 정한다. 지금 4~6개다 — 점프슛·투구가 5개(오각형), 인스텝 슈팅이 6개, 레이업이 4개다. 그래서 그리는 쪽도 오각형으로 못 박지 않았다.
다음
읽기 경로와 서비스 화면은 남의 구역이라 손대지 않았다. 무엇을 실어야 하는지는 미결 항목에 적어 두었다 — 오버롤 등급이 계산은 되는데 화면까지 안 갑니다 (ho 구역 28번). 필드가 하나 늘었다(breakdown[].stat).