Shell Texturing
Prefácio
Recentemente, passeando pelo youtube, eu me deparei com um vídeo do canal Acerola que falava sobre uma técnica do desenvolvimento de jogos muito interessante chamada Shell Texturing. Empolgado por essa técnica, fui atrás de fazer a minha própria implementação tendo como base o repositório dele, e de quebra desenlvolver um simples código para simular a ação do vento na grama.
Shell Texturing
Shell Texturing é uma técnica usada para simular carpetes, pelugem e grama que consiste na utilização de varias camadas sobrepostas da mesma malha (normalmente, alongada pelas normals dos vértices) a fim de se obter várias secções do volume desejado. Cada camada tem uma textura/shader com transparência que define a forma e a cor dos fios ou pelos. O efeito final é de um material felpudo e realista.
Essa técnica funciona criando uma ilusão de profundidade e volume, sem aumentar muito a complexidade geométrica do modelo. As camadas são renderizadas de trás para frente, usando um teste de alfa para descartar os pixels transparentes.
Em adicional a técnica, pode ser implementado também o calculo de outros tipos de variáveis, como o vento, aceleração ou a gravidade, a fim de deixar o mais vivo e realista. Por exemplo, na minha implementação, eu usei uma simples função de noise para transladar a UV de cada fragmento do shader para simular grama, e movi essas coordenadas através do tempo.
As vantagens dessa técnica são que ela é extremamente simples de implementar, não requer malhas complexas, e pode produzir resultados realistas e variados. As desvantagens são que ela pode aumentar o custo de renderização se o número de camadas for muito alto (por conta do numero de overdraws), e que ela pode apresentar artefatos visuais, como bordas serrilhadas ou sombras incorretas (por isso no calculo da iluminação normalmente se é usado alternativas não realistas, como a Half Lambert).
Alguns exemplos de aplicações dessa técnica são: a criação de personagens mais felpudos, como ursos, coelhos ou abelhas; a simulação de superfícies macias, como almofadas, tapetes ou cobertores; e a geração de cenários naturais, como campos, florestas ou montanhas.
Minha implementação:https://youtu.be/vASp2kWBrzg
https://www.linkedin.com/posts/marcelo-henrique-kg_unity-lowpoly-shader-activity-7128377682282594305-r9-M?utm_source=share&utm_medium=member_desktop
Video do Acerola: https://youtu.be/9dr-tRQzij4
Artigos:
https://people.compute.dtu.dk/jerf/papers/abstracts/noise_abstract.pdf