GONDWANA開発ブログ

五大開発株式会社のGONDWANA開発に関する公式ブログです。

「輝度クロマキー合成」機能のコツと使い方

前回の「一定の高さに浮かぶ地域名と境界線の見やすい表示機能の試験実装について」に続き、今回もその小話。

前回、「若干の対応でユーザーに大きなメリットがある機能を実装できそうなので」とメインタスクの傍らで実装試験を行っていた機能はシンプルに「透過白地図」と呼ぶ事にしました。この機能は、既存のタイルレイヤーの重ね合わせ機能では、3D地形のレイヤーのアピアランスソースに「白地図」を「乗算合成」すると、地形の起伏の影響で読み難くなる問題を綺麗に回避する安易な方法を提供したいというのが趣旨でした。

例えば北海道の苫前町は3D地形に、地理院標高タイルによる段彩図(標準合成)+白地図(乗算合成)では次のように少し残念な読み難い可視化となります。

そこで、白地図を元に、白い部分を綺麗に切り抜いて、独立して扱える用に工夫したアピアランスソースを「透過白地図」として用意・・・しようかと考えていたのですが、そもそも既にそういう事をするために「輝度クロマキー合成」という特殊な合成モードを実装していた事を思い出しました。

そこで、今回は「一定の高さに浮かぶ地域名と境界線の見やすい表示」を行う方法を例に、次のリリースで新たに追加される 500m 、 1500m 、 ... 、5000m までの 500m ごとの一定標高の立体化ソース群と、単純に背景を入れたい場合などの用途にも使える「白無地」、「黒無地」のアピアランスソースを使った応用方法として紹介したいと思います。

「輝度クロマキー合成」機能、名前は少し難しい機能の印象をもたれるかもしれませんが、実はそれほど難しい機能ではなくコツを覚えて頂ければ簡単で応用の利くGONDWANAの便利な機能の1つです。では、早速、具体的な使い方の例を紹介します。

1. 「輝度クロマキー合成」を使う基本のレイヤーとソースの構成を準備

先ず、「G3.Experimental: 500m」などの固定標高レイヤーに「白地図」を「標準合成」したレイヤーを上に、その下にもう1つ新たなレイヤーで「シームレス標高サービス」に「地理院標高タイルによる段彩図」や「全国ランドサットモザイク画像」など、白地図の地名と境界を加えたい、3Dで見たいお好みのレイヤーを作ります。

2.a. 「輝度クロマキー合成」を使い白文字、白線を空中に浮かせて表示する応用

ここで、今回は"3Dで見たいお好みのレイヤー"が暗めの色なので、上のレイヤーのアピアランスソースの「白地図」の上に「白無地」を置いて「輝度クロマキー合成」に設定し、パラメーターを 0.000 にします。

地形も地名も(ほかに境界線も)たいへん見やすくなりました。

「輝度クロマキー合成」は「下のレイヤーの"輝度"(≃白っぽさ)を不透明度として選択したソースを切り抜いて合成する」機能です。今回は「輝度クロマキー合成」のソースの下の「白地図」が輝度を判断する対象のソース、「輝度クロマキー合成」のソース「白無地」が判断された輝度を不透明度にして切り抜かれる対象のソースです。

さて、ここで「輝度」を「不透明度」としてそのまま採用すると、「白地図」は「輝度の高い(≃白っぽい)」背景部分が「不透明」に残り、「輝度の低い(≃黒っぽい)」前景部分が「透明」になり打ち抜かれる事になります。今回の用途としては「逆」にしたいですね。つまり、「白地図」の「輝度の高い」背景部分を「透明」に打ち抜いて、「輝度の低い」前景部分を「白無地」で残したいわけです。

そこで、パラメーターを「0.000」にします。他の合成方法の場合、このパラメーターは「合成度(≃高いほどそのソースを不透明に合成、低いほどそのソースを透明に合成)」ですが、「輝度クロマキー合成」の場合はこの大1パラメーターは「打ち抜きたい輝度の中心値」です。(マニュアルやGUIの整備が追いついておらず現在はこれがわかりにくい点である事は将来改善したいと考えています。)

つまり、「輝度クロマキー合成」のパラメーターは「1.000」ならば「輝度の高い(≃白っぽい)」部分を不透明にして残して打ち抜き、「0.000」ならば「輝度の低い(≃黒っぽい)」部分を不透明にして残して打ち抜きます。もちろん、それ以外の中間的な値の輝度を中心にすることも出来ますが、よほど特殊な事がなければ一般的には「1.000」で「黒抜き」、「0.000」で「白抜き」として使う事が殆どになるでしょう。

2.b. 「輝度クロマキー合成」を使い黒文字、黒線を空中に浮かせて表示する応用

さて、それでは次のようなアピアランスソースの場合にはどうしたらよいでしょう?「全国ランドサットモザイク画像」をアピアランスソースにしている場合の例です。

ここに先ほどと同様に「白地図」に「白無地」を「クロマキー合成」しても次のようにまったく読み取れません。まだ地形側に直接「白地図」を「乗算合成」したものの方が読める悲しい絵になってしまいます。

このように先ほどの暗めのアピアランスソースの例とは逆に明るめのアピアランスソースに対しては、「白地図」の上に「黒無地」を「クロマキー合成」で重ねます。

黒い文字が読みやすくなりました。(3D地形上にも黒い文字、今回紹介する手法でもる黒い文字を両方重ねてしまうと"読めない"ため、3D地形上の白地図の乗算合成は可視化から外しました。)

以上が「輝度クロマキー合成」と「固定標高ソース」群と「白無地と黒無地」を応用したGONDWANAでの簡単な応用方法の例です。どう使うのかマニュアルも不整備な状況ではなかなかわかりにくいかもしれない「輝度クロマキー合成」ですが、わかってしまえば簡単、グレースケールのソースから一部の輝度の値だけを抜き出す、単純には「黒抜き」や「白抜き」を任意の地図に対して簡単にGPU処理で高速に行うための機能です。

今回は「輝度クロマキー合成」について「白地図」を例に扱いました。この他にも応用例としてGONDWANAのソース g3_altitude_contour.lua を参考にLUAスクリプトレベルで標高に応じたグレイスケールのアピアランスソースを作り、「輝度クロマキー合成」で特定の標高のみ特定のアピアランスソースを表示する事も可能です。ぜひお試し下さい。

なお、地名や境界については、近い将来により扱いやすいベクターベースのシステムが整うまでにはまだもう少しお時間を頂きたい開発状況につき、当面はこの手法で地名と境界の表示をお試し頂けるよう、ちょっとした実装を行ってみた次第です。