Как упоминалось в первом посте этой серии, я создаю воксельный движок и даю себе на это 100 дней (#100daysofcode). Я назову его GrokVox, и я буду работать ежедневно и перерабатывать основные обновления в сообщения в блогах, а также делать ежедневные небольшие обновления в Twitter.

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

Что такое воксель?

Начнем с более часто используемого эталона — пикселя. Пиксель — это точка выборки в 2D-пространстве. Затем его часто визуализируют как квадрат, но это просто для заполнения пространства вокруг пикселя. Сам пиксель — это просто центр квадратов, которые мы обычно считаем пикселями.

Теперь экстраполируйте это на 3D. Воксель — это просто пиксель с 3-м измерением его положения. И чтобы визуализировать его, мы часто используем куб, чтобы заполнить пространство вокруг него, хотя, безусловно, есть и другие способы сделать это.

Чем полезен воксель?

Часто в компьютерной графике мы визуализируем объекты, определяя только их поверхность. Это делается с помощью треугольных сеток, состоящих из вершин, лежащих на поверхности. Современные графические чипы созданы для того, чтобы делать это очень эффективно, и они хорошо работают для большого количества вариантов использования. В конце концов, как часто мы видим что-то кроме поверхности предмета?

Но что, если вы хотите смоделировать внутреннюю часть объекта? Что, если вы хотите иметь возможность разбить его на более мелкие части или понять плотность или состав объекта по какой-то причине? Введите воксель. Воксель — это объемное определение объекта (отсюда vo в вокселе).

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

Общие воксельные приложения

Воксели полезны для различных приложений. Вот некоторые из них:

  • Медицинская визуализация: существует множество измерительных устройств, которые считывают различные свойства материи и могут преобразовать эти свойства в структурированные данные, которые затем могут быть визуализированы для медицинских работников. Примеры включают МРТ, компьютерную томографию и многое другое.
  • Игры: Minecraft, пожалуй, король вокселей, когда дело доходит до игр. Геймплей почти полностью основан на разрушении и восстановлении миров, определяемых вокселями. Мой движок будет максимально похож на эти типы миров.
  • Искусство: воксели обеспечивают четко определенную и ограниченную структуру для представления 3D-объектов. Ограничения, которые они обеспечивают, также помогают определить последовательный вид воксельного искусства и, по крайней мере для меня, вернуться к временам, когда лего и 8-битные видеоигры служили моим развлечением.

Что дальше?

Завтра я приступлю к самым основам моего движка рендеринга в Metal. Я начну с простого рисования трехмерных треугольников на экране. Эти 3D-треугольники позже послужат строительным блоком для представления всех вокселей на экране.