Uploaded:2023/01/01 Latest-Update:2023/01/01

アドオン作成 - モデル(ジオメトリ)

目次は右上の「≡」から!
機能

エンティティやブロックのモデル(形)を作るためのものとして、ジオメトリというものが用意されています。

バニラのエンティティに関しては変更ができますが、バニラのブロックのモデル変更はできません。

ファイルの場所

リソースパックの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": [ ~#r{ %%%%%%%% "name": "body", %%%%%%%% "pivot": [ 0.0, 8.0, 0.0 ], %%%%%%%% "rotation": [ 0.0, 0.0, 0.0 ], %%%%%%%% "cubes": [ %%%%%%%% ~#b{ %%%%%%%%%%%% "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 ] %%%%%%%%%%%%}b#~ %%%%%%%% ] %%%%%%%%}r#~ ] } ] }

● 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が短いと、 そのモブに近づいて横を見ると目の前でモデルがパッと消えることがあります。

ボーン

ボーンとは具体的に「関節を含まないキューブのグループ」のことを指します。 よって、あとでアニメーションで動かす部分を考慮してキューブのグループを決める必要があります。

たとえば、腕をモデリングする際に(ひじ)が曲がらなくてもいいなら 片腕で1つのボーンにしますが、曲げる必要があるならば片腕だけでも上半分と下半分で2つのボーンに分ける必要があります。

このボーンを増やすとき、JSONでは上記の赤枠部分を増やします。

● name

ボーンの名前。アルファベット、アンダーバー( _ )、数字(頭文字以外)で決めます。アニメーションはこの名前で紐づけます。

pivot(ピボット)

回転の中心。たとえば腕なら、肩の位置にピボットを持ってこないと明らかに変になります。

● rotation

それぞれx, y, z軸を軸とした回転。

キューブ

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

● origin, size

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

● pivot

回転の中心。使い方はボーンのpivotと同じ。

● rotation

それぞれx, y, z軸を軸とした回転。

● uv

テクスチャを切り取る基準座標。左上が原点で、右がu+、下がv+

面ごとにUVを指定する

キューブに対して、UVを面ごとに指定できます。

~#b{ "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 ] } } }b#~

● uv_size

切り取る長方形の大きさ(形)。

Blockbenchを使う

難しいモデルを組み立てるとき、モデルの完成図を見ずにJSONとにらめっこするだけではかなりキビシイときがあります。 そういうときには便利なツール「Blockbench(ブロックベンチ)」を使いましょう。

 → 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 obj2mcbe

©2023 Rinca Hayamine