Técnicas de modelagem de ambientes virtuais — Atlas

O módulo inteiro em oito formas visuais. Cada uma mostra o mesmo conteúdo por um lado diferente: o resumo desenhado, os procedimentos passo a passo, os cartões para treinar de memória, o módulo contado como uma história desenhada, o mapa dos tópicos, o painel que junta tudo, a rede de conceitos e a folha para consultar na hora.

Resumo ilustrado

Resumo ilustrado em nove partes. 1, duas descrições: uma peça tem a forma que se vê, que vai para a tela, e o volume de contato, que decide se a mão encostou; o segundo não aparece, e a falta dele não dá sinal enquanto ninguém pega nada. 2, quatro listas: posição errada muda a silhueta de qualquer ângulo; normal errada muda só o brilho; faces na ordem errada abrem um buraco de uns ângulos; coordenada de textura errada não muda nada sem imagem; três conservam a silhueta de algum ângulo. 3, quem decide o quê: a orientação decide se a face é desenhada; a face que gira no sentido anti-horário, vista de fora, é desenhada, e a que gira no horário é omitida sem aviso; a luz consulta a normal, e a normal invertida escurece diante da luz. 4, do perfil à malha: o perfil da engrenagem tem 56 pontos, e a extrusão o levanta numa engrenagem grande de 338 vértices e 224 triângulos, com 57 e 57 vértices nas tampas e 224 na casca; a mesma rotina serve a qualquer perfil. 5, forma ou resolução: forma é o número de dentes e os raios, e decide que peça é; resolução são os lados do eixo e os pontos por dente, o botão de densidade; 14 e 9 dentes fixam a transmissão e não estão à venda; o eixo custa 48 triângulos com 12 lados e 96 com 24. 6, duas moedas: o envelope do quadro, de 11 ms no visor, se gasta em triângulos, 440 nas cinco peças, e em trocas de estado entre superfícies; 440 é censo das cinco peças, nunca um teto, e o censo de triângulos não vê a segunda moeda. 7, o que a peça é: metalicidade e rugosidade, com a luz da cena, dão a aparência; o aço sem o que refletir fica escuro e sem leitura; um latão apontado pelas duas engrenagens custa um envio de parâmetros por quadro, não dois. 8, a caixa que ninguém vê: a caixa em volta da engrenagem deixa todo vale do lado de dentro; o critério é o comportamento na manipulação, e não a semelhança com a silhueta; ela vive no espaço local da peça e gira junto com ela. 9, a folga erra dos dois lados: grande demais, captura quem passou perto; pequena demais, recusa quem já encostou; é decidida por peça, com a razão ao lado, 2,0 cm na engrenagem grande, a maior, e 0,8 cm no eixo, a menor, porque a peça é fina; nenhum valor padrão.
Figura 1: O módulo numa página: as duas descrições de uma peça, as quatro listas, a orientação e a normal, o perfil levantado, forma contra resolução, as duas moedas do quadro, a superfície declarada, a caixa que ninguém vê e a folga que erra dos dois lados.

Fluxogramas

Nove procedimentos do módulo, na ordem do livro. Siga cada um com o lápis, sobre uma peça sua.

Achar a lista que errou

Só a posição errada muda a silhueta de qualquer ângulo; as outras três listas a conservam, ao menos de algum ângulo. Por isso a pergunta começa pela silhueta.

%%{init: {"flowchart": {"useMaxWidth": false, "rankSpacing": 30, "nodeSpacing": 30}, "sequence": {"useMaxWidth": false}, "class": {"useMaxWidth": false}, "state": {"useMaxWidth": false}, "er": {"useMaxWidth": false}}}%%
flowchart TB
    A["a peça saiu errada na tela"] --> B{"a silhueta muda<br/>de qualquer<br/>ângulo?"}
    B -->|"sim"| P["posições<br/>um ponto fora do lugar"]
    B -->|"não"| C{"buraco de<br/>uns ângulos?"}
    C -->|"sim"| O["faces<br/>ordem dos índices<br/>invertida"]
    C -->|"não"| D{"brilho<br/>errado?"}
    D -->|"sim: gire a peça<br/>diante da luz direcional"| F{"escurece<br/>ao encarar<br/>a luz?"}
    F -->|"sim"| N["normais<br/>apontam para dentro"]
    F -->|"não"| L["normal certa<br/>se a peça é de metal,<br/>falta à cena o que ele<br/>possa refletir"]
    D -->|"não"| T{"há imagem<br/>colada?"}
    T -->|"não"| Z["a coordenada<br/>ainda não<br/>mostra nada"]
    T -->|"sim"| T2{"imagem<br/>esticada?"}
    T2 -->|"sim"| U["coordenadas<br/>de textura mal<br/>distribuídas"]

