fogón

← Basics3D assetfogon/corgi

Corgi

by fogonCC012431 blocks
CorgiDrag to turn it
// «Corgi» · gpt-6-sol (medium)
// Corgi («Corgi»).

// A short-legged, warm tan corgi facing -y.
const tan = "#bf7934", gold = "#d99443", lightTan = "#e6aa58";
const darkTan = "#995721", cream = "#f5eedb", white = "#fff9eb";
const shadow = "#d9d1bd";

// Solid, rounded body and pale underside.
ellipsoid(24, 28, 15, 11, 14, 8, tan);
ellipsoid(24, 28, 19, 10, 12, 5, gold);
ellipsoid(24, 28, 11, 8, 11, 3, shadow);
ellipsoid(24, 19, 15, 9, 5, 7, cream);

// Broad head, with its cheeks projecting toward the viewer.
ellipsoid(24, 14, 24, 11, 8, 9, gold);
ellipsoid(24, 17, 28, 9, 5, 4, lightTan);
ellipsoid(15, 12, 22, 3, 4, 6, tan);
ellipsoid(33, 12, 22, 3, 4, 6, tan);

// Subtle, block-sized flecks on the exposed golden fur.
forEach((x, y, z, color) => {
  if ((color === gold || color === tan) &&
      (!get(x, y - 1, z) || !get(x, y, z + 1)) && rand() < 0.075) {
    set(x, y, z, rand() < 0.65 ? lightTan : darkTan);
  }
});

// Tall, pointed ears: stepped silhouettes and dusky pink interiors.
for (const cx of [15, 33]) {
  const widths = [4, 4, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0];
  widths.forEach((w, i) => {
    const z = 30 + i;
    box(cx - w, 13, z, cx + w, 18, z,
        i > 8 ? lightTan : (i % 3 === 0 ? lightTan : tan));
  });
  box(cx - 2, 12, 33, cx + 2, 12, 37, darkTan);
  box(cx - 1, 11, 34, cx + 1, 11, 38, "#b97768");
  box(cx, 12, 39, cx, 13, 40, "#a76556");
  box(cx - 3, 14, 30, cx + 3, 18, 31, gold);
}

// White blaze between the eyes, tapering up the forehead.
box(22, 6, 26, 26, 8, 30, white);
box(23, 7, 31, 25, 10, 33, cream);
box(22, 5, 23, 26, 7, 26, white);
box(23, 4, 19, 25, 6, 23, white);

// Distinct white eye patches, dark eyes, and tiny highlights.
for (const cx of [17, 31]) {
  ellipsoid(cx, 6, 24, 3, 2, 3, cream);
  box(cx - 2, 4, 24, cx + 1, 5, 26, "#342c28");
  box(cx - 1, 3, 24, cx + 1, 4, 26, "#171b1d");
  set(cx - 1, 2, 26, "#ffffff");
  box(cx - 3, 6, 19, cx, 8, 22, white);
}

// Plush white muzzle, black nose, smile and little pink tongue.
ellipsoid(20, 5, 17, 5, 3, 4, white);
ellipsoid(28, 5, 17, 5, 3, 4, white);
box(21, 3, 17, 27, 5, 19, cream);
box(22, 2, 19, 26, 3, 21, "#292725");
box(23, 1, 19, 25, 2, 20, "#17191b");
set(23, 1, 21, "#696967");
box(23, 3, 15, 25, 3, 17, "#49302c");
box(21, 3, 14, 23, 3, 14, "#49302c");
box(25, 3, 14, 27, 3, 14, "#49302c");
box(23, 2, 12, 25, 3, 15, "#d97680");
box(24, 1, 13, 25, 1, 14, "#f2a2a0");

// Short animated legs with oversized pale paws.
function leg(name, pivot, x, y, speed, amplitude) {
  part(name, pivot);
  ellipsoid(x, y, 9, 3, 3, 6, tan);
  box(x - 2, y - 2, 4, x + 2, y + 2, 10, gold);
  box(x - 2, y - 3, 1, x + 2, y + 2, 4, cream);
  box(x - 3, y - 4, 0, x + 3, y + 1, 2, white);
  box(x - 3, y - 4, 0, x + 3, y - 4, 0, shadow);
  for (const dx of [-1, 1]) {
    set(x + dx, y - 4, 2, cream);
  }
  animate(name, { type: "swing", axis: "x", speed, amplitude });
}
leg("front_left",  [16.5, 18.5, 13], 16, 18,  5.5, 0.31);
leg("front_right", [31.5, 18.5, 13], 32, 18, -5.5, 0.31);
leg("rear_left",   [16.5, 34, 12],   16, 35, -5.5, 0.27);
leg("rear_right",  [31.5, 34, 12],   32, 35,  5.5, 0.27);

// Raised, fluffy little tail.
part("tail", [24, 39, 18.5]);
ellipsoid(24, 40, 20, 3, 4, 3, tan);
ellipsoid(24, 43, 23, 3, 3, 3, gold);
ellipsoid(24, 44, 25, 2, 2, 2, cream);
animate("tail", { type: "swing", axis: "z", speed: 8, amplitude: 0.55 });