Ideias: Como renderizar interativamente grandes séries de imagens usando renderização de volume direto baseado em GPU

StackOverflow https://stackoverflow.com/questions/4255737

Pergunta

Estou procurando como converter uma série de imagens TIFF de 30+ GB, 2000 mais de cor em um conjunto de dados, capaz de ser visualizado em tempo real (taxas de quadros interativos) usando renderização de volume baseada em GPU (usando o OpenCL / OpenGL / GLSL). Quero usar uma abordagem de visualização de volume direta em vez de encaixe de superfície (ou seja, Raycasting em vez de marchando cubos).

O problema é duplo, primeiro preciso converter minhas imagens em um conjunto de dados 3D. A primeira coisa que me veio à mente é ver todas as imagens como texturas 2D e simplesmente empilhá -las para criar uma textura 3D.

O segundo problema são as taxas de quadros interativas. Para isso, provavelmente precisarei de algum tipo de amostragem em combinação com "detalhes sob demanda" carregando o conjunto de dados de alta resolução ao ampliar ou algo assim.

Uma abordagem de primeiro ponto que encontrei é:

  1. Poligonização dos dados completos de volume através do processamento de camada por camada e geração de textura de imagem correspondente;
  2. Realização de todas as transformações essenciais por meio de operações de processador de vértices;
  3. dividir fatias poligonais em fragmentos menores, onde as coordenadas de profundidade e textura correspondentes são registradas;
  4. No processamento de fragmentos, implantando a técnica de programação do Shader Shader para aprimorar a renderização de fragmentos.

Mas não tenho idéias concretas de como começar a implementar essa abordagem.

Eu adoraria ver algumas idéias ou idéias novas sobre como começar a implementar a abordagem mostrada acima.

Foi útil?

Solução

Se alguém tiver novas idéias nessa área, provavelmente estará tentando desenvolvê -las e publicá -las. É uma área contínua de pesquisa.

Em sua "abordagem pontual", parece que você descreveu o método básico de renderização de volume baseada em fatias. Isso pode dar bons resultados, mas muitas pessoas estão mudando para um método de hardware Raycasting. Há um exemplo disso no CUDA SDK se você estiver interessado.

Um bom método para renderização de volume hierárquico foi detalhado por Crassin et al. em seu artigo chamado Gigavoxels. Ele usa uma abordagem baseada em Octree, que carrega apenas tijolos necessários na memória quando necessários.

Um livro introdutório muito bom nesta área é Gráficos de volume em tempo real.

Outras dicas

Eu fiz um pouco de renderização de volume, embora meu código tenha gerado uma istoSurface usando cubos de marcha e tenha exibido isso. No entanto, na minha modesta auto-educação da renderização de volume, encontrei um artigo curto interessante: Renderização de volume em hardware comum de computador. Ele vem com o exemplo de origem também. Eu nunca cheguei a conferir, mas parecia promissor. É direto, no entanto, não o OpenGL. Talvez possa lhe dar algumas idéias e um lugar para começar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top