Figura 2: Da silhueta para o buraco, do buraco para o brilho e do brilho para a imagem colada. O teste da normal pede uma luz direcional: com luz igual de todas as direções, a lateral não muda de brilho ao girar, e isso não prova que a normal esteja certa. Imagem colada que não estica fica fora do fluxograma: o módulo não diz o que ela indica.

Levantar uma peça a partir do perfil

%%{init: {"flowchart": {"useMaxWidth": false, "rankSpacing": 30, "nodeSpacing": 30}, "sequence": {"useMaxWidth": false}, "class": {"useMaxWidth": false}, "state": {"useMaxWidth": false}, "er": {"useMaxWidth": false}}}%%
flowchart TB
    A["escreva o perfil<br/>uma sequência de pontos no plano"] --> B["a extrusão levanta o perfil<br/>numa espessura"]
    B --> C["uma tampa<br/>um vértice no centro e um por ponto<br/>os pontos na ordem do perfil"]
    B --> D["a outra tampa<br/>os mesmos pontos<br/>na ordem inversa"]
    B --> E["a casca<br/>um retângulo em pé por trecho<br/>4 vértices e 2 triângulos"]
    C --> F{"toda face gira<br/>no sentido anti-horário<br/>vista de fora?"}
    D --> F
    E --> F
    F -->|"não"| G["procure a ordem errada<br/>em três lugares:<br/>as duas tampas e a casca"]
    G --> F
    F -->|"sim"| H["conte na engrenagem grande<br/>57 + 57 + 224 = 338 vértices<br/>56 + 56 + 112 = 224 triângulos"]

Figura 3: O perfil é o que se escreve; a extrusão é a mesma rotina para qualquer perfil. As duas tampas têm na borda os mesmos pontos, e uma os cita na ordem inversa da outra. Para responder sem ler os índices, passe a câmera em volta da peça, por cima, por baixo e pelos lados: nada pode sumir.

Procurar triângulos que dá para cortar

%%{init: {"flowchart": {"useMaxWidth": false, "rankSpacing": 30, "nodeSpacing": 30}, "sequence": {"useMaxWidth": false}, "class": {"useMaxWidth": false}, "state": {"useMaxWidth": false}, "er": {"useMaxWidth": false}}}%%
flowchart TB
    A["um parâmetro do perfil<br/>custa triângulos em todo quadro"] --> B{"trocá-lo<br/>troca a peça?"}
    B -->|"sim"| FO["parâmetro de forma<br/>número de dentes, raios"]
    FO --> FX["não está à venda<br/>14 e 9 dentes fixam<br/>a razão de transmissão"]
    B -->|"não"| RE["parâmetro de resolução<br/>lados do eixo, pontos por dente"]
    RE --> T["ponha lado a lado a versão<br/>com menos e a com mais triângulos,<br/>no aparelho da cena<br/>e à distância de trabalho"]
    T --> Q{"alguém distingue<br/>as duas?"}
    Q -->|"não"| M["fica a contagem menor"]
    Q -->|"sim, a faceta incomoda"| X["a maior se justifica<br/>com a razão escrita"]

Figura 4: Só o parâmetro de resolução se negocia sem mudar a peça. Até que distância a faceta se percebe não foi medido para esta cena: a escolha dos lados é um juízo, com a razão escrita.

Declarar a superfície de uma peça

%%{init: {"flowchart": {"useMaxWidth": false, "rankSpacing": 30, "nodeSpacing": 30}, "sequence": {"useMaxWidth": false}, "class": {"useMaxWidth": false}, "state": {"useMaxWidth": false}, "er": {"useMaxWidth": false}}}%%
flowchart TB
    A["a peça precisa de superfície"] --> B["declare o que ela é<br/>metalicidade e rugosidade"]
    B --> C["escreva as duas colunas<br/>o que ela entrega<br/>e o que ela cobra"]
    C --> D{"outra peça já usa<br/>esta superfície?"}
    D -->|"sim"| E["aponte para a mesma instância<br/>um envio de parâmetros, não dois"]
    D -->|"não"| F["crie a instância uma vez"]
    E --> G{"a peça de metal<br/>saiu escura?"}
    F --> G
    G -->|"sim"| H["confira antes a normal:<br/>a invertida também escurece;<br/>com ela certa, dê à cena<br/>o que o metal possa refletir"]
    G -->|"não"| I["a luz da cena decide o resto"]

Figura 5: A superfície se declara pelo que a peça é, e a luz da cena decide o resto. O metal escuro com a declaração certa pede o que refletir, e não outro material.

Trocar a malha de um nó

