EZ-Tree:基于Three.js的程序化树木生成器
EZ-Tree是一个功能强大的程序化树木生成器,拥有数十个可调参数。该项目不仅提供独立的树木生成库,可以导入到您的应用程序中按需动态生成树木,还包含一个独立的Web应用,允许您在浏览器中创建树木并导出为.PNG或.GLB文件。
项目核心特性
EZ-Tree基于JavaScript和Three.js构建,采用递归算法生成复杂的分支结构,每棵树都能展现出独特的几何形态。通过精细的参数控制系统,用户可以全面定制树木的外观特征。
技术架构与应用场景
该项目采用模块化设计,核心库位于src/lib目录,包含树木生成的核心逻辑和算法。独立应用位于src/app目录,提供直观的用户界面和实时预览功能。
主要应用领域
- 游戏开发 - 为游戏世界创建丰富多样的生态环境
- 虚拟现实 - 构建沉浸式森林景观,提升用户体验
- 建筑可视化 - 在建筑设计和城市规划模型中添加逼真树木
- 教育科研 - 辅助学生和研究人员理解树木生长模式
快速开始指南
安装方法
npm i @dgreenheck/ez-tree
基础使用示例
// 创建新的树木实例
const tree = new Tree();
// 设置参数
tree.options.seed = 12345;
tree.options.trunk.length = 20;
tree.options.branch.levels = 3;
// 生成树木并添加到Three.js场景
tree.generate();
scene.add(tree);
本地运行独立应用
要本地运行独立应用,首先需要构建EZ-Tree库:
npm install
npm run app
使用Docker运行应用
docker compose build
docker compose up -d
树木参数详解
TreeOptions类定义了一个选项对象,控制程序化生成树木的各种参数。每个属性都允许自定义树木的外观,包括树皮、树枝和树叶。
通用属性
- seed:设置随机生成的初始值,确保使用相同种子时生成一致的树木
- type:定义树木类型,可设置为TreeType枚举中的选项
树皮参数
树皮对象控制树干的外观和属性:
- type:指定要使用的树皮纹理类型
- tint:确定应用于树皮的色调颜色
- flatShading:布尔属性,指示是否对树皮使用平面着色
- textured:布尔值,指示是否将纹理应用于树皮
- textureScale:控制树皮纹理在x和y轴上的缩放比例
树枝参数
树枝对象定义树干和树枝级别的参数:
- levels:递归分支级别的数量
- angle:定义子分支相对于父分支生长的角度
- children:指定每个级别的子分支数量
- force:表示鼓励树木生长的外部方向力
- gnarliness:定义每个分支级别应具有的扭曲或卷曲程度
- length:每个级别的分支长度
- radius:每个级别的分支半径(或粗细)
- sections:沿每个分支级别长度的段数
- segments:构成每个分支的径向段数
- start:指定子分支应开始形成的父分支位置
- taper:控制每个级别分支的锥度
- twist:定义应用于每个分支级别的扭曲量
树叶参数
树叶对象定义控制树叶外观和放置的属性:
- type:指定树叶纹理类型
- billboard:定义树叶的渲染方式
- angle:定义树叶相对于父分支的角度
- count:要生成的树叶数量
- start:指定树叶应开始生长的分支长度位置
- size:树叶的大小
- sizeVariance:指定每个树叶实例应具有的大小变化量
- tint:应用于树叶的色调颜色
- alphaTest:设置树叶透明度的alpha阈值
项目结构与资源
项目包含完整的源代码、预设配置和资源文件:
- 核心库源码:src/lib/
- 独立应用源码:src/app/
- 预设配置:src/lib/presets/
- 纹理资源:src/lib/assets/
通过EZ-Tree,开发者和艺术家可以轻松创建逼真的三维树木模型,为数字世界增添自然的生机与美感。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




