Pular para o conteúdo
← SeleçãoLAB·09EN
LAB · 09 / 09

Água infinita

Um barco a vela atravessa água cristalina; o vento muda as ondas e o sol acende o brilho. ondas de Gerstner · cáusticas · bloom

Como funciona

Modo Visual: iluminação por HDRI, oclusão de ambiente, bloom, profundidade de campo e qualidade que se ajusta ao seu aparelho. Modo Leve: sem pós-processamento, para celular, notebook fraco e para estudar a técnica.

  1. 01

    Ondas de Gerstner

    Quatro ondas somadas movem cada ponto da superfície em círculos, o que afina as cristas como no mar de verdade. A mesma soma roda na placa de vídeo e em JavaScript, então o barco flutua exatamente na água desenhada.

    y = Σ A·sin(k·(d·p) − ω·t), ω = √(g·k)
  2. 02

    Cor pela profundidade

    O fundo é uma função conhecida (ilha + dunas). A coluna d’água em cada pixel mistura areia, turquesa e azul profundo, e as cáusticas aparecem só no raso.

  3. 03

    Brilho do sol

    Ondinhas pequenas inclinam a normal; quando o reflexo aponta para o sol, o pixel passa do branco e o bloom transforma isso em faíscas.

  4. 04

    Espuma nas cristas

    A espuma aparece onde a superfície de Gerstner se espreme (o jacobiano chega perto de dobrar), em faixas finas cortadas por ruído esticado na direção da onda, e cresce com o vento.

    espuma ∝ Σ Q·k·A·sin θ
  5. 05

    Barco procedural

    Casco, convés, vela latina, remos, cabos e esteira são gerados em código. A escota acompanha o ângulo da vela e a vela enche conforme o vento.

  6. 06

    Bando e vegetação

    As gaivotas são boids: cada uma só olha as vizinhas (separação, alinhamento, coesão) e um ponto que circula a ilha. O capim e os arbustos são instâncias assentadas na mesma função do fundo e balançam no shader com rajadas que atravessam a ilha.