遊戲色彩101(入門必看)

Ned發表於2023-11-30
筆者基於過往的一個美術向講座整理成本文內容,主要希望幫助美術同學建立起顏色的底層邏輯框架。由於筆者負責的是寫實風格的專案,所有問題均從寫實角度進行思考,因此可能不完全適用於非寫實專案。文章如有錯誤和疏漏,歡迎大家指正和交流。

一、Light & Color

1. Light

Radiometry(輻射度量學)中的光即Electromagnetic radiation(電磁輻射),是客觀物理量,可測量。人可感知的光的波長範圍很小。

遊戲色彩101(入門必看)

遊戲色彩101(入門必看)

2. Color

遊戲色彩101(入門必看)

顏色它不是一個客觀物理量,而是一個感知結果。

對於人來說,人眼接受到光的能量,最終將刺激傳遞給大腦解析,產生出“看到的image”。因為人與人之間的人眼、大腦的差異,對同樣的光,感知到的色彩會不同。

遊戲色彩101(入門必看)

例如下面這件衣服("The dress"),很多人認為是black and blue, 也有很多人認為white and gold。

遊戲色彩101(入門必看)

人的視網膜上的用來感知色彩的細胞主要是Cone cells,它被分為了3類,分別對短、中、長波長的光波有較強的感知能力,這也是為什麼三原色的色彩模型能夠較好的表達顏色。

自然界中,人眼接受到的光一般都是不同的波長的光波疊加到一起的。這個不同波長的光的成分組合,一般用光譜來描述。

同色異譜和色彩還原

同色異譜

前面說了人對色彩的感知過程,是將物理量(光)最終主觀轉換為顏色。實際上,這個過程中,不同的輸入可以有相同的輸出。

同色異譜現象簡單來說就是人感知到的顏色相同,但是光譜組成不同。下圖左邊是拍攝的一張太陽的照片,右邊是顯示器裡顯示的一個太陽,人感知到的色彩類似,但是實際光譜完全不同。

遊戲色彩101(入門必看)

色彩還原(Color Reproduction)

Computer Graphics其實就是計算出一個color image,然後透過顯示器發出的光,利用同⾊異譜現象,讓觀看者看到製作者模擬的畫面。這個過程就是Color Reproduction。

目前所有人造顯示裝置可發出的光的波長、能量這些都是非常有限的,所以無法重現所有的人可感知的色彩。

印刷物、電影銀幕這些其實也是在做Color Reproduction,只不過它們不是自己發光,而是靠反彈光。

遊戲色彩101(入門必看)

二、Color in Game - Overview

我們作為遊戲開發者,其實就是把Color Reproduction從頭到尾做一遍。

對於寫實專案來說,目標就是一個:色彩的高保真(high fidelity)。就跟音響領域裡的HiFi的含義一樣,色彩高保真就是要儘可能還原出人眼看到的顏色(感覺跟“Photorealistic”類似)。

遊戲引擎裡的Color Pipeline:

遊戲色彩101(入門必看)

上面是從COD的ppt里扣出來的一張圖,大部分引擎的這個管線差別不會太大。我個人將引擎內對顏色的處理分為了2個階段:

  • 模擬客觀世界中光線的傳播
  • 顏色後處理

整個管線的輸入,是各類美術資產(貼圖、模型、材質等)、幾十上百個引擎引數。輸出則是一個image資料,給到顯示驅動顯示到螢幕上。最終螢幕硬體發出的光線,夾雜著各類環境光進入人眼,交由大腦解析,完成了color reproduction。

三、Color Pipeline - 模擬光線的傳播

這部分其實就是基於材質和燈光引數,計算光照,最後算出線性的HDR color的結果。

因為是在模擬光的傳播,這是一個客觀的可測量的過程,所以很多科學技術手段可以用上,例如photogrammetry的各種思路和工具流程。這一步其實對於寫實遊戲來說,很像是在做“計算機模擬”,只是多了一步美術設計。

