# tree-js
**Repository Path**: lybcxz/tree-js
## Basic Information
- **Project Name**: tree-js
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: additionalPresets
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-08-26
- **Last Updated**: 2024-08-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Tree.js
A procedural tree generator built with Three.js. Over 30 tunable parameters and support for exporting to .glb.
## Live Demo
https://dgreenheck.github.io/tree-js/
# Installation
The tree generation code is published as an npm package and can be imported into your own project.
```js
npm i @dgreenheck/tree-js
```
# Usage
```js
// Create new instance
const tree = new Tree();
// Set parameters
tree.options.trunk.length = 20;
tree.options.branch.levels = 3;
// Generate tree and add to scene
tree.generate();
scene.add(tree);
```
Any time the tree parametes are changed, you must call `generate()` to regenerate the geometry.
For more info, see the demo app for an example on how to create a tree.
# Demo
The demo application is a Three.js app which allows you to tune the parameters of the tree in real-time. It also has options for exporting the generated mesh to a `.glb` file, as well as a `.png` export of the current view for 2D applications.
## Running Demo Locally
```bash
npm install
npm run build:lib
npm run demo
```
## Running Demo with Docker
```bash
docker compose build
docker compose up -d
```
# Parameters
- `seed` - Seed for RNG
## Trunk
- `color` - Color of the tree trunk
- `flatShading` - Use face normals for shading instead of vertex normals
- `length` - Length of the base trunk
- `radius` - Starting radius of the trunk
## Branches
- `levels` - Number of branch recursions ( Keep under 5 )
- `children` - Number of child branches
- `start` - Defines where child branches start forming on the parent branch. A value of 0.6 means the child branches can start forming 60% of the way up the parent branch
- `stop` - Defines where child branches stop forming on the parent branch. A value of 0.9 means the child branches stop forming 90% of the way up the parent branch
- `angle` - Angle between child branch and parent branch (radians)
- `angleVariance` - Variation in `angle` (radians)
- `lengthVariance` - Variation in branch length
- `lengthMultiplier` - Length of child branch relative to parent
- `radiusMultiplier` - Radius of child branch relative to parent
- `taper` - Radius of end of branch relative to the start of the branch
- `gnarliness` - Max amplitude of random angle added to each section's orientation
- `twist` - Amount of twisting about the vertical axis
## External Force
- `direction` - Influences the direction the tree grows towards
- `strength` - Strength of the sun influence
## Geometry
- `sections` - Number of sections that make up this branch
- `segments` - Number of faces around the circumference of the branch
- `lengthVariance` - % variance in the nominal section length
- `radiusVariance` - % variance in the nominal section radius
- `randomization` - Randomization factor applied to vertices
## Leaves
- `style` - Leaf billboard style (single or double)
- `type` - Leaf type (Ash, Aspen or Oak)
- `color` - Leaf color
- `count` - Number of leaves per branch
- `size` - Size of leaf texture
- `sizeVariance` - Variance in leaf size between branches