fogón

← Asian3D assetfogon/gong

Gong

by fogonCC011270 blocks
GongDrag to turn it
// «Gong» · gpt-6-sol (medium)
// A large round golden gong with a darker center boss, hanging from a red lacquered wooden frame with curled dragon-head ends, on two solid feet. The gong disc is the moving part.

// Two broad feet anchor the lacquered frame.
for (const x of [7, 41]) {
  box(x - 4, 14, 0, x + 4, 33, 2, "#713020");
  box(x - 3, 15, 3, x + 3, 32, 4, "#ac3525");
  box(x - 4, 14, 2, x + 4, 33, 2, "#cf942e");
  box(x - 2, 16, 4, x + 2, 30, 5, "#d04b2f");

  // Uprights, with a dark side and a bright front face.
  box(x - 2, 21, 5, x + 2, 27, 37, "#8e281e");
  box(x - 2, 20, 7, x + 2, 21, 36, "#be3b27");
  box(x - 1, 20, 8, x - 1, 20, 35, "#e05a32");
  box(x - 2, 20, 8, x + 2, 20, 9, "#dda844");
  box(x - 2, 20, 32, x + 2, 20, 33, "#dda844");

  for (const z of [13, 19, 25, 30]) {
    set(x, 19, z, "#f0be55");
    set(x, 19, z + 1, "#ab7131");
  }
}

// Heavy crossbeam and its gilded lower lip.
box(6, 21, 36, 42, 28, 39, "#90291f");
box(7, 20, 37, 41, 21, 40, "#c33d29");
box(9, 19, 39, 39, 20, 40, "#df5230");
box(9, 20, 36, 39, 21, 36, "#ecb74d");
box(11, 19, 40, 37, 20, 40, "#f3c760");
for (let x = 12; x <= 36; x += 4) {
  box(x, 19, 38, x + 1, 19, 38, "#efb950");
  set(x + 1, 19, 37, "#f6ce6b");
}

// Curled dragon-head finials at both ends of the beam.
for (const side of [-1, 1]) {
  const root = side < 0 ? 7 : 41;
  line(root, 24, 39, root + side * 2, 24, 42, 2, "#ba3827");
  line(root + side * 2, 24, 42, root + side * 4, 24, 43, 2, "#d34b2c");
  line(root + side * 4, 24, 43, root + side * 5, 23, 41, 1, "#b33325");
  line(root + side * 5, 23, 41, root + side * 4, 23, 39, 1, "#d34b2c");

  // Muzzle, brow, jade eye, and little gold horns.
  box(root + side * 3 - 1, 20, 40, root + side * 3 + 1, 22, 42, "#c8442a");
  set(root + side * 4, 19, 41, "#eac15c");
  set(root + side * 3, 19, 42, "#368c65");
  set(root + side * 3, 18, 42, "#132d28");
  line(root + side * 2, 22, 43, root + side * 2, 22, 45, 0, "#efbc50");
  line(root + side * 4, 22, 43, root + side * 5, 22, 44, 0, "#efbc50");
  set(root + side * 5, 20, 40, "#efbc50");
}

// The gong, including its hangers, swings from the middle of the crossbeam.
part("gong", [24, 23, 37]);

for (const x of [20, 28]) {
  box(x - 1, 19, 34, x + 1, 21, 36, "#a76324");
  box(x, 18, 35, x, 19, 37, "#f4c761");
  set(x, 18, 34, "#7c431f");
}

// A solid, thick circular bronze disc, seen face-on from -y.
for (let dx = -15; dx <= 15; dx++) {
  for (let dz = -15; dz <= 15; dz++) {
    const r = Math.sqrt(dx * dx + dz * dz);
    if (r > 14.5) continue;
    const x = 24 + dx, z = 21 + dz;
    const upper = dz > 2;
    const lower = dz < -5;
    const fleck = rand();

    for (let y = 18; y <= 23; y++) {
      set(x, y, z, lower ? "#9e6124" : "#bb7a2c");
    }

    if (r > 12.3) {
      // Raised, bright rolled rim with a darker inner boundary.
      for (let y = 16; y <= 24; y++) {
        set(x, y, z, r > 13.8 ? "#d99532" : "#e9ad42");
      }
      set(x, 16, z, upper ? "#ffda70" : "#edb447");
      if (r < 12.9) set(x, 15, z, "#a96725");
    } else {
      let face = upper ? "#e9ae45" : lower ? "#bb792b" : "#d59737";
      if (fleck < 0.10) face = upper ? "#f4c461" : "#e0a13d";
      if (fleck > 0.94) face = "#ad7029";
      set(x, 17, z, face);

      // Fine concentric hammered band inside the rim.
      if (r > 10.6 && r < 11.35)
        set(x, 16, z, upper ? "#f3c45e" : "#bc7a2b");
      if (r > 9.9 && r <= 10.6)
        set(x, 17, z, "#ae6d26");
    }
  }
}

// Evenly spaced raised studs around the decorative band.
for (let i = 0; i < 20; i++) {
  const a = i * Math.PI * 2 / 20;
  const x = Math.round(24 + Math.sin(a) * 11.8);
  const z = Math.round(21 + Math.cos(a) * 11.8);
  set(x, 15, z, "#f8cf6a");
  set(x, 16, z, "#a86b27");
}

// Dark, domed center boss, outlined in warm gold.
for (let dx = -5; dx <= 5; dx++) {
  for (let dz = -5; dz <= 5; dz++) {
    const r = Math.sqrt(dx * dx + dz * dz);
    if (r > 5.1) continue;
    const x = 24 + dx, z = 21 + dz;
    if (r > 4.15) {
      set(x, 16, z, dz > 0 ? "#ffd06a" : "#d49136");
    } else {
      set(x, 16, z, "#74401e");
      set(x, 15, z, dz > 0 ? "#ae6726" : "#85481e");
      if (r < 3.1) set(x, 14, z, dz > 0 ? "#b9742e" : "#97541f");
      if (r < 1.8) set(x, 13, z, "#aa6125");
    }
  }
}
set(23, 12, 23, "#f4bc55");
set(24, 12, 23, "#dc9b3d");
set(23, 13, 24, "#e3a546");

animate("gong", { type: "swing", axis: "x", speed: 1.7, amplitude: 0.24 });