Roblox 將顏色儲存為 Color3 物件,由介於 0 與 1 之間的紅、綠、藍浮點數組成,而引擎內建的 Color3.fromHSV(hue, saturation, value) 函式是在執行階段將 HSV 轉換為該 RGB 三元組的標準方式。該函式期望色相範圍為 0–1(其中 0 與 1 都會迴繞到紅色),飽和度範圍為 0–1(0 為灰色,1 為完全飽和),明度範圍為 0–1(0 為黑色,1 為全亮度)。當你撰寫 Color3.fromHSV(0, 1, 1) 時,會得到純紅, Roblox 將其回報為 (1, 0, 0)。若要使用大多數選色器和設計工具所輸出的、更常見的 0–360 度色相與 0–100 百分比飽和度及明度標記法,請在將數值傳入建構式之前,先將度數除以 360、百分比除以 100。Roblox 也提供 Color3:ToHSV(),用於執行反向對應以便驗證。若要檢查你打算貼到腳本中的 HSV 三元組是否會產生你所預期的 RGB──或是將已知的 Color3 分解為色相、飽和度與明度以進行研究或分享──瀏覽器版的 RGB to HSV Converter 以可複製的形式提供相同的算術運算。

how to convert hsv to rgb roblox
how to convert hsv to rgb roblox

Roblox Color3 與 HSV/RGB 工作流程

每個 Roblox 零件、GUI 元素,以及公開顏色的 Lighting 屬性,最終都會解析為一個 Color3:三個標示為 R、G、B 的浮點數通道,各自被限制在 0–1 範圍內。這就是為什麼 Studio「屬性」視窗中的滑桿永遠會顯示像 0.472 這種數值,而不是 120;也是為什麼腳本常會以整數形式撰寫 Color3.fromRGB(120, 80, 40),再於內部將其標準化。HSV 表示法與 Color3 並存,而非內含於其中。HSV 將同一種實體光重新組織為色相(色環上的位置)、飽和度(距離灰色的程度)與明度(最強通道的亮度)。Roblox 透過建構式 Color3.fromHSV 與方法 Color3:ToHSV 來公開 HSV,而許多外部選色器、調色盤工具與著色器編輯器預設即以 HSV 描述顏色。

由於 Roblox 的建構式與你的選色器講的是略有不同的 HSV「方言」,最常見的摩擦點在於範圍。Roblox 以 0–1 的圓圈來表示色相,其中 0 與 1 為同一個紅色錨點──也就是將 360 度色環摺疊到單位區間上。飽和度與明度同樣為 0–1 的分數。然而大多數設計工具將色相描述為 0–360 度、飽和度與明度描述為 0–100 百分比。將這兩種方言對齊,是在 Roblox 中執行任何 HSV 轉 RGB 轉換時的實務核心,也是你在開發過程中值得擁有一個獨立轉換或查詢工具的原因。

使用 Color3.fromHSV 將 HSV 轉換為 RGB

  1. 確認你的來源數值。以度數(0–360)記下色相,並以百分比(0–100)記下飽和度與明度。這是多數外部調色盤與選色器所回傳的單位。
  2. 將各通道標準化至 Roblox 的 0–1 範圍。將色相除以 360、飽和度除以 100、明度除以 100。這三個得到的浮點數即為 Color3.fromHSV 所期望的輸入。
  3. 在 LocalScript、ServerScript 或指令列中呼叫 Color3.fromHSV(h, s, v)。回傳的 Color3 以 0–1 的浮點數儲存紅、綠、藍通道,符合每個 Roblox 屬性的要求。
  4. 將結果指派給你正在設定樣式的屬性。常見目標包括 Part.Color、Frame.BackgroundColor3、TextLabel.TextColor3,以及 Lighting.Ambient 與 Lighting.FogColor 等燈光屬性。
  5. 若你想確認來回轉換的結果,可使用 Color3:ToHSV() 讀回通道。該方法會以相同的標準化 0–1 形式回傳,你可再將其乘以倍數轉回度數與百分比以便顯示。

該建構式並不像許多顏色函式庫那樣會對超出範圍的輸入進行截斷。飽和度大於 1 會使結果過度飽和,但不會引發錯誤;色相大於 1 則只會在色環上繞行一次。事先標準化能讓產生的 Color3 維持在 Studio 所要求的標準 0–1 通道範圍內,並避免因無訊息的繞行而產生細微的色偏。

從 Roblox Color3 查詢 HSV

有時候你已經擁有一個 Color3──也許是從某個零件上取樣的顏色、從設計規格複製的品牌色,或是 已轉換為 RGB 的十六進位色碼──而你需要知道它對應的 HSV,以便在滑桿中調整。這就是反向作業,也是 RGB to HSV Converter 工具在整個流程中的切入點。在瀏覽器中開啟該工具,輸入 0 到 255 之間的整數紅、綠、藍值,再點擊 Convert to HSV。該工具會回傳以 0–360 度圓圈表示的色相、以百分比表示的飽和度、以百分比表示的明度、標準化的 HSV 標記法,以及原始的十六進位色碼。介面會同時保留三個 RGB 輸入欄位,讓你可以微調某個通道,並即時觀察三個 HSV 元件如何連動──這在反覆調整 Roblox 顏色、卻不想每次都重新在 Studio 輸入數值時特別好用。

