게임플레이 스타일의 NPC 대화 클립
GTA V 클립 20개(examples/gta-v, DirectorClips.cs, tools/shoot.ps1, tools/edit.ts)에서 검증된 방법:
클립은 한 번의 대화 교환으로, 5~10초 길이이며, 일반 플레이의 한 순간처럼 보여야 합니다.
대본 작성
clip: 물총
at: grove 거리, 집 위치 또는 "x, y, z, heading"
time: 21 시간
a: player 먼저 말하는 사람: 플레이어, 캐릭터, 또는 음성이 있는 페드 모델
b: LamarDavis
line: Lamar, 총을 치워. 물총이야.
reply: 그래도 무섭다고 우기고, 자신은 Grove Street에서 가장 무서운 남자라고 말해 (LLM이 실시간으로 작성)
# 또는 승인된 테이크 고정:
say: [고함] 물총이 무섭다고? 이게 Grove Street에서 제일 무서운 거야!
do: none 실행할 동작 (동작 이름 또는 none)
NPC 전용 클립(경찰과 촌뜨기, 해병과 관광객)이 가장 좋습니다: 플레이어를 숨기고 두 NPC가 대화하게 하세요.
게임플레이처럼 보이게 하기
- 고정된 게임플레이 카메라: 모든 프레임에서 따라가기 카메라의 뷰 모드와 플레이어 기준 방향 및 피치를 설정하고, look 입력을 비활성화합니다. 고정이면 충분합니다; 영화 같은 카메라는 트레일러처럼 보입니다.
- 파트너 프레이밍: 플레이어가 가리지 않도록 파트너를 앞쪽 약간 옆에 세웁니다(앞으로 2m, 오른쪽으로 1m). 해당 지점 주변을 레이캐스트하여 벽, 키오스크, 출입구에서 멀리 돌립니다.
- 지면에 고정: 보도에 스냅하고, 레이캐스트로 지면을 찾습니다(차양과 지붕은 높이 조회를 속일 수 있음).
- 클린 화면: 게임의 HUD와 자막은 켜고, 모드의 어떤 것도 표시하지 않습니다(알림, 개발 패널, 도움말 텍스트 없음). 테이크 중에는 전화와 도움말 텍스트를 억제합니다.
- 먼저 렌더링, 그 다음 롤: 클립이 시작되기 전에 답변을 작성하고, 동작을 선택한 후 두 음성을 렌더링한 다음, 연속으로 재생합니다. 아무도 GPU를 기다리지 않습니다.
녹화, 동기화, 편집
shoot.ps1: 게임을 전면으로 가져오고, 모드를 다시 로드하며, 화면(ffmpegddagrab)과 PC 오디오(WASAPI 루프백)를 별도 파일로 녹화하고, 스크립트를 시작하며, 포커스를 잃으면(게임 일시 정지) 캡처를 다시 시작합니다.- 동기화: 각 캡처 세그먼트는 타임스탬프가 기록된 흰색 플래시와 1kHz 비프음으로 시작합니다. 모드는
clip_start/clip_end와 각 대사의audio_on/audio_off를 타임라인에 기록합니다. edit.ts --clips <take>:clip_start0.2초 전부터 마지막 단어 또는 동작까지, 게임 창 크기로 자르고, 1920 너비, 음량이 정규화된 클립당 하나의 MP4를 생성합니다. 클립을 10초로 제한하고 잘릴 대사가 있으면 보고하며, 대사를 자르지 않습니다.- 재촬영, 단어 자르지 않음: 길어진 클립은 다시 촬영하거나(새 렌더링은 길이가 다를 수 있음) 대사를 몇 단어 줄입니다. 승인된 답변은
say:/do:로 고정하여 재촬영해도 농담이 유지되도록 합니다. - 보내기 전에 확인: 클립당 한 프레임의 연락처 시트(
ffmpeg -ss 5 ... tile=5x4)를 사용하면 숨겨진 파트너나 샷의 벽을 몇 초 만에 찾을 수 있습니다.
주의사항
- 아무 일도 일어나지 않음 / 다시 로드 후 모드가 돌아오지 않음. Windows Smart App Control이 새 DLL을 거부했습니다(Code Integrity 이벤트 3077). 새 빌드를 먼저 테스트 로드하고, 마지막으로 로드된 빌드를 유지하세요.
- 테이크 로그에 비디오 시작이 없음. 다른 프로세스가 로그 파일을 열고 있었습니다(Windows에서
tail -F는 작성자를 차단함). 다른 스크립트가 추가하는 파일을 보지 말고, 다른 파일을 감시하세요. - 클립 도중에 전화 또는 도움말 텍스트가 나타남. 클립이 롤링되는 동안 모든 프레임에서 이를 억제하세요.
- 클립의 음성은 복제된 것입니다. 클립을 어디에 게시하기 전에 인간이 결정합니다. AI임을 명시하세요.