Existe uma maneira de adicionar uma legenda de cor na análise de malha?

Aug 17 2020

Estou fazendo uma pesquisa médica em que é necessário analisar a espessura da parede deste objeto. Usei a análise de malha que coloriu automaticamente as malhas. Infelizmente, não consigo encontrar uma maneira de adicionar uma legenda de cor para indicar a espessura da parede das cores. Estou procurando algo assim:

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

Existe alguma maneira de resolver este problema?

Eu assisti por algo assim.

O objeto permanece azul com essas configurações.

Como eu sou muito novo no Blender, não foi tão fácil para mim descobrir o editor de sombreamento e usar scripts, mas aos poucos fui me comportando com ele. Quando tentei reconstruir as configurações no editor de sombreamento não consegui conectar o script ao grupo ,, MaptThickness ". Copiei o texto NormalDepth de seu test_Thickness do volume projekt @vklidu e salvei como (.py) para instalar como um complemento, mas não deu certo. Quando eu salvo como (.osl) o Blender nem mostra para mim. Acho que é bem fácil, mas como eu realmente implemento o script?

Respostas

6 vklidu Aug 17 2020 at 11:41

E quanto aoAmbient Oclussion com o recurso Inside habilitado?
Não tenho certeza de quão preciso é o resultado, mas parece funcionar muito melhor do que a análise de malha .

(A barra na tela é apenas um gradiente 2D.)

Compare com a análise de malha, este sombreador:

  • pode ser renderizado (com motor Cycles)
  • a cor é atribuída ao vértice (não a uma face)

Dicas:

  • Para compartilhar o mesmo nó ColorRamp em ambos os materiais, feche este nó no Grupo de nós em um material e adicione este Grupo de nós no segundo material.
  • Mudança de gerenciamento de cores de Filmic para Standard

Nota: Eevee com AO habilitado produz cores, mas não há recurso "Interior" que usamos para espessura.


Precisão

bastante interessante Q uma vez que a espessura depende da direção da medida. Como a placa de vidro que usamos para dizer e medir uma espessura na direção da profundidade, ela é fina. Mas você também pode medir a espessura na direção da largura que seria muito grossa neste caso.

Isso é o que a análise de malha mede. Se você verificar a mistura @RobinBetts com sombreadores OSL, dentro dele há um material chamado NormalDepth e que faz exatamente a mesma coisa que a Análise de malha - ele dispara um único raio na direção normal da face para outra face. Essa distância é representada pela cor correspondente atribuída a uma face. Portanto, se você abrir o grupo de nós e verificar o nó Map Range - os primeiros dois valores definem o início / fim da Color Ramp .

Exemplo - De Min = 0 significa que o vermelho começa na distância zero e De Max = 1 significa que o azul termina na distância de 1 m. Jogando com esses dois valores, você pode especificar exatamente qual distância ColorRamp representa. Portanto, este material parece ser o melhor para você.

Mas assim como a análise de malha, ela gera faces coloridas "estranhas" que são matematicamente corretas. Como quando você verifica a parte inferior da mandíbula do macaco, há azul escuro mesmo que parte da malha não seja tão grossa, mas o raio disparado do rosto vai até as sobrancelhas, que fazem a distância corresponder ao azul escuro para aquele rosto.

Existem outros métodos de cálculo de espessura, onde não é utilizada a direção de um único raio. Como AO atirou em muitas direções do hemisfério. As cores finais representam a média dessas distâncias.

Comparação - Profundidade normal (OSL) / Oclusão de ambiente / Profundidade de Lambert (OSL) O

objeto de barra tem 1 m de altura e 1 m de profundidade em forma de objeto em cunha. A barra à esquerda usa o sombreador de profundidade normal e funciona apenas porque a distância é medida SOMENTE de uma direção. O cubo tem 0,5 m, portanto, verde puro na cor correta para a distância no meio da barra. Mas, como você pode ver, outros dois sombreados permitem que você saiba que os cantos do cubo são mais finos na observação 3D do que a massa média do cubo.

O sombreador NormalDepth parece ser preciso ... com valores de Ambient Occlusion e Lambert que tive que jogar, para obter cores semelhantes. E eu não tenho ideia de como controlar.

3 RobinBetts Aug 17 2020 at 21:16

Este é apenas um suplemento à resposta de @vklidu. AO parece ser o caminho certo a seguir. Pode haver outras medidas de 'espessura', a serem consideradas, no entanto, dependendo da sua aplicação.

Eu ia escrever um sombreador OSL rápido, tirando o comprimento de um raio do normal, mas todo o território foi coberto de forma muito abrangente por @Robert Pali, aqui . Portanto, nenhum crédito aqui para esta resposta por favor, os scripts são dele.

Usando a espessura lambertiana de @Pali (enviesada para o normal, mas com amostragem em torno dele) para o modelo, e sua espessura normal simples para a cunha de cor de 0-1, resulta o seguinte:

Como @vklidu mencionou, você pode garantir que os mapeamentos permaneçam em sincronia. entre os materiais, colocando o mapeamento de alcance em um grupo e editando o grupo em um só lugar para todos os materiais:

A única diferença entre os shaders de @Pai e AO é que AO envia raios de amostragem ' Samples ' no hemisfério em torno da normal do ponto de sombreamento, e ele envia apenas um, enviesado nas maneiras que descreve em sua resposta.