簡體   English   中英

帶 alpha 的混合模式

[英]Blend mode with alpha

我正在嘗試復制混合模式。 目前我已經重新創建了一個屏幕混合模式,但它似乎不適用於透明圖像。

我有兩個紋理

圖 1(前景)

在此處輸入圖像描述

圖 2(背景)

在此處輸入圖像描述

我得到的結果是這樣的

在此處輸入圖像描述

計算着色器代碼

#pragma kernel Blend

RWTexture2D<float4> Result;

Texture2D<float4> TopLayer;
Texture2D<float4> BottomLayer;

[numthreads(8, 8, 1)]
void Blend(uint3 id : SV_DispatchThreadID)
{
    if (TopLayer[id.xy].w == 0 && BottomLayer[id.xy].w > 0)
    {
        Result[id.xy] = BottomLayer[id.xy];
    }
    else if (BottomLayer[id.xy].w == 0 && TopLayer[id.xy].w > 0)
    {
        Result[id.xy] = TopLayer[id.xy];
    }
    else if (BottomLayer[id.xy].w == 0 && TopLayer[id.xy].w == 0)
    {
        Result[id.xy] = float4(0, 0, 0, 0);
    }
    else
    {
        float alpha_final = BottomLayer[id.xy].w + TopLayer[id.xy].w - BottomLayer[id.xy].w * TopLayer[id.xy].w;

        float4 tex = 1 - (1 - TopLayer[id.xy]) * (1 - BottomLayer[id.xy]);

        Result[id.xy] = float4(tex.x, tex.y, tex.z, alpha_final);
    }
}

如何正確混合具有不同 alpha 的圖像?

與 Alpha 通道混合需要使用 Alpha 值進行加權。

我之前沒有想過如何在屏幕混合情況下正確加權,這是一種乘法合成。 我認為像加權幾何平均值一樣做是有意義的: https://en.m.wikipedia.org/wiki/Weighted_geometric_mean ):將被乘數提高到相應權重(alpha值)的冪,然后提高結果是權重之和的倒數的冪。 因為我們想要復制兩個 alpha 都為 1 的標准情況:

1 - (1-a) (1-b)

其中沒有平方根,我們將 alpha 值的總和除以 2:

1 - [ (1-a) wa (1-b) wb ] 2/(wa+wb)

output alpha 通道本身可以以相同的方式計算,或者可以是兩個 alpha 值的簡單最大值。 我不知道什么會更好看。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM