Следите только за кубами, описывающими вашу поверхность. Вы можете сделать это с помощью простой структуры данных, где каждый куб хранит ссылки на своих соседей. На любой современной графической карте не должно быть проблем, чтобы подтолкнуть все эти треугольники. Визуализировать сзади и вперед. Также визуализируйте кубы только ближе, чем на определенном расстоянии от зрителя. «Мир» может начаться с огромного «куба кубов», внешних оболочек куба, сделанных кубиками. Если кто-то копает, у вас есть проверка, если соседние местоположения уже содержат кубы или нет, если нет, вы создаете эти кубы и связываете их.
Пример: копать одну плоскую поверхность: удалить куб, который расположен там, где проводится копание, добавить 9 новых кубов внизу (но проверьте, если эти позиции уже используются, в случае их использования), соедините вместе поверхность, но связав новые кубы соседу кубы одного удалены.
Итак:
Для мира, содержащего 1000x1000x1000 кубов, вы получите: 1000 *1000* 2 + 998 * 999 * 4 = 5988008 вместо 1000 *1000* 1000 = 1000000000 или в 167 раз меньше кубов.
Конечно, вы не должны рисовать все эти кубики, начните с простого расстояния до зрителя, чтобы сделать дополнительный выбор.
Вы также можете объединить 8 кубов (групп) в одну группу, а затем продолжать так до тех пор, пока на верхнем уровне не будет только одна группа кубов (уже упоминалось октавное дерево). Это дерево можно использовать для трассировки лучей, какую часть мира вам нужно рисовать, а не рисовать. Если группа содержит ссылки на 8 других кубов-групп, то те, что позади, не отображаются. В этом случае будут те группы кубов, которые не пересекаются и не лежат вне конуса с трассировкой лучей, начиная с пользователя, и проходят только по краю группы, используемой для тестирования. (Плохое описание, но я надеюсь, что вы все равно получите некоторые подсказки о том, что можно сделать для оптимизации). Это, скорее всего, не понадобится на современных видеокартах.
Удачи в вашем проекте.