Sono in ritardo per una risposta, ma stavo cercando di ottenere la stessa cosa e ho pensato di condividere la soluzione che sto utilizzando.
Un effetto simile può essere ottenuto in un'operazione di estrazione singola con uno shader non troppo complesso.
Nello shader di frammenti, si calcola il colore del frammento in base a fulmini e texture, fornendo il colore non evidenziato 'colorA'.
Il secondo colore è il colore del contorno, "colore B".
Si dovrebbe ottenere il frammento sul vettore della telecamera, normalizzarlo, quindi ottenere il prodotto punto di questo vettore con il normale del frammento.
Il frammento del vettore della telecamera è semplicemente l'inverso della posizione del frammento nell'occhio-spazio.
Il colore del frammento è quindi:
float CameraFacingPercentage = dot(v_fragmentToCamera, v_Normal);
gl_FragColor = ColorA * CameraFacingPercentage + ColorB * (1 - FacingCameraPercentage);
Questa è l'idea di base, ma si dovrà giocare per avere più o meno il colore del contorno. Inoltre, saranno evidenziate anche le parti concave del modello, ma ciò vale anche per l'immagine pubblicata nella domanda.
Quindi disegniamo l'oggetto con un colore uniforme su una texture, quindi disegniamo quella texture sullo schermo con uno shader sfocato? – dupersuper
Sì, ma probabilmente non è l'unico modo per farlo. – weltensturm
Questo è essenzialmente il modo in cui è stato fatto sul titolo su cui ho lavorato, anche se per noi è stato problematico. Considera quanto dello schermo conterrà il tuo schema prima di impegnarti in questo approccio: sono disponibili effetti meno costosi per comunicare che "questo modello è evidenziato". In un titolo moderno, probabilmente non hai una tariffa di riserva da utilizzare. – Philip