[bug] Стерео в обычном киноповторе ориентировано по голове игрока, а при экспорте — по камере #84

Closed
opened 2026-10-30 09:57:11 +00:00 by chexit · 1 comment
Owner

🤖 Filed by Codex, AI-агент Владимира (chexit).

Ревью 76f680eba64b64eb28435e71ce9f22a84b0e5da1 (после 6f3fc64). Новый export path выставляет orientation слушателя по main view только пока self.film.recording(). Обычный просмотр Film/Full/Clips с тем же ракурсом продолжает слушать из ориентации игрока.

Подтверждённый контракт

replay.rs::Player::sounds помещает источник в listener + (event_pos - replay_eye). Это согласовано с тем, что game.rs::render оставляет позицию audio listener у игрока; двойного сдвига позиции здесь нет.

Но в game.rs::render после получения main_view yaw/pitch камеры устанавливаются только под if let Some(v)=&main_view && self.film.recording(). Без capture listener сохраняет view_yaw/view_pitch игрока, хотя картинка уже снята из v.camera/v.yaw/v.pitch.

Пример: источник впереди камеры с yaw=90°, игрок смотрит yaw=0°. В preview звук панорамируется относительно игрока и может быть сбоку; в MP4 тот же кадр слушается иначе. Визуальное направление выстрела/перехвата и звук не совпадают. Это проверка путей вычисления, прослушивание не выполнялось.

Нужно и приёмка

Единообразная orientation main-view listener для всех filming modes с сохранением согласованного контракта координат источников; не применять перенос позиции дважды. Проверить фронт/лево/право/верх, поворот камеры и неподвижного игрока, Film/clip/Full/export, возврат в live. Один кадр/ракурс должен давать одинаковую пространственную сцену в preview и экспорте.

🤖 Filed by Codex, AI-агент Владимира (chexit). Ревью `76f680eba64b64eb28435e71ce9f22a84b0e5da1` (после `6f3fc64`). Новый export path выставляет orientation слушателя по main view только пока `self.film.recording()`. Обычный просмотр Film/Full/Clips с тем же ракурсом продолжает слушать из ориентации игрока. ### Подтверждённый контракт `replay.rs::Player::sounds` помещает источник в `listener + (event_pos - replay_eye)`. Это согласовано с тем, что `game.rs::render` оставляет **позицию** audio listener у игрока; двойного сдвига позиции здесь нет. Но в `game.rs::render` после получения `main_view` yaw/pitch камеры устанавливаются только под `if let Some(v)=&main_view && self.film.recording()`. Без capture listener сохраняет `view_yaw/view_pitch` игрока, хотя картинка уже снята из `v.camera/v.yaw/v.pitch`. Пример: источник впереди камеры с yaw=90°, игрок смотрит yaw=0°. В preview звук панорамируется относительно игрока и может быть сбоку; в MP4 тот же кадр слушается иначе. Визуальное направление выстрела/перехвата и звук не совпадают. Это проверка путей вычисления, прослушивание не выполнялось. ### Нужно и приёмка Единообразная orientation main-view listener для всех filming modes с сохранением согласованного контракта координат источников; не применять перенос позиции дважды. Проверить фронт/лево/право/верх, поворот камеры и неподвижного игрока, Film/clip/Full/export, возврат в live. Один кадр/ракурс должен давать одинаковую пространственную сцену в preview и экспорте.
chexit added the area:audiotype:bugarea:renderingpriority:P2 labels 2026-10-30 09:57:11 +00:00
Author
Owner

🤖 Agent: Сделано в 0f5c4136f3 (запушено в main). Ориентация слушателя следует за камерой во всех режимах съёмки. На слух не проверялось.

🤖 Agent: Сделано в https://gitea.maoniao.team/chexit/airdef/commit/0f5c4136f3bbd2ae3ca06e0b4985f86882a76eb0 (запушено в main). Ориентация слушателя следует за камерой во всех режимах съёмки. На слух не проверялось.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chexit/airdef#84