Skip to content
Kiln0.10Get Kiln

Demo run

Earlier examples from earlier Kiln versions.

Historical gallery render of Unfolding dragonfly; see the poster provenance below.

Drag to orbit after opening. The model starts stationary.

For your engine. The download is a standard glTF 2.0 binary (GLB) with PBR metallic-roughness materials. glTF stores materials, not lighting or tone mapping, so your engine decides how they read. This 3D view tone-maps with Review Neutral, the Khronos PBR Neutral construction with a smaller glare offset (0.015 instead of 0.04), at exposure 0.9. Its Tone mapping control also shows ACES and Linear, for comparison.

Build measurements

Triangles
17,420
Estimated draws
326
Materials
9
Textures
0
Animation clips
1
Bounds X × Y × Z
0.84 × 0.23 × 0.76 m
Build warnings
0

Measurements come from this build.

Download this build

Runtime: 341,232 bytes. Original: 340,992 bytes.

These GLBs are build outputs of the MIT-licensed example source; no separate terms are stated for the builds.

Runtime provenance metadata
SHA-256 download hashes
Runtime GLB
374c17dd4be6031622b558b84b39b41818e6bfb42f98e6d5a9cdfe2bc3115447
Original GLB
c4c462a0f89327d1ffaaafd64be7d4a410d4134bb63363176b96d3070c74bfef
Source
ebb4e45d66b43fdbaad8d90290e005921bcca87a8712638b34ed344d8e70bd48

The example source is part of the Kiln repository. Repository licence: MIT.

These GLBs are build outputs of the MIT-licensed example source; no separate terms are stated for the builds.

Recorded authorship

Gemini 3.8 Flash through Antigravity CLI (agy) ·

Recorded demo session; model credit supplied only where the retained run identifies it.

Source access
See retained demo run; no stronger isolation claim is made.
Inherited context
Not independently recorded; source-header declarations only
Starting example
Not recorded
Human input
Owner supplied direction; model-authored exported source preserved byte-for-byte.
Authoring review
Authoring feedback and shaded demo previews where available. Not a destination-runtime acceptance claim.

Gallery GPU render of this exact source. Source, artifact, image hashes and camera settings are recorded alongside the poster; the artifact hash names the GLB bytes the image was rendered from, which the downloadable rebuild reproduces byte for byte only on the platform that recorded it.

Poster camera and render record

The source behind this build

demo-unfolding-dragonfly.kiln.js
const meta = {
  name: 'Mechanical Dragonfly with Unfolding Copper Wings',
  category: 'character',
  role: 'prop'
};

