Photoshop / Gimp画像のアルファチャネルを編集する非破壊的な方法


9

Unity3d用のテクスチャを作成しようとしていて、単純なステージのように見えます。私の目標は、すべてのピクセルの色情報と個別のアルファチャネルを備えたRGBA画像を作成することです。これらの2つのコンポーネントは、それぞれベースカラーと反射強度としてUnityに送られます。(「反射/バンプ拡散」素材を使用。)

Photoshopのマスキングツールを使用すると、出力画像の一部(透明度)を消去できます。ただし、出力時に元のRBGカラー情報を保持し、「空白」の領域だけを残したくないのですが。また、私がそれを非破壊的に行うことができれば、それは素晴らしいことです。最終的なアルファチャネルは、標準レイヤーに依存しているか、パスオブジェクトなどから構築されています。

The Gimpにも同じ問題があります。

これに関するどんな助けでも大歓迎です。

(Photoshop / Gimpが仕事のためのツールではない場合、誰かがより良いものを勧めてくれますか?)

回答:


4

Photoshopソリューション

画像の一部を削除しても、そのレイヤーにのみ影響します。やりたいことは、アルファ情報を保存する別のチャネルを作成することです。

  1. レイヤー/チャンネル/パスのあるツールパネルで、チャンネルタブを選択します。ここでは、RGB、赤、緑、青が表示されます。
  2. パネルの下部にあるボタンを使用して新しいチャネルを作成します。これはアルファチャネルです。これは、256レベルの透明度を提供する8ビットのグレースケールチャネルです。
  3. 小さな「目」アイコンを使用して、このチャネルのオン/オフを切り替えることができます。
  4. 情報を描画するか、コピーしてチャネルに貼り付けます。

注:保存するときは、ファイル形式に注意する必要があります。.Tiffや.TGAなどは、色情報に関係なく完全なアルファチャネルを保存します。しかし、PhotoshopはPNGでこれを許可していません。アルファチャネルイメージを適切に保存せず、完全に透明な領域の色情報を取り除いてファイルサイズを圧縮する傾向があります。


これがまさに私の問題でした。私はPNGに出力していて、「アルファ」チャネルの良さを見ることはありませんでした。ありがとう、これは完璧です。同様にGimpを使用するための手順はありますか?
eli

1
バージョン5.0または5.5に戻ると、Photoshopは実際にフルチャネルをPNGに保存するため、イライラします。アドビは、ソフトウェアの以降のバージョンでの処理方法を変更しました。ため息...
wkerslake 2010

4

GIMPでこれを行う最善の方法は、レイヤーマスクを使用することです(レイヤーを右クリックしてマスクを作成する)。

レイヤーには2つの「イメージ」が関連付けられます。RGBAイメージと、追加の(乗算)アルファチャネルとして機能するグレースケールレイヤーマスクです。これらの画像のいずれかをクリックして、編集する画像を選択できます。

CTRLキーを押しながらレイヤーマスクをクリックすると、RGBA画像のみが表示されます(これによりマスクが無効になります)。Altキーを押しながらレイヤーマスクをクリックすると、レイヤーマスクのみが表示されます。

アクティブなレイヤーマスクを含む画像をエクスポートすると、エクスポートされた画像は、マスクが完全に透明にした領域からの色情報も保持します。

目的のために、アルファチャネルを別の(RGBA)レイヤーに構成すると効果的である場合があります。完了したら、このレイヤーを元のレイヤーのレイヤーマスクにコピーできます。


これは私が必要としているものにより近いものです。しかし、それはトップレイヤーにのみ影響します!画像に複数のレイヤーがあり、これを平坦化せずに実行できるようにしたいと考えています。回答ありがとうございます。
eli

画像の各レイヤーにマスクレイヤーを追加します。
deft_code

2

GIMPでは、1つの方法は、画像を各チャネルのレイヤーに分割することです。「色->コンポーネント->分解」を選択し、RGBAまたはレイヤーに分割したいチャンネルを選択します。次に、必要に応じて個々のアルファチャネルとカラーチャネルを編集し(グレースケールである必要があります)、[カラー]-> [コンポーネント]-> [作成]をクリックして、目的のチャネルレイアウトを選択し、各チャネルに使用するレイヤーを選択します。

また、「チャンネル」ダイアログを使用することもできます。これはデフォルトのツールボックスの一部である必要がありますが、そうでない場合は、「ウィンドウ->ドッキング可能なダイアログ->チャネル」を選択できます。各カラーチャネルの表示を切り替えることができ、チャネル名をクリックしてハイライト表示することで、個別に編集するチャネルを選択できます(アルファで色を保持するように見えますが、アルファを「非表示」にする方法はありません。画像全体を非表示にせずに編集...)。


最初に画像を平坦化し、次に分解し、編集してから再構成する必要があるようです。先端をありがとう!しかし、私は非破壊的な方法を探しています。
eli

ああ、私はあなたが単一レイヤーの画像で作業していると仮定したので、フラット化は必要ありませんが、そのときは気にしないでください。幸運を!
ライリーアダムス

2

Unity3Dに固有の独自のコンテンツプロセッサ(@Andrew Russellによる提案)を作成するには、このスクリプトを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);
            }
        }
    }
}

独自のアセットファイルの命名規則に適応します。


0

1つの代替方法は、独自のコンテンツプロセッサを記述して、必要な操作を実行することです。このようにして、「反射」レイヤー(または複数の反射レイヤー)に特別な名前を付け、コンテンツプロセッサにそのデータをアルファチャネルに配置させることができます。(または、実際に、好きな種類のプロセスを実装します。)

XNAとGIMPを使用している場合(これは私が使用していてよく知っています)、このXCFインポーターをコンテンツパイプラインに追加し、特別な名前のレイヤーを処理するために必要な変更を加えるのは非常に簡単です。

XNAではなくUnityを使用しているため、利用できるコンテンツパイプラインオプションについてはよくわかりません。ただし、リンクされたコードを調整して、コンテンツプロセス内で機能するようにすることもできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.