遊玩風格的NPC對話片段
在20個GTA V片段中有效的方法(請見 examples/gta-v、DirectorClips.cs、tools/shoot.ps1、tools/edit.ts):
一個片段是一次對話交換,長度5-10秒,看起來就像普通玩家遊玩中的一個瞬間。
編寫腳本
clip: 水槍
at: grove 一個街道位置、一棟房屋,或「x, y, z, heading」
time: 21 一天中的小時
A: player 誰先發言:玩家、角色,或一個有配音的ped模型
B: LamarDavis
line: Lamar, 把槍放下。那是水槍。
reply: 堅持說那仍然很可怕,而且他是Grove Street最令人畏懼的男人 (由LLM即時撰寫)
# 或者固定一個已批准的台詞:
say: [大喊] 怕一支水槍?這他媽的是Grove Street最令人畏懼的東西!
do: none 要播放的動作(動作名稱,或 none)
僅NPC的片段(一個警察和一個鄉巴佬、一個海軍陸戰隊員和一個觀光客)是效果最好的:隱藏玩家,讓兩個NPC自己對話。
看起來像遊玩
- 固定的遊戲攝影機: 每一幀都將跟隨攝影機的視角模式及其相對於玩家的朝向與俯仰固定住,並停用視角輸入。固定視角就可以了;電影運鏡會看起來像預告片。
- 框住對話夥伴: 讓他們站在玩家前方並稍微側邊(向前2公尺,向右1公尺),這樣玩家不會擋住他們;在該位置進行射線檢測,避開牆壁、攤位和門口。
- 讓他們著地: 貼齊路面,並向下進行射線檢測以找到地面(遮雨棚和屋頂會誤導高度查詢)。
- 乾淨畫面: 顯示遊戲的HUD和字幕,不顯示任何模組相關內容(沒有通知、開發面板或幫助文字)。在拍攝期間抑制來電和幫助文字。
- 先渲染,再播放: 寫好回覆、選擇動作,並在片段開始前渲染好兩個角色的聲音,然後再讓它們依次播放。沒有人需要在鏡頭前等待GPU。
錄製、同步、剪輯
shoot.ps1:將遊戲視窗置前、重新載入模組、錄製螢幕(ffmpegddagrab)和電腦音訊(WASAPI loopback)為獨立檔案、啟動腳本,並在失去焦點時重新開始錄製(遊戲會暫停)。- 同步: 每個錄製片段以一個白色閃爍和一個帶時間戳記的1kHz嗶聲開始;模組會記錄
clip_start/clip_end以及每個台詞的audio_on/audio_off到時間軸。 edit.ts --clips <take>:每個片段輸出一個MP4,從clip_start前0.2秒開始,到最後一個字或動作結束,裁切至遊戲視窗大小,寬度1920,並進行響度正規化。它會將片段限制在10秒以內,並回報任何會被切斷的台詞,而不是直接將其剪掉。- 重拍,不要切斷台詞: 長度過長的片段需要重拍(新渲染的長度會不同),或者將台詞精簡幾個字。使用
say:/do:來固定已批准的台詞,這樣重拍時就能保留笑點。 - 發送前先預覽: 建立一個每個片段一幀的聯絡表(
ffmpeg -ss 5 ... tile=5x4),可以在幾秒內發現隱藏的夥伴或畫面中的牆壁。
注意事項
- 什麼都沒發生 / 模組在重新載入後沒有回來。 Windows Smart App Control 拒絕了新的DLL(Code Integrity 事件3077)。先測試載入新版本;保留最後一個能載入的版本。
- 該片段的日誌中沒有影片開始記錄。 另一個程式持有了日誌檔案(Windows 上的
tail -F會阻塞寫入者)。不要監看另一個腳本正在附加寫入的檔案;請監看不同的檔案。 - 來電或幫助文字在片段進行中出現。 在片段播放的每一幀中都抑制它們。
- 片段中的語音是複製品。 在將任何片段發布到任何地方之前,由人類決定;並聲明這是AI生成。