2
respostas

[Dúvida] Não achei solução pra mascara inversa no unity

estou tentando criar uma mascara inversa no unity usando shader, mas não tá dando certo, sempre que do start só renderiza o topo da arvore que é o queue com maior numero (1999). Insira aqui a descrição dessa imagem para ajudar na acessibilidade Aqui um print da cena do jogo, o plano branco é apenas onde eu quero ver o terreno que está atrás dele. Insira aqui a descrição dessa imagem para ajudar na acessibilidade Aqui é o jogo rodando e dá pra ver uma mancha verde no plano branco, esse é o topo da arvore, mas ainda tem o Tronco, Chão as pedras e a grama que não estão sendo renderizados. Insira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade esses são os materiais, a unica diferença entre os outros é o numero em Geometry que vão diminuindo pra cada material em cena, o maior numero é do topo da arvore que seria o material mais próximo da camera. Insira aqui a descrição dessa imagem para ajudar na acessibilidade esse é o script do shader que peguei em um tutorial no youtube. Insira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade esse script eu tentei fazer com ajuda do chat gpt, mas n tá indo pra lugar nenhum infelizmente. esse script tá no plano branco Insira aqui a descrição dessa imagem para ajudar na acessibilidade e aqui é o script no plano branco. Desculpa a quantidade de print, eu to tentando achar solução pra isso tem uma semana, e n consigo fazer esse terreno ser renderizado apenas dentro desse plano.

2 respostas

E aí, Gabriel!

Saca só que a ordem de renderização no Unity é controlada pelo tal do Render Queue nos materiais. Os materiais com valores mais altos no Render Queue são renderizados por último. No seu caso, parece que a parte de cima da árvore tá com o valor mais alto (1999), daí fica por cima dos outros.

Pra fazer uma máscara invertida, geralmente vc precisa de dois passes no shader: um pra desenhar a máscara e outro pro conteúdo que vai aparecer por trás.

Vê se os valores do Render Queue dos materiais estão na manha pra máscara ser renderizada antes dos objetos que tu quer mostrar. A lógica do shader é chave pra máscara invertida funcionar. Vê se o shader tá setado pra primeiro desenhar a máscara e depois os objetos que precisam aparecer por trás. Geralmente usa o Stencil Buffer no Unity pra isso.

O Stencil Buffer pode ser usado pra controlar quais pixels devem ser desenhados ou ignorados baseado na máscara. Por exemplo, configura o shader da máscara pra escrever um valor específico no Stencil Buffer e depois configura o shader dos objetos pra serem renderizados só onde esse valor tá.Às vezes, é bom criar uma cena de teste básica só com o essencial pra entender o que tá rolando. Isso pode ajudar a ver se o problema é no shader, nos materiais ou na lógica de renderização.

A documentação do Unity sobre shaders e o Stencil Buffer pode ter informações importantes. E fica de olho em exemplos de shaders com máscaras invertidas, que pode dar uma luz sobre como configurar o teu próprio shader.

https://docs.unity3d.com/Manual/SL-Stencil.html

Obrigado, olhando a documentação eu consegui achar um tutorial simples pro meu problema esse aqui: https://www.youtube.com/watch?v=y-SEiDTbszk usando a 2 parte do video após os 10 min. Ficou assim: Insira aqui a descrição dessa imagem para ajudar na acessibilidade a unica coisa que eu fiquei com o pé atras foi que tive que usar extenção pra criar shader Insira aqui a descrição dessa imagem para ajudar na acessibilidade Nas aulas do curso da Alura, eles ensinam a usar o 3D Core normal e não o HDRP. Então, não sei exatamente a diferença entre um e outro, e se consigo obter o mesmo resultado apenas com o Core normal. Estou ainda começando então tá complicado ainda.