%%{init: {"flowchart": {"useMaxWidth": false, "rankSpacing": 30, "nodeSpacing": 30}, "sequence": {"useMaxWidth": false}, "class": {"useMaxWidth": false}, "state": {"useMaxWidth": false}, "er": {"useMaxWidth": false}}}%%
flowchart TB
    A["o nó já existe na árvore<br/>no pai certo"] --> B{"é um nó de malha?"}
    B -->|"não"| X["a execução para<br/>com o nome da peça"]
    B -->|"sim"| C["libere a malha anterior"]
    C --> D["instale a malha nova<br/>e a superfície declarada"]
    D --> E["nenhum nó criado, removido<br/>ou trocado de pai"]
    C -.->|"sem liberar"| Y["as sobras se acumulam<br/>até a memória de vídeo acabar"]

Figura 6: Vestir a árvore é trocar o conteúdo de nós que já existem: primeiro liberar, depois instalar. Sem liberar, nenhum erro aparece, e as sobras se acumulam até a memória de vídeo acabar.

Decidir de onde vem a forma

%%{init: {"flowchart": {"useMaxWidth": false}, "sequence": {"useMaxWidth": false}, "class": {"useMaxWidth": false}, "state": {"useMaxWidth": false}, "er": {"useMaxWidth": false}}}%%
flowchart TB
    Q["o que esta forma diz<br/>que uma primitiva não diria?"]
    Q -->|"nada"| PR["primitiva pedida à biblioteca<br/>caixa de 12 triângulos e 24 vértices"]
    Q -->|"engrena, faceta, aresta viva"| AU["forma escrita pelo programa<br/>perfil e extrusão"]
    Q -->|"nem caixa nem perfil:<br/>rosto, objeto esculpido"| EXT["ferramenta de autoria"]
    EXT --> C1["confere a contagem<br/>contra a linha de base"]
    EXT --> C2["confere o material<br/>sob as luzes desta cena"]
    EXT --> C3["confere a escala<br/>por uma medida conhecida"]

Figura 7: Uma pergunta por peça, antes de escrever qualquer vértice. A forma trazida de uma ferramenta de autoria se confere na chegada, nas três coisas que a viagem pode cobrar.

Criar o volume de contato de uma peça

%%{init: {"flowchart": {"useMaxWidth": false, "rankSpacing": 30, "nodeSpacing": 30}, "sequence": {"useMaxWidth": false}, "class": {"useMaxWidth": false}, "state": {"useMaxWidth": false}, "er": {"useMaxWidth": false}}}%%
flowchart TB
    A["a peça vai ser pega"] --> B["meça a menor caixa que contém<br/>os vértices da malha,<br/>e não o nó"]
    B --> C{"a folga desta peça<br/>está declarada?"}
    C -->|"não"| X["a execução para<br/>com o nome da peça"]
    C -->|"sim, com a razão"| D["some a folga uma vez<br/>na criação, em cada direção"]
    D --> E["o volume fica no espaço local<br/>e gira junto com a peça"]
    D --> F["crie o contorno de depuração<br/>com os mesmos números<br/>e deixe-o escondido"]
    B -.->|"medir o nó"| Y["entraria na conta o contorno<br/>e a caixa engordaria a cada vez"]

Figura 8: A caixa sai da malha, e não do nó montado: o contorno de depuração é filho do nó. A folga é somada uma vez, na criação, e cada peça declara a sua.

Testar se um ponto está dentro do volume

%%{init: {"flowchart": {"useMaxWidth": false, "rankSpacing": 30, "nodeSpacing": 30}, "sequence": {"useMaxWidth": false}, "class": {"useMaxWidth": false}, "state": {"useMaxWidth": false}, "er": {"useMaxWidth": false}}}%%
flowchart TB
    A["um ponto em coordenadas de mundo"] --> B["(1) leve o ponto ao<br/>espaço local da peça"]
    B --> C["(2) desconte o centro da caixa"]
    C --> D["(3) compare cada coordenada, sem o sinal,<br/>com a meia-extensão naquela direção"]
    D --> E{"as três<br/>cabem?"}
    E -->|"sim"| IN["dentro<br/>o volume captura o ponto"]
    E -->|"não"| OUT["fora"]
    D -.-> EX["ponto a 12 cm do centro<br/>da engrenagem grande<br/>folga de 2,0 cm: parede a 9,75 cm, fora<br/>folga de 6,0 cm: parede a 13,75 cm, dentro"]

Figura 9: Três passos e três comparações, uma por direção. É a conversão para o espaço local que faz o volume girar junto com a peça.

Conferir as caixas antes de haver pega

