Files
Carter Anderson 535cf401cc Reframe old "scene" terminology as "world serialization" (#23630)
Part 2 of #23619 

In **Bevy 0.19** we are landing a subset of Bevy's Next Generation Scene
system (often known as BSN), which now lives in the `bevy_scene` /
`bevy::scene` crate. However the old `bevy_scene` system still needs to
stick around for a bit longer, as it provides some features that Bevy's
Next Generation Scene system doesn't (yet!):

1. It is not _yet_ possible to write a World _to_ BSN, so the old system
is still necessary for "round trip World serialization".
2. The GLTF scene loader has not yet been ported to BSN, so the old
system is still necessary to spawn GLTF scenes in Bevy.

For this reason, we have renamed the old `bevy_scene` crate to
`bevy_world_serialization`. If you were referencing `bevy_scene::*` or
`bevy::scene::*` types, rename those paths to
`bevy_world_serialization::*` and `bevy::world_serialization::*`
respectively.

Additionally, to avoid confusion / conflicts with the new scene system,
all "scene" terminology / types have been reframed as "world
serialization":

- `Scene` -> `WorldAsset` (as this was always just a World wrapper)
- `SceneRoot` -> `WorldAssetRoot`
- `DynamicScene` -> `DynamicWorld`
    - `DynamicScene::from_scene` -> `DynamicWorld::from_world_asset`
- `DynamicSceneBuilder` -> `DynamicWorldBuilder`
- `DynamicSceneRoot` -> `DynamicWorldRoot`
- `SceneInstanceReady` -> `WorldInstanceReady`
- `SceneLoader` -> `WorldAssetLoader`
- `ScenePlugin` -> `WorldSerializationPlugin`
- `SceneRootTemplate` -> `WorldAssetRootTemplate`
- `SceneSpawner` -> `WorldInstanceSpawner`
- `SceneFilter` -> `WorldFilter`
- `SceneLoaderError` -> `WorldAssetLoaderError`
- `SceneSpawnError` -> `WorldInstanceSpawnError`

Note that I went with `bevy_world_serialization` over
`bevy_ecs_serialization`, as that is what all of the internal features
described themselves as. I think it is both more specific and does a
better job of making itself decoupled from `bevy_ecs` proper.
2026-04-04 00:31:47 +00:00
..

Bistro Example

Download Amazon Lumberyard version of bistro from developer.nvidia.com (or see link below for processed glTF files with instancing)

Reexport BistroExterior.fbx and BistroInterior_Wine.fbx as GLTF files (in .gltf + .bin + textures format). Move the files into the respective bistro_exterior and bistro_interior_wine folders.

  • Press 1, 2 or 3 for various camera positions.
  • Press B for benchmark.
  • Press to animate camera along path.

Run with texture compression while caching compressed images to disk for faster startup times: cargo run -p bistro --release --features mipmap_generator/compress -- --cache

Options:
--no-gltf-lights  disable glTF lights
--minimal         disable bloom, AO, AA, shadows
--compress        compress textures (if they are not already, requires
                  compress feature)
--low-quality-compression
                  if low_quality_compression is set, only 0.5 byte/px formats
                  will be used (BC1, BC4) unless the alpha channel is in use,
                  then BC3 will be used. When low quality is set, compression
                  is generally faster than CompressionSpeed::UltraFast and
                  CompressionSpeed is ignored.
--cache           compressed texture cache (requires compress feature)
--count           quantity of bistros
--spin            spin the bistros and camera
--hide-frame-time don't show frame time
--deferred        use deferred shading
--no-frustum-culling
                  disable all frustum culling. Stresses queuing and batching
                  as all mesh material entities in the scene are always drawn.
--no-automatic-batching
                  disable automatic batching. Skips batching resulting in
                  heavy stress on render pass draw command encoding.
--no-view-occlusion-culling
                  disable gpu occlusion culling for the camera
--no-shadow-occlusion-culling
                  disable gpu occlusion culling for the directional light
--no-indirect-drawing
                  disable indirect drawing.
--no-cpu-culling  disable CPU culling.
--help, help      display usage information

Alternate processed files with instancing (glTF files on discord):

  • Fixed most of the metallic from fbx issue by using a script that makes everything dielectric unless it has metal in the name of the material
  • Made the plants alpha clip instead of blend
  • Setup the glassware/liquid materials correctly
  • Mesh origins are at individual bounding box center instead of world origin
  • Removed duplicate vertices (There were lots of odd cases, often making one instance not match another that would otherwise exactly match)
  • Made the scene use instances (unique mesh count 3880 -> 1188)
  • Removed 2 cases where duplicated meshes were overlapping
  • Setup some of the interior/exterior lights with actual sources
  • Setup some basic fake GI
  • Use included scene HDRI for IBL