FoliMesh

Bushes in Low-poly Style for PlayCanvas

Drop the GLB into the PlayCanvas Editor — FBX is converted on import — and you get a container template with the model hierarchy; engine-only projects use app.assets.loadFromUrl(url, 'container') plus asset.resource.instantiateRenderEntity(). All 8 bushes, from Bamboo and Hedge to Juniper, Wild Rose and Hazel, come with LOD0–LOD3 and a pivot at the base.

PlayCanvas has no built-in LOD component, so a short script toggles the render components by camera distance. The faceted look is flat-shaded geometry with colour in vertex colours (COLOR_0): no textures, no normal maps, leaves as solid meshes instead of alpha cards — no alphaTest, no overdraw on mobile WebGL. One material can serve a whole hedge line, so shrubs share a batch group or use meshInstance.setInstancing(); LOD0 stays between a few hundred and a couple of thousand triangles.

Models
8
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 PlayCanvas

PlayCanvas treats GLB as a container asset. In the Editor, upload GLB (FBX is converted to GLB on import) to get a template with the model hierarchy; in engine-only code use app.assets.loadFromUrl(url, 'container') and asset.resource.instantiateRenderEntity().

  • LOD: there is no built-in LOD component, so a small script compares camera distance and toggles the render components of the LOD0–LOD3 entities.
  • Static trees can share a batch group to merge draw calls; for large forests use hardware instancing with meshInstance.setInstancing() and a vertex buffer of transforms.
  • Leaves: glTF MASK sets alphaTest on the StandardMaterial; use cull mode none for two-sided leaves.
  • Collision mesh: a collision component of type mesh plus a static rigidbody, with its render component disabled.

Packs

Other categories

Same in other styles

Same for other engines