%%{init: {"flowchart": {"useMaxWidth": false, "rankSpacing": 30, "nodeSpacing": 30}, "sequence": {"useMaxWidth": false}, "class": {"useMaxWidth": false}, "state": {"useMaxWidth": false}, "er": {"useMaxWidth": false}}}%%
flowchart TB
    A["ligue os contornos de depuração"] --> B["ponha as peças na posição<br/>em que vão ser usadas"]
    B --> C["olhe cada par de peças vizinhas"]
    C --> D{"as caixas se tocam<br/>ou se cruzam?"}
    D -->|"não"| OK["as duas podem ser pegas<br/>sem disputa"]
    D -->|"sim"| R["leia no relatório<br/>as medidas e a folga de cada uma"]
    R --> M["mude um número<br/>a folga ou a posição de uma delas"]
    M --> C

Figura 10: O contorno responde onde; o relatório responde quanto. Com as peças longe da posição de uso, o teste não diz nada sobre a disputa que interessa.

Cartões de memória

Leia a frente, diga a resposta em voz alta ou escreva no papel, e só então vire o cartão.

Definição: Malha poligonal
Uma malha é um conjunto de listas paralelas, com uma entrada por vértice, mais uma lista de faces que liga esses vértices.

Por vértice guardam-se três coisas: a posição, que decide onde o ponto está no espaço; a normal, que decide como a luz responde ali; e o par de coordenadas de textura, que decide qual pedaço de uma imagem cai sobre aquele ponto. A lista de faces enumera triângulos por índice de vértice; um lado plano da peça, como a tampa de uma engrenagem, é feito de vários deles.

A forma que se vê é o resultado das quatro listas juntas, e o sintoma de erro é desigual entre elas. Errar as posições muda a silhueta, e isso se enxerga de qualquer ângulo. Errar a normal conserva a silhueta e muda o brilho dentro dela. Errar a ordem dos índices de uma face conserva a silhueta de uns ângulos e abre um buraco de outros. Errar a coordenada de textura não muda nada enquanto nenhuma imagem for aplicada.
Definição: Orientação de face e normal de vértice
A orientação de uma face é o sentido em que ela enumera os seus vértices. A biblioteca desenha a face cuja borda percorre o sentido anti-horário quando vista de fora, e omite a face percorrida no sentido contrário — sem erro, aviso ou mensagem.

A normal de um vértice é a direção que o programa declara como "para fora" naquele ponto, e é ela que a iluminação consulta para decidir o brilho da superfície.

Um vértice usado por várias faces carrega uma normal só, que serve a todas elas. Compartilhar o ponto entre faces que olham para direções diferentes suaviza o canto entre elas; duplicar o ponto, com uma cópia por face, conserva a aresta viva ao preço de mais vértices na malha.
Definição: Geometria paramétrica por perfil e extrusão
Geometria paramétrica é a forma descrita por uma função dos seus parâmetros e construída pela execução dessa função.

A construção por perfil e extrusão tem duas partes de papéis desiguais. O perfil é uma figura plana, dada como sequência de pontos, e é nele que mora toda a decisão de forma. A extrusão levanta o perfil numa espessura, fecha as duas tampas e monta a casca lateral, e é a mesma rotina para qualquer perfil.

Trocar o perfil troca a peça. Os parâmetros do perfil são de dois tipos, e não se confundem. Os de forma — quantos elementos, com que raios — decidem que peça é aquela. Os de resolução — quantos pontos descrevem cada elemento, quantos lados aproximam uma curva — são o botão de densidade da malha. Os dois custam triângulos, e o custo é pago em todo quadro; só o segundo se negocia com o orçamento sem mudar a peça.
Definição: Superfície descrita por propriedade física
Uma superfície se declara por propriedades do material — quanto ele é metálico e quanto é rugoso —, e a aparência final é o que a luz da cena produz sobre essas propriedades.

Daí decorre uma dependência que a declaração sozinha esconde: a superfície metálica devolve ao olho o que existe em volta para refletir, e uma cena com pouca luz ao redor a deixa escura e sem leitura, mesmo com a declaração intacta.

Uma superfície declarada é uma instância, e a mesma instância pode ser apontada por quantas peças a usem. Duas instâncias idênticas em valor permanecem distintas para a biblioteca: ela reaproveita o programa de sombreamento compilado, porque a configuração é a mesma, mas reenvia à placa de vídeo os parâmetros de uma e de outra a cada passagem entre as peças que as usam.
Definição: Volume de contato
O volume de contato de uma peça é a forma simples contra a qual se testa proximidade e toque, mantida ao lado da malha que se exibe.

Ele se deriva da geometria da peça e vive no espaço local dela, o sistema de coordenadas da própria peça. Assim ele gira, escala e muda de pai junto com a peça, sem recálculo e sem que ninguém precise mantê-lo sincronizado.

