Codels
1,2 mil tris2,00 × 1,19 × 0,82 m

Úsalo en código

Hacer remix en el editor
Módulo ES autónomo — solo depende de three. Llama a la función factory y añade el grupo a tu escena.
/**
 * Hedge — Codels 3D model library
 * License: CC0-1.0 · Units: meters · Y-up · Front: +Z · Origin: center of the base (y = 0)
 * Triangles: 1,224 · Size (W × H × D): 2.00 × 1.19 × 0.82 m
 *
 * Usage:
 *   import { createHedge } from './hedge.js';
 *   
 *   const model = createHedge();
 *   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 createHedge() {
  const root = new THREE.Group();
  root.name = 'Hedge';

  // Materials
  const leafMat = new THREE.MeshStandardMaterial({ name: 'leaf', color: 0x4c8a3a, roughness: 0.85, flatShading: true });
  const leafLightMat = new THREE.MeshStandardMaterial({ name: 'leafLight', color: 0x54994b, roughness: 0.85, flatShading: true });
  const leafDarkMat = new THREE.MeshStandardMaterial({ name: 'leafDark', color: 0x406c2d, roughness: 0.9, flatShading: true });
  const stemMat = new THREE.MeshStandardMaterial({ name: 'stem', color: 0x5e4430, roughness: 0.95, flatShading: true });
  const mulchMat = new THREE.MeshStandardMaterial({ name: 'mulch', color: 0x4a3526, roughness: 0.95, flatShading: true });

  // Shared geometries
  const cylinderGeo = new THREE.CylinderGeometry(0.025, 0.035, 0.26, 5);

  // Parts
  const mulch = new THREE.Mesh(new THREE.BoxGeometry(2, 0.04, 0.82), mulchMat);
  mulch.name = 'mulch';
  mulch.position.set(0, 0.02, 0);
  root.add(mulch);
  const stem1 = new THREE.Mesh(cylinderGeo, stemMat);
  stem1.name = 'stem1';
  stem1.position.set(-0.7143, 0.15, -0.0773);
  stem1.rotation.set(deg(3.8158), 0, deg(-5.0356));
  root.add(stem1);
  const stem2 = new THREE.Mesh(cylinderGeo, stemMat);
  stem2.name = 'stem2';
  stem2.position.set(-0.279, 0.15, 0.0203);
  stem2.rotation.set(deg(3.1552), 0, deg(1.3494));
  root.add(stem2);
  const stem3 = new THREE.Mesh(cylinderGeo, stemMat);
  stem3.name = 'stem3';
  stem3.position.set(0.1908, 0.15, -0.1018);
  stem3.rotation.set(deg(1.0824), 0, deg(3.9332));
  root.add(stem3);
  const stem4 = new THREE.Mesh(cylinderGeo, stemMat);
  stem4.name = 'stem4';
  stem4.position.set(0.7284, 0.15, -0.125);
  stem4.rotation.set(deg(-4.3268), 0, deg(-0.9811));
  root.add(stem4);
  const core = new THREE.Mesh(new THREE.BoxGeometry(2, 0.96, 0.62), leafMat);
  core.name = 'core';
  core.position.set(0, 0.62, 0);
  root.add(core);
  const foliage = new THREE.Group();
  foliage.name = 'foliage';
  root.add(foliage);
  const clump1 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.2042, 0), 0.0204, 1), leafMat);
  clump1.name = 'clump1';
  clump1.position.set(-0.7754, 0.4204, 0.3223);
  clump1.rotation.set(0, 0, deg(31.6432));
  clump1.scale.set(1, 1, 0.42);
  foliage.add(clump1);
  const clump2 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1621, 0), 0.0162, 2), leafMat);
  clump2.name = 'clump2';
  clump2.position.set(-0.5595, 0.4118, 0.3197);
  clump2.rotation.set(0, 0, deg(68.2104));
  clump2.scale.set(1, 1, 0.42);
  foliage.add(clump2);
  const clump3 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1908, 0), 0.0191, 3), leafDarkMat);
  clump3.name = 'clump3';
  clump3.position.set(-0.2359, 0.4108, 0.3214);
  clump3.rotation.set(0, 0, deg(36.0066));
  clump3.scale.set(1, 1, 0.42);
  foliage.add(clump3);
  const clump4 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1696, 0), 0.017, 4), leafLightMat);
  clump4.name = 'clump4';
  clump4.position.set(0.0269, 0.3802, 0.3202);
  clump4.rotation.set(0, 0, deg(28.9643));
  clump4.scale.set(1, 1, 0.42);
  foliage.add(clump4);
  const clump5 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.2098, 0), 0.021, 5), leafMat);
  clump5.name = 'clump5';
  clump5.position.set(0.3364, 0.3931, 0.3226);
  clump5.rotation.set(0, 0, deg(66.67));
  clump5.scale.set(1, 1, 0.42);
  foliage.add(clump5);
  const clump6 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.2067, 0), 0.0207, 6), leafMat);
  clump6.name = 'clump6';
  clump6.position.set(0.6131, 0.4045, 0.3224);
  clump6.rotation.set(0, 0, deg(34.1205));
  clump6.scale.set(1, 1, 0.42);
  foliage.add(clump6);
  const clump7 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.2111, 0), 0.0211, 7), leafDarkMat);
  clump7.name = 'clump7';
  clump7.position.set(0.7678, 0.4322, 0.3227);
  clump7.rotation.set(0, 0, deg(42.232));
  clump7.scale.set(1, 1, 0.42);
  foliage.add(clump7);
  const clump8 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.193, 0), 0.0193, 8), leafLightMat);
  clump8.name = 'clump8';
  clump8.position.set(-0.7877, 0.6546, 0.3216);
  clump8.rotation.set(0, 0, deg(17.8353));
  clump8.scale.set(1, 1, 0.42);
  foliage.add(clump8);
  const clump9 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.169, 0), 0.0169, 9), leafLightMat);
  clump9.name = 'clump9';
  clump9.position.set(-0.6223, 0.5871, 0.3201);
  clump9.rotation.set(0, 0, deg(0.6832));
  clump9.scale.set(1, 1, 0.42);
  foliage.add(clump9);
  const clump10 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.2097, 0), 0.021, 10), leafMat);
  clump10.name = 'clump10';
  clump10.position.set(-0.271, 0.5952, 0.3226);
  clump10.rotation.set(0, 0, deg(64.1166));
  clump10.scale.set(1, 1, 0.42);
  foliage.add(clump10);
  const clump11 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1996, 0), 0.02, 11), leafMat);
  clump11.name = 'clump11';
  clump11.position.set(0.0111, 0.5907, 0.322);
  clump11.rotation.set(0, 0, deg(61.673));
  clump11.scale.set(1, 1, 0.42);
  foliage.add(clump11);
  const clump12 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1937, 0), 0.0194, 12), leafLightMat);
  clump12.name = 'clump12';
  clump12.position.set(0.2578, 0.6326, 0.3216);
  clump12.rotation.set(0, 0, deg(27.422));
  clump12.scale.set(1, 1, 0.42);
  foliage.add(clump12);
  const clump13 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1714, 0), 0.0171, 13), leafLightMat);
  clump13.name = 'clump13';
  clump13.position.set(0.6144, 0.6316, 0.3203);
  clump13.rotation.set(0, 0, deg(15.2326));
  clump13.scale.set(1, 1, 0.42);
  foliage.add(clump13);
  const clump14 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1924, 0), 0.0192, 14), leafMat);
  clump14.name = 'clump14';
  clump14.position.set(0.7883, 0.6148, 0.3215);
  clump14.rotation.set(0, 0, deg(59.6999));
  clump14.scale.set(1, 1, 0.42);
  foliage.add(clump14);
  const clump15 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1937, 0), 0.0194, 15), leafMat);
  clump15.name = 'clump15';
  clump15.position.set(-0.787, 0.8819, 0.3216);
  clump15.rotation.set(0, 0, deg(39.4415));
  clump15.scale.set(1, 1, 0.42);
  foliage.add(clump15);
  const clump16 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.167, 0), 0.0167, 16), leafDarkMat);
  clump16.name = 'clump16';
  clump16.position.set(-0.6068, 0.8989, 0.32);
  clump16.rotation.set(0, 0, deg(12.5886));
  clump16.scale.set(1, 1, 0.42);
  foliage.add(clump16);
  const clump17 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1844, 0), 0.0184, 17), leafLightMat);
  clump17.name = 'clump17';
  clump17.position.set(-0.2336, 0.8299, 0.3211);
  clump17.rotation.set(0, 0, deg(40.7677));
  clump17.scale.set(1, 1, 0.42);
  foliage.add(clump17);
  const clump18 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.177, 0), 0.0177, 18), leafLightMat);
  clump18.name = 'clump18';
  clump18.position.set(0.0101, 0.854, 0.3206);
  clump18.rotation.set(0, 0, deg(0.1311));
  clump18.scale.set(1, 1, 0.42);
  foliage.add(clump18);
  const clump19 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1677, 0), 0.0168, 19), leafLightMat);
  clump19.name = 'clump19';
  clump19.position.set(0.2936, 0.818, 0.3201);
  clump19.rotation.set(0, 0, deg(24.4673));
  clump19.scale.set(1, 1, 0.42);
  foliage.add(clump19);
  const clump20 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1685, 0), 0.0169, 20), leafDarkMat);
  clump20.name = 'clump20';
  clump20.position.set(0.5873, 0.8893, 0.3201);
  clump20.rotation.set(0, 0, deg(24.0744));
  clump20.scale.set(1, 1, 0.42);
  foliage.add(clump20);
  const clump21 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1915, 0), 0.0191, 21), leafDarkMat);
  clump21.name = 'clump21';
  clump21.position.set(0.7894, 0.8176, 0.3215);
  clump21.rotation.set(0, 0, deg(30.3535));
  clump21.scale.set(1, 1, 0.42);
  foliage.add(clump21);
  const clump22 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1987, 0), 0.0199, 22), leafDarkMat);
  clump22.name = 'clump22';
  clump22.position.set(-0.7814, 0.4382, -0.3219);
  clump22.rotation.set(0, 0, deg(34.6269));
  clump22.scale.set(1, 1, 0.42);
  foliage.add(clump22);
  const clump23 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1775, 0), 0.0178, 23), leafLightMat);
  clump23.name = 'clump23';
  clump23.position.set(-0.5307, 0.409, -0.3207);
  clump23.rotation.set(0, 0, deg(56.4003));
  clump23.scale.set(1, 1, 0.42);
  foliage.add(clump23);
  const clump24 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1676, 0), 0.0168, 24), leafLightMat);
  clump24.name = 'clump24';
  clump24.position.set(-0.2711, 0.3758, -0.3201);
  clump24.rotation.set(0, 0, deg(5.9775));
  clump24.scale.set(1, 1, 0.42);
  foliage.add(clump24);
  const clump25 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.19, 0), 0.019, 25), leafMat);
  clump25.name = 'clump25';
  clump25.position.set(0.0455, 0.4342, -0.3214);
  clump25.rotation.set(0, 0, deg(47.3266));
  clump25.scale.set(1, 1, 0.42);
  foliage.add(clump25);
  const clump26 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1963, 0), 0.0196, 26), leafMat);
  clump26.name = 'clump26';
  clump26.position.set(0.3063, 0.4078, -0.3218);
  clump26.rotation.set(0, 0, deg(54.1526));
  clump26.scale.set(1, 1, 0.42);
  foliage.add(clump26);
  const clump27 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1708, 0), 0.0171, 27), leafDarkMat);
  clump27.name = 'clump27';
  clump27.position.set(0.5369, 0.3915, -0.3202);
  clump27.rotation.set(0, 0, deg(2.6441));
  clump27.scale.set(1, 1, 0.42);
  foliage.add(clump27);
  const clump28 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1638, 0), 0.0164, 28), leafLightMat);
  clump28.name = 'clump28';
  clump28.position.set(0.8198, 0.395, -0.3198);
  clump28.rotation.set(0, 0, deg(36.487));
  clump28.scale.set(1, 1, 0.42);
  foliage.add(clump28);
  const clump29 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.184, 0), 0.0184, 29), leafLightMat);
  clump29.name = 'clump29';
  clump29.position.set(-0.7976, 0.6578, -0.321);
  clump29.rotation.set(0, 0, deg(71.4422));
  clump29.scale.set(1, 1, 0.42);
  foliage.add(clump29);
  const clump30 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1747, 0), 0.0175, 30), leafLightMat);
  clump30.name = 'clump30';
  clump30.position.set(-0.5613, 0.6242, -0.3205);
  clump30.rotation.set(0, 0, deg(14.6108));
  clump30.scale.set(1, 1, 0.42);
  foliage.add(clump30);
  const clump31 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.2098, 0), 0.021, 31), leafMat);
  clump31.name = 'clump31';
  clump31.position.set(-0.3327, 0.6197, -0.3226);
  clump31.rotation.set(0, 0, deg(4.2285));
  clump31.scale.set(1, 1, 0.42);
  foliage.add(clump31);
  const clump32 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1918, 0), 0.0192, 32), leafLightMat);
  clump32.name = 'clump32';
  clump32.position.set(-0.0231, 0.6549, -0.3215);
  clump32.rotation.set(0, 0, deg(69.3491));
  clump32.scale.set(1, 1, 0.42);
  foliage.add(clump32);
  const clump33 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.2074, 0), 0.0207, 33), leafLightMat);
  clump33.name = 'clump33';
  clump33.position.set(0.3247, 0.6258, -0.3224);
  clump33.rotation.set(0, 0, deg(58.9439));
  clump33.scale.set(1, 1, 0.42);
  foliage.add(clump33);
  const clump34 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.2083, 0), 0.0208, 34), leafMat);
  clump34.name = 'clump34';
  clump34.position.set(0.61, 0.653, -0.3225);
  clump34.rotation.set(0, 0, deg(29.0359));
  clump34.scale.set(1, 1, 0.42);
  foliage.add(clump34);
  const clump35 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1617, 0), 0.0162, 35), leafDarkMat);
  clump35.name = 'clump35';
  clump35.position.set(0.8221, 0.6515, -0.3197);
  clump35.rotation.set(0, 0, deg(35.8614));
  clump35.scale.set(1, 1, 0.42);
  foliage.add(clump35);
  const clump36 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1973, 0), 0.0197, 36), leafMat);
  clump36.name = 'clump36';
  clump36.position.set(-0.7829, 0.8346, -0.3218);
  clump36.rotation.set(0, 0, deg(46.9658));
  clump36.scale.set(1, 1, 0.42);
  foliage.add(clump36);
  const clump37 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1671, 0), 0.0167, 37), leafDarkMat);
  clump37.name = 'clump37';
  clump37.position.set(-0.6204, 0.8234, -0.32);
  clump37.rotation.set(0, 0, deg(9.6639));
  clump37.scale.set(1, 1, 0.42);
  foliage.add(clump37);
  const clump38 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1672, 0), 0.0167, 38), leafLightMat);
  clump38.name = 'clump38';
  clump38.position.set(-0.3002, 0.8656, -0.32);
  clump38.rotation.set(0, 0, deg(61.6472));
  clump38.scale.set(1, 1, 0.42);
  foliage.add(clump38);
  const clump39 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.2041, 0), 0.0204, 39), leafMat);
  clump39.name = 'clump39';
  clump39.position.set(0.0187, 0.8545, -0.3222);
  clump39.rotation.set(0, 0, deg(21.2076));
  clump39.scale.set(1, 1, 0.42);
  foliage.add(clump39);
  const clump40 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.2111, 0), 0.0211, 40), leafMat);
  clump40.name = 'clump40';
  clump40.position.set(0.2506, 0.8577, -0.3227);
  clump40.rotation.set(0, 0, deg(6.7329));
  clump40.scale.set(1, 1, 0.42);
  foliage.add(clump40);
  const clump41 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1676, 0), 0.0168, 41), leafLightMat);
  clump41.name = 'clump41';
  clump41.position.set(0.5634, 0.8265, -0.3201);
  clump41.rotation.set(0, 0, deg(60.9208));
  clump41.scale.set(1, 1, 0.42);
  foliage.add(clump41);
  const clump42 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.2101, 0), 0.021, 42), leafLightMat);
  clump42.name = 'clump42';
  clump42.position.set(0.7689, 0.8436, -0.3226);
  clump42.rotation.set(0, 0, deg(49.1169));
  clump42.scale.set(1, 1, 0.42);
  foliage.add(clump42);
  const clump43 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1955, 0), 0.0196, 43), leafLightMat);
  clump43.name = 'clump43';
  clump43.position.set(-0.7849, 1.1078, -0.1307);
  clump43.rotation.set(0, deg(10.8164), 0);
  clump43.scale.set(1, 0.42, 1);
  foliage.add(clump43);
  const clump44 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.205, 0), 0.0205, 44), leafDarkMat);
  clump44.name = 'clump44';
  clump44.position.set(-0.5637, 1.1082, -0.1305);
  clump44.rotation.set(0, deg(59.8193), 0);
  clump44.scale.set(1, 0.42, 1);
  foliage.add(clump44);
  const clump45 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.2088, 0), 0.0209, 45), leafDarkMat);
  clump45.name = 'clump45';
  clump45.position.set(-0.2976, 1.1084, -0.1691);
  clump45.rotation.set(0, deg(10.9249), 0);
  clump45.scale.set(1, 0.42, 1);
  foliage.add(clump45);
  const clump46 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1897, 0), 0.019, 46), leafLightMat);
  clump46.name = 'clump46';
  clump46.position.set(-0.0201, 1.1076, -0.1298);
  clump46.rotation.set(0, deg(15.6619), 0);
  clump46.scale.set(1, 0.42, 1);
  foliage.add(clump46);
  const clump47 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1748, 0), 0.0175, 47), leafLightMat);
  clump47.name = 'clump47';
  clump47.position.set(0.258, 1.107, -0.1552);
  clump47.rotation.set(0, deg(4.7752), 0);
  clump47.scale.set(1, 0.42, 1);
  foliage.add(clump47);
  const clump48 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.2012, 0), 0.0201, 48), leafDarkMat);
  clump48.name = 'clump48';
  clump48.position.set(0.6079, 1.108, -0.1568);
  clump48.rotation.set(0, deg(42.4148), 0);
  clump48.scale.set(1, 0.42, 1);
  foliage.add(clump48);
  const clump49 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1924, 0), 0.0192, 49), leafDarkMat);
  clump49.name = 'clump49';
  clump49.position.set(0.7883, 1.1077, -0.1663);
  clump49.rotation.set(0, deg(18.1243), 0);
  clump49.scale.set(1, 0.42, 1);
  foliage.add(clump49);
  const clump50 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1864, 0), 0.0186, 50), leafMat);
  clump50.name = 'clump50';
  clump50.position.set(-0.7949, 1.1075, 0.1364);
  clump50.rotation.set(0, deg(63.5581), 0);
  clump50.scale.set(1, 0.42, 1);
  foliage.add(clump50);
  const clump51 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.181, 0), 0.0181, 51), leafDarkMat);
  clump51.name = 'clump51';
  clump51.position.set(-0.6167, 1.1072, 0.1652);
  clump51.rotation.set(0, deg(44.9893), 0);
  clump51.scale.set(1, 0.42, 1);
  foliage.add(clump51);
  const clump52 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.2004, 0), 0.02, 52), leafLightMat);
  clump52.name = 'clump52';
  clump52.position.set(-0.2376, 1.108, 0.168);
  clump52.rotation.set(0, deg(21.3969), 0);
  clump52.scale.set(1, 0.42, 1);
  foliage.add(clump52);
  const clump53 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1903, 0), 0.019, 53), leafMat);
  clump53.name = 'clump53';
  clump53.position.set(-0.0305, 1.1076, 0.1357);
  clump53.rotation.set(0, deg(15.3817), 0);
  clump53.scale.set(1, 0.42, 1);
  foliage.add(clump53);
  const clump54 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.1765, 0), 0.0176, 54), leafMat);
  clump54.name = 'clump54';
  clump54.position.set(0.2819, 1.1071, 0.1566);
  clump54.rotation.set(0, deg(40.2632), 0);
  clump54.scale.set(1, 0.42, 1);
  foliage.add(clump54);
  const clump55 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.2118, 0), 0.0212, 55), leafLightMat);
  clump55.name = 'clump55';
  clump55.position.set(0.5547, 1.1085, 0.1494);
  clump55.rotation.set(0, deg(28.0915), 0);
  clump55.scale.set(1, 0.42, 1);
  foliage.add(clump55);
  const clump56 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.2146, 0), 0.0215, 56), leafLightMat);
  clump56.name = 'clump56';
  clump56.position.set(0.764, 1.1086, 0.1617);
  clump56.rotation.set(0, deg(68.546), 0);
  clump56.scale.set(1, 0.42, 1);
  foliage.add(clump56);

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

export default createHedge;

Valoraciones y comentarios

—
Aún no hay valoraciones — sé el primero.
5
0
4
0
3
0
2
0
1
0

Inicia sesión para valorar y comentar.

0 comentarios

Aún no hay comentarios. Cuenta cómo usaste este modelo o qué se podría mejorar.

Modelos relacionados

Misma categoría o etiquetas similares