function build() {
  const root = createRoot('MechanicalDragonfly');

  // --- Materials ---
  const matCopper = gameMaterial(0xcd683d, { metalness: 0.88, roughness: 0.28 });
  const matBrightCopper = gameMaterial(0xdf7a4a, { metalness: 0.92, roughness: 0.20 });
  const matBrass = gameMaterial(0xd4af37, { metalness: 0.85, roughness: 0.30 });
  const matGunmetal = gameMaterial(0x282a30, { metalness: 0.80, roughness: 0.42 });
  const matSteel = gameMaterial(0x9ca3af, { metalness: 0.92, roughness: 0.18 });
  const matObsidianEye = gameMaterial(0x161e26, { metalness: 0.82, roughness: 0.12 });
  const matGlowAmber = gameMaterial(0xd9822b, { metalness: 0.35, roughness: 0.25, emissive: 0x8a4510, emissiveIntensity: 0.8 });
  const matPowerCore = gameMaterial(0x38bdf8, { metalness: 0.20, roughness: 0.20, emissive: 0x0284c7, emissiveIntensity: 1.5 });
  const matCopperFoil = gameMaterial(0xc25e36, { metalness: 0.88, roughness: 0.32 });
  const matCopperVane = gameMaterial(0xd86f3e, { metalness: 0.92, roughness: 0.22 });

  // --- 1. Head & Cephalon ---
  const headPos = [0.22, 0.175, 0];
  const headGroup = createPivot('Head_Mount', headPos, root);

  // Skull casing
  createPart('Head_Casing', capsuleGeo(0.028, 0.032, 12), matGunmetal, {
    rotation: [0, 0, 90],
    parent: headGroup
  });
  // Frontal brow plate & cowl
  createPart('Head_Brow', boxGeo(0.032, 0.016, 0.048), matBrass, {
    position: [0.018, 0.008, 0],
    parent: headGroup
  });
  createPart('Head_FacePlate', taperConeGeo(0.024, 0.012, 0.028, 'x', 8), matCopper, {
    position: [0.028, -0.008, 0],
    parent: headGroup
  });

  // Large Compound Eyes (Left & Right)
  for (const s of [1, -1]) {
    const eyeZ = s * 0.034;
    // Main faceted compound eye hemisphere
    createPart(`Eye_${s > 0 ? 'R' : 'L'}`, sphereGeo(0.026, 16, 12), matObsidianEye, {
      position: [0.008, 0.008, eyeZ],
      scale: [1.1, 1.0, 0.85],
      parent: headGroup
    });
    // Brass ocular bezel / retaining collar
    createPart(`EyeBezel_${s > 0 ? 'R' : 'L'}`, torusGeo(0.026, 0.0032, 8, 20), matBrass, {
      position: [0.008, 0.008, eyeZ * 0.88],
      rotation: [0, s * 25, 0],
      parent: headGroup
    });
    // Ocular gear teeth ring
    const eyeGear = gearGeo({ teeth: 18, rootRadius: 0.025, tipRadius: 0.029, boreRadius: 0.022, height: 0.004 });
    createPart(`EyeGear_${s > 0 ? 'R' : 'L'}`, eyeGear, matBrightCopper, {
      position: [0.008, 0.008, eyeZ * 0.82],
      rotation: [90, 0, s * 25],
      parent: headGroup
    });

    // Articulated Antenna
    const antRoot = [0.030, 0.022, s * 0.014];
    beamBetween(`Antenna_Base_${s > 0 ? 'R' : 'L'}`, antRoot, [antRoot[0] + 0.025, antRoot[1] + 0.020, s * 0.024], 0.0018, matBrass, { parent: headGroup });
    beamBetween(`Antenna_Tip_${s > 0 ? 'R' : 'L'}`, [antRoot[0] + 0.025, antRoot[1] + 0.020, s * 0.024], [antRoot[0] + 0.048, antRoot[1] + 0.028, s * 0.030], 0.0012, matCopper, { parent: headGroup });
    createPart(`Antenna_Orb_${s > 0 ? 'R' : 'L'}`, sphereGeo(0.0035, 8, 6), matGlowAmber, {
      position: [antRoot[0] + 0.048, antRoot[1] + 0.028, s * 0.030],
      parent: headGroup
    });

    // Mandibles / Mouthparts
    beamBetween(`Mandible_${s > 0 ? 'R' : 'L'}`, [0.030, -0.020, s * 0.012], [0.044, -0.030, s * 0.004], 0.0025, matSteel, { parent: headGroup });
    createPart(`Mandible_Tip_${s > 0 ? 'R' : 'L'}`, coneGeo(0.003, 0.010, 6), matBrass, {
      position: [0.044, -0.030, s * 0.004],
      rotation: [0, 0, -60],
      parent: headGroup
    });
  }

  // 3 Dorsal Ocelli (sensory eyes)
  createPart('Ocellus_Center', sphereGeo(0.0045, 8, 6), matGlowAmber, {
    position: [0.016, 0.030, 0],
    parent: headGroup
  });
  createPart('Ocellus_R', sphereGeo(0.0035, 8, 6), matGlowAmber, {
    position: [0.010, 0.028, 0.010],
    parent: headGroup
  });
  createPart('Ocellus_L', sphereGeo(0.0035, 8, 6), matGlowAmber, {
    position: [0.010, 0.028, -0.010],
    parent: headGroup
  });

  // Neck Gimbal Collar
  createPart('Neck_Ring', torusGeo(0.022, 0.004, 8, 16), matBrass, {
    position: [0.188, 0.175, 0],
    rotation: [0, 90, 0],
    parent: root
  });
  createPart('Neck_Joint', sphereGeo(0.018, 10, 8), matSteel, {
    position: [0.188, 0.175, 0],
    parent: root
  });

  // --- 2. Thorax (Chassis & Clockwork Engine Room) ---
  const thoraxCenter = [0.05, 0.170, 0];

  // Main Dorsal Carapace Shield
  createPart('Thorax_DorsalCarapace', capsuleGeo(0.040, 0.14, 12), matGunmetal, {
    position: thoraxCenter,
    rotation: [0, 0, 90],
    scale: [1.0, 0.95, 1.1],
    parent: root
  });
  // Copper Spine Crest (Split with open clockwork gearbox bay)
  createPart('Thorax_SpineCrest_Front', boxGeo(0.045, 0.010, 0.012), matBrightCopper, {
    position: [thoraxCenter[0] + 0.055, thoraxCenter[1] + 0.042, 0],
    parent: root
  });
  createPart('Thorax_SpineCrest_Aft', boxGeo(0.040, 0.010, 0.012), matBrightCopper, {
    position: [thoraxCenter[0] - 0.055, thoraxCenter[1] + 0.042, 0],
    parent: root
  });
  // Gearbox bay filigree rim / brass housing
  createPart('Gearbox_Rim', boxGeo(0.065, 0.006, 0.030), matBrass, {
    position: [thoraxCenter[0] + 0.002, thoraxCenter[1] + 0.040, 0],
    parent: root
  });
  // Arched brass protective rib cage over exposed gears
  for (let g = -1; g <= 1; g++) {
    createPart(`Gearbox_Arch_${g}`, torusGeo(0.018, 0.0018, 6, 16), matBrass, {
      position: [thoraxCenter[0] + 0.002 + g * 0.020, thoraxCenter[1] + 0.040, 0],
      rotation: [0, 90, 0],
      parent: root
    });
  }

  // Animated Clockwork Gears inside Thorax (Prominently exposed in central bay)
  // Main Drive Gear (brass)
  const gearPivotMain = createPivot('Gear_Main', [thoraxCenter[0] + 0.018, thoraxCenter[1] + 0.024, 0], root);
  const mainGearMesh = gearGeo({ teeth: 16, rootRadius: 0.026, tipRadius: 0.032, boreRadius: 0.008, height: 0.010 });
  createPart('Gear_Main_Mesh', mainGearMesh, matBrass, {
    rotation: [90, 0, 0],
    parent: gearPivotMain
  });

  // Secondary Reduction Gear (copper, meshing with main gear)
  const gearPivotSec = createPivot('Gear_Sec', [thoraxCenter[0] - 0.020, thoraxCenter[1] + 0.028, 0], root);
  const secGearMesh = gearGeo({ teeth: 10, rootRadius: 0.014, tipRadius: 0.019, boreRadius: 0.005, height: 0.010 });
  createPart('Gear_Sec_Mesh', secGearMesh, matCopper, {
    rotation: [90, 0, 0],
    parent: gearPivotSec
  });

  // Transverse brass drive shafts linking gearbox to wing saddles
  beamBetween('Gear_Shaft_Fore',
    [thoraxCenter[0] + 0.018, thoraxCenter[1] + 0.024, -0.036],
    [thoraxCenter[0] + 0.018, thoraxCenter[1] + 0.024,  0.036],
    0.003, matSteel, { parent: root });
  beamBetween('Gear_Shaft_Aft',
    [thoraxCenter[0] - 0.020, thoraxCenter[1] + 0.028, -0.034],
    [thoraxCenter[0] - 0.020, thoraxCenter[1] + 0.028,  0.034],
    0.0025, matSteel, { parent: root });

  // Side Pressure Gauge (Port side)
  createPart('PressureGauge_Body', cylinderGeo(0.012, 0.012, 0.006, 12), matBrass, {
    position: [thoraxCenter[0] + 0.010, thoraxCenter[1] + 0.015, 0.046],
    rotation: [90, 0, 0],
    parent: root
  });
  createPart('PressureGauge_Face', cylinderGeo(0.009, 0.009, 0.007, 12), matGlowAmber, {
    position: [thoraxCenter[0] + 0.010, thoraxCenter[1] + 0.015, 0.047],
    rotation: [90, 0, 0],
    parent: root
  });
  // Starboard Escapement Wheel
  createPart('Escapement_Body', cylinderGeo(0.010, 0.010, 0.006, 10), matBrass, {
    position: [thoraxCenter[0] - 0.015, thoraxCenter[1] + 0.015, -0.046],
    rotation: [90, 0, 0],
    parent: root
  });

  // Twin Steam Exhaust Funnels on Dorsal Carapace
  for (const s of [1, -1]) {
    createPart(`Steam_Funnel_${s > 0 ? 'R' : 'L'}`, cylinderGeo(0.0045, 0.003, 0.022, 10), matBrass, {
      position: [thoraxCenter[0] - 0.045, thoraxCenter[1] + 0.045, s * 0.020],
      rotation: [s * 15, 0, -25],
      parent: root
    });
    createPart(`Steam_Rim_${s > 0 ? 'R' : 'L'}`, torusGeo(0.005, 0.0012, 6, 12), matBrightCopper, {
      position: [thoraxCenter[0] - 0.050, thoraxCenter[1] + 0.054, s * 0.024],
      rotation: [s * 15, 0, -25],
      parent: root
    });
  }

  // Wing Saddle Mounts on Dorsal Carapace
  for (const s of [1, -1]) {
    // Forewing Mount Block
    createPart(`Forewing_Saddle_${s > 0 ? 'R' : 'L'}`, boxGeo(0.022, 0.014, 0.016), matBrass, {
      position: [0.08, 0.210, s * 0.038],
      parent: root
    });
    // Hindwing Mount Block
    createPart(`Hindwing_Saddle_${s > 0 ? 'R' : 'L'}`, boxGeo(0.022, 0.014, 0.016), matBrass, {
      position: [-0.01, 0.205, s * 0.036],
      parent: root
    });
  }

  // --- 3. 10-Segmented Abdomen & Caudal Claspers ---
  const abdomenStart = -0.05;
  const numSegments = 10;
  const segLength = 0.044;
  let curX = abdomenStart;

  for (let seg = 1; seg <= numSegments; seg++) {
    const t = (seg - 1) / (numSegments - 1);
    const rFront = 0.024 * (1 - 0.65 * t);
    const rBack = 0.024 * (1 - 0.65 * (t + 1 / numSegments));
    const centerX = curX - segLength * 0.5;

    // Segment Body Shell
    createPart(`Abdomen_S${seg}_Shell`, taperConeGeo(rBack, rFront, segLength, 'x', 8), matGunmetal, {
      position: [centerX, 0.165 - t * 0.025, 0],
      parent: root
    });

    // Brass Joint Ring between segments
    createPart(`Abdomen_S${seg}_Ring`, torusGeo(rFront * 1.05, 0.0022, 6, 16), matBrass, {
      position: [curX, 0.165 - t * 0.025, 0],
      rotation: [0, 90, 0],
      parent: root
    });

    // Longitudinal Dorsal Spine Conduit
    beamBetween(`Abdomen_S${seg}_Spine`,
      [curX, 0.165 - t * 0.025 + rFront * 1.05, 0],
      [curX - segLength, 0.165 - (t + 1 / numSegments) * 0.025 + rBack * 1.05, 0],
      0.0020, matBrightCopper, { parent: root });

    // Lateral copper rivet studs
    for (const s of [1, -1]) {
      createPart(`Abdomen_S${seg}_Stud_${s > 0 ? 'R' : 'L'}`, sphereGeo(0.0022, 6, 4), matCopper, {
        position: [centerX, 0.165 - t * 0.025, s * (rFront + rBack) * 0.5],
        parent: root
      });
    }

    curX -= segLength;
  }

  // S10 Tip & Tail Claspers (Cerci)
  const tipX = curX;
  const tipY = 0.140;
  createPart('Caudal_Base', cylinderGeo(0.008, 0.006, 0.016, 8), matBrass, {
    position: [tipX, tipY, 0],
    rotation: [0, 0, 90],
    parent: root
  });
  // Upper dual forceps / claspers
  for (const s of [1, -1]) {
    beamBetween(`Clasper_Upper_${s > 0 ? 'R' : 'L'}`,
      [tipX - 0.008, tipY + 0.003, s * 0.004],
      [tipX - 0.038, tipY + 0.012, s * 0.012],
      0.0016, matSteel, { parent: root });
    beamBetween(`Clasper_Tip_${s > 0 ? 'R' : 'L'}`,
      [tipX - 0.038, tipY + 0.012, s * 0.012],
      [tipX - 0.052, tipY + 0.008, s * 0.002],
      0.0012, matBrightCopper, { parent: root });
  }
  // Lower ventral clasper prong
  beamBetween('Clasper_Lower',
    [tipX - 0.008, tipY - 0.004, 0],
    [tipX - 0.040, tipY - 0.010, 0],
    0.0016, matSteel, { parent: root });

  // --- 4. 6 Articulated Mechanical Legs (Ground Contact at Y = 0) ---
  // Legs: Forelegs, Midlegs, Hindlegs
  const legDefs = [
    { name: 'Foreleg', rootX: 0.12, rootY: 0.13, rootZ: 0.042, knee: [0.17, 0.19, 0.095], ankle: [0.16, 0.05, 0.120], foot: [0.17, 0.0, 0.135] },
    { name: 'Midleg',  rootX: 0.04, rootY: 0.12, rootZ: 0.045, knee: [0.04, 0.18, 0.125], ankle: [0.02, 0.05, 0.150], foot: [0.02, 0.0, 0.165] },
    { name: 'Hindleg', rootX: -0.04, rootY: 0.12, rootZ: 0.045, knee: [-0.08, 0.19, 0.135], ankle: [-0.13, 0.06, 0.160], foot: [-0.15, 0.0, 0.175] }
  ];

  for (const def of legDefs) {
    for (const s of [1, -1]) {
      const pRoot = [def.rootX, def.rootY, s * def.rootZ];
      const pKnee = [def.knee[0], def.knee[1], s * def.knee[2]];
      const pAnkle = [def.ankle[0], def.ankle[1], s * def.ankle[2]];
      const pFoot = [def.foot[0], def.foot[1], s * def.foot[2]];
      const prefix = `${def.name}_${s > 0 ? 'R' : 'L'}`;

      // Coxa mounting ball & socket
      createPart(`${prefix}_Coxa`, sphereGeo(0.008, 8, 8), matBrass, {
        position: pRoot,
        parent: root
      });
      // Femur strut (Coxa to Knee)
      beamBetween(`${prefix}_Femur`, pRoot, pKnee, 0.0035, matGunmetal, { parent: root });
      // Copper hydraulic line along femur
      beamBetween(`${prefix}_FemurTube`,
        [pRoot[0], pRoot[1] + 0.004, pRoot[2]],
        [pKnee[0], pKnee[1] + 0.004, pKnee[2]],
        0.0015, matCopper, { parent: root });

      // Knee hinge disc
      createPart(`${prefix}_KneeDisc`, cylinderGeo(0.007, 0.007, 0.006, 10), matBrass, {
        position: pKnee,
        rotation: [0, 0, 90],
        parent: root
      });

      // Tibia strut (Knee to Ankle) with classic dragonfly spines
      beamBetween(`${prefix}_Tibia`, pKnee, pAnkle, 0.0028, matSteel, { parent: root });

      // 3 Tibial spines
      for (let sp = 1; sp <= 3; sp++) {
        const u = sp / 4;
        const spBase = [
          pKnee[0] + u * (pAnkle[0] - pKnee[0]),
          pKnee[1] + u * (pAnkle[1] - pKnee[1]),
          pKnee[2] + u * (pAnkle[2] - pKnee[2])
        ];
        const spTip = [spBase[0] + 0.003, spBase[1] - 0.006, spBase[2] + s * 0.004];
        beamBetween(`${prefix}_Spine_${sp}`, spBase, spTip, 0.0010, matBrightCopper, { parent: root });
      }

      // Tarsal Joint / Ankle knuckle
      createPart(`${prefix}_Ankle`, sphereGeo(0.0045, 8, 6), matBrass, {
        position: pAnkle,
        parent: root
      });

      // Tarsus / Claws reaching firmly down to Y = 0
      beamBetween(`${prefix}_Tarsus`, pAnkle, pFoot, 0.0022, matSteel, { parent: root });
      // Sharp curved gripping claw touching Y = 0
      createPart(`${prefix}_ClawOuter`, coneGeo(0.0028, 0.010, 6), matBrightCopper, {
        position: [pFoot[0], pFoot[1] + 0.003, pFoot[2]],
        rotation: [s * 20, 0, -45],
        parent: root
      });
      createPart(`${prefix}_ClawInner`, coneGeo(0.0028, 0.010, 6), matBrightCopper, {
        position: [pFoot[0] - 0.004, pFoot[1] + 0.003, pFoot[2] - s * 0.003],
        rotation: [s * 10, 0, -50],
        parent: root
      });
    }
  }

  // --- 5. Unfolding Copper Wings (Forewings & Hindwings) ---
  // Helper to build an intricate folding wing
  function createFoldingWing(wingId, isHind, side, mountPos) {
    const s = side; // +1 = Right (+Z), -1 = Left (-Z)
    const sideKey = s > 0 ? 'R' : 'L';
    const tag = `${wingId}_${sideKey}`;

    // Root Pivot: receives rotation tracks in animation
    const rootPivot = createPivot(`${tag}_Root`, mountPos, root);

    // Root swivel clevis & actuator piston
    createPart(`${tag}_Clevis`, boxGeo(0.014, 0.012, 0.012), matBrass, {
      position: [0, 0, 0],
      parent: rootPivot
    });
    // Miniature hydraulic pushrod pylon
    beamBetween(`${tag}_Actuator`, [-0.010, -0.015, 0], [0, 0, s * 0.015], 0.0025, matSteel, { parent: rootPivot });

    // Inner Wing Dimensions
    const innerSpan = isHind ? 0.14 : 0.16;
    const baseChord = isHind ? 0.070 : 0.052;
    const midChord = isHind ? 0.065 : 0.048;

    // --- Inner Wing Assembly (attached to rootPivot) ---
    // Leading tubular copper spar
    beamBetween(`${tag}_Inner_LeadSpar`, [0, 0, 0], [0, 0, s * innerSpan], 0.0035, matBrightCopper, { parent: rootPivot });
    // Subcostal spar
    beamBetween(`${tag}_Inner_SubSpar`, [-0.012, -0.001, s * 0.015], [-0.010, -0.001, s * innerSpan], 0.0022, matCopper, { parent: rootPivot });

    // Inner venation ribs & braces
    const numInnerRibs = 5;
    for (let r = 1; r <= numInnerRibs; r++) {
      const u = r / numInnerRibs;
      const zPos = s * innerSpan * u;
      const chord = baseChord * (1 - u) + midChord * u;
      // Cross vein from leading spar back to trailing edge
      beamBetween(`${tag}_Inner_Rib_${r}`, [0, 0, zPos], [-chord, -0.001, zPos], 0.0014, matCopper, { parent: rootPivot });
      // Diagonal cross-truss
      if (r > 1) {
        const prevZ = s * innerSpan * ((r - 1) / numInnerRibs);
        beamBetween(`${tag}_Inner_Truss_${r}`, [-0.010, -0.001, prevZ], [-chord * 0.7, -0.001, zPos], 0.0010, matBrass, { parent: rootPivot });
      }
    }
    // Trailing edge copper framing wire
    beamBetween(`${tag}_Inner_TrailWire`, [-baseChord, -0.001, s * 0.010], [-midChord, -0.001, s * innerSpan], 0.0016, matBrightCopper, { parent: rootPivot });

    // Inner Wing Translucent Copper Membrane (meshGeo)
    // Triangle strip from leading edge to trailing edge
    const innerPositions = [];
    const innerIndices = [];
    for (let r = 0; r <= numInnerRibs; r++) {
      const u = r / numInnerRibs;
      const zPos = s * innerSpan * u;
      const chord = baseChord * (1 - u) + midChord * u;
      innerPositions.push(0, 0, zPos);          // front vertex
      innerPositions.push(-chord, 0, zPos);     // back vertex
    }
    for (let r = 0; r < numInnerRibs; r++) {
      const i0 = r * 2;
      const i1 = r * 2 + 1;
      const i2 = (r + 1) * 2;
      const i3 = (r + 1) * 2 + 1;
      // Two triangles per quad cell (both clockwise and CCW for double-sided visibility)
      innerIndices.push(i0, i1, i2,  i2, i1, i3);
      innerIndices.push(i2, i1, i0,  i3, i1, i2);
    }
    const innerMembraneGeo = meshGeo({ positions: innerPositions, indices: innerIndices });
    createPart(`${tag}_Inner_Membrane`, innerMembraneGeo, matCopperFoil, {
      position: [0, -0.0005, 0],
      parent: rootPivot
    });

    // Elbow Hinge Joint (Nodus / Folding Elbow Mechanism)
    const elbowPos = [0, 0, s * innerSpan];
    createPart(`${tag}_ElbowKnuckle`, cylinderGeo(0.006, 0.006, 0.008, 12), matBrass, {
      position: elbowPos,
      rotation: [90, 0, 0],
      parent: rootPivot
    });
    // Miniature spur gear linking inner & outer wing
    const elbowGear = gearGeo({ teeth: 12, rootRadius: 0.006, tipRadius: 0.0085, boreRadius: 0.0025, height: 0.004 });
    createPart(`${tag}_ElbowGear`, elbowGear, matBrightCopper, {
      position: [elbowPos[0], elbowPos[1] + 0.003, elbowPos[2]],
      rotation: [0, 0, 90],
      parent: rootPivot
    });

    // --- Mid Pivot: outer wing unfolds from here! ---
    const midPivot = createPivot(`${tag}_Mid`, elbowPos, rootPivot);

    // Outer Wing Dimensions
    const outerSpan = isHind ? 0.16 : 0.18;
    const tipChord = 0.015;

    // Outer leading copper spar
    beamBetween(`${tag}_Outer_LeadSpar`, [0, 0, 0], [-0.006, 0, s * outerSpan], 0.0030, matBrightCopper, { parent: midPivot });
    // Outer subcostal spar
    beamBetween(`${tag}_Outer_SubSpar`, [-0.010, -0.001, 0], [-0.010, -0.001, s * outerSpan * 0.75], 0.0018, matCopper, { parent: midPivot });

    // Outer venation ribs
    const numOuterRibs = 6;
    for (let r = 1; r <= numOuterRibs; r++) {
      const u = r / numOuterRibs;
      const zPos = s * outerSpan * u;
      const chord = midChord * (1 - u) + tipChord * u;
      const frontX = -0.006 * u;
      // Cross rib
      beamBetween(`${tag}_Outer_Rib_${r}`, [frontX, 0, zPos], [frontX - chord, -0.001, zPos], 0.0012, matCopper, { parent: midPivot });
      // Venation diagonals
      if (r > 1) {
        const prevZ = s * outerSpan * ((r - 1) / numOuterRibs);
        const prevFrontX = -0.006 * ((r - 1) / numOuterRibs);
        beamBetween(`${tag}_Outer_Truss_${r}`, [prevFrontX - 0.008, -0.001, prevZ], [frontX - chord * 0.6, -0.001, zPos], 0.0009, matBrass, { parent: midPivot });
      }
    }
    // Trailing edge wire for outer wing
    beamBetween(`${tag}_Outer_TrailWire`, [-midChord, -0.001, 0], [-0.006 - tipChord, -0.001, s * outerSpan], 0.0015, matBrightCopper, { parent: midPivot });

    // Pterostigma (Aerodynamic counterweight plate near wing tip)
    const pteroZ = s * outerSpan * 0.82;
    createPart(`${tag}_Pterostigma`, boxGeo(0.008, 0.0025, 0.024), matBrass, {
      position: [-0.008, 0.001, pteroZ],
      parent: midPivot
    });
    createPart(`${tag}_Pterostigma_Trim`, boxGeo(0.005, 0.0035, 0.018), matBrightCopper, {
      position: [-0.008, 0.001, pteroZ],
      parent: midPivot
    });

    // Outer Wing Translucent Copper Membrane (meshGeo)
    const outerPositions = [];
    const outerIndices = [];
    for (let r = 0; r <= numOuterRibs; r++) {
      const u = r / numOuterRibs;
      const zPos = s * outerSpan * u;
      const chord = midChord * (1 - u) + tipChord * u;
      const frontX = -0.006 * u;
      outerPositions.push(frontX, 0, zPos);             // front vertex
      outerPositions.push(frontX - chord, 0, zPos);     // back vertex
    }
    for (let r = 0; r < numOuterRibs; r++) {
      const i0 = r * 2;
      const i1 = r * 2 + 1;
      const i2 = (r + 1) * 2;
      const i3 = (r + 1) * 2 + 1;
      outerIndices.push(i0, i1, i2,  i2, i1, i3);
      outerIndices.push(i2, i1, i0,  i3, i1, i2);
    }
    const outerMembraneGeo = meshGeo({ positions: outerPositions, indices: outerIndices });
    createPart(`${tag}_Outer_Membrane`, outerMembraneGeo, matCopperFoil, {
      position: [0, -0.0005, 0],
      parent: midPivot
    });

    // Wing Tip Filigree Finial
    createPart(`${tag}_TipFinial`, sphereGeo(0.0035, 8, 6), matBrightCopper, {
      position: [-0.006, 0, s * outerSpan],
      parent: midPivot
    });

    // --- Trailing Edge Deployable Copper Fan Vane (Flap) ---
    // Pivots to fan out the rear chord when unfolding
    const flapPivot = createPivot(`${tag}_Flap`, [-baseChord * 0.45, 0, s * 0.02], rootPivot);
    const flapWidth = isHind ? 0.030 : 0.020;
    const flapLength = innerSpan * 0.72;
    // Flat, thin, filigree copper fan blade
    const flapPositions = [
      0, 0, 0,
      -flapWidth, 0, s * flapLength * 0.35,
      -flapWidth * 0.8, 0, s * flapLength,
      0, 0, s * flapLength
    ];
    const flapIndices = [
      0, 1, 2,  0, 2, 3,
      2, 1, 0,  3, 2, 0
    ];
    const flapGeo = meshGeo({ positions: flapPositions, indices: flapIndices });
    createPart(`${tag}_FlapVane`, flapGeo, matCopperVane, {
      position: [0, -0.0008, 0],
      parent: flapPivot
    });
    beamBetween(`${tag}_FlapRib1`, [0, 0, 0], [-flapWidth, -0.0008, s * flapLength * 0.35], 0.0012, matBrightCopper, { parent: flapPivot });
    beamBetween(`${tag}_FlapRib2`, [0, 0, 0], [-flapWidth * 0.8, -0.0008, s * flapLength], 0.0012, matBrightCopper, { parent: flapPivot });
  }

  // Instantiate the 4 Wings (Forewings and Hindwings, Right and Left)
  createFoldingWing('WingF', false,  1, [0.08, 0.220,  0.038]);  // Forewing Right
  createFoldingWing('WingF', false, -1, [0.08, 0.220, -0.038]);  // Forewing Left
  createFoldingWing('WingH', true,   1, [-0.01, 0.215,  0.036]); // Hindwing Right
  createFoldingWing('WingH', true,  -1, [-0.01, 0.215, -0.036]); // Hindwing Left

  return root;
}

function animate(root) {
  // Total duration: 5.0 seconds for a majestic, slow unfolding sequence
  const tracks = [];

  // 1. Clockwork Gears in Thorax
  tracks.push(rotationTrack('Joint_Gear_Main', [
    { time: 0.0, rotation: [0, 0, 0] },
    { time: 1.0, rotation: [0, 0, 90] },
    { time: 2.5, rotation: [0, 0, 220] },
    { time: 4.0, rotation: [0, 0, 360] },
    { time: 5.0, rotation: [0, 0, 360] }
  ]));

  tracks.push(rotationTrack('Joint_Gear_Sec', [
    { time: 0.0, rotation: [0, 0, 0] },
    { time: 1.0, rotation: [0, 0, -144] },
    { time: 2.5, rotation: [0, 0, -352] },
    { time: 4.0, rotation: [0, 0, -576] },
    { time: 5.0, rotation: [0, 0, -576] }
  ]));

  // 2. Right Forewing
  // Root Pivot: yaw sweeps from folded back (-76 deg) to flight stance (+3 deg)
  tracks.push(rotationTrack('Joint_WingF_R_Root', [
    { time: 0.0, rotation: [-10, -76, 12] },
    { time: 0.8, rotation: [-8,  -68, 10] },
    { time: 2.0, rotation: [-4,  -35,  6] },
    { time: 3.2, rotation: [-1,   -6,  2] },
    { time: 4.2, rotation: [ 0,    3,  1] },
    { time: 4.6, rotation: [ 1,    3,  3] },
    { time: 5.0, rotation: [ 0,    3,  2] }
  ]));
  // Mid Pivot (Elbow): hinges open from folded (+135 deg) to straight (0 deg)
  tracks.push(rotationTrack('Joint_WingF_R_Mid', [
    { time: 0.0, rotation: [0, 135, 0] },
    { time: 1.0, rotation: [0, 125, 0] },
    { time: 2.2, rotation: [0,  70, 0] },
    { time: 3.4, rotation: [0,  18, 0] },
    { time: 4.2, rotation: [0,   0, 0] },
    { time: 5.0, rotation: [0,   0, 0] }
  ]));
  // Trailing Flap: fans open
  tracks.push(rotationTrack('Joint_WingF_R_Flap', [
    { time: 0.0, rotation: [0, 35, 0] },
    { time: 1.5, rotation: [0, 30, 0] },
    { time: 3.0, rotation: [0, 12, 0] },
    { time: 4.2, rotation: [0,  0, 0] },
    { time: 5.0, rotation: [0,  0, 0] }
  ]));

  // 3. Left Forewing (Symmetric)
  tracks.push(rotationTrack('Joint_WingF_L_Root', [
    { time: 0.0, rotation: [-10,  76, -12] },
    { time: 0.8, rotation: [-8,   68, -10] },
    { time: 2.0, rotation: [-4,   35,  -6] },
    { time: 3.2, rotation: [-1,    6,  -2] },
    { time: 4.2, rotation: [ 0,   -3,  -1] },
    { time: 4.6, rotation: [ 1,   -3,  -3] },
    { time: 5.0, rotation: [ 0,   -3,  -2] }
  ]));
  tracks.push(rotationTrack('Joint_WingF_L_Mid', [
    { time: 0.0, rotation: [0, -135, 0] },
    { time: 1.0, rotation: [0, -125, 0] },
    { time: 2.2, rotation: [0,  -70, 0] },
    { time: 3.4, rotation: [0,  -18, 0] },
    { time: 4.2, rotation: [0,    0, 0] },
    { time: 5.0, rotation: [0,    0, 0] }
  ]));
  tracks.push(rotationTrack('Joint_WingF_L_Flap', [
    { time: 0.0, rotation: [0, -35, 0] },
    { time: 1.5, rotation: [0, -30, 0] },
    { time: 3.0, rotation: [0, -12, 0] },
    { time: 4.2, rotation: [0,   0, 0] },
    { time: 5.0, rotation: [0,   0, 0] }
  ]));

  // 4. Right Hindwing (Slightly delayed for realistic organic mechanical stagger)
  tracks.push(rotationTrack('Joint_WingH_R_Root', [
    { time: 0.0, rotation: [-8, -78, 10] },
    { time: 1.0, rotation: [-8, -74, 10] },
    { time: 2.3, rotation: [-4, -42,  6] },
    { time: 3.5, rotation: [-1, -12,  2] },
    { time: 4.4, rotation: [ 0,  -4,  1] },
    { time: 4.7, rotation: [ 1,  -4,  2.5] },
    { time: 5.0, rotation: [ 0,  -4,  1.5] }
  ]));
  tracks.push(rotationTrack('Joint_WingH_R_Mid', [
    { time: 0.0, rotation: [0, 130, 0] },
    { time: 1.2, rotation: [0, 120, 0] },
    { time: 2.5, rotation: [0,  65, 0] },
    { time: 3.6, rotation: [0,  15, 0] },
    { time: 4.4, rotation: [0,   0, 0] },
    { time: 5.0, rotation: [0,   0, 0] }
  ]));
  tracks.push(rotationTrack('Joint_WingH_R_Flap', [
    { time: 0.0, rotation: [0, 32, 0] },
    { time: 1.6, rotation: [0, 28, 0] },
    { time: 3.2, rotation: [0, 10, 0] },
    { time: 4.4, rotation: [0,  0, 0] },
    { time: 5.0, rotation: [0,  0, 0] }
  ]));

  // 5. Left Hindwing (Symmetric)
  tracks.push(rotationTrack('Joint_WingH_L_Root', [
    { time: 0.0, rotation: [-8,  78, -10] },
    { time: 1.0, rotation: [-8,  74, -10] },
    { time: 2.3, rotation: [-4,  42,  -6] },
    { time: 3.5, rotation: [-1,  12,  -2] },
    { time: 4.4, rotation: [ 0,   4,  -1] },
    { time: 4.7, rotation: [ 1,   4,  -2.5] },
    { time: 5.0, rotation: [ 0,   4,  -1.5] }
  ]));
  tracks.push(rotationTrack('Joint_WingH_L_Mid', [
    { time: 0.0, rotation: [0, -130, 0] },
    { time: 1.2, rotation: [0, -120, 0] },
    { time: 2.5, rotation: [0,  -65, 0] },
    { time: 3.6, rotation: [0,  -15, 0] },
    { time: 4.4, rotation: [0,    0, 0] },
    { time: 5.0, rotation: [0,    0, 0] }
  ]));
  tracks.push(rotationTrack('Joint_WingH_L_Flap', [
    { time: 0.0, rotation: [0, -32, 0] },
    { time: 1.6, rotation: [0, -28, 0] },
    { time: 3.2, rotation: [0, -10, 0] },
    { time: 4.4, rotation: [0,   0, 0] },
    { time: 5.0, rotation: [0,   0, 0] }
  ]));

  return [createClip('Unfold', 5.0, tracks)];
}

Brief and retained revisions

Recorded brief

Articulated clockwork dragonfly with four folding copper wings, exposed gearbox, glowing core, and 10-segment abdomen.

  1. Saved revision 1 · Shown here

    Articulated clockwork dragonfly with four folding copper wings, exposed gearbox, glowing core, and 10-segment abdomen.

    Download saved revision 1 source

    SHA-256: ebb4e45d66b43fdbaad8d90290e005921bcca87a8712638b34ed344d8e70bd48