O critério que decide a forma do volume é o comportamento pretendido na manipulação, e a semelhança com a silhueta é uma consequência ocasional desse critério. Testar contra a malha completa custa uma comparação por triângulo a cada consulta e entrega uma superfície cheia de reentrâncias, por onde a mira escapa em lugares que quem manipula não tem como prever.
Definição: Folga de contato
A folga é a distância acrescentada ao volume de contato em cada direção, além da extensão da malha que ele representa.

Ela erra para os dois lados, com sintomas opostos. Folga grande captura o que passou perto, e a peça responde a quem não a tocou. Folga pequena recusa o que já encostou, e cada recusa custa a quem manipula um gesto a mais.

A folga é decidida por peça, e o número anda junto da razão dele. Peça fina pede folga pequena: a folga que serve para apanhar uma peça grande cerca a peça fina de um volume feito quase só de ar, e a peça fina rouba do alvo pretendido qualquer mira que cruze a vizinhança.

História em quadros

O módulo contado do começo ao fim, um passo em cada desenho, na ordem em que o livro avança.

História em quadros, quinze desenhos em cinco linhas. 1, da foto ao ambiente: a foto é calculada uma vez, e o ambiente refaz a imagem a cada quadro; no ambiente a peça é apanhada, e o ponteiro pergunta se está dentro ou fora dela. Legenda: numa imagem parada, nada colide com nada; no ambiente, o que mais importa é a caixa invisível de cada peça. 2, arame, e depois quatro listas: 1968, Sutherland, arestas de arame; com superfície, quatro listas: posição, normal, coordenada de textura e faces. Legenda: o visor de 1968 mostrava arestas de arame, e bastavam pontos e pares ligados; uma peça com superfície pede quatro listas. 3, a face que some: o triângulo que gira no sentido anti-horário visto de fora é desenhado; um sinal de menos, e a normal olha para dentro. Legenda: a tampa em ordem errada some quando a câmera passa por cima, sem aviso; a normal invertida escurece a lateral diante da luz. 4, canto vivo custa vértices: o vértice compartilhado, um por canto, 8 no cubo, dá o canto arredondado; o duplicado, quatro por lado, 24 no cubo, dá a aresta viva; um vértice carrega uma normal só; na engrenagem grande, a aresta viva custa perto de 7 KB. Legenda: a peça mecânica de canto macio parece brinquedo; duplicar o vértice compra a aresta viva, ao preço de mais vértices. 5, o perfil decide: 4 pontos por dente, 14 vezes 4 dá 56 pontos; tampa de cima com 57 vértices e 56 triângulos, tampa de baixo igual, casca com 224 e 112; a engrenagem grande tem 338 vértices e 224 triângulos. Legenda: toda decisão de forma mora no perfil; a mesma rotina levanta o eixo de doze lados, com 74 vértices e 48 triângulos. 6, a coordenada antes da imagem: a casca aberta como o rótulo de uma lata, com u seguindo a distância ao longo do perfil, de 0 a 1, e v de 0 na base a 1 no topo; na costura, u igual a 0 e u igual a 1 ficam no mesmo lugar. Legenda: sem imagem colada, nada na tela depende da coordenada de textura; adiar a coordenada faz o defeito nascer na malha e ser procurado na imagem. 7, o dente não está à venda: um dente custa 16 triângulos; 14 e 9 dentes fixam a razão de transmissão; a meio metro, um passo ocupa perto de 4 graus; um botão de densidade são os lados do eixo, 48 triângulos com 12 lados e 96 com 24. Legenda: os dentes custam 368 dos 440 triângulos e não estão à venda, porque trocá-los troca o mecanismo; a resolução é que se negocia. 8, duas moedas: o envelope do quadro, de 11 ms no visor, se gasta em triângulos, 440 nas cinco peças, e em trocas de estado entre superfícies; os 440 são censo das cinco peças, nunca um teto. Legenda: cada quadro é um envelope de onze milissegundos, e o que não couber nele não sai um pouco depois: perde a vez. 9, metal e o mesmo latão: aço no eixo e na base do suporte, latão nas duas engrenagens, plástico no corpo e na tampa do mecanismo, madeira no tampo e no cavalete; o aço sem o que refletir fica escuro e sem leitura; um latão só para as duas engrenagens custa um envio de parâmetros, não dois. Legenda: a superfície declarada diz o que a peça é, e a luz da cena decide o resto; quatro superfícies vestem oito malhas. 10, vestir sem remontar: primeiro liberar a malha anterior, depois instalar a malha nova, sem nenhum nó criado, removido ou trocado de pai; o corpo fica caixa pronta, e a tampa do mecanismo, placa pronta. Legenda: vestir troca o conteúdo de nós que já existem; para o que é caixa mesmo, pedir a caixa pronta é a decisão certa. 11, forma trazida de fora: a ferramenta de autoria pode trazer contagem de render offline, material ajustado sob outra luz e escala em outra unidade; ela resolve as quatro listas e não as ensina. Legenda: a viagem da ferramenta de autoria até o ambiente cobra três coisas que a ferramenta não mostra, e cada uma se confere na chegada. 12, o retângulo que o carro ocupa: contra a malha são 224 comparações por consulta, e a mira que cai no vale escapa da peça; a caixa deixa todo vale dentro e fica no espaço local da peça. Legenda: ninguém estaciona pensando no retrovisor; a forma do volume se decide pelo comportamento, e não pela semelhança. 13, dois centímetros contra seis: um ponto a 12 cm do centro da engrenagem grande; com folga de 2,0 cm a parede fica a 9,75 cm e o ponto fica fora; com 6,0 cm a parede fica a 13,75 cm e o ponto fica dentro; no eixo, peça fina, a folga é 0,8 cm, a menor. Legenda: folga grande captura quem passou perto, e pequena recusa quem encostou; cada folga anda com a razão escrita ao lado. 14, onde e quanto: o contorno de depuração responde onde, e o relatório responde quanto, em centímetros; a caixa que avança sobre a vizinha faz a peça grudar de longe, e a caixa menor que a silhueta recusa o ponteiro de um lado. Legenda: ligado por comando, o contorno mostra a caixa que ninguém vê; o relatório traz cada caixa e a razão da folga na mesma linha. 15, a caixa que ninguém pediu: hoje, sem volume, a cena desenha igual; na manipulação, pegar, mover e encaixar testam contra a caixa; o módulo seguinte, Ativos, formatos de troca e orçamento de cena, tem 440 triângulos e quatro superfícies como linha de base da comparação. Legenda: o volume custa zero hoje e cobra na manipulação; os 440 triângulos ficam como linha de base para o módulo seguinte.
Figura 11: O módulo do começo ao fim, em quinze desenhos: da foto ao ambiente, as quatro listas, a face que some, o canto vivo, o perfil, a coordenada antes da imagem, o dente que não está à venda, as duas moedas, o metal, vestir a árvore, a forma trazida de fora, o retângulo do carro, a folga, o contorno e o relatório, e a caixa que ninguém pediu.

