Звучит так, будто вы подходите к этому неправильно - при условии, что в вашем мире есть что-то большее, чем тривиальное количество кубов.Вы должны хранить мир (и его кубы) в пользовательской структуре данных, которая позволяет вам быстро определить, какие кубы (и грани) видны на основе правил вашего мира из данной точки, если смотреть в заданном направлении.
Затем каждый раз, когда вы визуализируете сцену, генерируйте пакеты буферов вершин только этих граней.Поэтому не используйте вершинные буферы в качестве основы для хранения всей геометрии вашего мира.Буферы вершин - это инструмент рендеринга, а не инструмент построения графиков мировой сцены.
Подобные крупномасштабные проблемы видимости намного быстрее выполняются в коде, чем в графическом процессоре.Например, если вы сидите в начале координат и смотрите + x, вы можете сразу проигнорировать все кубы в направлении -ve x, это очень простой пример.
Для более полного примера поиска по октавурендеринг.Этот вид рендеринга вполне соответствовал бы вашему плану мира.
Последний совет - когда я говорю «генерировать пакеты буферов вершин» - я имею в виду пакетирование кубов вместе таким образом, чтобы минимизировать изменения в состоянии графического процессора (например,текстура, тот же шейдер и т. д.).Минимизация изменений в состоянии графического процессора - это ключ к оптимизации рендеринга - после того, как вы сделали все возможное, прежде всего выбрав грани рендеринга.