Unity 中的顏色空間

一、顏色空間基本概念疑問

1、什么是顏色空間?

? ? 顏色空間是一個數學模型或系統,它定義了一套規則和方法,用來精確地描述、表示和組織顏色。?
? ? 可以把它想象成一個三維坐標系?(或者有時更多維)
? ? 每個維度代表一個構成顏色的基本分量
? ? 每個維度都有一個取值范圍(例如 RGB 通常是 0-255 或 0.0-1.0),這個范圍定義了該顏色空間所能表示的所有可能顏色的集合,稱為色域。

? ? 簡單來說:
? ? 顏色空間就像一本關于顏色的“字典”和“語法規則”。它提供了一套標準化的方法來:
? ? ①、?定義一個顏色(給它一個數值坐標)。
? ? ②、?組織所有可能的顏色(形成一個色域)。
? ? ③、?溝通顏色信息(在不同設備、軟件或人之間傳遞顏色數據)。

? ? 常見顏色空間:
? ? ?RGB? 顏色空間,維度:?紅色、綠色、藍色。任何顏色都可以看作是這三種光以不同強度混合的結果。
? ? CMYK? 顏色空間(用于印刷),維度:?青色、品紅色、黃色、黑色。數值代表的是油墨的濃度。
? ? ?HSV/HSL? 顏色空間,維度:?色調、飽和度、明度/亮度。這更接近人眼感知顏色的方式(什么顏色?有多鮮艷?有多亮?)。
? ? ?Lab/L*a*b?* 顏色空間,維度:?明度、紅綠軸、黃藍軸。它試圖模擬人眼感知顏色的均勻性,并且是設備無關的。

2、什么是線性空間(線性顏色空間)?

? ? 線性顏色空間?(Linear Color Space)是指顏色值與物理光強呈線性關系的色彩表示系統。
? ? 在這種空間中,數值的增減直接對應于光強的線性變化,沒有經過任何非線性變換(如伽馬校正)。
? ? 線性關系?:顏色通道(如RGB)的數值與實際光強成正比。
? ? 即:基于“顏色空間”的定義來看,坐標軸上均勻的數值變化,能夠正比映射到均勻的物理光強變化。

? ? 例如,RGB值 (0.5, 0.5, 0.5) 表示的光強是 (1.0, 1.0, 1.0) 的一半。

3、什么是伽馬空間(伽馬顏色空間)?

? ? 伽馬顏色空間(Gamma Color Space)是指顏色值經過非線性編碼(伽馬校正)?處理的色彩表示系統。
? ? 在這種空間中,顏色數值與實際顯示的光強之間呈非線性關系。

? ? 注意,廣義Gamma空間的概念?:泛指所有通過冪律函數(V_out = V_in ^ γ)進行非線性映射的色彩空間。無論是否 γ = 1/2.2

4、執行伽馬校正的原因(將線性空間轉到伽馬空間的原因)是什么?

? ? ①、匹配人眼感知?:對顏色值進行非線性變換,使數值分布更符合人眼對亮度的感知(暗部更敏感,亮部較遲鈍)。
?? ?②、高效數據利用?:自然場景中,大量的信息(像素數量)集中在較低亮度區域(暗部)。伽馬編碼通過壓縮亮部數據,可在8位/通道下保留更多視覺有效信息。
?? ?③、兼容顯示設備?:傳統CRT顯示器的陰極射線管(CRT)的輸入電壓與亮度輸出呈 ?γ≈2.5? 的冪律關系(即 亮度 ∝ 電壓 ^ 2.5)。為了抵消CRT的非線性,需對輸入信號預補償(即 電壓 ∝ 數值 ^ 1/2.2),最終使顯示亮度與原始數據線性對應。

5、為什么要叫 “伽馬” 空間/ “伽馬” 校正?

? ? 伽馬校正的核心是冪律變換?(Power Law)其公式為:V_out = V_in ^ γ
? ? 其中,γ(希臘字母Gamma)是冪律的指數,用于描述輸入與輸出的非線性關系。

