Как создаются двигатели рельсов вокселя?

Несколько дней назад я нашел нечто, называемое вокселями, и я думаю, что они довольно крутые. Но я ничего не знаю о них. Вы моделируете его в своем программном обеспечении для моделирования или используете что-то вроде карты высот? Я читал в wikipedia , что вокселы похожи на трехмерные пиксели или объемные пиксели.

После того, как я создаю местность вокселей, как я могу использовать эти вокселы и сделать их уничтожаемыми /diggable ?


Я выберу лучший ответ на основе:

  1. кода и алгоритмов. предпочтительно на основе C #
  2. объяснения. Я начинаю с алгоритмов, но я очень хорошо знаком с объектно-ориентированным программированием.
  3. пошаговые демонстрации. Не только концепция, но и направление.
  4. диаграммы /иллюстрации. Нет, не скриншоты других движков.


Я знаю, что это сложный вопрос. Но, спасибо за любую помощь!

Нет, я не пытаюсь сделать клон minecraft.


Изменить

Спасибо всем за вашу большую помощь (особенно Ник Виггилл)! Это - это то, что мне удалось сделать (работа продолжается).

51 голос | спросил Daniel Pendergast 29 PM00000060000002231 2011, 18:24:22

3 ответа


57

Чтобы создать рельеф воксела

(a) Общим методом является создание карты высот с использованием шума Perlin. Карта высот - это в основном монохромное изображение, представляющее разную высоту по темноте или легкости его пикселей.

введите описание изображения здесь>> </p>

<p> Вы будете рассматривать отдельные пиксели в этой карте высот для создания «стеков» вокселей до разных высот (по оси z) в разных (x, y) местах в соответствии с яркостью этого пикселя в изображении высотной карты. Поскольку изображение шума Perlin является гладким (без острых краев света против темноты), в результате вы получите плавно движущийся рельеф. </p>

<p> <strong> (b) </strong> Вы можете построить его постепенно, создав ландшафт из разных полиэдров. Создайте многогранную векторную форму, которая приближается к форме вокселя, которую вы хотите. Используя любой метод 3D-точки в полиэдрах (чаще всего, point-in-convex-hull), проверьте, какие точки вашей мировой сетки попадают в этот многогранный том. Например, определите пирамиду в пространстве. После проверки каждой точки в локальном регионе вашего мирового пространства против этого пирамидального тома вы узнаете, какие точки попадают в нее, и вы можете установить эти ячейки как «настоящие», что означает, что они становятся вокселями, а не пустым пространством. Теперь у вас есть воксельная пирамида. Таким образом, вы можете продолжать добавлять формы любого вида, пока не сформируете ландшафт. </p>

<p> <strong> (c) </strong> (На самом деле это то же самое, что <strong> b </strong>). Напишите инструмент моделирования. <a href= Voxatron показывает, как это будет выглядеть. Это просто создает формы вокселей в заменяющем мире (редакторе), а затем импортирует их в ваш реальный игровой мир. Я считаю, что Voxlap имел первый открытый редактор для вокселей. Вы можете разместить отдельные воксели, или вы можете использовать воксельную «кисть» с разными формами /томами, чтобы рисовать вокселы в ваш мир.


Что вам нужно, чтобы создать свою собственную игру на основе вокселов

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

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

Сказав это, ваше «поколение воксельной местности» требует контекста, в котором работать, поскольку двигатели вокселов не очень широко распространены. Давайте перейдем к базовому описанию работы двигателя воксела.

Voxels - это основные строительные блоки вашего мира. Их позиции определяются трехмерной сеткой (массивом) с целым числом индексов, а не непрерывным пространством с плавающей запятой (как используется в векторных 3D-играх). Это будут «атомы» вашего мира. Они могут быть на 3 фута в высоту, как в играх, таких как Minecraft, или они могут быть меньше, чем может видеть ваш глаз виртуального персонажа, если только они не группируются в больших количествах - немного больше похожи на молекулы. Существует два вида:

  • Vokels на основе кубической сетки ( пример ) - эти являются более новыми, используются для простоты и легко используются в сочетании с современными графическими технологиями. Используется в играх, таких как MineCrat и Dungeon Keeper.
  • Точки voxels ( пример , пример ) - оригинальный воксел. Каждая из них является отдельной, коллидируемой точкой в ​​пространстве, хотя она может быть окружена сферическим ограничивающим объемом. Они проще, поэтому в вашем мире может быть гораздо больше, и вы можете сделать их меньше, что в целом благоприятно. Две игры, в которых они использовались, - «Команч» и римейк «Лордов полуночи» 1990-х годов.

В любом случае, ваш подход к манипулированию вокселями в вашем мире почти такой же, как и в следующем.

