# Dimensão de arestas — treliça aditiva de 1 px, portas emissivas, fumaça em pós

Aprendida em 2026-09-09 replicando a imagem "409thday" (colada no chat, sem
arquivo) na dobra 1 do `HERO V4.html` do NASH. Renderizada e vista: retrato
564×1002 e paisagem 1512×982, com a pose levada aos alvos por jacobiano.

- **Palco**: preto puro; sem tone mapping (tudo é emissivo, o branco sai
  255); cena num alvo HalfFloat com MSAA 4 (as linhas de 1 px dependem do
  MSAA pra não serrilhar), pós num quad com vinheta, fumaça, sRGB e grão.
- **Treliça**: `LineSegments` com `AdditiveBlending` e alfa por vértice em
  LINEAR (0,03 já é cinza 50 em sRGB; 0,25 é quase branco); cruzamentos somam
  sozinhos, como na referência. **Tudo numa lattice quantizada** — passo fixo,
  girada ~20° em torno do eixo da cena; cada segmento vai de nó a nó ao longo
  de um dos três eixos, e a ultrapassagem além do canto é um número inteiro de
  células. É isso que faz ler como grade: arestas de peças diferentes ficam
  colineares e a projeção mostra três famílias com três pontos de fuga. A
  primeira versão misturava caixas alinhadas, arestas de cada peça prolongadas
  com o giro dela e fios em direção sorteada; o dono leu como emaranhado
  ("ângulos tortos, não parece um grid") e tinha razão — o defeito é
  estrutural, não de opacidade. Alfa cai com a distância ao eixo
  (`exp(−(i²+k²)/7,5)`), 10–20% das arestas faltando dá o ar de esboço.
- **Peças alinhadas à grade**: qualquer plano que viva na treliça só assume
  uma das 24 rotações do grupo do cubo (colunas ±x, ±y, ±z sem repetir eixo,
  determinante +1), montadas com `makeBasis` e guardadas como quaternion;
  a animação até a pose final é `slerp`. Guardar o índice da rotação em vez do
  Euler resolvido deixa escrito no código que sair da grade é impossível.
  Custo: a forma projetada passa a vir da perspectiva, então não dá pra casar
  exatamente com as proporções medidas na referência — a coerência do campo
  vale mais que o milímetro de uma peça.
- **Ponto de fuga**: com `lookAt` e `up` = +y, as verticais convergem sempre
  no centro horizontal da tela; a referência as tinha à direita, e um
  `rotateZ(0.2)` depois do `lookAt` resolve. Brilho: dois `Points` aditivos
  (halo 200 px a 0,11, exp 3; núcleo 7 px a 0,8).
- **Portas**: `ShapeGeometry` do polígono em `MeshBasicMaterial` branco,
  `DoubleSide`, também na camada 1. O halo é em espaço de tela: uma passada
  só da camada 1 num alvo de meia resolução em px CSS (independente do DPR),
  borrão gaussiano de 11 taps com passo de 2 texels em x e depois em y
  (raio ≈ 20 px), somado no pós antes da fumaça. A primeira versão colava a
  laje borrada num plano atrás de cada porta; o diff cego mediu halos de 2 a
  40 px conforme a distância e um risco cinza na laje vista de raspão —
  em tela o halo é igual pra toda porta e a laje de raspão não risca.
- **Fumaça**: no pós, duas escalas de fbm (5 oitavas) em `smoothstep(0.26,
  0.82)`, faixa `1 − smoothstep(0, 0.62, v)` ao quadrado, mais densa nos
  cantos (`0.6 + 0.4·smoothstep(0.05, 0.7, |q.x|)`), cor 0,10 linear ×
  fumo; a cena atrás escurece 80% × fumo, o que afunda linhas e portas nela.
- **Pose por medida**: o resolvedor mora na página (`?t=3&p=0&busca`):
  por porta, grade de giros (custo = proporção da caixa, ângulo do eixo longo
  e ESPESSURA — área projetada sobre a aresta longa, senão a busca acha uma
  laje de raspão com caixa certa), Newton de mínima norma no centro (jacobiano
  por diferenças finitas) e tamanho pelo raio da câmera (mover ao longo dele
  não tira o centro do lugar). Cinco rondas; imprime `ESPALHA`/`GIRA` pra colar.
