Codels
1,7 mil tris1,46 × 0,74 × 1,39 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.
/**
 * Giant Spider — Codels 3D model library
 * License: CC0-1.0 · Units: meters · Y-up · Front: +Z · Origin: center of the base (y = 0)
 * Triangles: 1,678 · Size (W × H × D): 1.46 × 0.74 × 1.39 m
 *
 * Usage:
 *   import { createSpider } from './spider.js';
 *   
 *   const model = createSpider();
 *   model.position.set(0, 0, 0);
 *   scene.add(model);
 */
import * as THREE from 'three';

const deg = THREE.MathUtils.degToRad;

export function createSpider() {
  const root = new THREE.Group();
  root.name = 'Spider';

  // Materials
  const bodyMat = new THREE.MeshStandardMaterial({ name: 'body', color: 0x3d3448, roughness: 0.6, flatShading: true });
  const jointMat = new THREE.MeshStandardMaterial({ name: 'joint', color: 0x605969, roughness: 0.6, flatShading: true });
  const markMat = new THREE.MeshStandardMaterial({ name: 'mark', color: 0xe5493b, roughness: 0.55, flatShading: true });
  const eyeWhiteMat = new THREE.MeshStandardMaterial({ name: 'eyeWhite', color: 0xfbfaf6, roughness: 0.3, flatShading: true });
  const pupilMat = new THREE.MeshStandardMaterial({ name: 'pupil', color: 0x141116, roughness: 0.2, flatShading: true });
  const fangMat = new THREE.MeshStandardMaterial({ name: 'fang', color: 0xefe6d2, roughness: 0.5, flatShading: true });

  // Shared geometries
  const sphereGeo = new THREE.SphereGeometry(0.055, 8, 3);
  const sphereGeo2 = new THREE.SphereGeometry(0.042, 8, 3);
  const sphereGeo3 = new THREE.SphereGeometry(0.075, 8, 6);
  const sphereGeo4 = new THREE.SphereGeometry(0.038, 8, 6);
  const boxGeo = new THREE.BoxGeometry(0.014, 0.014, 0.006);
  const sphereGeo5 = new THREE.SphereGeometry(0.022, 6, 4);
  const sphereGeo6 = new THREE.SphereGeometry(0.018, 6, 4);
  const sphereGeo7 = new THREE.SphereGeometry(0.05, 6, 4);
  const coneGeo = new THREE.ConeGeometry(0.022, 0.07, 5);
  const cylinderGeo = new THREE.CylinderGeometry(0.046, 0.058, 0.4292, 6, 1, true);
  const sphereGeo8 = new THREE.SphereGeometry(0.054, 6, 3);
  const cylinderGeo2 = new THREE.CylinderGeometry(0.016, 0.044, 0.6881, 6);
  const cylinderGeo3 = new THREE.CylinderGeometry(0.041, 0.044, 0.0688, 6, 1, true);
  const cylinderGeo4 = new THREE.CylinderGeometry(0.046, 0.058, 0.4105, 6, 1, true);
  const cylinderGeo5 = new THREE.CylinderGeometry(0.016, 0.044, 0.6756, 6);
  const cylinderGeo6 = new THREE.CylinderGeometry(0.041, 0.044, 0.0676, 6, 1, true);

  // Parts
  const spider = new THREE.Group();
  spider.name = 'spider';
  spider.position.set(0, -0.0074, 0);
  root.add(spider);
  const abdomen = new THREE.Group();
  abdomen.name = 'abdomen';
  abdomen.position.set(0, 0.36, -0.05);
  spider.add(abdomen);
  const abdomenShell = new THREE.Mesh(new THREE.SphereGeometry(1, 12, 8), bodyMat);
  abdomenShell.name = 'abdomenShell';
  abdomenShell.position.set(0, 0.1, -0.32);
  abdomenShell.scale.set(0.32, 0.27, 0.36);
  abdomen.add(abdomenShell);
  const markSpot1 = new THREE.Mesh(new THREE.SphereGeometry(0.085, 8, 3), markMat);
  markSpot1.name = 'markSpot1';
  markSpot1.position.set(0, 0.3447, -0.18);
  markSpot1.rotation.set(deg(17.5671), 0, 0);
  markSpot1.scale.set(1, 0.28, 1);
  abdomen.add(markSpot1);
  const markSpot2 = new THREE.Mesh(new THREE.SphereGeometry(0.07, 8, 3), markMat);
  markSpot2.name = 'markSpot2';
  markSpot2.position.set(0, 0.3643, -0.36);
  markSpot2.rotation.set(deg(-4.7932), 0, 0);
  markSpot2.scale.set(1, 0.28, 1);
  abdomen.add(markSpot2);
  const markSpot3 = new THREE.Mesh(new THREE.SphereGeometry(0.05, 8, 3), markMat);
  markSpot3.name = 'markSpot3';
  markSpot3.position.set(0, 0.3205, -0.52);
  markSpot3.rotation.set(deg(-26.6161), 0, 0);
  markSpot3.scale.set(1, 0.28, 1);
  abdomen.add(markSpot3);
  const markSide = new THREE.Mesh(sphereGeo, markMat);
  markSide.name = 'markSide';
  markSide.position.set(0.15, 0.3315, -0.27);
  markSide.rotation.set(deg(6.2085), deg(-1.3347), deg(-24.2437));
  markSide.scale.set(1, 0.28, 1);
  abdomen.add(markSide);
  const markSide2 = new THREE.Mesh(sphereGeo2, markMat);
  markSide2.name = 'markSide';
  markSide2.position.set(0.13, 0.3226, -0.45);
  markSide2.rotation.set(deg(-16.6574), deg(3.1495), deg(-21.2716));
  markSide2.scale.set(1, 0.28, 1);
  abdomen.add(markSide2);
  const markSide3 = new THREE.Mesh(sphereGeo, markMat);
  markSide3.name = 'markSide';
  markSide3.position.set(-0.15, 0.3315, -0.27);
  markSide3.rotation.set(deg(6.2085), deg(1.3347), deg(24.2437));
  markSide3.scale.set(1, 0.28, 1);
  abdomen.add(markSide3);
  const markSide4 = new THREE.Mesh(sphereGeo2, markMat);
  markSide4.name = 'markSide';
  markSide4.position.set(-0.13, 0.3226, -0.45);
  markSide4.rotation.set(deg(-16.6574), deg(-3.1495), deg(21.2716));
  markSide4.scale.set(1, 0.28, 1);
  abdomen.add(markSide4);
  const spinneret = new THREE.Mesh(new THREE.ConeGeometry(0.04, 0.06, 5), jointMat);
  spinneret.name = 'spinneret';
  spinneret.position.set(0, 0.06, -0.67);
  spinneret.rotation.set(deg(-110), 0, 0);
  abdomen.add(spinneret);
  const head = new THREE.Group();
  head.name = 'head';
  head.position.set(0, 0.36, 0);
  spider.add(head);
  const cephalothorax = new THREE.Mesh(new THREE.SphereGeometry(0.22, 10, 7), bodyMat);
  cephalothorax.name = 'cephalothorax';
  cephalothorax.position.set(0, 0.02, 0.1);
  cephalothorax.scale.set(1, 0.72, 1.08);
  head.add(cephalothorax);
  const eyeL = new THREE.Mesh(sphereGeo3, eyeWhiteMat);
  eyeL.name = 'eyeL';
  eyeL.position.set(0.075, 0.07, 0.2776);
  head.add(eyeL);
  const pupilL = new THREE.Mesh(sphereGeo4, pupilMat);
  pupilL.name = 'pupilL';
  pupilL.position.set(0.07, 0.065, 0.3426);
  pupilL.scale.set(1, 1.1, 0.55);
  head.add(pupilL);
  const eyeShineL = new THREE.Mesh(boxGeo, eyeWhiteMat);
  eyeShineL.name = 'eyeShineL';
  eyeShineL.position.set(0.082, 0.08, 0.3626);
  head.add(eyeShineL);
  const eyeSmall = new THREE.Mesh(sphereGeo5, pupilMat);
  eyeSmall.name = 'eyeSmall';
  eyeSmall.position.set(0.045, 0.14, 0.2676);
  head.add(eyeSmall);
  const eyeSmall2 = new THREE.Mesh(sphereGeo6, pupilMat);
  eyeSmall2.name = 'eyeSmall';
  eyeSmall2.position.set(0.105, 0.125, 0.2376);
  head.add(eyeSmall2);
  const eyeR = new THREE.Mesh(sphereGeo3, eyeWhiteMat);
  eyeR.name = 'eyeR';
  eyeR.position.set(-0.075, 0.07, 0.2776);
  head.add(eyeR);
  const pupilR = new THREE.Mesh(sphereGeo4, pupilMat);
  pupilR.name = 'pupilR';
  pupilR.position.set(-0.07, 0.065, 0.3426);
  pupilR.scale.set(1, 1.1, 0.55);
  head.add(pupilR);
  const eyeShineR = new THREE.Mesh(boxGeo, eyeWhiteMat);
  eyeShineR.name = 'eyeShineR';
  eyeShineR.position.set(-0.058, 0.08, 0.3626);
  head.add(eyeShineR);
  const eyeSmall3 = new THREE.Mesh(sphereGeo5, pupilMat);
  eyeSmall3.name = 'eyeSmall';
  eyeSmall3.position.set(-0.045, 0.14, 0.2676);
  head.add(eyeSmall3);
  const eyeSmall4 = new THREE.Mesh(sphereGeo6, pupilMat);
  eyeSmall4.name = 'eyeSmall';
  eyeSmall4.position.set(-0.105, 0.125, 0.2376);
  head.add(eyeSmall4);
  const chelicera = new THREE.Mesh(sphereGeo7, bodyMat);
  chelicera.name = 'chelicera';
  chelicera.position.set(0.045, -0.06, 0.2976);
  chelicera.scale.set(1, 1.2, 1);
  head.add(chelicera);
  const fang = new THREE.Mesh(coneGeo, fangMat);
  fang.name = 'fang';
  fang.position.set(0.045, -0.12, 0.3176);
  fang.rotation.set(deg(160), 0, deg(8));
  head.add(fang);
  const chelicera2 = new THREE.Mesh(sphereGeo7, bodyMat);
  chelicera2.name = 'chelicera';
  chelicera2.position.set(-0.045, -0.06, 0.2976);
  chelicera2.scale.set(1, 1.2, 1);
  head.add(chelicera2);
  const fang2 = new THREE.Mesh(coneGeo, fangMat);
  fang2.name = 'fang';
  fang2.position.set(-0.045, -0.12, 0.3176);
  fang2.rotation.set(deg(160), 0, deg(-8));
  head.add(fang2);
  const legL1 = new THREE.Group();
  legL1.name = 'legL1';
  legL1.position.set(0.12, 0.36, 0.1);
  spider.add(legL1);
  const femur = new THREE.Mesh(cylinderGeo, bodyMat);
  femur.name = 'femur';
  femur.position.set(0.0997, 0.125, 0.1277);
  femur.rotation.set(deg(39.4424), deg(-10.8813), deg(-29.759));
  legL1.add(femur);
  const knee = new THREE.Mesh(sphereGeo8, jointMat);
  knee.name = 'knee';
  knee.position.set(0.1995, 0.25, 0.2553);
  legL1.add(knee);
  const tibia = new THREE.Mesh(cylinderGeo2, bodyMat);
  tibia.name = 'tibia';
  tibia.position.set(0.3059, -0.0475, 0.3915);
  tibia.rotation.set(deg(111.7515), deg(-64.7779), deg(-46.5236));
  legL1.add(tibia);
  const legBand = new THREE.Mesh(cylinderGeo3, markMat);
  legBand.name = 'legBand';
  legBand.position.set(0.2484, 0.1132, 0.318);
  legBand.rotation.set(deg(111.7515), deg(-64.7779), deg(-46.5236));
  legBand.scale.set(1.12, 1, 1.12);
  legL1.add(legBand);
  const legL2 = new THREE.Group();
  legL2.name = 'legL2';
  legL2.position.set(0.12, 0.36, 0.03);
  spider.add(legL2);
  const femur2 = new THREE.Mesh(cylinderGeo4, bodyMat);
  femur2.name = 'femur';
  femur2.position.set(0.1427, 0.125, 0.0464);
  femur2.rotation.set(deg(13.8117), deg(-6.0702), deg(-47.2854));
  legL2.add(femur2);
  const knee2 = new THREE.Mesh(sphereGeo8, jointMat);
  knee2.name = 'knee';
  knee2.position.set(0.2853, 0.25, 0.0927);
  legL2.add(knee2);
  const tibia2 = new THREE.Mesh(cylinderGeo5, bodyMat);
  tibia2.name = 'tibia';
  tibia2.position.set(0.4375, -0.0475, 0.1421);
  tibia2.rotation.set(deg(10.1157), deg(-33.5543), deg(-147.2788));
  legL2.add(tibia2);
  const legBand2 = new THREE.Mesh(cylinderGeo6, markMat);
  legBand2.name = 'legBand';
  legBand2.position.set(0.3553, 0.1132, 0.1154);
  legBand2.rotation.set(deg(10.1157), deg(-33.5543), deg(-147.2788));
  legBand2.scale.set(1.12, 1, 1.12);
  legL2.add(legBand2);
  const legL3 = new THREE.Group();
  legL3.name = 'legL3';
  legL3.position.set(0.12, 0.36, -0.04);
  spider.add(legL3);
  const femur3 = new THREE.Mesh(cylinderGeo4, bodyMat);
  femur3.name = 'femur';
  femur3.position.set(0.1442, 0.125, -0.0413);
  femur3.rotation.set(deg(-12.2818), deg(5.4707), deg(-47.8885));
  legL3.add(femur3);
  const knee3 = new THREE.Mesh(sphereGeo8, jointMat);
  knee3.name = 'knee';
  knee3.position.set(0.2884, 0.25, -0.0827);
  legL3.add(knee3);
  const tibia3 = new THREE.Mesh(cylinderGeo5, bodyMat);
  tibia3.name = 'tibia';
  tibia3.position.set(0.4422, -0.0475, -0.1268);
  tibia3.rotation.set(deg(-8.6609), deg(29.8884), deg(-148.3212));
  legL3.add(tibia3);
  const legBand3 = new THREE.Mesh(cylinderGeo6, markMat);
  legBand3.name = 'legBand';
  legBand3.position.set(0.3591, 0.1132, -0.103);
  legBand3.rotation.set(deg(-8.6609), deg(29.8884), deg(-148.3212));
  legBand3.scale.set(1.12, 1, 1.12);
  legL3.add(legBand3);
  const legL4 = new THREE.Group();
  legL4.name = 'legL4';
  legL4.position.set(0.12, 0.36, -0.11);
  spider.add(legL4);
  const femur4 = new THREE.Mesh(cylinderGeo, bodyMat);
  femur4.name = 'femur';
  femur4.position.set(0.1041, 0.125, -0.1241);
  femur4.rotation.set(deg(-38.1656), deg(11.0461), deg(-31.2324));
  legL4.add(femur4);
  const knee4 = new THREE.Mesh(sphereGeo8, jointMat);
  knee4.name = 'knee';
  knee4.position.set(0.2083, 0.25, -0.2482);
  legL4.add(knee4);
  const tibia4 = new THREE.Mesh(cylinderGeo2, bodyMat);
  tibia4.name = 'tibia';
  tibia4.position.set(0.3193, -0.0475, -0.3806);
  tibia4.rotation.set(deg(-103.7656), deg(66.6634), deg(-54.5872));
  legL4.add(tibia4);
  const legBand4 = new THREE.Mesh(cylinderGeo3, markMat);
  legBand4.name = 'legBand';
  legBand4.position.set(0.2594, 0.1132, -0.3091);
  legBand4.rotation.set(deg(-103.7656), deg(66.6634), deg(-54.5872));
  legBand4.scale.set(1.12, 1, 1.12);
  legL4.add(legBand4);
  const legR1 = new THREE.Group();
  legR1.name = 'legR1';
  legR1.position.set(-0.12, 0.36, 0.1);
  spider.add(legR1);
  const femur5 = new THREE.Mesh(cylinderGeo, bodyMat);
  femur5.name = 'femur';
  femur5.position.set(-0.0997, 0.125, 0.1277);
  femur5.rotation.set(deg(39.4424), deg(10.8813), deg(29.759));
  legR1.add(femur5);
  const knee5 = new THREE.Mesh(sphereGeo8, jointMat);
  knee5.name = 'knee';
  knee5.position.set(-0.1995, 0.25, 0.2553);
  legR1.add(knee5);
  const tibia5 = new THREE.Mesh(cylinderGeo2, bodyMat);
  tibia5.name = 'tibia';
  tibia5.position.set(-0.3059, -0.0475, 0.3915);
  tibia5.rotation.set(deg(111.7515), deg(64.7779), deg(46.5236));
  legR1.add(tibia5);
  const legBand5 = new THREE.Mesh(cylinderGeo3, markMat);
  legBand5.name = 'legBand';
  legBand5.position.set(-0.2484, 0.1132, 0.318);
  legBand5.rotation.set(deg(111.7515), deg(64.7779), deg(46.5236));
  legBand5.scale.set(1.12, 1, 1.12);
  legR1.add(legBand5);
  const legR2 = new THREE.Group();
  legR2.name = 'legR2';
  legR2.position.set(-0.12, 0.36, 0.03);
  spider.add(legR2);
  const femur6 = new THREE.Mesh(cylinderGeo4, bodyMat);
  femur6.name = 'femur';
  femur6.position.set(-0.1427, 0.125, 0.0464);
  femur6.rotation.set(deg(13.8117), deg(6.0702), deg(47.2854));
  legR2.add(femur6);
  const knee6 = new THREE.Mesh(sphereGeo8, jointMat);
  knee6.name = 'knee';
  knee6.position.set(-0.2853, 0.25, 0.0927);
  legR2.add(knee6);
  const tibia6 = new THREE.Mesh(cylinderGeo5, bodyMat);
  tibia6.name = 'tibia';
  tibia6.position.set(-0.4375, -0.0475, 0.1421);
  tibia6.rotation.set(deg(10.1157), deg(33.5543), deg(147.2788));
  legR2.add(tibia6);
  const legBand6 = new THREE.Mesh(cylinderGeo6, markMat);
  legBand6.name = 'legBand';
  legBand6.position.set(-0.3553, 0.1132, 0.1154);
  legBand6.rotation.set(deg(10.1157), deg(33.5543), deg(147.2788));
  legBand6.scale.set(1.12, 1, 1.12);
  legR2.add(legBand6);
  const legR3 = new THREE.Group();
  legR3.name = 'legR3';
  legR3.position.set(-0.12, 0.36, -0.04);
  spider.add(legR3);
  const femur7 = new THREE.Mesh(cylinderGeo4, bodyMat);
  femur7.name = 'femur';
  femur7.position.set(-0.1442, 0.125, -0.0413);
  femur7.rotation.set(deg(-12.2818), deg(-5.4707), deg(47.8885));
  legR3.add(femur7);
  const knee7 = new THREE.Mesh(sphereGeo8, jointMat);
  knee7.name = 'knee';
  knee7.position.set(-0.2884, 0.25, -0.0827);
  legR3.add(knee7);
  const tibia7 = new THREE.Mesh(cylinderGeo5, bodyMat);
  tibia7.name = 'tibia';
  tibia7.position.set(-0.4422, -0.0475, -0.1268);
  tibia7.rotation.set(deg(-8.6609), deg(-29.8884), deg(148.3212));
  legR3.add(tibia7);
  const legBand7 = new THREE.Mesh(cylinderGeo6, markMat);
  legBand7.name = 'legBand';
  legBand7.position.set(-0.3591, 0.1132, -0.103);
  legBand7.rotation.set(deg(-8.6609), deg(-29.8884), deg(148.3212));
  legBand7.scale.set(1.12, 1, 1.12);
  legR3.add(legBand7);
  const legR4 = new THREE.Group();
  legR4.name = 'legR4';
  legR4.position.set(-0.12, 0.36, -0.11);
  spider.add(legR4);
  const femur8 = new THREE.Mesh(cylinderGeo, bodyMat);
  femur8.name = 'femur';
  femur8.position.set(-0.1041, 0.125, -0.1241);
  femur8.rotation.set(deg(-38.1656), deg(-11.0461), deg(31.2324));
  legR4.add(femur8);
  const knee8 = new THREE.Mesh(sphereGeo8, jointMat);
  knee8.name = 'knee';
  knee8.position.set(-0.2083, 0.25, -0.2482);
  legR4.add(knee8);
  const tibia8 = new THREE.Mesh(cylinderGeo2, bodyMat);
  tibia8.name = 'tibia';
  tibia8.position.set(-0.3193, -0.0475, -0.3806);
  tibia8.rotation.set(deg(-103.7656), deg(-66.6634), deg(54.5872));
  legR4.add(tibia8);
  const legBand8 = new THREE.Mesh(cylinderGeo3, markMat);
  legBand8.name = 'legBand';
  legBand8.position.set(-0.2594, 0.1132, -0.3091);
  legBand8.rotation.set(deg(-103.7656), deg(-66.6634), deg(54.5872));
  legBand8.scale.set(1.12, 1, 1.12);
  legR4.add(legBand8);

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

export default createSpider;

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