fogón

← Parties and Christmas3D assetfogon/papa-noel

Papá Noel

by fogonCC011941 blocks
Papá NoelDrag to turn it
// «Papá Noel» · gpt-6-sol (medium)
// A chubby cartoon Santa Claus standing and facing front: a round red coat with white fur trim and a wide black belt with a gold buckle, black boots, red trousers, a big fluffy white beard and moustache covering the lower face, rosy cheeks, black dot eyes and a red hat with a white pompom bending to one side. He holds a brown sack full of presents over his shoulder.

const red = "#d92732", redLight = "#f14448", redDark = "#ad202d";
const white = "#fffaf0", snow = "#f0eee7", shadow = "#d9dedc";
const black = "#222532", blackLight = "#363945";
const gold = "#ffc84d", goldLight = "#ffe58a";
const skin = "#f7b58d", skinLight = "#ffd0a6";
const brown = "#a86b3d", brownDark = "#794629", brownLight = "#c48a51";

// Two independently walking legs.
function leg(name, x, speed) {
  part(name, [x, 23, 12]);
  ellipsoid(x, 23, 9, 3.5, 4, 5, redDark);
  ellipsoid(x, 22, 8, 3.2, 3.5, 4, red);
  ellipsoid(x, 22, 6, 3.8, 4, 1.3, white);
  ellipsoid(x, 22, 5, 4, 4, 1, shadow);
  box(x - 3, 20, 1, x + 3, 26, 5, black);
  ellipsoid(x, 19, 2, 4.5, 5, 2, black);
  box(x - 3, 17, 0, x + 3, 25, 0, blackLight);
  animate(name, { type: "swing", axis: "x", speed, amplitude: 0.3 });
}
leg("left leg", 18, 4);
leg("right leg", 28, -4);
part("body", [23, 24, 20]);

// Rounded coat, with softly varied red and a darker underside.
for (let x = 10; x <= 36; x++)
for (let y = 13; y <= 35; y++)
for (let z = 9; z <= 31; z++) {
  const d = ((x - 23) / 12) ** 2 +
            ((y - 24) / 9) ** 2 +
            ((z - 20) / 11) ** 2;
  if (d <= 1) {
    let c = z < 16 ? redDark : z > 25 ? redLight : red;
    if (d > 0.76 && rand() < 0.12) c = z > 21 ? "#fa5957" : redLight;
    set(x, y, z, c);
  }
}

// Plush hem, coat opening, and a wide belt wrapping the belly.
ellipsoid(23, 24, 11, 11.5, 9, 1.6, shadow);
ellipsoid(23, 24, 12, 11.6, 9.1, 1.2, white);
for (let x = 11; x <= 35; x++)
for (let y = 14; y <= 34; y++)
for (let z = 17; z <= 19; z++) {
  if (get(x, y, z) &&
      ((x - 23) / 12) ** 2 + ((y - 24) / 9) ** 2 < 1.03)
    set(x, y, z, y < 17 ? blackLight : black);
}
box(22, 13, 20, 24, 15, 29, snow);
box(23, 12, 21, 24, 13, 28, white);

// Belt buckle on the frontmost point of the coat.
box(20, 12, 17, 26, 13, 20, gold);
box(21, 11, 18, 25, 11, 19, goldLight);
box(22, 10, 18, 24, 10, 19, black);
box(24, 9, 18, 25, 10, 18, goldLight);

// Sack behind his shoulder, bulging with presents.
ellipsoid(39, 27, 29, 6, 6, 8, brownDark);
ellipsoid(39, 26, 30, 5.5, 5.5, 7, brown);
ellipsoid(39, 26, 33, 4.5, 4.5, 4, brownLight);
for (let i = 0; i < 65; i++) {
  const x = 34 + Math.floor(rand() * 11);
  const y = 21 + Math.floor(rand() * 11);
  const z = 23 + Math.floor(rand() * 13);
  if (get(x, y, z) === brown) set(x, y, z, brownLight);
}
ellipsoid(39, 26, 35, 4, 4, 1.7, brownDark);
box(36, 23, 35, 42, 29, 36, brownLight);
line(35, 24, 35, 33, 21, 31, 1, brownDark);

