~~NOTOC~~ ====== Color(色の指定) ====== このページは過去の情報となります。\\ 新しいスクリプトリファレンスは**[[https://developer.virtualcast.jp/vci-docs/api/|こちら]]**になります。 [[vci:script:reference:effekseer|Effekseer (エフェクト)]]のエフェクトのカラーや、マテリアルの色を変更したりする時に使用します。 ^ 名前 ^ 説明 ^ バージョン ^ | [[vci/script/reference/color#new | _new]] | 初期化 新しいColorを宣言する時に使用します | | [[vci/script/reference/color#ToString ]] | 色を文字列に変換します | | [[vci/script/reference/color#GetHashCode ]] | ハッシュ値を取得します | | [[vci/script/reference/color#Lerp ]] | AのカラーからBのカラーまで補間します | | [[vci/script/reference/color#LerpUnclamped ]] | AのカラーからBのカラーまで補間します(clampされません) | | _toVector4(使用不可) | vector4とcolor型の変換 | | _toColor(使用不可) | vector4とcolor型の変換 | | [[vci/script/reference/color#HSVToRGB]] | HSVで指定してカラーを作成します | | [[vci/script/reference/color#print_で色を確認する | red]] | 赤(レッド) RGBA(1, 0, 0, 1) | | [[vci/script/reference/color#print_で色を確認する | green]] | 緑(グリーン) RGBA(0, 1, 0, 1) | | [[vci/script/reference/color#print_で色を確認する | blue]] | 青(ブルー) RGBA(0, 0, 1, 1) | | [[vci/script/reference/color#print_で色を確認する | white]] | 白(ホワイト) RGBA(1, 1, 1, 1) | | [[vci/script/reference/color#print_で色を確認する | black]] | 黒(ブラック) RGBA(0, 0, 0, 1) | | [[vci/script/reference/color#print_で色を確認する | yellow]] | 黄(イエロー) RGBA(1, 0.922, 0.016, 1) | | [[vci/script/reference/color#print_で色を確認する | cyan]] | 水(シアン) RGBA(0, 1, 1, 1) | | [[vci/script/reference/color#print_で色を確認する | magenta]] | 紫(マゼンダ) RGBA(1, 0, 1, 1) | | [[vci/script/reference/color#print_で色を確認する | gray]] | 灰(グレー) RGBA(0.5, 0.5, 0.5, 1) | | [[vci/script/reference/color#print_で色を確認する | clear]] | 透明(クリア) RGBA(0, 0, 0, 0) | | [[vci/script/reference/color#grayscale]] | カラーをグレースケールにした時の濃さを求めます | | [[vci/script/reference/color#linear変換 / gamma変換 | linear]] | カラーをリニアに変換します | | [[vci/script/reference/color#linear変換 / gamma変換 | gamma]] | カラーをガンマに変換します | | [[vci/script/reference/color#maxcolorcomponent]] | RGBの要素で最も大きい値を返します | | [[vci/script/reference/color#r_g_b_a | r]] | Color の Red(赤) の要素にだけアクセスします | | [[vci/script/reference/color#r_g_b_a | g]] | Color の Green(緑) の要素にだけアクセスします | | [[vci/script/reference/color#r_g_b_a | b]] | Color の Blue(青) の要素にだけアクセスします | | [[vci/script/reference/color#r_g_b_a | a]] | Color の alpha(透明度) の要素にだけアクセスします | ===== RGBについて ===== {{:vci:script:reference:rgb.jpg?direct&300|}}\\ プログラムでは色を赤(Red)、青(Blue)、緑(Green)に分けて指定する事で表現します。\\ この表現をそれぞれの頭文字をとってRGB(RGBカラーモデル)と呼びます。\\ RGBに加えて、透明度(alpha)の指定が入ったものをRGBAと呼びます。\\ \\ 色を作成する場合、RGBAの成分を混ぜる事で表現しています。\\ 例えば、紫色であればRとBの値を大きくし、黄色であればRとGの値を大きくとります。\\ 全ての値が1の時は白になり、0の時は黒になります。また、RGBを同じ値にする事でグレーになります。\\ * [[https://ja.wikipedia.org/wiki/RGB|RGB(Wikipedia)]] ===== printで色を確認する ===== * ユーティリティで用意されているcolorの確認を行えます。 サンプル\\ -- RGB print("red : "..tostring(Color.red)) print("green : "..tostring(Color.green)) print("blue : "..tostring(Color.blue)) -- white gray black print("white : "..tostring(Color.white)) print("gray : "..tostring(Color.gray)) print("black : "..tostring(Color.black)) -- clear print("white : "..tostring(Color.clear)) -- cyan magenta yellow print("cyan : "..tostring(Color.cyan)) print("magenta : "..tostring(Color.magenta)) print("yellow : "..tostring(Color.yellow)) ===== __new ===== **第1引数:red(number) 第2引数:green(number) 第3引数:blue(number) 第4引数:alpha(number)** * RGBAを直接指定してカラーを作成します。指定する範囲は 0 から 1 です。 サンプル\\ function onUse() -- グレーを作成します local color = Color.__new(0.5, 0.5, 0.5, 1.0) -- CubeColorのマテリアルをcolorに変更します vci.assets.SetMaterialColorFromName("CubeColor", color) end 実行結果\\ (CubeColorのマテリアルの色がグレーに変化します) ===== ToString ===== **ToString fun(): string** サンプル\\ function onUse() print("red : "..tostring(Color.red)) end 実行結果\\ "red : RGBA(1.000, 0.000, 0.000, 1.000)" ===== GetHashCode ===== **GetHashCode fun(): number** サンプル\\ function onUse(use) print(Color.red.GetHashCode()) local col = Color.__new(1,0,0,1) print(col.GetHashCode()) end 実行結果\\ 541065216 541065216 説明\\ ハッシュ値を取得します ===== Lerp ===== **Lerp fun(a: Color, b: Color, t: number): Color** サンプル\\ function updateAll() local time = 0.5 * math.sin(os.time()) + 0.5 local color = Color.Lerp(Color.red, Color.blue, time) vci.assets.SetMaterialColorFromName("CubeColor", color) end 実行結果\\ 名前が''CubeColor''のマテリアルが赤と青の間で徐々に色が変わります。 説明\\ 第一引数のカラーから第二引数のカラーまで補間します ===== LerpUnclamped ===== **LerpUnclamped fun(a: Color, b: Color, t: number): Color** サンプル\\ function updateAll() local time = math.sin(os.time()) + 1 local color = Color.LerpUnclamped(Color.red, Color.gray, time) vci.assets.SetMaterialColorFromName("CubeColor", color) end 実行結果\\ 名前が''CubeColor''のマテリアルが(1, 0, 0, 1)と(0, 1, 1, 1)の間で徐々に色が変わります。 説明\\ 第一引数のカラーから第二引数のカラーまで補間します(clampされません) ===== HSVToRGB ===== **第1引数:Hue(number) 第2引数:Saturation(number) 第3引数:Value(number)** * HSVを指定してカラーを作成します。指定する範囲は 0 から 1 です。 * RGBで色を作成するのは直感的ではないので、HSVで指定すると直感的に色が選べます。 * 詳細は [[vci:script:tips:hsv2rgb|VCIでHSVtoRGBを実装する]] にも掲載されています。 サンプル\\ local _hue = 0 function update() -- hueを毎フレーム0.01ずらす _hue = _hue + 0.01 -- hueが1を越えたらリセット if _hue > 1.0 then _hue = 0 end -- _hueの値を使ってColorを適用する local color = Color.HSVToRGB(_hue, 1, 1) vci.assets.SetMaterialColorFromName("CubeColor", color) end 実行結果\\ (CubeColorが虹色に変化します) ===== grayscale ===== **grayscale number** サンプル\\ function onUse(use) local color = Color.__new(1, 0.2, 0.58) print(color.grayscale) print(0.299 * color.r + 0.587 * color.g + 0.114 * color.b) end 実行結果\\ (0.482520014047623) (0.482519999846816) 説明\\ カラーをグレースケールにした時の濃さを求めます ===== linear変換 / gamma変換 ===== * カラーをlinearとgammaに変換できます。 サンプル\\ function onUse() -- gray 0.5 local col = Color.__new(0.5, 0.5, 0.5, 1.0) print(col.ToString()) -- linear print(col.linear.ToString()) -- gamma print(col.gamma.ToString()) end 実行結果\\ RGBA(0.500, 0.500, 0.500, 1.000) RGBA(0.241, 0.241, 0.241, 1.000) RGBA(0.735, 0.735, 0.735, 1.000) ===== maxColorComponent ===== **maxColorComponent number** サンプル\\ function onUse(use) local color = Color.__new(0.75, 0.2, 0.58) print(color.maxColorComponent) end 実行結果\\ 0.75 説明\\ RGBの要素で最も大きい値を返します ===== r g b a ===== サンプル\\ function onUse(use) local color = Color.__new(0.75, 0.2, 0.58) print(color.r) color.r = 1 print(color.r) print(color.g) print(color.b) print(color.a) end 実行結果\\ 0.75 1 0.200000002980232 0.579999983310699 1 説明\\ 各要素にアクセスします。