Codels
1,6 k tris3,68 × 7,07 × 2,88 m

Utiliser dans le code

Remixer dans l’éditeur
Module ES autonome — ne dépend que de three. Appelez la fonction factory et ajoutez le groupe à votre scène.
/**
 * Birch Tree — Codels 3D model library
 * License: CC0-1.0 · Units: meters · Y-up · Front: +Z · Origin: center of the base (y = 0)
 * Triangles: 1,628 · Size (W × H × D): 3.67 × 7.07 × 2.88 m
 *
 * Usage:
 *   import { createBirchTree } from './birch-tree.js';
 *   
 *   const model = createBirchTree();
 *   model.position.set(0, 0, 0);
 *   scene.add(model);
 */
import * as THREE from 'three';

const deg = THREE.MathUtils.degToRad;

// Deterministic vertex displacement (organic low-poly look).
function jitter(geometry, amount, seed) {
  const pos = geometry.attributes.position;
  const h = (a, b, c, s) => {
    let x = Math.imul(a, 73856093) ^ Math.imul(b, 19349663) ^ Math.imul(c, 83492791) ^ Math.imul(s, 2654435761);
    x = Math.imul(x ^ (x >>> 16), 2246822507);
    x = Math.imul(x ^ (x >>> 13), 3266489909);
    return ((x ^ (x >>> 16)) >>> 0) / 4294967295 - 0.5;
  };
  for (let i = 0; i < pos.count; i++) {
    const x = pos.getX(i), y = pos.getY(i), z = pos.getZ(i);
    const qx = Math.round(x * 1000), qy = Math.round(y * 1000), qz = Math.round(z * 1000);
    pos.setXYZ(i, x + h(qx, qy, qz, seed) * 2 * amount, y + h(qx, qy, qz, seed + 1) * 2 * amount, z + h(qx, qy, qz, seed + 2) * 2 * amount);
  }
  pos.needsUpdate = true;
  geometry.computeVertexNormals();
  return geometry;
}