// Brightly wrapped gifts peeking out of the sack.
box(36, 24, 37, 39, 27, 40, "#73ddd0");
box(37, 23, 37, 37, 28, 40, goldLight);
box(35, 25, 38, 40, 25, 38, goldLight);
box(40, 25, 37, 43, 28, 39, "#ff8eb5");
box(41, 24, 37, 41, 29, 39, white);
box(40, 26, 38, 43, 26, 38, white);
box(37, 28, 37, 40, 30, 39, "#b998eb");

// Arm holding the sack, with a white cuff and dark mitten.
line(33, 22, 27, 36, 20, 31, 3, redDark);
ellipsoid(35, 21, 29, 3, 3, 4, red);
ellipsoid(36, 19, 32, 2.7, 2.5, 1.6, white);
ellipsoid(36, 18, 34, 2.3, 2.2, 2.4, blackLight);

// Head and ears.
ellipsoid(23, 20, 33, 7, 6, 7, skin);
ellipsoid(23, 15, 34, 6, 2.5, 4, skinLight);
sphere(16, 19, 32, 2, skin);
sphere(30, 19, 32, 2, skin);

// Beard: broad at the cheeks, narrowing into a rounded point.
ellipsoid(23, 14, 27, 7.1, 4.3, 6.6, shadow);
ellipsoid(23, 12, 27, 6.5, 3, 6.2, white);
ellipsoid(23, 13, 23, 4.5, 3.2, 4.6, snow);
ellipsoid(23, 13, 21, 2.8, 2.7, 3, white);
ellipsoid(17, 15, 29, 2.5, 2.8, 4, white);
ellipsoid(29, 15, 29, 2.5, 2.8, 4, white);
for (let i = 0; i < 9; i++) {
  const x = 18 + i * 1.2;
  sphere(x, 10.5 + rand(), 26 + rand() * 2, 1.1, i % 3 ? white : snow);
}

// Rosy cheeks, little eyes, nose, and sweeping moustache.
ellipsoid(17, 13, 33, 2.1, 1.2, 1.4, "#f38e91");
ellipsoid(29, 13, 33, 2.1, 1.2, 1.4, "#f38e91");
sphere(20, 12, 35, 1, black);
sphere(26, 12, 35, 1, black);
set(20, 11, 36, white);
set(26, 11, 36, white);
ellipsoid(19.5, 11, 30, 3.5, 2, 1.7, white);
ellipsoid(26.5, 11, 30, 3.5, 2, 1.7, white);
sphere(23, 9, 32, 1.8, "#ed8673");
set(23, 8, 33, skinLight);

// White hat brim and a floppy red cap bending to Santa's left.
ellipsoid(23, 20, 39, 8.3, 7, 2, shadow);
ellipsoid(23, 19, 39, 8.3, 7, 1.5, white);
ellipsoid(22, 21, 41, 6.7, 5.6, 3.1, redDark);
ellipsoid(20, 20, 42, 6, 5, 2.6, red);
ellipsoid(15.5, 20, 42, 5, 3.5, 2.2, redLight);
ellipsoid(12, 20, 41, 3, 3, 2.4, red);
sphere(10, 20, 41, 2.6, shadow);
sphere(9, 19, 42, 2, white);

// Free arm, pivoting at its shoulder to wave.
part("waving arm", [13, 23, 27]);
line(13, 23, 27, 8, 20, 23, 3, redDark);
ellipsoid(10, 21, 24, 3.5, 3.1, 4, red);
ellipsoid(7, 19, 22, 2.6, 2.8, 1.8, white);
ellipsoid(6, 18, 21, 2.7, 2.5, 2.8, blackLight);
ellipsoid(5, 17, 22, 1.3, 1.5, 1.8, black);
animate("waving arm", { type: "swing", axis: "y", speed: 3, amplitude: 0.5 });