アドオン詳細解説 - モデル(ジオメトリ)
目次 (折りたたみ可)
機能
エンティティやブロックのモデル(形)を作るためのものとして、ジオメトリというものが用意されています。
バニラのエンティティに関しては変更ができますが、バニラのブロックのモデル変更はできません。
ファイルの場所
リソースパックのmodelsフォルダにファイルを置きます。
リソース
┣ manifest.json
┣ pack_icon.png
┗ models
┣entity
┃ ┗〇〇.json
┗blocks
┗〇〇.json
その中でさらにエンティティはentityフォルダ、ブロックはblocksフォルダに分けることができます。
基本の構造
赤枠の部分を増やしてボーンを増やします。
{
"format_version": "1.16.0",
"minecraft:geometry": [
{
"description": {
"identifier": "geometry.cube",
"visible_bounds_width": 1.0,
"visible_bounds_height": 1.0,
"visible_bounds_offset": [ 0.0, 0.0, 0.0 ],
"texture_width": 64,
"texture_height": 32
},
"bones": [
{
"name": "body",
"pivot": [ 0.0, 8.0, 0.0 ],
"rotation": [ 0.0, 0.0, 0.0 ],
"cubes": [
{
"origin": [ -8.0, 0.0, -8.0 ],
"size": [ 16.0, 16.0, 16.0 ],
"pivot": [ 0.0, 8.0, 0.0 ],
"rotation": [ 0.0, 0.0, 0.0 ],
"uv": [ 0.0, 0.0 ]
}
]
}
]
}
]
}
identifier
ジオメトリのID。
texture_width, texture_height
texture_widthがこのモデルに貼るテクスチャの横幅、 texture_heightが縦幅。
visible_bounds_width, visible_bounds_height
3Dゲームでは当たり前の、視界から外れたらモデルが非表示になるやつです。
visible_bounds_widthが横幅、visible_bounds_heightが縦幅の長方形で指定します。
たとえば、横に長いモブを作ったときにvisible_bounds_widthが短いと、
そのモブに近づいて横を見ると目の前でモデルがパッと消えることがあります。
ボーン
ボーンとは具体的に「関節を含まないキューブのグループ」のことを指します。 よって、あとでアニメーションで動かす部分を考慮してキューブのグループを決める必要があります。
たとえば、腕をモデリングする際に

name
ボーンの名前。アルファベット、アンダーバー( _ )、数字(頭文字以外)で決めます。アニメーションはこの名前で紐づけます。
pivot
回転の中心。たとえば腕なら、肩の位置にピボットを持ってこないと明らかに変になります。
rotation
それぞれx, y, z軸を軸とした回転。

キューブ
キューブはそのまま、モデルに含まれる一つひとつの直方体すべてです。0個以上のキューブが複数集まってボーンを形成することができます。

origin, size
originを基準点として、そこからsizeの値の辺の長さをもった直方体を構成します。

pivot
回転の中心。使い方はボーンのpivotと同じ。
rotation
それぞれx, y, z軸を軸とした回転。
uv
テクスチャを切り取る基準座標。左上が原点で、右がu+、下がv+。

面ごとにUVを指定する
キューブに対して、UVを面ごとに指定できます。
{
"origin": [ -8.0, 0.0, -8.0 ],
"size": [ 16.0, 16.0, 16.0 ],
"pivot": [ 0.0, 8.0, 0.0 ],
"uv": {
"north": { // 北
"uv": [ 32.0, 16.0 ], "uv_size": [ 16.0, 16.0 ]
},
"south": { // 南
"uv": [ 16.0, 16.0 ], "uv_size": [ 16.0, 16.0 ]
},
"east": { // 東
"uv": [ 0.0, 16.0 ], "uv_size": [ 16.0, 16.0 ]
},
"west": { // 西
"uv": [ 48.0, 16.0 ], "uv_size": [ 16.0, 16.0 ]
},
"up": { // 上
"uv": [ 16.0, 0.0 ], "uv_size": [ 16.0, 16.0 ]
},
"down": { // 下
"uv": [ 32.0, 0.0 ], "uv_size": [ 16.0, 16.0 ]
}
}
}
uv_size
切り取る長方形の大きさ(形)。
Blockbenchを使う
難しいモデルを組み立てるとき、モデルの完成図を見ずにJSONとにらめっこするだけではかなりキビシイときがあります。
そういうときには便利なツール「

Blockbench
使い方はまたいつか書きます。
メッシュでキューブを構成する

