共用方式為


不透明和 1 位 Alpha 紋理

紋理格式 BC1 適用於不透明或具有單一透明色彩的紋理。

針對每個不透明或 1 位 Alpha 區塊,會儲存兩個 16 位值(RGB 5:6:5 格式),以及每圖元 2 位的 4x4 位陣圖。 這總計為16個紋素的64位,或每個紋素的四個位。 在區塊位圖中,每個 texel 有 2 個位元可用於選擇四種顏色,其中兩種顏色會儲存在編碼數據中。 其他兩種色彩是透過線性插補來衍生自這些預存色彩。 下圖顯示此版面配置。

點陣圖配置圖表

1 位 Alpha 格式會藉由比較區塊中儲存的兩個 16 位色彩值,來區別不透明格式。 它們會被視為不帶正負號的整數。 如果第一個色彩大於第二個色彩,則表示只會定義不透明的紋素。 這表示使用四種色彩來代表紋素。 在四色編碼中,有兩種衍生色彩,而且所有四種色彩都會平均分散在 RGB 色彩空間中。 此格式類似於 RGB 5:6:5 格式。 否則,針對 1 位 Alpha 透明度,會使用三種色彩,而第四個色彩則保留來代表透明紋素。

在三色編碼中,有一個衍生色彩,而第四個 2 位程序代碼則保留來表示透明紋素(Alpha 資訊)。 此格式類似於 RGBA 5:5:5:1,其中最後一個位用於編碼 Alpha 遮罩。

下列程式代碼範例說明如何決定選取三色或四色編碼的演算法:

if (color_0 > color_1) 
{
    // Four-color block: derive the other two colors. 
    
    // 00 = color_0, 01 = color_1, 10 = color_2, 11 = color_3
    // These 2-bit codes correspond to the 2-bit fields 
    // stored in the 64-bit block.
    color_2 = (2 * color_0 + color_1 + 1) / 3;
    color_3 = (color_0 + 2 * color_1 + 1) / 3;
}    
else
{ 
    // Three-color block: derive the other color.
    // 00 = color_0,  01 = color_1,  10 = color_2,  
    // 11 = transparent.
    // These 2-bit codes correspond to the 2-bit fields 
    // stored in the 64-bit block. 
    color_2 = (color_0 + color_1) / 2;    
    color_3 = transparent;    

}

建議您在混合之前,將透明度圖元的 RGBA 元件設定為零。

下表顯示8位元組區塊的記憶體配置。 假設第一個索引對應至 Y 座標,而第二個索引則對應至 x 座標。 例如,Texel[1][2] 是指位於 (x,y) = (2,1) 的紋理地圖圖圖元。

以下是 8 位元組 (64 位) 區塊的記憶體設定:

文字位址 16 位字
0 顏色_0
1 顏色_1
2 位圖Word_0
3 位圖 Word_1

 

Color_0和Color_1,兩個極端的色彩,配置如下:

位元 顏色
4:0 (LSB*) 藍色元件
10:5 綠色色彩成分
15:11 紅色元件

 

*最小有效位

點陣圖Word_0配置如下:

位元 紋素
1:0 (LSB) 紋素[0][0]
3:2 紋素[0][1]
5:4 紋素[0][2]
7:6 紋素[0][3]
9:8 紋素[1][0]
11:10 紋素[1][1]
13:12 紋素[1][2]
15:14 (MSB*) 紋素[1][3]

 

*最重要的位元(MSB)

點陣圖「Word_1」的配置如下:

位元 紋素
1:0 (LSB) 紋素[2][0]
3:2 紋素[2][1]
5:4 紋素[2][2]
7:6 紋素[2][3]
9:8 紋素[3][0]
11:10 紋素[3][1]
13:12 紋素[3][2]
15:14 (MSB) 紋素[3][3]

 

不透明色彩編碼的範例

以不透明編碼為例,假設紅色和黑色的色彩在極端。 紅色是color_0,黑色是color_1。 有四種插補色彩會形成它們之間的統一分佈漸層。 若要判斷 4x4 位陣圖的值,會使用下列計算:

00 ? color_0
01 ? color_1
10 ? 2/3 color_0 + 1/3 color_1
11 ? 1/3 color_0 + 2/3 color_1

然後,點陣圖看起來像下圖。

紅色和黑色展開位圖配置的圖表。

這看起來像下列說明的一系列色彩。

注意 在影像中,圖元 (0,0) 會出現在左上方。

 

不透明編碼漸層 圖例

1 位 Alpha 編碼的範例

當不帶正負號的16位整數color_0小於不帶正負號的16位整數時,就會選取此格式,color_1。 此格式可用於例如樹上的葉子,呈現於藍天下。 有些紋素可以設為透明,而三種綠色色調仍可供葉子使用。 兩種色彩會修飾極端狀態,第三種是插值色彩。

下圖是這類圖片的範例。

1 位元 Alpha 編碼的圖例

影像顯示為白色的部份,紋素將被編碼為透明。 透明紋素的 RGBA 元件應該在混合之前設定為零。

色彩和透明度的點陣圖編碼是使用下列計算決定的。

00 ? color_0
01 ? color_1
10 ? 1/2 color_0 + 1/2 color_1
11   ?   Transparent

然後,點陣圖看起來像下圖。

較淺及較深綠色的展開點陣圖配置圖表。

壓縮紋理資源