# Shot별 등장 요소 판정 (변형 형태 확정)

씬 내에서 shot 순서에 따라 각 shot에 **카메라에 시각적으로 보이는** 요소를 결정합니다.

## 핵심 규칙

### 일반 요소 (변형 아닌 것)
- 해당 shot의 설명(description)과 등장 인물(characters)을 기준으로 판단
- shot에 언급되지 않은 캐릭터는 visible에서 제외
- **단, 시신/무의식/부상/잠든 인물이 카메라에 보이면 반드시 포함** (살아있든 죽었든 무관)
- 배경(L)과 소품(P)은 shot description에 관련 묘사가 있으면 포함

### Off-camera / Gaze target 제외 (중요)

description 안에 등장하지만 **카메라 프레임 밖**에 있는 인물은 visible_entity_ids 에서 **반드시 제외**합니다. 다음 패턴은 모두 off-camera 신호입니다:

- **Gaze-target close-up 패턴** — `X[를을] (응시하|올려다보|내려다보|바라보|쳐다보|마주보|노려보|돌아보)... Y[의] (얼굴|눈|표정|상체|뒷모습|시선|옆얼굴|옆모습) (클로즈업|CU|ECU|MCU|샷|숏)`
  - 이 패턴에서 **X 는 시선의 대상 (off-camera)**, **Y 는 시선의 주체 (in-frame)** 입니다.
  - 예: "캐릭터A**를** 올려다보**며** ... 캐릭터B의 얼굴 클로즈업" → 캐릭터A = off-camera (제외), 캐릭터B = in-frame (포함)
  - 예: "남자 직원**을** 응시하**는** 캐릭터B의 얼굴 클로즈업" → 남자 직원 = off-camera (제외)

- **명시적 off-camera/off-screen phrase** — description 또는 staging 단서에 다음 phrase 가 인물 이름과 인접:
  - 영어: `off-camera`, `off-screen`, `offscreen`, `out of frame`, `out of shot`
  - 한국어: `화면 밖`, `프레임 밖`, `카메라 밖`
  - 예: "캐릭터A는 화면 밖에서 외친다" → 캐릭터A = off-camera (제외)

- **차단(blocking) 패턴** — `(차단|막다|가리다|block|obstruct) (대상)[을를]?`
  - 예: "캐릭터B가 캐릭터C를 가로막아 캐릭터C는 보이지 않는다" → 캐릭터C = off-camera (제외)
  - 예: "to block 캐릭터C offscreen" → 캐릭터C = off-camera (제외)

- **Reaction-only 패턴** — description 이 한 인물의 표정/시선만 close-up 으로 잡고 다른 인물은 그 인물에 대한 반응 trigger 로만 언급:
  - "(상대) 의 목소리를 듣고 굳어진 (주체) 의 얼굴" → 상대 = off-camera (제외)

### 변형 캐릭터/소품/배경
- 변형 전환은 씬 텍스트에서 명확한 변신/변형 묘사가 있는 시점에 발생
- **전환 이후 shot들은 모두 변형된 형태를 유지** (매 shot마다 바뀌지 않음)
- 다시 원래 형태로 돌아오는 묘사가 없으면 변형 형태를 끝까지 유지
- 동시 존재(분신, 클론, 환각)인 경우에만 둘 다 포함

### visible_entity_ids에 넣을 ID 규칙
- **변형된 형태이면 변형 ID를 넣으세요** (원본 ID 아님)
  - 예: 캐릭터A 가 변형된 후이면 → C01 대신 C02를 visible_entity_ids에 넣음
- **원본 형태이면 원본 ID를 넣으세요**
  - 예: 캐릭터A 가 아직 변형 전이면 → C01을 visible_entity_ids에 넣음
- 한 shot에서 원본과 변형이 동시에 보이는 경우 둘 다 넣으세요

### variant_resolved 규칙
- 변형 쌍이 있는 경우, 해당 shot에서 실제로 보이는 형태를 기록
- base_short_id를 key로, 실제 사용할 short_id를 value로
- 원본 형태이면: `{"C01": "C01"}` (base 그대로)
- 변형 형태이면: `{"C01": "C02"}` (variant로 교체)
- 해당 shot에 등장하지 않으면 key 자체를 생략
