Difference between revisions of "love.math.gammaToLinear (日本語)"

(Created page with "{{newin (日本語)|0.9.1|091|type=関数}} ガンマ空間 (sRGB) から線形空間 (RGB) へ色変換します。これはlove.graphics.isGammaCorrect (日本語)|ガ...")
 
(translation updated)
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
{{newin (日本語)|[[0.9.1]]|091|type=関数}}
+
{{newin (日本語)|[[0.9.1 (日本語)|0.9.1]]|091|type=関数}}
 
ガンマ空間 (sRGB) から線形空間 (RGB) へ色変換します。これは[[love.graphics.isGammaCorrect (日本語)|ガンマ補正表示]]を行う場合、および LÖVE が線形 RGB を自動変換処理しない場合に計算をする必要がある場合に有用です。
 
ガンマ空間 (sRGB) から線形空間 (RGB) へ色変換します。これは[[love.graphics.isGammaCorrect (日本語)|ガンマ補正表示]]を行う場合、および LÖVE が線形 RGB を自動変換処理しない場合に計算をする必要がある場合に有用です。
  
ガンマ補正表示に関する詳細は [http://http.developer.nvidia.com/GPUGems3/gpugems3_ch24.html ここ]、 [http://filmicgames.com/archives/299 ここ]、さらに[http://renderwonk.com/blog/index.php/archive/adventures-with-gamma-correct-rendering/ ここ] にあります。
+
ガンマ補正表示に関する詳細は [https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch24.html ここ]、 [http://filmicgames.com/archives/299 ここ]、さらに[http://renderwonk.com/blog/index.php/archive/adventures-with-gamma-correct-rendering/ ここ] にあります。
 +
 
 +
バージョン [[11.0 (日本語)|11.0]] 以前まで、配色成分における値の範囲は小数値の 0 〜 1 ではなく整数値の 0 〜 255 です。
  
 
{{notice|ガンマ補正表示は高度な話題であり色空間に関してたやすく混乱してしまいます。これが必要か不明であれば、避けたいと思っても構いません。}}
 
{{notice|ガンマ補正表示は高度な話題であり色空間に関してたやすく混乱してしまいます。これが必要か不明であれば、避けたいと思っても構いません。}}
Line 47: Line 49:
 
<source lang="lua">
 
<source lang="lua">
 
local function PremultiplyLinearPixel(x, y, r, g, b, a)
 
local function PremultiplyLinearPixel(x, y, r, g, b, a)
   r = r * a / 255
+
   r = r * a
   g = g * a / 255
+
   g = g * a
   b = b * a / 255
+
   b = b * a
 
   return r, g, b, a
 
   return r, g, b, a
 
end
 
end
Line 55: Line 57:
 
local function PremultiplyGammaPixel(x, y, r, g, b, a)
 
local function PremultiplyGammaPixel(x, y, r, g, b, a)
 
   r, g, b = love.math.gammaToLinear(r, g, b)
 
   r, g, b = love.math.gammaToLinear(r, g, b)
   r = r * a / 255
+
   r = r * a
   g = g * a / 255
+
   g = g * a
   b = b * a / 255
+
   b = b * a
 
   r, g, b = love.math.linearToGamma(r, g, b)
 
   r, g, b = love.math.linearToGamma(r, g, b)
 
   return r, g, b, a
 
   return r, g, b, a
Line 84: Line 86:
 
{{#set:Description=ガンマ空間 (sRGB) から線形空間 (RGB) へ色変換します。}}
 
{{#set:Description=ガンマ空間 (sRGB) から線形空間 (RGB) へ色変換します。}}
 
== そのほかの言語 ==
 
== そのほかの言語 ==
{{i18n|love.math.gammaToLinear}}
+
{{i18n (日本語)|love.math.gammaToLinear}}

Latest revision as of 03:58, 13 June 2019

LÖVE 0.9.1 から使用可能
この関数は以前のバージョンでは非対応です。

ガンマ空間 (sRGB) から線形空間 (RGB) へ色変換します。これはガンマ補正表示を行う場合、および LÖVE が線形 RGB を自動変換処理しない場合に計算をする必要がある場合に有用です。

ガンマ補正表示に関する詳細は ここここ、さらにここ にあります。

バージョン 11.0 以前まで、配色成分における値の範囲は小数値の 0 〜 1 ではなく整数値の 0 〜 255 です。

O.png ガンマ補正表示は高度な話題であり色空間に関してたやすく混乱してしまいます。これが必要か不明であれば、避けたいと思っても構いません。  


関数

概要

lr, lg, lb = love.math.gammaToLinear( r, g, b )

引数

number r
変換したい sRGB 色の赤チャンネル。
number g
変換したい sRGB 色の緑チャンネル。
number b
変換したい sRGB 色の青チャンネル。

返値

number lr
線形 RGB 空間へ変換された色の赤チャンネル。
number lg
線形 RGB 空間へ変換された色の緑チャンネル。
number lb
線形 RGB 空間へ変換された色の青チャンネル。

注釈

透過値は第四引数として関数へ渡すことができますが、透過は常に線形であるため無変更で返されます。

関数

概要

lr, lg, lb = love.math.gammaToLinear( color )

引数

table color
変換したい sRGB 色における赤、青、および青チャンネルの配列。

返値

number lr
線形 RGB 空間へ変換された色の赤チャンネル。
number lg
線形 RGB 空間へ変換された色の緑チャンネル。
number lb
線形 RGB 空間へ変換された色の青チャンネル。

関数

概要

lc = love.math.gammaToLinear( c )

引数

number c
変換したい sRGB 空間における色チャンネルの値。

返値

number lc
線形 RGB 空間における色チャンネルの値。

用例

彩色された円を使用してガンマ補正表示を行います

local function PremultiplyLinearPixel(x, y, r, g, b, a)
   r = r * a
   g = g * a
   b = b * a
   return r, g, b, a
end

local function PremultiplyGammaPixel(x, y, r, g, b, a)
   r, g, b = love.math.gammaToLinear(r, g, b)
   r = r * a
   g = g * a
   b = b * a
   r, g, b = love.math.linearToGamma(r, g, b)
   return r, g, b, a
end

-- 画像を読み込んで ('alpha', 'premultiplied') 混合方式を使用するために RGB 値の 透過に事前へ乗算を行います。
-- 画像の色空間に対して乗算にて正確に計算します。
function NewPremultipliedImage(filepath, flags)
    local imagedata = love.image.newImageData(filepath)

    local mapfunction = (flags and flags.linear) and PremultiplyLinearPixel or PremultiplyGammaPixel
    imagedata:mapPixel(mapfunction)

    return love.graphics.newImage(imagedata, flags)
end

image = NewPremultipliedImage("pig.png")

関連


そのほかの言語