A little Cafe Times

日々のちょっとしたこと

つくろう!ナチュラルハーモニー

このブログはD@NPEN Advent Calendar 2020 - Adventarの16日目の記事です。

前日はid:kitos_ma09 君のCSSチュパカブラチャレンジ - Noteでした。

技術系の記事ですね!Pythonは一発芸的な使い方も気軽にできるのがよいですね。さりげないデビ太郎も好き。

というわけで9日振りです。よくわからないタイトルと共に戻ってきました。

ナチュラルハーモニーとは?

哲学的な話ではなく。

ナチュラルハーモニーといえば!

もちろん高森藍子緒方智絵里のユニットですね!発表から1年と1か月ちょっと経ちました!

ひとつ前の記事でもまとめていますが、今年は近年まれにみる大活躍。

この活躍をもっと盛り上げるべく、何かできることはないか……。そんなことを考えている中、ナチュラルハーモニーサーチをしていると別文脈で引っかかるものが。

ナチュラルハーモニー(配色)とは?

ナチュラルハーモニー」とはその名の通り、自然な調和を生む配色で、自然界に存在する配色も多く見慣れたものであることからそのような印象を与えます。具体的にどのような配色を指すかというと、配色の組み合わせのうち「黄色に近い色味を明るく」して、もう一方の「青紫色に近い色味を暗く」した配色になります。

引用 : ナチュラルハーモニー・コンプレックスハーモニー配色を比べてみる | オウンドメディア | 大阪市天王寺区SOHOホームページ制作 | デザインサプライ-DesignSupply.-

めっちゃナチュラルハーモニー(ユニット)って感じする!!!!

ここで思いつきました。気軽にナチュラルハーモニー(配色)に触れられるようになったらナチュラルハーモニー(ユニット)にも注目されるのでは???

思いついたらやってみましょう。

つくろう!ナチュラルハーモニー

引用にもある通り、黄色に近い色を明るく、青紫色に近い色を暗くするのがナチュラルハーモニーのようです。

画像の色をとっていい感じによしなにしてあげるとナチュラルハーモニーになりそうですね。

今回はこんな色相環(もどき)を考えてみます。

f:id:shilfol:20201215235152p:plain
色相環のようでそうでないカラーサークル

色を変換する

色を表すのによく使われるのは#C5DD7Fのような形で表現されるRGB形式でしょう。 ただ、RGBは明るさを扱うのが少し難しいので、別の表現方法を考えてみます。

ここでは、HSV(HSB)という、色相(色の種類)と彩度(色の鮮やかさ)、明度(色の明るさ)で表現される形式を使ってみます。なんと都合がよい形式でしょう。

ナチュラルハーモニーの定義から、黄色に近い色相であればあるほど明度を上げ、青紫色に近い色相であればあるほど明度を下げればよさそうです。

色相を表すHueは、通常0から360の値で表されます。めちゃくちゃ円を思い浮かべます。 そこで三角関数を用いて、色相に対応する明度を求めてみようとします。

黄色に近い値で最大値を取ってほしいので、黄色で最大値を取るようにCosを考えると、こんな感じになります。 なお、明度Vは後述するプログラムで0から1の範囲を取るので、補正もかけておきます。

V = Cos(θ - 60°) / 2 + 1/2 

これでナチュラルハーモニーっぽくなりそうです!

実装する

実装にはGoを使いました。理由は好きだからです。 好きを大切に。

Goの標準ライブラリはかなり充実していますが、色情報を扱うには少し不自由なので、go-colorfulというライブラリを利用します。

github.com

go-colorfulを用いることで、画像をRGB形式で読み込んだとしても容易にHSV形式に変換することが可能です。

今までの話をまとめて実装してみると、こんな感じです。 ソース片なので参考までに。

import (
    "image"
    "image/color"
    "math"

    "github.com/lucasb-eyer/go-colorful"
)

type NaturalHarmonyParam struct {
    P float64
}

func ConvertNaturalHarmony(img image.Image, nhp *NaturalHarmonyParam) image.Image {
    b := img.Bounds()
    ci := image.NewRGBA(b)
    for y := b.Min.Y; y < b.Max.Y; y++ {
        for x := b.Min.X; x < b.Max.X; x++ {
            p := innerProcessNaturalHarmony(img.At(x, y), nhp)
            ci.Set(x, y, p)
        }
    }
    return ci
}

