Я начинаю курс статей, посвящённых секретам, техникам и методам строительства в Лэндмарке, а также расскажу немного о других воксельных играх и о вокселях непосредственно. Надеюсь, что кто-то найдёт это интересным, а ещё лучше полезным. Сегодня немного теории.
Следующая статья →
В последнее время вышло и готовится к выходу множество игр, так или иначе использующих в своей структуре воксели. В связи с этим наметилось два основных подхода организации вокселей, каждый со своими достоинствами и недостатками. Я, как человек к программированию не имеющий никакого отношения, не буду вдаваться в технические детали, я могу ошибаться с терминами, но всё же попробую объяснить.
Первый вариант более распространённый, в нём воксели независимы друг от друга, как детальки LEGO. При таком подходе мир поделён на равные кубические секции, внутри которых может находиться один любой объект из библиотеки: куб земли, факел или кочан капусты. Скорей всего в этой игре факел нельзя прикрепить к капусте, но это лишь геймплейное ограничение, принципиально движок это позволяет. И если это сделать, то кочан так и останется кочаном, не изменив свои очертания. Этот способ ограничивает в количестве форм, которые можно построить из вокселей, ведь нужно чтобы разработчики создали их заранее. Некоторые игры, например Blockscape, пошли по пути расширения коллекции форм вокселей: там есть отдельные формы для наклонных деталей под разными углами, формы шара, даже формы для сборки меча. Несомненно, что такое разнообразие позволяет комбинировать их огромным числом способов, но это число всё равно сильно ограничено, а манипулировать большой коллекцией становится слишком сложно.
А всё начиналось с нескольких кирпичиков.
Мне известен только один игровой движок, который организовал воксели иным способом — Voxel Farm — на котором создаются такие игры, как TUG и Landmark. Может кому-то это покажется удивительным, но воксели это не кубики, воксели — это точки, а вот от того, как они расположены друг относительно друга в пространстве и зависит номинальная форма. В принципе это может быть любое трёхмерное тело, есть примеры игр с шестиугольными призмами и даже тетраэдрами, но удобнее всего и привычнее являются кубы. Дейв Джордсон в своей заметке по ссылке выше смутил игроков, вызвав путаницу в терминологии. Хоть его вариант правильный с технической точки зрения, но я буду придерживаться уже сложившихся в игровой среде терминов. Номинальный кубик я буду звать вокселем, а его вершины (которые на самом деле воксели) так и буду звать вершинами. Разобрались? Поехали дальше.
Двумерное представление вокселей.
Номинальный минимальный воксель в Лэндмарке, как и всякий куб, имеет 8 вершин. Но благодаря инструментам мы можем менять его форму, фактически перемещая его вершины в пространстве. Главное свойство вокселей в Лэндмарке в том, что между ними не может быть пустоты (воздух тоже состоит из вокселей). Так как соседние воксели делят между собой вершины, то перемещая общую вершину, мы изменяем форму сразу нескольких вокселей (а точнее сразу 8). Вершина может «блуждать» от своего изначального места в достаточно широких пределах. Схематично это показано на рисунке сверху. Поиграться с формой вокселей можно здесь.
Если мы переместим все вершины одного вокселя в сторону к его центру на величину 0,5, то получим воксель нулевого размера. Этот нулевой воксель будет обладать всеми свойственными другим вокселям параметрами: материалом, из которого он сделан, владельцем, твёрдостью, свойственному этому материалу и прочая. Можно создать решётку из таких вокселей, чтобы преградить персонажу путь, или выстелить из них практически невидимый, но вполне работоспособный пол. Если немного постараться, то можно даже вывернуть воксель наизнанку, хотя я так и не нашёл адекватного ему применения. :)
Нуль-воксель.
Такой подход в организации воксельного пространства имеет свои недостатки — невозможно создать достаточно детализированную форму малого размера, например сферу. Шар, диаметром 4 вокселя и меньше по форме напоминает больше октаэдр. Шар диаметром 1 воксель невозможен в принципе, в этом приближении он будет выглядеть как куб. Звучит нелепо, вы правы. Зато, благодаря тому, что вершины вокселей могут плавно смещаться, можно получить совершенно потрясающие кривые, а прямые располагать под любыми углами. Надо только уметь, поэтому в следующий раз я расскажу не только что, но и как.
Следующая статья →
13 комментариев
Я ответил на вопрос? А то не совсем понял в чём он заключается.
Я все-таки, по опыту копания, моему и еще одного более компетентного в этом вопросе товарища, предположу, что BS от них достаточно сильно отличается. Да, старый движок использовал те же «марширующие кубы», но сейчас там все немного иначе.
Во-первых, используются булевы операции примитивов для создание сложных форм.
Насколько я знаю (по спецификации сейвов) записываются только чанки, изменённые игроком.
Вообще воксельное- только запись о блоках. Йенс преобразует кубики в поверхность из видимых частей. Именно поэтому при провале в текстуры видна изнанка.
А во-вторых, в тех же пользовательских моделях используются только координаты твердых блоков, хотя… Возможно, это и не обязательно указывает на отсутствие. Йенс же говорил, что использует модифицированный алгоритм шагающих кубов (marching cubes) для построения поверхности. Так что «воздух» не учитывается вообще.
В БС же это совсем не наглядно, но, как я предполагаю, весь мир там всё равно представлен в виде трёхмерного массива, и даже если часть этого массива занята пустотой, то это тоже в нём записывается. Но это лишь предположение.
С изнанкой тут точно так же — вот мир изнутри. Видеокарта не рисует все возможные полигоны, а лишь те, которые появляются на границе с прозрачной средой и которые обращены к камере. В принципе, это стандартный метод оптимизации, применяющийся ещё с самой зари игростроения.
Да и если есть сами блоки почему тогда их не учитыаают ни в моделях, ни в сейвах?
К тому же Йенс сам говорил, что воздуха нет, т.к. это модификация той технологии, что используется в фарме… Да и к тому же все равно не дает покоя тот момнт, что воздух не прописан вообще нигде, если он просчитыаается, то каким-то невообразимым для меня образом.))
Но выглядит очень интересно! :)