Help us understand the problem. What is going on with this article?

[Metal] 半透明の処理(Blending)

More than 5 years have passed since last update.

Metalでブレンディングをする方法をメモ。

MTLRenderPipelineDescriptorのプロパティにあるMTLRenderPipelineColorAttachmentDescriptorの値を適切に設定することで、様々なブレンディングができます。

ちなみに値についてはこちら(Translucency and Transparency in Metal)を参考にしました。

MTLRenderPipelineColorAttachmentDescriptor *colorAttachment = pipelineStateDescriptor.colorAttachments[0];
colorAttachment.blendingEnabled             = YES;
colorAttachment.rgbBlendOperation           = MTLBlendOperationAdd;
colorAttachment.alphaBlendOperation         = MTLBlendOperationAdd;
colorAttachment.sourceRGBBlendFactor        = MTLBlendFactorSourceAlpha;
colorAttachment.sourceAlphaBlendFactor      = MTLBlendFactorSourceAlpha;
colorAttachment.destinationRGBBlendFactor   = MTLBlendFactorOneMinusSourceAlpha;
colorAttachment.destinationAlphaBlendFactor = MTLBlendFactorOneMinusSourceAlpha;

一般的なアルファブレンディングはOneMinusSourceAlphaを利用します。

式は以下のようになります。

C_f = \alpha_s \times C_s + (1 - \alpha_s) \times C_d

$._s$となっている部分はsourcesです。
$._d$となっている部分はdestinationd、つまりブレンド対象の色、ということになります。
CはColorのCです)

式を見てもらうと分かるように、計算の要が$\alpha_s$となっているのが分かると思います。今まさにレンダリングしようとしている色のアルファ値が、最終的な色に影響を与えているわけです。
式でもOneMinusAlpha($1 - \alpha_s$)となっていますね。

そしてそれらを適切に表現した設定が上記のもの、ということになります。

ちなみにこちらの記事(Cocos2d-x で BlendFunc)が色々なブレンディングについて書かれていました。
(内容はCocos2d-xのものですが、基本的な考え方はどれも同じです)

edo_m18
現在はUnity ARエンジニア。 主にARのコンテンツ制作をしています。 最近は機械学習にも興味が出て勉強中です。 Unityに関するブログは別で書いています↓ https://edom18.hateblo.jp/
http://edom18.hateblo.jp/
unity-game-dev-guild
趣味・仕事問わずUnityでゲームを作っている開発者のみで構成されるオンラインコミュニティです。Unityでゲームを開発・運用するにあたって必要なあらゆる知見を共有することを目的とします。
https://unity-game-dev-guild.github.io/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした