FoliMesh

Rocks in Realistic Style for PlayCanvas

PlayCanvas loads these rocks as GLB container assets: drop a file into the Editor and you get a template with the full model hierarchy, or call app.assets.loadFromUrl(url, 'container') and asset.resource.instantiateRenderEntity() in engine-only code. Seven realistic models — Pebbles, Stone, Boulder, Rock Slab, Rock Scatter, Cliff and Cliff with Boulders — each with four LOD levels, a pivot at the base and GLB, FBX or OBJ export.

PlayCanvas has no built-in LOD component, so a short distance-checking script toggles the render components of LOD0–LOD3; static rocks can also share a batch group, and repeated scatter uses hardware instancing via meshInstance.setInstancing(). PBR metal/roughness maps carry the strata, cracks and moss. Add a collision component of type mesh with a static rigidbody, disable its render component, and cliffs become walkable. Suits survival, open-world and first-person projects in the browser.

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

About the Realistic style

Realistic models use the PBR metal/roughness workflow that glTF 2.0, Unity, Unreal, Godot and three.js read directly.

  • Bark: base colour, normal and roughness maps on the trunk and branches.
  • Leaves: alpha-tested (masked) cards with leaf-cluster textures, not alpha-blended, so they write depth, need no sorting and cast correct shadows.
  • Bark and leaves use separate materials, which keeps draw calls predictable and works well with GPU instancing.
  • LOD0 is the close-up mesh; LOD1–LOD3 drop branches and leaf cards, so the last level is light enough for far distances.

Best for first- and third-person games, survival, open worlds and simulators on PC and consoles. On mobile, start from LOD1 or LOD2 as the nearest level and watch overdraw from leaf cards.

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