6、【易混淆點】物理世界是什么顏色空間?

? ? 注意顏色空間的定義!它是一個人為定義的數學模型,物理世界不是模型,所有沒有顏色空間的概念。
? ? 因此,物理世界本身沒有顏色空間的概念。
? ? 但,光的疊加遵循線性規則,人類用線性顏色空間模擬其光的線性混合行為,因此光的物理行為等價于線性空間。

7、顏色在計算機中存儲時是什么顏色空間?

? ? 在計算機中存儲顏色時,最常用的顏色空間是 ?sRGB(Gamma空間)

? ? 為什么是sRGB??
? ? ①、歷史與普及性?:由微軟和惠普于1996年制定,成為互聯網、操作系統和消費級顯示器的默認標準。
? ? ②、?兼容性?:幾乎所有設備(顯示器、手機、相機)默認支持sRGB,確保顏色顯示一致。
? ? ③、存儲效率?:通過伽馬編碼(≈γ2.2)優化8位/通道的數據分布,保留更多暗部細節。

8、顏色在交給顯示器時是什么顏色空間?

? ? 當顏色數據最終交給顯示器顯示時,通常需要轉換為顯示器原生支持的色彩空間,而現代顯示器主要遵循 ?sRGB標準。

? ? 為什么是sRGB??

? ? ①、歷史兼容性?:CRT時代遺留的伽馬特性(γ≈2.2)與sRGB一致,現代LCD/OLED仍沿用此標準。
? ? ②、內容適配?:互聯網、操作系統、大部分內容(JPEG、視頻)默認以sRGB編碼。
? ? ③、硬件校準?:消費級顯示器出廠默認以sRGB為色彩目標(即使面板色域更廣)。

9、從物理世界的顏色到顯示器的整個過程是怎樣的?

? ? “物理世界的線性數值” 通常是在圖像捕獲(如相機)或渲染(如3D圖形)階段生成的線性數據。
? ? 然后,為了存儲或傳輸(如第7條所述),數據會經過伽馬編碼(γ=1/2.2)轉換為sRGB等伽馬空間(非線性)。
? ? 當你在計算機上查看一張JPEG圖片(sRGB編碼)時,數據以伽馬空間形式發送到顯示器。
? ? 顯示器內部的電子系統(或顯示驅動)再應用γ≈2.2的曲線,最終輸出線性光強。

? ? V_out = V_in ^ ?1/2.2 ^ 2.2 = V_in

? ? 最終顯示器輸出的光強完美還原了原始線性光強。

10、sRGB 是什么? sRGB 的 s 指什么?

? ? sRGB?(Standard Red Green Blue)是由 ?微軟(Microsoft)?? 和 ?惠普(Hewlett-Packard)?? 于1996年聯合制定的國際標準色彩空間?(IEC 61966-2-1),
? ? 旨在統一顯示設備、互聯網和操作系統的顏色表現。

? ? 其名稱中的 ??“s”?? 代表 ??“Standard”(標準)?,強調其作為通用默認色彩空間的定位。

11、sRGB 和 Gamma空間 的關系是什么?

? ? sRGB 是一種特定的?Gamma 編碼色彩空間(one of)

? ? 其核心是通過 ?標準化的 Gamma 曲線(≈2.2)?? 將線性光強轉換為非線性存儲值,以適配人眼感知和顯示設備特性。

------------------------------------------------- NRatel割 -----------------------------------------------------

二、Unity 中的顏色空間

https://docs.unity3d.com/cn/current/Manual/class-PlayerSettingsAndroid.html#Renderinghttp://顏色空間選擇

https://docs.unity3d.com/2021.3/Documentation/Manual/class-TextureImporter.htmlhttp://Texture 導入選項(TextureImporter)(紋理的 Inspector 窗口)(重點關注 sRGB 選項)

https://docs.unity3d.com/2021.3/Documentation/Manual/LinearLighting.htmlhttp://顏色空間

https://docs.unity3d.com/2021.3/Documentation/Manual/LinearRendering-LinearOrGammaWorkflow.html??????http://線性或伽馬工作流程

https://docs.unity3d.com/2021.3/Documentation/Manual/LinearRendering-GammaTextures.htmlhttp://采用線性渲染的伽馬紋理

https://docs.unity3d.com/2021.3/Documentation/Manual/LinearRendering-LinearTextures.htmlhttp://使用線性紋理

1、基本

? ? 光照計算應該在線性空間中進行,以便確保數學上的正確性,但結果應該在伽馬空間中呈現以便讓人眼看起來正確。

? ? 紋理傾向于保存在伽馬顏色空間中,而著色器期望使用線性顏色空間。

2、在 Unity 的 PlayerSettings/OtherSettings/ColorSpace 中,可選顏色空間 Gamma / Linear

? ? 選擇 Gamma:
? ? ? ? 伽馬空間的著色器程序 在使用紋理時,不會從紋理中移除伽馬校正。
? ? ? ? 在紋理的 Inspector 窗口中取消勾選 sRGB,即可在 Gamma 模式下繞過 sRGB 采樣。

? ? 選擇 Linear:
? ? ? ? 應總是向 線性顏色空間的著色器程序 輸入 線性空間的紋理。
? ? ? ? 若紋理是在伽馬空間創建的,應在紋理的 Inspector 窗口中勾選 sRGB。
? ? ? ? 若紋理本身就是在線性空間創建的,則應在紋理的 Inspector 窗口中取消勾選 sRGB。
? ? ? ? 當完成著色工作后,GPU會在Shader寫入顏色緩沖區前自動進行伽馬校正或保持線性在后續進行伽馬校正。

如何選擇?

在Unity項目中選擇顏色空間(Color Space)時,主要取決于項目的視覺風格、目標平臺以及光照需求

適合 Linear 空間的情況:
????????寫實風格項目?:需要物理準確的光照(如PBR材質、HDRP/URP)。
????????復雜光照效果?:動態光影、陰影、反射等。
????????目標平臺為中高端設備?(PC、主機、高端移動設備)。
????????使用HDR或后期處理?。
適合 Gamma 空間的情況:
?????????風格化或低多邊形(Low Poly)項目?:對物理光照無硬性需求。
????????目標為低端移動設備?(性能敏感,硬件不支持線性空間)。
????????2D項目或UI為主?:顏色混合需求簡單,無需物理光照。
特殊情況:
? ? ? ? 如抖音小游戲 開啟WEBGL2.0時,要求必須使用?Linear 空間。

3、若在Texture 導入選項(TextureImporter)上勾選 sRGB,意味著:

? ??此設置僅在項目使用線性顏色空間時相關。? ?
? ??指示紋理將數據存儲于 sRGB(也稱為伽馬)顏色空間中。
? ??如果啟用,它會指示 GPU 在著色器中對紋理進行采樣時將數據從 sRGB 顏色空間轉換為線性顏色空間。

? ? 對于存儲常規顏色數據的非 HDR 紋理啟用此功能。
? ? 對于包含非顏色數據(例如平滑度或金屬度)的紋理禁用此功能。
? ? 對于 HDR 紋理,Unity 默認禁用此值并隱藏復選框。
? ? 對于非 HDR 紋理,Unity 默認啟用此功能。

4、不同顏色空間下混合

? ? 伽馬空間下混合:在數學上是不正確的,并可能得出不符合期望的結果,但這種方法是在某些圖形硬件上進行混合的唯一方法。

? ? 線性空間下混合:在數學上是正確的,并提供精確的結果。

5、注意,更改顏色空間后,需重新烘焙光照貼圖

6、注意,舊版GUI系統(IMGUI)中的元素渲染始終在伽馬空間中完成

7、查找紋理(lookup Texture)、遮罩、Noarmal貼圖、Metalic貼圖 和 其他具有特定含義的在線性空間性下制作的紋理應取消勾選 sRGB。

三、游戲UI在線性空間下的混合 與 美術效果圖不一致的問題

原因:

