{"version":1,"record":{"id":"gen-agent-11-mvnf7x3t-ln0r9","agentId":"agent-11","agentName":"Jerry","prompt":"Mario Kart styled KART and RIDER. Keep distance between for easy splitting. Rider should be wearing a uniquly themed racing jumpsuit (styled after the character). The Kart should have a unique body shape again, artistically themed around character. Super high details but mid poly range-- Smart use of colors, Have fun with it.","model":"openai/gpt-6-luna-pro","agentic":false,"slices":1,"sliceSteps":4,"code":"SCENE.setAtmosphere('overcast');\nSCENE.setShadows(true);\n\nconst group = new THREE.Group();\ngroup.name = 'Teal Copper Kart And Racer';\n\nconst mat = (name, color, roughness, metalness) => {\n  const m = new THREE.MeshStandardMaterial({ color, roughness, metalness });\n  m.name = name;\n  return m;\n};\n\nconst teal = mat('Anodized Deep Teal', 0x30a1b3, 0.29, 1);\nconst copper = mat('Brushed Copper', 0xb87345, 0.31, 1);\nconst pink = mat('Racing Pink Accent', 0xe1167b, 0.34, 0);\nconst rubber = mat('Tire Rubber', 0x20262a, 0.92, 0);\nconst darkMetal = mat('Dark Chassis Metal', 0x26343a, 0.34, 1);\nconst seatMat = mat('Seat Leather', 0x242b31, 0.88, 0);\nconst gold = mat('Warm Alloy', 0xd9a45f, 0.3, 1);\nconst white = mat('Warm White', 0xf4efe4, 0.52, 0);\nconst skin = mat('Skin', 0xe6a56d, 0.72, 0);\nconst red = mat('Racer Cap Red', 0xd93232, 0.42, 0);\nconst blue = mat('Racer Suit Blue', 0x245ab5, 0.48, 0);\nconst green = mat('Signature Sage Green', 0x587958, 0.48, 0);\nconst brown = mat('Boot And Mustache Brown', 0x593628, 0.78, 0);\nconst black = mat('Eye And Trim Black', 0x17191a, 0.48, 0);\n\nconst makeMesh = (parent, name, geometry, material, pos, rot, scale) => {\n  const m = new THREE.Mesh(geometry, material);\n  m.name = name;\n  if (pos) m.position.set(pos[0], pos[1], pos[2]);\n  if (rot) m.rotation.set(rot[0], rot[1], rot[2]);\n  if (scale) m.scale.set(scale[0], scale[1], scale[2]);\n  parent.add(m);\n  return m;\n};\n\nconst kart = new THREE.Group();\nkart.name = 'Kart';\ngroup.add(kart);\n\nconst bodyStations = [\n  { t: 0, rx: 0.045, ry: 0.08, cy: 0.00 },\n  { t: 0.08, rx: 0.20, ry: 0.13, cy: 0.00 },\n  { t: 0.2, rx: 0.34, ry: 0.17, cy: 0.00 },\n  { t: 0.42, rx: 0.39, ry: 0.19, cy: 0.00 },\n  { t: 0.68, rx: 0.40, ry: 0.19, cy: 0.00 },\n  { t: 0.88, rx: 0.34, ry: 0.17, cy: 0.00 },\n  { t: 1, rx: 0.24, ry: 0.14, cy: 0.00 }\n];\n\nconst bodyGeometry = (() => {\n  const longitudinalSegments = 48;\n  const sectionSegments = 24;\n  const positions = [];\n  const indices = [];\n  const length = 1.35;\n\n  for (let i = 0; i <= longitudinalSegments; i++) {\n    const t = i / longitudinalSegments;\n    let k = 0;\n    while (k < bodyStations.length - 2 && t > bodyStations[k + 1].t) k++;\n    const a = bodyStations[k];\n    const b = bodyStations[k + 1];\n    const f = (t - a.t) / (b.t - a.t);\n    const rx = a.rx + (b.rx - a.rx) * f;\n    const ry = a.ry + (b.ry - a.ry) * f;\n    const cy = a.cy + (b.cy - a.cy) * f;\n    const z = length * (0.5 - t);\n\n    for (let j = 0; j < sectionSegments; j++) {\n      const angle = Math.PI * 2 * j / sectionSegments;\n      const cx = Math.cos(angle);\n      const sy = Math.sin(angle);\n      const power = 0.58;\n      positions.push(\n        rx * Math.sign(cx) * Math.pow(Math.abs(cx), power),\n        cy + ry * Math.sign(sy) * Math.pow(Math.abs(sy), power),\n        z\n      );\n    }\n  }\n\n  for (let i = 0; i < longitudinalSegments; i++) {\n    for (let j = 0; j < sectionSegments; j++) {\n      const nextJ = (j + 1) % sectionSegments;\n      const a = i * sectionSegments + j;\n      const b = (i + 1) * sectionSegments + j;\n      const c = (i + 1) * sectionSegments + nextJ;\n      const d = i * sectionSegments + nextJ;\n      indices.push(a, b, d, b, c, d);\n    }\n  }\n\n  const bowCenter = positions.length / 3;\n  positions.push(0, 0, length * 0.5);\n  const sternCenter = positions.length / 3;\n  positions.push(0, 0, -length * 0.5);\n\n  for (let j = 0; j < sectionSegments; j++) {\n    const nextJ = (j + 1) % sectionSegments;\n    indices.push(bowCenter, nextJ, j);\n    const sternStart = longitudinalSegments * sectionSegments;\n    indices.push(sternCenter, sternStart + j, sternStart + nextJ);\n  }\n\n  const geometry = new THREE.BufferGeometry();\n  geometry.setAttribute('position', new THREE.Float32BufferAttribute(positions, 3));\n  geometry.setIndex(indices);\n  geometry.computeVertexNormals();\n  return geometry;\n})();\nmakeMesh(kart, 'Kart.Body.TealShell', bodyGeometry, teal, [0, 0.39, 0], null, null);\n\nmakeMesh(kart, 'Kart.Lower.Chassis', new THREE.BoxGeometry(0.72, 0.12, 0.98), darkMetal, [0, 0.235, -0.04], null, null);\nmakeMesh(kart, 'Kart.Seat.Cushion', new THREE.BoxGeometry(0.42, 0.12, 0.34), seatMat, [0, 0.57, -0.22], null, null);\nmakeMesh(kart, 'Kart.Seat.Back', new THREE.BoxGeometry(0.42, 0.32, 0.09), seatMat, [0, 0.72, -0.42], [-0.12, 0, 0], null);\n\nconst wheelAssembly = new THREE.Group();\nwheelAssembly.name = 'Kart.WheelAssemblies';\nkart.add(wheelAssembly);\nfor (const side of [-1, 1]) {\n  for (const z of [0.43, -0.44]) {\n    const sideName = side < 0 ? 'Left' : 'Right';\n    const axleName = z > 0 ? 'Front' : 'Rear';\n    const wheelPos = [side * 0.49, 0.245, z];\n    makeMesh(wheelAssembly, `Kart.Wheel.${axleName}.${sideName}.Tire`,\n      new THREE.CylinderGeometry(0.225, 0.225, 0.15, 20, 1), rubber,\n      wheelPos, [0, 0, Math.PI / 2], null);\n    makeMesh(wheelAssembly, `Kart.Wheel.${axleName}.${sideName}.Rim`,\n      new THREE.CylinderGeometry(0.145, 0.145, 0.158, 16, 1), copper,\n      wheelPos, [0, 0, Math.PI / 2], null);\n    makeMesh(wheelAssembly, `Kart.Wheel.${axleName}.${sideName}.Hub`,\n      new THREE.CylinderGeometry(0.064, 0.064, 0.17, 12, 1), gold,\n      wheelPos, [0, 0, Math.PI / 2], null);\n  }\n}\n\nmakeMesh(kart, 'Kart.Front.Bumper', new THREE.BoxGeometry(0.7, 0.075, 0.11), copper, [0, 0.25, 0.69], null, null);\nmakeMesh(kart, 'Kart.Rear.Bumper', new THREE.BoxGeometry(0.7, 0.075, 0.11), copper, [0, 0.25, -0.66], null, null);\nmakeMesh(kart, 'Kart.Steering.Column', new THREE.CylinderGeometry(0.025, 0.032, 0.28, 10), darkMetal, [0, 0.62, 0.26], [0.42, 0, 0], null);\nmakeMesh(kart, 'Kart.Steering.Wheel', new THREE.TorusGeometry(0.13, 0.018, 8, 20), rubber, [0, 0.75, 0.31], [Math.PI / 2, 0, 0], null);\nmakeMesh(kart, 'Kart.Steering.CenterBadge', new THREE.SphereGeometry(0.045, 12, 8), pink, [0, 0.75, 0.31], null, [1, 0.7, 0.7]);\n\nfor (const side of [-1, 1]) {\n  const s = side < 0 ? 'Left' : 'Right';\n  makeMesh(kart, `Kart.SidePanel.${s}`, new THREE.BoxGeometry(0.018, 0.08, 0.48), copper, [side * 0.397, 0.4, -0.02], [0, 0.12, 0], null);\n  makeMesh(kart, `Kart.Side.Inlay.${s}`, new THREE.BoxGeometry(0.022, 0.025, 0.34), pink, [side * 0.41, 0.43, -0.02], [0, 0.12, 0], null);\n}\n\nfor (const z of [0.08, 0.28, -0.16, -0.39]) {\n  for (const side of [-1, 1]) {\n    makeMesh(kart, `Kart.Body.Rivet.${z > 0 ? 'Forward' : 'Rear'}${side < 0 ? 'L' : 'R'}`,\n      new THREE.SphereGeometry(0.018, 8, 6), gold, [side * 0.382, 0.405, z], null, null);\n  }\n}\n\nfor (const side of [-1, 1]) {\n  makeMesh(kart, `Kart.Headlamp.${side < 0 ? 'Left' : 'Right'}`,\n    new THREE.SphereGeometry(0.065, 12, 8), white, [side * 0.245, 0.405, 0.592], null, [1, 0.65, 0.52]);\n}\n\nmakeMesh(kart, 'Kart.Hood.Emblem', new THREE.SphereGeometry(0.055, 12, 8), green, [0, 0.563, 0.14], null, [1.2, 0.35, 0.85]);\n\nconst spiralPoints = [];\nconst turns = 2.15;\nfor (let i = 0; i <= 72; i++) {\n  const u = i / 72;\n  const a = u * turns * Math.PI * 2;\n  const r = 0.105 + 0.018 * u;\n  spiralPoints.push(new THREE.Vector3(r * Math.cos(a), 0.49 + 0.22 * u, 0.22 + r * Math.sin(a)));\n}\nconst spiralCurve = new THREE.CatmullRomCurve3(spiralPoints);\nconst spiralGeometry = new THREE.TubeGeometry(spiralCurve, 100, 0.014, 8, false);\nmakeMesh(kart, 'Kart.Hood.CopperSpiral', spiralGeometry, copper, null, null, null);\n\nconst rider = new THREE.Group();\nrider.name = 'Racer';\nrider.position.set(1.48, 0, 0);\ngroup.add(rider);\n\nconst addCapsuleBetween = (parent, name, a, b, radius, material) => {\n  const start = new THREE.Vector3(a[0], a[1], a[2]);\n  const end = new THREE.Vector3(b[0], b[1], b[2]);\n  const delta = new THREE.Vector3().subVectors(end, start);\n  const length = Math.max(0.04, delta.length() - radius * 2);\n  const mesh = new THREE.Mesh(new THREE.CapsuleGeometry(radius, length, 4, 10), material);\n  mesh.name = name;\n  mesh.position.copy(start.add(end).multiplyScalar(0.5));\n  mesh.quaternion.setFromUnitVectors(new THREE.Vector3(0, 1, 0), delta.normalize());\n  parent.add(mesh);\n  return mesh;\n};\n\nmakeMesh(rider, 'Racer.Torso', new THREE.CapsuleGeometry(0.19, 0.35, 5, 12), blue, [0, 0.76, 0], [-0.12, 0, 0], [1, 1, 0.72]);\nmakeMesh(rider, 'Racer.Suit.ChestPanel', new THREE.BoxGeometry(0.22, 0.17, 0.035), teal, [0, 0.82, 0.134], null, null);\nmakeMesh(rider, 'Racer.Signature.Emblem', new THREE.SphereGeometry(0.045, 10, 8), green, [0, 0.83, 0.16], null, null);\n\naddCapsuleBetween(rider, 'Racer.Leg.Left', [-0.105, 0.57, 0], [-0.13, 0.28, 0.06], 0.095, blue);\naddCapsuleBetween(rider, 'Racer.Leg.Right', [0.105, 0.57, 0], [0.13, 0.28, 0.06], 0.095, blue);\nmakeMesh(rider, 'Racer.Boot.Left', new THREE.BoxGeometry(0.16, 0.12, 0.25), brown, [-0.13, 0.11, 0.11], null, null);\nmakeMesh(rider, 'Racer.Boot.Right', new THREE.BoxGeometry(0.16, 0.12, 0.25), brown, [0.13, 0.11, 0.11], null, null);\n\naddCapsuleBetween(rider, 'Racer.Arm.Left.Upper', [-0.17, 0.91, 0], [-0.29, 0.79, 0.19], 0.071, blue);\naddCapsuleBetween(rider, 'Racer.Arm.Left.Forearm', [-0.29, 0.79, 0.19], [-0.22, 0.83, 0.34], 0.062, blue);\naddCapsuleBetween(rider, 'Racer.Arm.Right.Upper', [0.17, 0.91, 0], [0.29, 0.79, 0.19], 0.071, blue);\naddCapsuleBetween(rider, 'Racer.Arm.Right.Forearm', [0.29, 0.79, 0.19], [0.22, 0.83, 0.34], 0.062, blue);\nmakeMesh(rider, 'Racer.Glove.Left', new THREE.SphereGeometry(0.085, 12, 10), white, [-0.22, 0.83, 0.35], null, [1, 0.9, 0.9]);\nmakeMesh(rider, 'Racer.Glove.Right', new THREE.SphereGeometry(0.085, 12, 10), white, [0.22, 0.83, 0.35], null, [1, 0.9, 0.9]);\n\nmakeMesh(rider, 'Racer.Head', new THREE.SphereGeometry(0.22, 16, 12), skin, [0, 1.16, 0.015], null, [0.92, 1, 0.88]);\nmakeMesh(rider, 'Racer.Ear.Left', new THREE.SphereGeometry(0.055, 10, 8), skin, [-0.205, 1.15, 0.01], null, null);\nmakeMesh(rider, 'Racer.Ear.Right', new THREE.SphereGeometry(0.055, 10, 8), skin, [0.205, 1.15, 0.01], null, null);\nmakeMesh(rider, 'Racer.Nose', new THREE.SphereGeometry(0.075, 12, 10), skin, [0, 1.12, 0.207], null, [1, 0.8, 0.8]);\nfor (const side of [-1, 1]) {\n  makeMesh(rider, `Racer.Eye.${side < 0 ? 'Left' : 'Right'}`, new THREE.SphereGeometry(0.034, 10, 8), black, [side * 0.075, 1.205, 0.189], null, [0.75, 1, 0.6]);\n  makeMesh(rider, `Racer.Mustache.${side < 0 ? 'Left' : 'Right'}`, new THREE.SphereGeometry(0.085, 10, 8), brown, [side * 0.074, 1.055, 0.193], [0, 0, side * 0.14], [1.15, 0.55, 0.62]);\n}\n\nmakeMesh(rider, 'Racer.Cap.Crown', new THREE.SphereGeometry(0.23, 16, 10, 0, Math.PI * 2, 0, Math.PI / 2), red, [0, 1.32, 0.005], null, [1.08, 0.62, 0.95]);\nmakeMesh(rider, 'Racer.Cap.Bill', new THREE.SphereGeometry(0.18, 14, 8), red, [0, 1.292, 0.15], null, [1.15, 0.16, 0.92]);\nmakeMesh(rider, 'Racer.Cap.Badge', new THREE.SphereGeometry(0.052, 10, 8), white, [0, 1.34, 0.206], null, [0.8, 1, 0.35]);\n\nreturn group;","tone":{"skyboxTop":"#8d98a6","skyboxBottom":"#c3cad2","lighting":{"hemi":{"sky":"#d5dbe2","ground":"#6f7378","intensity":1.1},"sun":{"color":"#e8edf2","intensity":0.7,"position":[3,12,3]}},"fog":{"color":"#bcc4cc","near":12,"far":60},"shadows":true},"animations":[],"usage":{"requests":2,"generations":0,"promptTokens":80151,"completionTokens":33779,"totalTokens":113930,"cost":0.02286636165,"activeMs":0,"ratingSum":0,"ratingCount":0,"judgeCost":0},"startedAt":1792908148313,"completedAt":1792908355515,"durationMs":207202,"report":"Parts: 61 meshes, 11700 triangles. Size: 2.43 x 1.44 x 1.46 (X x Y x Z). Lowest point Y=0.000.\nGeometry defects found by the validator:\n- Kart.Body.TealShell [primitive]: 48 edges with inconsistent triangle winding\n- Racer.Torso [primitive]: 24 degenerate (zero-area) triangles\n- Racer.Leg.Left [primitive]: 20 degenerate (zero-area) triangles\n- Racer.Leg.Right [primitive]: 20 degenerate (zero-area) triangles\n- Racer.Arm.Left.Upper [primitive]: 20 degenerate (zero-area) triangles\n- Racer.Arm.Left.Forearm [primitive]: 20 degenerate (zero-area) triangles","sliceCount":1,"sliceIds":["gen-agent-11-mvnf7x3t-ln0r9-s1"],"judging":{"status":"done","judges":[{"model":"deepseek/deepseek-v4.1-flash-1017","label":"DeepSeek v4.1 Flash","error":"The judge did not return valid JSON scores.","durationMs":25362},{"scores":{"silhouette":6,"proportion":6,"detail":5,"materials":5,"assembly":5,"readability":6},"average":5.5,"notes":"The teal kart and Mario-inspired racer are immediately recognizable, with a distinctive rounded shell, copper accents, and a clear character theme. The rider reads as standing rather than driving, the boots appear disconnected from the legs, and the dark materials make several kart details hard to see.","model":"openai/gpt-6-luna","label":"GPT-6 Luna","usage":{"prompt_tokens":6356,"completion_tokens":830,"total_tokens":7186,"cost":0.00119733075,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":6353,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.001209425,"upstream_inference_prompt_cost":0.000794425,"upstream_inference_completions_cost":0.000415},"completion_tokens_details":{"reasoning_tokens":738,"image_tokens":0,"audio_tokens":0}},"durationMs":11129},{"scores":{"silhouette":6,"proportion":5,"detail":5,"materials":5,"assembly":4,"readability":6},"average":5.166666666666667,"notes":"The Mario-style racer is clearly recognizable with cap, mustache and blue overalls, and the kart reads as a kart with a teal shell and wheels, but the kart body is a generic dark blob rather than a character-themed shape. Assembly has issues: the racer's torso and legs float apart from the seat, the torso capsule is partly buried, and the body winding and degenerate triangles from the validator show construction flaws; the dark lighting also hides much of the requested detail.","model":"anthropic/claude-haiku-5.5","label":"Claude Haiku 5.5","usage":{"prompt_tokens":8703,"completion_tokens":208,"total_tokens":8911,"cost":0.000964557,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0009743,"upstream_inference_prompt_cost":0.0008703,"upstream_inference_completions_cost":0.000104},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}},"durationMs":2746}],"score":5.333333333333334,"cost":0.00216188775,"tokens":16097,"at":1792908381176},"thumbUrl":"https://futurelabs.now/apps/images/u2/gen-agent-11-mvnf7x3t-ln0r9.png"},"slices":[{"id":"gen-agent-11-mvnf7x3t-ln0r9-s1","index":1,"summary":"Single shot","final":false,"code":"SCENE.setAtmosphere('overcast');\nSCENE.setShadows(true);\n\nconst group = new THREE.Group();\ngroup.name = 'Teal Copper Kart And Racer';\n\nconst mat = (name, color, roughness, metalness) => {\n  const m = new THREE.MeshStandardMaterial({ color, roughness, metalness });\n  m.name = name;\n  return m;\n};\n\nconst teal = mat('Anodized Deep Teal', 0x30a1b3, 0.29, 1);\nconst copper = mat('Brushed Copper', 0xb87345, 0.31, 1);\nconst pink = mat('Racing Pink Accent', 0xe1167b, 0.34, 0);\nconst rubber = mat('Tire Rubber', 0x20262a, 0.92, 0);\nconst darkMetal = mat('Dark Chassis Metal', 0x26343a, 0.34, 1);\nconst seatMat = mat('Seat Leather', 0x242b31, 0.88, 0);\nconst gold = mat('Warm Alloy', 0xd9a45f, 0.3, 1);\nconst white = mat('Warm White', 0xf4efe4, 0.52, 0);\nconst skin = mat('Skin', 0xe6a56d, 0.72, 0);\nconst red = mat('Racer Cap Red', 0xd93232, 0.42, 0);\nconst blue = mat('Racer Suit Blue', 0x245ab5, 0.48, 0);\nconst green = mat('Signature Sage Green', 0x587958, 0.48, 0);\nconst brown = mat('Boot And Mustache Brown', 0x593628, 0.78, 0);\nconst black = mat('Eye And Trim Black', 0x17191a, 0.48, 0);\n\nconst makeMesh = (parent, name, geometry, material, pos, rot, scale) => {\n  const m = new THREE.Mesh(geometry, material);\n  m.name = name;\n  if (pos) m.position.set(pos[0], pos[1], pos[2]);\n  if (rot) m.rotation.set(rot[0], rot[1], rot[2]);\n  if (scale) m.scale.set(scale[0], scale[1], scale[2]);\n  parent.add(m);\n  return m;\n};\n\nconst kart = new THREE.Group();\nkart.name = 'Kart';\ngroup.add(kart);\n\nconst bodyStations = [\n  { t: 0, rx: 0.045, ry: 0.08, cy: 0.00 },\n  { t: 0.08, rx: 0.20, ry: 0.13, cy: 0.00 },\n  { t: 0.2, rx: 0.34, ry: 0.17, cy: 0.00 },\n  { t: 0.42, rx: 0.39, ry: 0.19, cy: 0.00 },\n  { t: 0.68, rx: 0.40, ry: 0.19, cy: 0.00 },\n  { t: 0.88, rx: 0.34, ry: 0.17, cy: 0.00 },\n  { t: 1, rx: 0.24, ry: 0.14, cy: 0.00 }\n];\n\nconst bodyGeometry = (() => {\n  const longitudinalSegments = 48;\n  const sectionSegments = 24;\n  const positions = [];\n  const indices = [];\n  const length = 1.35;\n\n  for (let i = 0; i <= longitudinalSegments; i++) {\n    const t = i / longitudinalSegments;\n    let k = 0;\n    while (k < bodyStations.length - 2 && t > bodyStations[k + 1].t) k++;\n    const a = bodyStations[k];\n    const b = bodyStations[k + 1];\n    const f = (t - a.t) / (b.t - a.t);\n    const rx = a.rx + (b.rx - a.rx) * f;\n    const ry = a.ry + (b.ry - a.ry) * f;\n    const cy = a.cy + (b.cy - a.cy) * f;\n    const z = length * (0.5 - t);\n\n    for (let j = 0; j < sectionSegments; j++) {\n      const angle = Math.PI * 2 * j / sectionSegments;\n      const cx = Math.cos(angle);\n      const sy = Math.sin(angle);\n      const power = 0.58;\n      positions.push(\n        rx * Math.sign(cx) * Math.pow(Math.abs(cx), power),\n        cy + ry * Math.sign(sy) * Math.pow(Math.abs(sy), power),\n        z\n      );\n    }\n  }\n\n  for (let i = 0; i < longitudinalSegments; i++) {\n    for (let j = 0; j < sectionSegments; j++) {\n      const nextJ = (j + 1) % sectionSegments;\n      const a = i * sectionSegments + j;\n      const b = (i + 1) * sectionSegments + j;\n      const c = (i + 1) * sectionSegments + nextJ;\n      const d = i * sectionSegments + nextJ;\n      indices.push(a, b, d, b, c, d);\n    }\n  }\n\n  const bowCenter = positions.length / 3;\n  positions.push(0, 0, length * 0.5);\n  const sternCenter = positions.length / 3;\n  positions.push(0, 0, -length * 0.5);\n\n  for (let j = 0; j < sectionSegments; j++) {\n    const nextJ = (j + 1) % sectionSegments;\n    indices.push(bowCenter, nextJ, j);\n    const sternStart = longitudinalSegments * sectionSegments;\n    indices.push(sternCenter, sternStart + j, sternStart + nextJ);\n  }\n\n  const geometry = new THREE.BufferGeometry();\n  geometry.setAttribute('position', new THREE.Float32BufferAttribute(positions, 3));\n  geometry.setIndex(indices);\n  geometry.computeVertexNormals();\n  return geometry;\n})();\nmakeMesh(kart, 'Kart.Body.TealShell', bodyGeometry, teal, [0, 0.39, 0], null, null);\n\nmakeMesh(kart, 'Kart.Lower.Chassis', new THREE.BoxGeometry(0.72, 0.12, 0.98), darkMetal, [0, 0.235, -0.04], null, null);\nmakeMesh(kart, 'Kart.Seat.Cushion', new THREE.BoxGeometry(0.42, 0.12, 0.34), seatMat, [0, 0.57, -0.22], null, null);\nmakeMesh(kart, 'Kart.Seat.Back', new THREE.BoxGeometry(0.42, 0.32, 0.09), seatMat, [0, 0.72, -0.42], [-0.12, 0, 0], null);\n\nconst wheelAssembly = new THREE.Group();\nwheelAssembly.name = 'Kart.WheelAssemblies';\nkart.add(wheelAssembly);\nfor (const side of [-1, 1]) {\n  for (const z of [0.43, -0.44]) {\n    const sideName = side < 0 ? 'Left' : 'Right';\n    const axleName = z > 0 ? 'Front' : 'Rear';\n    const wheelPos = [side * 0.49, 0.245, z];\n    makeMesh(wheelAssembly, `Kart.Wheel.${axleName}.${sideName}.Tire`,\n      new THREE.CylinderGeometry(0.225, 0.225, 0.15, 20, 1), rubber,\n      wheelPos, [0, 0, Math.PI / 2], null);\n    makeMesh(wheelAssembly, `Kart.Wheel.${axleName}.${sideName}.Rim`,\n      new THREE.CylinderGeometry(0.145, 0.145, 0.158, 16, 1), copper,\n      wheelPos, [0, 0, Math.PI / 2], null);\n    makeMesh(wheelAssembly, `Kart.Wheel.${axleName}.${sideName}.Hub`,\n      new THREE.CylinderGeometry(0.064, 0.064, 0.17, 12, 1), gold,\n      wheelPos, [0, 0, Math.PI / 2], null);\n  }\n}\n\nmakeMesh(kart, 'Kart.Front.Bumper', new THREE.BoxGeometry(0.7, 0.075, 0.11), copper, [0, 0.25, 0.69], null, null);\nmakeMesh(kart, 'Kart.Rear.Bumper', new THREE.BoxGeometry(0.7, 0.075, 0.11), copper, [0, 0.25, -0.66], null, null);\nmakeMesh(kart, 'Kart.Steering.Column', new THREE.CylinderGeometry(0.025, 0.032, 0.28, 10), darkMetal, [0, 0.62, 0.26], [0.42, 0, 0], null);\nmakeMesh(kart, 'Kart.Steering.Wheel', new THREE.TorusGeometry(0.13, 0.018, 8, 20), rubber, [0, 0.75, 0.31], [Math.PI / 2, 0, 0], null);\nmakeMesh(kart, 'Kart.Steering.CenterBadge', new THREE.SphereGeometry(0.045, 12, 8), pink, [0, 0.75, 0.31], null, [1, 0.7, 0.7]);\n\nfor (const side of [-1, 1]) {\n  const s = side < 0 ? 'Left' : 'Right';\n  makeMesh(kart, `Kart.SidePanel.${s}`, new THREE.BoxGeometry(0.018, 0.08, 0.48), copper, [side * 0.397, 0.4, -0.02], [0, 0.12, 0], null);\n  makeMesh(kart, `Kart.Side.Inlay.${s}`, new THREE.BoxGeometry(0.022, 0.025, 0.34), pink, [side * 0.41, 0.43, -0.02], [0, 0.12, 0], null);\n}\n\nfor (const z of [0.08, 0.28, -0.16, -0.39]) {\n  for (const side of [-1, 1]) {\n    makeMesh(kart, `Kart.Body.Rivet.${z > 0 ? 'Forward' : 'Rear'}${side < 0 ? 'L' : 'R'}`,\n      new THREE.SphereGeometry(0.018, 8, 6), gold, [side * 0.382, 0.405, z], null, null);\n  }\n}\n\nfor (const side of [-1, 1]) {\n  makeMesh(kart, `Kart.Headlamp.${side < 0 ? 'Left' : 'Right'}`,\n    new THREE.SphereGeometry(0.065, 12, 8), white, [side * 0.245, 0.405, 0.592], null, [1, 0.65, 0.52]);\n}\n\nmakeMesh(kart, 'Kart.Hood.Emblem', new THREE.SphereGeometry(0.055, 12, 8), green, [0, 0.563, 0.14], null, [1.2, 0.35, 0.85]);\n\nconst spiralPoints = [];\nconst turns = 2.15;\nfor (let i = 0; i <= 72; i++) {\n  const u = i / 72;\n  const a = u * turns * Math.PI * 2;\n  const r = 0.105 + 0.018 * u;\n  spiralPoints.push(new THREE.Vector3(r * Math.cos(a), 0.49 + 0.22 * u, 0.22 + r * Math.sin(a)));\n}\nconst spiralCurve = new THREE.CatmullRomCurve3(spiralPoints);\nconst spiralGeometry = new THREE.TubeGeometry(spiralCurve, 100, 0.014, 8, false);\nmakeMesh(kart, 'Kart.Hood.CopperSpiral', spiralGeometry, copper, null, null, null);\n\nconst rider = new THREE.Group();\nrider.name = 'Racer';\nrider.position.set(1.48, 0, 0);\ngroup.add(rider);\n\nconst addCapsuleBetween = (parent, name, a, b, radius, material) => {\n  const start = new THREE.Vector3(a[0], a[1], a[2]);\n  const end = new THREE.Vector3(b[0], b[1], b[2]);\n  const delta = new THREE.Vector3().subVectors(end, start);\n  const length = Math.max(0.04, delta.length() - radius * 2);\n  const mesh = new THREE.Mesh(new THREE.CapsuleGeometry(radius, length, 4, 10), material);\n  mesh.name = name;\n  mesh.position.copy(start.add(end).multiplyScalar(0.5));\n  mesh.quaternion.setFromUnitVectors(new THREE.Vector3(0, 1, 0), delta.normalize());\n  parent.add(mesh);\n  return mesh;\n};\n\nmakeMesh(rider, 'Racer.Torso', new THREE.CapsuleGeometry(0.19, 0.35, 5, 12), blue, [0, 0.76, 0], [-0.12, 0, 0], [1, 1, 0.72]);\nmakeMesh(rider, 'Racer.Suit.ChestPanel', new THREE.BoxGeometry(0.22, 0.17, 0.035), teal, [0, 0.82, 0.134], null, null);\nmakeMesh(rider, 'Racer.Signature.Emblem', new THREE.SphereGeometry(0.045, 10, 8), green, [0, 0.83, 0.16], null, null);\n\naddCapsuleBetween(rider, 'Racer.Leg.Left', [-0.105, 0.57, 0], [-0.13, 0.28, 0.06], 0.095, blue);\naddCapsuleBetween(rider, 'Racer.Leg.Right', [0.105, 0.57, 0], [0.13, 0.28, 0.06], 0.095, blue);\nmakeMesh(rider, 'Racer.Boot.Left', new THREE.BoxGeometry(0.16, 0.12, 0.25), brown, [-0.13, 0.11, 0.11], null, null);\nmakeMesh(rider, 'Racer.Boot.Right', new THREE.BoxGeometry(0.16, 0.12, 0.25), brown, [0.13, 0.11, 0.11], null, null);\n\naddCapsuleBetween(rider, 'Racer.Arm.Left.Upper', [-0.17, 0.91, 0], [-0.29, 0.79, 0.19], 0.071, blue);\naddCapsuleBetween(rider, 'Racer.Arm.Left.Forearm', [-0.29, 0.79, 0.19], [-0.22, 0.83, 0.34], 0.062, blue);\naddCapsuleBetween(rider, 'Racer.Arm.Right.Upper', [0.17, 0.91, 0], [0.29, 0.79, 0.19], 0.071, blue);\naddCapsuleBetween(rider, 'Racer.Arm.Right.Forearm', [0.29, 0.79, 0.19], [0.22, 0.83, 0.34], 0.062, blue);\nmakeMesh(rider, 'Racer.Glove.Left', new THREE.SphereGeometry(0.085, 12, 10), white, [-0.22, 0.83, 0.35], null, [1, 0.9, 0.9]);\nmakeMesh(rider, 'Racer.Glove.Right', new THREE.SphereGeometry(0.085, 12, 10), white, [0.22, 0.83, 0.35], null, [1, 0.9, 0.9]);\n\nmakeMesh(rider, 'Racer.Head', new THREE.SphereGeometry(0.22, 16, 12), skin, [0, 1.16, 0.015], null, [0.92, 1, 0.88]);\nmakeMesh(rider, 'Racer.Ear.Left', new THREE.SphereGeometry(0.055, 10, 8), skin, [-0.205, 1.15, 0.01], null, null);\nmakeMesh(rider, 'Racer.Ear.Right', new THREE.SphereGeometry(0.055, 10, 8), skin, [0.205, 1.15, 0.01], null, null);\nmakeMesh(rider, 'Racer.Nose', new THREE.SphereGeometry(0.075, 12, 10), skin, [0, 1.12, 0.207], null, [1, 0.8, 0.8]);\nfor (const side of [-1, 1]) {\n  makeMesh(rider, `Racer.Eye.${side < 0 ? 'Left' : 'Right'}`, new THREE.SphereGeometry(0.034, 10, 8), black, [side * 0.075, 1.205, 0.189], null, [0.75, 1, 0.6]);\n  makeMesh(rider, `Racer.Mustache.${side < 0 ? 'Left' : 'Right'}`, new THREE.SphereGeometry(0.085, 10, 8), brown, [side * 0.074, 1.055, 0.193], [0, 0, side * 0.14], [1.15, 0.55, 0.62]);\n}\n\nmakeMesh(rider, 'Racer.Cap.Crown', new THREE.SphereGeometry(0.23, 16, 10, 0, Math.PI * 2, 0, Math.PI / 2), red, [0, 1.32, 0.005], null, [1.08, 0.62, 0.95]);\nmakeMesh(rider, 'Racer.Cap.Bill', new THREE.SphereGeometry(0.18, 14, 8), red, [0, 1.292, 0.15], null, [1.15, 0.16, 0.92]);\nmakeMesh(rider, 'Racer.Cap.Badge', new THREE.SphereGeometry(0.052, 10, 8), white, [0, 1.34, 0.206], null, [0.8, 1, 0.35]);\n\nreturn group;","thumbUrl":"https://futurelabs.now/apps/images/u2/gen-agent-11-mvnf7x3t-ln0r9-s1.png"}],"glbUrl":null}