Skip to content

exporting data (ru)

nklbdev edited this page Aug 1, 2023 · 3 revisions

Общие заметки об экспорте данных из исходных файлов

en ru

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

Варианты раскладки атласа

Основных вариантов раскладки всего два: табличный и упакованный. Но табличный еще разделяется на строчный и столбцовый.

Табличная раскладка

Строчная табличная раскладка Столбцовая табличная раскладка

Табличная раскладка атласа удобна, если:

  • вам важно, чтобы спрайт не менял свои размеры во время анимации
  • вы собираетесь импортировать данные просто как Sprite sheet (изображение атласа и ресурс JSON без хранимого текста, но с полной информацией о спрайтах и анимации в свойстве data), которую будете использовать для самостоятельного создания анимаций на ее основе. Например, вы собираетесь анимировать свойство frame или frame_coords у узла Sprite2D, потому что плагин их не поддерживает.

Упакованная раскладка

Упакованная раскладка

Упакованная раскладка выгодна с точки зрения экономии памяти, потому что спрайты в ней обрезаны и расположены компактно.

Артефакты

На границах текстур при рендеринге иногда возникают артефакты - заметные границы, которые бывают двух видов:

  • Последствия неточного масштабирования и расположения спрайтов относительно друг друга, что приводит к появлению мерцающих зазоров, например, между тайлами на тайловых картах. Так же от этого могут попадать в кадр даже ближайшие соседствующие с регионом спрайта пикселы. Это можно наблюдать даже при фильтрации текстур методом ближайшего соседа ("Nearest Neighbor"). Частично от этого помогает настройка "Project Settings -> General -> Rendering -> 2D -> Snapping -> Use GPU Pixel Snap". Но даже она не поможет при нецелочисленном масштабировании.

  • Последствия взаимного влияния крайних пикселов спрайта и соседствующих с ними внешних пикселов атласа при линейном ("Linear") методе фильтрации текстур. Они появляются по причине того, что графический процессор фильтрует не атлас, и не спрайт, а экранные пиксели. И для каждого из них он смешивает цвета ближайших пикселов атласа в пропорциях удалённости. Таким образом, на цвет экранного пиксела рядом с границей спрайта влияет цвет пикселов атласа, находящихся за границей спрайта. Это порождает 2 проблемы:

    • Резкие кромки на границах спрайта при общей его сглаженности.
    • Проникновение цвета соседних со спрайтом пикселов атласа в регион спрайта.

Способы избежания артефактов по краям спрайта

Здесь нет "серебрянной пули", которая решит все проблемы, но есть несколько способов, каждый из которых хорош при определённом виде применения спрайта.

Без изменений (None)

None

Спрайты в атласа плотно прилегают друг к другу. Этот способ подойдёт в следующих случаях:

  • Текстуры фильтруются методом ближайшего соседа, и не используется дробное масштабирование объектов.
  • Текстуры фильтруются линейным методом, но, раскладка атласа табличная, спрайты не обрезаны, и в исходной анимации рисунок никогда не касается границ изображения.

В остальных случаях этот метод будет порождать артефакты.

Этот метод совместим с анимацией узла Sprite2D с помощью свойств frame и frame_coord, если используется табличная раскладка атласа.

Прозрачное разделение (Transparent Spacing)

Transparent Spacing

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

  • Текстуры фильтруются методом ближайшего соседа, и применяется дробное масштабирование. В этом случае цвет соседних пикселов не проникнет в спрайт. Но это не защитит от возникающих иногда зазоров между тайлами, если маппинг региона атласа на канву произойдет неточно (последствия вычислений на числах с плавающей точкой).
  • Текстуры фильтруются линейным методом, и это порождает резкую кромку. Но иногда резкая кромка нужна для чёткой состыковки тайлов и некоторых других визуальных объектов.

Цветная обводка (Solid Color Surrounding)

Solid Color Surrounding

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

Выдавливание краев (Borders Extrusion)

Solid Color Surrounding

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

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

Прозрачное расширение (Transparent Expansion)

Transparent Expansion

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

Этот метод совместим с анимацией узла Sprite2D с помощью свойств frame и frame_coord, если используется табличная раскладка атласа.

Clone this wiki locally