Estou brincando com a simples modelagem 3D processual para criar pequenos edifícios para impressão 3D. Um exemplo:
Para tornar os modelos mais legíveis na tela, implementei o mapeamento básico de sombras para uma única luz direcional. Como minha cena não está mudando, apenas renderizo o mapa de sombras uma vez usando uma caixa alinhada por eixo da cena para descobrir quais devem ser os limites do mapa de sombras. As sombras e os limites parecem ter todas as matrizes corretas, mas chegar um pouco mais perto parece terrível:
Pela leitura que fiz, compreendo o peter panning e o que devo fazer sobre isso, mas as arestas irregulares, que acredito serem uma forma de aliasing projetivo, parecem tão ruins que acho que algo está errado na minha implementação básica.
Eu cortei o pixel shader para mostrar os limites da sombra texel:
Eu tenho filtragem bilinear na textura (sem ela, eu tenho uma grave acne na sombra). Infelizmente, minha tentativa de PCF também falhou - parece igualmente irregular:
Aqui está um exemplo de caso com a filtragem bilinear desativada:
Isso se parece com um aliasing projetivo "típico"? Poderia a renderização dinâmica do mapa de sombras, usando a vista cortada na cena, possivelmente em cascata, resolver o problema?
Edit: Adicionando um close de filtragem bilinear, comparação pós-sombra, apenas para mostrar o que recebo. A acne com sombra ruim aparece por causa das bordas internas; Estou modelando com blocos virtuais empilhados e não estou fazendo uma operação de união adequada. Pela minha leitura, a implementação de operações booleanas no poliedro não é trivial, mas também permitirá a implementação de volumes estáticos de sombra e a limpeza de alguns softwares de impressão 3D.
fonte
Você disse que "... filtragem bilinear na textura ...". Parece que você está interpolando os valores de profundidade do mapa de sombras. A maneira correta de usar a interpolação com o mapa de sombra é aplicá-la aos resultados dos testes de sombra (tanto quanto me lembro, o OpenGL suporta isso). Você pode até combinar a interpolação dos resultados dos testes de sombra com o PCF, o que proporcionará resultados muito melhores. No entanto, como você deve ter notado, o alias é uma praga que sempre busca o mapeamento de sombras :)
Embora eu entenda que você está procurando soluções em relação ao mapeamento de sombra (mesmo porque é bastante simples de implementar), você já considerou o uso de volumes de sombra? É muito mais complicado de implementar, mas não sofre nenhum tipo de alias, e acho que se encaixaria bem nos seus propósitos.
fonte