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

Cidade de uma semente

Digite um número e a cidade se ergue. Mesma semente, mesma cidade. geração procedural · instancing · WASD

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

    Semente

    Cada quadra recebe um número derivado da semente e da sua posição (hash). Esse número alimenta um gerador pseudoaleatório; por isso a mesma semente sempre ergue a mesma cidade.

    r = mulberry32(hash(semente, x, z))
  2. 02

    Bairros

    Um ruído de baixa frequência, somado à distância ao centro, decide se a quadra é centro (torres), residencial, industrial ou parque.

  3. 03

    Infinita

    A cidade é dividida em pedaços de 288 m. Só os 7 × 7 em volta da câmera existem; ao voar, os de trás somem e os da frente nascem.

  4. 04

    Desempenho

    Todos os prédios de um pedaço são uma única malha instanciada; as janelas são desenhadas no shader, sem textura, com bordas suavizadas por derivadas de tela.

  5. 05

    Hora dourada e neblina

    No fim da tarde o sol desce até perto do horizonte: a face voltada para ele esquenta, a oposta esfria, o vidro reflete o céu laranja. Uma camada de neblina baixa engrossa com a distância, e caixas d’água, antenas e letreiros saem do hash de cada prédio. À noite, os carros deixam rastros de luz proporcionais à velocidade.

    névoa = max(dist, e^(−y/22) · dist)