Есть ли способ добавить легенду цвета в анализ сетки?

Aug 17 2020

Я провожу медицинское исследование, в котором необходимо проанализировать толщину стенок этого Объекта. Я использовал анализ сетки, который автоматически раскрашивал сетки. К сожалению, я не могу найти способ добавить цветную легенду, чтобы указать толщину стенок цветов. Я ищу что-то подобное:

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

Есть ли способ решить эту проблему?

Я наблюдал что-то подобное.

При этих настройках объект остается синим.

Поскольку я новичок в Blender, мне было непросто разобраться в редакторе шейдинга и использовании скриптов, но постепенно я стал с ним совместим. Когда я попытался восстановить настройки в редакторе шейдинга, мне не удалось подключить скрипт к группе ,, MaptThickness ". Я скопировал текст NormalDepth из вашего test_Thickness из volume projekt @vklidu и сохранил его как (.py) для установки это как дополнение, но это не сработало. Когда я сохраняю его как (.osl), Блендер даже не показывает его мне. Я думаю, это довольно просто, но как мне на самом деле реализовать сценарий?

Ответы

6 vklidu Aug 17 2020 at 11:41

А что насчет узла Ambient Oclussion с включенной функцией Inside ?
Я не уверен, насколько точен результат, но, похоже, работает намного лучше, чем анализ сетки .

(Полоса на экране - это просто двухмерный градиент.)

Сравните с анализом сетки, этот шейдер:

  • может быть отрисован (с помощью движка Cycles)
  • цвет назначается вершине (не грани)

Подсказки:

  • Чтобы использовать один и тот же узел ColorRamp в обоих материалах, закройте этот узел в группу узлов в одном материале и добавьте эту группу узлов во второй материал.
  • Переключение управления цветом с пленочного на стандартный

Примечание: Eevee с включенным AO производит цвета, но нет функции «Внутри», которую мы используем для толщины.


Точность

довольно интересный Q, так как толщина зависит от направления измерения. Как стеклянная пластина, которую мы используем, чтобы сказать и измерить толщину в направлении глубины, то есть тонкая. Но вы также можете измерить толщину в направлении ширины, которая в этом случае будет очень толстой.

Это то, что измеряет анализ сетки. Если вы проверите смешивание @RobinBetts с шейдерами OSL, внутри находится один материал, называемый NormalDepth, который выполняет то же самое, что и анализ сетки - он стреляет одним лучом в направлении нормали к другой грани. Это расстояние представлено соответствующим цветом, присвоенным лицу. Итак, если вы открываете группу узлов и проверяете узел Map Range - первые два значения определяют начало / конец Color Ramp .

Пример - From Min = 0 означает, что красный начинается на нулевом расстоянии, а From Max = 1 означает, что синий заканчивается на расстоянии 1 м. Играя с этими двумя значениями, вы можете точно указать, какое расстояние представляет ColorRamp. Так что этот материал кажется вам лучшим.

Но так же, как анализ сетки, он генерирует "странные" цветные лица, которые являются математически правильными. Например, когда вы проверяете нижнюю часть челюсти Обезьяны, там темно-синий, даже если часть меша не такая толстая, но луч, выпущенный от лица, идет до бровей, что делает расстояние соответствующим темно-синему для этого лица.

Существуют и другие методы расчета толщины, в которых не используется одно направление луча. Как и АО, много стрелял в направлениях полушария. Конечные цвета представляют собой средние значения этих расстояний.

Сравнение - Нормальная глубина (OSL) / Ambient Occlusion / Lambert Depth (OSL)

Bar объект имеет высоту 1 м и глубину 1 м в форме объекта клина. Бар слева использует шейдер нормальной глубины и работает только потому, что расстояние измеряется ТОЛЬКО в одном направлении. Куб 0,5 м, так что чистый зеленый цвет правильного цвета для расстояния в середине полосы. Но, как вы можете видеть, два других шейдера сообщают вам, что углы куба тоньше при трехмерном наблюдении, чем средняя масса куба.

Шейдер NormalDepth кажется точным ... со значениями Ambient Occlusion и Lambert мне пришлось поиграть, чтобы получить похожие цвета. И я понятия не имею, как это контролировать.

3 RobinBetts Aug 17 2020 at 21:16

Это просто дополнение к ответу @ vklidu .. АО кажется правильным путем. Тем не менее, в зависимости от вашего приложения, можно рассмотреть и другие меры «толщины».

Я собирался написать быстрый шейдер OSL, взяв длину луча из нормального, но вся территория была очень подробно рассмотрена @Robert Pali здесь . Так что, пожалуйста, не заслуги перед этим ответом, скрипты принадлежат ему.

Используя толщину Ламберта @Pali (смещенную к нормали, но выборку вокруг нее) для модели и его простую толщину Normal для цветового клина от 0 до 1, получаем следующее:

Как упоминалось в @vklidu, вы можете обеспечить синхронизацию сопоставлений. между материалами, поместив отображение диапазона в группу и отредактировав группу в одном месте для всех материалов:

Единственная разница между шейдерами @Pali и AO заключается в том, что AO отправляет выборочные лучи « Samples » в полушарии вокруг нормали точки затенения, а он отправляет только один, смещенный в соответствии с тем, как он описывает в своем ответе.