20个版本 (10个重大更新)
0.11.0 | 2024年7月7日 |
---|---|
0.10.0 | 2024年2月24日 |
0.9.0 | 2023年12月9日 |
0.8.0 | 2023年7月16日 |
0.3.0 | 2022年11月18日 |
#39 在 渲染 类别中
每月205次下载
40KB
334 行
Bevy Image Export
用于渲染图像序列的 Bevy 插件。
兼容性
Bevy版本 | 包版本 |
---|---|
0.14 |
0.11 |
0.13 |
0.10 |
0.12 |
0.9 |
0.11 |
0.8 |
0.10 |
0.4 - 0.7 |
0.9 |
0.3 |
0.8 |
0.1 , 0.2 |
使用方法
const WIDTH: u32 = 768;
const HEIGHT: u32 = 768;
fn main() {
let export_plugin = ImageExportPlugin::default();
let export_threads = export_plugin.threads.clone();
App::new()
.add_plugins((
DefaultPlugins.set(WindowPlugin {
primary_window: Some(Window {
resolution: (WIDTH as f32, HEIGHT as f32).into(),
..default()
}),
..default()
}),
export_plugin,
))
.add_systems(Startup, setup)
.run();
// This line is optional but recommended.
// It blocks the main thread until all image files have been saved successfully.
export_threads.finish();
}
fn setup(
mut commands: Commands,
mut images: ResMut<Assets<Image>>,
mut export_sources: ResMut<Assets<ImageExportSource>>,
) {
// Create an output texture.
let output_texture_handle = {
let size = Extent3d {
width: WIDTH,
height: HEIGHT,
..default()
};
let mut export_texture = Image {
texture_descriptor: TextureDescriptor {
label: None,
size,
dimension: TextureDimension::D2,
format: TextureFormat::Rgba8UnormSrgb,
mip_level_count: 1,
sample_count: 1,
usage: TextureUsages::COPY_DST
| TextureUsages::COPY_SRC
| TextureUsages::RENDER_ATTACHMENT,
view_formats: &[],
},
..default()
};
export_texture.resize(size);
images.add(export_texture)
};
commands
.spawn(Camera3dBundle {
transform: Transform::from_translation(5.0 * Vec3::Z),
..default()
})
.with_children(|parent| {
parent.spawn(Camera3dBundle {
camera: Camera {
// Connect the output texture to a camera as a RenderTarget.
target: RenderTarget::Image(output_texture_handle.clone()),
..default()
},
..default()
});
});
// Spawn the ImageExportBundle to initiate the export of the output texture.
commands.spawn(ImageExportBundle {
source: export_sources.add(output_texture_handle),
settings: ImageExportSettings {
// Frames will be saved to "./out/[#####].png".
output_dir: "out".into(),
// Choose "exr" for HDR renders.
extension: "png".into(),
},
});
}
视频文件导出
如果已安装 FFmpeg,可以使用以下命令将导出的图像序列转换为MP4视频文件
ffmpeg -r 60 -i out/%05d.png -vcodec libx264 -crf 25 -pix_fmt yuv420p out.mp4
依赖项
~34–72MB
~1.5M SLoC