Отображение текстур или тайлинг текстур для воксельной игры? (Единство)

Я создаю игру на основе вокселей, которая во многих аспектах визуально напоминает Minecraft, а именно текстуры с низким разрешением и квадратные блоки.

Очевидно, что оптимизация важна для таких игр по целому ряду причин, но есть две, с которыми я столкнулся и которые кажутся взаимоисключающими: наложение текстур и мозаичное размещение текстур.

С наложением текстур я бы сгенерировал единую текстурную карту всех существующих блочных текстур, что, как я читал, может значительно повысить производительность. Проблема с этой оптимизацией заключается в том, что мозаичное наложение текстур кажется невозможным, поскольку этот метод основан на том, что первый и последний пиксели файла текстуры относятся к одной и той же текстуре, что уже не так, когда используется сопоставление. Это также означает, что беспорядки соседних блоков никогда не могут быть объединены, насколько мне известно.

С помощью тайлинга большие группы блоков с одинаковыми текстурами могут быть объединены в единую сетку из 2-х треугольников. Несмотря на свою эффективность, каждой текстуре потребуется свой собственный объект Material, а это означает, что для каждой отличающейся блочной текстуры потребуется собственная подсетка.

Какой из них с большей вероятностью обеспечит превосходную общую производительность?


person QuaternionsRock    schedule 22.08.2019    source источник
comment
Объединение сеток звучит великолепно, но это очень сложно реализовать.   -  person shingo    schedule 22.08.2019
comment
Сочетание текстур было бы неплохой идеей. Используйте аппаратное создание экземпляров для рисования нескольких сеток. Включите индекс текстуры в данные экземпляра для адресации правильной текстуры (переадресация UV путем деления на количество плиток) . Вы даже можете попытаться сгенерировать кубы с помощью шейдера геометрии.   -  person Jeroen van Langen    schedule 22.08.2019


Ответы (1)


Они кажутся взаимоисключающими, но на самом деле это не так.
Minecraft не повторяет текстуру, он повторяет UV.

Принцип работы
Убедитесь, что UV-развертка всех прямоугольников с общей текстурой находится в одном месте.
Например, UV-развертка всех прямоугольников с травой должна располагаться поверх травы. текстуру в атласе.
Чтобы это выглядело красиво, вам потребуются бесшовные текстуры.
Кроме того, чтобы предотвратить размытие краев, вам необходимо убедиться, что все текстуры имеют некоторые отступы. между ними.

Пример:
Я сделал быстрый проект блендера, показывающий это.
Боковые прямоугольники имеют UV в одной и той же области текстуры, а верхний прямоугольник имеет UV в другой области текстуры.
"Повторение" выполняется с помощью бесшовных текстур в атласе.
В данном случае. отступы не добавлялись, так как они не нужны для пиксельных текстур.

введите здесь описание изображения Текстура взята из Майнкрафт.

person Chillersanim    schedule 22.08.2019
comment
Точечная фильтрация и отсутствие мипов не должны требовать заполнения. Однако, если это приемлемо, зависит от вашей игры, текстуры с более высоким разрешением без мипов могут выглядеть очень плохо на расстоянии. - person yes; 22.08.2019
comment
Я упомянул об этом в примере. Однако OP не уточнил, как он фильтровал, только то, что это низкое разрешение и что-то вроде Minecraft. - person Chillersanim; 22.08.2019
comment
Я думаю, что @QuaternionsRock означает, что он объединяет несколько кубов, объединяя их. Это создаст проблему, заключающуюся в том, что мозаичные текстуры не могут повторяться. - person Jeroen van Langen; 22.08.2019
comment
Почему? Пока UV не меняются, текстура повторяется по определению. Повтор текстуры и закрепление вступают в силу только в том случае, если UV находится за пределами пространства текстуры. - person Chillersanim; 22.08.2019