Existe-t-il un moyen d'ajouter une légende de couleur dans l'analyse du maillage?

Aug 17 2020

Je fais une recherche médicale dans laquelle il est nécessaire d'analyser l'épaisseur de paroi de cet objet. J'ai utilisé l'analyse de maillage qui colorisait automatiquement les maillages. Malheureusement, je ne trouve pas de moyen d'ajouter une légende de couleur afin d'indiquer l'épaisseur de paroi des couleurs. Je cherche quelque chose comme ça:

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

Existe-t-il un moyen de résoudre ce problème?

J'ai regardé quelque chose comme ça.

L'objekt reste bleu avec ces paramètres.

Comme je suis assez nouveau dans Blender, il n'était pas si facile pour moi de comprendre l'éditeur d'ombrage et d'utiliser des scripts, mais lentement, je me suis comporté avec lui. Lorsque j'ai essayé de reconstruire les paramètres dans l'éditeur d'ombrage, je n'ai pas pu connecter le script au groupe ,, MaptThickness ". J'ai copié le texte NormalDepth de votre test_Thickness du volume projekt @vklidu et l'ai enregistré sous (.py) afin de l'installer il en tant que module complémentaire mais cela n'a pas fonctionné. Quand je l'enregistre sous (.osl), Blender ne me le montre même pas. Je suppose que c'est assez facile mais comment implémenter le script?

Réponses

6 vklidu Aug 17 2020 at 11:41

Qu'en est-il du nœud Ambient Oclussion avec la fonction Inside activée?
Je ne suis pas sûr de la précision du résultat, mais semble fonctionner beaucoup mieux que l' analyse de maillage .

(La barre à l'écran n'est qu'un dégradé 2D.)

Comparez à l'analyse de maillage, ce shader:

  • peut être rendu (avec le moteur Cycles)
  • la couleur est attribuée au sommet (pas à une face)

Conseils:

  • Pour partager le même nœud ColorRamp dans les deux matériaux, fermez ce nœud dans le groupe de nœuds dans un matériau et ajoutez ce groupe de nœuds dans le deuxième matériau.
  • La gestion des couleurs passe de Filmic à Standard

Remarque: Eevee avec AO activé produit des couleurs, mais il n'y a pas de fonction "Intérieur" que nous utilisons pour l'épaisseur.


Précision

Q assez intéressant car une épaisseur dépend de la direction de la mesure. Comme une plaque de verre que nous utilisons pour dire et mesurer une épaisseur dans le sens de la profondeur, c'est-à-dire mince. Mais vous pouvez également mesurer l'épaisseur dans le sens de la largeur qui serait très épaisse dans ce cas.

C'est ce que mesure l'analyse de maillage. Si vous cochez @RobinBetts blend avec les shaders OSL, à l'intérieur se trouve un matériau appelé NormalDepth et qui fait exactement la même chose que l' analyse du maillage - il tire un seul rayon dans la direction normale de la face vers une autre face. Cette distance est représentée par la couleur correspondante attribuée à une face. Donc, si vous ouvrez le groupe de nœuds et cochez le nœud Plage de mappage, les deux premières valeurs définissent le début / la fin de la rampe de couleurs .

Exemple - De Min = 0 signifie que le rouge commence sur la distance zéro et De Max = 1 signifie que le bleu se termine sur la distance 1 m. En jouant avec ces deux valeurs, vous pouvez spécifier exactement la distance que représente ColorRamp. Donc, ce matériel semble être le meilleur pour vous.

Mais comme l' analyse de maillage, elle génère des faces colorées "étranges" qui sont mathématiquement correctes. Comme lorsque vous vérifiez la partie inférieure de la mâchoire de Monkey, il y a du bleu foncé même si une partie du maillage n'est pas si épaisse, mais le rayon tiré du visage va jusqu'aux sourcils, ce qui fait que la distance correspond au bleu foncé pour ce visage.

Il existe d'autres méthodes pour calculer l'épaisseur, où on n'utilise pas une seule direction de rayon. Comme AO a tiré beaucoup dans les directions de l'hémisphère. Les couleurs finales représentent la moyenne de ces distances.

Comparaison - Profondeur normale (OSL) / Occlusion ambiante / Profondeur Lambert (OSL)

L'objet de barre mesure 1 m de haut et 1 m de profondeur en forme d'objet en coin. La barre sur la gauche utilise le shader de profondeur normale et fonctionne simplement parce que la distance est mesurée UNIQUEMENT dans une direction. Le cube est de 0,5 m donc vert pur dans la couleur correcte pour la distance au milieu de la barre. Mais comme vous pouvez le voir, deux autres shadery vous permettent de savoir que les coins du cube sont plus minces en observation 3D que la masse moyenne du cube.

Le shader NormalDepth semble être précis ... avec des valeurs d' occlusion ambiante et de Lambert, j'ai dû jouer, pour obtenir des couleurs similaires. Et je ne sais pas comment contrôler.

3 RobinBetts Aug 17 2020 at 21:16

Ceci est juste un complément à la réponse de @ vklidu .. AO semble la bonne voie à suivre. Il peut y avoir d'autres mesures de «l'épaisseur», à prendre en compte, cependant, en fonction de votre application.

J'allais écrire un shader OSL rapide, en prenant la longueur d'un rayon de la normale, mais l'ensemble du territoire a été couvert de manière très complète par @Robert Pali, ici . Donc, pas de crédit ici pour cette réponse, les scripts sont les siens.

L'utilisation de l'épaisseur lambertienne de @ Pali (biaisée vers la normale, mais échantillonnée autour d'elle) pour le modèle, et son épaisseur normale simple pour le coin de couleur de 0 à 1, donne ceci:

Comme @vklidu l'a mentionné, vous pouvez vous assurer que les mappages restent synchronisés. entre les matériaux en plaçant le mappage de plage dans un groupe et en éditant le groupe, en un seul endroit pour tous les matériaux:

La seule différence entre les shaders de @ Pali et AO est que AO envoie des rayons d'échantillonnage ` ` Samples '' dans l'hémisphère autour de la normale du point d'ombrage, et il n'en envoie qu'un seul, biaisé de la manière qu'il décrit dans sa réponse.