先看一眼最終的實現效果。
這是原圖,我們可以跟抖音一樣,對它進行各種處理,比如美白、濾鏡、各種特效。
(1)亮度值,從0到1:
(2)飽和度,從0到1:(我覺得這個飽和度為1時還挺好看的~)
(3)對比度,從0到1:
可能有部分小夥伴們,對於亮度、飽和度、對比度這些概念還不是很清楚,這裡先大致做下解釋。
我們知道,在計算機中描述乙個物體顏色的常見方式是「rgb顏色模型」,這種方式雖然很方便計算機的計算,但卻不方便人們的理解,所以人們想出來另一種方式用來描述顏色,這就是「hsv顏色模型」。
如上圖,
h是hue(色相),方向繞中心軸逆時針,0度表示紅色,120度表示綠色,240度表示藍色;
s是saturation(飽和度),方向由模型半徑中心指向邊緣,逐漸增大,中心處為0,邊緣處為1;
v是value(色調),可以理解為亮度,方向由底部指向頂面,逐漸增大,底部最暗,頂部最亮。
好,看完上面hsv顏色模型的定義,我們再來看看下面幾個概念。
(1)亮度
亮度表示顏色的明亮程度,明度越高,顏色越亮。rgb的各個值越小,亮度越小;rgb的各個值越大,亮度越大,所以想要控制亮度,我們只要控制rgb值大小即可。
(2)飽和度
飽和度是指色彩的鮮豔程度,也稱色彩的純度。飽和度取決於該色中含色成分和消色成分(灰色)的比例。含色成分越大,飽和度越大;消色成分越大,飽和度越小。純的顏色都是高度飽和的,如鮮紅,鮮綠。混雜上白色,灰色或其他色調的顏色,是不飽和的顏色,如絳紫,粉紅,黃褐等。完全不飽和的顏色根本沒有色調,如黑白之間的各種灰色。
(3)對比度
對比度表示畫面中明暗區域最亮的白和最暗的黑之間不同亮度層級的測量。對比度越大,影象越清晰,色彩也越鮮豔;對比度越小,畫面越顯示的灰濛濛。
說完了概念,接下來說實現。
這裡的畫面處理,我們使用了unity的螢幕後處理。
什麼是螢幕後處理?
有個叫「」渲染管線「」的概念,說白了就是指遊戲引擎如何一步步渲染出一幀畫面,這一步一步的操作就如同工廠流水線一樣,合起來就叫做「渲染管線」。而unity在這些流水線中提供了部分介面,讓我們能夠自定義一些渲染行為,後處理就是這裡面中的一步操作。
具體地,看下面這幅圖,紅圈部分的onrenderimage就是unity提供給我們的後處理介面:
void onrenderimage(rendertexture source, rendertexture dest);
unity在渲染完成之後會呼叫這個函式,source是unity經過前面一步一步渲染之後得到的,我們可以在這個函式裡做一些自定義處理,最後unity會把結果輸出到dest,作為遊戲最終顯示的畫面。
unity後處理有很多資料介紹實現的,這裡我就跳過這部分**編寫了,如果有不明白的可以等我推出後續的基礎篇專門介紹這部分,或者私聊我要**。
然後我們主要講上面效果實現的關鍵**。
(1)亮度
在片元著色器裡,從maintex中根據uv座標進行取樣,然後對取樣結果直接乘以乙個係數,也就是rgb整體縮放即可。
效果:
(2)飽和度
首先根據一條經驗公式,計算出同等亮度情況下飽和度最低的值,然後與當前飽和度進行插值即可。
效果:
(3)對比度
同樣的思路,先計算同等亮度情況下對比度最低的值,然後根據當前對比度進行插值即可。
效果:
HSL(色調,飽和度,亮度)
hsl hue hju 色調,saturation s t re n 飽和度,luminance lum n ns 亮度。hsl色彩模式是工業界的一種顏色標準,它通過對色調 h 飽和度 s 亮度 l 三個顏色通道的變化,以及它們相互之間的疊加來得到各式各樣的顏色的。它是目前運用最廣的顏色系統之一。h...
PHP HSV色相 飽和度 亮度 增強
php hsv色相 飽和度 亮度 增強 在開始之前我們先了解一下什麼是hsv hsv 是顏色模型 色調h 用角度度量,取值範圍為0 360 從紅色開始按逆時針方向計算,紅色為0 綠色為120 藍色為240 它們的補色是 黃色為60 青色為180 品紅為300 飽和度s 飽和度s表示顏色接近光譜色的程...
亮度 對比度 飽和度 灰度
亮度是指畫面的明亮程度,單位是堪德拉每平公尺 cd m2 或稱nits,也就是每平方公尺分之燭光。亮度對應由背光電壓控制 對比度是乙個亮度的比值,定義是 在暗室中,白色畫面 最亮時 下的亮度除以黑色畫面 最暗時 下的亮度。更精準地說,對比度就是把白色訊號在100 和0 的飽和度相減,再除以用lux ...