Python Editor Script Pluginを用いてLevelSequencerから静止画等の書き出しを行おうとした際、unreal.SequencerTools.render_movieの第二引数で設定したコールバックがレンダリング終了時に呼び出されません。
こちらは既知の不具合でしょうか?
コードは以下の通りです。
def finish_function(success):
print("レンダリングが終了しました。")
level_sequence_capture = unreal.AutomatedLevelSequenceCapture()
# AutomatedLevelSequenceCaptureに必要事項を設定
on_finished_callback = unreal.OnRenderMovieStopped()
on_finished_callback.bind_callable(finish_function)
unreal.SequencerTools.render_movie(level_sequence_capture, on_finished_callback)
こちらで同様のスクリプトを実行した場合、特に問題なくCallbackが実行されています
LevelSequencerの内容、またはAutomatedLevelSequenceCaptureの設定値に何かしらの原因があるのでは?と考えております
以下、こちらで試した内容のPythonスクリプト全文を添付します
実行環境はUE4.22.3、プラグインは Editor Scripting Utilities
、 Python Editor Script Plugin
、 Sequencer Scripting
を有効にしています
import unreal
def finished_capture(success):
print("Renderring finished.")
level_sequencer_capture = unreal.AutomatedLevelSequenceCapture()
level_sequencer_capture.level_sequence_asset = unreal.SoftObjectPath('/Game/NewLevelSequence')
on_finished_callback = unreal.OnRenderMovieStopped()
on_finished_callback.bind_callable(finished_capture)
unreal.SequencerTools.render_movie(level_sequencer_capture, on_finished_callback)
print("Start rendering")
以下のようにJPG撮影を行う場合、現象が発生するようです。
level_sequence_capture.set_image_capture_protocol_type(unreal.ImageSequenceProtocol_JPG)
静止画キャプチャしてみましたが、問題なくCallbackされています
静止画キャプチャの際にCallbackされないと指摘されておりますが、こちらで確認している範囲ではきちんとCallbackによるPythonコンソール出力がされています
どういう呼び出し方をしているかにもよるかもしれません
さらなる情報が必要です
こちらはコンソールコマンドから実行しています
コード:
import unreal
def finished_capture(success):
print("Renderring finished.")
level_sequencer_capture = unreal.AutomatedLevelSequenceCapture()
level_sequencer_capture.level_sequence_asset = unreal.SoftObjectPath('/Game/NewLevelSequence')
level_sequencer_capture.set_image_capture_protocol_type(unreal.ImageSequenceProtocol_JPG)
on_finished_callback = unreal.OnRenderMovieStopped()
on_finished_callback.bind_callable(finished_capture)
unreal.SequencerTools.render_movie(level_sequencer_capture, on_finished_callback)
print("Start rendering")
ログ:
link text
アクターのスポーン等が正常に行われない為、こちらでは「-ExecutePythonScript」でpythonを実行しています。
シーケンサはスクリプトで生成しており、add_master_track(unreal.MovieSceneCameraCutTrack)でマスタートラックを追加し、CineCameraActorをバインドしているだけの状態です。
AutomatedLevelSequenceCaptureの設定は以下のような形です。
cap = unreal.AutomatedLevelSequenceCapture()
asset = unreal.find_asset("/Game/Cinematics/NewLevelSequence")
cap.level_sequence_asset = unreal.SoftObjectPath(asset.get_path_name())
cap.warm_up_frame_count = 2
cap.set_image_capture_protocol_type(unreal.load_class(None, "/Script/MovieSceneCapture.ImageSequenceProtocol_JPG"))
image_protocol = cap.get_image_capture_protocol().compression_quality = 100
cap.set_audio_capture_protocol_type(unreal.NullAudioCaptureProtocol.static_class())
cap.settings.movie_extension = ".jpg"
cap.settings.output_directory = unreal.DirectoryPath("D:/SequenceTest/Content/Capture/foo")
cap.settings.output_format = "{world}_{frame}"
cap.settings.overwrite_existing = True
cap.settings.frame_rate = unreal.FrameRate(60,1)
unreal.SequencerTools.render_movie(cap, on_finished_callback)
補足ですが、レンダリングで画像は出力出来ている状態です。