sRGB編碼的半透明圖片,在Unity中,勾選sRGB,在進行混合前,著色器會在對紋理進行采樣時,會先將數據從 sRGB 顏色空間轉換為線性顏色空間。然后使用 混合公式 進行混合。

而絕大多數繪圖軟件 (Photoshop, Krita, Illustrator 等) 默認在 sRGB 色彩空間下工作、混合、顯示和保存圖片。

在這些軟件中,用半透明畫筆、圖層疊加模式 (如 "正常"、"正片疊底"、"疊加"、"濾色"、"疊加"、"柔光" 等) 繪制或疊加 UI 元素時,?混合操作是基于 sRGB 空間中存儲的值直接進行的。

簡單說,在繪圖軟件中,直接使用Gamma空間下的色值套用線性空間下才應該使用的 混合公式,產生了實際上錯誤的混合結果。

PS 圖層混合模式https://helpx.adobe.com/hk_zh/photoshop/using/blending-modes.html例如,圖層混合模式為 Normal 的混合公式為:

(該公式為線性空間下的混合公式,輸入應為線性色值)

color = A.rgb * A.alpha + B.rgb * (1 - A.alpha)

在 Unity 線性空間下,sRGB編碼的圖片,勾選了sRGB時,混合時將執行:

color = (A.rgb^2.2 * A.alpha + B.rgb^2.2 * (1 - A.alpha))

交給顯示器前,將會再對其執行一次伽馬校正,轉回 Gamma空間,即:

color1 = (A.rgb^2.2 * A.alpha + B.rgb^2.2 * (1 - A.alpha)) ^ (1/2.2)

而在 PS 伽馬空間下,sRGB編碼的圖片的色值,將直接帶入Normal混合公式:

color2 = A.rgb * A.alpha + B.rgb * (1 - A.alpha)

很明顯,color1 ≠ color2 (這者最終都是 伽馬空間下 的值)。

------------------------------------------------- NRatel割 -----------------------------------------------------

實例:

游戲中(color1)(Unity 線性空間下,sRGB圖片勾選sRGB)

?效果圖中(color2)(PS在伽馬空間下)

------------------------------------------------- NRatel割 -----------------------------------------------------

為使 游戲UI在線性空間下的混合 與 美術效果圖一致,解決的思路無非以下兩種(盲調除外):

方式1、保持游戲UI在線性空間下混合,并讓美術也在線性空間下混合。

? ? 修改 PS 中的設置(編輯> 顏色設定>高級選項):勾選 Blend RGB Colors Using Gamma

?參考 photoshop官方文檔的說明:

Photoshop 顏色設定https://helpx.adobe.com/hk_zh/photoshop/using/color-settings.htmlGamma空間下,但 γ=1.00,即相當于處于線性空間下。

中文版本的 ps 中,此處稱為 “用灰度系數混合RGB顏色”,以下為 PS CS6中文版中截圖。

為什么把 “Gamma(γ)” 要叫做 “灰度系數” 呢?

經查,主要由于 早期翻譯的局限性行業習慣的固化

20 世紀 80-90 年代,計算機圖形學剛引入中文語境時,術語翻譯尚未標準化。Gamma 作為專業概念,可能被簡單意譯為“灰度系數”,側重其 ?對明暗(灰度)的調節作用,而忽略了它對 ?所有顏色通道(RGB)?? 的普遍影響。

盡管 Gamma 實際影響所有顏色通道,但“灰度系數”一詞在顯示器校準、印刷等領域沿用至今,成為約定俗成的譯法

這種方式的優缺點:

? ? 優點:美術和程序都能得到數學上的正確結果。
? ? 缺點:美術可能會不適應這種感官(差異于之前長久的習慣)。

方式2、保持美術在伽馬空間下混合,并讓游戲UI也在伽馬空間下混合。

? ? (使 場景使用線性空間,而UI使用伽馬空間。)

一些修改方案:

? ? https://github.com/killop/URP-12-GammaUIAndSplitResolution

? ? https://github.com/TakeshiCho/UI_RenderPipelineInLinearSpace

