FoliMesh

Cacti & Succulents for Bevy

Desert scenes in Bevy are cheap to fill when every mesh arrives as GLB: load a plant with asset_server.load(GltfAssetLabel::Scene(0).from_asset("saguaro.glb")) and spawn it under SceneRoot. The Saguaro, Barrel Cactus, Prickly Pear, Agave and Aloe all ship with LOD0–LOD3, so you can attach a VisibilityRange to each level and let Bevy's dithered crossfade swap detail as the camera moves.

Leaves and spines use glTF MASK alpha, which becomes AlphaMode::Mask(cutoff); double-sided materials simply skip back-face culling. Repeating one cactus across a ridge is batched and instanced automatically, and copies that share mesh and material stay cheap. Bevy has no built-in physics, so build colliders from the collision mesh with Avian or bevy_rapier. Base pivots make scattering on terrain trivial, and realistic or low-poly sets drop in the same way for desert and western levels.

Models
5
Levels of detail
LOD0 – LOD3
Formats
GLB · FBX · OBJ

Using it in Bevy

Bevy loads glTF/GLB through the AssetServer: asset_server.load(GltfAssetLabel::Scene(0).from_asset("tree.glb")), spawned with SceneRoot; individual meshes and materials are addressable by label. FBX and OBJ need third-party crates, so GLB is the format to use.

  • LOD: give the LOD0–LOD3 entities a VisibilityRange (start and end margins) for distance switching with dithered crossfade — Bevy's HLOD mechanism.
  • Leaves: glTF alphaMode MASK becomes AlphaMode::Mask(cutoff) on StandardMaterial, and double-sided materials disable back-face culling.
  • Entities that share a mesh and material are batched and instanced automatically, so many tree copies stay cheap.
  • Collision: Bevy has no built-in physics; build a collider from the collision mesh with Avian or bevy_rapier.

Packs

Other categories

Same in other styles

Same for other engines