Играя с созданием пейзажей Minecraftish / Lego World в Unity 3D (процедурно генерируемые воксельные ландшафты с кубами), я обнаружил, что сетки, созданные для этих ландшафтов, занимают много памяти. Сетка в настоящее время состоит только из вершин для видимых сторон куба. Использование памяти для сложной местности может занять 6 или 7 сотен мегабайт.
Эти сетки можно оптимизировать, но я изо всех сил пытаюсь найти достойный алгоритм для этого.
Алгоритм должен учитывать, что вы не хотите «объединять» блоки разных типов местности. Я полагаю, что действительно простым началом было бы просто обработать все блоки вдоль одной оси и выполнить дополнительные развертки для двух других осей.
Мне нужно сохранить форму сетки, чтобы не было слияния вершин до такой степени, что меняется пустое или сплошное пространство. Причина в том, что могут быть существа / и т.д., которые все еще должны перемещаться по мешу. Так что я не могу просто создать очень низкую детализацию, искаженную сетку.
Любые мысли / предложения / советы по этому поводу?
источник
Ответы:
Мой вопрос:
Зачем вам нужен сам меш для перемещения существ?
Разве вы не можете рассчитать пути на трехмерной матрице идентификаторов?
Я думаю, что Minecraft использует 3d-матрицу с 4-битным pr-блоком. Это также только симулирует существ определенного радиуса вокруг игрока.
Вы можете хранить свои чанки в структуре oc-дерева, где каждый чанк сжимается.
Если вы храните сжатые данные в оперативной памяти, вы можете распаковать данные довольно быстро, когда это необходимо.
источник
Как насчет использования октодерева для хранения ландшафта?
Например, air = no node, у всех других типов местности будет узел с типом местности.
При вставке / удалении узлов вы можете проверить, имеют ли все восемь дочерних узлов каждого узла в измененном пути дерева один и тот же тип terain, и объединить их при необходимости. Таким образом, большие блоки из одного материала будут занимать только один узел.
источник
Вы создаете кубы только для тех частей геометрии, которые видит игрок? Это был бы мой первый шаг. В зависимости от размера вашей местности вам не нужно загружать весь мир / рисовать / видеть / что угодно.
источник