Создание изометрических плиток из плоских текстур

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

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

трава верхушка травы

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

изометрическая трава

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

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

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


person Retsim    schedule 18.05.2018    source источник
comment
Я не уверен точно, что вы хотите, но у меня есть unix-скрипт Imagemagick bash под названием 3Dbox, который может принимать до 6 изображений и помещать их в форму куба и просматривать в перспективе с помощью или орфографически, регулируя аргумент преувеличения перспективы. См. fmwconcepts.com/imagemagick/index.php.   -  person fmw42    schedule 26.12.2018


Ответы (2)


Чтобы создать такой простой 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
person Wolfgang    schedule 26.12.2018

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

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

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

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

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

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

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

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

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

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

person Daemonjax    schedule 06.02.2019