Estou trabalhando com o XNA em um jogo em 3D e estou tentando ter um ambiente adequado e agradável. Na verdade, segui um tutorial para criar um terreno a partir de um mapa de altura. Para texturizá-lo, apenas aplico uma textura de grama e ladrilhoo várias vezes.
Mas o que eu quero fazer é ter uma textura realmente realista, mas também gerá-la automaticamente (por exemplo, se eu quiser usar o ruído Perlin para gerar um terreno e depois texturizá-lo).
Eu já aprendi sobre multi-texturização, carregando um arquivo de mapa com cores diferentes para diferentes texturas, mas não acho que isso seja realmente eficiente; por exemplo, para falésias ou áreas muito íngremes, ele exibirá uma textura ruim, pois é uma vista do topo. (Além disso, não sei como vou desenhar estradas ou caminhos de terra com isso.)
Estou procurando uma solução eficiente para mapear de maneira realista o mapeamento de terrenos gerados proceduralmente.
Respostas:
Eu acho que você não está preocupado com mapas de mesclagem ou respingos de textura (como isso é independente do seu mapeamento UV). Como você pediu especificamente para minimizar a distorção causada pelo mapeamento, consulte a seção 1.5 deste artigo da GPU Gems:
https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch01.html
Isso poderia funcionar mesmo em terrenos gerados proceduralmente. O conceito também é conhecido como "texturização triplanar" .
EDIÇÃO MAIS TARDE: Testei a técnica em meu próprio renderizador de terreno, sem uvs pré-computados para o mapeamento. Tudo o que você precisa fazer é calcular 3 conjuntos de UVs para os 3 planos de projeção diferentes (XY, YZ e ZX). Isso pode ser alcançado usando trechos simples de vértice e fragmento de shader:
VShader:
FShader:
fonte
Você pode definir um conjunto de texturas (grama, sujeira, pedra) e usá-las. Digamos que usando essas três camadas (rocha na parte inferior, sujeira na parte superior e grama na parte superior), você pode definir três canais alfa para definir quanto de cada textura é visível. Comece com um mapa de ruído simples para seus canais alfa e talvez leve em conta a inclinação do terreno. Quanto mais inclinação, mais rocha brilha. Esta é uma técnica chamada 'Textura Splatting', tanto quanto me lembro. Aqui estão alguns links para você começar. Respingos avançados de textura (gamasutra)
TextureSplatting (charlesbloom, o que eu usei para começar com este tópico)
Você deve conseguir resultados com boa aparência tópico bastante rápido e muito gratificante
fonte