コンポジターに必要なアルファチャンネルの知識(後編)
- 2014/04/05
前編では、アルファチャンネルには「ストレート」と「プリマルチプライド」の2タイプあるという話をしました。今回はMaya, 3ds Max, Photoshop, After Effects, Nukeというソフトで、どうアルファチャンネルを扱うか説明したいと思います(※ソフトのバージョンによって違う場合があるかもしれません、その点あらかじめご了承ください)。この記事を読み終わる頃には、あなたはアルファチャンネルをかなりマスターしているはずです。きっと今まで以上にクオリティーの高いコンポジット(あるいは3DCG制作)が出来るようになります。それに、もう二度と、「変なフリンジが出て困る」なんて嘆くことは無くなるでしょう!
まずは2タイプの再確認です。
◆ストレート・アルファ(Straight Alpha)画像・・・まだRGBチャンネルにアルファ値が乗算されていない。純粋な「正しい」カラー。アンプリマルチプライド(UnPremultiplied Alpha)、ノン・プリマルチプライド(Non-Premultiplied Alpha)とも呼ぶ。
◆プリマルチプライド・アルファ(Premultiplied Alpha)画像・・・すでにRGBチャンネルにアルファ値が乗算されている。背景と合成するためにRGB値が弱くされた、暗いカラー。乗算済みアルファ、合成チャンネルとも呼ぶ。
前回計算式を見たので分かると思いますが、実はグラフィックソフトはピクセルを「透明」にしているわけではありません。RGBを「暗く」してから合成することによって、あたかも透明に見せかけているだけです。この秘密に気づけば、今回の内容も理解しやすいと思います。ではさっそくですが、今回まず2つの用語をセットで覚えていただきたいと思います。
覚えて欲しい2つの用語とは、「プリマルチプライ(Premultiply)処理」と「アンプリマルチプライ(Unpremultiply)処理」です。なんだか舌を噛みそうな用語ですが、ここは観念して、必ず覚えてください。まずプリマルチプライ処理というのは、前回説明した「RGBにアルファ値を掛ける」=乗算(掛け算)のことです。この記事内では今後プリマルチプライ処理という呼び方で統一したいと思います。
プリマルチプライ処理:
ストレートのRGB × アルファ値 = プリマルチプライドのRGB
では、アンプリマルチプライ処理とは?これは逆の処理です。つまりプリマルチプライドをストレートに戻します。この記事内ではアンプリマルチプライ処理と表記したいと思います。
アンプリマルチプライ処理:
プリマルチプライドのRGB ÷ アルファ値 = ストレートのRGB
式を見れば分かるように、これは除算(割り算)です。下の図を見て、関係性を把握してください。
さぁ、これで私たちは、ストレート画像とプリマルチプライド画像を自由に「行ったり来たり」できるようになりました!でも、なぜそんな必要があるのでしょう?理由は、2つあります。
◆理由1……グラフィックソフトによっては、ストレート画像の入力しか想定していないツールがある。その逆で、プリマルチプライド画像の入力しか想定していないツールもある。適切なタイプに変換するテクニックを持っていないと、「黒フリンジが出る」「白フリンジが出る」といった問題に直面する。
→黒フリンジの原因は、「プリマルチプライ処理の2度掛け」です。グラフィックソフトがプリマルチプライド画像をストレート画像として扱ってしまい、もう1度プリマルチプライ処理をしてしまっているのです。エッジ部分の(アンチエイリアスの掛かった)半透明ピクセルのRGBが必要以上に暗くなり、私たちは「フチが黒ずんだ」と思うわけです。……ということは、アンプリマルチプライ処理を行えば解決するというわけです!また、逆に白フリンジの原因は、必要なプリマルチプライ処理が行われていないからです。プリマルチプライ処理を行えば解決します。
◆理由2……カラコレ(色調整)は、必ずストレート画像に対して行う必要がある。プリマルチプライド画像に対してカラコレを行ってはならない。プリマルチプライドのRGBは本来の正しいカラーではないため、不適切な合成結果になる。これはソフトに関わらず、画像処理の原則である。
→ この原則は、ほとんどのグラフィックソフトでは内部で処理されているため、ユーザーは知らなくても使えるようになっています。しかしNukeは違います。Nukeユーザーは「カラコレはストレートRGBに対して行う」という画像処理の原則を知っておく必要があります。そして、Nukeでコンポジット作業を行う際は、画像をストレートに変換したり、プリマルチプライドに変換したりすることが非常に重要になってくるのです。もっとも、After Effectsを使うときでも気をつけなければならないケースはあります。
なんとなく分かっていただけましたか?詳しいことは、これから説明します。では、アルファチャンネルを巡る旅に出かけましょう!
まずは3DCGソフトから見ていきましょう。3DCGソフトからレンダーされる画像は、ほとんどの場合プリマルチプライドです。
MayaのRender Settingウィンドウの中を探すと、プリマルチプライ(Premultiply)というオプションのチェックボックスがあります。このチェックはデフォルトでONのため、通常プリマルチプライド画像がレンダーされます(1)。
3ds Maxでは、そもそもこのようなチェックボックスはなく、強制的にプリマルチプライドでレンダーされます(Targa形式のみチェックボックスがあります)。3dsMaxのHelpでは、「先行乗算フォーマットでイメージを保存する」という書かれ方をしています(2)。
3DCGソフトでプリマルチプライドが主流なのには、2つ理由があります。1つは、コンポジットソフトに持ち込んだときに、ストレートよりプリマルチプライドの方が効率的に合成できると(一般的に)思われているためです。もう1つは、3DCGをレンダーする際オブジェクトのエッジのアンチエイリアス処理が行われるのですが、その前にプリマルチプライ処理を行う必要があるからです。総じて、3DCGはプリマルチプライドで保存する方が無駄がなく、効率が良いと考えられるのです。
レンダーする際の背景色はブラックにすることを推奨します。でなければ、他のグラフィックソフトに持っていったときにフリンジが発生する場合があります。
さぁ、次はPhotoshopです!Photoshopは、アルファチャンネルをどう扱うのでしょう?Photoshopはストレートで画像を読み込んだり保存します。たとえば、あなたが透明な背景にペイントしてPSDファイルを保存すれば、そのファイルはストレートということになります。
◆Photoshopの中の「アルファチャンネル」機能
Photoshop内で「アルファチャンネル」というと、それは「選択範囲をストックしておく場所」を意味し、今まで説明してきたアルファチャンネルとは異なる機能のため、 注意が必要です。Photoshopは少し独特で、アルファチャンネル(選択範囲ストック)を50チャンネル以上保持できます。そしてPhotoshop上では、このチャンネルはRGBカラーの方には影響を与えません。
◆Photoshopで黒背景を削除する方法
上述したPhotoshopの特性が原因で、3DCG素材をPhotoshopで開いても、ファイル形式によっては透明なはずの背景が真っ黒に塗りつぶされて見える場合があります。その時は、手動で「切り抜く」必要があるかもしれません。以下の手順を実行してください。
1. [チャンネル]パネルで、アルファチャンネルのアイコンをCtrl+クリック (⌘+クリック)して、選択範囲を読み込みます。
2. Ctrl+Shift+I (⌘+Shift+I) で選択範囲を反転します。
3. Deleteキーを叩いて、レイヤーから黒背景ピクセルを削除します。
◆Photoshopで黒フリンジを除去する方法
前述の通り3DCG素材はプリマルチプライドが一般的なため、Photoshopで開くと黒いフリンジが発生します。「プリマルチプライ処理の2度掛け」が起きているためです。以下の処理を実行してください。これは、Photoshop上で行うアンプリマルチプライ処理のひとつです。
レイヤー>マッティング>黒マット削除
◆Photoshopで3DCG用のマップを作成する際の注意点
せっかくなので逆のケース、Photoshopから3DCGソフトに画像を持ち込むときの話もしましょう。実は全く同じ問題が起こる場合があるのです。3DCG で「葉っぱ」や「花びら」などをつくるとき、Photoshopで描いたマップを板ポリゴンに貼ります。このとき、RGBとアルファのマップを別々に用意し、 3DCGソフトに持ち込むのですが、3DCGソフト上で「黒フリンジ」が発生してしまう場合があります。この問題の原因もやはり「プリマルチプライ処理の2度掛け」です。ですから、PhotoshopからストレートRGBを出力すれば解決します。以下の手順を実行してください。
1.一番上にアルファ値を表す白黒レイヤーを配置してください。
2.このレイヤーのブレンドモードを[除算]にします。
これもまた、Photoshop上のアンプリマルチプライ処理のひとつです。思い出してください、アンプリマルチプライ処理は除算(割り算)でしたね。これでRGBは「正しい」カラーになりました。3DCGソフト上で黒フリンジは発生しないでしょう。
After Effectsではアルファをどう扱えば良いか、見ていきましょう!
◆After Effectsのフッテージのアルファ設定
After Effectsでフッテージを読み込む際、アルファタイプを聞かれるため、[ストレート]か[合成チャンネル]か選びます。After Effectsにどちらのタイプなのか、教えてあげましょう。[自動設定]ボタンを押せば、たいていは適切な方に設定されます。なお、[環境設定]>[読み込み設定]>[ラベルのないアルファを変換] を「自動設定」にしておくと、いちいち聞かれないので便利です(PNGについては間違ってストレートで読み込まれてしまうことがあるので注意が必要です)。
プリマルチプライドの素材を[ストレート]で読み込んでしまうと、黒フリンジが発生します。「プリマルチプライ処理の2度掛け」が起きるからです。逆にストレートの素材を[合成チャンネル]で読みこんでしまうと、行うべきプリマルチプライ処理がされず、明るいフリンジが発生してしまいます。もし間違ったタイプで読み込んでしまったら、[フッテージを変換]>[メイン]から修正してください。
◆After Effectsのレンダリング
After Effectsからレンダリングする場合、出力モジュール設定の中で[チャンネル]を「RGB+アルファ」に設定してアルファ付きに設定します。この際、[カラー]を「ストレート(マットなし)」にすると ストレートでレンダーされ、「合成チャンネル(マットあり)」にすればプリマルチプライドでレンダーされます。PNGの場合はストレートしか選べません。
レンダーする際、背景色はブラックにすることを推奨します。でなければ、他のグラフィックソフトに持っていったときにフリンジが発生する場合があります。
◆After Effectsで黒フリンジを除去する方法
レイヤーから黒フリンジを除去したい場合は、レイヤーに以下のエフェクトを適用します。これは、After Effects上で行うアンプリマルチプライ処理のひとつです。
エフェクト>チャンネル>カラーマット削除
◆After Effectsで3DCGのマルチパスを合成する方法
3DCGのコンポジットでは、マルチパスを合成することがあります。しかし単純にレイヤーを重ねてしまうと、不適切なフリンジが発生します。レイヤーを重ねるほど輪郭はどんどん太り、黒フリンジや白フリンジを発生させます。この問題は背景が透明なコンポで顕著ですが、背景がある場合でも輪郭は太るため、いずれにせよ不適切な合成が行われています。
そこで、マルチパスを合成する際は以下の手順を行います。
1.全てのレイヤーに[チャンネルシフト]エフェクトを適用し、アルファを[フルオン]にしてください。これも、After Effects上で行うアンプリマルチプライ処理の一種です。この場合アルファは100%の状態になり、RGBはストレートの「正しい」カラーになります。この状態ですべてのレイヤーを重ねます。
2.一番上にアルファを持ったレイヤーを配置し、ブレンドモードを[ステンシルアルファ]にしてください。最後にこのレイヤーのアルファ値で「型抜き」するわけです(過去記事で説明しましたがレイヤーの計算は下からです、一番上のレイヤーは最後に計算されます)。これはアルファ値を乗算する、プリマルチプライ処理です。
この方法であればエッジのカラーも適切に合成され、フリンジは発生しません。
Nukeではアルファをどう扱えば良いか、見ていきましょう!
NukeではストレートをUnpremultiplied、プリマルチプライドはそのままPremultipliedと呼んでいます。
◆PremultノードとUnpremultノード
Premultノードは、プリマルチプライ処理を行います。Unpremultノードは、アンプリマルチプライ処理を行います。この2つのノードによって、Nukeユーザーはストレート画像とプリマルチプライド画像を自由に「行ったり来たり」できるのです。
◆NukeのReadノード
プリマルチプライド画像を読み込んだ場合は、(linearカラースペース以外の画像なら)Readノードの[premultiplied]のチェックを入れてください。これによって、Nukeにプリマルチプライド画像だと教えてあげるわけです。しかし、linearカラースペースの画像を読み込む場合は[premultiplied]のチェックを入れる必要はありません。というのは、このチェックを入れたときにNukeが行っている内部処理は、一度アンプリマルチプライ処理を行ってからlinearカラースペースに変換し、プリマルチプライ処理をして元に戻すというものだからです。
一方、ストレート画像を読み込んだ場合は、Readノードの後にPremultノードを接続して、プリマルチプライ処理を行います。その後Mergeしてください。
◆NukeでMergeする際の注意点
Nuke のMergeのAinput(前景)には、必ずプリマルチプライドを入力してください。overオペレーションの計算式はA+B(1-a)です。これは前回説明した、「前景と背景を重ね合わせる式の短いバージョン」です。つまり前景はプリマルチプライドでなくてはいけません。
ちなみに、Mergeのmatteオペレーションだけは、Ainputがストレートになります。matteの計算式はAa+B(1-a)です。この式は、前回一番初めに説明した「前景と背景を重ね合わせる式」です。つまりストレート画像の入力を想定した式です。しかし、このオペレーションは使わない方が良いでしょう。 ノードツリーを見たときに、何をしているか分からなくなってしまいます。overを使ってください。
◆Transformノード、Filterノードを使用する際の注意点
トランスフォーム(移動・回転・拡大縮小)、フィルター(ブラーなど)の処理は必ずプリマルチプライドで行ってください。ストレートで行ってはいけません。
◆Nukeでカラコレを行う際の注意点
前述の通り、画像処理の原則として「カラコレは必ずストレートで行う」必要があります。プリマルチプライド画像に対してカラコレしてしまうと、エッジまたは 画像全体に問題が発生します。ですから、Nukeでカラコレする場合は、カラコレ系のノードをUnpremultノードとPremultノードで挟んでください。アンプリマルチプライ処理を行って、RGBを正しいカラーにしてから、カラコレします。カラコレが終わったら、プリマルチプライ処理を行ってください。
※なお、カラコレ系ノードのプロパティーにある[(un)premult by]のチェックボックスをONにすれば、UnpremultノードとPremultノードで挟む必要はなくなります。しかし、このチェックは使わない方が良いでしょう。ノードツリーを見たときに、何をしているか分からなくなってしまいます。
そろそろ、アルファチャンネルを巡る長い旅も終わりにしたいと思います。結局のところ、今回の要点は以下になります。
◆プリマルチプライ処理(Premultiply)は、ストレートをプリマルチプライドに変換する処理。乗算。
ストレートのRGB × アルファ値 = プリマルチプライドのRGB
◆アンプリマルチプライ処理(Unpremultiply)は、プリマルチプライドをストレートに変換する処理。除算。
プリマルチプライドのRGB ÷ アルファ値 = ストレートのRGB
◆黒フリンジの原因は、「プリマルチプライ処理の2度掛け」。アンプリマルチプライ処理を行えば解決する。逆に、白フリンジの原因は、必要なプリマルチプライ処理が行われていないこと。プリマルチプライ処理を行えば解決する。
◆カラコレは、必ずストレートのRGB値に対して行うのが画像処理の原則。プリマルチプライドのRGBは正しいカラーではないため、これに対してカラコレを行ってはならない。
以上です。あなたはもう十分アルファチャンネルについて詳しくなったと思います。きっと2度と「原因不明のフリンジ」に悩まされることもありませんよね。ここで説明しなかったソフトを使うときも、基本的な理屈は同じです。きっと何とかなるでしょう。
アルファチャンネルの知識は、コンポジット(あるいは3DCG)作業をする上でとても大切な知識です。しかし残念なことに教えてくれる人がなかなか居ないので、困っている人が大勢いるみたいです。もし困っている人を見かけたら、今度は是非、あなたが教えてあげてください!
まずは2タイプの再確認です。
◆ストレート・アルファ(Straight Alpha)画像・・・まだRGBチャンネルにアルファ値が乗算されていない。純粋な「正しい」カラー。アンプリマルチプライド(UnPremultiplied Alpha)、ノン・プリマルチプライド(Non-Premultiplied Alpha)とも呼ぶ。
◆プリマルチプライド・アルファ(Premultiplied Alpha)画像・・・すでにRGBチャンネルにアルファ値が乗算されている。背景と合成するためにRGB値が弱くされた、暗いカラー。乗算済みアルファ、合成チャンネルとも呼ぶ。
前回計算式を見たので分かると思いますが、実はグラフィックソフトはピクセルを「透明」にしているわけではありません。RGBを「暗く」してから合成することによって、あたかも透明に見せかけているだけです。この秘密に気づけば、今回の内容も理解しやすいと思います。ではさっそくですが、今回まず2つの用語をセットで覚えていただきたいと思います。
プリマルチプライ処理とアンプリマルチプライ処理
覚えて欲しい2つの用語とは、「プリマルチプライ(Premultiply)処理」と「アンプリマルチプライ(Unpremultiply)処理」です。なんだか舌を噛みそうな用語ですが、ここは観念して、必ず覚えてください。まずプリマルチプライ処理というのは、前回説明した「RGBにアルファ値を掛ける」=乗算(掛け算)のことです。この記事内では今後プリマルチプライ処理という呼び方で統一したいと思います。
プリマルチプライ処理:
ストレートのRGB × アルファ値 = プリマルチプライドのRGB
では、アンプリマルチプライ処理とは?これは逆の処理です。つまりプリマルチプライドをストレートに戻します。この記事内ではアンプリマルチプライ処理と表記したいと思います。
アンプリマルチプライ処理:
プリマルチプライドのRGB ÷ アルファ値 = ストレートのRGB
式を見れば分かるように、これは除算(割り算)です。下の図を見て、関係性を把握してください。
さぁ、これで私たちは、ストレート画像とプリマルチプライド画像を自由に「行ったり来たり」できるようになりました!でも、なぜそんな必要があるのでしょう?理由は、2つあります。
◆理由1……グラフィックソフトによっては、ストレート画像の入力しか想定していないツールがある。その逆で、プリマルチプライド画像の入力しか想定していないツールもある。適切なタイプに変換するテクニックを持っていないと、「黒フリンジが出る」「白フリンジが出る」といった問題に直面する。
→黒フリンジの原因は、「プリマルチプライ処理の2度掛け」です。グラフィックソフトがプリマルチプライド画像をストレート画像として扱ってしまい、もう1度プリマルチプライ処理をしてしまっているのです。エッジ部分の(アンチエイリアスの掛かった)半透明ピクセルのRGBが必要以上に暗くなり、私たちは「フチが黒ずんだ」と思うわけです。……ということは、アンプリマルチプライ処理を行えば解決するというわけです!また、逆に白フリンジの原因は、必要なプリマルチプライ処理が行われていないからです。プリマルチプライ処理を行えば解決します。
◆理由2……カラコレ(色調整)は、必ずストレート画像に対して行う必要がある。プリマルチプライド画像に対してカラコレを行ってはならない。プリマルチプライドのRGBは本来の正しいカラーではないため、不適切な合成結果になる。これはソフトに関わらず、画像処理の原則である。
→ この原則は、ほとんどのグラフィックソフトでは内部で処理されているため、ユーザーは知らなくても使えるようになっています。しかしNukeは違います。Nukeユーザーは「カラコレはストレートRGBに対して行う」という画像処理の原則を知っておく必要があります。そして、Nukeでコンポジット作業を行う際は、画像をストレートに変換したり、プリマルチプライドに変換したりすることが非常に重要になってくるのです。もっとも、After Effectsを使うときでも気をつけなければならないケースはあります。
なんとなく分かっていただけましたか?詳しいことは、これから説明します。では、アルファチャンネルを巡る旅に出かけましょう!
3DCG(Maya & 3ds Max)
まずは3DCGソフトから見ていきましょう。3DCGソフトからレンダーされる画像は、ほとんどの場合プリマルチプライドです。
MayaのRender Settingウィンドウの中を探すと、プリマルチプライ(Premultiply)というオプションのチェックボックスがあります。このチェックはデフォルトでONのため、通常プリマルチプライド画像がレンダーされます(1)。
3ds Maxでは、そもそもこのようなチェックボックスはなく、強制的にプリマルチプライドでレンダーされます(Targa形式のみチェックボックスがあります)。3dsMaxのHelpでは、「先行乗算フォーマットでイメージを保存する」という書かれ方をしています(2)。
3DCGソフトでプリマルチプライドが主流なのには、2つ理由があります。1つは、コンポジットソフトに持ち込んだときに、ストレートよりプリマルチプライドの方が効率的に合成できると(一般的に)思われているためです。もう1つは、3DCGをレンダーする際オブジェクトのエッジのアンチエイリアス処理が行われるのですが、その前にプリマルチプライ処理を行う必要があるからです。総じて、3DCGはプリマルチプライドで保存する方が無駄がなく、効率が良いと考えられるのです。
レンダーする際の背景色はブラックにすることを推奨します。でなければ、他のグラフィックソフトに持っていったときにフリンジが発生する場合があります。
Photoshop
さぁ、次はPhotoshopです!Photoshopは、アルファチャンネルをどう扱うのでしょう?Photoshopはストレートで画像を読み込んだり保存します。たとえば、あなたが透明な背景にペイントしてPSDファイルを保存すれば、そのファイルはストレートということになります。
◆Photoshopの中の「アルファチャンネル」機能
Photoshop内で「アルファチャンネル」というと、それは「選択範囲をストックしておく場所」を意味し、今まで説明してきたアルファチャンネルとは異なる機能のため、 注意が必要です。Photoshopは少し独特で、アルファチャンネル(選択範囲ストック)を50チャンネル以上保持できます。そしてPhotoshop上では、このチャンネルはRGBカラーの方には影響を与えません。
◆Photoshopで黒背景を削除する方法
上述したPhotoshopの特性が原因で、3DCG素材をPhotoshopで開いても、ファイル形式によっては透明なはずの背景が真っ黒に塗りつぶされて見える場合があります。その時は、手動で「切り抜く」必要があるかもしれません。以下の手順を実行してください。
1. [チャンネル]パネルで、アルファチャンネルのアイコンをCtrl+クリック (⌘+クリック)して、選択範囲を読み込みます。
2. Ctrl+Shift+I (⌘+Shift+I) で選択範囲を反転します。
3. Deleteキーを叩いて、レイヤーから黒背景ピクセルを削除します。
◆Photoshopで黒フリンジを除去する方法
前述の通り3DCG素材はプリマルチプライドが一般的なため、Photoshopで開くと黒いフリンジが発生します。「プリマルチプライ処理の2度掛け」が起きているためです。以下の処理を実行してください。これは、Photoshop上で行うアンプリマルチプライ処理のひとつです。
レイヤー>マッティング>黒マット削除
◆Photoshopで3DCG用のマップを作成する際の注意点
せっかくなので逆のケース、Photoshopから3DCGソフトに画像を持ち込むときの話もしましょう。実は全く同じ問題が起こる場合があるのです。3DCG で「葉っぱ」や「花びら」などをつくるとき、Photoshopで描いたマップを板ポリゴンに貼ります。このとき、RGBとアルファのマップを別々に用意し、 3DCGソフトに持ち込むのですが、3DCGソフト上で「黒フリンジ」が発生してしまう場合があります。この問題の原因もやはり「プリマルチプライ処理の2度掛け」です。ですから、PhotoshopからストレートRGBを出力すれば解決します。以下の手順を実行してください。
1.一番上にアルファ値を表す白黒レイヤーを配置してください。
2.このレイヤーのブレンドモードを[除算]にします。
これもまた、Photoshop上のアンプリマルチプライ処理のひとつです。思い出してください、アンプリマルチプライ処理は除算(割り算)でしたね。これでRGBは「正しい」カラーになりました。3DCGソフト上で黒フリンジは発生しないでしょう。
After Effects
After Effectsではアルファをどう扱えば良いか、見ていきましょう!
◆After Effectsのフッテージのアルファ設定
After Effectsでフッテージを読み込む際、アルファタイプを聞かれるため、[ストレート]か[合成チャンネル]か選びます。After Effectsにどちらのタイプなのか、教えてあげましょう。[自動設定]ボタンを押せば、たいていは適切な方に設定されます。なお、[環境設定]>[読み込み設定]>[ラベルのないアルファを変換] を「自動設定」にしておくと、いちいち聞かれないので便利です(PNGについては間違ってストレートで読み込まれてしまうことがあるので注意が必要です)。
プリマルチプライドの素材を[ストレート]で読み込んでしまうと、黒フリンジが発生します。「プリマルチプライ処理の2度掛け」が起きるからです。逆にストレートの素材を[合成チャンネル]で読みこんでしまうと、行うべきプリマルチプライ処理がされず、明るいフリンジが発生してしまいます。もし間違ったタイプで読み込んでしまったら、[フッテージを変換]>[メイン]から修正してください。
◆After Effectsのレンダリング
After Effectsからレンダリングする場合、出力モジュール設定の中で[チャンネル]を「RGB+アルファ」に設定してアルファ付きに設定します。この際、[カラー]を「ストレート(マットなし)」にすると ストレートでレンダーされ、「合成チャンネル(マットあり)」にすればプリマルチプライドでレンダーされます。PNGの場合はストレートしか選べません。
レンダーする際、背景色はブラックにすることを推奨します。でなければ、他のグラフィックソフトに持っていったときにフリンジが発生する場合があります。
◆After Effectsで黒フリンジを除去する方法
レイヤーから黒フリンジを除去したい場合は、レイヤーに以下のエフェクトを適用します。これは、After Effects上で行うアンプリマルチプライ処理のひとつです。
エフェクト>チャンネル>カラーマット削除
◆After Effectsで3DCGのマルチパスを合成する方法
3DCGのコンポジットでは、マルチパスを合成することがあります。しかし単純にレイヤーを重ねてしまうと、不適切なフリンジが発生します。レイヤーを重ねるほど輪郭はどんどん太り、黒フリンジや白フリンジを発生させます。この問題は背景が透明なコンポで顕著ですが、背景がある場合でも輪郭は太るため、いずれにせよ不適切な合成が行われています。
そこで、マルチパスを合成する際は以下の手順を行います。
1.全てのレイヤーに[チャンネルシフト]エフェクトを適用し、アルファを[フルオン]にしてください。これも、After Effects上で行うアンプリマルチプライ処理の一種です。この場合アルファは100%の状態になり、RGBはストレートの「正しい」カラーになります。この状態ですべてのレイヤーを重ねます。
2.一番上にアルファを持ったレイヤーを配置し、ブレンドモードを[ステンシルアルファ]にしてください。最後にこのレイヤーのアルファ値で「型抜き」するわけです(過去記事で説明しましたがレイヤーの計算は下からです、一番上のレイヤーは最後に計算されます)。これはアルファ値を乗算する、プリマルチプライ処理です。
この方法であればエッジのカラーも適切に合成され、フリンジは発生しません。
Nuke
Nukeではアルファをどう扱えば良いか、見ていきましょう!
NukeではストレートをUnpremultiplied、プリマルチプライドはそのままPremultipliedと呼んでいます。
◆PremultノードとUnpremultノード
Premultノードは、プリマルチプライ処理を行います。Unpremultノードは、アンプリマルチプライ処理を行います。この2つのノードによって、Nukeユーザーはストレート画像とプリマルチプライド画像を自由に「行ったり来たり」できるのです。
◆NukeのReadノード
プリマルチプライド画像を読み込んだ場合は、(linearカラースペース以外の画像なら)Readノードの[premultiplied]のチェックを入れてください。これによって、Nukeにプリマルチプライド画像だと教えてあげるわけです。しかし、linearカラースペースの画像を読み込む場合は[premultiplied]のチェックを入れる必要はありません。というのは、このチェックを入れたときにNukeが行っている内部処理は、一度アンプリマルチプライ処理を行ってからlinearカラースペースに変換し、プリマルチプライ処理をして元に戻すというものだからです。
一方、ストレート画像を読み込んだ場合は、Readノードの後にPremultノードを接続して、プリマルチプライ処理を行います。その後Mergeしてください。
◆NukeでMergeする際の注意点
Nuke のMergeのAinput(前景)には、必ずプリマルチプライドを入力してください。overオペレーションの計算式はA+B(1-a)です。これは前回説明した、「前景と背景を重ね合わせる式の短いバージョン」です。つまり前景はプリマルチプライドでなくてはいけません。
ちなみに、Mergeのmatteオペレーションだけは、Ainputがストレートになります。matteの計算式はAa+B(1-a)です。この式は、前回一番初めに説明した「前景と背景を重ね合わせる式」です。つまりストレート画像の入力を想定した式です。しかし、このオペレーションは使わない方が良いでしょう。 ノードツリーを見たときに、何をしているか分からなくなってしまいます。overを使ってください。
◆Transformノード、Filterノードを使用する際の注意点
トランスフォーム(移動・回転・拡大縮小)、フィルター(ブラーなど)の処理は必ずプリマルチプライドで行ってください。ストレートで行ってはいけません。
◆Nukeでカラコレを行う際の注意点
前述の通り、画像処理の原則として「カラコレは必ずストレートで行う」必要があります。プリマルチプライド画像に対してカラコレしてしまうと、エッジまたは 画像全体に問題が発生します。ですから、Nukeでカラコレする場合は、カラコレ系のノードをUnpremultノードとPremultノードで挟んでください。アンプリマルチプライ処理を行って、RGBを正しいカラーにしてから、カラコレします。カラコレが終わったら、プリマルチプライ処理を行ってください。
※なお、カラコレ系ノードのプロパティーにある[(un)premult by]のチェックボックスをONにすれば、UnpremultノードとPremultノードで挟む必要はなくなります。しかし、このチェックは使わない方が良いでしょう。ノードツリーを見たときに、何をしているか分からなくなってしまいます。
まとめ
そろそろ、アルファチャンネルを巡る長い旅も終わりにしたいと思います。結局のところ、今回の要点は以下になります。
◆プリマルチプライ処理(Premultiply)は、ストレートをプリマルチプライドに変換する処理。乗算。
ストレートのRGB × アルファ値 = プリマルチプライドのRGB
◆アンプリマルチプライ処理(Unpremultiply)は、プリマルチプライドをストレートに変換する処理。除算。
プリマルチプライドのRGB ÷ アルファ値 = ストレートのRGB
◆黒フリンジの原因は、「プリマルチプライ処理の2度掛け」。アンプリマルチプライ処理を行えば解決する。逆に、白フリンジの原因は、必要なプリマルチプライ処理が行われていないこと。プリマルチプライ処理を行えば解決する。
◆カラコレは、必ずストレートのRGB値に対して行うのが画像処理の原則。プリマルチプライドのRGBは正しいカラーではないため、これに対してカラコレを行ってはならない。
以上です。あなたはもう十分アルファチャンネルについて詳しくなったと思います。きっと2度と「原因不明のフリンジ」に悩まされることもありませんよね。ここで説明しなかったソフトを使うときも、基本的な理屈は同じです。きっと何とかなるでしょう。
アルファチャンネルの知識は、コンポジット(あるいは3DCG)作業をする上でとても大切な知識です。しかし残念なことに教えてくれる人がなかなか居ないので、困っている人が大勢いるみたいです。もし困っている人を見かけたら、今度は是非、あなたが教えてあげてください!
参考文献
1.Autodesk, Inc. "Autodesk Maya 2015 ヘルプ: レンダー設定(Render Settings): Maya ソフトウェア(Maya Software)タブ" http://help.autodesk.com/view/MAYAUL/2015/JPN/?guid=GUID-09B4478C-214D-49C5-BEDC-BB6D196DC623 (参照 2014-04-05).
2.Autodesk, Inc. "Autodesk 3dsMax 2015 ヘルプ: 乗算済みアルファ" http://help.autodesk.com/view/3DSMAX/2015/JPN/?guid=GUID-E49782BE-6486-4B9D-929A-7A02535F1829 (参照 2014-04-05).
1.Autodesk, Inc. "Autodesk Maya 2015 ヘルプ: レンダー設定(Render Settings): Maya ソフトウェア(Maya Software)タブ" http://help.autodesk.com/view/MAYAUL/2015/JPN/?guid=GUID-09B4478C-214D-49C5-BEDC-BB6D196DC623 (参照 2014-04-05).
2.Autodesk, Inc. "Autodesk 3dsMax 2015 ヘルプ: 乗算済みアルファ" http://help.autodesk.com/view/3DSMAX/2015/JPN/?guid=GUID-E49782BE-6486-4B9D-929A-7A02535F1829 (参照 2014-04-05).
- 関連記事
-
- 画面の見映えを良くする配色のテクニック (2015/08/22)
- グロー表現のクオリティーを高める3つのポイント (2015/07/25)
- 分かる!リニアワークフローのコンポジット (2015/06/13)
- リアルな実写合成(VFX)にはノイズ除去が重要 (2015/05/15)
- デジタルで画づくりするテクニックまとめ! (2015/04/29)
- ガンマについて (2015/03/13)
- 映画のVFX制作で使用するDPX画像ファイルは何が優れているのか? (2015/02/11)
- 画のクオリティーをアップする煙合成のコツ (2014/12/16)
- なぜ映画の背景はボケているのか?被写界深度についての考察 (2014/11/10)
- 画像を美しく加工するために押さえておきたいピクセルの知識 (2014/08/06)
- 実写合成(VFX)テクニック・色合わせの3つのチェックポイント (2014/06/09)
- 加算とスクリーンを正しく使い分けて綺麗な光を描くヒント (2014/05/18)
- カラコレに役立つRGBカラーの基礎知識 (2014/04/29)
- コンポジターに必要なアルファチャンネルの知識(後編) (2014/04/05)
- コンポジターに必要なアルファチャンネルの知識(前編) (2014/04/01)