新駒奈日誌

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

【Minecraft】3Dリソースパック作成のためのmodels jsonファイル記述

2018/05/01 ver 1.2 ・・・ 情報加筆
2017/06/18 ver 1.1 ・・・ 一部リンクを修正
2016/09/23 ver 1.0 ・・・ 1.9以降の仕様に対応。誤字修正。
2015/07/24 ver 0.5 ・・・ 初版

ご注意
この記事は若干わかりにくい記述を含んでおります。質問は受け付けますが、未検証ゆえ、ものによっては応えられない可能性あります。間違っている項目や足りない項目も多分含んでいるため、ぜひ教えていただけると助かります。


コマナズです。
このブロマガは、最近注目される3Dリソースパックで最も重要な部分、modelsのjsonファイルの記述(要は3Dリソースパックの実際の中身)について細かく見ていきます。

  • 3Dリソースパックで何がどこまで出来るのかを知るための読み物
  • CubikStudio等の3Dリソースパック作成ツールを使うに当たる知識、および修正のための手引

として活用できるかもしれません。

なお項目の性質上、とりあえずテクスチャとかの編集経験がちょっとでもあることを前提とします。基本的に一般人が読んでもわけのわからないものなのであしからず。

参考 Minecraft Wiki - Models
http://minecraft.gamepedia.com/Models

概要

まずは1.8以降のリソースパックについて簡単に説明したい。次の大釜の例を見て欲しい。

まず、blockstatesでブロックの状態の設定が行われています。次に、それぞれのblockstatesについてmodelを作ります。その際、texturesからそれぞれの面にテクスチャを設定していく、というイメージでしょうか。メタと混同しやすいですが、別物なので注意。

この内、今回はmodelsのjsonファイルに着目していきます。

ファイルの仕様

ブロックを作りたい場合と、アイテムを作りたい場合とでファイルの置き場所が違ってきます。
ブロックのモデルを作りたい場合:assets/minecraft/models/block
アイテムのモデルを作りたい場合:assets/minecraft/models/items

次に、ファイル名は先ほどのイメージで、
[blockstates名].json
blockstates名:先ほど説明したblockstatesをここに指定します。詳しくは、デフォルトの[バージョン名].jarの中身を7zipで見ると、何に置き換えればよいかわかるかも。
(そういう一覧とかあればいいのだけど、今のところ海外含め作られていないようだ。)

modelsのjsonファイルの中身

さて、ここから詳しく見て行きましょう。まずは、ファイル全体の構成は大体こんな感じ。全体が大きな中カッコで囲まれた後、大まかに分けて次の4つの大きな項目を指定すればよいでしょう。

「これじゃよくわからん!雰囲気だけでも具体例を出せぃ!」という人は、私がblockbenchで作ったトイレットペーパーの事例をhaste.binに貼りましたので、見比べてみると良いでしょう。(1.11のものです)
http://hastebin.com/apapomiris.json

parent : 親の設定

「一つのモデルを使いまわしたい」という場合、ここを記述します。(一部の特殊事例を除く)
通常3Dテクスチャを作る場合は書きません。メンドイと思ったらこの項は読み飛ばしても多分大丈夫。
書き方は以下のとおり。

"parent" : "他のモデルファイル"

