# Objective - Using bincode to deserialize binary into a MeshletMesh is expensive (~77ms for a 5mb file). ## Solution - Write a custom deserializer using bytemuck's Pod types and slice casting. - Total asset load time has gone from ~102ms to ~12ms. - Change some types I never meant to be public to private and other misc cleanup. ## Testing - Ran the meshlet example and added timing spans to the asset loader. --- ## Changelog - Improved `MeshletMesh` loading speed - The `MeshletMesh` disk format has changed, and `MESHLET_MESH_ASSET_VERSION` has been bumped - `MeshletMesh` fields are now private - Renamed `MeshletMeshSaverLoad` to `MeshletMeshSaverLoader` - The `Meshlet`, `MeshletBoundingSpheres`, and `MeshletBoundingSphere` types are now private - Removed `MeshletMeshSaveOrLoadError::SerializationOrDeserialization` - Added `MeshletMeshSaveOrLoadError::WrongFileType` ## Migration Guide - Regenerate your `MeshletMesh` assets, as the disk format has changed, and `MESHLET_MESH_ASSET_VERSION` has been bumped - `MeshletMesh` fields are now private - `MeshletMeshSaverLoad` is now named `MeshletMeshSaverLoader` - The `Meshlet`, `MeshletBoundingSpheres`, and `MeshletBoundingSphere` types are now private - `MeshletMeshSaveOrLoadError::SerializationOrDeserialization` has been removed - Added `MeshletMeshSaveOrLoadError::WrongFileType`, match on this variant if you match on `MeshletMeshSaveOrLoadError`
		
			
				
	
	
		
			69 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			TOML
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			TOML
		
	
	
	
	
	
[package]
 | 
						|
name = "bevy_pbr"
 | 
						|
version = "0.15.0-dev"
 | 
						|
edition = "2021"
 | 
						|
description = "Adds PBR rendering to Bevy Engine"
 | 
						|
homepage = "https://bevyengine.org"
 | 
						|
repository = "https://github.com/bevyengine/bevy"
 | 
						|
license = "MIT OR Apache-2.0"
 | 
						|
keywords = ["bevy"]
 | 
						|
 | 
						|
[features]
 | 
						|
webgl = []
 | 
						|
webgpu = []
 | 
						|
pbr_transmission_textures = []
 | 
						|
pbr_multi_layer_material_textures = []
 | 
						|
pbr_anisotropy_texture = []
 | 
						|
shader_format_glsl = ["bevy_render/shader_format_glsl"]
 | 
						|
trace = ["bevy_render/trace"]
 | 
						|
ios_simulator = ["bevy_render/ios_simulator"]
 | 
						|
# Enables the meshlet renderer for dense high-poly scenes (experimental)
 | 
						|
meshlet = ["dep:lz4_flex", "dep:thiserror", "dep:range-alloc", "dep:bevy_tasks"]
 | 
						|
# Enables processing meshes into meshlet meshes
 | 
						|
meshlet_processor = ["meshlet", "dep:meshopt", "dep:metis", "dep:itertools"]
 | 
						|
 | 
						|
[dependencies]
 | 
						|
# bevy
 | 
						|
bevy_app = { path = "../bevy_app", version = "0.15.0-dev" }
 | 
						|
bevy_asset = { path = "../bevy_asset", version = "0.15.0-dev" }
 | 
						|
bevy_color = { path = "../bevy_color", version = "0.15.0-dev" }
 | 
						|
bevy_core_pipeline = { path = "../bevy_core_pipeline", version = "0.15.0-dev" }
 | 
						|
bevy_derive = { path = "../bevy_derive", version = "0.15.0-dev" }
 | 
						|
bevy_ecs = { path = "../bevy_ecs", version = "0.15.0-dev" }
 | 
						|
bevy_math = { path = "../bevy_math", version = "0.15.0-dev" }
 | 
						|
bevy_reflect = { path = "../bevy_reflect", version = "0.15.0-dev", features = [
 | 
						|
  "bevy",
 | 
						|
] }
 | 
						|
bevy_render = { path = "../bevy_render", version = "0.15.0-dev" }
 | 
						|
bevy_tasks = { path = "../bevy_tasks", version = "0.15.0-dev", optional = true }
 | 
						|
bevy_transform = { path = "../bevy_transform", version = "0.15.0-dev" }
 | 
						|
bevy_utils = { path = "../bevy_utils", version = "0.15.0-dev" }
 | 
						|
bevy_window = { path = "../bevy_window", version = "0.15.0-dev" }
 | 
						|
 | 
						|
 | 
						|
# other
 | 
						|
bitflags = "2.3"
 | 
						|
fixedbitset = "0.5"
 | 
						|
# meshlet
 | 
						|
lz4_flex = { version = "0.11", default-features = false, features = [
 | 
						|
  "frame",
 | 
						|
], optional = true }
 | 
						|
thiserror = { version = "1", optional = true }
 | 
						|
range-alloc = { version = "0.1", optional = true }
 | 
						|
meshopt = { version = "0.3.0", optional = true }
 | 
						|
metis = { version = "0.2", optional = true }
 | 
						|
itertools = { version = "0.13", optional = true }
 | 
						|
# direct dependency required for derive macro
 | 
						|
bytemuck = { version = "1", features = ["derive", "must_cast"] }
 | 
						|
radsort = "0.1"
 | 
						|
smallvec = "1.6"
 | 
						|
nonmax = "0.5"
 | 
						|
static_assertions = "1"
 | 
						|
 | 
						|
[lints]
 | 
						|
workspace = true
 | 
						|
 | 
						|
[package.metadata.docs.rs]
 | 
						|
rustdoc-args = ["-Zunstable-options", "--cfg", "docsrs"]
 | 
						|
all-features = true
 |