O que são texturas 3D?

31

O Google falhou comigo, não encontrei nada informativo. Então, talvez o GameDev possa :).

  • O que são texturas 3D?
  • Quando eles são usados?
  • Custos de desempenho?
  • Como eles são armazenados?

Tenho muitas idéias vagas, mas nenhuma definição "definitiva".

Todas as referências a exemplos ou tutoriais são apreciadas, especialmente na renderização de sistemas de partículas via texturas 3D.

deceleratedcaviar
fonte
Não sei ao certo o que você está perguntando. Você quer dizer o mapeamento normal e de relevo para simular a variação de superfície em áreas "planas"?
coderanger
2
Acho que o que ele quer dizer é mais como GL_TEXTURE_3D, etc.
Luker
1
Além disso, consulte esta pergunta: Como o mapeamento de textura UVW funciona? (e suas respostas).
precisa

Respostas:

34

A textura 3D funciona como uma textura regular. Mas é verdadeiramente 3D. As texturas 2D possuem cabos UV, o 3D possui UVW (você tinha que usá-las de maneira adequada). As cordas de textura são cubos unitários (0 - 1, 0 - 1, 0 - 1).

Possível uso :

  • efeitos volumétricos em jogos (fogo, fumaça, raios de luz, nevoeiro realista)
  • cache de luz para iluminação global em tempo real ( CryEngine por exemplo)
  • científico (ressonância magnética, tomografias computadorizadas são salvas em volumes)

Desempenho : O
mesmo que a textura normal - super rápido (acesso mais rápido à memória na gpu). Armazenado em cache para threads e otimizado para a situação em que threads próximos (pixel shaders) estão procurando valores próximos.

Pode ser lido como ponto ou usado como amostragem linear (interpolação tri-linear nativa. Interpolação bi-linear Eq em textura 2D).

Eles são armazenados na memória como uma matriz de texturas 2D.

Mipmapping na textura 3D:
insira a descrição da imagem aqui

Notabene
fonte
14

Texturas 3D ou 'Texturas de volume' são uma série de texturas normais organizadas em fatias, como um baralho de cartas. Eles são usados ​​na renderização volumétrica, que geralmente pega dados do mundo real, como tomografias computadorizadas, e depois os manipula. Em jogos e gráficos, às vezes é para efeitos volumétricos como fumaça, onde você troca a flexibilidade de um sistema de partículas pelo custo fixo e pelo cálculo fácil (e facilmente paralelizável) de uma textura de volume. Em uma textura de volume, é realmente fácil encontrar os vizinhos mais próximos, mas isso pode ser um problema, pois é um sistema de partículas mais tradicional composto de pontos soltos.

Além disso, alguns objetos complexos se beneficiam do uso de texturas de volume, como grama:

A fumaça da Nvidia em uma caixa é um ótimo exemplo:

http://www.youtube.com/watch?v=9AS4xV-CK14

Além disso, a renderização da dispersão da luz é mais fácil quando você tem um volume para renderizar

Lutero
fonte
7

Além das respostas existentes, eu gosto de como as texturas 3D também podem ser criadas proceduralmente (na verdade, faz mais sentido do que uma textura processual 2D), como ruídos e fractais que fornecerão detalhes de textura bons e não deformados a qualquer superfície angular sem ter para selecionar um modelo de projeção (UV, planar, cilíndrico, esférico e assim por diante).

Em vez de amostrar uma camada de bitmap no espaço 3D, você obtém um valor distinto para cada ponto no espaço 3D com um algoritmo básico - que basicamente fornece uma resolução infinita de textura e sem problemas com texturas esticadas em polígonos angulares. Isso é "texturas" 3D ou, melhor dizendo, sombreamento de superfície ^^

Na verdade, estou muito cansado de toda a textura de bitmap no desenvolvimento de jogos, quando quero sujar uma nave espacial, quero aplicar algumas camadas de fórmulas de ruído e não precisar pintar um bitmap de resolução limitada. Um velho lustre 3D pode sonhar, não pode;)

No momento, pré-cozer essas soluções doces de superfície de filme em 3D em cores, bitmaps UV normais e especulares são a única diversão que eu recebo e parece irritantemente limitada. A cena demo (como sempre) tende a (pré) gerar texturas proceduralmente para 3D em tempo real, mas é difícil encontrar boas ferramentas para suportar esse fluxo de trabalho, do design ao tempo de execução. A maioria das abordagens processuais de desenvolvimento de jogos parece ser sobre geração de malha. Você quer saber o quanto o pipeline do shader, com a ajuda de um mapa de profundidade / renderização diferida, poderia lidar com algos de ruído 3D da velha escola?

... em vez de tentar descobrir como mapear uma imagem de textura parametricamente na superfície da sua forma, a natureza volumétrica das texturas baseadas em ruído permite que você as avalie simplesmente nos locais (x, y, z) do pixel shader. Dessa maneira, você efetivamente esculpe sua textura em um material sólido, o que geralmente é muito mais direto do que tentar elaborar um mapeamento paramétrico razoável e sem distorção.

Esses tipos de texturas procedimentais volumétricas baseadas em ruído são pilares dos longas-metragens, onde os sombreadores não exigem desempenho em tempo real ... todos os filmes de efeitos especiais hoje fazem uso pesado de sombreadores processuais baseados em ruído ... é altamente dependente sobre o uso extensivo da função de ruído nos pixel shaders escritos em idiomas como o RenderMan da Pixar. Com uma boa implementação da função de ruído disponível para uso em tempo real em GPUs, espero ver algumas das interessantes idéias visuais dos filmes incorporados à próxima geração de entretenimento interativo na área de trabalho e no console. http://http.developer.nvidia.com/GPUGems/gpugems_ch05.html

Oskar Duveborn
fonte
Leitura muito interessante! Estou tendo problemas para visualizar o que você quer dizer no seu segundo parágrafo.
Deceleratedcaviar
Talvez eu pudesse fazer um diagrama. O que quero dizer é que, em vez de amostrar um bitmap, a cor (ou o que você estiver procurando) é simplesmente decidida por um algoritmo de ruído. Dessa forma, não há interpolação entre os pixels de bitmap necessários (já que você provavelmente não amostrará em uma posição perfeita de 1 x 1 pixel) e a resolução se torna, em teoria, infinita. É um pouco como calcular os juros de uma taxa de juros específica, em vez de usar uma tabela de pesquisa pré-calculada em que existem determinadas etapas / intervalos (= resolução de bitmap).
Oskar Duveborn
Depois de ler a totalidade do artigo referenciado. Eu tenho uma compreensão muito melhor, mas acho ref. imagens beneficiariam ambas as partes: os inseguros e os tl; dr. :)
deceleratedcaviar
0

Os padrões de textura 3D são aplicados aos voxels de um corpo volumétrico da mesma maneira que os padrões de textura 2D são aplicados aos pixels de um polígono 2D. Aqui está um exemplo de uma textura volumétrica 3D em JavaScript (requer WebGL):

http://kirox.de/test/Surface.html

pressione [v], gire o corpo e altere o gradiente da textura gerada com a roda do mouse

oiofante
fonte