例として、オークのフェンス北向きの場合(oak_fense_n.json
→ オークのフェンスのモデルを流用して、テクスチャだけ変える
"parent" : "block/fence_n"

特殊な事例

  1. アイテムを作る際、実際の表示とインベントリ内での表示を別にしたい場合、以下の記述を行います。
    "parent" : "builtin/generated"
  2. コンパスおよび時計のアイテムの場合は、それぞれ以下の記述が必須となります。(未検証)
    "parent" : "builtin/compass"
    "parent" : "builtin/clock"
  3. チェストや頭ブロックなどで、エンティティファイルのモデルを使いたい場合は、以下の記述を書きます。(必須ではありませんが、開けた時のアニメーションとかはこちらに入っています)
    "parent" : "builtin/entity"
textures:貼るテクスチャ素材の指定に関する記述

2つ目は、貼るテクスチャについての記述。基本的には以下の様な感じになります。

ラベル名:自由に名前を決められます。
テクスチャの場所:assets/minecraft/texturesフォルダを出発点に、テクスチャの場所を指定します。

例:次のような書き方をすると、blocksフォルダにあるhardned_clay_stained_orange.pngが、ラベル名texture1として使用できるようになります。
"texture1" : "blocks/hardned_clay_stained_orange"

特殊な事例

  1. パーティクルを設定する場合、次のような記述をします。例えば、ブロックを壊した時などにはこの設定が適用されます。
    "particle" : "#ラベル名、またはテクスチャのパス"
    texture1というラベル名を指定した場合は、#texture1と言った感じ。
  2. インベントリに表示するアイコンを変える場合(アイテムなど)
    "layer数字" : "アイテムのパス"
    基本はlayer0を使う。ただし、ポーションなどのアイテムとかは、layer1を使う場合もあるらしい。(前述の"builtin/generated"とセットで使うこと)
    例えば、"layer0" : "items/door_oak"といった具合で使えるらしい。
elements 実際のモデルおよびUVに関する記述

さて、次のelements要素で実際にモデルの形状を直方体の組み合わせを使って個別に記述していきます。

  • from および to
    ブロックのサイズ指定大体想像がついたかもしれませんが、fromとtoに座標を指定することで、一つの直方体を描きます。それぞれ0.0~16.0の大きさで書くと、範囲内に収まります。(モデルをはみ出させる場合はこの限りではない)

  • rotation
    ブロックの回転指定できた直方体のブロックを回転させたい場合は、この記述を書いてください。例えば、yを指定すると平面にぐるぐる回せるイメージ。
    angle : 実際に回転させる角度。マイナス指定もできます。
    rescale : trueに設定すると、回転したときにテクスチャを引き伸ばすようになります。通常はtrueに設定しておいてください。
    ※通常は16x16の面を45度回転させると、斜めから見たときにテクスチャが縮んで見えることがあります。テクスチャを引き伸ばすことで、苗木みたいに横からでもきれいな表示に見えるようになります。詳しくは冒頭のWikiを参照してください。

  • faces
    ブロックに貼るテクスチャの指定など直方体に貼るテクスチャをそれぞれ6面指定できます。(指定しなかった場合、その面は透明になります
    uv:テクスチャの、どこの部分を貼るかの指定「一つのテクスチャの中でもこの部分をこの面に貼りたい」という指定ができます。イメージとしては下図のような感じです。

    HDテクスチャ等であっても、0.0から16.0の範囲で指定します。
    texture:先ほどの項で説明したラベル名をここに書くと良いでしょう。ラベル名が texture1であれば、書き方としては#texture1となります。
display:モデルの見え方

モデルにも様々な状態があります。「アイテムフレームに付けた時」「手に持った時」…そうしたときの大きさや角度などの項目を一手に担うのがこの項目です。この中から必要に応じて項目を指定してください。「別にデフォルトのままでいい」という方はこの項目自体無くても構いません。

基本的に、どの項目も以下のような感じで記述できます。

rotation : 表示角度を相対的に指定します。
translation : 表示位置を相対的に指定します。
scale : 表示倍率を設定します。

項目名には、以下の状態を必要に応じて追加していきます。
■ 共通
fixed:アイテムフレームに入れた時
head : 頭にかぶった時
ground:地面にドロップした時
guiGUI表示時

■ 1.9以降のみ(Ver.2)
firstperson_righthand : ブロックを右手に持った時(ファーストパーソン視点)
firstperson_lefthand : ブロックを左手に持った時(ファーストパーソン視点)
thirdperson_righthand : ブロックを右手に持った時(サードパーソン視点)
thirdperson_lefthand : ブロックを左手に持った時(サードパーソン視点)

■ 1.8以前のみ(Ver.1)
firstperson:ブロックの持ち方(ファーストパーソン視点)
thirdperson:ブロックの持ち方(サードパーソン視点)

例えば、fixedのscaleの値をそれぞれ3倍にすると、こんな感じのこともできます。

おわりに

とまぁ、こんな感じで説明していきましたが、基本的にこのファイルの編集はテキストばっかりでわかりにくい。普通の人が3Dテクスチャを実際に作る分にはこんなテキスト編集してないで素直にツールを使うことをおすすめします

ただ、3Dテクスチャでどこまで出来るのかはなんとな~くお分かりいただけたでしょうか。または、ファイル生成後に修正したい時とかには役に立つかと思います。

以下の記事もどうぞー。

3Dリソースパック作成ツールの紹介