Shader realista de metal

13

Como você cria um bom shader de metal?

Para metais diferentes e diga mais ou menos corroído / enferrujado e assim por diante.

Eu sei que uma diferença em relação aos materiais comuns é que o metal deve 'colorir' a luz especular, mas quando faço isso com ouro, por exemplo, parece apenas "amarelo", não metálico.

Qualquer ajuda apreciada!

Valmond
fonte
1
Sua pergunta parece simples e específica, mas na verdade não é. Você não pode replicar uma aparência metálica apenas com um shader. Fazer isso requer texturas apropriadas; portanto, você precisa de uma textura especular de brilho, provavelmente um mapa de relevo, se o metal for irregular, etc. bem. Não é uma questão simples "aqui está um código de shader de metal".
Nicol Bolas
Olhe também para o assunto das reflexões anisotrópicas, um fenômeno geralmente visto em metais escovados.
David Gouveia
@ David: Isso parece muito legal, talvez seja um pouco exagerado para mim no momento, mas eu definitivamente verificá-la e usá-lo se eu posso :-)
Valmond
@ Nicol Obrigado pelo comentário, estou completamente bem com o uso de texturas, meu sombreador 'normal' é composto por 3: Difuso, Brilho e um mapa de
controle
Uma rápida pesquisa transforma-se muitas shaders diferente de metal e em linha reta da boca do cavalo: developer.download.nvidia.com/shaderlibrary/webpages/...
Patrick Hughes

Respostas:

4

Recentemente, criei shaders para metais limpos e escovados para o meu jogo em andamento e estou muito feliz com os resultados.

Metal limpo: A característica mais importante em meus experimentos foram as reflexões do ambiente com mapas de cubos. Eu os implementei com ambientes de renderização para textura em tempo real, mas também imagens estáticas geralmente oferecem bons resultados e é mais fácil desfocá-las. A segunda característica mais importante foi o efeito fresnel, que melhora as silhuetas dos objetos. Isso, por exemplo, fornece uma aparência mais redonda para bolas. A iluminação especular não é necessariamente necessária, pois o mapa do cubo pode fornecer os destaques diretamente. A renderização HDR também é importante para que as reflexões do mapa do cubo tenham uma boa aparência.

Metal escovado: para metais escovados, você obtém bons resultados com bastante facilidade usando uma textura de pincel, algo como isto, juntamente com iluminação anisotrópica. Para iluminação anisotrópica, você pode encontrar tutoriais da Web, mas eu implementei o meu usando blinn-phong como base, mas a partir do meio vetor, eliminei 80% da direção tangente. Isso significa que você precisa de tangentes ou bitangentes, além das normais em seus modelos. As reflexões do ambiente são difíceis para o metal escovado. Você pode fazer amostragens de várias direções no mapa do cubo com base nas direções tangentes / bitangentes, mas pode ser necessário muitas amostras para obter bons resultados. No entanto, isso não é necessariamente necessário, pois a textura e a iluminação anisotrópica com várias fontes de luz já parecem bastante agradáveis. O resultado final no meu caso é assim:

Material de metal escovado

msell
fonte
6

Como Nicol disse em seu comentário, há muitas coisas que envolvem um shader de metal de alta qualidade. Para obter melhores resultados, seu renderizador precisa ser gamma-correto e usar modelos de sombreamento fisicamente baseados (consulte particularmente os dois artigos de Naty Hoffman nesse link).

Diante disso, a maneira típica de fabricar um material metálico é ter uma cor difusa muito baixa ou inexistente e uma alta refletância especular, variando de 50% a 100% (no espaço linear de cores). Como você observou, para alguns metais o especular será colorido.

Como a aparência do metal é totalmente especular, com pouca ou nenhuma difusão, a reflexão será extremamente importante. Se refletir especularmente apenas luzes pontuais, você terá a aparência de um material preto, pois o restante do ambiente está ausente (mesmo um metal muito áspero refletirá uma imagem borrada de seu ambiente). Uma maneira típica de obter mais reflexão é usar um mapa de cubo. A reflexão realista em gráficos em tempo real é um tópico enorme, e há muitas abordagens diferentes por aí.

Nathan Reed
fonte
Obrigado, é exatamente isso que eu estava procurando! Como faço reflexões com um mapa de cubo, talvez eu deva usar uma espécie de iluminação ambiental como uma iluminação especular muito alta?
Valmond
@ Valmond Não sei ao certo o que você quer dizer com "use uma espécie de iluminação ambiental como uma iluminação especular muito alta". Tudo o que eu quis dizer foi que a reflexão especular deveria incluir fontes de luz e tudo o mais no ambiente (somadas), onde a parte "tudo o resto" poderia ser implementada como um mapa cúbico. Uma maneira típica é gerar vários cubemaps borrados para diferentes rugosidades, como mostrado aqui .
Nathan Reed