Suponha que exista algum valor p
, calculado por quadro, que varie continuamente sobre a superfície de um objeto. O valor de p
determina a densidade de algum padrão na superfície. Por exemplo, em um caso com apenas duas densidades possíveis, se p < 0.3
for alta densidade, caso contrário, é baixo.
Pensei em uma solução simples de alto nível: crie duas texturas, cada uma com densidades diferentes, e com base no valor da p
amostra a partir da apropriada. No entanto, há um problema com a fronteira entre altas e baixas densidades.
Aqui está um exemplo para ilustrar o problema (observe que meu problema NÃO é exclusivo desse exemplo de padrão de pontos. Descrevo os padrões com os quais estou trabalhando mais adiante):
E aqui está o limite entre baixa e alta (exibido na textura de alta densidade, mas isso não é relevante.) Se abaixo da linha, isso implica que a textura de alta densidade deve ser amostrada.
E, finalmente, aqui está a comparação entre o que é desejado e o que realmente aconteceria usando este método:
O problema é que quando um círculo somente de alta densidade cruza a linha, ele será ignorado quando p
indicar a textura de baixa densidade a ser amostrada, resultando em um círculo truncado. Eu não sei como resolver esse problema porque p
varia em cada quadro, por isso não posso simplesmente 'estabelecer' um limite entre as duas densidades. É fácil evitar o problema inverso criando a textura de alta densidade a partir da inferior (por exemplo, se um círculo estiver na textura de baixa densidade, verifique se está na textura de alta densidade).
Estou interessado em saber se alguém tem uma maneira de melhorar minha solução ou se possui outro método completamente. A restrição aqui é que p
é calculada por quadro em tempo real. Outra restrição está relacionada à textura do padrão: o padrão é preto e branco, onde preto é o padrão e branco é o plano de fundo (como os círculos no exemplo). O padrão pode não ser apenas formas idênticas repetidas, mas qualquer disposição de formas pretas arbitrárias sobre um fundo branco. (Talvez padrão seja a escolha errada da palavra.)
Eu não estou familiarizado com a pesquisa nesse campo, então não tinha certeza de quais palavras-chave pesquisar, então eu apreciaria se alguém pudesse me indicar a direção certa.
Respostas:
Para garantir que as formas do padrão estejam sempre presentes ou ausentes, nunca cortadas, é necessário garantir que o mesmo
p
valor seja usado para todos os texels da forma. No seu exemplo de círculos, todos os texels de um determinado círculo precisam concordarp
.Suponho que você tenha alguma maneira de avaliar
p
em um determinado ponto da superfície (se é pesquisado a partir de uma textura ou calculado a partir de alguma função). Então, uma maneira de garantir que um grupo de texels obtenha o mesmop
valor é garantir que todos procurem no mesmo ponto.Os UVs deste ponto de avaliação podem ser armazenados em canais extras da textura do padrão. Por exemplo, você pode fazer com que os canais vermelho e verde armazenem as coordenadas UV nas quais avaliar
p
, o canal azul armazene o limite no qual ativar esse elemento do padrão e o alfa armazene o nível de cinza antialias do padrão a ser exibido. Os dados do limite de UV + também podem estar em uma textura secundária separada, se desejado.Para gerar essa textura de limiar UV +, iniciando a partir de uma textura de padrão de entrada, você pode encontrar programaticamente componentes conectados (por exemplo, pesquisando pixels pretos e preenchimento). Defina o ponto de avaliação para todos os texels em cada componente como a UV do centro do componente e gere um limite aleatório para ele. Em seguida, ao renderizar, use um sombreador de pixel que primeiro prove essa textura, depois procure
p
no ponto de avaliação especificado e compare-o com o limite especificado.Dessa forma, cada forma de padrão verá um
p
valor e limite uniformes e será ativada ou desativada completamente. À medida quep
aumenta, mais formas passam pelo limite e aparecem, dando a impressão de uma densidade continuamente variável.fonte
Outro pensamento é nesse sentido. Se você tiver um conjunto de pontos uniforme definido no plano e uma função de mapeamento do plano para a superfície de destino, a função de densidade na superfície é como as áreas são mapeadas da superfície do plano para o destino. Portanto, um mapa de preservação de área resultaria em pontos uniformes no alvo.
fonte