Чтобы создавать и перемещать объекты в вашем мире, вам понадобятся математические инструменты, упомянутые выше. Например, чтобы создать стену: создайте поле соответствующих размеров в 3D-пространстве, используя векторы. Используйте математическую матрицу, чтобы преобразовать поле в поворот и положение, которое вы желаете в своем 3D-мире (в непрерывном векторном пространстве). Для двигателя воксела дополнительный шаг теперь должен использовать трехмерный алгоритм «точка-в-полиэдр» дляопределите, какой из ваших вокселей попадает внутрь этого вращающегося пространства.

По существу, именно так вы строите большинство объектов в вашем мире. Кроме того, вы могли бы написать свои собственные инструменты, чтобы «моделировать» персонажа так, как вы могли бы сказать, Maya или 3DS Max. Но так как вы моделируете свой персонаж из вокселей вместо точек, краев и граней, ваши методы будут существенно разными. Если вы решили затем повернуть эти объекты в своем мире, вам нужно будет также использовать преобразования матриц, чтобы сделать это.

Разрушаемая местность так же проста, как либо удаление одного воксела за один раз в соответствии с каким-либо выбранным вами методом, либо с использованием операций CSG (Constructive Solid Geometry) на больших томах вокселей, чтобы удалить их в соответствии с определенным предопределенным объемом; например, при стрельбе лазерным лучом через скалу, вы можете использовать цилиндрический объем, чтобы вычесть вокселы здесь, когда луч стреляет по скале. CSG - относительно простой процесс с использованием трехмерных пространственных сеток, которые формируют ваш мир вокселей, и проверяя каждую ячейку в секции базовой сетки (в данном случае скалы) на другую сетку (в данном случае лазерный луч)

Чтобы материальные «потоки» (как намекнул Вигил в своем комментарии на песке), вам нужно будет изучить динамику жидкости и клеточные автоматы. Они были использованы автором карликовой крепости Тарн Адамс в том, что по сути является также воксельным миром (хотя вокселы в этом случае намного больше, сопоставимые с Хранителем Подземелий, принцип остается тем же). Это самые острые темы, а не необходимость для двигателей вокселей, как определено, поэтому я оставлю это как «заглушку» для ваших собственных исследований.

CSG и динамика жидкости приводят меня, наконец, к оптимизации. Двигатели Voxel, которые в настоящее время разрабатываются, почти исключительно используют разреженные октеты вокселей (SVO), которые представляют собой метод разделения пространства вокселей на различные разрешения, о чем свидетельствует в этом видео , демонстрируя предстоящий движок Atomontage. Использование octrees /SVOs является более необходимым, чем выбор оптимизации, из-за накладных расходов на обработку, связанных с обработкой одной массивной единой сетки. Окци - это, по сути, дерево (направленный ациклический граф), где каждый узел имеет либо 8, либо нулевые дочерние узлы в зависимости от того, содержит ли пространство, которое оно представляет, какие-либо физические тома. Диаграммы, показывающие, как octrees подразделяют пространство на формирование вокселей, здесь .

Лучшая версия voxel с открытым кодом, которую я знаю, это Voxlap Engine , который был использован для Voxelstein3D. Он написан на C ++ и реализует операции CSG для деформации местности.

ответил Arcane Engineer 29 PM00000060000001831 2011, 18:39:18
33

Лучший способ создания интересной местности вокселя - это карта плотности шума Perlin. Вместо использования 2D-карты шума Perlin, определяющей высоту 3D-мира, используйте 3D-карту шума Perlin. Нарисуйте карту так, чтобы значения, расположенные ближе к основанию, были более устойчивыми, а значения ближе к вершине определенно будут воздухом. Это дает вам высоту в мире, но также позволяет навесы и пещеры, похожие на Minecraft ландшафт , так как этот боковой вид фрагмента местности показывает:

Мир с нависаниями

Отсюда вы можете протестировать плавающие острова или добавить пещерные системы с использованием фрактального шума:

Мир с пещерной системой

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

ответил dlras2 29 PM00000090000001931 2011, 21:24:19
4

Другие ответы здесь превосходны, но я принял несколько иной подход.

Я создаю среду в инструменте моделирования (3DSMAX) и создаю из нее разреженный октет. Каждый кубический, непустой листовой узел является вокселом. Во время рендеринга я использую raycasting (внедренный в HLSL), чтобы найти, какой воксель занимает этот пиксель, и установить пиксель в цвет, хранящийся в узле, который я вычислил при генерации дерева путем усреднения значений текстуры из исходной модели.

Это дает вам много приятных преимуществ - обнаружение конфликтов бесплатно, переменная LOD, выбор пространства для просмотра и т. д. - и, кроме raycaster - его легко реализовать.

К сожалению, почти невозможно отправить образец кода с телефона.

ответил 3Dave 4 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 04 Sep 2011 03:55:45 +0400 2011, 03:55:45

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132