func innerColorProcessNaturalHarmony(c colorful.Color, nhp *NaturalHarmonyParam) colorful.Color {
    h, s, v := c.Hsv()
    mh, ms, mv := mappingNaturalHarmonyHSV(h, s, v, nhp)
    mc := colorful.Hsv(mh, ms, mv)
    return mc
}

func mappingNaturalHarmonyHSV(h, s, v float64, nhp *NaturalHarmonyParam) (hh, ss, vv float64) {
    // hue(色相)はそのまま
    hh = h
    // saturation(彩度)もいったんそのまま
    ss = s
    // 0~360を0~2pi(rad)に変換するので, pi/180をかける
    radian := h * math.Pi / 180.0
    // 黄色のhは60(0~360)の値であるので, pi/3となる
    cv := (math.Cos(radian-math.Pi/3.0))/2.0 + 0.5

    // もともとのvとdiffを取ってみる
    // dv := math.Abs(cv - v)
    // diffをいくらか小さくした値(p)をcvに近づける方向へ加算
    // vv = ((cv-v)/dv)*dv*p + v を整理したもの
    p := nhp.P
    if !isNearlyZero(h) || !isNearlyZero(s) {
        vv = p*(cv-v) + v
    } else {
        // 白 or 黒はそのまま出す
        vv = v
    }
    return
}

要約すると、

  • ConvertNaturalHarmonyに画像情報を投げるとナチュラルハーモニーに変換するよ
  • NaturalHarmonyParamナチュラルハーモニー度を調整できるよ

という感じです。

動かしてみる

よしなに実装を終えたら、動かしてみます。その結果がこちら。

f:id:shilfol:20201216003449p:plain
おわかりいただけただろうか

処理前と並べてみます。

f:id:shilfol:20201216005412p:plain
ナチュラルハーモニー!

それっぽい!!!!!!!!ナチュラルハーモニー!!!!!!

Q.これがナチュラルハーモニー…?

A. 自分がナチュラルハーモニーだと思うものがナチュラルハーモニーだと思います。

それはそれとして。色々問題はあるのですが、

  • 色の変換を考えるときに最大値しか考えておらず青紫が最小ではない(記事を書いてる途中で気がついた)
  • 気軽に使えない
  • そもそもナチュラルハーモニー(配色)と言えるのか

一番下は色彩検定を持っているオタクに検証をお願いしたいところ。

気軽に使えないのは割と大きな問題ですね。 これをどうするか?解決策はもちろんありますが、それは明後日までのお楽しみです。

今日はここまで。アイマス要素があるかは謎ですがナチュラルハーモニー要素は盛りだくさんでお届けしました。

明日は腹いーたー君の詩花のお話です。詩花って書けない。

P.S. 小日向美穂さんお誕生日おめでとうございます!

ユニット名を貰って1年がたって

このブログはD@NPEN Advent Calendar 2020 - Adventarの7日目の記事です。

前日は id:hara_eater 君の デレ大阪1日目の感想 - hara_eaterのメモ書きでした。

両日チケットを譲ってもらう予定でしたが急遽イベント被りして、それで手放したら過去一で盛り上がれそうな内容をやっていて大号泣したライブでしたね……。

アンコール上映行くつもり満々だったのに消え去ってしまったのもつらい……。

サメの話は間に合いませんでした。リベンジします。

 

というわけでお久しぶりです。yayaです。とうとうOB枠になりました。

体制変更1年目という今年、いきなりのコロナ騒動で大変なことになってしまったなと……。そんな中でもアドベントカレンダーを立ち上げてくれた現会長である腹いーたー君に感謝です。

 

さて、このブログもほぼほぼアドベントカレンダーの記事を書くだけのものになっちゃったなーと反省する部分もありつつ。

懐かしみながら見返していたら去年の記事がでてきまして。

yaya.hatenadiary.com

ちゃんと読んでみると、

