Shaders de pós-processamento visual open-source para Unreal Engine 5
por
Bernardo Coutinho
Bruno Mariz
Vinicius Ariel
Orientador: Prof. Dr. Ricardo Nakamura
Universidade de São Paulo - USP
Escola Politécnica
Departamento de Engenharia de Computação e Sistemas Digitais (PCS)
São Paulo, SP 2023
1. Introdução
1.1. Problema e Solução
Com a indústria de jogos brasileira começando a consolidar-se, alguns dos obstáculos para os desenvolvedores tornam-se mais aparentes. Dentre eles, está o manejamento do tempo de produção de conteúdo. Esse processo envolve o planejamento, implementação, teste e polimento de qualquer parte do conteúdo que pode fazer parte do projeto final. No entanto, muitas vezes soluções propostas são desacartadas na seção de testes, fazendo com que o tempo gasto no seu planejamento e implementação tenha sido gasto em um conteúdo que não será utilizado. Nesse trabalho, abordaremos primariamente nesta questão sob a óptica da produção de arte técnica para jogos digitais, no escopo de efeitos de pós-processamento.
Para ajudar a solucionar esse problema, propomos um Asset Pack feito para a Unreal Engine 5, que implementa com conjunto de Shaders de pós-processamento. A ideia é disponibilizar essa ferramenta gratuitamente no Marketplace oficial da Unreal. Acreditamos que o acesso a Shaders básicos poderá facilitar os testes em projetos de outros desenvolvedores, de maneira a averiguar como os efeitos se comportam antes de gastar parte do ciclo de produção e o trabalho do artista ténico.
Também consideramos que, para equipes muito pequenas e que não tenham um profissional especializado na produção de Shaders, o Asset Pack desenvolvido poderá ser útil para tornar esse tipo de tecnologia mais acessível. Isso se torna um ponto mais importante sob o ponto de vista do desenvolvimento no Brasil uma vez que o mercado de jogos brasileiro é composto de pequenas empresas independentes e também pelo fato de que os poucos Asset Packs disponíveis atualmente são pagos e com preços não ajustados à moeda brasileira.
Por fim, também pretendemos que o trabalho se torne uma fonte de estudo a respeito da implementação de Shaders de pós-processamento, que possa ser consultado sobretudo por pessoas que queiram aprender mais a respeito do desenvolvimento desse tipo de efeito utilizando primairamente HLSL.
2. Efeitos Produzidos
Abaixo, listamos cada um dos Shaders de pós-processamento presentes no trabalho, explicando seu propósito e ilustrando sua aparência.
2.1. Dithering Ordenado
![](/_next/static/media/dithering.bd7af0e6.png)
Dithering foi um efeito muito usado na época em que o hardware limitava a profundidade de cores num jogo. Ele se baseia na introdução de ruído padronizado sobre a imagem para aparentar uma profundidade maior de cores.
2.2. Kuwahara Filter
![](/_next/static/media/Kuwahara_InGame.f6aaab6f.png)
Esse é um filtro que simplifica imagens mantendo as fronteiras entre objetos bem definidas. Esse efeito cria um aspecto de pintura à mão na imagem.
2.3. Outline
![](/_next/static/media/Outline.72993950.png)
Esse efeito cria uma borda colorida sobre objetos 3D em cena. Ele pode ser usado para dar uma aparência de cartunesca à cena 3D.
2.4. Edge Detection
![](/_next/static/media/EdgeDetection2.0585d0cb.png)
Efeito similar ao Outiline, em que bordas dos objetos são coloridas, mas o restante da cena também é pintado com uma outra cor. Em suma, apenas as fronteiras dos objetos são destacadas.
2.5. CRT Effect
![](/_next/static/media/crt_effect.44aeac4a.png)
Procurando reproduzir os efeitos das televisões de tubo CRT, esse efeito foi criado para dar um aspecto nostálgico à cena. Ele introduz uma ilusão de curvatura na tela, além de aplicar as “scanlines” (linhas iluminadas diferentemente enquanto o scan de raios catódicos passa pela tela).
3. Instalação e Utilização
O Plugin que implementa este Asset Pack necessita que seja instalado em um projeto para Unreal Engine 5.1 (ou mais recente) configurado para C++. Caso seu projeto não esteja configurado para C++, basta criar uma classe de C++ e esperar a Engine criar os arquivos de build necessários.
Com essas configurações feitas, basta copiar a pasta PPFree para dentro da pasta “Plugins” do seu projeto. Faça uma nova build do projeto e você poderá ter acesso aos efeitos de pós processamento criados.
Caso os Materials não apareçam como opções para serem usadas dentro da Engine, marque a opção “Show Plugin Content” no buscador.