C'è un modo per aggiungere una legenda dei colori nell'analisi della mesh?

Aug 17 2020

Sto facendo una ricerca medica in cui è necessario analizzare lo spessore della parete di questo oggetto. Ho usato l'analisi della mesh che ha colorato automaticamente le mesh. Sfortunatamente non riesco a trovare un modo per aggiungere una legenda dei colori per indicare lo spessore delle pareti dei colori. Sto cercando qualcosa del genere:

https://www.researchgate.net/figure/Three-dimensional-3D-atrial-wall-thickness-variation-across-the-whole-human-atria-Top_fig2_319241926

c'è un modo per risolvere questo problema?

Ho cercato qualcosa del genere.

L'oggetto rimane blu con queste impostazioni.

Dato che sono abbastanza nuovo su Blender, non è stato così facile per me capire l'editor di ombreggiatura e usare gli script, ma lentamente divento compatibile con esso. Quando ho provato a ricostruire le impostazioni nell'editor di ombreggiatura non sono riuscito a collegare lo script al gruppo "MaptThickness". Ho copiato il testo NormalDepth dal tuo test_Thickness da volume projekt @vklidu e l'ho salvato come (.py) per installarlo è un componente aggiuntivo ma non ha funzionato Quando lo salvo come (.osl) Blender non me lo mostra nemmeno Immagino sia abbastanza facile, ma come implemento lo script?

Risposte

6 vklidu Aug 17 2020 at 11:41

Che dire del nodo Ambient Oclussion con la funzione Inside abilitata?
Non sono sicuro di quanto sia preciso il risultato, ma sembra funzionare molto meglio dell'analisi della mesh .

(La barra sullo schermo è solo un gradiente 2D.)

Confronta con Mesh Analysis, questo shader:

  • può essere renderizzato (con motore Cycles)
  • il colore è assegnato al vertice (non una faccia)

Suggerimenti:

  • Per condividere lo stesso nodo ColorRamp in entrambi i materiali, chiudere questo nodo nel gruppo di nodi in un materiale e aggiungere questo gruppo di nodi nel secondo materiale.
  • La gestione del colore passa da Filmic a Standard

Nota: Eevee con AO abilitato produce colori, ma non esiste la funzione "Interno" che usiamo per lo spessore.


Precisione

Q abbastanza interessante poiché uno spessore dipende dalla direzione della misura. Come lastra di vetro che si usa per dire e misurare uno spessore in direzione della profondità, cioè sottile. Ma puoi anche misurare lo spessore nella direzione della larghezza che in questo caso sarebbe molto spesso.

Questo è ciò che misura la Mesh Analysis. Se controlli @RobinBetts si fondono con gli shader OSL, all'interno c'è un materiale chiamato NormalDepth e che fa esattamente la stessa cosa dell'analisi mesh : spara un singolo raggio nella direzione normale della faccia fino a un'altra faccia. Questa distanza è rappresentata dal colore corrispondente assegnato a una faccia. Quindi, se apri il gruppo di nodi e controlli il nodo Intervallo mappa , i primi due valori definiscono l'inizio / la fine di Color Ramp .

Esempio - From Min = 0 significa che il rosso inizia alla distanza zero e From Max = 1 significa che il blu finisce alla distanza 1 m. Giocando con questi due valori puoi specificare esattamente quale distanza rappresenta ColorRamp. Quindi questo materiale sembra essere il migliore per te.

Ma come l' analisi della mesh genera facce colorate "strane" matematicamente corrette. Come quando controlli la parte inferiore della mascella di Scimmia, c'è blu scuro anche quella parte della maglia non è così spessa, ma il raggio sparato dalla faccia arriva fino alle sopracciglia, che fanno corrispondere la distanza al blu scuro per quella faccia.

Esistono altri metodi per calcolare lo spessore, dove non viene utilizzata una sola direzione del raggio. Come AO ha sparato a molti nelle direzioni dell'emisfero. I colori finali rappresentano la media di queste distanze.

Confronto - Profondità normale (OSL) / Occlusione ambientale / Profondità di Lambert (OSL) L'

oggetto barra è alto 1 m e ha una profondità di 1 m a forma di cuneo. La barra a sinistra utilizza lo shader Profondità normale e funziona solo perché la distanza viene misurata SOLO da una direzione. Il cubo è 0,5 m quindi verde puro nel colore corretto per la distanza al centro della barra. Ma come puoi vedere altri due shadery ti fanno sapere che gli angoli del cubo sono più sottili nell'osservazione 3D rispetto alla massa media del cubo.

Lo shader NormalDepth sembra essere accurato ... con valori di Ambient Occlusion e Lambert ho dovuto giocare, per ottenere colori simili. E non ho la più pallida idea di come controllare.

3 RobinBetts Aug 17 2020 at 21:16

Questo è solo un supplemento alla risposta di @ vklidu .. AO sembra la strada giusta da percorrere. Tuttavia, potrebbero esserci altre misure di "spessore" da considerare, a seconda dell'applicazione.

Stavo per scrivere un veloce shader OSL, prendendo la lunghezza di un raggio dal normale, ma l'intero territorio è stato coperto in modo molto completo da @Robert Pali, qui . Quindi nessun merito qui per questa risposta, per favore, i copioni sono suoi.

Usando lo spessore lambertiano di @ Pali (polarizzato rispetto al normale, ma campionandolo attorno ad esso) per il modello, e il suo semplice spessore normale per il cuneo di colore da 0 a 1, si ottiene questo:

Come menzionato da @vklidu, puoi assicurarti che le mappature rimangano sincronizzate. tra i materiali inserendo la mappatura dell'intervallo in un gruppo e modificando il gruppo, in un unico punto per tutti i materiali:

L'unica differenza tra gli shader di @ Pali e AO, è che AO invia raggi di campionamento " Samples " nell'emisfero intorno alla normale del punto di ombreggiatura, e ne invia solo uno, polarizzato nei modi descritti nella sua risposta.