【マイクラ】マップアートツールの色選びを試行錯誤した記録。ディザリングと彩釉テラコッタが向かなかった理由

【マイクラ】マップアートツールの色選びを試行錯誤した記録。ディザリングと彩釉テラコッタが向かなかった理由

どうも。ダムンです。

画像からマップアートやドット絵建築のコマンドを作るツールを公開していますが、色々と試行錯誤したので、その記録を少し綴っていきます。なお、作っていていちばん悩んだのが「画像の色を、どのブロックに置き換えるか」でした。

今回は、色選びの仕組みと、精度が上がりそうだと思って試したのに結局見送った2つの手法を紹介します。マップアートを自分で作る人にも、「なんで思った色にならないんだ」と困っている人にも、参考になる話だと思います。

忙しい人向けの要約です。

  • 色の置き換えは「見た目に近い色」を基準に決めている
  • ディザリング(中間色を混ぜて滑らかに見せる手法)は、写真だとノイズだらけになって見送り
  • 彩釉テラコッタは、模様が主張しすぎて広い面には不向きだった

画像の色をブロックに置き換える仕組み

マイクラのドット絵は、画像の1ピクセルを1ブロックに置き換えて作ります。つまり、画像の各ピクセルの色に対して、「使えるブロックの中でいちばん近い色のブロックはどれか」を決める作業になります。

この「近い」の測り方が意外と重要です。単純にRGBの数値の差を測ると、数値上は近くても、人間の目には全然違う色に見えることがあります。そこでこのツールでは、人間の目の感じ方に近くなるよう設計された色差の計算方式(CIEDE2000)を使っています。

