日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

计算机图形学 Unity ShaderLab 颜色混合运算相关计算方法

發(fā)布時間:2023/12/8 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机图形学 Unity ShaderLab 颜色混合运算相关计算方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
本文使用shader語法

已知顏色A與顏色B,顏色B覆蓋在顏色A上,最終輸出的結(jié)果為顏色C。
A為緩存色,B為當前色,C為輸出色

【正常透明度混合】-

描述:正常透明度混合
公式:當前顏色 x 當前透明度 +(1 - 當前透明度)x 緩存顏色
shader:fixed4 C = B x B.a + A x (1 - B.a);

【正片疊底】-

描述:顏色疊加,使像素重合部分的顏色更暗。像素覆蓋順序隨意調(diào)換不會改變結(jié)果
公式:當前顏色 x 緩存顏色
shader:fixed4 C = A * B;

【濾色】-

描述:與正片疊底相反,重合部分的像素更亮
公式:1 - (1-當前顏色)x (1-緩存顏色)
shader代碼:fixed4 C = 1 - (1 - A) * (1 - B);

【疊加】 - -

描述:結(jié)合濾色與正片疊底,基色的像素重合部分比較亮的會更亮,比較暗的會跟暗
公式:如果當前顏色 <= 0.5 返回1,否則返回 0 該值記做 w;
w x 緩存色 x 當前色 x 2 + (1 - w) x (1 - (1 - 緩存色) x (1 - 當前色) x 2)
shader代碼:
if(A > 0.5){
fixed4 C = 1 - 2 * (1 - A) * (1 - B);
}else{
fixed4 C = 2AB;
}

【反色】

描述:取得與緩存色相反的顏色
公式:1 - 緩存顏色
shader代碼:fixed4 C = 1 - A;

【變暗】-

描述:緩存顏色 x 緩存顏色與當前顏色中最小的那個
公式:緩存顏色 x min(緩存顏色,當前顏色)
shader代碼:fixed4 C =A * min(A,B) ;

【變亮】-

描述:緩存顏色 x 緩存顏色與當前顏色中最大的那個
公式:緩存顏色 x max(緩存顏色,當前顏色)
shader代碼:
fixed4 C =A * max(A, B) ;

【減色】

描述:緩存顏色減掉當前顏色的值
公式:緩存顏色 - 當前顏色
shader代碼:fixed4 C = A - B;

【劃分】

描述:緩存顏色除當前顏色的值
公式:緩存顏色 / 當前顏色
shader代碼: fixed4 C = A / B ;

【顏色加深】

描述:
公式:緩存顏色 - ((1 - 緩存顏色) x (1 - 當前顏色)) / 緩存顏色
shader代碼:fixed4 C = A - ((1-A) * (1-B)) / B;

【顏色減淡】

描述:
公式:緩存顏色 + ((緩存顏色 x 當前顏色) / (1 - 當前顏色))
shader代碼:fixed4 C = A + (A * B) / (1 - B);

【線性加深】

描述:
公式:當前顏色 + 緩存顏色 - 1
shader代碼:fixed4 C = B + A -1;

【線性減淡】

描述:
公式:緩存顏色 + 當前顏色
shader代碼:fixed4 C = A + B;

【強光】

描述:
公式:如果當前色 <= 0.5 返回1,否則返回0,記作w;
w x 緩存色 x 當前色 x 2 + (1 - w) x (1 - (1 - 緩存色) x (1 - 當前色) x 2);
shader代碼:
fixed4 ifFlag= step(B, fixed4(0.5, 0.5, 0.5, 0.5));
fixed4 C = ifFlag * A * B * 2 + (1 - ifFlag) * (1 - (1 - A) * (1 - B) * 2);

【柔光】

描述:
公式:如果當前色 <= 0.5 返回1,否則返回0,記作w;
w x 緩存色 x 當前色 x 2 + (1 - w) x (1 - (1 - 緩存色) x (1 - 當前色) x 2);
shader代碼:
fixed4 ifFlag = step(B, fixed4(0.5, 0.5, 0.5, 0.5));
fixed4 C = ifFlag * (A * B * 2 + A * A * (1 - B * 2)) + (1 - ifFlag) * (A * (1 - B) * 2 + sqrt(A) * (2 * B - 1));

【亮光】

描述:
公式:如果當前色 <= 0.5 返回1,否則返回0,記作w;
w x (緩存色 - (1 - 緩存色) x (1 - 2 x 當前色) / (2 x 當前色)) + (1 - w) x (緩存色 + 緩存色 x (2 x 當前色 - 1) / (2 x (1 - 當前色)));
shader代碼:
fixed4 ifFlag = step(B, fixed4(0.5, 0.5, 0.5, 0.5));
fixed4 C = ifFlag * (A - (1 - A) * (1 - 2 * B) / (2 * B)) + (1 - ifFlag) * (A + A * (2 * B - 1) / (2 * (1 - B)));

【點光】

描述:
公式:如果當前色 <= 0.5 返回1,否則返回0,記作w;
w x (min(緩存色, 2 x 當前色)) + (1 - w) x (max(緩存色, ( 當前色 x 2 - 1)));
shader代碼:
fixed4 ifFlag = step(B, fixed4(0.5, 0.5, 0.5, 0.5));
fixed4 C = ifFlag * (min(A, 2 * B)) + (1 - ifFlag) * (max(A, ( B * 2 - 1)));

【線性光】

描述:
公式:緩存色,+ 2 x 當前色 - 1;
shader代碼: fixed4 C=A+2*B-1;

【實色混合】

描述:
公式:如果當前色 + 緩存色 <= 1 返回1,否則返回0,記作w;
w x (0) + (1 - w) x (1);
shader代碼:
fixed4 ifFlag = step(A + B, fixed4(1, 1, 1, 1));
fixed4 C = ifFlag * (fixed4(0, 0, 0, 0)) + (1 - ifFlag) * (fixed4(1, 1, 1, 1));

【深色】

描述:
公式:如果當前色的rgb分量 + 緩存色 <= 1 返回1,否則返回0,記作w;
w x (0) + (1 - w) x (1);
shader代碼:
fixed4 ifFlag = step(B.r + B.g + B.b, A.r + A.g + A.b);
fixed4 C = ifFlag * (B) + (1-ifFlag)*(A);

顏色制式

RGBA :紅、綠、藍、透明度
HSL: hue(色相)、saturation(飽和度)、lightness(亮度)
HSV: hue(色相)、saturation(飽和度)、value(色調(diào))
HSB: hue(色相)、saturation(飽和度)、brightness(明度)

顏色轉(zhuǎn)換

參考文章 https://www.bilibili.com/read/cv1874791/ 該文章有預覽圖挺不錯的

總結(jié)

以上是生活随笔為你收集整理的计算机图形学 Unity ShaderLab 颜色混合运算相关计算方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。