export function createBirchTree() {
  const root = new THREE.Group();
  root.name = 'BirchTree';

  // Materials
  const barkMat = new THREE.MeshStandardMaterial({ name: 'bark', color: 0xece8de, roughness: 0.8, flatShading: true });
  const stripeMat = new THREE.MeshStandardMaterial({ name: 'stripe', color: 0x2e2925, roughness: 0.95, flatShading: true });
  const baseMat = new THREE.MeshStandardMaterial({ name: 'base', color: 0x6b625a, roughness: 0.95, flatShading: true });
  const leafMat = new THREE.MeshStandardMaterial({ name: 'leaf', color: 0x9cc95a, roughness: 0.85, flatShading: true });
  const leafLightMat = new THREE.MeshStandardMaterial({ name: 'leafLight', color: 0xa4d171, roughness: 0.85, flatShading: true });
  const leafDarkMat = new THREE.MeshStandardMaterial({ name: 'leafDark', color: 0x86a54a, roughness: 0.9, flatShading: true });

  // Parts
  const trunk1 = new THREE.Group();
  trunk1.name = 'trunk1';
  trunk1.position.set(0.1407, 0.0226, 0.104);
  trunk1.rotation.set(deg(4.2818), 0, deg(-5.7937));
  root.add(trunk1);
  const stem = new THREE.Mesh(new THREE.CylinderGeometry(0.042, 0.154, 7, 6), barkMat);
  stem.name = 'stem';
  stem.position.set(0, 3.5, 0);
  trunk1.add(stem);
  const rootBand = new THREE.Mesh(new THREE.CylinderGeometry(0.1608, 0.1817, 0.49, 6), baseMat);
  rootBand.name = 'rootBand';
  rootBand.position.set(0, 0.245, 0);
  trunk1.add(rootBand);
  const dash1 = new THREE.Mesh(new THREE.BoxGeometry(0.0735, 0.0769, 0.0176), stripeMat);
  dash1.name = 'dash1';
  dash1.position.set(-0.0788, 4.13, 0);
  dash1.rotation.set(0, deg(270), 0);
  trunk1.add(dash1);
  const dash2 = new THREE.Mesh(new THREE.BoxGeometry(0.0838, 0.0576, 0.02), stripeMat);
  dash2.name = 'dash2';
  dash2.position.set(-0.0448, 3.3812, -0.0775);
  dash2.rotation.set(0, deg(210), 0);
  trunk1.add(dash2);
  const dash3 = new THREE.Mesh(new THREE.BoxGeometry(0.0917, 0.0602, 0.0235), stripeMat);
  dash3.name = 'dash3';
  dash3.position.set(0.0526, 2.2936, -0.091);
  dash3.rotation.set(0, deg(150), 0);
  trunk1.add(dash3);
  const dash4 = new THREE.Mesh(new THREE.BoxGeometry(0.0673, 0.0637, 0.0162), stripeMat);
  dash4.name = 'dash4';
  dash4.position.set(0.0363, 4.5585, -0.0629);
  dash4.rotation.set(0, deg(150), 0);
  trunk1.add(dash4);
  const dash5 = new THREE.Mesh(new THREE.BoxGeometry(0.0465, 0.0802, 0.0168), stripeMat);
  dash5.name = 'dash5';
  dash5.position.set(0.0377, 4.3633, -0.0653);
  dash5.rotation.set(0, deg(150), 0);
  trunk1.add(dash5);
  const dash6 = new THREE.Mesh(new THREE.BoxGeometry(0.057, 0.0669, 0.0152), stripeMat);
  dash6.name = 'dash6';
  dash6.position.set(-0.034, 4.8788, 0.0589);
  dash6.rotation.set(0, deg(330), 0);
  trunk1.add(dash6);
  const dash7 = new THREE.Mesh(new THREE.BoxGeometry(0.0827, 0.0606, 0.0187), stripeMat);
  dash7.name = 'dash7';
  dash7.position.set(0.0837, 3.7884, 0);
  dash7.rotation.set(0, deg(90), 0);
  trunk1.add(dash7);
  const dash8 = new THREE.Mesh(new THREE.BoxGeometry(0.079, 0.0798, 0.0216), stripeMat);
  dash8.name = 'dash8';
  dash8.position.set(0.0485, 2.8635, 0.0839);
  dash8.rotation.set(0, deg(30), 0);
  trunk1.add(dash8);
  const dash9 = new THREE.Mesh(new THREE.BoxGeometry(0.0582, 0.0638, 0.0184), stripeMat);
  dash9.name = 'dash9';
  dash9.position.set(0.0824, 3.8758, 0);
  dash9.rotation.set(0, deg(90), 0);
  trunk1.add(dash9);
  const dash10 = new THREE.Mesh(new THREE.BoxGeometry(0.0911, 0.0625, 0.0257), stripeMat);
  dash10.name = 'dash10';
  dash10.position.set(-0.0575, 1.6059, 0.0996);
  dash10.rotation.set(0, deg(330), 0);
  trunk1.add(dash10);
  const dash11 = new THREE.Mesh(new THREE.BoxGeometry(0.077, 0.0677, 0.0219), stripeMat);
  dash11.name = 'dash11';
  dash11.position.set(0.0491, 2.7747, -0.0851);
  dash11.rotation.set(0, deg(150), 0);
  trunk1.add(dash11);
  const dash12 = new THREE.Mesh(new THREE.BoxGeometry(0.0547, 0.059, 0.0223), stripeMat);
  dash12.name = 'dash12';
  dash12.position.set(0.05, 2.6471, 0.0866);
  dash12.rotation.set(0, deg(30), 0);
  trunk1.add(dash12);
  const dash13 = new THREE.Mesh(new THREE.BoxGeometry(0.0747, 0.0636, 0.026), stripeMat);
  dash13.name = 'dash13';
  dash13.position.set(-0.1164, 1.506, 0);
  dash13.rotation.set(0, deg(270), 0);
  trunk1.add(dash13);
  const dash14 = new THREE.Mesh(new THREE.BoxGeometry(0.0805, 0.0502, 0.0259), stripeMat);
  dash14.name = 'dash14';
  dash14.position.set(0.058, 1.5332, 0.1005);
  dash14.rotation.set(0, deg(30), 0);
  trunk1.add(dash14);
  const dash15 = new THREE.Mesh(new THREE.BoxGeometry(0.0668, 0.07, 0.0214), stripeMat);
  dash15.name = 'dash15';
  dash15.position.set(-0.0479, 2.9458, 0.0829);
  dash15.rotation.set(0, deg(330), 0);
  trunk1.add(dash15);
  const dash16 = new THREE.Mesh(new THREE.BoxGeometry(0.0699, 0.0755, 0.0228), stripeMat);
  dash16.name = 'dash16';
  dash16.position.set(0.0511, 2.4929, -0.0886);
  dash16.rotation.set(0, deg(150), 0);
  trunk1.add(dash16);
  const dash17 = new THREE.Mesh(new THREE.BoxGeometry(0.0539, 0.0671, 0.023), stripeMat);
  dash17.name = 'dash17';
  dash17.position.set(-0.1031, 2.435, 0);
  dash17.rotation.set(0, deg(270), 0);
  trunk1.add(dash17);
  const leaves1 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.5592, 0), 0.0671, 388), leafDarkMat);
  leaves1.name = 'leaves1';
  leaves1.position.set(0.5727, 2.9497, 0.0738);
  leaves1.rotation.set(deg(73.4034), deg(288.6261), deg(42.9238));
  leaves1.scale.set(1, 0.72, 1);
  trunk1.add(leaves1);
  const twig1 = new THREE.Mesh(new THREE.CylinderGeometry(0.021, 0.0516, 0.5632, 4), barkMat);
  twig1.name = 'twig1';
  twig1.position.set(0.2291, 2.6208, 0.0295);
  twig1.rotation.set(deg(6.0237), deg(-3.108), deg(-54.5519));
  trunk1.add(twig1);
  const leaves2 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.5773, 0), 0.0693, 389), leafDarkMat);
  leaves2.name = 'leaves2';
  leaves2.position.set(-0.2871, 3.1907, -0.6457);
  leaves2.rotation.set(deg(59.2857), deg(35.4968), deg(59.5406));
  leaves2.scale.set(1, 0.72, 1);
  trunk1.add(leaves2);
  const leaves3 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.6098, 0), 0.0732, 390), leafDarkMat);
  leaves3.name = 'leaves3';
  leaves3.position.set(-0.4395, 3.4749, 0.6826);
  leaves3.rotation.set(deg(84.639), deg(73.8131), deg(34.5893));
  leaves3.scale.set(1, 0.72, 1);
  trunk1.add(leaves3);
  const twig3 = new THREE.Mesh(new THREE.CylinderGeometry(0.021, 0.0478, 0.7184, 4), barkMat);
  twig3.name = 'twig3';
  twig3.position.set(-0.1758, 3.1384, 0.273);
  twig3.rotation.set(deg(51.934), deg(15.1079), deg(30.4637));
  trunk1.add(twig3);
  const leaves4 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.6463, 0), 0.0776, 391), leafDarkMat);
  leaves4.name = 'leaves4';
  leaves4.position.set(0.8883, 3.6966, 0.0192);
  leaves4.rotation.set(deg(77.628), deg(213.0255), deg(59.7425));
  leaves4.scale.set(1, 0.72, 1);
  trunk1.add(leaves4);
  const leaves5 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.5744, 0), 0.0689, 392), leafLightMat);
  leaves5.name = 'leaves5';
  leaves5.position.set(-0.8081, 4.3853, -0.4669);
  leaves5.rotation.set(deg(37.7315), deg(196.91), deg(60.7737));
  leaves5.scale.set(1, 0.72, 1);
  trunk1.add(leaves5);
  const twig5 = new THREE.Mesh(new THREE.CylinderGeometry(0.021, 0.0413, 0.8114, 4), barkMat);
  twig5.name = 'twig5';
  twig5.position.set(-0.3232, 4.0541, -0.1868);
  twig5.rotation.set(deg(-28.5053), deg(-15.2831), deg(55.6842));
  trunk1.add(twig5);
  const leaves6 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.6348, 0), 0.0762, 393), leafLightMat);
  leaves6.name = 'leaves6';
  leaves6.position.set(-0.1046, 4.6604, 0.9387);
  leaves6.rotation.set(deg(53.8574), deg(235.909), deg(34.6492));
  leaves6.scale.set(1, 0.72, 1);
  trunk1.add(leaves6);
  const leaves7 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.6751, 0), 0.081, 394), leafMat);
  leaves7.name = 'leaves7';
  leaves7.position.set(0.8496, 4.6391, -0.3567);
  leaves7.rotation.set(deg(84.0865), deg(82.2343), deg(5.4748));
  leaves7.scale.set(1, 0.72, 1);
  trunk1.add(leaves7);
  const twig7 = new THREE.Mesh(new THREE.CylinderGeometry(0.021, 0.0394, 0.7912, 4), barkMat);
  twig7.name = 'twig7';
  twig7.position.set(0.3398, 4.2929, -0.1427);
  twig7.rotation.set(deg(-21.7383), deg(13.1359), deg(-61.897));
  trunk1.add(twig7);
  const leaves8 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.5901, 0), 0.0708, 395), leafLightMat);
  leaves8.name = 'leaves8';
  leaves8.position.set(-0.8628, 5.3243, 0.0653);
  leaves8.rotation.set(deg(83.8135), deg(142.9853), deg(50.3736));
  leaves8.scale.set(1, 0.72, 1);
  trunk1.add(leaves8);
  const leaves9 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.6211, 0), 0.0745, 396), leafMat);
  leaves9.name = 'leaves9';
  leaves9.position.set(0.248, 5.3743, 0.7377);
  leaves9.rotation.set(deg(28.2788), deg(208.5037), deg(69.9012));
  leaves9.scale.set(1, 0.72, 1);
  trunk1.add(leaves9);
  const twig9 = new THREE.Mesh(new THREE.CylinderGeometry(0.021, 0.0341, 0.6927, 4), barkMat);
  twig9.name = 'twig9';
  twig9.position.set(0.0992, 5.0361, 0.2951);
  twig9.rotation.set(deg(59.8244), deg(-9.7649), deg(-16.8911));
  trunk1.add(twig9);
  const leaves10 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.4896, 0), 0.0588, 397), leafLightMat);
  leaves10.name = 'leaves10';
  leaves10.position.set(0.2388, 5.8158, -0.6198);
  leaves10.rotation.set(deg(89.5795), deg(319.983), deg(54.1611));
  leaves10.scale.set(1, 0.72, 1);
  trunk1.add(leaves10);
  const leaves11 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.4504, 0), 0.054, 398), leafLightMat);
  leaves11.name = 'leaves11';
  leaves11.position.set(-0.5107, 6.0738, 0.1334);
  leaves11.rotation.set(deg(11.9234), deg(82.0899), deg(51.8621));
  leaves11.scale.set(1, 0.72, 1);
  trunk1.add(leaves11);
  const twig11 = new THREE.Mesh(new THREE.CylinderGeometry(0.021, 0.0291, 0.5516, 4), barkMat);
  twig11.name = 'twig11';
  twig11.position.set(-0.2043, 5.7612, 0.0533);
  twig11.rotation.set(deg(11.1958), deg(5.0013), deg(48.0326));
  trunk1.add(twig11);
  const leaves12 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.4632, 0), 0.0556, 399), leafLightMat);
  leaves12.name = 'leaves12';
  leaves12.position.set(0.1771, 6.1551, 0.3305);
  leaves12.rotation.set(deg(20.8778), deg(126.0153), deg(9.4484));
  leaves12.scale.set(1, 0.72, 1);
  trunk1.add(leaves12);
  const leaves13 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.4165, 0), 0.05, 400), leafLightMat);
  leaves13.name = 'leaves13';
  leaves13.position.set(-0.0103, 6.6239, -0.2119);
  leaves13.rotation.set(deg(37.4807), deg(271.1383), deg(39.9908));
  leaves13.scale.set(1, 0.72, 1);
  trunk1.add(leaves13);
  const leaves14 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.3745, 0), 0.0449, 401), leafLightMat);
  leaves14.name = 'leaves14';
  leaves14.position.set(-0.1378, 6.8111, 0.0245);
  leaves14.rotation.set(deg(3.2519), deg(290.2387), deg(53.6753));
  leaves14.scale.set(1, 0.72, 1);
  trunk1.add(leaves14);
  const trunk2 = new THREE.Group();
  trunk2.name = 'trunk2';
  trunk2.position.set(-0.1282, 0.0204, -0.0286);
  trunk2.rotation.set(deg(-1.965), 0, deg(8.7977));
  root.add(trunk2);
  const stem2 = new THREE.Mesh(new THREE.CylinderGeometry(0.0315, 0.1156, 5.2546, 6), barkMat);
  stem2.name = 'stem';
  stem2.position.set(0, 2.6273, 0);
  trunk2.add(stem2);
  const rootBand2 = new THREE.Mesh(new THREE.CylinderGeometry(0.1207, 0.1364, 0.3678, 6), baseMat);
  rootBand2.name = 'rootBand';
  rootBand2.position.set(0, 0.1839, 0);
  trunk2.add(rootBand2);
  const dash18 = new THREE.Mesh(new THREE.BoxGeometry(0.0645, 0.0391, 0.0149), stripeMat);
  dash18.name = 'dash1';
  dash18.position.set(0.0334, 2.5707, -0.0578);
  dash18.rotation.set(0, deg(150), 0);
  trunk2.add(dash18);
  const dash22 = new THREE.Mesh(new THREE.BoxGeometry(0.0405, 0.0577, 0.0103), stripeMat);
  dash22.name = 'dash2';
  dash22.position.set(-0.0231, 3.9958, 0.0401);
  dash22.rotation.set(0, deg(330), 0);
  trunk2.add(dash22);
  const dash32 = new THREE.Mesh(new THREE.BoxGeometry(0.0433, 0.0404, 0.0151), stripeMat);
  dash32.name = 'dash3';
  dash32.position.set(-0.0677, 2.4997, 0);
  dash32.rotation.set(0, deg(270), 0);
  trunk2.add(dash32);
  const dash42 = new THREE.Mesh(new THREE.BoxGeometry(0.0454, 0.0399, 0.0101), stripeMat);
  dash42.name = 'dash4';
  dash42.position.set(-0.0454, 4.0614, 0);
  dash42.rotation.set(0, deg(270), 0);
  trunk2.add(dash42);
  const dash52 = new THREE.Mesh(new THREE.BoxGeometry(0.0306, 0.0592, 0.0101), stripeMat);
  dash52.name = 'dash5';
  dash52.position.set(0.0454, 4.0588, 0);
  dash52.rotation.set(0, deg(90), 0);
  trunk2.add(dash52);
  const dash62 = new THREE.Mesh(new THREE.BoxGeometry(0.0681, 0.0598, 0.0169), stripeMat);
  dash62.name = 'dash6';
  dash62.position.set(0.0755, 1.9578, 0);
  dash62.rotation.set(0, deg(90), 0);
  trunk2.add(dash62);
  const dash72 = new THREE.Mesh(new THREE.BoxGeometry(0.0487, 0.0516, 0.0211), stripeMat);
  dash72.name = 'dash7';
  dash72.position.set(-0.0472, 0.6357, -0.0818);
  dash72.rotation.set(0, deg(210), 0);
  trunk2.add(dash72);
  const dash82 = new THREE.Mesh(new THREE.BoxGeometry(0.0413, 0.0489, 0.0151), stripeMat);
  dash82.name = 'dash8';
  dash82.position.set(0.0338, 2.506, -0.0586);
  dash82.rotation.set(0, deg(150), 0);
  trunk2.add(dash82);
  const dash92 = new THREE.Mesh(new THREE.BoxGeometry(0.0267, 0.0392, 0.011), stripeMat);
  dash92.name = 'dash9';
  dash92.position.set(-0.0246, 3.7913, -0.0426);
  dash92.rotation.set(0, deg(210), 0);
  trunk2.add(dash92);
  const dash102 = new THREE.Mesh(new THREE.BoxGeometry(0.0622, 0.0317, 0.015), stripeMat);
  dash102.name = 'dash10';
  dash102.position.set(-0.0672, 2.5349, 0);
  dash102.rotation.set(0, deg(270), 0);
  trunk2.add(dash102);
  const dash112 = new THREE.Mesh(new THREE.BoxGeometry(0.066, 0.0606, 0.0181), stripeMat);
  dash112.name = 'dash11';
  dash112.position.set(-0.0813, 1.5568, 0);
  dash112.rotation.set(0, deg(270), 0);
  trunk2.add(dash112);
  const dash122 = new THREE.Mesh(new THREE.BoxGeometry(0.064, 0.0455, 0.0165), stripeMat);
  dash122.name = 'dash12';
  dash122.position.set(0.0369, 2.0723, 0.064);
  dash122.rotation.set(0, deg(30), 0);
  trunk2.add(dash122);
  const dash132 = new THREE.Mesh(new THREE.BoxGeometry(0.0754, 0.0345, 0.0179), stripeMat);
  dash132.name = 'dash13';
  dash132.position.set(0.08, 1.643, 0);
  dash132.rotation.set(0, deg(90), 0);
  trunk2.add(dash132);
  const dash142 = new THREE.Mesh(new THREE.BoxGeometry(0.0922, 0.0419, 0.0204), stripeMat);
  dash142.name = 'dash14';
  dash142.position.set(0.0913, 0.8548, 0);
  dash142.rotation.set(0, deg(90), 0);
  trunk2.add(dash142);
  const dash152 = new THREE.Mesh(new THREE.BoxGeometry(0.0531, 0.0419, 0.0191), stripeMat);
  dash152.name = 'dash15';
  dash152.position.set(0.0428, 1.259, 0.0741);
  dash152.rotation.set(0, deg(30), 0);
  trunk2.add(dash152);
  const leaves15 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.3374, 0), 0.0405, 419), leafDarkMat);
  leaves15.name = 'leaves1';
  leaves15.position.set(0.4146, 2.0729, -0.1397);
  leaves15.rotation.set(deg(32.5028), deg(260.0932), deg(49.3144));
  leaves15.scale.set(1, 0.72, 1);
  trunk2.add(leaves15);
  const twig12 = new THREE.Mesh(new THREE.CylinderGeometry(0.0158, 0.0397, 0.44, 4), barkMat);
  twig12.name = 'twig1';
  twig12.position.set(0.1658, 1.8384, -0.0559);
  twig12.rotation.set(deg(-14.82), deg(6.8464), deg(-49.3995));
  trunk2.add(twig12);
  const leaves22 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.4243, 0), 0.0509, 420), leafDarkMat);
  leaves22.name = 'leaves2';
  leaves22.position.set(-0.1915, 2.5193, -0.5055);
  leaves22.rotation.set(deg(9.6746), deg(90.1417), deg(75.1377));
  leaves22.scale.set(1, 0.72, 1);
  trunk2.add(leaves22);
  const leaves32 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.3894, 0), 0.0467, 421), leafDarkMat);
  leaves32.name = 'leaves3';
  leaves32.position.set(-0.3577, 2.603, 0.5091);
  leaves32.rotation.set(deg(85.6194), deg(295.6045), deg(58.2741));
  leaves32.scale.set(1, 0.72, 1);
  trunk2.add(leaves32);
  const twig32 = new THREE.Mesh(new THREE.CylinderGeometry(0.0158, 0.0359, 0.5575, 4), barkMat);
  twig32.name = 'twig3';
  twig32.position.set(-0.1431, 2.3606, 0.2036);
  twig32.rotation.set(deg(49.1397), deg(14.9868), deg(32.1008));
  trunk2.add(twig32);
  const leaves42 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.4527, 0), 0.0543, 422), leafDarkMat);
  leaves42.name = 'leaves4';
  leaves42.position.set(0.5355, 2.9215, -0.4166);
  leaves42.rotation.set(deg(5.726), deg(336.5948), deg(37.4783));
  leaves42.scale.set(1, 0.72, 1);
  trunk2.add(leaves42);
  const leaves52 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.4298, 0), 0.0516, 423), leafLightMat);
  leaves52.name = 'leaves5';
  leaves52.position.set(-0.5349, 3.3869, -0.4614);
  leaves52.rotation.set(deg(74.3543), deg(73.3702), deg(27.8049));
  leaves52.scale.set(1, 0.72, 1);
  trunk2.add(leaves52);
  const twig52 = new THREE.Mesh(new THREE.CylinderGeometry(0.0158, 0.0303, 0.6135, 4), barkMat);
  twig52.name = 'twig5';
  twig52.position.set(-0.214, 3.1386, -0.1846);
  twig52.rotation.set(deg(-39.1317), deg(-17.5789), deg(47.0221));
  trunk2.add(twig52);
  const leaves62 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.4084, 0), 0.049, 424), leafMat);
  leaves62.name = 'leaves6';
  leaves62.position.set(-0.0082, 3.5833, 0.7047);
  leaves62.rotation.set(deg(88.1426), deg(100.6363), deg(75.4095));
  leaves62.scale.set(1, 0.72, 1);
  trunk2.add(leaves62);
  const leaves72 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.448, 0), 0.0538, 425), leafMat);
  leaves72.name = 'leaves7';
  leaves72.position.set(0.5824, 3.6927, -0.3386);
  leaves72.rotation.set(deg(32.5608), deg(22.0269), deg(77.6961));
  leaves72.scale.set(1, 0.72, 1);
  trunk2.add(leaves72);
  const twig72 = new THREE.Mesh(new THREE.CylinderGeometry(0.0158, 0.0281, 0.5873, 4), barkMat);
  twig72.name = 'twig7';
  twig72.position.set(0.233, 3.4415, -0.1354);
  twig72.rotation.set(deg(-28.545), deg(15.1768), deg(-55.2823));
  trunk2.add(twig72);
  const leaves82 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.4579, 0), 0.0549, 426), leafMat);
  leaves82.name = 'leaves8';
  leaves82.position.set(-0.5345, 4.0918, -0.3032);
  leaves82.rotation.set(deg(12.0748), deg(61.2067), deg(57.9957));
  leaves82.scale.set(1, 0.72, 1);
  trunk2.add(leaves82);
  const leaves92 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.4321, 0), 0.0519, 427), leafMat);
  leaves92.name = 'leaves9';
  leaves92.position.set(0.0788, 4.3516, 0.5244);
  leaves92.rotation.set(deg(30.5166), deg(199.7705), deg(76.4922));
  leaves92.scale.set(1, 0.72, 1);
  trunk2.add(leaves92);
  const twig92 = new THREE.Mesh(new THREE.CylinderGeometry(0.0158, 0.0233, 0.4865, 4), barkMat);
  twig92.name = 'twig9';
  twig92.position.set(0.0315, 4.1029, 0.2098);
  twig92.rotation.set(deg(59.8514), deg(-4.2997), deg(-7.4626));
  trunk2.add(twig92);
  const leaves102 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.3329, 0), 0.04, 428), leafLightMat);
  leaves102.name = 'leaves10';
  leaves102.position.set(0.0914, 4.503, -0.4152);
  leaves102.rotation.set(deg(25.5574), deg(291.2982), deg(21.1455));
  leaves102.scale.set(1, 0.72, 1);
  trunk2.add(leaves102);
  const leaves112 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.3436, 0), 0.0412, 429), leafLightMat);
  leaves112.name = 'leaves11';
  leaves112.position.set(-0.2968, 4.6372, -0.0672);
  leaves112.rotation.set(deg(31.2444), deg(134.3259), deg(20.1655));
  leaves112.scale.set(1, 0.72, 1);
  trunk2.add(leaves112);
  const leaves122 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.2708, 0), 0.0325, 430), leafLightMat);
  leaves122.name = 'leaves12';
  leaves122.position.set(0.09, 4.8945, 0.1484);
  leaves122.rotation.set(deg(22.0519), deg(348.7076), deg(34.8204));
  leaves122.scale.set(1, 0.72, 1);
  trunk2.add(leaves122);
  const leaves132 = new THREE.Mesh(jitter(new THREE.DodecahedronGeometry(0.2644, 0), 0.0317, 431), leafLightMat);
  leaves132.name = 'leaves13';
  leaves132.position.set(0.0236, 5.3364, -0.1024);
  leaves132.rotation.set(deg(82.8508), deg(327.7062), deg(4.7871));
  leaves132.scale.set(1, 0.72, 1);
  trunk2.add(leaves132);

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

export default createBirchTree;

Notes et commentaires

—
Aucune note pour l’instant — soyez le premier.
5
0
4
0
3
0
2
0
1
0

Connectez-vous pour noter et commenter.

0 commentaire

Aucun commentaire pour l’instant. Dites comment vous avez utilisé ce modèle ou ce qui pourrait être amélioré.

Modèles similaires

Même catégorie ou étiquettes proches