先日は、
配布ワールドを作る場合(6) 【 マインクラフト統合版1.16.100 】
にて、/clonelコマンドについて紹介しました。
構造物は、
のような感じで、のように配列と鏡像で構成されている訳ですが、等差数列のような推移をしているパターンが存在します。その中には、
のような推移も存在するわけですが、螺旋階段や円柱形の塔の壁面に用意された螺旋階段などがこうした構造になります。これは、回転する角度と高さの推移と言う6DoFによる推移になります。垂直、水平、奥行きのシフトは3DoFになりますが、構造物がどの軸に対してどう動いているのか?で条件が変わってきます。
グ ローバル座標とローカル座標
マイクラでコマンドを使う場合、移動や建築をする場合、座標の指定を行います。この 【 座標 】 の概念は、高校の数学だとグラフで何度も見かけると思いますが、グラフィックでは常に存在するものになります。ラスターグラフィックの画素の座標もそうですが、ベクターグラフィックの頂点座標などもそれになります。
この座標を基準にオブジェクトの位置を指定している訳ですが、3DCGでは、 【 グローバル座標 】 と 【 ローカル座標 】 という概念が存在します。
■ グローバル座標
グローバル座標はワールド座標や絶対座標とも言いますが、これは、 【 3D空間の原点から見た場合の座標 】 になります。つまり、その世界において原点からどれだけ離れた位置にその座標が存在するのか?を示したものになります。
これは、数学や物理の一変数関数のグラフがそう言った物になりますから、中学校の数学や理科で登場するX/Y座標で構築されたグラフと考え方は同じです。このグラフは、原点からどの程度の距離があるのか?を示したものになりますが、X=1,Y=1と言う座標があったとします。この場合、この1と言う数値は 【 原点からの距離 】 になるので、空間上の原点を基準とした物になります。
■ ローカル座標
これは、相対座標とも呼ばれますが、これはオブジェクトが持ち合わせている座標になります。3DCGで任意のオブジェクトを作った場合、このオブジェクトの頂点座標を移動させる場合、 【 元の位置からの移動 】 になります。つまり、初期値が形状を構成している頂点座標になるので、この座標を基準とした使った方が都合がいいので、前述のグローバル座標を使うのではなく、 【 オブジェクト自体に座標を持たせてそれを扱う 】 事になります。
これは簡単なゲームを作る場合でもローカル座標を使った方が都合がいいので、そうなりますが、例えば、スプライトの重心を出しておいて、その表をスプライト1とスプライト2に用意したとします。この時に、オブジェクト同士の距離でスプライトのコントロールをする場合、重心との距離を計算することで等間隔や任意の距離を条件に織り込むことができます。また、回転をする場合もグローバル座標でスプライトの位置を割り出すよりも、ローカル座標で制御したほうが扱いやすいので、オブジェクトの管理はローカル座標で行います。
このように、グラフィックにはグローバル座標とローカル座標が存在しますが、/tpコマンドや先日紹介した/fillコマンドなどでも、座標指定時にグローバル座標とローカル座標を用います。
■ グローバル座標
ワールドの座標(座標表示をした時に表示されている数値)を
用いて指定をする方法
/tp、/fill、/clone、/structureなどのコマンドを用いて座標を指
定した場合、マップ上の座標がそのまま対象になります。
コマンド入力時には、座標の数値をそのまま入力します。
■ ロ-カル座標
ワールドの座標(座標表示をした時に表示されている数値)を
プレイヤーからどれだけ離れているかを指定する時に使用し
ます。
/tp、/fill、/clone、/structureなどのコマンドを用いて座標を指
定した場合、プレイヤーからの距離が対象となります。
コマンド入力時には、
【 ~ チルダ 】 の後にプレイヤーからのブロック数を入力
します。
選 択範囲を複製する (Cloneコマンド)
Cloneコマンドは、オブジェクトをそのまま範囲選択をして複製する事が出来るコマンドになりますが、JAVA EDITONだとマシンスペックを挙げておくと、範囲の上限を撤廃してCloneが出来るMODもあるようなので、統合版とは異なり、広範囲での指定が可能になります。
とは言っても、 【 複製 】 なので
【 /Cloneコマンドの範囲以上の物もを複製する場合 】
しか使いませんが、建築だとパーツを選択してそれを複製していくような流れになります。
この場合、設計図の段階で、座標を決めておいて、それを構成するパーツを用意しておいて、それを順番にコマンドで実行するとその形になるのですが、同じオブジェクトを複製する時に使います。
コマンドの仕様ですが、 【 最小値と最大値を指定する 】 ようになっています。これは、プログラミング言語でも全く同じなんですが、矩形の指定をする場合の座標指定も同様の指定方法になっています。これはCANVAS機能を持っているGUIの使えるプログラミング言語もそうですが、前の世紀の8bitパソコンに実装されてたBASICインタプリタでの矩形の指定をする場合も同様の設定になります。
その為、マイクラも
【 座標 (グローバル座標とローカル座標) 】
を用いた場合、この仕様に基づいて指定する事になります。
また、コーディングでデジタル処理をするとしても 【 マイナス方向に延びる物の差を算出する場合には、絶対値を求める必要がある 】
ので、処理を早くしようと思うと通常の加算処理で対応できるような数列の使い方(増加を基準とした物)を用いる事になります。また、こうした処理が、通常のプログラミング言語の矩形の指定時に行えるものなので、それに合わせてあるような気もします。
これを反転させる場合には、座標を反転すればいいのですが、簡素な処理で対応する仕組みを実装しておけば、数的処理はコーディングで行えるので、ベースとなる部分は簡素な仕様の物が実装されています。その為、
■ /fillコマンド
■ /cloneコマンド
のように、 【 範囲指定 】 が発生する場合には、この仕様に準じて指定する事になります。
とりあえず、座標の推移については、
のようになっていますから、この軸の向きを踏まえて座標を指定していきます。基本的に、マイクラでは、 【 X軸 、 Y軸 、 Z軸 】 の順に指定する事になっているのですが、これは動画などを撮る場合のファインダーから見た上下左右なので、平面のX/Y軸は垂直に立った平面になります。その為、Y-UPの座標になります。
座標については、以前、
で触れていますが、
のようになっています。
座 座標を調べる
座標を調べる方法は、各エディションで異なるのですが、JavaEditionの場合、デバッグモードがあるので、 【 F3 】 キーでマシンスペックからJAVAのバージョンから、使用しているMODまで確認できるわけですが、今居るバイオームや座標や明るさまで確認できます。当然、座標も表示されますが、統合版の場合だと、オプションで座標表示に切り替える必要があるので、ゲームの設定で座標の表示をすることになります。クリエイティブだとコマンドを使えば表示と非表示ができますが、表示にした場合、左上に座標が表示されます。ちなみに、旧コンソール版だと、地図を開くと座標が表示されていましたが、現在は、統合版とJAVA EDITIONのみなので、旧ハードのマイクラをプレイする以外だと地図で座標を見るという状態にはなりません。
座標をオンにすると、
のようになりますが、この状態で、前後左右に歩いて座標軸の向きを確認します。とりあえず、この状態で見た場合に、右斜め前で座標が増えていかないといけないので、
【 左と後ろに行くと数値が減る 】
ような向きを探す事になります。前後と言うのはわかりにくいかもしれませんが、算数の数列は右に行くほど数字が増え、左に行くほど数値が減ります。考え方は、この数列と同じなので、左に向かった時に数値が小さくなる状態だと、向きはあっています。また、この時に、自分の前方向がプラスで、後ろ方向がマイナスと言う座標の構造になっていますから、この条件を満たす向きに立って座標を指定する事になります。
の位置を基準として、数列のように左右に移動してみると、
のように右に行くとX軸の数値が増え、左に行くと減少します。
その為、横の軸についてはこの向きであっていることになります。では、奥行き方向の軸を確認してみると、
のように前に進むと増加して、後ろに進むと減少します。
そして、高さは確認するまでもなく、低いほうがマイナスで高いほうがプラスですから、基準点はこのオレンジのコンプリートパウダーを置いた位置になります。この状態で、
のように対角の位置を指定する事になりますから、この構造物を福世宇する場合には、
の赤いコンクリートパウダーの場所を指定する事になります。
この場合、コピー元もコピー先も
のように矢印の向きがプラスになっている必要がありますから、座標の向きを合わせる必要があります。
複 製を行う
複製を行う場合には、座標を調べる事になりますが、形状をそのまま余白なしにコピーをする場合、先程の二点の座標を記録しておく必要があります。
■ 始点の座標
始点の座標ですが、ブロックが内側に入っているので、真横か手前の座標を表示して、そこからブロックの向きに+1します。画像では、ブロックの手前ですから、Z軸が-1の場所で座標を表示しているので、座標を Z+1 の数値にします。その為、始点の座標は、 (-373、4,107) になります。
終点の座標はブロックの上で調べる事になりますから、
■ 終点の座標
のようになりますが、Y軸が1多い状態で計測しているので、Y-1を行います。すると、この終点の座標は (-383、24,117) になります。
形状のサイズは、各座標の差で求めるk十ができますから、この建造物は、10x20x10のサイズである事が確認できます。
462
そして、今回は、
の座標のひとつ前に配置する事にします。/cloneコマンドは、
/clone 始点の座標 終点の座標 移動先の座標
になります。/を入力するとコマンドが出る(コントローラーの場合は、ハットの右側)ので、
のように元の形状の座標を入力すると、画面内に~と数値が出ています。この数値は、カーソルを当てたブロックの場所になるので、これを基準にグローバル座標を指定します。
のように数値が出るのでこれを元に数値を調整します。今回は、ブロックの高さに合わせているので、1段低い場所にコピーされています。
コマンドを入力すると、
のようなフィルター関連の物が表記されるのですが、複製時に複製先に何かがある場合にどう言った処理をするのか?をこのフィルターで指定します。
今回はフィルターは使わないのでそのまま実行しますが、コマンドを実行すると、
のようになり、埋まった状態になります。複製もとはプレイヤーの位置の近くだとローカル座標指定が出来るので、
のようなコマンドの入力もできますが、これを行うと、
のように目の前に複製できます。
のように結構な数のブロックを一瞬で別の場所に複製できるので、向きが決まった状態で範囲指定をして複製するだけだと、/cloneコマンドを使うとコマンドだけでモジュールの量産が行えます。
ス トラクチャーブロック
マイクラでは結構前からストラクチャーブロックが存在していますが、統合版は独自の拡張が行われています。その為、マイクラで作った建物(エンティティは消えるので、ピストンヘッドやチェストはなくなります。)を3Dオブジェクトとして書き出す事ができます。
ストラクチャブロックはサバイバルでは入手不能な物なので、クリエイティブで建築を行う時に使用するものになりますが、
/give @p Sctucture_block
で得ることができます。それを用いると、
■ ストラクチャーブロックと連携
のようにペイント3D読み込んで使えます。ペイント3Dでは、画像やアニメーションも出力できるので、動きを入れて動画として書き出す事ができます。出力したものをそのままアップしたのが、
■ 水流エレベーター
になりますが、アイテム仕分け機と水流エレベーターを組み合わせたものになりますが、チェストが消えています。
また、ペイント3DはFBXでのエクスポートに対応しているので、任意の3Dツールやゲームエンジンでも使用できます。
その為、FBXで書き出して、Blenderで読み込みEeveeでレンダリングすることもできます。
■ Eeveeでレンダリングした物
これはWINDOWS 10版限定の機能になりますが、こう言った処理ができます。
このストラクチャーブロックですが、/cloneコマンドの拡張版で、向きの変更を行う事ができます。ストラクチャブロックについては、
■ マイクラBE【1.12.0】 (クリエイティブ) : ストラクチャーブロックと花火の打ち上げ
■ マインクラフト : コマンドと座標 【 クリエイティブ@建築&コマンドなど 】
■ マインクラフト : 先日作った物のこと 【 クリエイティブ@建築&コマンドなど 】
■ 配布ワールドを作る場合(3) 【 マインクラフト統合版1.16.40 】
にて機能について紹介していますが、このブロックでは、
ストレージ内にデータとして形状を保存できる
と言う特殊な仕様になっています。/coloneコマンドや/fillコマンドの場合、ブロックIDや座標データの集積のような物はメモリーのような揮発性のある一時記憶領域に保存されて処理が行われるわけですが、このブロックは、 【 不揮発性のストレージに記録できる 】 仕様になっています。その為、SSDやHDDなどにデータを保存する事ができ、セーブとロードを行う事ができます。
外部ファイルからのオブジェクトのロードの場合、ビヘイビアパックを作る必要がありますが、同一ワールド内だと、呼び出しが可能なので、見えない場所にオブジェクトを配置しておいて、指定範囲に配置して使うことができます。
ス トラクチャーブロック
ストラクチャーブロックを得る場合/giveコマンドを使います。ストラクチャーブロックの前に面白いブロックがあるので紹介しようかなと思います。
配布ワールドでは、コマンドブロックをトロッコの似せる事が出来るので、コマンドの効果をトロッコで移動させながら継続させることが出来るのですが、これも/giveコマンドで入手できます。
ストラクチャーブロックですが、これを使う場合、範囲指定外を指定するストラクチャーボイドと範囲を指定するストラクチャーブロックがあります。
ス トラクチャーブロックを使う
ストラクチャーブロックを配置すると、
のように配置すると枠ができますが、ブロックがある範囲が枠で示されますが、この範囲内で関係ない物の場所に範囲内にストラクチャーボイドを配置して
のように指定して保存します。 【 保存 】 の場合、
のように名称を指定して、
のようにメモリーとHDDを保存先として指定できます。ワールド内で使う場合だと、メモリーを選択します。
これで保存すると、
のように 【 構成を保存しました 】 と出ますから、保存後は、指定した名称で呼び出す事ができます。
通常は、何もないところにオブジェクトを追加するのですが、
のようにブロックがある場所に追加する事ができます。まず、
の様にストラクチャーブロックを配置して呼び出す対象を指定します。そして、ロードを押すと、
のようにシード値が指定され、実行した時の状態が表示されます。ワールドに戻ると、
のように対象の部分のみブロックが入れ替わっています。このロードでは
のように指定した名称でブロックを追加できますが、この追加した物をロードから保存に変えて
のように名称を付けて保存をして、別の場所にロードします。
のようにロードの指定で名称を指定して、完全性を変更します。すると、
のように欠損した物を作る事ができます。
のように完全性とシード値で形状が変わるので、
のように一つの形状から、廃墟のような物を作る事もできます。
こうした、多機能なブロックになっていますが、1.16.100からは、このストラクチャーブロックの機能がコマンドで制御できるようになりました。
S tructureコマンド
/suructureコマンドは、ストラクチャーブロックの機能をコマンドで指定できるものになっています。その為、saveとloadの二つの指定が存在します。
■ オブジェクトの保存を行う
オブジェクトの保存はsaveで指定しますが、
の項目をコマンドで指定します。保存をする場合だと、saveを使うことになりますが、
/structure save "ストラクチャー名" 始点 終点 エンティティ 保存場所 ブロックの保存
で指定します。前述の 【 ブロックの除去 】 までの項目をここまでの設定で指定できます。
■ オブジェクトの読み込みを行う
オブジェクトの読み込みを行う場合、loadを使用しますが、
の項目をコマンドで指定する事になります。
/structure save "ストラクチャー名" 始点
で呼び出せます。その後、回転角度を指定できます。そして、反転も使用できます。
■ アニメーションを行う
Structureコマンドでの目玉要素はやはり、 【 アニメーション 】 です。
1.16.100からこのコマンドでビルドアニメーションが実装されたので、建造物がブロック単位や層の単位で組み上がるアニメーションを表示できるようになりました。
BlenderではBuildを使うと
■ Buildを使った物
のような物を作れますが、完成品まで形状が組み上がっていくような物が/structureコマンドにも実装されています。
ロードのオプションですが、構造物が組み上がるアニメーションが存在しており、
■ ブロック単位で構築
block_by_block
■ 層単位で構築
layer_by_layer
が使用できます。そして、そのオプションの後に秒数を指定することで、組み上がるアニメーションを実行できます。
コ マンドを使う
とりあえず、
のような建物を作ってコピーする場合、/structureコマンドを使うと
のようにsaveとloadの選択が可能になりますが、保存の中には簡素化したものがあり、メモリーかHDDにするのか?の選択までで登録できる記述方法もあります。この場合、対角を選択する事になるので、
のように始点と終点を決めて、終点の角の部分は一段下の座標を取得する事になります。
この状態で始点と終点を選択してセーブを行います。
のようにsaveを選択して、名称を指定します。
この場合、変数が文字列なのでプログラミング言語と同様に
【 " : ダブルクォーテーション 】
で囲みます。その後、座標を指定して、記録場所にメモリーを指定します。これで、指定したストラクチャー名で呼び出せるようになります。今回は、 【 house1 】 という名称を付けてみました。
折角、ストラクチャーブロックではできない処理があるので、アニメ―ション機能を使うことにします。
のように 【 座標 】 【 回転角 】 【 反転 】 の指定を行った後に、アニメーションの指定をします。今回は、層単位で形状が生成される 【 layer_by_layer 】 を指定してみました。指定の後に数値を入れる事になりますが、座標を指定して実行すると、
のように組み上がっていきます。ただし、空中に単体で配置できないブロックの場合、
のように崩落するので、ランタンの周辺を看板で囲んだような建築をしている場合、ランタンを支える物は同一の層にはありませんから、上から吊るすようなデザインにすると、こう言った問題が発生します。これと同様にドア崩落していました。
このコマンドは、/cloneコマンドのようにコマンドだけで空中に指定した物を配置できるので、
のように座標指定をするだけで、指定したストラクチャー名のブロックを配置する事ができます。
M inecraftのプレイ環境
■ Core i5 650
■ H55M-Pro
■ DDR 1333 2GBx2+1GBx2(DUAL CH)
■ Quadro K620(PCI Express x16 【GEN2動作】)
■ SATA HDD
■ WINDOWS 10 x64 (20H2)
■ MINECRAFT BE 1.16.100
【 使用したソフト 】
■ GIMP 2.10.12