本来、モデルはいくつかの直方体で構成されますが、エンティティに限りポリゴンメッシュでモデリングできます。 ポリゴンメッシュは、直方体はもちろん、それ以外の立体を構成できます。
{
"name": "body",
"pivot": [ 0, 0, 0 ],
"poly_mesh": {
"normalized_uvs": true,
"positions": [
[ -8, 0, 8 ],
[ 8, 0, 8 ],
[ 8, 0, -8 ],
[ -8, 0, -8 ],
[ 0, 16, 0 ]
],
"normals": [
[ 0.8944, 0.4472, 0 ],
[ 0, 0.4472, 0.8944 ],
[ 0, -1, 0 ],
[ -0.8944, 0.4472, 0 ],
[ 0, 0.4472, -0.8944 ]
],
"uvs": [
[ 0.0, 0.0 ],
[ 1.0, 0.0 ],
[ 0.0, 1.0 ],
[ 1.0, 1.0 ],
[ 0.5, 1.0 ]
],
"polys": [
[ [ 0, 0, 1 ], [ 4, 0, 4 ], [ 1, 0, 0 ], [ 0, 0, 1 ] ],
[ [ 1, 1, 1 ], [ 4, 1, 4 ], [ 2, 1, 0 ], [ 1, 1, 1 ] ],
[ [ 0, 2, 0 ], [ 1, 2, 1 ], [ 2, 2, 3 ], [ 3, 2, 2 ] ],
[ [ 2, 3, 1 ], [ 4, 3, 4 ], [ 3, 3, 0 ], [ 2, 3, 1 ] ],
[ [ 3, 4, 1 ], [ 4, 4, 4 ], [ 0, 4, 0 ], [ 3, 4, 1 ] ]
]
}
}
positions
頂点の座標。普通のキューブのときと数がズレていたりはしません。
normals
法線。1つの面に対して1つ決め、その面のどっちが表かを決める。その面に垂直な、裏から表を向く3次元ベクトル。
uvs
テクスチャを切り取る多角形の頂点。左下が原点で、右にu、上にv、0.0~1.0の割合で位置を決める。
polys
多角形(面)。4つの値で頂点を指定する。それぞれの値はpositions、normals、uvsのインデックスを指定する。

ツールを使って作成
各種ツールを利用してある程度簡単に作ることができます。
モデリング
Blockbenchを使ってできます。しかし、通常のモデリングとは最初の画面から違うので説明します。

新規作成のこの画面では「Bedrock Entity」は選ばずに、1番上の「Generic Model」(画像の赤枠部分)を選択し 「→Create New Model」を押して編集画面に移動します。
直後に現れるウィンドウでは通常のモデリングと同じ、ファイル名やモデルのIDを決めます。

画面右にあるダイヤモンドのようなアイコンを押すと立体が追加できます。 追加するときに、図形とその図形に関するいくつかの数値を指定します。図形と数値の意味は以下の通りです:
図形 | 数値1 | 数値2 | 数値3 | 数値4 |
---|---|---|---|---|
Cuboid 直方体 |
Diameter 縦横の長さ(共通) |
Height 高さ |
||
Pyramid ピラミッド形(正四角錐) |
Diameter 縦横の長さ(共通) |
Height 高さ |
||
Plane 平面(正方形) |
Diameter 一辺の長さ |
|||
Circle 円(正多角形) |
Diameter 一辺の長さ |
Sides 辺の数 |
||
Cylinder 円柱(正多角柱) |
Diameter 多角形の一辺の長さ |
Height 高さ |
Sides 多角形の辺の数 |
|
Tube トイレットペーパー形正多角柱 |
Diameter 多角形の一辺の長さ |
Height 高さ |
Sides 多角形の辺の数 |
Thickness 厚さ |
Cone 円錐(正多角錐) |
Diameter 多角形の一辺の長さ |
Height 高さ |
Sides 多角形の辺の数 |
|
Sphere 球 |
Diameter 半径 |
Sides 赤道の辺の数 |
||
Torus トーラス(ドーナツ型) |
Diameter 半径 |
Sides 外周の辺の数 |
Thickness 幅 |
Minor Sides 断面の辺の数 |
円盤や球は、デフォルトだと尖ってしまいますが、Sidesを大きい数にすると円盤や球に見えるようになります(完全な曲線・曲面はできません)。

画面上部にある4つのアイコンを押すと、(ダイヤモンドのようなものから順に右へ)立体・面・辺・頂点を選択するようにモードが切り替わります。

エクスポートするときは左上のタブ「File」から「Export」「Export OBJ Model」を選択します。
そして実際にダウンロードできるのは.zipファイルなので、解凍して中にある.objファイルを取り出します。
Blenderでもできる
Blenderが使えて、そちらのほうが慣れているならばBlenderで編集してOBJファイルをエクスポートしてもOKです。
OBJファイルをJSONに変換
エリンギ(@McbeEringi)さんのツールを使います。

McbeEringi poly_mesh
mcbe model json converter
- 上部にある、ファイルを選択するところで作ったOBJファイルを選択します。
- 「settings」項目の「geometry.」の隣の枠にジオメトリのIDを入れます。
- 「mcbe geometry」項目の「file」を選択するとファイルがダウンロードされるように、「text」を選択すると下のテキストボックスに結果が出力されて、コピペすることになります。
- 他は何もいじらずに下の「Run」ボタンを押すと、選んだモードによってそれぞれダウンロードされるか結果がテキストで出力されます。