色々と変化しすぎて今までと同じ楽しみ方が出来なくなって戸惑ってるけど、まだまだ信じているからなシンデレラガールズ 

いや本音は自担の供給をくれってことなんですけど。 

 いやめっちゃ期待値高いじゃん自分。

 

そんな爆盛りしていた期待に対して今年はどんなことあったかなーってゆるく振り返る記事です。

活動を並べてみる

はてさて、自担の供給どんなことがあったかな?とリストアップしてみると、

  • 3月31日 藍子 : mobage, ドリフ上位 【こころに春を】
  • 5月9日 智絵里 : mobage, JAM上位【ブレイブステージ】
  • 5月21日 総選挙発表, 藍子6位(Pa1位), 智絵里9位(Cu3位)
  • 5月31日 藍子 : SS, イベント 【ほほえみDiary】
  • 6月15日 智絵里 : SS, Keyコラボ 歌唱 [My Soul, Your Beats!]
  • 6月30日 藍子 : SS, フェス限定ガチャ 【やすらぎの温度】
  • 7月20日 智絵里 : SS, イベント【太陽の絵の具箱】
  • 9月2日 藍子,智絵里 : SS, アナザーコミュ [Enjoy Our Break Time!]
  • 9月21日 藍子 : mobage ガチャ 【スパークルスター】
  • 10月4日 智絵里 : SS, 限定ガチャ 【うさぎさんわーるど】
  • 11月28日 ナチュラルハーモニー : 記念PV出演
  • 11月30日 智絵里 : mobage, 月末ガチャ 【奇跡に触れて】

大きな出来事をまとめただけでもこんな感じ。抜け漏れあったら教えてください。

 

これを見てどう感じるかは人によると思うのですが。

率直な気持ちは、やりすぎでは???!?!???!???!???!!??! です。

 

いや確かに供給をくれと言ったのは事実なんですけども。

約1か月間隔でモバ上位走るの大変だなーとか、間髪入れずにステ走ることになるなーとか、節々に思うときはありましたが、1年終わってこんなことになるとは誰が予想できたでしょうか。

 

Keyの畑から移ってきた人間なので担当のカバー(しかもAB!)がめちゃくちゃ嬉しかったな~~~とか、個々の出番に対する思い出はあるのですがそれを綴るには時間が足りません(ここを書いてるとき23時半)。

 

個々のアイドルの出番が偏るのはたまによくあることですが、2人の担当でこれほどまでに連続すると逆に怖いまであります。いやめっちゃ怖い。

 

極めつけには記念PV。みんな見ましたか???????????(リンク踏むと該当箇所に飛べます)

 叫びました。いや叫ぶでしょ。そのあと号泣。

前述した記事にも過去の会報にも書きましたが、シンデレラガールズがおとぎ話(本家シンデレラ)モチーフで展開している姿が一番好きで。

その姿を取り戻してくれた喜びに担当案件ぶつけられたら誰が正気を保てるでしょうか。

 

来年は10周年。

記念となる年に向けて、足掛かりとしては十分すぎるものが出てきたと思っているので、期待が高まります。

 

ぶっちゃけ色々変わった?

ユニット名をもらう、というのが大事件なことは間違いないのですが、これ自体によって天地がひっくり返ることは無いのかなー、というのが正直なところで。

出番の連続がお祭りのようで楽しかったことや、PVの出演理由になることが嬉しいというのは紛れもない事実です。

かといって、シンデレラガールズは190人+αがいるコンテンツ。急に曲がもらえたり、ユニットお仕事が爆増することはほぼありません。

 

ただひとつ、2人を呼ぶときに固有名詞がついて、その呼び名が飛び交う環境が生まれたのは、小さいけれど大きな一歩だなと。

PV公開時にユニット名検索タブがたくさんの人で溢れる光景は忘れられません。

いつになるかはわかりませんが、これらの小さなことが積み重なって、ゆくゆくはユニット曲が生まれることを願うばかりです。

 

終わりに

これ収拾ついてる?って気持ちしかありませんがここまで。(23:50)

9日後にまた会いましょう。ナチュラルハーモニー。

 

明日はKenza君です。今年はめちゃくちゃDJ活動していたイメージがあります。いつか踊りに行きたいですね。