3D モデルエディタ Blockbench は、EyeDropper API を使用して、ユーザーがどこからでも色を選択できるようにしています。

EyeDropper API は、ユーザーがブラウザ ウィンドウの外側を含め、画面から色をサンプリングできるスポイトツールを作成するためのメカニズムを提供します。3D モデルエディタ Blockbench のコードベースでこの API がどのように使用されているかをご覧ください。

Jannis Petersen 氏
Jannis Petersen

はじめに

(この記事は動画でもご覧いただけます)。

Blockbench は、ピクセルアートのテクスチャを使用したローポリモデルに対応した、無料の最新のモデルエディタです。Minecraft をプレイしたことがある方は、Blockbench で作成されたアセットを見たことがあるかと思います。たとえば、Goat は、Caves and Cliffs アップデート、パート 1 で Minecraft に追加されました。GPL バージョン 3 ライセンスの Blockbench コードは GitHub のオープンソースです。

Blockbench でデザインされた Minecraft シープ。

Blockbench を試すには、web.blockbench.net に移動してアプリを起動します。PWA としてデスクトップにインストールし、スタンドアロン ウィンドウで起動できます。3D モデリングを初めて行う場合は、GitHub のソースコード検索を使用して入手できる多くのオープンソースの .bbmodel ファイル サンプルのいずれかから始めることができます。たとえば、次のスクリーンショットに示すトレーニング モデルを試してみましょう。

Blockbench でトレーニング モデルを編集する。

EyeDropper API

Blockbench には他の多くの機能の中でも、ペイント機能が用意されているため、列車にタグを付けることができるようになりました。現実世界ではこの操作を行わないでください。ご覧のとおり、タグ付けでは明るいオレンジを使用しています。

「トムが来た」のタグと電車のモデルにピースサインが書かれている。

これは実際のところ、EyeDropper API によって macOS Ventura 壁紙から直接抽出したオレンジ色です。次のスクリーンショットからわかるように、スポイト(アプリ ウィンドウの左側にあるオレンジ色の円)は、アプリケーションの外からデスクトップや開いている他のアプリに直接到達できます。

Blockbench アプリからデスクトップの背景画像から色を選択しているカラー選択ツール。

Blockbench はオープンソースであるため、開発者がどのように API を実装しているかを学ぶことができます。問題のコードは JannisX11/blockbench/blob/master/js/texturing/color.js にあります。Blockbench は Electron.js アプリとしても利用できます。コメントからわかるように、Electron の問題に関する特殊なケース処理があり、カラー選択ツールがウィンドウの外側で色を選択することはできません。ウェブ API(コード スニペットのハイライト表示された部分を参照)では、これは問題になりません。API の使用方法は簡単です。新しい EyeDropper インスタンスをインスタンス化し、その open() メソッドを呼び出します。このメソッドは、選択した色を表す sRGBHex 文字列を 16 進数の sRGB 形式で解決します。

new Action("pick_screen_color", {
  icon: "colorize",
  category: "color",
  condition: () => typeof EyeDropper == "function",
  click: async function () {
    if (Blockbench.platform == "win32") {
      // workaround for https://github.com/electron/electron/issues/27980
      ipcRenderer.send("request-color-picker", {
        sync: settings.sync_color.value,
      });
    } else if (typeof EyeDropper == "function") {
      let dropper = new EyeDropper();
      let { sRGBHex } = await dropper.open();
      ColorPanel.set(sRGBHex);
    }
  },
});

まとめ

カラー選択ツールは、Blockbench のように、小さいながらも重要なクリエイティブ ソフトウェアです。多くの場合、望ましい色はアプリ ウィンドウの一部ではなく、外部のどこか、おそらく別の画面などで見つかります。このような場合に色を選択できないカラー選択ツールは、ほとんど役に立たない可能性があります。EyeDropper API は、このようなユースケースのために作成されており、2021 年 11 月に実装されて以来、Blockbench でうまく機能しています。Blockbench で色を選んでプレイする方なら、ぜひお試しください。