Shader in plastica traslucida HLSL


12

Sto cercando di produrre uno shader per replicare un oggetto di plastica bianca con una luce colorata all'interno. O avendo uno shader che sarà traslucido e se metto una luce all'interno dell'oggetto la luce mostrerà attraverso o avendo uno shader che simula l'effetto di una luce all'interno.

L'effetto che sto cercando è un po 'come una luce che passa attraverso un paralume simile a queste immagini:

testo alternativo testo alternativo testo alternativo

Idealmente sarei in grado di controllare la forza e il colore della luce per farlo pulsare e ruotare attraverso alcuni bei colori fluro luminosi

Anche se non sono sicuro da dove cominciare!

La mia domanda è: qualcuno conosce le tecniche che dovrei ricercare per essere in grado di produrre un tale shader o avere un esempio dello stesso / simile shader che posso usare come punto di partenza? O anche se si desidera fornire uno shader che potrebbe fare il lavoro

Risposte:


10

Questo è un effetto noto come "Scattering di superfici secondarie".

Nel libro "GPU Pro: Advanced Rendering Techniques" è disponibile un'implementazione dello spazio dello schermo di esempio adatta per l'uso in tempo reale.


0

Non conosco HLSL, quindi non posso dare una risposta esatta. Quello che puoi sostanzialmente fare è impostare il colore di ogni frammento in base alla distanza dalla sorgente luminosa (ignorando qualsiasi auto-ombra).

In pseudocodice sarebbe qualcosa del genere:

fragment_color = light_intensity * trasparenza_color * lightsource_color / (attenuazione * distance_to_lightsource ^ 2)

Potresti anche voler utilizzare un fattore di attenuazione lineare oltre al quadrato per far diffondere maggiormente la luce.


0

La luce deve essere in grado di muoversi e l'oggetto deve essere in grado di deformarsi / animarsi? Se nessuno di questi è il caso, un modo economico per farlo sarebbe quello di applicare una mappa di texture monocromatica sull'oggetto che funge da maschera per la luce; nello shader dovresti campionare questa trama, moltiplicarla per il colore / intensità della luce corrente e aggiungere al colore di output.

L'ovvia domanda di follow-up è come genererai questa trama? Puoi provare a dipingerlo, se hai accesso a un artista o puoi dipingere da solo le trame. Potrebbe anche essere reso da uno strumento offline usando raytracing o alcuni di questi. Tuttavia, non ho abbastanza familiarità con gli strumenti di raytracing per dirti in dettaglio come configurarlo.

Un approccio diverso potrebbe essere quello di scrivere uno shader che campiona la luce dietro di esso, usando la normale superficie inversa nell'equazione di ombreggiatura diffusa diffusa di Lambert; quindi lo moltiplicheresti per un fattore di maschera come 0,5 o giù di lì e aggiungeresti al colore di output. Ciò consentirebbe lo spostamento dinamico della luce o della geometria e non richiederebbe trame, ma probabilmente non otterresti risultati belli come un rendering offline.

Per quanto riguarda lo scattering del sottosuolo: non penso che sia esattamente ciò che si desidera qui perché tutti gli algoritmi SSS per la grafica che ho visto sono progettati per la luce che proviene dall'esterno della superficie, rimbalza un po 'ed esce di nuovo, mentre qui la luce è dentro .

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.