Неразрушающий способ редактирования альфа-канала в Photoshop /Gimp image

Хотите сделать текстуры для Unity3d, и я застрял в том, что кажется простым этапом. Моя цель - создать изображение RGBA, с информацией о цвете для каждого пикселя и отдельным альфа-каналом. Эти два компонента попадают в Unity в качестве базового цвета и силы отражения соответственно. (Использование материала «Отражающий /удаленный диффуз».)

Если я использую маскирующие инструменты в Photoshop, я могу стереть части выходного изображения (прозрачности). Тем не менее, я хотел бы сохранить исходную информацию о цвете RBG при выводе, а не просто «пустые» области. Кроме того, было бы неплохо, если бы я мог сделать это без разрушения, т.е. последний альфа-канал зависит от стандартного уровня или создается из объекта пути и т. д.

У меня такая же проблема с Gimp.

Любая помощь по этому поводу будет принята с благодарностью.

(Если Photoshop /Gimp не являются инструментами для работы, может кто-то, пожалуйста, порекомендуйте лучший?)

9 голосов | спросил eli 3 AM000000100000002131 2010, 10:40:21

5 ответов


4

Решение для Photoshop

Удаление раздела изображения осуществляется только этим слоем. Вы хотите создать отдельный канал, который хранит вашу альфа-информацию.

  1. На панели инструментов со слоями /каналами /контурами выберите вкладку Каналы. Здесь вы увидите RGB, красный, зеленый и синий.
  2. Создайте новый канал, используя кнопку внизу панели, это ваш альфа-канал. Это 8-битный канал с оттенками серого, обеспечивающий 256 уровней прозрачности.
  3. Вы можете использовать маленькие значки «глаз» для включения /выключения этого канала.
  4. Нарисуйте или скопируйте /вставьте свою информацию в канал.

Примечание. При сохранении вам нужно быть осторожным в форматах файлов. Такие вещи, как .Tiff & .TGA сохранить полный альфа-канал независимо от информации о цвете. Однако Photoshop не позволяет это с PNG, многим многим досадным разработчикам. Он не будет правильно сохранять изображения альфа-канала и имеет тенденцию выделять информацию о цвете для полностью прозрачных областей, чтобы сжать размер файла.

ответил wkerslake 3 PM00000090000005831 2010, 21:29:58
4

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

Затем слой будет иметь два связанных с ним «изображений» - изображение RGBA и маску слоя в оттенках серого, которая действует как дополнительный (мультипликативный) альфа-канал. Вы можете щелкнуть любое из этих изображений, чтобы выбрать, какой из них будет отредактирован.

Если вы удерживаете CTRL и нажимаете маску слоя, вы увидите только изображение RGBA (это отключает маску). Если вы удерживаете ALT и нажимаете маску слоя, вы увидите только маску слоя.

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

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

ответил Andrew Russell 3 AM000000110000001731 2010, 11:17:17
2

В GIMP одним из способов было бы разбить изображение на слои для каждого канала. Выберите «Цвета -> Компоненты - & Декомпозиция» и выберите RGBA или любые каналы, которые вы хотите разбить на слои. Затем отредактируйте свои индивидуальные альфа-каналы и цветные каналы по своему усмотрению (они должны быть в оттенках серого), затем перейдите в «Colors-> Components> Compose», выберите желаемый формат канала и выберите слои для каждого канала.

Кроме того, вы можете использовать диалог «Каналы». Он должен быть частью инструментария по умолчанию, но если вы не можете выбрать «Windows-> Dockable Dialogues-> Channels». Вы можете переключать видимость каждого цветного канала, и, щелкая и выделяя названия каналов, вы можете выбрать, какие из них нужно редактировать индивидуально (похоже, что он сохраняет цвет с альфой, хотя я не вижу способа «скрыть» альфу, пока редактирование без скрытия всего изображения ...).

ответил Riley Adams 3 AM000000110000003931 2010, 11:04:39
2

Чтобы написать свой собственный контент-обработчик (как предложено @Andrew Russell) для Unity3D, поместите этот скрипт в папку Assets/Editor объединить любое изображение *-Base.* с аналогичным именем *-Alpha.* и изменить исходную текстуру:

class AlphaCombinerPostprocessor extends AssetPostprocessor {
    function OnPostprocessTexture(texture : Texture2D)
    {
        if (assetPath.Contains("-Base.")) {
            var fn = assetPath.Replace("-Base.","-Alpha.");
            var alpha = AssetDatabase.LoadAssetAtPath(fn,Texture2D);
            if (alpha) {
                Debug.Log("Adding alpha from "+fn);
                var c : Color[] = texture.GetPixels();
                var a : Color[] = alpha.GetPixels();
                if (c.Length != a.Length) {
                    Debug.LogError(fn+" is different size to "+assetPath);
                    return;
                }
                for (var i=0; i<c.Length; i++)
                    c[i].a = a[i].a;
                texture.SetPixels(c);
                texture.Apply(true);
            }
        }
    }
}

Адаптируйте к соглашениям об именах своих собственных активов.

ответил Warwick Allison 13 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 13 Sep 2011 02:32:18 +0400 2011, 02:32:18
0

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

Если вы использовали XNA и GIMP (это то, что я использую и знакомы), вам было бы очень легко добавить этот импортер XCF в конвейер контента и внести необходимые изменения для обработки специально названных слоев.

Поскольку вы используете Unity, а не XNA, я не знаю, какие параметры конвейера контента доступны. Но, возможно, вы можете адаптировать связанный код так, чтобы он работал в вашем процессе содержимого.

ответил Andrew Russell 3 PM00000040000001831 2010, 16:41:18

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132