Затенение Cel / альфа-форма в текущей визуализации - PullRequest
0 голосов
/ 16 января 2020

Я играю с rgl, и я создал 3D-рендеринг мозга мыши, в котором структуры могут быть изолированы и окрашены отдельно. Исходные данные - это трехмерный массив, содержащий равномерно распределенные воксели.

Каждый воксел кодируется с идентификатором структуры.

Каждая структура визуализируется отдельно как me sh с помощью движущихся кубов и сглаживается с помощью лапласианского сглаживания, как реализовано Rvcg.

Некоторые из этих структур могут быть довольно небольшими, и было бы целесообразно рассматривать их в контексте всей структуры мозга.

Один из вариантов - создать нижний порог. me sh из всего набора вокселей, так что в me sh включена только внешняя поверхность мозга.

Эта поверхность может быть сглажена и представлена ​​с использованием низкого альфа в окраске rgl::shade3d граней. Это, однако, кажется весьма проблематичным для окна просмотра, поскольку оно замедляет вращение и c, особенно когда уровни альфа довольно низкие.

Мне было интересно, есть ли какой-нибудь способ реализовать какое-либо затенение cel в rgl, например, выделение в solid окрашивает альфа-оболочку 2D-проекции в область просмотра в реальном времени.

В случае, если мое описание было неясным, вот пример фотошопа того, что мне нужно. В идеале я бы не рендерил серую прозрачную оболочку, только контур.

Пример затенения Cel

Кто-нибудь знает, как это сделать, не углубляясь в OpenGL?

1 Ответ

0 голосов
/ 16 января 2020

Рендеринг прозрачных поверхностей идет медленно, потому что OpenGL требует, чтобы треугольники, составляющие их, сортировались сзади вперед. Порядок сортировки изменяется при повороте, поэтому вы будете выполнять большую сортировку.

Я не могу придумать какой-либо быстрый способ отрисовки нужного контура. Одна вещь, которая может сработать, учитывая, что вы начинаете с равномерно распределенных вокселей, - это визуализация внешней поверхности с использованием front="points", back="points", size = 1. Выполнение этого с примером ?surface3d дает такую ​​поддельную прозрачность:

screenshot

Если этого недостаточно, вы можете улучшить его, избавившись от него. освещения (lit = FALSE), построения цвета, близкого к фону (color = "gray90"), или чего-то подобного. Выполнение обоих этих действий дает следующее:

screenshot 2

Вы также можете отбирать данные, чтобы на поверхности было меньше вершин.

...