Diferença entre renderização no software de animação OpenGL e 3D

16

Com o OpenGL e outros, eu posso render coisas incríveis em "tempo real" a 60 FPS. No entanto, se eu tentar fazer um vídeo dessa mesma cena, digamos, Maya ou 3ds Max, demorará MUITO MUITO mais tempo para renderizar, mesmo com a mesma resolução e FPS.

Por que esses dois tipos de renderização levam períodos diferentes para o mesmo resultado?

Nota: Sim, percebo que o software de animação 3D pode produzir imagens altamente superiores ao que poderia ser feito em tempo real. Mas, para esta questão, estou me referindo a uma cena de igual complexidade.

J.Doe
fonte
11
A resposta curta é que o OpenGL usa atalhos.
user253751

Respostas:

9

A principal diferença seria que, com o OpenGL em, digamos, um videogame, você terá um processo chamado rasterização, que basicamente se encarrega de determinar qual parte da cena você vê.

Ele precisa ser rápido para que possamos experimentá-lo em tempo real.

Portanto, o algoritmo executa algumas etapas simples.

  • verificar se uma certa parte da cena está na minha opinião frustum

    Frustum Culling

  • verifique se há algo à sua frente que talvez precise ser renderizado posteriormente usando um buffer de profundidade

    Buffer de profundidade

  • ordenar os objetos que encontramos para desenhar

  • desenhe-os projetando-os na tela
  • sombra-los com base em texturas / shaders / luzes / ...

Por outro lado, um software de renderização (Blender / Max / Maya / ...) provavelmente usa algum tipo de raytracing

Isso envolve muito mais matemática para alcançar um maior grau de realismo. Basicamente, funciona da mesma maneira:

  • crie uma câmera e um plano de imagem na frente
  • disparar um raio (ou múltiplos raios de amostra) através de cada pixel
  • verifique se o raio atinge alguma coisa na cena
  • o acerto mais próximo é aquele a ser desenhado no pixel finalmente (como buffer de profundidade)
  • calcular a luz para o ponto dado Cálculo de luz

....

Parei de listar aqui, já que este é o ponto em que o raytracing decola.

Em vez de apenas verificar se um ponto é atingido, a maioria dos raytracer agora começa a calcular:

  • a quantidade de luz que uma superfície penetra
  • quanta luz é refletida
  • lança novos raios do ponto de vida para a cena até que ela atinja uma fonte de luz

Existem inúmeras técnicas com diferentes graus de realismo que podem ser usadas para calcular a luz de um determinado ponto da cena.

TL; DR A idéia principal é que um rastreador de raios tenta ser fisicamente preciso quando se trata de iluminação e, portanto, tem muito mais cálculos a fazer por pixel (às vezes dispara milhares de raios) e, por outro lado, os jogos obtêm sua velocidade desenhando pedaços maiores da tela com cálculos de luz mais simples e muitos truques de sombreamento que deixam a aparência realista.

xoryouyou
fonte
7

Você está comparando maçãs com laranjas

O jogo é como a porta de visualização no seu aplicativo de modelagem. Você pode usar a viewport para renderização e obterá as mesmas velocidades de 60fps.

Não há razão para que você não possa obter gráficos em tempo real muito bons com o software de modelagem como Maya ou 3DS Max. Resultados comparáveis ​​a muitos jogos. Eles têm shaders de viewport, assim como os jogos. Há também uma opção de renderização de janela de visualização que divide os quadros no disco o mais rápido possível (eu fiz renderizações em full HD a 30 fps do Maya). Tudo o que você precisa fazer é parar de usar os raytracers de software fornecidos.

Existem algumas diferenças, no entanto. A principal diferença é que você, como usuário, não otimiza tanto as coisas quanto os desenvolvedores de jogos (a otimização está usando todos os truques do livro). Segundo, suas primitivas de animação funcionam na CPU porque você precisa da flexibilidade. Nos jogos, pode-se dar ao luxo de fazer otimizações. Ao todo, você paga por não ter uma equipe de programação ao seu lado.

De fato, muitas coisas podem ter sido pré-computadas, por isso não são muito mais rápidas, apenas melhor organizadas. Assar sua iluminação indireta superará resultados não cozidos todos os dias.

Por que os raytracers são mais lentos?

