Engenharia e tecnologia Ideias fundamentais 2 de abril de 2025, 09:50 02/04/2025

A matemática por trás dos filmes

Autores

Jovens revisores

Resumo

Você já se perguntou por que as coisas que você vê ao seu redor têm a aparência que têm? Grande parte do meu trabalho como pesquisador de computação gráfica é responder a essa pergunta, para que possamos simular objetos do mundo real usando computadores. Esse trabalho é importante para a criação de filmes e videogames que sejam visualmente atraentes para o público. No entanto, existem também muitas outras aplicações de computação gráfica realista, como treinamento, design de produtos, arquitetura e mais. Neste artigo, contarei como criamos imagens realistas do mundo usando computadores e como meu trabalho melhorou a forma como simulamos pele e cabelo em personagens virtuais. Ele lhe dará uma nova perspectiva sobre a magia e a beleza do cenário visual que vivenciamos em nossa vida cotidiana e sobre as imagens e filmes gerados por computador que imitam essas cenas naturais.

O professor Pat Hanrahan ganhou o Prêmio Turing em 2019, juntamente com o Dr. Edwin Catmull, por contribuições fundamentais à computação gráfica 3D e ao impacto das imagens geradas por computador (CGI, na sigla em Inglês) na produção cinematográfica e outras aplicações.

O mundo ao nosso redor

O que você vê quando olha pela janela? Eu vejo alguns carvalhos com lindas copas de folhas. Quando está ensolarado, as folhas parecem brilhar com uma luz gloriosa. Como trabalhei durante tantos anos com computação gráfica (geração de imagens digitais usando computadores), olho para o ambiente cotidiano com uma mente curiosa e observadora. Quando vejo uma bela paisagem, percebo variações sutis na iluminação dos objetos naturais, como a das folhas do lado de fora da minha janela, me pergunto: o que a torna tão visualmente interessante e bonita? Como exatamente as folhas espalham a luz do sol que as atinge antes de chegar aos meus olhos? E qual seria a melhor forma de imitar isso usando um computador para que as folhas na tela do meu computador também fiquem lindas como ficam na natureza?

Se você pensar bem, tudo o que vemos no mundo – de árvores a pessoas e roupas – é feito de formas e materiais complexos. Para descrever a composição de uma cena visual, devemos descrever todas as formas geométricas que compõem os objetos dessa cena, bem como os materiais de que são feitos. Se olharmos para um ser humano, por exemplo, vemos a pele, o rosto, o cabelo, as roupas – tudo feito de materiais com propriedades únicas. Existem também vários tipos de fontes de luz – o Sol, uma luz neon ou um holofote, por exemplo – e cada fonte cria um padrão único de iluminação.

Por fim, a cena observada é percebida pelo espectador (ou registrada pela câmera) a partir de um determinado ponto de vista. Um olhar mais atento a qualquer cena revela uma enorme variedade de elementos trabalhando juntos para eventualmente criar a imagem que vemos. Geralmente tomamos como certo o que vemos em nossas vidas diárias, mas quando precisamos criar uma imagem realista do mundo usando um computador, começamos a apreciar o quão interessante e intrincada é a nossa realidade visual e os desafios para representá-la de forma convincente no computador.

Simulando o mundo usando computadores

No início da minha carreira, trabalhei na Pixar – um estúdio agora conhecido por suas histórias de animação. A Pixar queria tornar os efeitos especiais nos filmes mais convincentes, combinando material gerado por computador com fotografias tiradas em ação ao vivo. Para combinar perfeitamente as partes geradas por computador com as fotografias, as imagens geradas por computador tinham que ser fotorrealistas, ou seja, indistinguíveis das fotos do mundo real (Figura 1). Isso exigiu a criação de imagens 3D a partir de descrições dos elementos de uma cena.

Esta foi a primeira etapa do processo denominado renderização – a tarefa de obter uma descrição de uma cena 3D e convertê-la em uma imagem de computador. – simulando o mundo usando um computador [1]. Finalmente, percebemos que a renderização poderia ser usada não apenas para efeitos especiais, mas para criar filmes inteiros apenas no computador, sem precisar filmá-los na natureza. Fiquei fascinado pelo desafio de criar um mundo virtual realista e, nos últimos 30 a 40 anos, tenho tornado a renderização cada vez melhor.

