No meu jogo, há um terreno semelhante ao Minecraft feito de cubos. Gero um buffer de vértice a partir dos dados do voxel e uso um atlas de textura para aparências de diferentes blocos:
O problema é que a textura de cubos distantes interpola com peças adjacentes no atlas de textura. Isso resulta em linhas de cores erradas entre os cubos (talvez seja necessário visualizar a captura de tela abaixo em tamanho real para ver as falhas gráficas):
Por enquanto, uso essas configurações de interpolação, mas tentei todas as combinações e mesmo GL_NEAREST
sem o mipmapping não fornece melhores resultados.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
Também tentei adicionar um deslocamento nas coordenadas da textura para escolher uma área um pouco menor do ladrilho, mas como o efeito indesejado depende da distância da câmera, isso não pode resolver o problema completamente. A longas distâncias, as faixas ocorrem de qualquer maneira.
Como posso resolver esse sangramento de textura? Como o uso de um atlas de textura é uma técnica popular, pode haver uma abordagem comum. Infelizmente, por alguns motivos explicados nos comentários, não posso mudar para diferentes texturas ou matrizes de textura.
GL_LINEAR
que dá um resultado semelhante, ou escolhe o pixel mais próximo, GL_NEAREST
que também resulta em listras entre os blocos. A última opção mencionada diminui, mas não elimina a falha de pixel.