Realistico shader di metallo


13

Come si crea un buon shader metallico?

Per metalli diversi e dire più o meno eroso / arrugginito e così via.

So che una differenza rispetto ai materiali ordinari è che il metallo dovrebbe "colorare" la luce speculare, ma quando lo faccio con l'oro, ad esempio, sembra solo "giallo", per niente metallico.

Qualsiasi aiuto apprezzato!


1
La tua domanda sembra qualcosa di semplice e specifico, ma in realtà non lo è. Non puoi replicare un aspetto metallico solo con uno shader. Ciò richiede trame adeguate, quindi è necessaria una trama lucente speculare, probabilmente una mappa di rilievo se il metallo è irregolare, ecc. Se il metallo è lucidato in qualche modo, è necessario riflettere l'ambiente (o una sua caricatura) come bene. Non è un semplice problema "ecco qualche codice shader metal".
Nicol Bolas,

Osserva anche il tema dei riflessi anisotropi, un fenomeno solitamente visto nei metalli spazzolati.
David Gouveia,

@David: Sembra davvero bello, forse è un po 'eccessivo per me al momento, ma lo controllo sicuramente e lo uso se posso :-)
Valmond,

@Nicol Grazie per il commento, sono completamente d'accordo con l'uso delle trame, il mio shader 'normale' è composto da 3: Diffuse, Glow e una controlmap che include Specular, Spec-power e reflection (da una mappa del cubo)
Valmond

Una rapida ricerca rivela molti diversi shader metallici e direttamente dalla bocca del cavallo: developer.download.nvidia.com/shaderlibrary/webpages/…
Patrick Hughes,

Risposte:


4

Di recente ho creato shader per metalli puliti e spazzolati per il mio gioco in corso e sono abbastanza soddisfatto dei risultati.

Metallo pulito: la caratteristica più importante dei miei esperimenti è stata la riflessione sull'ambiente con mappe cubiche. Li ho implementati con ambienti render-to-texture in tempo reale, ma anche le immagini statiche spesso danno buoni risultati ed è più facile sfocarli. La seconda caratteristica più importante è stata l'effetto fresnel, che rende migliori le silhuette degli oggetti. Questo ad esempio dà un aspetto più rotondo per le palle. L'illuminazione speculare non è necessariamente necessaria, poiché la mappa del cubo può fornire direttamente i punti salienti. Il rendering HDR è anche importante per rendere belli i riflessi della mappa del cubo.

Metallo spazzolato: Per i metalli spazzolati si ottengono buoni risultati abbastanza facilmente usando una texture pennello, qualcosa di simile a questo, insieme all'illuminazione anisotropica. Per l'illuminazione anisotropa puoi trovare tutorial dal web, ma ho implementato il mio usando blinn-phong come base, ma dal mezzo vettore ho eliminato l'80% della direzione tangente. Ciò significa che hai bisogno di tangenti o bitangenti oltre alle normali nei tuoi modelli. I riflessi ambientali sono difficili per il metallo spazzolato. Puoi campionare da più direzioni dalla mappa del cubo in base alle direzioni tangenti / bitangenti, ma potresti aver bisogno di molti campioni per ottenere buoni risultati. Questo, tuttavia, non è necessariamente necessario, poiché la trama e l'illuminazione anisotropica con più sorgenti luminose sembrano già piuttosto belle. Il risultato finale nel mio caso è simile al seguente:

Materiale metallico spazzolato


6

Come ha detto Nicol nel suo commento, ci sono molte cose che vanno in uno shader di metallo di alta qualità. Per risultati ottimali, il tuo renderer deve essere corretto per la gamma e utilizzare modelli di ombreggiatura basati fisicamente (vedi in particolare i due articoli di Naty Hoffman su quel link).

Date queste cose, il modo tipico di creare un materiale metallico è avere un colore diffuso molto basso o inesistente e un'alta riflessione speculare, che va dal 50% al 100% (nello spazio cromatico lineare). Come hai notato, per alcuni metalli lo speculare verrà colorato.

Poiché l'aspetto del metallo è interamente speculare con poca o nessuna diffusione, la riflessione sarà estremamente importante. Se riflette solo in modo speculare le luci puntiformi, otterrai l'aspetto di un materiale nero poiché manca il resto dell'ambiente (anche un metallo molto ruvido rifletterà un'immagine sfocata dei suoi dintorni). Un modo tipico per ottenere più riflessione è utilizzare una mappa cubica. La riflessione realistica nella grafica in tempo reale è un argomento enorme, tuttavia, e ci sono molti approcci diversi là fuori.


Grazie, questo è esattamente quello che stavo cercando! Mentre rifletto con una mappa cubica, forse dovrei usare una sorta di illuminazione ambientale come un'illuminazione speculare molto alta?
Valmond,

@Valmond Non sono sicuro di cosa intendi per "utilizzare una sorta di illuminazione ambientale come un'illuminazione speculare molto elevata". Intendevo solo che la riflessione speculare dovrebbe includere sia le sorgenti luminose che tutto il resto dell'ambiente (sommate insieme), dove la parte "tutto il resto" potrebbe essere implementata come una mappa cubica. Un modo tipico è generare diverse cubemaps sfocate per diverse rugosità, come mostrato qui .
Nathan Reed,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.