fogón

← Asian3D assetfogon/tanuki

Tanuki

by fogonCC016384 blocks
TanukiDrag to turn it
// «Tanuki» · gpt-6-sol (medium)
// A round chubby cartoon tanuki (raccoon dog) standing upright like the classic statue: brown and tan fur, a dark mask around the eyes, big round belly lighter in color, a straw hat on its head, a little sake bottle in one paw, short legs and a fat striped tail.

// Short feet and a broad, upright body.
for (const x of [19, 29]) {
  ellipsoid(x, 23, 5, 4, 5, 6, "#70452f");
  ellipsoid(x, 19, 2, 5, 6, 2, "#8c5a39");
  box(x - 3, 15, 0, x + 3, 22, 1, "#65402d");
}

ellipsoid(24, 24, 20, 12, 10, 14, "#795038");
ellipsoid(24, 19, 20, 11, 8, 13, "#9c6947");
ellipsoid(24, 16, 19, 10, 5, 12, "#704631");
ellipsoid(24, 14, 19, 9, 4, 11, "#dbba84");
ellipsoid(24, 10.5, 21, 6, 1, 5, "#e8c997");

// Fur flecks on exposed surfaces.
forEach((x, y, z, color) => {
  if (
    (color === "#9c6947" || color === "#795038") &&
    (get(x, y - 1, z) === undefined || get(x, y, z + 1) === undefined) &&
    rand() < 0.085
  ) {
    set(x, y, z, rand() < 0.5 ? "#b17b52" : "#68432f");
  }
});

// Head, ears, and little cheek tufts.
ellipsoid(14, 21, 37, 4, 3, 5, "#754730");
ellipsoid(34, 21, 37, 4, 3, 5, "#754730");
ellipsoid(14, 18, 38, 2, 1, 3, "#c58b67");
ellipsoid(34, 18, 38, 2, 1, 3, "#c58b67");
ellipsoid(24, 21, 33, 10, 8, 8, "#9b6948");
ellipsoid(24, 17, 36, 9, 5, 4, "#bd8c60");
ellipsoid(17, 15, 29, 3, 3, 3, "#b48156");
ellipsoid(31, 15, 29, 3, 3, 3, "#b48156");

// Distinctive dark eye mask, bright eyes, and a soft muzzle.
ellipsoid(19, 13, 34, 5, 3, 4, "#50372e");
ellipsoid(29, 13, 34, 5, 3, 4, "#50372e");
ellipsoid(20, 10, 35, 2, 1, 2, "#f3dfb5");
ellipsoid(28, 10, 35, 2, 1, 2, "#f3dfb5");
set(20, 8, 35, "#211e1c");
set(28, 8, 35, "#211e1c");
set(19, 8, 36, "#ffffff");
set(27, 8, 36, "#ffffff");
ellipsoid(21, 11, 29, 4, 3, 3, "#e5c397");
ellipsoid(27, 11, 29, 4, 3, 3, "#e5c397");
ellipsoid(24, 8, 31, 2, 2, 1, "#302923");
set(24, 8, 29, "#584032");
for (const x of [19, 21, 27, 29]) set(x, 8, 28, "#674636");

// The broad woven straw hat has a slightly raised outer lip.
for (let x = 8; x <= 40; x++) {
  for (let y = 9; y <= 33; y++) {
    const d = ((x - 24) / 16) ** 2 + ((y - 21) / 12) ** 2;
    if (d > 1) continue;
    set(x, y, 39, "#806037");
    set(x, y, 40, d > 0.82 ? "#e4bb71" : "#caa05d");
    if (d > 0.83) set(x, y, 41, "#efca80");
    if (d > 0.95 && (x < 12 || x > 36)) set(x, y, 42, "#ebc67d");
    if (d > 0.38 && d < 0.83 && rand() < 0.22)
      set(x, y, 40, "#e2ba72");
  }
}
for (let z = 41; z <= 45; z++) {
  const rx = [10, 9, 8, 7, 5][z - 41];
  const ry = [7, 7, 6, 5, 4][z - 41];
  for (let x = 24 - rx; x <= 24 + rx; x++) {
    for (let y = 21 - ry; y <= 21 + ry; y++) {
      if (((x - 24) / rx) ** 2 + ((y - 21) / ry) ** 2 <= 1)
        set(x, y, z, rand() < 0.13 ? "#e7bf76" : "#d3a65e");
    }
  }
}
// Lacquer-red hat band and small golden clasp.
for (let x = 15; x <= 33; x++) {
  for (let y = 14; y <= 28; y++) {
    const d = ((x - 24) / 9) ** 2 + ((y - 21) / 7) ** 2;
    if (d > 0.75 && d <= 1.05) set(x, y, 41, "#842e2c");
  }
}
box(23, 13, 41, 25, 13, 42, "#eac66e");

// The free paw rests against the belly.
ellipsoid(12, 20, 24, 4, 4, 7, "#785039");
ellipsoid(14, 16, 19, 4, 4, 4, "#a87550");
ellipsoid(16, 13, 18, 3, 2, 2, "#b8855b");

// A thick, striped tail, hinged behind the body.
part("tail", [33, 30, 16]);
for (let x = 33; x <= 42; x++) {
  const t = (x - 33) / 9;
  const y = 31 + 3 * t;
  const z = 15 + 7 * t;
  const r = x < 39 ? 4.5 : 4.5 - (x - 39) * 0.45;
  const stripe = Math.floor((x - 33) / 2.3) % 2;
  ellipsoid(x, y, z, 1.5, r, r, stripe ? "#50372e" : "#b78758");
}
ellipsoid(42, 34, 22, 2, 3, 3, "#50372e");
animate("tail", { type: "swing", axis: "z", speed: 1.5, amplitude: 0.3 });

// Bottle-bearing arm and its jade-green sake flask move together.
part("bottleArm", [34, 21, 27]);
ellipsoid(35, 19, 24, 4, 4, 6, "#795038");
ellipsoid(37, 16, 19, 4, 4, 4, "#a87651");

cylinder(40, 14, 15, 3, 8, "#315c4b");
cylinder(40, 14, 22, 2, 2, "#52846b");
cylinder(40, 14, 24, 2, 1, "#d9b766");
box(38, 10, 17, 42, 11, 21, "#ead7a7");
box(39, 9, 18, 41, 9, 20, "#ead7a7");
set(40, 8, 19, "#a83d35");
set(39, 8, 20, "#a83d35");
set(41, 8, 18, "#a83d35");
ellipsoid(37, 13, 19, 2, 2, 2, "#bd895e");
animate("bottleArm", { type: "swing", axis: "x", speed: 3, amplitude: 0.3 });