FoliMesh

Palms in Low-poly Style for Bevy

Five palms — Coconut Palm, Date Palm, Canary Palm, Washingtonia and Fan Palm — load into Bevy as GLB scenes: asset_server.load(GltfAssetLabel::Scene(0).from_asset("coconut-palm.glb")), spawned with SceneRoot. Low-poly matches this path: flat shading and vertex colours (COLOR_0) mean no textures, and meshes and materials stay addressable by label. Every model ships LOD0–LOD3, LOD0 usually a few hundred to a couple of thousand triangles.

Add a VisibilityRange to the LOD0–LOD3 entities to get Bevy's dithered crossfade. Because copies share one mesh and one material they batch and instance automatically, so a whole beach stays cheap on mobile and WebGPU. Palms are solid geometry, so there is no alpha testing or transparent overdraw — a StandardMaterial multiplied by vertex colour is enough. Bevy has no built-in physics: build trunk colliders from the collision mesh with Avian or bevy_rapier.

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

About the Low-poly style

Low-poly vegetation is the cheapest style to render and to ship.

  • Flat shading: one normal per face gives the crisp faceted look; no normal maps.
  • Colour lives in vertex colours (glTF COLOR_0), so there are no textures, no UV work and almost no video memory.
  • Leaves are solid geometry, not alpha cards: no alpha testing and no transparent overdraw, which matters on mobile GPUs.
  • One material can be shared by every model in the scene, so trees batch and instance easily.
  • Typical budgets range from a few hundred to a couple of thousand triangles at LOD0.

A good fit for mobile, WebGL/WebGPU, VR, strategy, city builders and stylised indie games. In the engine, use a material that multiplies by vertex colour.

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.

Other categories

Same in other styles

Same for other engines