- **Sticky sob canvas**: `overflow-x: hidden` no `body` e no `html` juntos
  fazem do body um contêiner de rolagem, e o sticky morre; só o `html` fica
  com ele. `touch-action: pan-y` na seção, senão o dedo não rola.
- **Halo que não chapa** (2026-09-10, medido pelo painel de juízes): quatro
  escalas de borrão da camada emissiva (≈ 3, 10, 40 e 80 px em px CSS)
  compostas em *screen*, `c = 1 − (1 − c)(1 − halo)`, e o halo multiplicado
  por `1 − smoothstep(0.30, 0.70, luminância da cena)` — zero dentro do
  miolo emissivo. Sem a máscara qualquer bloom empurra o interior pro branco
  e o painel volta a ser recorte; com ela o interior mantém o gradiente do
  shader (p50 230, p95 242) e a aresta desce contínua (1º px fora a 78–91% do
  interior, depois 193 → 152 → 134 → 120). A escala curta é a que faz a
  descida; sem ela a borda caía ~100 níveis num pixel e lia como borda
  borrada colada num recorte.
- **A luz toca o ambiente**: um lobo gaussiano em tela centrado na projeção
  do objeto luminoso (uniforme `uN`), anisotrópico (mais longo pra baixo),
  que soma na fumaça (`+0,35·fumo`), no céu de leve (`+0,008` linear) e
  alisa o fbm sob a luz. É o que faz um painel emissivo ler como luz num
  lugar e não como adesivo: a fumaça embaixo dele passou de a mais escura
  (41) a a mais clara (94) da faixa.
- **Peça fora da grade, de propósito**: quando a referência mostra uma
  aresta horizontal e nenhum dos três eixos da lattice projeta na horizontal
  naquele ponto (a tabela por pose, `?tabela`, mostra só ±40° e 80°), a saída
  é UMA peça girada 45° em torno do eixo vertical antes de entrar na grade,
  documentada como exceção — não um giro livre pra todas. O olho aceita uma
  barra paralela ao plano da tela; o que ele rejeita é dezenas de direções.
- **Fumaça de tela com paralaxe** (2026-09-10): fbm no pós é plano por
  natureza — o dono viu na hora ("não deve permanecer estática, se muda o
  ponto de vista ela muda também"). Dois uniformes resolvem: o deslocamento
  da câmera (o ponteiro) entra nas coordenadas do fbm com fator maior na
  oitava larga (perto) e menor na fina (fundo), no sentido oposto ao da
  câmera, igual ao que a cena 3D faz; e a faixa sobe quando a câmera desce ou
  o olhar baixa. Medido: 104 px de deslocamento entre as bordas do ponteiro,
  no sentido das portas. Custa dois `vec2` e zero passadas.
- **O grid do logo basta** (2026-09-10): com a treliça genérica removida a
  pedido, o que sobrou — cada porta com as arestas prolongadas e um degrau por
  canto descendo até a fumaça — ainda lê como grade, porque todos os degraus
  convergem no ponto de fuga e as arestas ficam nas famílias da grade. A
  treliça em volta era o "depois populamos melhor" que ele decidiu não querer;
  a receita dela segue nos itens acima.
- **Tabela por pose antes de mexer no custo**: imprimir, por peça, as 24
  poses com caixa, ângulo, espessura e `face` mostra em segundos o que é
  alcançável na grade (e o que não é, como a porta A 1,2:1 numa laje 2:1
  vista a 23° da normal). Ajustar pesos de custo sem a tabela é chute.
- **Conota**: arestas sem faces são a construção antes da matéria, o plano
  de um lugar que ainda não existe; olhar de baixo pra elas é estar embaixo
  de uma estrutura que outros já ergueram; as quatro portas acesas são o
  único calor num vazio preto, e serem as lajes do N diz que a marca é feita
  de passagens, não de um bloco; a fumaça no pé é o chão que não se vê (a
  gente não é daqui); descer com a rolagem e fechar o N é a convergência que
  o nome carrega, o equilíbrio como o último gesto.
