1 Técnicas de modelagem de ambientes virtuais — Exercícios

Os três problemas desta página têm um traço em comum, e ele é o mesmo do capítulo: em nenhum deles a tela responde sozinha. Você vai olhar peças com a silhueta perfeita e o defeito escondido dentro dela, contar o que uma cena cobra em duas moedas diferentes, e descrever no papel um volume que não aparece em imagem nenhuma. Nada aqui pede que você abra um projeto seu ou continue algo que já estava em andamento: cada cenário está descrito por inteiro no enunciado, com os números de que você precisa e as unidades ao lado deles.

Como trabalhar estes três. Resolva com lápis, calculadora e prosa — nenhum deles exige que você execute código para responder, e todos exigem que você diga por quê. Faça na ordem: o primeiro se resolve com o que a leitura do capítulo já deu, o segundo pede uma conta e uma comparação, e o terceiro junta geometria, custo e comportamento num cenário que você ainda não viu. Se em algum ponto a resposta natural for “eu olharia na tela para saber”, pare: é exatamente ali que este assunto mora.

1.1 Exercício 1: Três defeitos com a mesma silhueta

Nível Básico — aplicação direta de conceitos

Imagine uma cena de teste com três cópias da mesma peça, lado a lado, construídas a partir do mesmo contorno e sob a mesma iluminação. Uma malha — o conjunto de listas paralelas que descreve a forma, com a posição, a normal e o par de coordenadas de textura de cada vértice, mais a lista de faces que enumera os triângulos — foi escrita à mão para cada cópia, e em cada uma delas exatamente uma das quatro listas saiu errada. A cópia A ficou escura de todos os ângulos, embora o recorte dela contra o fundo continue idêntico ao do original. A cópia B tem um buraco por onde se vê o próprio interior, e o buraco aparece quando a câmera passa por cima e some quando ela desce. A cópia C está bem iluminada e com o recorte certo, mas o desenho aplicado sobre a superfície aparece esticado numa faixa.

flowchart TB
    ORIG["mesma geometria, mesmo contorno<br/>três cópias na cena"]
    ORIG --> A["cópia A<br/>silhueta idêntica ao original<br/>superfície escura de todos os ângulos"]
    ORIG --> B["cópia B<br/>silhueta idêntica ao original<br/>buraco por onde se vê o interior<br/>visível de cima, não de baixo"]
    ORIG --> C["cópia C<br/>silhueta idêntica ao original<br/>o desenho da superfície aparece esticado"]
    CAND["candidatos: as quatro listas da malha<br/>posição · normal · coordenada de textura · faces"]
    CAND -.-> A
    CAND -.-> B
    CAND -.-> C
Figura 1: Três cópias da mesma geometria, três defeitos e uma silhueta comum às três.

O que peço de você: escreva, em prosa, a associação entre cada cópia e a lista que a estragou, com a justificativa de cada associação. Faça em três partes. Em (a), diga qual das quatro listas responde por cada um dos três sintomas, lembrando em meia frase o que aquela lista decide. Em (b), explique por que a silhueta das três permanece igual à do original — e diga qual seria o sintoma se a lista errada tivesse sido a quarta, aquela que ninguém errou aqui. Em (c), escolha uma das três cópias e escreva o procedimento de conferência que você usaria para confirmar a sua hipótese, deixando explícito o que você veria em cada um dos três desfechos possíveis: hipótese confirmada, hipótese contrariada, e resultado inconclusivo.

Um aviso que economiza tempo: nenhum dos três defeitos produz mensagem de erro, alerta no console ou peça deformada. Se a sua resposta em (c) depende de alguma coisa aparecer escrita em algum lugar, ela não vai funcionar.

Você terá terminado quando as três associações estiverem escritas com a razão ao lado, e quando o procedimento de (c) puder ser executado por outra pessoa sem que ela precise perguntar nada a você.

1.2 Exercício 2: As duas moedas em que um quadro se paga

