Я пытаюсь решить, какой самый эффективный способ отрисовать кучу кубов с разными текстурами в игре, похожей на Minecraft.
Я обнаружил отрисовку экземпляров. Что я сделал, так это создал единую «модель куба», в которой хранятся все вершины, нормали и координаты текстуры для куба, я создал из этого буфер массива и один раз передал его в графический процессор. Затем я создал массив структур (вектор перевода, индекс текстуры) и использую экземплярный рендеринг, чтобы перерисовывать один и тот же куб снова и снова, каждый раз переводя и с соответствующей текстурой.
(Надеюсь, Нотч не возражает против того, чтобы я использовал его текстуры, пока я не сделаю свою собственную)
Проблема в том, что не все 6 сторон всегда будут иметь одинаковую текстуру, и я пытаюсь понять, как я могу сделать их разными для каждого типа блока. Два решения, которые я придумал:
- Используйте разные модели для каждого типа блока. Таким образом, я могу указать разные координаты текстуры для каждой из вершин. Я все еще могу использовать инстансный рендеринг, но мне пришлось бы делать отдельный проход для каждого типа блока.
- Передайте 6 "текстурных индексов" (по 1 на каждую грань) вместо 1 на каждый блок.
Второе решение требует передачи гораздо большего количества, возможно, избыточных данных. Я не уверен, насколько велики преимущества инстансного рендеринга... поэтому я не знаю, что лучше сделать, скажем, до 256 "проходов" (по 1 для каждого типа блока) или "один большой pass" со всеми данными и визуализировать каждый блок за один раз.
Или, может быть, есть другой метод, о котором я не знаю?