A pergunta imediata é: no HLSL, como posso orientar uma superfície normal gerada no espaço UV para poder aplicá-la a uma face de cubo?
O projeto geral é que estou tentando construir um gerador de planeta procedural. Estou usando um cubo projetado para uma esfera em que cada face é um quad-tree. O projeto intermediário é que eu quero gerar um mapa normal para o terreno. Acho que a melhor maneira de fazer isso (e entender o que estou fazendo) é gerar primeiro os normais para a versão do cubo e depois trabalhar as transformações para deformar esses normais na esfera.
Idealmente, o método não envolveria código de ramificação com base na face em que estou trabalhando (ou seja, se estamos no lado superior do cubo, então U = X e V = Y). Em outras palavras, o que eu estou esperando é um pouco de magia matemática como "Oh, basta cruzar o terreno normal pelo produto escalar do cubo com a face normal e blá blá blá".
20/09/10 ETA:
Eu sei como calcular normais para uma superfície plana. Meu problema subsequente é duplo:
- Como eu giro o mapa normal para que ele seja orientado corretamente em cada uma das faces do cubo?
- como distorço o mapa normal plano para envolver a esfera?
Encontrei uma solução que usa uma matriz jacobiana, mas não consigo fazê-la funcionar. Mesmo quando todas as normais estão apontando para cima (ou seja, uma superfície plana), o código HLSL envolvendo o jacobiano atrapalha totalmente a iluminação - então isso não me faz confiar na minha implementação da solução.