這裡涉及到的工作內容,絕大部分都是有正確性基礎和物理值參考的:

* 光比、材質的PBR引數
* 引擎基於物理模型實現的lighting model和各種特性(例如procedural sky、volumetric fog等等)的輸入引數
* 其他

所以對於高水平的團隊,這一步可以做到非常準確和可靠。

它要求有很好的科學思路和流程,否則幾乎必然會出問題,最終導致最終效果問題難以定位和收斂(最怕的就是用錯誤的做法去修復另一個錯誤)。而這一步的正確性的保證,能把整個色彩高保真的問題的複雜度大幅降低,因為color pipeline的後續部分,絕大部分都是偏主觀的,沒有絕對的“正確”,很難做到完美的還原真實性。

另外,這一步的輸出是HDR color,它的值可以跨越零到幾萬的範圍,例如在我的測試場景裡的幾個典型的亮度值如下圖所示:

(注意:這算不上是一個標準的燈光場景)

遊戲色彩101(入門必看)

遊戲色彩101(入門必看)

因此,千萬不要基於最終效果去隨意調整燈光引數,他們完全不是線性關係,這也是美術難以駕馭HDR管線的最主要的原因之一。

四、Color Pipeline -顏色後處理

這一步主要包含2部分:

模擬人對顏色的感知行為(Color Perception)

實現顏色資料的轉換

1、模擬人對顏色的感知行為

遊戲色彩101(入門必看)

這一步很難像前面的步驟那樣,有直接可用的物理模型或者直接可獲取的物理參考值,無法量化。

這一步必然需要引入人的主觀判斷,需要使用科學的方法,由色彩感受能力強、有理論知識、掌握必要工具和分析能力的美術來把控,技術側提供方法、理論、工程上的支援。

這一步,它不那麼依賴於團隊的工業化水平,沒涉及到那麼多的分工,也不像資產生產那樣需要長週期驗證。可能一個能力超強的燈光師或者TA,就可以成為一個game changer,花幾天時間對引擎內的引數做下調整就可以讓寫實度上升一個level。我覺得這也是為什麼現在有不少UE5的小團隊遊戲都能把寫實度做的極高的原因之一。

在這一步要做哪些事情呢?其實遊戲業大量參考了攝影界的做法。

(1)曝光

目標效果

其實玩攝影的同學就會很清楚,正確的曝光幾乎是整個畫面好壞的最關鍵的一環。過分的under-exposure或者over-exposure,不僅會導致色彩丟失,更會影響寫實度,比如白天看著不像白天。

下圖是一個典型的under-exposure的例子。大部分物體的固有色都難以分辨,整體光感很奇怪,完全不像是一個晴朗的白天的感受。如果不考慮“強風格化”的話,這個案例的色彩保真度比較低,即使資產、光比等等都做的比較正確。

遊戲色彩101(入門必看)

另外,曝光的結果(亮度縮放過的HDR color)是後續調色和色彩空間轉換步驟的輸入,而後面這部分顏色操作是非線性的,尤其是對輸入當中的那些很亮和很暗的顏色。曝光決定了哪些顏色進入到這些“高非線性區間”,因此對整體結果在另外一個層面又有了巨大的影響。參考下面截圖中不同曝光對於天空顏色的影響:

遊戲色彩101(入門必看)

遊戲色彩101(入門必看)

那麼怎麼確定曝光的值呢?其實這裡有2個方面的訴求:色彩高保真,風格化。

對於風格化來說,其實曝光要跟著風格化調色來一起做。沒深入研究過,這裡就不展開了。

對於色彩高保真來說,一方面可以參考攝影行業的Sunny 16 rule之類的“標準值”,另一方面則可以基於照片或者人眼感受作為reference。總之核心問題就是,不要在曝光的問題上強行參雜美術設計,要以reference為基礎。像情緒、氛圍這些,應該基於其他層面的美術設計去達到目的,例如場景結構、物件設計和擺放、天氣、TOD時間之類的。參考下面的截圖:

遊戲色彩101(入門必看)

遊戲色彩101(入門必看)

相關功能

  • 自動曝光

自動曝光的工作原理是整體縮放畫面中所有畫素的亮度,所以它被歸類為global exposure。其目標是”讓畫面的平均亮度達到一個類似中度灰的亮度“。

它是用來調節畫面曝光的最主要的功能。

引擎層面的”基於物理的渲染“的一個很重要的部分就是physically based camera,所以基本上相機上有的曝光功能和引數,引擎裡都有。

需要說明的是,人的色彩感知系統的”自動曝光“能力是有限的,例如中午大太陽的室外人眼看著會覺得很亮和刺眼,晚上實在太黑了也會看不清。所以必須基於人的這一感知行為進行手動的曝光控制才行。例如下面幾張遊戲截圖裡的大白天就故意調的略為偏亮(over-exposure)。

遊戲色彩101(入門必看)

遊戲色彩101(入門必看)

遊戲色彩101(入門必看)

遊戲色彩101(入門必看)

  • 區域性曝光

當畫面中同時存在大面積的很亮和和很暗的區域的時候,自動曝光功能就沒法解決曝光問題了,因為它是對畫面所有畫素亮度的整體縮放。這個問題在一些沒怎麼做過後處理處理影片中可以明顯看到:

遊戲色彩101(入門必看)

遊戲色彩101(入門必看)

而人的色彩感知系統是有很強的區域性調節亮度的能力的,參考下圖(iphone HDR實拍 + 調後期,近似還原了我當時的感受):

遊戲色彩101(入門必看)

遊戲色彩101(入門必看)

可以看到,在自然的光照環境下,人感知到的色彩不太會出現大面積的死黑和爆白。

區域性曝光(local exposure)能對畫面中各子區域施加不同的亮度縮放值,讓原本很黑或者很亮的區域都能保留一些原本的顏色,模擬了人的色彩感知行為,極大的提升了色彩保真度。

UE5已經實現了這個功能(對馬島的方案),能解決相當一部分問題。但是因為演算法關係,難以處理極端情況(引數不能調太高)。所以有一些遊戲也會嘗試一些其他方案來輔助,例如戰神使用了”exposure lights“。另外為了緩解這個問題,大部分遊戲都會降低自然光源和人造光源之間的光比,例如CyberPunk2077和鏡之邊緣都將太陽光亮度降低了100倍。

(2)白平衡

白平衡(white balance)簡單理解為是一種對色彩整體的修正。相機裡都自帶auto white balance功能。如果把它關掉的話,拍出來的照片的色彩會非常un-natural,參考下圖:

遊戲色彩101(入門必看)

遊戲色彩101(入門必看)

攝影師基於自己實際感知到的色彩,對white balance進行修正之後如下圖:

遊戲色彩101(入門必看)

遊戲色彩101(入門必看)

從上面的對比中可以看到,人眼的auto white balance機制從結果上看是有點像de-lighting的,即感知到的色彩一定程度上降低了光源的影響,更接近物體固有色一些(因為進化方向是人需要更好的識別出物體本身的資訊?)。

White balance這個對整體色彩的保真度影響巨大,而且引擎沒有auto white balance的功能,需要手調引數才行。UE4預設的White balance是6500k。

另外它也存在跟曝光類似的問題,即同一個畫面裡可能同時有大片的相反色溫的區域,這個時候一個white balance引數沒法兼顧二者。因為目前也沒發現有什麼解決方案,在此不做展開了。

我沒找到直接測量White balance數值的方法,但是嘗試了使用比較粗糙的方法去做校正。具體做法如下:

1、將白板放在無遮擋的室外,拍攝照片後,透過後期調整,還原出當時我的實際感受到的顏色,此作為reference。

遊戲色彩101(入門必看)