Nível Intermediário — comparação e cálculo

Cada quadro é um envelope de onze milissegundos, e o que não couber nele não fica para depois: some. Considere agora uma cena com cinco peças que somam 440 triângulos, montada assim: uma roda dentada de catorze dentes, construída por um perfil em que cada dente acrescenta dezesseis triângulos à malha final; uma segunda roda dentada, menor; um eixo de doze lados; e duas caixas simples. As cinco peças apontam para um catálogo de quatro instâncias de material — as duas rodas dentadas dividem a mesma instância, criada uma vez e apontada duas vezes. A roda grande mede quinze centímetros e é olhada, na cena, a cerca de meio metro.

flowchart LR
    subgraph GEO["primeira metade: geometria"]
        D["dentes do perfil"] --> T["triângulos da malha<br/>16 por dente"]
    end
    subgraph EST["segunda metade: estado"]
        S["instâncias de material<br/>apontadas pelas peças"] --> TR["trocas de estado por quadro<br/>custo fixo por troca"]
    end
    T --> Q["conta de um quadro"]
    TR --> Q
    CFG1["configuração 1<br/>quatro superfícies, cinco peças"] -.-> S
    CFG2["configuração 2<br/>uma superfície por peça,<br/>valores idênticos aos da configuração 1"] -.-> S
Figura 2: As duas metades da conta de um quadro, e as duas configurações de catálogo a comparar.

Alguém propõe duas mudanças, apresentadas juntas como melhoria: subir a roda grande de catorze para vinte e quatro dentes, e dar a cada peça uma instância de material própria, com os mesmos valores de metalicidade e rugosidade que ela já usava.

O que peço de você: avalie as duas mudanças separadamente, em quatro partes curtas. Em (a), calcule quantos triângulos a roda grande tem com catorze dentes e quantos passaria a ter com vinte e quatro, e diga de quanto é a diferença. Em (b), explique por que esses triângulos a mais podem não chegar ao olho de quem está vendo a cena, e diga qual das duas grandezas do enunciado — o tamanho da peça ou a distância de onde ela é vista — precisaria mudar, e em que sentido, para que a sua conclusão em (b) se inverta. Em (c), explique o que a segunda mudança custa, sabendo que uma instância de material é um programa compilado para a placa de vídeo: diga quantas trocas de estado por quadro o catálogo de quatro instâncias impõe, quantas o catálogo com uma instância por peça imporia, e por que a igualdade de valores entre duas instâncias não faz a placa tratá-las como uma só. Em (d), diga o que os 440 triângulos afirmam sobre a cena e o que eles não afirmam.

Uma restrição de honestidade que faz parte do exercício: em nenhum momento eu lhe peço para dizer se essa cena cabe na máquina, nem quantos triângulos ela suportaria. Esse número não foi medido em lugar nenhum deste percurso, e responder o que não se mediu é o defeito que a parte (d) existe para pegar.

Você terá terminado quando tiver dois números em (a), uma condição nomeada em (b), três números em (c) e uma frase em (d) que separe o que a cena tem do que a máquina aguenta.

1.3 Exercício 3: Uma folga só para três peças diferentes

Nível Desafiador — integração de conceitos e transferência

Um ambiente virtual de montagem, que você nunca viu antes e que está inteiro descrito aqui, tem três objetos apoiados numa mesa. A placa é um quadrado de 24 × 24 × 0,6 cm. A haste é uma barra fina de seção quadrada, com 1,0 cm de lado e 30 cm de comprimento, deitada sobre a mesa a 3,0 cm de distância da borda da placa. A roda dentada tem 15 cm de diâmetro, 4 cm de espessura e 220 triângulos na malha que se exibe. As três serão apanhadas e movidas por quem usa o ambiente, e por isso cada uma precisa de um volume de contato — a forma simples, mantida ao lado da malha, contra a qual se testa se a mira apanhou a peça —, com uma folga, que é a distância acrescentada a esse volume em cada direção além da extensão da peça.

