Crates.io | bevy_image_export |
lib.rs | bevy_image_export |
version | |
source | src |
created_at | 2022-09-07 10:48:57.637603 |
updated_at | 2024-11-30 12:25:55.992354 |
description | Bevy plugin for rendering image sequences |
homepage | |
repository | https://github.com/paulkre/bevy_image_export |
max_upload_size | |
id | 660302 |
Cargo.toml error: | TOML parse error at line 17, column 1 | 17 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include` |
size | 0 |
A Bevy plugin for rendering image sequences.
Bevy Version | Crate Version |
---|---|
0.15 |
0.12 |
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()
})
.set(RenderPlugin {
synchronous_pipeline_compilation: true,
..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((
Camera3d::default(),
Transform::from_translation(5.0 * Vec3::Z),
))
.with_child((
Camera3d::default(),
Camera {
// Connect the output texture to a camera as a RenderTarget.
target: RenderTarget::Image(output_texture_handle.clone()),
..default()
},
));
// Spawn the ImageExport component to initiate the export of the output texture.
commands.spawn((
ImageExport(export_sources.add(output_texture_handle)),
ImageExportSettings {
// Frames will be saved to "./out/[#####].png".
output_dir: "out".into(),
// Choose "exr" for HDR renders.
extension: "png".into(),
},
));
}
With FFmpeg installed, you can run the following command to convert your exported image sequence to an MP4 video file:
ffmpeg -r 60 -i out/%05d.png -vcodec libx264 -crf 25 -pix_fmt yuv420p out.mp4