fogón

← AsiáticoObjeto 3Dfogon/kitsune

Kitsune

de fogonCC09380 bloques
KitsuneArrastrá para girarlo
// «Kitsune» · gpt-6-sol (medium)
// A magical cartoon fox spirit standing on four legs, horizontal along y: white fur with orange-red markings on the ears, face and paws, a red ribbon with a little gold bell on its neck, black dot eyes, and NINE big fluffy tails fanning up and out behind it, white with orange tips.

const white = "#fff8ed";
const cream = "#f0eadf";
const shadow = "#d8dfe1";
const orange = "#dc5b39";
const orangeLight = "#f47d49";
const orangeDark = "#b94534";
const red = "#a92435";
const redLight = "#d83b47";
const gold = "#f4c75e";

// Nine fluffy tails form a fan behind the fox.
part("tails", [24, 34, 19]);

const tailEnds = [
  [5, 22], [8, 29], [12, 35],
  [18, 39], [24, 41], [30, 39],
  [36, 35], [40, 29], [43, 22]
];

for (let i = 0; i < tailEnds.length; i++) {
  const ex = tailEnds[i][0];
  const ez = tailEnds[i][1];
  const ey = 41 + (i % 3);

  line(24, 35, 19, ex, ey, ez - 2, 2.3, shadow);
  line(24, 35, 20, ex, ey - 1, ez - 2, 1.65, cream);

  const bx = 24 + (ex - 24) * 0.84;
  const bz = 19 + (ez - 19) * 0.84;
  ellipsoid(bx, ey - 1, bz, 3.1, 2.7, 3.4, shadow);
  ellipsoid(bx, ey - 1.5, bz + 0.7, 2.9, 2.5, 3.1, white);

  ellipsoid(ex, ey, ez, 2.5, 2.3, 2.7, orangeDark);
  ellipsoid(ex, ey - 0.5, ez + 0.5, 2.3, 2.1, 2.4, orange);
  ellipsoid(ex, ey - 1, ez + 1.1, 1.4, 1.5, 1.1, orangeLight);
}

animate("tails", {
  type: "swing",
  axis: "z",
  speed: 2,
  amplitude: 0.25
});

// Body and chest.
part("body");
ellipsoid(24, 26, 18, 8, 10, 6, shadow);
ellipsoid(24, 25, 19, 8, 10, 6, white);
ellipsoid(24, 29, 19, 8, 6, 6, cream);
ellipsoid(24, 18, 19, 6, 5, 6, white);
ellipsoid(24, 17, 16, 4, 4, 4, cream);

// Each leg swings separately from its shoulder or hip.
const legs = [
  ["frontLeft", 19, 20, 5],
  ["frontRight", 29, 20, -5],
  ["rearLeft", 19, 31, -5],
  ["rearRight", 29, 31, 5]
];

for (const leg of legs) {
  const name = leg[0];
  const x = leg[1];
  const y = leg[2];
  const speed = leg[3];

  part(name, [x, y, 15]);
  ellipsoid(x, y, 12, 2.8, 3, 4, cream);
  ellipsoid(x, y - 0.4, 11, 2.5, 2.7, 3.6, white);
  box(x - 2, y - 2, 3, x + 2, y + 1, 10, white);
  ellipsoid(x, y - 1.5, 2, 2.7, 3, 2, orangeDark);
  ellipsoid(x, y - 2, 2, 2.6, 2.6, 1.7, orange);
  box(x - 1, y - 4, 0, x + 1, y - 2, 1, orangeLight);

  animate(name, {
    type: "swing",
    axis: "x",
    speed: speed,
    amplitude: 0.3
  });
}

part("body");

// Neck, ribbon, bow and gold bell.
ellipsoid(24, 17, 22, 5.5, 4, 5, white);
ellipsoid(24, 17, 22, 5.4, 2.6, 2.5, red);
ellipsoid(24, 15, 23, 4.8, 1.3, 0.9, redLight);
ellipsoid(21, 13, 21, 2.5, 1.2, 1.7, redLight);
ellipsoid(27, 13, 21, 2.5, 1.2, 1.7, redLight);
sphere(24, 12, 21, 1.2, red);
sphere(24, 11, 18, 2, gold);
set(23, 9, 18, "#fff0aa");
set(24, 9, 17, "#9d6835");

// Rounded fox head and orange face markings.
ellipsoid(24, 13, 28, 7, 6, 7, shadow);
ellipsoid(24, 12.5, 28.5, 7, 6, 7, white);
ellipsoid(18, 11, 26, 2.5, 2.7, 3, orange);
ellipsoid(30, 11, 26, 2.5, 2.7, 3, orange);
ellipsoid(19, 9, 31, 2.6, 1.4, 3, orange);
ellipsoid(29, 9, 31, 2.6, 1.4, 3, orange);
ellipsoid(24, 8, 23, 4.5, 4, 3, cream);
ellipsoid(24, 7, 23, 3.8, 3, 2.5, white);

// Tall, tapered ears with pale inner fur.
for (const cx of [18, 30]) {
  for (let z = 34; z <= 42; z++) {
    const half = Math.max(0, Math.round((42 - z) * 0.43));
    const earColor = z >= 39 ? orangeDark : orange;
    box(cx - half, 11, z, cx + half, 15, z, earColor);

    if (z >= 35 && z <= 40 && half >= 1) {
      const innerHalf = Math.max(0, half - 1);
      box(cx - innerHalf, 10, z, cx + innerHalf, 11, z, "#ffc2ad");
    }
  }
  set(cx, 12, 42, orangeLight);
}

// Cheeks, dot eyes and small nose.
ellipsoid(19, 8, 25, 2, 1.5, 1.5, white);
ellipsoid(29, 8, 25, 2, 1.5, 1.5, white);
sphere(20, 7, 29, 1.1, "#24232a");
sphere(28, 7, 29, 1.1, "#24232a");
set(20, 6, 30, "#ffffff");
set(28, 6, 30, "#ffffff");
ellipsoid(24, 4, 24, 1.5, 1, 1, "#303039");
set(23, 7, 21, "#b8a8a2");
set(25, 7, 21, "#b8a8a2");