7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

2Pカラーを効率的に変換しよう

Posted at

動機

一般的にカラー変換はshaderを使って、runtimeで変換する
ただ、フレーム毎に変換するのは非効率と思います

もしカラー変換の結果をtextureに記録して、そのままモデルに使う
その方が効率的だと思います

カラー変換

カラー変換について、一般的なやり方は
まずRGBをHSVに変換して、そのあとHueを弄って、最後にRGBに戻る

HSVについてはこちらを参考にさせていただきました
HSV

手順

1.textureのRGBを抽出して、HSVに変換したあと、新のtextureに保存する(以降、このtextureをHSVテクスチャと呼ぶ


// RGB空間をHSV空間へ変換する
// Alphaを変換maskとして記録する
Texture2D RGB2HSV(Texture2D fromRGB)
{
    int width  = fromRGB.width;
    int height = fromRGB.height;
    Texture2D toHSV = new Texture2D (width, height, TextureFormat.ARGB32, false);
    Color[] cols = fromRGB.GetPixels();
    for(int Indx = 0; Indx < cols.Length; ++Indx)
    {
        float h = 0f;
        float s = 0f;
        float v = 0f;

        Color.RGB2HSV(cols[Indx], out h, out s, out v);
        cols[Indx].r = h;
        cols[Indx].g = s;
        cols[Indx].b = v;
   }

   toHSV.SetPixels(cols);
   toHSV.Apply();
   return toHSV;

}

Color.RGB2HSVはRGBをHSVに変換する関数、変換したHSVの値は正規化した値(0.0-1.0の範囲に)
そのままRGBチャンネルに記録できます

2.HSVテクスチャのRGBを抽出して、Rチャンネル(Hue)を変換する、そのあとRGBに戻る


// HSV空間をRGB空間へ変換する
// Alphaを変換maskとして使用する
Texture2D ChangeColor(Texture2D fromHSV, float diffHue)
{
    int width  = fromHSV.width;
    int height = fromHSV.height;
    Texture2D toRGB = new Texture2D (width, height, TextureFormat.ARGB32, false);
    Color[] cols = fromHSV.GetPixels();
    for(int Indx = 0; Indx < cols.Length; ++Indx)
    {
        float h = cols[Indx].r;
        if(0f < cols[Indx].a)
        {
            h += diffHue;
            h -= Mathf.Floor(h);
        }

        cols[Indx] = Color.HSVToRGB (h, cols[Indx].g, cols[Indx].b);
   }

   toRGB.SetPixels(cols);
   toRGB.Apply();
   return toRGB;

}

結果

使用したモデルはGoblin robber

ColorChange.gif

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?