Eles não são *, apenas tende a fazer mais trabalho em um traçador de raios, porque é fácil. Recurso por recurso, eles não são muito mais lentos nos ciclos de computação. Por exemplo, não há necessidade de um traçador de raios lançar raios secundários (reflexos da vida, nesse caso, o traçador de raios separará a geometria, ou nem a carregará, de fato, o raio mental faz exatamente isso). Geralmente é feito porque é trivial fazê-lo e essa é a clara vantagem dos traçadores de raios. Você pode configurá-los para rodar na CPU em alguns casos. Eles são otimizados apenas para coisas diferentes:

  1. Emitindo dados para o disco, não apenas quadros, mas todos os dados. Algo que quebraria a velocidade da maioria dos jogos instantaneamente.

  2. Trabalhando em hardware geral. A GPU é muito mais rápida para determinadas coisas quando você otimiza para a GPU. Mas ele não funciona para todas as cargas, na verdade, uma CPU Intel é mais rápida em computação do que a GPU. A GPU é massivamente paralela à da CPU. A arquitetura vence se você puder permanecer na GPU e minimizar a transferência e otimizar a arquitetura da GPU.

Então você paga pela flexibilidade e facilidade de uso. Mas sim, eu admito que Maya e Max sofrem de extrema idade avançada. Então eles poderiam ser mais rápidos.

TL; DR A diferença está principalmente na otimização (leia muitos truques) e nos recursos externos disponíveis.

PS: Existe um equívoco de que isso ocorre porque é mais fisicamente correto. Certamente pode ser, mas o traçador de raios não é inerentemente mais fisicamente correto que um jogo comum ou qualquer outro cálculo. De fato, muitos jogos usam modelos realmente bons, enquanto muitos modeladores não.

* Consulte http://www.graphics.cornell.edu/~bjw/mca.pdf

joojaa
fonte
2
Desculpe, mas isso está errado. O OpenGL e o DirectX usam aproximações que são inerentemente mais rápidas que o raytracing preciso. O ponto principal dos gráficos 3D acelerados é ter algoritmos que se equilibram entre realismo e velocidade, com boa aparência para os usos mais práticos: jogos, CAD, etc.
IMil
2
O @IMil OpenGL pode ser usado para raytracing. É mais rápido porque é otimizado para o hardware em questão. Mas o Maya não precisa traçar o traço. O Maya e o Max podem usar o openGL e o directX tanto quanto o seu jogo. A janela de exibição Mayas (e 3ds) é opengl ou directX (sua escolha). O fato de o seu processador ser mais lento em determinadas cargas de processamento paralelo é outra coisa. Então a resposta permanece. As configurações padrão do maya não são mais realistas do que uma linha de verificação padrão.
joojaa
5

Visualização em tempo real

Trabalhando no lado VFX do setor, se você está falando sobre visualizações de viewport em tempo real e não renderização de produção, o Maya e o 3DS Max também usam o OpenGL (ou possivelmente o DirectX - praticamente o mesmo).

Uma das principais diferenças conceituais entre o software de animação VFX e os jogos é o nível de suposições que eles podem fazer. Por exemplo, no software VFX, não é incomum o artista carregar uma malha de caracteres única e contínua que abrange centenas de milhares a milhões de polígonos. Os jogos tendem a otimizar mais para uma cena grande que consiste em uma carga de malhas simples e otimizadas (milhares de triângulos cada).

Renderização de produção e rastreamento de caminho

O software VFX também enfatiza não a visualização em tempo real, mas a renderização da produção, na qual os raios de luz são realmente simulados um de cada vez. A pré-visualização em tempo real geralmente é apenas isso, uma "pré-visualização" do resultado da produção de maior qualidade.

Ultimamente, os jogos estão fazendo um belo trabalho ao aproximar muitos desses efeitos, como profundidade de campo em tempo real, sombras suaves, reflexos difusos etc., mas estão na categoria de aproximação para serviços pesados ​​(por exemplo: mapas de cubos embaçados para reflexões em vez de simular raios de luz).

Conteúdo

Voltando a esse assunto, as suposições de conteúdo entre um software VFX e um jogo diferem bastante. O foco principal de um software VFX é permitir a criação de qualquer tipo possível de conteúdo (pelo menos esse é o ideal, embora na prática quase sempre não esteja próximo). Os jogos se concentram no conteúdo com suposições muito mais pesadas (todos os modelos devem ter milhares de triângulos, mapas normais devem ser aplicados a detalhes falsos, na verdade não devemos ter 13 bilhões de partículas, os personagens não são animados pelos músculos plataformas e mapas de tensão, etc).