そのほかの細かい部分も紹介します。

  • 半透明のピクセルは、白い背景に重ねた状態で色を判定します(透明な部分が白系ブロックになるのはこのためです)。
  • 各ブロックの代表色は、最初は手で入力していました。今は実際のテクスチャ画像の平均色を自動で計算して使っています。この変更で、白い羊毛のような白系ブロックがいちばん補正されました(手入力の #dfe3e4 が、実際の平均色では #eaeced でした)。目で見て決めた色は、思ったよりズレていたということです。

使えるブロックは、コンクリート、羊毛、テラコッタ、原木、コンクリートパウダー、建築ブロックなど、現在は130色ほどあります。

試したこと1: ディザリングで写真をきれいにしたい

ディザリングは、パレットにない中間色を、2色のブロックを細かく混ぜて再現する手法です。ゲームや古い画像形式ではよく使われていて、Floyd-Steinberg法という有名なやり方があります。ピクセルごとの色のズレを、隣のピクセルに少しずつ押し付けていく方式です。

これを入れれば、写真のグラデーションもマイクラで滑らかに再現できるのでは、と考えて試作しました。チェックボックスでON/OFFを切り替えられる形にして、建設車両の写真で比べてみました。

ディザリングONのほうに斑点ノイズが出ている
ディザリングONの方は...屋根が消えている!

結果は、ひどい悪化でした。

特に、影と空の境目のように中間色が多い部分に、ピンクや水色の派手な斑点が大量に出ました。ONにするほうが明らかに汚く見えます。

原因は、パレットの色数と偏りだと考えています。使えるブロックは130色ほどしかなく、しかも彩度の高い色に偏っています。ズレをうまく吸収できる中間色がないので、極端な色どうしの間を行き来しながら、誤差がどんどん溜まっていくわけです。

機能自体は正しく動いていましたが、実用上の価値を確認できなかったので、機能ごと削除しました。

試したこと2: 彩釉テラコッタで色数を増やしたい

色数を増やせば精度も上がるはず、というのは自然な発想です。彩釉テラコッタは16色ぶんのテクスチャがあったので、追加を試しました。

最初の症状: 暗い部分が黒くなる

16色を全部追加すると、山の影のような暗い部分が軒並み真っ黒になりました。黒の彩釉テラコッタの平均色がかなり暗く、既存の暗色ブロックより「近い」と判定されて多用されたのだと考えました。そこで、黒や灰色、白、茶色を除いて鮮やかな11色に絞りましたが、黒くなる症状は直りませんでした。

本当の原因は別のところにあった

調べ直した結果、色の選び方とは関係ない原因が見つかりました。ツールが内部で使っているブロック画像のデータを、新しいブロックの分だけ更新し忘れていたのです。新しいブロックの絵が空っぽの状態になり、そこにページの背景色(暗い色)が透けて、黒く見えていました。

色の判定のせいだと決めつけて、しばらく見当違いの調整を続けていたことになります。ここは反省点です。

更新し直したら今度は模様が問題になった

データを直したら黒い症状は消えましたが、今度は別の問題が出ました。空や水、草地のような、本来は「ひとつの色」に見えてほしい広い面が、彩釉テラコッタ特有の凝った模様(顔のような柄や渦巻き)で埋め尽くされて、壁紙みたいにうるさい見た目になったのです。

これは色の精度の問題ではありません。彩釉テラコッタというブロックが、広い面を塗りつぶす用途に構造的に向いていないということです。色をどれだけ調整しても、模様は消えません。追加は見送りました。

空や草地が彩釉テラコッタの模様で埋まっている様子
空や草地が彩釉テラコッタの模様で埋まっている様子

同じ理由で、模様が目立つブロックは基本的に対象外にしています。鉱石ブロック(斑点模様)やサンゴ、フロッグライトなども見送りました。「色が近い」ことと「広い面に使える」ことは別の話でした。

痛恨のミス"あの"ブロックを忘れていた

入れ忘れたブロックがないか見直していたところ・・・、板材(planks)系のブロックを見逃していました・・・!
入れ忘れた板材たち
なぜ前回入れ忘れたのか・・・、コレガワカラナイ。
なんか足りないよなぁ~、とは思っていましたが、こんな重要かつ使用頻度の高いブロックを忘れていたとは。というわけで追加しました。

逆に追加して良かったブロック

失敗ばかりではなく、追加して効果があったものもあります。実際のテクスチャから色を計算して、既存のパレットとの色の差が大きいブロックだけを選び直しました。

  • 泣く黒曜石: 紫がかった黒で、既存パレットとの色差が断トツでした。
  • 銅ブロックの4段階: 銅ブロック、露出した銅、風化した銅、酸化した銅。無垢のままだと時間で酸化が進んで色が変わるため、ブロックは錆止め済みのものを使っています。
  • ダイヤモンドブロックやエメラルドブロックなどの鉱物ブロック5種: 単体で色が独特で、模様もおとなしいためです。

一方、「磨かれた深層岩」や玄武岩、石炭ブロックのような黒〜濃い灰色のブロックは追加を見送りました。この色の範囲は既存のブロックがすでに細かく埋めているので、増やしても表現の幅が広がらなかったからです。色を増やすなら、まだ空いている色の隙間を狙わないと意味がない、という当たり前のことを確認できました。

自分でマップアートを作るときのコツ

ここまでの試行錯誤から、実践で使えそうなポイントをまとめます。

  • 写真より、色数の少ないイラストのほうが向いています。影と空の境界のような中間色の多い部分は、ブロック130色では再現しきれないためです。
  • 気になる色だけ、ブロックを手動で差し替えるのがおすすめです。ツールの「使用するブロックを編集する」で、自動で選ばれたブロックを変えられます。
  • 模様の強いブロックは、広い面ではなくワンポイントに使います。手作業で仕上げるなら、彩釉テラコッタは小さなアクセントとして使うと映えます。
  • ゲーム内の見え方は、設置場所の明るさや向きでも変わります。ブロックの色はあくまで基準として考えて、完成後に見え方を確認するのが確実です。

今回紹介した色選びの仕組みは、実際にマップアート・ドット絵建築の生成ツールで使っているものです。好きな画像を選ぶだけで、Java版・統合版どちらのコマンドも作れます。

というわけで、色選びの試行錯誤の記録でした。いかがでしたでしょうか。ツールを触るときの参考になれば幸いです。

お疲れさまでした。

コメント