這種方式的優缺點:

? ? 優點:美術保持原習慣。
? ? 缺點:修改渲染方式可能導致一些潛在問題,如性能變差。

------------------------------------------------- NRatel割 -----------------------------------------------------

個人傾向選擇方式1。原因是:

1、簡單,且讓程序和美術都面向一個正確結果。

2、2D 或 2D+3D 的游戲項目也可會在有線性空間下進行混合的需求。SpriteRenderer也是由美術在PS中像UI一樣出的圖。只讓UI在Gamma下混合不能滿足實際需要。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/908445.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/908445.shtml
英文地址,請注明出處:http://en.pswp.cn/news/908445.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Mac下Android Studio掃描根目錄卡死問題記錄

環境信息 操作系統: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日構建) 問題現象 在項目開發過程中,提示一個依賴外部頭文件的cpp源文件需要同步,點…

Python----目標檢測(YOLO簡介)

一、 YOLO簡介 [YOLO](You Only Look Once)是一種流行的物體檢測和圖像分割模型, 由華盛頓大學的約瑟夫-雷德蒙(Joseph Redmon)和阿里-法哈迪(Ali Farhadi)開發,YOLO 于 2015 年推出&#xff0c…

OLED(SSD306)移植全解-基于IIC

OLED(SSD306)移植全解-基于IIC 一,什么是oled?二,什么是IIC協議三,IIC通信流程:四,針對SSD1306的IIC通信流程(結合芯片手冊版)1,主機發送起始信號2&#xff…

LangChain【7】之工具創建和錯誤處理策略

文章目錄 一 LangChain 自定義工具概述二創建自定義工具的三種方法2.1 方法一:tool 裝飾器2.1.1 同步方法案例2.1.2 工具描述方式1:傳參2.1.3 工具描述方式2:文檔字符串 2.2 方法二:StructuredTool類2.2.1 StructuredTool創建自定…

【信息系統項目管理師-選擇真題】2025上半年(第二批)綜合知識答案和詳解(回憶版)

更多內容請見: 備考信息系統項目管理師-專欄介紹和目錄 文章目錄 【第1題】【第2題】【第3題】【第4題】【第5題】【第6題】【第7題】【第8題】【第9題】【第10題】【第11題】【第12題】【第13題】【第14題】【第15題】【第16題】【第17題】【第18題】【第19題】【第20題】【第…

「EN 18031」訪問控制機制(ACM - 1):智能路由器的安全守衛

家用路由器要是出口歐洲,可得留意歐盟EN18031標準里的訪問控制機制。以路由器為例,訪問控制機制(ACM)能決定誰能連入網絡、訪問哪些網站。比如通過設置不同的用戶角色和權限,家長可以限制孩子設備的上網時間和可訪問的…

關于項目多語言化任務的概述

今天的任務一個是關于多語言化的,也就是i18n,我需要做的呢首先是知道項目多語言是怎么實現的,一般情況下沒有多語言化這個功能的時候,我們會寫一個頁面,默認是英文,然后里面的文本都是英文,那么…

護網行動面試試題(2)

文章目錄 51、常見的安全工具有哪些?52、說說Nmap工具的使用?53、近幾年HW常見漏洞有哪些?54、HW 三(四)大洞56、獲得文件讀取漏洞,通常會讀哪些文件57、了解過反序列化漏洞嗎?58、常見的框架漏…

Transformer-BiGRU多變量時序預測(Matlab完整源碼和數據)

Transformer-BiGRU多變量時序預測(Matlab完整源碼和數據) 目錄 Transformer-BiGRU多變量時序預測(Matlab完整源碼和數據)效果一覽基本介紹程序設計參考資料 效果一覽 基本介紹 1.Matlab實現Transformer-BiGRU多變量時間序列預測&…

SOC-ESP32S3部分:31-ESP-LCD控制器庫

