Aller au contenu

Rendu des Traînées Néon

Le système de traînées néon affiche des rubans orientés caméra derrière chaque sphère de la simulation N-corps, avec un profil de brillance inspiré des tubes néon réels. Les traînées émettent de la lumière HDR qui interagit avec le post-traitement bloom pour créer de larges halos colorés.

Profil Visuel

Le fragment shader (shaders/trail.frag) simule un tube néon avec trois couches concentriques de luminosité :

Couche Exposant Poids Rôle Visuel
Cœur u_core_exp (défaut 12.0) 45% Filament étroit blanc-chaud
Intérieur core_exp × 0.25 35% Halo coloré de taille moyenne
Extérieur 0.8 (fixe) 20% Halo diffus pour le bloom

Centre Blanc-Chaud

Les vrais tubes néon apparaissent quasi-blancs à leur point le plus lumineux. Le shader désature le centre en interpolant vers vec3(peak) (blanc préservant la luminance) proportionnellement à l'intensité du cœur :

vec3 neon_color = mix(vColor, hot_white, core * 0.7);
neon_color *= (1.0 + core * 2.0);  // Boost HDR pour le bloom

Interaction HDR / Bloom

La fonction build_ribbon() côté CPU pré-multiplie les couleurs par le paramètre d'intensité HDR. Combiné au boost du shader au niveau du cœur, le centre du ruban atteint des valeurs bien supérieures au seuil du bloom (défaut 1.0), déclenchant un halo bloom large qui forme l'éclat néon caractéristique.

Contrôles en Temps Réel

Les trois paramètres néon sont ajustables en temps réel au clavier :

Touche Action
I Cycle le paramètre actif : Intensité → Cœur → Largeur
Shift+I Augmente le paramètre sélectionné
Ctrl+I Diminue le paramètre sélectionné

Paramètres

Paramètre Défaut Pas Min Description
Intensité 5.0 ±0.5 0.5 Multiplicateur HDR — contrôle la luminosité globale et la réponse bloom
Cœur 12.0 ±2.0 2.0 Exposant de serrage — plus haut = filament fin et brillant, plus bas = lueur diffuse
Largeur 0.24 ±0.02 0.04 Demi-largeur du ruban en unités monde — épaisseur physique de la traînée

Chaque changement affiche une notification à l'écran avec la valeur courante.

Architecture

graph TD
    A[TrailRenderer::neon] -->|intensity, width| B[build_ribbon CPU]
    A -->|core_exp| C[trail.frag GPU]
    B -->|Sommets HDR| D[Upload VBO]
    D --> E[glMultiDrawArrays]
    C -->|Profil néon| E
    E -->|Sortie HDR| F[Post-traitement Bloom]
    F -->|Halo large| G[Composite Final]

Fichiers Clés

Fichier Rôle
shaders/trail.frag Profil néon (3 couches Gaussiennes, cœur blanc-chaud)
shaders/trail.vert Transformation des sommets du ruban orienté caméra
include/trail_renderer.h Struct TrailNeonParams + valeurs par défaut
src/trail_renderer.c Construction de la géométrie ruban + upload des uniforms
src/app_input.c Gestionnaires clavier I / Shift+I / Ctrl+I
src/app_binding.c Enregistrement dans l'aide F2

Guide de Réglage

  • Plus de halo, moins de centre net : Diminuer Cœur (ex. 4.0–6.0)
  • Ligne brillante type laser : Augmenter Cœur (ex. 20.0+)
  • Halo bloom plus fort : Augmenter Intensité (ex. 8.0–10.0)
  • Traînées subtiles : Diminuer Intensité (ex. 1.0–2.0) et Largeur (0.08)
  • Gros tubes néon : Augmenter Largeur (ex. 0.40+)

Voir Aussi