Shader di Rorschach (macchia di psicologia)


12

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine
(fonte: bonnefil.com )

Voglio che questo magnifico modello sia nel mio gioco. Finora ho capito ...

  1. Disegna un lato, quindi renderlo due volte a sinistra e a destra.
  2. Come si esegue il rendering di questo modello su un lato? hmm ...
  3. Ho bisogno di aiuto.

Per questo ho bisogno di informazioni dettagliate sulla scrittura di shader.

Se pensi che non sia un compito adatto allo shader, fammelo sapere, si spera con una soluzione alternativa!

Tuttavia non vedo alcun approccio possibile per raggiungere questo obiettivo senza GPU. (a meno che tu non suggerisca di conservare un mucchio di immagini preparate di foto di rorscach)


Quale motore / lingua / framework stai usando?
Akaltar,

@akaltar Unity Shaderlab
Blue Bug

Risposte:


15

Per ottenere quell'autentico aspetto inchiostrato, la soluzione migliore è probabilmente quella di assemblare una libreria di immagini di simboli di inchiostro, strisce e dribbling.

Quindi è possibile selezionare casualmente un numero di essi per posizionare e ruotare in modo casuale su metà dell'immagine. (Con un orientamento verso il bordo della cucitura, quindi il centro del test di Rorschach è il più denso. Potresti essere in grado di usare un sistema di particelle per fare questo scattering)

Esegui il rendering su una trama con la modalità a capo impostata su specchio e ora hai una macchia di inchiostro simmetrica che puoi visualizzare senza shader personalizzati.

Ecco un esempio del tipo di risultato che puoi ottenere facendo in questo modo:

Macchia di inchiostro assemblata dalla libreria di immagini splat

Se non ti interessano quelle forme inchiostrate distintive, puoi anche farlo con uno shader che soglie due schemi di rumore che scorrono uno accanto all'altro. Questo ottiene una forma irregolare simmetrica, che può essere modificata in modo continuo nel tempo, se lo desideri, ma non sarà del tutto simile all'inchiostro.

Questo è il metodo che dnk drone.vs.drones suggerisce in un'altra risposta e può dare risultati simili a questo:

Macchia d'inchiostro sottratta al rumore

Modifica: ecco una ripartizione di come funziona l'approccio basato sul rumore ...

Per prima cosa iniziamo con un po 'di rumore. Il rumore 1 / f , spesso chiamato turbolenza, funziona abbastanza bene. È possibile cuocere il rumore di piastrellatura in una trama e quindi sommare uno o più campioni da esso, modificandone gli offset / rotazioni per variare le forme ottenute.

Turbolenza thresholded

Se lo soglia direttamente, otteniamo un'immagine come quella a destra. Le forme sono corrette, ma per sembrare un test di Rorschach dovrebbe essere più denso vicino al centro e assottigliarsi verso i bordi.

Possiamo farlo funzionare aggiungendo un gradiente sopra (contrasto qui esagerato per chiarezza)

Maschera per bordi Maschera aggiunta al rumore

Quindi soglie prendendo (sum - blackLevel) * contrast

(Ecco blackLevelun parametro che controlla quanto il risultato sia macchiato o macchiato - valori più alti significano un nero più solido - e contrastcontrolla quanto siano nitidi i bordi)

thresholded

Il mirroring di questa immagine ti darà l'esempio di Rorschach sopra.


Sto cercando di ottenere attraverso i metodi dei droni. Potresti essere in grado di elaborare come è fatto? Sto usando la tradizionale funzione del rumore perlin, ma la mia sembra piuttosto una raccolta di punti casuali.
Blue Bug,

@BlueBug, ho aggiunto una suddivisione dettagliata sopra.
DMGregory

8

Puoi provare il rumore perlin (usando un gradiente bianco / nero appropriato), quindi applicare il mirroring destro / sinistro

inserisci qui la descrizione dell'immagine


È quel rumore perlin? Sembra drasticamente diverso dal tradizionale rumore del perlin. Wow, questo assomiglia fatalmente allo stesso modo dell '"inchiostro nuvoloso" proprio come quello del film Watchmen.
Blue Bug,

2
Tutto dipende dalla tua funzione di trasferimento dal valore del rumore -> valore pixel. Sembra che ci sia un livello di finestra abbastanza piccolo qui che si traduce in netto contrasto tra bianco e nero con una piccola quantità di bordi morbidi
MistaGiggles

Sì, basta fare un filtro passa alto da qualche parte intorno al grigio, quindi soffiare gli alti (cioè moltiplicare per un numero elevato e scalare la parte superiore a 255 o qualunque sia il valore massimo di pixel)
Shayne
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.