この記事にはプロモーションが含まれています。

【Blender】Alphaモードに関する問題を解決する方法

blender

BlenderでのAlphaモードに関連するトラブルは、画像やシェーダーを扱う際によく遭遇する問題の一つです。Alphaチャンネルを適切に処理しないと、透明部分の表示が不正確になったり、エッジに不自然なアーティファクトが現れたりします。

この記事では、Blenderの画像テクスチャやシェーダーで遭遇したAlphaモードに関する問題と、その対処方法を詳しく解説しています。Alphaモードの理解を深め、トラブルをスムーズに解決できるようにしていきましょう。

この記事は、Blenderのアルファ(透明度)を原因にして起こるトラブルについて詳しく知りたい中級者向けの記事です。

難易度 3.5

Blenderでシェーダーを作っているとき、変な現象に遭遇することがありましたのでメモしておきます。

結論から言うとイメージテクスチャを使う際にAlphaのモードがストレートになっていると、透明度を利用する際にうまくいかなくなるというお話です。

例えばグリッチを作る際に、色のある部分とない部分で透明度でわけて背景を透過させたいときがよくあります。そういうときにImage TextureのアウトプットのAlphaを使うのですが、これがストレートになっていると色情報が失われてしまうらしいです。

最初は、全部ピンクになったのでRedの情報だけが強いのかななどと思ってしまいましたが、Blueも全部ピンクになっていたので、テクスチャ情報がないときのバグのピンクかもしれないと思い至りました。(実際情報がないときのピンクなのか、計算上すべてピンクになってしまったのかはわかりません。)

この色情報は、Emission shader単体などで使用するぶんにはうまく表示されます。アルファの情報をマスクとして(透明度として)一緒に使いたいときにうまく表示されなくなります。

スポンサーリンク

アルファのモード

イメージの透過度を扱うアルファ値のモードは4つあり、

Blender4.3のマニュアルには

Straight(ストレート):

RGB チャンネルと、マスクとして機能するアルファを別々に格納します。このアルファは関連付けられていないアルファとも呼ばれます。画像編集アプリケーションや PNG などのファイル形式で一般的に使用されます。この方式は、画像のアルファがゼロの部分でも色が保持されます。

Premultiplied(プリマルチプライ):

アルファを乗算した RGB チャンネルを格納します。このアルファは関連付けられたアルファとも呼ばれます。レンダリング用の自然な形式で、OpenEXR などのファイル形式で使用されます。ストレートアルファとは異なり、炎のような純粋な放射効果を正しく表すことができます。

Channel Packed(チャンネルパックト):

RGB チャンネルとアルファチャンネルへ別々の画像を格納し、互いに影響を与えることがありません。チャンネルパッキングは、メモリを節約するためにゲームエンジンで一般的に使用されます。

None(なし):

ファイルのアルファチャンネルを無視し、画像を完全な不透明にします。

と書かれています。

ストレートには「マスクとして機能するアルファを別々に格納」と書かれているため、マスク単体や、色単体の情報としてはうまく機能しますが、どちらも併用しようとすると意図しない色が出力されてしまう。

関連付けられていないアルファとも呼ばれるように、Mix shaderなどで他の属性値と掛け合わされる用の色情報ではなく、透明度などと併用されると意図しない色が出る。そのため、他の属性値と併用したい場合は、透過度と乗算されてうまく色情報が出るPremultiplied(プリマルチプライド)を使うべきなのだと思います。

プリマルチプライドストレートのαについてもうちょっと詳しく書いた記事もあります。↓