#unreal-engine4 #unreal-blueprint #unreal-engine5
#unreal-engineer4 #unreal-blueprint #unreal-engineer5
Вопрос:
У меня есть массив матриц преобразования, представляющих положения камеры. Я хочу использовать их для создания большого количества скриншотов (10 тысяч).
Я хочу выполнить это следующим образом:
- Считывание преобразования из массива
- Разместите камеру там, где она должна быть
- Сделайте снимок экрана (автоматически)
- Перейдите к 1.
Созданный мной план выглядит следующим образом:
При использовании этой схемы unreal engine выходит из строя, что, я думаю, связано с циклом, который пытается выполнить до 1 кадра.
Как правильно делать эти автоматические скриншоты?
PS: новичок в UE.
Ответ №1:
Независимо от проблемы со сбоем, вам, вероятно, все равно придется ограничиться одним снимком экрана на кадр, поскольку вы захотите дать программе рендеринга время для обновления с новым ракурсом камеры, прежде чем делать снимок экрана.
Поэтому я бы рекомендовал иметь переменную Index в вашем проекте, и каждый кадр, который вы:
- Сделайте снимок экрана
- Индекс
- Если Index>= CameraTransforms.Подсчет, выход
- В противном случае установите для камеры значение CameraTransforms[Index]
Затем подождите до следующего кадра. Причина, по которой я рекомендую сначала сделать снимок экрана, заключается в том, что вы дали потокам игры / рендеринга время обновить последнее преобразование камеры, которое вы установили в конце последнего кадра.
Надеюсь, это поможет! P.s. Возможно, вы захотите изучить Sequencer и, в частности, отрисовку видео из него. Рабочий процесс будет примерно таким же, как я описал выше, но вы можете пропустить шаг скриншота и вместо этого отобразить последовательность изображений. У меня нет для вас полного комплексного решения, я просто подбрасываю идею, чтобы вы могли изучить ее, если хотите.
Ответ №2:
Вы должны использовать разумную задержку, достаточную для сохранения файла, между вашими вызовами.
Не используйте цикл for, так как это приводит к блокировке вызова слишком большого количества операций.
Вот то, что должно сработать:
Вызовите «start» один раз, затем «take next» один раз. «Take next» является рекурсивным, поэтому после этого вам просто нужно подождать необходимое время, пока не будут сделаны все изображения.
Вы также можете рассмотреть возможность использования узла «файл существует», чтобы проверить, был ли уже сделан снимок sccreenshot, который вы собираетесь сделать, и пропустить, если он был. Таким образом, даже если вы потерпите крах в середине, вам не нужно будет заново делать все скриншоты.