Acabei de ver um vídeo sobre o que os editores chamam de "próximo grande passo após a invenção do 3D". Segundo a pessoa que fala, eles usam uma quantidade enorme de átomos agrupados em nuvens, em vez de polígonos, para atingir um nível de detalhes ilimitados .
Eles fizeram o possível para tornar o vídeo compreensível para pessoas sem conhecimento de nenhuma técnica de renderização e, portanto, ou para outros fins, deixaram de fora todos os detalhes de como o mecanismo funciona.
O nível de detalhe em seu vídeo parece bastante impressionante para mim.
- Como é possível renderizar cenas usando átomos personalizados em vez de polígonos no hardware atual? (Velocidade, memória)
- Se isso é real, por que ninguém mais pensou nisso até agora?
Como desenvolvedor de OpenGL, estou realmente confuso com isso e gostaria muito de ouvir o que os especialistas têm a dizer. Portanto, também não quero que isso pareça um anúncio barato e incluirei o link do vídeo somente se solicitado, na seção de comentários.
Respostas:
É fácil fazer isso. Usando um Octtree, você simplesmente divide o mundo em pedaços progressivamente menores até atingir o nível de detalhe necessário. Pode ser do tamanho de um grão de areia, por exemplo. Pense Minecraft levado ao extremo.
O que você renderiza então? Se os detalhes forem pequenos o suficiente, considere a possibilidade de renderizar blocos - os nós das folhas da árvore octológica. Outras opções incluem esferas ou mesmo primitivas geométricas. Uma cor e um normal podem ser armazenados em cada nó e, para um LOD reduzido, é possível armazenar informações compostas em níveis mais altos da árvore.
Como você pode gerenciar tantos dados? Se a árvore é uma estrutura de dados real, você pode fazer com que vários ponteiros façam referência às mesmas subárvores, como reutilizar uma textura, mas também inclui geometria. O truque é obter o máximo de reutilização possível em todos os níveis. Por exemplo, se você conectar 4 octantes em arranjo tetraédrico ao mesmo nó filho em todos os níveis, poderá criar um fractal 3d sierpinsky muito grande usando quase nenhuma memória. A cena real será muito maior, é claro.
O problema é que ele funcionará apenas para geometria estática, porque a animação real exigiria a manipulação de todos os dados a cada quadro. A renderização, no entanto, especialmente com a variável LOD, não é problema.
Como renderizar uma coisa dessas? Sou um grande fã de ray tracing e lida com esse tipo de coisa muito bem com e sem uma GPU.
Tudo isso é especulação, é claro. Não tenho informações específicas sobre o caso de que você está falando. E agora, algo relacionado, mas diferente:
Uma enorme quantidade de dados renderizados
EDIT E aqui está uma que eu fiz, mas alterei deliberadamente as normais para tornar as caixas mais aparentes:
Stanford bunny em voxels
Essa taxa de quadros estava em um único núcleo IIRC. Dobrar a profundidade da árvore geralmente diminui a taxa de quadros pela metade, enquanto o uso de múltiplos núcleos aumenta de tamanho. Normalmente mantenho primitivas (triângulos e coisas assim) em minha árvore oculta, mas, para sorrisos, decidi renderizar os nós das folhas da própria árvore nesse caso. Melhor desempenho pode ser obtido se você otimizar um método específico, é claro.
Em algum lugar da ompf há um carro feito com voxels que é realmente fantástico - exceto que é estático. Não consigo encontrá-lo agora ...
fonte
Ao assistir ao vídeo, nada indica para mim que algum hardware especial foi usado. De fato, afirma-se que isso é executado em software a 20fps, a menos que eu tenha perdido alguma coisa.
Talvez você se surpreenda ao saber que houve muitos desenvolvimentos na renderização em tempo real usando uma variedade de tecnologias como traçado de raios, renderização de voxel e respingos de superfície. É difícil dizer o que foi usado neste caso. (Se você estiver interessado, consulte http://igad2.nhtv.nl/ompf2/ para obter um ótimo fórum de rastreamento de raios em tempo real ou http://www.atomontage.com/ para obter um mecanismo voxel interessante. Google "splatting de superfície" para obter ótimos links sobre esse tópico)
Se você olhar para o filme, perceberá que toda a geometria é estática e, embora detalhada, existe bastante repetição de objetos, o que pode sugerir instâncias.
E provavelmente haverá muitos abates agressivos, níveis de detalhe e particionamento de espaço acontecendo.
Se você observar a qualidade visual (não a complexidade geométrica), ela não parecerá tão impressionante. De fato, parece bastante plano. A sombra mostrada pode ser agrupada nos dados e não ser avaliada em tempo real.
Eu adoraria ver uma demonstração com geometria animada e iluminação dinâmica.
A menos que eu esteja completamente errado (e não seria a primeira vez que estou), minha primeira resposta sugeriria um uso (talvez muito inteligente) da tecnologia existente, talvez otimizada e estendida para criar esta demonstração. Torná-lo um mecanismo de jogo real, com todas as outras tarefas além de renderizar a geometria estática que isso inclui, é um jogo totalmente diferente.
Claro que tudo isso é pura especulação (o que me torna muito divertido). Tudo o que estou dizendo é que isso não é necessariamente falso (na verdade, acho que ainda não estou impressionado), mas provavelmente não é tão inovador quanto parece.
fonte
Na verdade, esses átomos não são tão mágicos / especiais / estranhos ao hardware gráfico atual. É apenas um tipo de renderização baseada em nuvem de pontos ou voxel. Então, em vez de triângulos, eles renderizam pontos ou caixas, nada inatingível no hardware atual.
Já foi e já foi feito e não é a super invenção, mas talvez eles tenham criado uma maneira mais eficiente de economizar tempo e memória. Embora pareça e pareça bastante interessante, você deve gravar este vídeo com um pouco de sal. A renderização de 100.000 pontos em vez de um polígono totalmente texturizado (que já ocupa apenas alguns pixels na tela) não melhora a qualidade dos seus gráficos por um fator de 100.000.
E, a propósito, ouvi dizer que o software de identificação também está testando a renderização voxel acelerada por GPU, mas tenho um pouco mais de confiança em John Carmack do que no alto-falante deste vídeo :)
fonte
Isso foi uma farsa de investimento.
Quanto à ideia, não é viável no hardware não dedicado atual. A quantidade de pontos que você precisaria para evitar lacunas ao olhar para algo mais próximo está muito além da quantidade de pontos que você poderia disparar na RAM de hoje. Mesmo assim, não conheço nenhuma estrutura de dados ou algoritmo de pesquisa que renderia algo próximo ao desempenho mostrado na demonstração. E mesmo que , de alguma maneira, fosse possível pesquisar esses pontos em tempo real, falhas de cache e largura de banda de memória garantiriam que você não pudesse.
Não duvido que essas imagens não possam ser obtidas em tempo real, apenas não com o método apresentado. Meu palpite é que as demos foram renderizadas com voxels, que são usados há décadas e já podem produzir detalhes bastante altos em tempo real: http://www.youtube.com/watch?v=BKEfxM6girI http://www.youtube .com / watch? v = VpEpAFGplnI
fonte
Pelo que vi, parece que eles estão usando formas paramétricas em vez de formas poligonais simples - em outras palavras, elas alteram a geometria de acordo com a resolução necessária.
Isso pode ser feito usando técnicas como sombreadores de geometria e ruído permanente.
Outra possibilidade é usar o GPGPU (por exemplo, CUDA) para renderizar cenas incluindo não polígonos e executar o rastreamento de raios (para ordem z e sombras). Outra possibilidade é um hardware personalizado que renderiza fórmulas em vez de triângulos
fonte
Penso em todas as suas alegações, a compressão da memória parece um exagero, eu poderia entender algo como a compressão RLE tendo um grande impacto. No final, acho que esse sistema terá muitos "profissionais", mas muitos "contras", como rastreamento de raios ou renderização iso-superficial com cubos em marcha.
Tanto quanto render "trilhões" de átomos; Eu não acho que eles estão dizendo isso. O que eles estão fazendo é procurar átomos W * H, ou seja, um átomo por pixel na tela. Isso poderia ser realizado de várias maneiras lentas e difíceis. Algumas maneiras de acelerar isso são as árvores KD e árvores BSP, Octrees etc. No entanto, no final, muitos dados estão sendo classificados e o fato de que sua demonstração aparentemente classifica 1440x720 átomos, mais de uma vez por quadro, por causa das sombras / reflexões em sua demo, é incrível. Então, elogios!
fonte
o modo como funciona é muito mais simples do que você imagina: em vez de pré-carregar, digamos, no nível do jogo, ele carrega apenas uma única tela, um ou alguns átomos por pixel na tela, nada mais, o jogo / mecanismo prediz o que o os próximos quadros são e essa é a única coisa carregada, apenas a parte do objeto visível é renderizada, não o objeto inteiro em si. PRÓS: quanto definição e resolução o monitor puder suportar, baixo uso de memória CONTRAS: a taxa de leitura do disco é bastante grande e pode levar a uma baixa taxa de quadros.
fonte