Есть чанк 16х16х16, состоящий из восьмиразрядных целых чисел (Для простоты передачи через сеть).
Каждое значение является индексом в некоем массиве, содержащем инфу о вокселе (текстуры сторон, имя и так далее).
Каждый чанк по факту это отдельный меш, в который мы пробрасываем текстуру атласа.
Текстура атласа генерится из тех текстур, которые указаны в массиве информации о вокселях, индексы идут в него же для последующего мешинга.
Каждый воксель может иметь шесть разных текстур любого, но квадратного и кратного 16 размера. Основная проблема заключается в том, что нужен способ как-то подружить эти текстуры и натягивать их при помощи одних и тех же текстурных координат на воксель.
Я предложил решение, в котором этот атлас мы генерим при помощи кадрового буфера и VAO: биндим текстуру, бросаем матрицу в шейдер и рисуем один и тот же квад с разными текстурами по разным координатам, в конце концов получая адекватный атлас, в котором все тайлы одинакового размера. Копирование попиксельно здесь тоже может сработать, но нужен интерполятор, а его я тащить в код не хочу.