新駒奈日誌

Minecraftの建築に関する情報をよろずに書いていく。

【Minecraft】 Axiomで色と親しくなる

Minecraftのワールド編集MOD「Axiom」の、色に関する機能に関してをまとめて解説します。AxiomのMODの解説は、過去にこちらで解説していますので、「Axiomって何?」って方はこちらをどうぞ。

komnazsk.hatenablog.jp

注意事項: 本記事は、Axiom Ver.5.0.1 (Minecraft Java Edition 1.21.X) 現在の状況について記載しています。バージョンによりUI等が変更される場合がありますので、注意してください。

ビルダーモードの色支援機能

今更ですが、Version 4.5.1 (2025年2月) から、ビルダーモード (クリエイティブモードを拡張する機能の方) で色に関する機能の追加がありました。

Axiomを導入した状態でクリエイティブインベントリを開くと、左側に2つのアイコンが見えると思います。

Colour Picker

色からブロックを取得したり、ブロックの色を取得したりすることができる機能です

  • 色が表示されている箇所を設定すると、近い色のブロックが右側に表示されます
  • 中央のスポイトのところに、インベントリからブロックを左クリックで置くと、そのブロックの色を取得できます
  • 右側に表示されるブロックの種類は、F / S / O / T と表示された箇所を設定することで制御することができます
記号 オプション 項目
F Full Cube ONにすると、完全な立方体のブロックのみ表示します (半ブロックや階段などが除外されます)
S Solid ONにすると、個体のブロックのみ表示します (水や粉雪などが除外されます)
O Opaque ONにすると、不透明のブロックのみ表示します (ガラスなどが除外されます)
T Same Texture ONにすると、すべての面が同じテクスチャのブロックのみ表示します (原木などが除外されます)

Gradient Helper

グラデーションの作成を支援します

  • Inputsのところにブロックを置くと、そのブロックの間を補間するようにグラデーションが生成できます
  • できたグラデーションをインベントリにそのままコピーすることもできます
  • できたグラデーションは、Builder Modeのグラデーションブラシ / ペインターに反映させることができます (4.8.0以降)
  • 作成するグラデーションで使うブロックは、Colour Pickerと同様 F / S / O / T の項目で制御することができます

以下は、作成したグラデーションをグラデーションペインターに反映させた例です。そのまますぐに塗って使えます。これでグラデーション作成もカンタンです。


上級者向け : Script Brush の色に関する追加 Function

Version 4.9.0以降 で、Script Brush等で使える新しいFunctionが追加されました。以前、本サイトでScript Brushに付いて解説しましたが、追加で色々おもしろいことができるようになっているようです。「Script Brushって何それ?」って方は以下をご覧ください。

komnazsk.hatenablog.jp

色に関する追加Function

以前解説したAxiomのFunctionに加えて、以下のFunctionが利用できるようになっています。

関数 説明
findClosestBlockToRGB(RGB triplet (integer), flags bitarray (integer), index) 引数で指定したRGB tripet (24ビットカラー値) に近いブロック情報を取得します。どのようなブロックを指定するか、引数 bitarray で指定することもできます。
getBlockRGB(Blockstate ID) 指定したブロックのRGB tripet (24ビットカラーの整数値)を取得します

findClosestBlockToRGBの引数flagsは、以下の値を足し算した値を設定します

説明
1 固体ブロックのみ
2 不透明ブロックのみ
4 立方体のブロックのみ
8 全面同じテクスチャのブロックのみ
16 鉱石ブロック不使用
32 採油テラコッタ不使用
64 ブロックエンティティ不使用

RGB24ビットカラー値は、いわゆるWebカラーと呼ばれる値です。赤・緑・青それぞれ256段階でひとつの色を表現した値です。RGBそれぞれ値が大きいほど明るく、小さいほど暗くなります。

カラーコード(色コード)とは?意味を分かりやすく解説 - IT用語辞典 e-Words

参考情報 : https://axiomdocs.moulberry.com/tools/painting/scriptbrush.html

実際に触ってみる

せっかくなので、AxiomのScript Brushで色々作ってみましょう。

まずは簡単な例。Minecraft内で一番青い色 (24ビット値 : 0x0000FF) のブロックを塗るブラシを作れます。

-- 一番青いブロックを塗るブラシ
block = findClosestBlockToRGB(0x0000FF, 0, 1)

return block

すると、一番青いブロックである、クダサンゴブロック (tube_coral_block) を塗ることができます。

  1. 少し難しい例を示します。以下は、「塗るたびに表面のブロックを少しずつ暗くするブラシ」です。
dark_value = $int(DarkValue, 20, 1, 100)$

-- R, G, Bの値を24ビットに変換する関数
function RGBToTriplet(r, g, b)
   return r*(256^2) + g*256 + b
end

-- 24ビットの値をR, G, Bの配列に変換する関数
function tripletToRGB(triplet)
  local r = math.floor( triplet/(256^2) )
  local g = math.floor( (triplet%(256^2))/256 )
  local b = triplet%256
  return {r, g, b}
end

-- 指定したRGB値をvalueだけ小さくする関数
function darkValue(src, value)
   if ((src - value) >= 0) then
    dst = src - value
  else
    dst = 0
  end
  return dst
end
-- ブロックを取得する
local block_type = getBlock(x, y, z)

-- 表面上にあるブロックかどうかを判定する
if not isSolid(block_type) or isSolid(getBlock(x, y+1, z)) then
   return nil
end

-- ブロックのR, G, B値を取得する
color_triplet = getBlockRGB(block_type)
color_vector = tripletToRGB(color_triplet)

-- RGBそれぞれ指定した値分だけ暗くする
dark_r = darkValue(color_vector[1], dark_value)
dark_g = darkValue(color_vector[2], dark_value)
dark_b = darkValue(color_vector[3], dark_value)
color_dark = RGBToTriplet(dark_r, dark_g, dark_b)

-- 15 = 固体, 不透明, 立方体のブロック, 全面同じ
block = findClosestBlockToRGB(color_dark, 15)

-- ブロックを塗る
return block

このブラシを重ね塗りすると、少しずつ色が暗くなっていくことがわかると思います。最終的に、真っ黒になっていきます。

このブラシを少し手を加えると、以下のように「補色を塗るブラシ」みたいなものも作ることができるようになります。遊んでみると面白いですので、色々試してみてください。