Devido a essas suposições, os mecanismos de jogo geralmente podem aplicar técnicas de aceleração com mais facilidade, como a seleção de frustum, que lhes permite manter uma alta taxa de quadros interativa. Eles podem fazer suposições de que algum conteúdo será estático, detalhado antecipadamente. O software VFX não pode facilmente fazer esses tipos de suposições, dado o grau muito maior de flexibilidade na criação de conteúdo.

Games Do it Better

Essa pode ser uma visão controversa, mas a indústria de jogos é muito mais lucrativa que o software VFX. Seus orçamentos para um único jogo podem chegar a centenas de milhões de dólares, e eles podem se dar ao luxo de continuar lançando os motores da próxima geração a cada poucos anos. Seus esforços de pesquisa e desenvolvimento são incríveis, e há centenas e centenas de títulos de jogos sendo lançados o tempo todo.

Por outro lado, os softwares VFX e CAD não são tão lucrativos. A pesquisa e o desenvolvimento geralmente são terceirizados por pesquisadores que trabalham em ambientes acadêmicos, com muita indústria implementando técnicas publicadas muitos anos antes, como se fosse algo novo. Portanto, o software VFX, mesmo proveniente de empresas tão grandes quanto o AutoDesk, geralmente não é tão "avançado" quanto os mais recentes mecanismos de jogos AAA.

Eles também tendem a ter um legado muito mais longo. O Maya é um produto de 17 anos, por exemplo. Foi reformado muito, mas sua arquitetura principal ainda é a mesma. Isso pode ser análogo a tentar pegar o Quake 2 e continuar atualizando e atualizando até 2015. Os esforços podem ser excelentes, mas provavelmente não corresponderão ao Unreal Engine 4.

TL; DR

Enfim, essa é uma pequena opinião sobre esse lado do tópico. Eu não conseguia entender se você estava falando sobre visualizações em tempo real nas janelas de exibição ou na renderização da produção, então tentei cobrir um pouco de ambas.

Dragon Energy
fonte
É também uma questão de tempo. Mesmo se você pudesse renderizar, digamos, 60 fps e obter resultados aceitáveis, ele raramente é otimizado. Digamos que demore 3 minutos por quadro e você tenha 200 quadros para renderizar. Você pode obter os 60 qps contratando um gravador de sombreador e otimizando, mas isso leva pelo menos um dia ou dois do seu tempo. Mas 200 quadros a 3 minutos levam apenas 10 horas, para que você economize esse custo. Na prática, é mais barato comprar mais hardware e não se preocupar muito com isso. Os jogos simplesmente não podem adotar essa abordagem.
Joojaa
@joojaa Também é um pouco mais complexo. Apenas fazer shaders realmente bons em tempo real para o Maya pode levar um ano ou mais, no mínimo, até mesmo de um desenvolvedor experiente de shader (com ganhos menores), porque a flexibilidade do sistema nodal é direcionada à renderização da produção. Seria necessária uma mentalidade de engenharia reversa e um novo tipo de técnica de geração de código GLSL / HLSL (como um sistema de meta programação) para converter esses nós de shader de uso geral em um sistema de sombreamento em tempo real que captura a gama de efeitos do UE 4 , por exemplo,
Dragon Energy
O mecanismo de shader do @joojaa UE 4 é direcionado diretamente para uma mentalidade de PBR muito aproximada (um subconjunto muito pequeno do shader de PBR da Disney). Eles projetaram até o sistema de materiais para um objetivo rápido e em tempo real, em vez de começar com algo como o sistema de materiais de Maya, que não é de todo (projetado para rastreamento de raios). Mesmo que o mais brilhante do UE 4 trabalhasse no VP 2.0, eles teriam que trabalhar noite e dia por possivelmente anos para obter os mesmos resultados em um projeto que não pretendia fazer esse tipo de coisa.
Dragon Energy
mas isso é um custo único, mesmo que você tenha esse pipeline em um aplicativo VFX, cada cena pode precisar dessa otimização extra. Não há razão para que um usuário maya não possa renderizar no UDK, por exemplo, para a mesma plataforma de desenvolvimento de shader.
Joojaa