# Pine Tree

> A classic low-poly conifer built from stacked, slightly rotated cone tiers on a tapered trunk. Adjust the height, number of tiers and foliage color, or add snow caps for winter levels.

![Pine Tree preview](https://codels.download/m/pine-tree.png)

Multi-view sheet (3/4, front, side, top): https://codels.download/m/pine-tree.sheet.png

## Facts

- Category: Nature › Trees
- Size (W × H × D): 1.28 × 3.20 × 1.25 m — units are meters, +Y up, front faces +Z
- Origin: center of the base (y = 0)
- Triangles: 80 · Meshes: 5 · Materials: 2
- License: CC0-1.0 (Codels built-in)
- Tags: pine, tree, low-poly, stylized, forest, mountain, snow, adventure, rpg, survival, background, vegetation, foliage-material, wood, tall, game-ready, instancing-friendly, mobile-friendly, parametric, color-green, size-large, poly-ultra-low
- Page: https://codels.download/models/pine-tree

## Files

| Format | URL |
|---|---|
| three.js ES module (`createPineTree()`) | https://codels.download/m/pine-tree.js |
| React Three Fiber component (`<PineTree />`) | https://codels.download/m/pine-tree.jsx |
| Instancing module (`createPineTreeInstances(count, place)`, one draw call per material) | https://codels.download/m/pine-tree.instanced.js |
| Standalone HTML demo | https://codels.download/m/pine-tree.html |
| glTF binary | https://codels.download/m/pine-tree.glb |
| glTF binary, Meshopt-compressed (2–3× smaller; GLTFLoader needs `setMeshoptDecoder(MeshoptDecoder)`) | https://codels.download/m/pine-tree.glb?compress=meshopt |
| glTF JSON | https://codels.download/m/pine-tree.gltf |
| OBJ (vertex colors) + MTL | https://codels.download/m/pine-tree.obj · https://codels.download/m/pine-tree.mtl |
| STL | https://codels.download/m/pine-tree.stl |
| CodelSpec JSON | https://codels.download/m/pine-tree.json |

## Parameters

Append them as query parameters to any URL above to get a customized variant (e.g. `?height=...`).

| Param | Type | Range / options | Default | Current |
|---|---|---|---|---|
| `height` | number | 1.5 – 8 | 3.2 | 3.2 |
| `tiers` | int | 2 – 6 | 4 | 4 |
| `foliage` | color | #rrggbb | #2f7d4a | #2f7d4a |
| `snow` | boolean | true \| false | false | false |

## Parts

- trunk (cylinder · bark)
- tier1 (cone · leaf)
- tier2 (cone · leaf)
- tier3 (cone · leaf)
- tier4 (cone · leaf)

## How to use

Save the code below as `pine-tree.js`, then:

```js
import { createPineTree } from './pine-tree.js';
const model = createPineTree();
scene.add(model);
```

## Code

```js
/**
 * Pine Tree — Codels 3D model library (https://codels.download/models/pine-tree)
 * License: CC0-1.0 · Units: meters · Y-up · Front: +Z · Origin: center of the base (y = 0)
 * Triangles: 80 · Size (W × H × D): 1.28 × 3.20 × 1.25 m
 *
 * Usage:
 *   import { createPineTree } from './pine-tree.js';
 *   
 *   const model = createPineTree();
 *   model.position.set(0, 0, 0);
 *   scene.add(model);
 */
import * as THREE from 'three';

const deg = THREE.MathUtils.degToRad;

export function createPineTree() {
  const root = new THREE.Group();
  root.name = 'PineTree';

  // Materials
  const barkMat = new THREE.MeshStandardMaterial({ name: 'bark', color: 0x6b4a2f, roughness: 0.95, flatShading: true });
  const leafMat = new THREE.MeshStandardMaterial({ name: 'leaf', color: 0x2f7d4a, roughness: 0.85, flatShading: true });

  // Parts
  const trunk = new THREE.Mesh(new THREE.CylinderGeometry(0.112, 0.176, 0.896, 6), barkMat);
  trunk.name = 'trunk';
  trunk.position.set(0, 0.448, 0);
  root.add(trunk);
  const tier1 = new THREE.Mesh(new THREE.ConeGeometry(0.6547, 1.0317, 7), leafMat);
  tier1.name = 'tier1';
  tier1.position.set(0, 1.0535, 0);
  root.add(tier1);
  const tier2 = new THREE.Mesh(new THREE.ConeGeometry(0.528, 1.0317, 7), leafMat);
  tier2.name = 'tier2';
  tier2.position.set(0, 1.597, 0);
  tier2.rotation.set(0, deg(23), 0);
  root.add(tier2);
  const tier3 = new THREE.Mesh(new THREE.ConeGeometry(0.4013, 1.0317, 7), leafMat);
  tier3.name = 'tier3';
  tier3.position.set(0, 2.1406, 0);
  tier3.rotation.set(0, deg(46), 0);
  root.add(tier3);
  const tier4 = new THREE.Mesh(new THREE.ConeGeometry(0.2746, 1.0317, 7), leafMat);
  tier4.name = 'tier4';
  tier4.position.set(0, 2.6842, 0);
  tier4.rotation.set(0, deg(69), 0);
  root.add(tier4);

  root.traverse((o) => {
    if (o.isMesh) {
      o.castShadow = true;
      o.receiveShadow = true;
    }
  });
  return root;
}

export default createPineTree;
```

---
Codels — 3D models as code for three.js. Search more: https://codels.download/api/v1/models?q=<query> · Guide: https://codels.download/llms.txt
