Объёмный рендеринг

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Изображение черепа, полученное при помощи объемного рейкастинга (2008 г.)
Изображение предплечья, полученное в результате объемного рендеринга (1995 г.) компьютерной томографии. Разными цветами выделены мышцы, жир, кости и кровь.

Объемный рендеринг — техника, используемая для получения плоского изображения трехмерного дискретного набора данных.

Под входным набором данных часто подразумевается множество плоских изображений слоев, полученное при компьютерной томографии или магнитно-резонансной томографии. Обычно слои имеют равную толщину (например, фотографируется один слой на миллиметр) и равное количество пикселей на каждый слой. Таким образом, входными данными является регулярная сетка вокселов, где каждому вокселу соответствует усредненное значение (температура, плотность материала) в данной точке трехмерного объекта.

Объемная модель может быть получена либо путем построения полигональной сетки на основе входных данных, либо прямым объемным рендерингом. Алгоритм Marching cubes является стандартным для преобразования набора вокселей в полигональную модель. Прямой объемный рендеринг является сложной вычислительной задачей, которую можно выполнить несколькими способами.

Прямой объемный рендеринг[править | править исходный текст]

Прямой объемный рендерер [1][2] сопоставляет значению каждого воксела цвет и прозрачность. Это делается при помощи передаточной функции, которая может задаваться кусочно-линейной функцией или таблицей значений. После этого полученное RGBA значение выводится в кадровый буфер. После прорисовки всего объема получается цельная картинка.

Объемный рейкастинг[править | править исходный текст]

Объемный рейкастинг (2010 г.)

Объемный рейкастинг является применением уравнения рендеринга на практике и дает очень качественные изображения.

Сплэттинг[править | править исходный текст]

Более быстрый способ, дающий изображения худшего качества. Lee Westover называет этот способ «бросанием снежков» (англ. splatting). Вокселы «бросаются» на поверхность просмотра в порядке удаленности от нее, от дальних к близким. Получившиеся «следы от снежков» (сплэты) рендерятся как диски, цвет и прозрачность которых изменяется в зависимости от диаметра в соответствии с нормальным (гауссовым) распределением. В различных реализациях могут использоваться другие элементы или же другие распределения.


Аппаратное ускорение объемного рендеринга[править | править исходный текст]

Благодаря тому, что объемный рендеринг легко распараллеливается, специализированное оборудование для его проведения являлось предметом многочисленных научных исследований, до того момента, когда обычные видеокарты стали справляться с этой задачей за приемлемое время. Наиболее популярной технологией явлалась VolumePro[3], которая требовала много памяти и использовала неоптимизированный рейкастинг в качестве базового алгоритма.


Оптимизация[править | править исходный текст]

Пропуск пустого пространства[править | править исходный текст]

Часто система объемного рендеринга получает на вход дополнительную информацию, определяющую области, которые не содержат материала, требующего отрисовки. Эта информация может быть использована для того, чтобы не тратить время на отрисовку заведомо прозрачных областей[4].

Ранняя остановка луча[править | править исходный текст]

Эта техника используется при рендеринге от ближней плоскости отображения к дальней. Фактически является поверхностным рейкастингом.

Октодерево и BSP[править | править исходный текст]

Использование таких иерархических структур, как октодерево и BSP-дерево, может быть полезным как при сжатии входных данных, так и при оптимизации объемного рейкастинга.

Сегментация пространства[править | править исходный текст]

Выделив неинтересные для отображения части пространства еще до рендеринга, можно значительно уменьшить количество вычислений при рейкастинге или смешивании текстур. В зависимости от используемого алгоритма, вычислительная сложность уменьшится от O(n) до O(log n) для n последовательных вокселей. Применении сегментации пространства помогает значительно ускорить алгоритмы рендеринга, использующие рейкастинг.

Представление со множественным и адаптивным разрешением[править | править исходный текст]

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