L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Design et création · SKILL.md

webgl-raymarched-hero

webgl-raymarched-hero

A real-time raymarched 3D hero — soft-shadowed morphing metaballs with a fresnel rim light, sphere-traced per pixel in a fragment shader with a slow camera orbit. No meshes, no textures. Rendered as a single self-contained `index.html`. Use when the brief asks for a "raymarch", "signed distance field", "SDF", "3D hero", "metaballs", "blobs", or a shader-bas…

Independent GitHub snapshot · Automated classification · Original documentation governs

Nnexu-io / open-designApache-2.0

Documentation de la Skill

GitHub

name: webgl-raymarched-hero description: | A real-time raymarched 3D hero — soft-shadowed morphing metaballs with a fresnel rim light, sphere-traced per pixel in a fragment shader with a slow camera orbit. No meshes, no textures. Rendered as a single self-contained index.html. Use when the brief asks for a "raymarch", "signed distance field", "SDF", "3D hero", "metaballs", "blobs", or a shader-based 3D scene. OpenDesign serves this in powered-preview mode so the GPU stack actually runs. triggers:

  • "raymarch"
  • "raymarching"
  • "sdf"
  • "signed distance field"
  • "metaballs"
  • "3d hero"
  • "blobs"
  • "光线步进"
  • "有向距离场" od: mode: prototype platform: web scenario: design preview: type: html entry: index.html reload: debounce-100 design_system: requires: false sections: [color, typography] craft: requires: [animation-discipline]

Raymarched Hero Skill

Produce a single self-contained index.html that renders a real-time 3D scene entirely in a fragment shader via sphere tracing, full-screen, with a clean typographic overlay on top.

Why this is a powered artifact

OpenDesign detects getContext('webgl2') and renders this file in powered preview — a cross-origin-isolated iframe with allow-same-origin. The full GPU pipeline is available; you do not need to work around the opaque sandbox.

Resource map

webgl-raymarched-hero/
├── SKILL.md      ← you're reading this
└── example.html  ← a working SDF metaball raymarcher (READ FIRST)

Workflow

Step 0 — Read the reference

Read example.html end to end. Note the shape: one fullscreen triangle; a map(p) signed-distance function that smooth-unions (smin) several moving spheres; normals by finite differences; a softShadow march; and a camera built from ro/ta with a slow orbit. Shading = diffuse × soft shadow + fresnel rim + a tight specular.

Step 1 — Choose the SDF

Keep the marcher cheap so it holds 60fps:

  • Metaballs (default): a few spheres blended with smin — organic, always readable.
  • Rounded primitives: box/torus/capsule SDFs with domain repetition for a structured hero.
  • Displaced surface: a sphere plus a low-amplitude noise displacement for a molten look.

Step 2 — Build index.html

  • One file, zero external requests. Fullscreen triangle + fragment raymarch.
  • Bound the march: cap iterations (~90), early-out on hit (d < 0.001) and on far distance; clamp DPR to ~1.5 — raymarching is per-pixel heavy.
  • Light it: diffuse, a soft/penumbra shadow, a fresnel rim (pow(1 - dot(n,-rd), 3)), and one specular lobe. Gentle gamma at the end.
  • Compile shaders with error logging so a typo fails loudly, not silently black.

Step 3 — Overlay + brand

  • Map the accent colors to the active DESIGN.md when one is present; otherwise a restrained dark palette with one vivid accent (the reference tints the surface toward lime #63fe13 and rims it in teal).
  • Headline ≤ 13ch plus one supporting line. Keep the 3D form as the hero.

Step 4 — Self-review (P0)

  • Renders continuously at ~60fps; the FPS badge updates.
  • Surface has real depth cues: shadow, rim, and a moving specular.
  • No banding artifacts at the silhouette; normals are stable.
  • Resizes crisply on window resize (no stretching / blur).
  • Degrades to a message (not a blank page) if webgl2 is unavailable.
Skills enregistrées