Quem escreveu a primeira versão fez três escolhas de uma vez. Adotou uma folga única de 3,0 cm para as três peças, com o argumento de que folga generosa dá pega mais fácil. Decidiu recalcular o volume a cada quadro, em coordenadas de mundo, medindo o nó já montado na cena — que tem, como filho, um contorno de depuração ligeiramente maior que o próprio volume. E rejeitou a caixa para a roda dentada, propondo testar o contato contra os 220 triângulos da malha, com o argumento de que isso seria mais preciso, embora mais caro.

flowchart TB
    subgraph CENA["proposta a examinar: folga única de 3,0 cm para as três peças"]
        P["placa<br/>24 x 24 x 0,6 cm"]
        H["haste<br/>1,0 x 1,0 x 30 cm<br/>a 3,0 cm da placa"]
        R["roda dentada<br/>15 cm de diâmetro, 4 cm de espessura<br/>220 triângulos na malha"]
    end
    P --> VP["caixa de contato da placa"]
    H --> VH["caixa de contato da haste"]
    R --> VR["caixa de contato da roda"]
    VH -.->|"ponto de mira a 3,0 cm<br/>do eixo da haste"| PERG["capturado ou recusado?"]
    VR -.->|"proposta: recalcular a cada quadro<br/>em coordenadas de mundo,<br/>medindo o nó já montado"| PERG2["que dois efeitos isso produz<br/>com a roda inclinada a 45 graus?"]
Figura 3: As três peças da proposta a examinar, com os dois pontos em que ela será testada.

O que peço de você: escreva um parecer sobre as três escolhas, em quatro partes, na ordem abaixo. Em (a), calcule a meia-extensão do volume da haste no eixo em que ela é fina, com a folga de 3,0 cm, e responda se um ponto de mira posto a 3,0 cm do eixo da haste é capturado por ele; mostre a comparação que sustenta a resposta. Em (b), diga que folga você adotaria para cada uma das três peças e escreva, ao lado de cada número, a razão dele em uma frase; explique também por que a razão precisa acompanhar o número no próprio registro do volume, em vez de ficar apenas num comentário do código. Em (c), aponte os dois efeitos distintos que o recálculo em coordenadas de mundo produz — um deles quando a roda dentada está inclinada a 45 graus, o outro decorrente de o contorno de depuração ser filho do nó medido. Em (d), apresente duas razões para recusar o teste contra os 220 triângulos, sendo que uma delas não pode ser de desempenho.

Feche o parecer com um parágrafo sobre quem usa o ambiente. Com a folga única de 3,0 cm, alguém que mire a placa e apanhe a haste vai concluir que mirou mal, tentar de novo com mais cuidado e apanhar a haste outra vez. Diga por que esse comportamento não vem de imprecisão de quem usa, e por que um defeito que faz a pessoa culpar a si mesma custa mais caro para corrigir do que um que trava o programa na cara de quem o escreveu.

Você terá terminado quando o parecer tiver um número calculado em (a), três folgas justificadas em (b), dois efeitos nomeados em (c), duas razões de naturezas diferentes em (d) e um parágrafo final que descreva o que a pessoa fez sem atribuir falha a ela.

Método, para quando você travar. Nos três, a pergunta que destrava é sempre a mesma: o que eu veria se a minha hipótese estivesse certa, e o que eu veria se estivesse errada? Hipótese que produz a mesma imagem nos dois casos não chega a ser hipótese — e os defeitos deste assunto se parecem uns com os outros na tela. Escreva os números com unidade, sempre, mesmo quando parecer pedante: metade das confusões com volumes de contato vem de comparar uma extensão inteira com uma meia-extensão sem perceber. E quando você afirmar que alguma coisa custa caro, diga em que moeda — triângulo desenhado e troca de estado são grandezas diferentes, e a segunda costuma dominar a primeira sem nunca aparecer numa contagem de geometria.