Figura 1 – O caminho para Point Reyes.
Esta imagem, produzida em 1983 pela Lucasfilm (que mais tarde se tornou Pixar), é um exemplo de imagem fotorrealista de alta resolução criada em computador. Foi um marco importante na criação de filmes digitais gerados por computador (Fonte da imagem: http://www.calgran.net/upf/recursos/ima_dig/_2_/estampes/d3_1.html).

Como funciona a renderização? Primeiro, artistas, designers e animadores nos fornecem descrições 3D (em desenhos ou em texto) do mundo que queremos simular. Essas descrições são salvas em arquivos de computador. Depois de termos uma descrição completa de uma cena específica, devemos criar um modelo computacional que represente, por meio do computador, situações e processos da vida real, para eventualmente converter os arquivos de descrição em imagens reais, como os arquivos JPEG com os quais você deve estar familiarizado. A maneira mais simples de modelar formas complexas com um computador é usando polígonos, como triângulos e quadrados (Figura 2). Dividimos todas as formas complexas de uma cena em triângulos muito pequenos, normalmente bilhões de polígonos por imagem.

Então, um dos maiores desafios da renderização realista é simular corretamente a iluminação. A maneira mais simples de modelar a luz em um mundo simulado por computador é assumir que os raios de luz se movem em linhas retas. Para modelar a luz corretamente, usamos uma técnica chamada ray tracing, um método usado na renderização para descobrir a iluminação de uma cena simulando o comportamento da luz. Nesse método, seguimos os caminhos dos raios de luz simulados em nossa cena virtual, para descobrir como deve ser a iluminação desta imagem.

Figura 2 – Simulando luz para tornar as imagens realistas.
Uma cena complexa é representada no computador por um conjunto (muitas vezes milhões ou bilhões) de pequenos polígonos. Para determinar o brilho e a cor de cada pixel na imagem renderizada, traçamos os caminhos dos raios que emanam da fonte de luz e simulamos como eles são refletidos nas superfícies que atingem. Consideramos a iluminação direta, onde a luz é refletida diretamente no olho ou na câmera.
O problema mais desafiador é a iluminação indireta, onde a luz do sol ilumina outros objetos que espalham a luz que eventualmente chega ao olho. Um exemplo é a clarabóia, onde a luz do sol é refletida nas nuvens e na atmosfera, ou a iluminação indireta das luminárias das paredes de um edifício.

Cada fonte de luz direta em uma cena, como o Sol ou uma lâmpada, emite raios de luz. Esses raios viajam no espaço até atingirem a superfície de algum objeto e se espalharem. Cada material dispersa a luz de uma forma única, dependendo das propriedades específicas da sua superfície (por exemplo, quão lisa e transparente ela é). Grande parte do nosso trabalho como pesquisadores de computação gráfica concentra-se em simular como diferentes materiais (por exemplo, uma pedra, um tecido ou a pele) espalham a luz. Para cada material, eventualmente queremos encontrar uma função matemática que descreva como esse material dispersa a luz. Esta função matemática é chamada de função de dispersão do material – uma descrição matemática de como um material específico dispersa a luz que o atinge.

Uma forma de modelar a função de dispersão de um material é representar a superfície do material como se fosse composta de muitos pequenos espelhos apontando em várias direções (Figura 3B). Quando os raios de luz atingem um espelho perfeito, eles são refletidos em um ângulo igual ao ângulo em que o espelho é atingido (Figura 3A).

Modelar a função de dispersão de um material como uma distribuição aleatória de espelhos em sua superfície pode funcionar bem para alguns materiais, mas muitos materiais naturais requerem modelos mais sofisticados. Podemos determinar as funções de dispersão de materiais complexos por medições diretas da luz espalhada por esses materiais. Para fazer isso, iluminamos o material e medimos a luz espalhada por ele em várias direções. Podemos armazenar a reflexão em tabelas ou matrizes e usar essas informações para modelar esse material específico no computador. Também podemos ajustar modelos físicos a essas medidas.

Figura 3 – Materiais de modelagem utilizando espelhos.
(A) Num espelho perfeito, os raios de luz são refletidos de tal forma que o ângulo em que os raios atingem o espelho é igual ao ângulo em que saem do espelho. (B) Uma maneira simples de aproximar a função de dispersão de um material é modelar sua superfície como uma coleção de espelhos perfeitos, cada um espalhando a luz de uma maneira conhecida. Isto funciona bem para alguns materiais, enquanto outros requerem um modelo mais complexo.

Como sua pele parece tão boa?

Um dos problemas mais interessantes em que trabalhei foi como modelar a pele de forma realista. Nos primeiros filmes que usavam renderização, a pele parecia pouco saudável e artificial. Não é de admirar, pois foi essencialmente modelada como plástico! A pele saudável tem um brilho especial que a faz parecer viva. Não havia livros de física que explicassem por que a pele tem essa aparência, mas, felizmente, encontrei duas fontes de informação que me ajudaram a desvendar esse enigma. O primeiro foi o trabalho de modelagem das atmosferas dos planetas (como Vênus, Marte ou Júpiter), para explicar por que os planetas têm aquela aparência. Os planetas têm frequentemente um brilho especial à sua volta, tal como a pele – veja, por exemplo, esta imagem de Júpiter. Estes modelos das atmosferas do planeta continham um núcleo sólido (o planeta) rodeado por uma fina camada de gases.

A segunda pista veio de um livro de história da arte da biblioteca da Universidade Princeton, que descrevia como o grande pintor Rembrandt pintava a pele, que parece altamente realista em suas pinturas. Ele colocava pigmentos e óleos em camadas uns sobre os outros para criar o brilho vivo da pele. Rembrandt não estava familiarizado com a estrutura da pele, mas de alguma forma captou intuitivamente o fato de que a pele tem várias camadas. Fotos que explicam sua técnica de pintura mostram raios de luz entrando nas camadas da pele e, eventualmente, sendo refletidos de volta para fora da camada superior.

Usando essas duas pistas, desenvolvi o primeiro modelo matemático da função de dispersão na pele [2]. Este modelo foi baseado em um processo denominado reflexão subsuperficial, um tipo de dispersão de luz em que a luz entra em um material em um ponto, se espalha por baixo de sua superfície e sai em outro ponto. Nesse caso, a luz entra pela superfície da pele, atinge camadas internas, subterrâneas, se espalha e depois volta (Figura 4). Eu queria que meu primeiro modelo fosse o mais simples possível, então presumi que a luz que chega e se espalha sob a superfície da pele sai pelo mesmo ponto por onde entrou. Este modelo era uma simulação de pele bastante boa, então eu sabia que essa era a abordagem correta.

Figura 4 – Reflexão subsuperficial.
(A) A pele é feita de múltiplas camadas. Quando a luz atinge a pele, parte da luz é refletida na superfície da pele e parte dela entra nas camadas subsuperficiais da pele. Lá, a luz se espalha em várias direções e parte dela volta em locais diferentes de onde entrou. Essa propriedade foi incorporada pelo modelo matemático que desenvolvemos que proporcionou uma simulação realista da pele no computador. (B) Um exemplo de renderização de pele realista. Adaptado de d’Eon et al. [3].

No entanto, o meu modelo simples fazia com que a pele parecesse irregular, por isso acabei por desenvolver um modelo de pele mais complicado, no qual a luz sai da pele num ponto diferente de onde entrou. Isso tornou a matemática por trás do modelo mais complicada, mas valeu a pena – a pele finalmente ficou lisa! A razão pela qual a pele inicialmente parecia irregular foi que, se uma pequena área tiver um lado iluminado e um lado escuro, ela parecerá uma protuberância. Mas, se a luz que entra pelo lado iluminado fica espalhada dentro da pele e sai pelo lado escuro, o lado escuro também fica iluminado. Em outras palavras, o reflexo subsuperficial espalha a luz de uma forma que faz com que a pele pareça lisa.

Também tive uma jornada interessante tentando modelar cabelos. No início, o cabelo também parecia irreal nas renderizações. Descobriu-se que modelar cabelos como cilindros coloridos e transparentes funciona muito bem [4]. Os humanos têm cerca de 100 mil fios de cabelo na cabeça e, nos filmes atuais, cada fio de cabelo é simulado individualmente por meio de um modelo cilíndrico. É claro que existem diferentes tipos de cabelo, então o cabelo humano é modelado de forma diferente do pelo de animais, por exemplo. Demorou, mas os designers de computação gráfica finalmente perceberam como modelar cada tipo de cabelo – agora, o cabelo simulado parece muito bom.

O poder da matemática na computação gráfica

A simulação da luz requer matemática porque devemos encontrar e usar as funções de dispersão corretas para rastrear a forma como os raios de luz se movem em cenas virtuais. Mas há outro uso importante da matemática em simulações de computação gráfica.

No mundo real, um número praticamente infinito de raios de luz entra em cada cena. Cada raio atinge objetos e é espalhado um número infinito de vezes antes de a luz atingir o observador. Para simular de forma realista a luz em uma cena virtual, devemos somar todos os caminhos que a luz poderia percorrer para chegar a um determinado ponto, para entender quanta luz temos naquele ponto. Não podemos realizar analiticamente esta soma. Portanto, devemos obter um número finito de amostras que represente com precisão todas as possibilidades.

Como podemos descobrir quantas amostras nos darão a melhor estimativa de iluminação? Para fazer isso, usamos um método matemático que foi originalmente usado para prever o comportamento de partículas que saltam aleatoriamente, chamado simulação de Monte Carlo – um método matemático que usa amostragem aleatória para calcular o resultado de um evento incerto. É usado em computação gráfica para simular a iluminação em cenas digitais. [5].

Hoje, cada pixel em uma imagem simulada de filme, tem cerca de 1.000 raios de luz entrando nele e refletindo aleatoriamente. Existem bilhões de pixels em cada imagem, portanto devemos rastrear um número extraordinariamente grande de raios para cada quadro de cada cena. Isso requer muitos cálculos e é muito caro. Os computadores mais rápidos do mundo são usados ​​para realizar cálculos para filmes e jogos gerados por computador. Em um filme típico, são necessárias cerca de 30 horas de computação pelos computadores mais rápidos para calcular uma única imagem. Isso pode significar que alguns filmes precisam de até um milhão de horas de computação! Isso é muito tempo, mas seria muito mais se não tivéssemos desenvolvido as ferramentas matemáticas que diminuíssem significativamente o número de cálculos necessários.

Na próxima vez que você assistir a uma cena de filme gerada por computador, espero que você tenha uma nova apreciação pela quantidade de pesquisa e recursos computacionais necessários para produzi-la! Nosso mundo cotidiano se torna bastante mágico quando o olhamos da perspectiva de um cientista da computação. Convido você a aprender a ver a beleza do mundo através da observação cuidadosa, com curiosidade sobre por que as coisas têm a aparência que elas têm.

Glossário

Computação Gráfica: Geração de imagens digitais por meio de computadores.

Renderização: O processo de obter uma descrição de uma cena 3D e convertê-la em uma imagem de computador.

Modelo Computacional: Representação, através do computador, de situações e processos da vida real.

Ray Tracing: Um método usado na renderização para descobrir a iluminação de uma cena simulando o comportamento da luz.

Função de dispersão: Uma descrição matemática de como um material específico espalha a luz que o atinge.

Reflexão Subsuperficial: Um tipo de dispersão de luz em que a luz entra em um material em um ponto, se espalha sob sua superfície e sai em outro ponto.

Simulação de Monte Carlo: Um método matemático que usa amostragem aleatória para calcular o resultado de um evento incerto. É usado em computação gráfica para simular a iluminação em cenas digitais.

Referências

[1] Pharr, M., Jakob, W., e Humphreys, G. 2016. Physically Based Rendering: From Theory to Implementation. Cambridge, MA: Morgan Kaufmann.

[2] Hanrahan, P., e Krueger, W. 1993. “Reflection from layered surfaces due to subsurface scattering,” in Proceedings of the 20th Annual Conference on Computer Graphics and Interactive Techniques (New York, NY). p. 165–74.

[3] d’Eon, E., Luebke, D., e Enderton, E. 2007. “Efficient rendering of human skin,” in Proceedings of the 18th Eurographics Conference on Rendering Techniques (Goslar). p. 147–57. doi: 10.5555/2383847.2383869

[4] Marschner, S. R., Jensen, H. W., Cammarano, M., Worley, S., e Hanrahan, P. 2003. Light scattering from human hair fibers. ACM Transact. Graph. 22, 780–91.

[5] Harrison, R. L. 2010. “Introduction to monte carlo simulation,” em AIP Conference Proceedings, Vol. 1204 (Bratislava: American Institute of Physics). 17–21.

Citação

Hanrahan P (2024) The Math Behind the Movies. Front. Young Minds. 12:1166415. doi: 10.3389/frym.2023.1166415

Encontrou alguma informação errada neste texto?
Entre em contato conosco pelo e-mail:
parajovens@unesp.br