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.
Respostas:
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 :
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:
fonte
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
fonte
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?
fonte
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
fonte