# Pumpkin

> A plump ribbed pumpkin built from squashed lobes arranged around the axis, with a sunken top and a twisted green stem. Flip on the jack-o-lantern option for a carved face that glows warm orange — great for farm games, autumn markets and Halloween scenes.

![Pumpkin preview](https://codels.download/m/pumpkin.png)

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

## Facts

- Category: Food & Drink › Fruits & Vegetables
- Size (W × H × D): 0.38 × 0.30 × 0.38 m — units are meters, +Y up, front faces +Z
- Origin: center of the base (y = 0)
- Triangles: 1,004 · Meshes: 11 · Materials: 3
- License: CC0-1.0 (Codels built-in)
- Tags: gourd, pumpkin, vegetable, cartoon, low-poly, stylized, farm, halloween, horror, garden, farming-sim, decoration, food, prop, organic, round, emissive, game-ready, mobile-friendly, parametric, color-orange, size-small, poly-low
- Page: https://codels.download/models/pumpkin

## Files

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

## Parameters

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

| Param | Type | Range / options | Default | Current |
|---|---|---|---|---|
| `size` | number | 0.2 – 1.2 | 0.4 | 0.4 |
| `ribs` | int | 6 – 12 | 8 | 8 |
| `color` | color | #rrggbb | #e9711b | #e9711b |
| `jackOLantern` | boolean | true \| false | false | false |

## Parts

- pumpkin (group)
  - core (sphere · core)
  - lobe1 (sphere · skin)
  - lobe2 (sphere · skin)
  - lobe3 (sphere · skin)
  - lobe4 (sphere · skin)
  - lobe5 (sphere · skin)
  - lobe6 (sphere · skin)
  - lobe7 (sphere · skin)
  - lobe8 (sphere · skin)
  - stem (cylinder · stem)
  - stemBase (cylinder · stem)

## How to use

Save the code below as `pumpkin.js`, then:

```js
import { createPumpkin } from './pumpkin.js';
const model = createPumpkin();
scene.add(model);
```

## Code

```js
/**
 * Pumpkin — Codels 3D model library (https://codels.download/models/pumpkin)
 * License: CC0-1.0 · Units: meters · Y-up · Front: +Z · Origin: center of the base (y = 0)
 * Triangles: 1,004 · Size (W × H × D): 0.38 × 0.30 × 0.38 m
 *
 * Usage:
 *   import { createPumpkin } from './pumpkin.js';
 *   
 *   const model = createPumpkin();
 *   model.position.set(0, 0, 0);
 *   scene.add(model);
 */
import * as THREE from 'three';

const deg = THREE.MathUtils.degToRad;

export function createPumpkin() {
  const root = new THREE.Group();
  root.name = 'Pumpkin';

  // Materials
  const skinMat = new THREE.MeshStandardMaterial({ name: 'skin', color: 0xe9711b, roughness: 0.6, flatShading: true });
  const coreMat = new THREE.MeshStandardMaterial({ name: 'core', color: 0xc95f12, roughness: 0.7, flatShading: true });
  const stemMat = new THREE.MeshStandardMaterial({ name: 'stem', color: 0x6a7a32, roughness: 0.85, flatShading: true });

  // Shared geometries
  const sphereGeo = new THREE.SphereGeometry(1, 9, 7);

  // Parts
  const pumpkin = new THREE.Group();
  pumpkin.name = 'pumpkin';
  pumpkin.scale.setScalar(0.4);
  root.add(pumpkin);
  const core = new THREE.Mesh(new THREE.SphereGeometry(0.4, 10, 6), coreMat);
  core.name = 'core';
  core.position.set(0, 0.31, 0);
  core.scale.set(1, 0.72, 1);
  pumpkin.add(core);
  const lobe1 = new THREE.Mesh(sphereGeo, skinMat);
  lobe1.name = 'lobe1';
  lobe1.position.set(0, 0.31, 0.2);
  lobe1.rotation.set(0, deg(-90), 0);
  lobe1.scale.set(0.3, 0.31, 0.32);
  pumpkin.add(lobe1);
  const lobe2 = new THREE.Mesh(sphereGeo, skinMat);
  lobe2.name = 'lobe2';
  lobe2.position.set(0.1414, 0.31, 0.1414);
  lobe2.rotation.set(0, deg(-45), 0);
  lobe2.scale.set(0.3, 0.31, 0.32);
  pumpkin.add(lobe2);
  const lobe3 = new THREE.Mesh(sphereGeo, skinMat);
  lobe3.name = 'lobe3';
  lobe3.position.set(0.2, 0.31, 0);
  lobe3.scale.set(0.3, 0.31, 0.32);
  pumpkin.add(lobe3);
  const lobe4 = new THREE.Mesh(sphereGeo, skinMat);
  lobe4.name = 'lobe4';
  lobe4.position.set(0.1414, 0.31, -0.1414);
  lobe4.rotation.set(0, deg(45), 0);
  lobe4.scale.set(0.3, 0.31, 0.32);
  pumpkin.add(lobe4);
  const lobe5 = new THREE.Mesh(sphereGeo, skinMat);
  lobe5.name = 'lobe5';
  lobe5.position.set(0, 0.31, -0.2);
  lobe5.rotation.set(0, deg(90), 0);
  lobe5.scale.set(0.3, 0.31, 0.32);
  pumpkin.add(lobe5);
  const lobe6 = new THREE.Mesh(sphereGeo, skinMat);
  lobe6.name = 'lobe6';
  lobe6.position.set(-0.1414, 0.31, -0.1414);
  lobe6.rotation.set(0, deg(135), 0);
  lobe6.scale.set(0.3, 0.31, 0.32);
  pumpkin.add(lobe6);
  const lobe7 = new THREE.Mesh(sphereGeo, skinMat);
  lobe7.name = 'lobe7';
  lobe7.position.set(-0.2, 0.31, 0);
  lobe7.rotation.set(0, deg(180), 0);
  lobe7.scale.set(0.3, 0.31, 0.32);
  pumpkin.add(lobe7);
  const lobe8 = new THREE.Mesh(sphereGeo, skinMat);
  lobe8.name = 'lobe8';
  lobe8.position.set(-0.1414, 0.31, 0.1414);
  lobe8.rotation.set(0, deg(225), 0);
  lobe8.scale.set(0.3, 0.31, 0.32);
  pumpkin.add(lobe8);
  const stem = new THREE.Mesh(new THREE.CylinderGeometry(0.035, 0.055, 0.2, 5), stemMat);
  stem.name = 'stem';
  stem.position.set(0.005, 0.6518, 0);
  stem.rotation.set(deg(8), deg(25), deg(-10));
  pumpkin.add(stem);
  const stemBase = new THREE.Mesh(new THREE.CylinderGeometry(0.075, 0.05, 0.03, 5), stemMat);
  stemBase.name = 'stemBase';
  stemBase.position.set(0, 0.573, 0);
  pumpkin.add(stemBase);

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

export default createPumpkin;
```

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