該轉換器遵循標準的 Android Color HSV 範圍合約,其中色相至少為零且小於 360 度,飽和度與明度在顯示為百分比之前位於零到一之間(依據 Android Developers 關於 Color 的說明文件)。如果你手上的是 Roblox Color3 形式,請先將每個 0–1 通道乘以 255 並四捨五入為整數,再輸入工具中。顯示的飽和度與明度可直接除以 100 讀回 Roblox 的 0–1 形式。顯示的色相則需要和建構式路徑一樣,經過相同的 360→1 除法步驟。

實作範例:從一個 Roblox 顏色到兩套系統

以你可能為夕陽天空盒挑選的暖橘色為例:Color3.fromRGB(200, 100, 50),Roblox 會在內部將其儲存為 R = 0.784、G = 0.392、B = 0.196。

使用標準的最大通道分段公式,將該 Color3 轉換為 HSV,結果如下:

  • 最大通道: R = 0.784,最小 = B = 0.196,差值 = 0.588。
  • 明度 (V): max(R, G, B) = 0.784,顯示為 78.43%。
  • 飽和度 (S): 差值 ÷ 最大值 = 0.588 ÷ 0.784 = 0.7500,顯示為 75.00%。
  • 色相 (H): 由於 R 為最大值,H = 60 × ((G − B) ÷ 差值) = 60 × ((0.392 − 0.196) ÷ 0.588) = 60 × 0.3333 = 20.00°。

若要將這些數值放回腳本中,請除以單位範圍:20 ÷ 360 ≈ 0.0556、75 ÷ 100 = 0.75、78.43 ÷ 100 ≈ 0.7843。Roblox 的呼叫 Color3.fromHSV(0.0556, 0.75, 0.7843) 會重建出同一個橘色,而 Color3:ToHSV() 來回轉換後仍會得到 0.0556、0.75、0.7843。

HSV 通道範圍與色環

0–360 度色相圓圈被劃分為六個對齊於加色原色與二次色的錨點。下表將每個色環錨點對應到其度數值、Roblox 標準化的 0–1 形式,以及建構式在飽和度與明度皆為最大時所回傳的飽和 RGB。

顏色色相(度)色相(0–1)V = 1 時的飽和 RGB
00.000(1, 0, 0)
600.167(1, 1, 0)
1200.333(0, 1, 0)
1800.500(0, 1, 1)
2400.667(0, 0, 1)
洋紅3000.833(1, 0, 1)

請記住 HSV 的明度追蹤的是最強通道,而非感知亮度。純黃 (1, 1, 0) 與純藍 (0, 0, 1) 的明度都是 1,即使兩者在螢幕上呈現的亮度差異很大。如果你的目標是感知上平衡的漸變,使用 HSL 建構式或能顯示感知亮度的選色器會產生更均勱的漸層。

在 Roblox 中將 HSV 轉換為 RGB 的常見陷阱

忘記 360→1 與 100→1 的重新縮放。最常見的錯誤就是把色相 120 直接餵給 Roblox,以為會得到綠色,結果卻落在青色與藍色之間。從設計工具複製數值後,請立即將度數除以 360、百分比除以 100。

假設 HSV 明度等於 HSL 亮度。HSV 明度是最大的標準化通道。HSL 亮度則是最大與最小通道的平均值。淡黃色與淡藍色擁有相同的 HSL 亮度值,卻有截然不同的 HSV 明度。如果你的程式碼、著色器或動畫關鍵影格原本是基於 HSL 建立,在未重新平衡的情況下切換到 HSV,將會使最亮的影格產生偏差。

將 RGB 相等視為正常色相。當 R、G、B 相等時──包括純黑、純白與中間灰──飽和度為零,色相也沒有視覺意義。Roblox 仍會從 Color3:ToHSV() 回傳一個數字(慣例為 0),但改變它並不會改變實際渲染出來的顏色。在將色相視為有意義之前,進行無色彩檢查(最大通道等於最小通道)是最安全的防護。

盲目信任第三方 HSV 查詢工具。並非所有線上 HSV 工具都遵循相同的慣例。某些工具為了精簡影像處理,將色相以 0–179 或 0–255 的整數儲存;有些將飽和度以百分比表示,有些則以 0–1 的分數表示。此處使用的 RGB to HSV Converter 已獨立對照 R grDevices rgb2hsv 慣例進行驗證(請參閱 R grDevices rgb2hsv 說明文件),以度數顯示色相,並以百分比顯示飽和度與明度,這符合最常見的設計工具方言,且只需一次除法即可轉換為 Roblox 的 0–1 形式。

若你在權衡各種方案,CMYK to RGB Explained: The Formula and Its Limits 有詳細的說明。