fogón

← Asian3D assetfogon/farol-de-piedra

Farol de piedra

by fogonCC011489 blocks
Farol de piedraDrag to turn it
// «Farol de piedra» · gpt-6-sol (medium)
// A Japanese stone lantern (toro): wide base, slim pillar, a firebox with square openings showing a warm yellow light inside, a wide pointed stone roof with curled corners and a little knob on top. Moss on the base.

const cx = 24, cy = 24;
const stone = "#c9c7b9";
const stoneLight = "#e3dfcd";
const stoneDark = "#a6a69b";
const slate = "#344e49";

// Broad, stepped stone base.
box(12, 12, 0, 36, 36, 1, stoneDark);
box(13, 13, 2, 35, 35, 3, stone);
box(15, 15, 4, 33, 33, 5, stoneLight);
box(18, 18, 6, 30, 30, 7, stone);
box(21, 21, 8, 27, 27, 17, stone);
box(20, 20, 9, 28, 28, 10, stoneDark);
box(19, 19, 17, 29, 29, 18, stoneLight);

// Platform beneath the firebox.
box(16, 16, 19, 32, 32, 20, stoneDark);
box(17, 17, 21, 31, 31, 22, stoneLight);

// Four chunky corner posts and a solid lintel.
for (const x of [17, 29]) {
  for (const y of [17, 29]) box(x, y, 23, x + 2, y + 2, 30, stone);
}
box(17, 17, 31, 31, 31, 32, stoneLight);

// Warm light recessed behind the square openings.
box(20, 20, 23, 28, 28, 29, "#dc913c");
for (let x = 20; x <= 28; x++)
  for (let y = 20; y <= 28; y++)
    for (let z = 23; z <= 29; z++) {
      const d = Math.abs(x - cx) + Math.abs(y - cy) + Math.abs(z - 26);
      if (d < 5) set(x, y, z, rand() < 0.65 ? "#ffe599" : "#ffca63");
      else if (rand() < 0.17) set(x, y, z, "#ffc565");
    }

// Lacquer and gold around the four visible, square apertures.
const red = "#8d342b", gold = "#d6ac55";
for (const v of [17, 31]) {
  for (let a = 19; a <= 29; a++) {
    set(a, v === 17 ? 16 : 32, 22, red);
    set(a, v === 17 ? 16 : 32, 30, red);
    set(v === 17 ? 16 : 32, a, 22, red);
    set(v === 17 ? 16 : 32, a, 30, red);
  }
  for (let z = 22; z <= 30; z++) {
    for (const a of [19, 29]) {
      set(a, v === 17 ? 16 : 32, z, red);
      set(v === 17 ? 16 : 32, a, z, red);
    }
  }
}
for (let a = 20; a <= 28; a++) {
  set(a, 16, 30, gold);
  set(a, 32, 30, gold);
  set(16, a, 30, gold);
  set(32, a, 30, gold);
}

// Wide, tiered glazed-stone roof. Each square ring rises toward its peak.
for (let x = 6; x <= 42; x++)
  for (let y = 6; y <= 42; y++) {
    const q = Math.max(Math.abs(x - cx), Math.abs(y - cy));
    const top = 33 + Math.floor((18 - q) / 3);
    const bottom = q === 18 ? 33 : 32;
    for (let z = bottom; z <= top; z++) {
      let color = z === bottom ? "#293d3c" : slate;
      if (z === top) {
        color = q >= 16 ? "#496b60" : "#405e55";
        if (q % 3 === 0) color = "#58766a";
        if ((x + 2 * y) % 7 === 0 && rand() < 0.55) color = "#698276";
      }
      set(x, y, z, color);
    }
  }

// Upturned corners of the eaves.
for (const sx of [-1, 1])
  for (const sy of [-1, 1]) {
    for (let i = 0; i < 4; i++) {
      const x = cx + sx * (15 + i);
      const y = cy + sy * (15 + i);
      box(x - 1, y - 1, 34 + Math.floor(i / 2),
          x + 1, y + 1, 35 + Math.floor(i / 2), "#496b60");
    }
    set(cx + sx * 18, cy + sy * 18, 37, "#789084");
  }

// Rounded, pointed finial.
box(21, 21, 39, 27, 27, 40, stoneDark);
box(22, 22, 41, 26, 26, 42, stoneLight);
box(23, 23, 43, 25, 25, 44, stone);
set(24, 24, 45, stoneLight);

// Light weathering on exposed pale stone.
forEach((x, y, z, color) => {
  if (z <= 32 && (color === stone || color === stoneLight || color === stoneDark)) {
    if (rand() < 0.055) set(x, y, z, rand() < 0.5 ? "#b4b7a9" : "#ded9c5");
  }
});

// Moss gathered in the base's seams, especially around its lower edges.
const moss = ["#496d45", "#658653", "#82975c", "#385c42"];
for (let x = 12; x <= 36; x++)
  for (let y = 12; y <= 36; y++) {
    const edge = Math.min(x - 12, 36 - x, y - 12, 36 - y);
    if (edge <= 3 && rand() < (edge === 0 ? 0.42 : 0.13))
      set(x, y, edge <= 1 ? 1 : 3, moss[Math.floor(rand() * moss.length)]);
    if (x >= 15 && x <= 33 && y >= 15 && y <= 33 &&
        (x < 20 || x > 28 || y < 20 || y > 28) && rand() < 0.12)
      set(x, y, 5, moss[Math.floor(rand() * moss.length)]);
  }