fogón

← Animals3D assetfogon/buho

Búho

by fogonCC016538 blocks
BúhoDrag to turn it
// «Búho» · gpt-6-sol (medium)
// A round cartoon owl perched on a branch, facing front (-y): a brown feathered body with a lighter cream speckled belly, two pointed ear tufts, huge round yellow eyes with black pupils, a small hooked orange beak and folded wings.

// Branch, with a dark underside resting on the floor at z = 0.
line(5, 25, 0, 42, 25, 0, 1, "#60391f");
line(3, 25, 3, 44, 25, 3, 2.5, "#714327");
line(4, 25, 4, 43, 25, 4, 1, "#9b6335");
line(7, 25, 3, 3, 27, 9, 1.3, "#714327");
line(40, 25, 3, 45, 27, 8, 1.2, "#714327");
for (let x = 7; x <= 41; x += 5) {
  line(x, 22, 3, x + 2, 22, 3, 0, "#ad7440");
}

// Rounded body.
ellipsoid(24, 24, 20, 12, 10, 12, "#89502d");
forEach((x, y, z, color) => {
  if (color !== "#89502d") return;
  const exposed = !get(x, y - 1, z) || !get(x, y, z + 1);
  if (!exposed) return;
  const n = rand();
  if (z > 25 && n < 0.31) set(x, y, z, "#a96537");
  else if (z < 16 && n < 0.27) set(x, y, z, "#744026");
  else if (n < 0.12) set(x, y, z, "#a15e33");
});

// Plump cream bib with scattered feather flecks.
ellipsoid(24, 15, 19, 9, 3.4, 10, "#efd29d");
ellipsoid(24, 13, 22, 7, 1.5, 5, "#f9e3b5");
for (let x = 16; x <= 32; x++) {
  for (let z = 11; z <= 27; z++) {
    if (rand() > 0.19) continue;
    for (let y = 11; y <= 18; y++) {
      const c = get(x, y, z);
      if ((c === "#efd29d" || c === "#f9e3b5") && !get(x, y - 1, z)) {
        set(x, y, z, rand() < 0.7 ? "#d7ae73" : "#fff0ca");
        break;
      }
    }
  }
}

// Folded wings with overlapping feather tips.
for (const side of [-1, 1]) {
  const x = 24 + side * 11;
  ellipsoid(x, 22, 20, 4, 7, 9, "#713f27");
  ellipsoid(x - side * 0.6, 20, 21, 3, 6, 7, "#a66336");
  for (let i = 0; i < 3; i++) {
    ellipsoid(
      x + side * (0.7 + i * 0.3), 18 + i, 15 + i * 2,
      1.5, 3, 2.5, i === 2 ? "#bd7942" : "#8b4e2c"
    );
  }
}

// Short feet gripping the branch.
for (const x of [18, 30]) {
  ellipsoid(x, 19, 8, 3, 3, 3, "#c67529");
  for (const dx of [-2, 0, 2]) {
    line(x + dx * 0.5, 20, 6, x + dx, 15, 5, 1, "#eb9b35");
  }
}

// The head turns at the neck.
part("head", [24, 24, 27]);
ellipsoid(24, 23, 32, 14, 11, 10, "#955930");

forEach((x, y, z, color) => {
  if (color !== "#955930") return;
  if (!get(x, y, z + 1) && z >= 35 && rand() < 0.37)
    set(x, y, z, "#b47540");
  else if (!get(x, y - 1, z) && rand() < 0.09)
    set(x, y, z, "#ad6b3a");
});

// Pointed, outward-leaning ear tufts.
for (const side of [-1, 1]) {
  ellipsoid(24 + side * 10, 22, 39, 4, 4, 3, "#834827");
  for (let z = 39; z <= 46; z++) {
    const t = z - 39;
    const x = 24 + side * (10 + t * 0.62);
    const r = Math.max(0.75, 3.1 - t * 0.38);
    sphere(x, 22, z, r, t > 4 ? "#aa6635" : "#95562d");
  }
  line(
    24 + side * 11, 20, 40,
    24 + side * 14, 21, 45,
    0, "#c58548"
  );
}

// Pale face discs and huge yellow eyes.
for (const x of [17, 31]) {
  ellipsoid(x, 11.5, 33.5, 7, 3, 7, "#d5a66b");
  ellipsoid(x, 9.7, 34, 5.8, 1.2, 5.8, "#efc98d");

  cylinder(x, 7, 34, 5.2, 3, "#643a27", "y");
  cylinder(x, 6, 34, 4.5, 2, "#ffca40", "y");
  cylinder(x, 5, 34.5, 3.5, 1, "#ffe26a", "y");
  cylinder(x, 4, 34, 2.35, 2, "#211d20", "y");
  sphere(x - 1, 3, 35.5, 0.85, "#ffffff");
}

// Brows and small hooked beak.
ellipsoid(17, 9, 40, 4, 1, 1, "#89502d");
ellipsoid(31, 9, 40, 4, 1, 1, "#89502d");
ellipsoid(24, 8, 29.5, 2.3, 2.8, 3, "#ed8c27");
ellipsoid(24, 6.7, 28, 1.5, 1.7, 2.5, "#f9a431");
set(24, 6, 26, "#bd5724");

animate("head", { type: "swing", axis: "z", speed: 1, amplitude: 0.5 });
part("body");