Neste vídeo curto, vou mostrar como criei um efeito de Desfoque Dinâmico no Unity, focando apenas nos objetos no centro da visão da câmera enquanto desfoco os outros.



Transcrição do vídeo

Olá a todos! Neste vídeo curto, vou mostrar como criei um efeito de Desfoque Dinâmico no Unity, focando apenas nos objetos no centro da visão da câmera enquanto desfoco os outros.

Agora, estou demonstrando o efeito final, exagerando o desfoque, mas esse efeito é personalizável e em breve vou mostrar como fazer isso.

O vídeo e o script foram criados utilizando Unity 2022 e o Universal Rendering Pipeline.

Para usar o script corretamente, você precisa adicionar um componente Volume à Main Camera, para que possa acessar o subcomponente Depth of Field.

Você precisa alterar o modo do componente Defocus para Bokeh, pois esse modo permite especificar a distância do ponto de foco e outros efeitos, tornando o efeito final mais realista.

Vamos habilitar especificamente os parâmetros de Focus Distance e Aperture.

Para o parâmetro Focus Distance, podemos usar o valor padrão, pois vamos modificar esse valor durante o gameplay através de um script C#.

Em relação ao parâmetro Aperture, vale notar que quanto menor for esse valor, maior será o efeito de foco seletivo, pois a profundidade de campo será mais rasa.

Para mostrar o exemplo inicial, onde o efeito foi intencionalmente exagerado, defini o valor para 2.4, mas, claro, você precisará definir um valor apropriado para o seu projeto após alguns testes.

Antes de mostrar o código para implementar o script, vou descrever brevemente como ele funciona.

O script projetará um raio invisível chamado Raycast da câmera para o centro da cena virtual.

Quando o raio atingir um objeto com um componente Collider, ele calculará a distância desse objeto até a câmera e escreverá esse valor no campo Focus Distance do subcomponente Depth of Field.

A operação é muito simples, mas é importante ter em mente que, para que os objetos sejam detectados, eles devem ter um componente Collider, que também pode ser configurado para o modo Trigger, caso você queira evitar que esses objetos obstruam o movimento do personagem.

Agora vamos dar uma olhada no script muito simples em C# que nomeei de Dynamic Defocus.

Para executar o script corretamente, você precisa importar os módulos Rendering e Rendering Universal.

As variáveis privadas que defini são usadas apenas para acessar o componente Volume e seu subcomponente Depth of Field, para que possamos modificar seus parâmetros.

Especificamente, as variáveis Volume e Depth of Field são inicializadas na função Start do script.

Dentro da função Update, que é executada automaticamente a cada frame, o raio Raycast é projetado.

O objeto colidido é escrito na variável hit, mas pode não existir, por exemplo, porque o usuário está focando no fundo ou em uma parte da cena onde não há objetos com componentes Collider.

Por esse motivo, antes de atribuir o valor de Distance da variável hit ao parâmetro Focus Distance do componente Depth of Field, é necessário verificar se o Collider de hit não é nulo.

O nome do objeto interceptado pelo raio pode ser recuperado acessando o componente Collider da variável hit e, a partir desse componente, indo até o seu Game Object e, finalmente, até o nome.

Após salvar o script, faça alguns testes no seu projeto e ajuste o valor do parâmetro Aperture até alcançar o resultado desejado.

Espero que este vídeo curto tenha sido útil! Até breve!

Este site tem como único objetivo apresentar alguns dos meus trabalhos, sem qualquer finalidade promocional. Observe que, no momento, não estou procurando - nem responderei a - solicitações de trabalhos personalizados, consultorias ou qualquer outro tipo de colaboração profissional.


INFORMAÇÕES DE POLÍTICA DE PRIVACIDADE AVANÇADAS E USO DOS FICHEIROS DE COOKIES