Создание изометрических плиток из плоских текстур - PullRequest
0 голосов
/ 18 мая 2018

Существует ли простой инструмент (или код) для создания изометрических плиток (в формате кубов) с использованием 1 или 2 (боковых / верхних) текстур:

Например, взяв верхнюю и боковую текстуру травы Minecraft:

grass side grass top

И получение изометрического результата в виде:

isometric grass

У меня есть папка, содержащая все текстуры блоков (сверху и сбоку, если необходимо, блоки могут быть идентичными сверху / сбоку)

Я хочу перебрать и сгенерировать все изометрические блоки из этого ввода, сохранив ихкак файлы .png, но я не знаю, как объединить текстуры и сгенерировать их.

Существует ли существующее программное обеспечение, API, инструмент Cli, который я мог бы вызвать из своего итерационного скрипта?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Если вам все равно, превратится ли исходное изображение в размытый беспорядок, тогда обязательно используйте любой метод 2d масштабирования / преобразования, который вы хотите.Попробуйте повернуть текстуру с низким разрешением, кратную 90 градусам, и посмотрите, что произойдет - это ужасно.

Если вы хотите, чтобы результат выглядел идеально, то вам нужно использовать (достаточно прилично)3d рендерер для проекции - и отключить сглаживание.

Я готов поспорить, что Блендер мог сделать это, и это было бы бесплатно, хотя я не пробовал делать это в Блендере.Вероятно, есть способ сделать это любым 3D рендером, который позволяет полностью настроить камеру.Вы помещаете исходную квадратную текстуру на квадратную плоскую 2-мерную поверхность, а затем визуализируете ее с помощью созданной камеры, настроенной на орфографию (не перспективу) и соответствующим образом наклоненной - в вашем случае, поскольку плитки выглядят для меня диметрическими, повернутыми в любую сторону на 45 градусова также 30 градусов вниз.Это даст вам идеальный для рендеринга пиксель рендеринг, который вы можете просто сохранить в файл или скопировать в буфер обмена для редактирования в любом графическом программном обеспечении, которое вам нужно - вам все равно нужно будет добавить к нему альфа-канал, например.

Если вы правильно настроили угол камеры, вам просто нужно немного поиграть с расстоянием камеры, чтобы ваш исходный объект + текстура поместились в окне рендеринга, а высота была в центре - но это не долго и не сложнопроцесс, так как вы уже знаете, какой размер вы хотите, и центрирование тоже не сложно.Даже если расстояние слишком велико, оно все равно будет выглядеть почти правильно - слишком маленьким.Затем вы просто перемещаете камеру ближе к целевому объекту (в локальных координатах, чтобы углы не менялись), а затем повторно визуализируете и повторяйте при необходимости.Вы должны сделать этот шаг только один раз вручную, после чего вы загружаете сохраненную сцену в Blender / 3ds Max / Maya / Wh независимо от того, что вам нужно, и меняете текстуру.

Вот хороший онлайн-учебник для того, чтобы делать именно то, что вы хотите в3dsmax, но, опять же, я думаю, что он будет в значительной степени работать в любом реальном 3D-рендере, который дает вам полный контроль над камерой:

http://www.pixelpilot.dk/isometric.htm

Обратите внимание, что если ваша плитка имеет высоту выше 0плоскость (ваш пример это делает), тогда вам придется принять это во внимание - возможно, вы захотите начать с чего-то более простого и сначала разобраться с этим, прежде чем заняться высотой.

Это действительно действительно единственныйспособ сделать это правильно и получать неизменно хорошие результаты.Единственные альтернативы: а) быть талантливым художником и просто рисовать свои спрайты; б) иметь спрайты с таким низким разрешением, что это не требует какого-либо примечательного уровня мастерства.

В противном случае, как и все мы, сначала вы моделируете его в 3d, а затем визуализируете, чтобы получить проекцию, а затем подносите его вручную в редакторе изображений после выполнения тяжелой работы.

Надеюсь, это поможет.

0 голосов
/ 26 декабря 2018

Для такого простого 3D-куба вы можете следовать документации ImageMagick :

convert \
 \( tile_top.png -alpha set -virtual-pixel transparent \
    +distort Affine '0,512 0,0   0,0 -87,-50  512,512 87,-50' \) \
 \( tile_left.png -alpha set -virtual-pixel transparent \
    +distort Affine '512,0 0,0   0,0 -87,-50  512,512 0,100' \) \
 \( tile_right.jpg -alpha set -virtual-pixel transparent \
    +distort Affine '  0,0 0,0   0,320 0,100    320,0 87,-50' \) \
 \
 -background none -compose plus -layers merge +repage \
 -compose over isometric_cube.png
...