1,2 mil tris2,00 × 1,19 × 0,82 m
Use no código
Fazer remix no editorhedge.js · 429 linhas
Módulo ES autocontido — depende apenas do three. Chame a factory e adicione o grupo à sua cena.
/**
* 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;
Avaliações e comentários
0 comentário
Nenhum comentário ainda. Conte como você usou este modelo ou o que poderia melhorar.
Modelos relacionados
Mesma categoria ou tags parecidas









