Eu tenho um piso hexagonal infinito, gerado pelo mosaico de uma grade de pontos em um par de sombreador de mosaico:
Observe que se trata de uma estrutura de arame plana - as "sombras" são um truque de iluminação:
Agora, eu gostaria que isso parecesse vidro grosso e refrativo, mas não tenho certeza de como proceder.
A primeira coisa que veio à mente é
- definir um uniforme contendo a "espessura" solicitada dos blocos
- Ao calcular a iluminação, use a lei de Snell para calcular o comprimento do caminho óptico que um raio percorreria o bloco hexadecimal, se fosse realmente tão espesso quanto o uniforme de "espessura" diz, e somar o alfa nesse comprimento. Isso daria transparência, mas não lida com coisas como reflexão interna / TIR, etc.
Ainda não tentei isso, então não tenho certeza de qual seria o resultado visual.
Por fim, para esse nível em particular, estou tentando obter esse visual hexagonal de vidro usado no Tron: Legacy durante a batalha de discos. ( Veja esta imagem para um exemplo .)
Sugestões?
Respostas:
Este artigo na GPU Gems detalha a refração, o que pode fornecer bons resultados
No sentido mais básico
A listagem a seguir mostra um sombreador que demonstra essa abordagem
As próximas imagens ilustram estas três etapas
Existem técnicas mais avançadas no mesmo artigo que podem obter uma aparência muito mais atraente
Para um efeito semelhante no Unity, você pode dar uma olhada na página da wiki The Refraction Shader
fonte
Tomarei a imagem que você mostrou como referência para como imagino o efeito. O algoritmo em que consigo pensar é simples:
Em relação ao shader de refração, para simular o vidro que você pode fazer
Eu apenas pensei na idéia, então não a testei. Tenho certeza de que precisa de mais trabalho, talvez o faça quando voltar do trabalho.
fonte