2、在引擎裡試圖還原出室外的光照(方向光+天光),然後也放置一塊白板在無遮擋的室外。

遊戲色彩101(入門必看)

3、調節PPV上的white balance引數,讓白板的顏色儘可能接近reference中的顏色。

我當時收集了9點多和13點多的資料,9點多的白板輕微偏黃,13點多的白板幾乎是無偏的白色,利用上述方法在引擎內校正後的效果大致如下:

遊戲色彩101(入門必看)

遊戲色彩101(入門必看)

(3)調色

調色類似曝光,也是有2個方面的訴求:模擬人的色彩感知行為、風格化。

模擬人的色彩感知行為

UE4使用的這套ACES Filmic Tonemapper其實已經能模擬出一些人的色彩感知行為了,例如高亮色彩的de-saturation,參考官方文件的下圖:

遊戲色彩101(入門必看)

但是引擎做的事情還是很有限的,簡單來說只是做了一些色彩空間轉換和s-curve tonemapping的計算,保證不了色彩的高保真(高質量),因此基本的調色是必須的,可以認為是對色彩的一個基本的修正(color correction)。

當然還是有很多更明顯的感知行為需要我們去模擬,一個常被人談起的例子就是Purkinje effect。

月亮的光是偏暖色溫的(4100K),為什麼看起來是偏藍色的?因為人眼在極暗環境下,對顏色的識別能力會下降,並對”藍色”更敏感。因此有的燈光講座裡,會在夜晚場景的後期調色中,對暗部做藍色增強處理,並且降低暗部整體飽和度,模擬這一感知行為特徵。

風格化調色

這個應該大家都非常熟悉,主要就是為美術表達服務的。以我非常喜歡的CyberPunk2077為例,他們基於對CyberPunk這個世界觀的理解,選擇的調色風格是電影化+強對比。如下圖所示,整體感受就是under-exposure + 高對比度 + 偏高飽和度:

遊戲色彩101(入門必看)

這個風格其實跟人感知到的色彩特徵是不一致的,人感知到的色彩就是所謂的natural,即曝光、對比、飽和度這些都很適中,例如Unrecord、Bodycam這2款超寫實風格的遊戲的調色風格就比較符合這一特點(可能他們基本上沒做風格化調色):

遊戲色彩101(入門必看)

遊戲色彩101(入門必看)

(4) 其它

還有一些比較明顯的視覺特徵可以透過引擎特性來模擬,例如bloom和lensflare,它們對整體畫面的寫實度其實非常重要。

Bloom

瞳孔的結構有點類似快門,光在穿過它時會發生衍射現象,參考下面的影片:

除了模擬衍射之外,它還能強化畫面中高亮的部分從而更好的模擬出真實世界裡光強的”高動態範圍“,也能提升光源本身的表現,總體來說能大幅提高整體畫面的真實感。

Lensflare

Lensflare常常被用來模擬人眼看到超亮光線時候的刺眼效果,例如在比較暗的環境下看到戰術手電筒,在中午看到太陽等等。對寫實度影響很高。

2. 實現顏色資料的轉換

遊戲色彩101(入門必看)

Color pipeline最後需要把色彩資料轉換成顯示驅動可用的資料,一般涉及到色域轉換和資料編碼。

顯示裝置是否支援HDR對這一步的資料處理影響會比較大,一般會分為SDR和HDR兩種流程。

另外需要注意,為了完成色彩高保真的目標,繞不開顯示器的問題。不同顯示器能發出的光譜差別很大,玩家觀看顯示器的環境光照差異也很大,因此必須為玩家提供合理的手動畫面校正工具,這個目前基本也是端遊的標配了:

遊戲色彩101(入門必看)

這個問題的另一方面,則是美術工作階段的色彩高保真問題,比如顯示器校正、引擎內色彩管理等等。這些問題都非常重要,還需要做更深入得研究。


來源:騰訊遊戲學堂