Mapa mental

Os tópicos do módulo, do centro para fora, na ordem do livro.

Mapa mental com o título do módulo no centro e onze ramos. Numa imagem parada, nada colide: a foto é calculada uma vez, o ambiente refaz a imagem a cada quadro, o ponteiro pergunta dentro ou fora, a caixa invisível de cada peça. Quatro listas, uma silhueta: posição, normal, coordenada de textura e faces; três conservam a silhueta de algum ângulo; para fora ou para dentro; vértice duplicado, aresta viva. O perfil decide, a extrusão obedece: crista, travessia, raiz, vale; 338 vértices e 224 triângulos; a textura que ainda não existe; a costura da casca. O que se paga em todo quadro: o dente que não está à venda, doze lados vistos de perto, o envelope começa a ser gasto, censo não é teto. Metal e rugosidade no lugar da cor: declarar o que a superfície é, entrega e custo, o metal sem o que refletir, o mesmo latão apontado duas vezes. Forma nova em nó antigo: a malha que fica para trás, liberar e depois instalar, caixa quando é caixa. O que a ferramenta resolve por você: contagem de render offline, material ajustado sob outra luz, escala em outra unidade, resolve as listas e não as ensina. O retângulo que o carro ocupa: comportamento e não semelhança, uma comparação por triângulo e a mira que escapa pelo vale, solidário à peça, que gira junto com ela, da malha e não do nó. Dois centímetros contra seis: um ponto ao lado da engrenagem, oito milímetros para o eixo, a razão escrita na mesma linha. A caixa desenhada para quem constrói: o contorno responde onde, o relatório responde quanto, dois defeitos num olhar. A caixa que ninguém pediu: o que tem de estar verdadeiro, a dívida com a manipulação, a linha de base do módulo seguinte.
Figura 12: Os tópicos e subtópicos do módulo, em árvore, na ordem do livro, em sentido horário a partir do alto, à direita.

Painel do conhecimento

Conceitos

  • Malha: listas paralelas por vértice, com a posição, a normal e o par de coordenadas de textura, mais a lista de faces, os triângulos que ligam os vértices.
  • Orientação e normal: a orientação decide se a face é desenhada; a normal decide como a luz responde.
  • Perfil e extrusão: o perfil guarda toda a decisão de forma; a extrusão é a mesma rotina para qualquer perfil.
  • Superfície declarada: a que se declara por metalicidade e rugosidade; a luz da cena produz a aparência.
  • Volume de contato: a forma simples contra a qual se testa o toque, no espaço local da peça.
  • Folga: a distância somada ao volume em cada direção, decidida por peça e com a razão ao lado.