飛書文檔https://x509p6c8to.feishu.cn/wiki/Syy3wsqHLiIiQJkC6PucEJ7Snib ESP 系列芯片可以支持市場上常見的 LCD(如 SPI LCD、I2C LCD、并行 LCD (Intel 8080)、RGB/SRGB LCD、MIPI DSI LCD 等)所需的各種時序。esp_lcd 控制器為上述各類 LCD 提供了一…

蘋果電腦深度清理,讓老舊Mac重煥新生

在日常使用蘋果電腦的過程中,隨著時間推移,系統內會積累大量冗余數據,導致電腦運行速度變慢、磁盤空間緊張。想要讓設備恢復流暢,蘋果電腦深度清理必不可少。那么,如何進行蘋果電腦深度清理呢?接下來為你詳…

如何處理React中表單的雙向數據綁定?

在前端開發中,雙向數據綁定(Two-way Data Binding)是指視圖(View)與數據模型(Model)之間保持同步:當模型發生變化時,視圖會自動更新;當視圖(用戶輸…

手機上網可以固定ip地址嗎?詳細解析

在移動互聯網時代,手機已成為人們日常上網的主要設備之一。無論是工作、學習還是娛樂,穩定的網絡連接都至關重要。許多用戶對IP地址的概念有所了解,尤其是固定IP地址的需求。那么,手機上網能否固定IP地址?又該如何實現…

Spring Boot + Prometheus 實現應用監控(基于 Actuator 和 Micrometer)

文章目錄 Spring Boot Prometheus 實現應用監控(基于 Actuator 和 Micrometer)環境準備示例結構啟動和驗證驗證 Spring Boot 應用Prometheus 抓取配置(靜態方式)Grafana 面板配置總結 Spring Boot Prometheus 實現應用監控&…

rk3588 上運行smolvlm-realtime-webcam,將視頻轉為文字描述

smolvlm-realtime-webcam 是一個開源項目,結合了輕量級多模態模型 SmolVLM 和本地推理引擎 llama.cpp,能夠在本地實時處理攝像頭視頻流,生成自然語言描述, 開源項目地址 https://github.com/ngxson/smolvlm-realtime-webcamhttps…

原生js操作元素類名(classList,classList.add...)

1、classList classList屬性是一個只讀屬性&#xff0c;返回元素的類名&#xff0c;作為一個DOMTokenList集合(用于在元素中添加&#xff0c;移除及切換css類) length:返回類列表中類的數量&#xff0c;該屬性是只讀的 <style> .lis { width: 200px; …

九.C++ 對引用的學習

一.基本概念 引用即內存的別名 int a 10; int& b a; 引用本身不占用內存&#xff0c;并非實體&#xff0c;對引用的所有操作都是在對目標內存進行操作 引用必須初始化&#xff0c;且不能更換對象 int c 5; b c; // 僅僅是在對引用的目標內存進行賦值 #include <ios…

7.2.1_順序查找

知識總覽&#xff1a; 順序查找&#xff1a; 算法思想&#xff1a; 從頭到腳挨個找或者從腳到頭挨個找適用于線性表(順序存儲和鏈式存儲都適用)&#xff0c;又叫線性查找 實現&#xff1a; 1個數組elem指向數組的起始位置&#xff0c;索引從0開始遍歷數組直到找到目標值返回…

視覺SLAM基礎補盲

3D Gaussian Splatting for Real-Time Radiance Field Rendering SOTA方法3DGS contribution傳統重建基于點的渲染NeRF 基礎知識補盲光柵化SFM三角化極線幾何標準的雙目立體視覺立體匹配理論與方法立體匹配的基本流程李群和李代數 李群和李代數的映射李代數的求導李代數解決求導…

如何利用 Redis 實現跨多個無狀態服務實例的會話共享?

使用 Redis 實現跨多個無狀態服務實例的會話共享是一種非常常見且有效的方案。無狀態服務本身不存儲會話信息&#xff0c;而是將用戶的會話數據集中存儲在外部存儲中&#xff08;如 Redis&#xff09;&#xff0c;這樣任何一個服務實例都可以通過查詢外部存儲來獲取和更新用戶的…