Exemplos

  • A normal invertida na casca: silhueta perfeita, superfície escura.
  • O eixo de doze lados: parece cilindro à distância, mostra a faceta de perto.
  • Cada dente, quatro pontos: sobe à crista, atravessa a crista, desce à raiz, atravessa o vale.
  • Dois latões iguais em valor e distintos em identidade: dois envios de parâmetros por quadro em vez de um.
  • A vaga de estacionamento: ninguém estaciona pensando no retrovisor, e sim no retângulo que o carro ocupa; na cena, esse retângulo é o volume de contato.
  • O ponto a 12 cm do centro da engrenagem grande: a folga adotada não o captura; o triplo dela, sim.

Diagrama

%%{init: {"flowchart": {"useMaxWidth": false}, "sequence": {"useMaxWidth": false}, "class": {"useMaxWidth": false}, "state": {"useMaxWidth": false}, "er": {"useMaxWidth": false}}}%%
flowchart LR
    subgraph POR["por vértice"]
        P["posição<br/>onde o ponto está"]
        N["normal<br/>para que lado a superfície olha ali"]
        U["coordenada de textura<br/>que ponto da imagem cai ali"]
    end
    F["faces<br/>que vértices formam cada triângulo"]
    POR --> M["a peça desenhada"]
    F --> M
    P -.->|"errada"| S1["a silhueta muda<br/>o erro se vê de qualquer ângulo"]
    N -.->|"errada"| S2["silhueta intacta<br/>o brilho muda"]
    U -.->|"errada"| S3["silhueta intacta<br/>nada muda até haver imagem colada"]
    F -.->|"ordem invertida"| S4["silhueta intacta de uns ângulos<br/>buraco visível de outros"]

Figura 13: As quatro listas de uma malha e o sintoma de cada erro.

Evidências

  • 1968: Sutherland monta um visor tão pesado que fica pendurado no teto do laboratório por um braço mecânico, e o visor mostra arestas de arame.
  • Contados pelo próprio programa: a engrenagem grande sai com 338 vértices e 224 triângulos, e as cinco peças somam 440 triângulos; a cena inteira, 476.
  • Medidas na cena: a caixa da engrenagem grande tem 19,5 × 5,6 × 19,6 cm, com folga de 2,0 cm; a do eixo, 4,0 × 23,6 × 4,0 cm, com 0,8 cm.
  • Com a engrenagem pequena na posição x = 45 cm, as caixas das duas engrenagens se cruzavam em repouso; afastada 2 cm, para x = 47 cm, nenhum par de caixas se cruza com as peças paradas.
  • Com as duas luzes da cena acesas, a direcional e a hemisférica, a lateral do eixo de aço é a mais escura das cinco peças, quase preta contra o tampo.

Referências

  • Sutherland, A head-mounted three dimensional display, Proceedings of the AFIPS Fall Joint Computer Conference, p. 757–764, 1968.
  • Sherman e Craig, Understanding virtual reality: interface, application, and design, 2. ed., 2018, que trata do episódio de 1968.
  • Schmalstieg e Höllerer, Augmented reality: principles and practice, 2016, que também o trata.

Aplicações

  • Na cena do projeto, o mecanismo ganha forma própria, com dentes, faceta e superfície, sem que a árvore seja remontada.
  • No módulo da manipulação, pegar, mover e encaixar testam contra os volumes de contato escritos aqui.
  • No módulo seguinte, Ativos, formatos de troca e orçamento de cena, os 440 triângulos e as quatro superfícies são a linha de base para comparar peças trazidas de fora.
  • Na tela, no visor e no celular que mostra a sala real, a superfície declarada responde à luz que a cena declarar em cada regime.

Mapa conceitual

DicaAntes de olhar

Escreva num papel: malha, posição, faces, normal, coordenada de textura, silhueta, perfil, extrusão, parâmetros de forma, parâmetros de resolução, densidade, envelope do quadro, troca de estado, superfície declarada, luz da cena, volume de contato, espaço local, folga, contorno de depuração, relatório. Ligue os conceitos com setas, e escreva em cada seta um verbo que diga qual é a relação. Depois compare com o mapa.

Mapa conceitual. Os parâmetros de forma decidem que peça sai do perfil. A extrusão levanta numa espessura o perfil, e fecha as tampas e monta a casca da malha. Os parâmetros de resolução são o botão de densidade. A densidade é contada na lista de faces e é paga em todo quadro, dentro do envelope do quadro. A malha liga os vértices pela lista de faces, guarda, por vértice, a posição, a coordenada de textura e a normal, e é escrita no espaço local. O volume de contato se deriva da geometria guardada na malha, vive no espaço local e às vezes se parece com a silhueta. A posição, errada, muda de qualquer ângulo a silhueta; as faces, na ordem errada, conservam de uns ângulos a silhueta; a normal, errada, conserva a silhueta. A luz da cena consulta a normal e produz a aparência da superfície declarada. A superfície declarada, trocada por outra, pede uma troca de estado, que também gasta o envelope do quadro. A folga é somada, em cada direção, ao volume de contato. O contorno de depuração desenha, para quem constrói, o volume de contato. O relatório imprime, com a razão ao lado, a folga.
Figura 14: Os conceitos do módulo ligados por frases de ligação. Cada seta, lida da origem ao destino, é uma afirmação do módulo.

Folha de consulta

As quatro listas

  • posição errada: muda a silhueta, e isso se vê de qualquer ângulo
  • normal errada: conserva a silhueta e muda o brilho dentro dela
  • faces na ordem errada: conservam a silhueta de uns ângulos e abrem um buraco de outros
  • coordenada de textura errada: nada muda enquanto nenhuma imagem for aplicada

Orientação e normal

  • a face que gira no sentido anti-horário vista de fora é desenhada; a outra é omitida, sem erro nem aviso
  • a normal é a direção “para fora” que a iluminação consulta
  • teste: girar a peça diante da luz direcional; a lateral que escurece ao encarar a luz tem a normal invertida
  • vértice compartilhado: uma normal para várias faces, e o canto se suaviza
  • vértice duplicado: aresta viva, ao preço de mais vértices; no cubo, 24 em vez de 8

Contas da extrusão

Engrenagem grande Vértices Triângulos
tampa de cima 57 56
tampa de baixo 57 56
casca 224 112
inteira 338 224
  • eixo, doze lados: 74 vértices e 48 triângulos
  • cada dente custa 16 triângulos; cada lado do eixo, 4

Forma e resolução

  • forma: número de dentes e raios; decide que peça é; 14 e 9 dentes fixam a razão de transmissão
  • resolução: lados do eixo e pontos por dente (os pontos, hoje fixos em 4); é o botão de densidade
  • densidade: quantos triângulos a malha tem, contados na lista de faces
  • as duas engrenagens custam 368 dos 440 triângulos, e esse custo não está à venda

Censo e as duas moedas

  • 440 triângulos nas cinco peças: 224 + 144 + 48 + 12 + 12; 476 na cena inteira
  • censo é o que a cena tem; quanto a máquina aguenta não foi medido
  • o envelope do quadro, de 11 ms no visor e de 16,7 ms na tela do computador, se gasta em triângulos e em trocas de estado
  • quatro superfícies em oito malhas: quatro trocas de estado por quadro, e não oito
  • o mesmo latão nas duas engrenagens: um envio de parâmetros por quadro; dois latões iguais, dois envios

Volume e folga

  • testar um ponto: levar ao espaço local, descontar o centro, comparar cada coordenada, sem o sinal, com a meia-extensão daquela direção
  • a caixa sai da malha, e não do nó; a folga é somada uma vez, na criação
  • folgas: 2,0 cm na engrenagem grande, a maior; 1,8 na pequena; 1,2 no corpo; 1,2 na tampa do mecanismo; 0,8 no eixo, a menor
  • engrenagem grande: caixa de 19,5 × 5,6 × 19,6 cm
  • ponto a 12 cm do centro: com 2,0 cm de folga, a parede fica a 9,75 cm, e ele fica fora; com 6,0 cm, a 13,75 cm, e ele fica dentro
  • o contorno de depuração responde onde; o relatório responde quanto

Erros previsíveis

  • “uma malha é um conjunto de triângulos”: são quatro listas, e só a das posições muda a silhueta de qualquer ângulo
  • “a normal invertida dá erro”: a silhueta continua perfeita, e a peça só escurece
  • “compartilhar vértices é sempre melhor”: arredonda o canto da peça mecânica
  • “tirar dentes é um jeito de economizar triângulos”: a conta poupa 16 por dente, mas o número de dentes é forma, e trocá-lo troca o mecanismo
  • “o metal é mais realista”: ele depende do que existe em volta para refletir
  • “dois materiais com os mesmos valores custam o mesmo que um”: custam dois envios de parâmetros por quadro
  • “o volume de contato é a malha simplificada”: o critério é o comportamento, e a caixa é maior que a peça em toda direção
  • “testar contra a malha exata é mais preciso”: além de caro, é errado; a mira escapa pelo vale
  • “folga maior é mais segura”: ela captura o que passou perto
  • “o volume precisa ser recalculado a cada quadro”: no espaço local, ele acompanha a peça sem recálculo
  • “440 triângulos é o teto da cena”: é censo das cinco peças; o orçamento não foi medido