Java版マイクラのMODでPBRテクスチャ付きのエンティティを作ってみたよ

作成中のロボ君のテクスチャが単色ツルツルだとあれな感じ&今後作ろうとしている敵MOBとかボス用にいい感じのテクスチャを作れるようになっときたいので、PBRなテクスチャをエンティティにつけるにはどうすればいいのか、の技術調査をしました!

PBR is 何?

前アリアハンを作った時の👇の画像がわかりやすいんですが

3Dモデルをレンダリングする時に、追加のテクスチャファイルに書かれた情報に従って凹凸をつけたり、光を反射させたり、素材感を醸し出したりする技術らしいです。

この手の質感を全部ポリゴンで再現すると、めちゃくちゃ大量のポリゴンが必要で重くなっちゃうので、後処理でそこそこの負荷にて実現できるのが特長の模様。

イクラ固有の話じゃなくて、3DCGとかゲーム界隈でよく使われる技術らしいです。
👇のサイトがわかりやすかったです。

イクラだと…?

実はSEUSとかBSL ShaderとかComplementary Shaderとか、最近の影MODはPBRに対応しているのが多くて、そういうテクスチャを作って配置すれば、いい感じに表示してくれます。

ブロックのリソースパックにもPBRテクスチャに対応しているものがあって、建築する時にめっちゃお世話になってました。

脱線:PBRなブロックで綺麗な建築/風景を楽しみたい時の導入手順

👇の動画がめっちゃ分かりやすいです

個人的に好きなのは👇の構成(ラピュタアリアハンもこの構成でした)

本題:今回やったこと

今回のターゲットはブロックとかリソパではなくて、MODDEDエンティティであるロボ君や、今後作るであろうMOB/ボス君になります。これらのエンティティにPBRテクスチャを張るためにはどうしたらいいのか、の技術調査をしました。

特にGeckoLibを使ってる場合の方法を知りたかったのです。

完成した謎の物体

怪しすぎるwwwwでもかなりいい感じ

やりかた

①テクスチャを用意する

A. 通常のテクスチャと
B. 材質等を定義した追加のテクスチャを用意します。

Aについてはいつも通り作ればOK
Bについてはちょっと色々ややこしいので後述します。

②テクスチャをしかるべき場所に置く

ベースのテクスチャがmurabiteusu.pngだとすると、
同じフォルダに

  • murabiteusu_s.png
  • murabiteusu_n.png

という、材質などを定義した追加のテクスチャを配置しておけば、後は影MODさんが自動で拾って、いい感じに表示してくれます。

(後述のLab PBR形式の場合です)

③影MODでPBRの設定を有効にする

テクスチャさえあれば、マイクラへの適用自体は超簡単でした。

注意事項

GeckoLibを使っている場合、v4.4.8以上のバージョンを使わないと、うまく読み込んでくれないです(ここに結構はまったw)

追加のテクスチャファイルって何よ?

本体のテクスチャに対して、「ここはでこぼこね!」とか「ここはてっかてかに光らせて!」みたいなのを指定するためのテクスチャファイルです。

画像ファイルのRGBAチャンネルのそれぞれに、意味合いが持たされています。

_nのファイルの場合、アルファチャンネルの濃さが凸凹具合、みたいな。

追加のテクスチャファイルのフォーマット

イクラではいくつか種類があるみたいです

  • Lab PBR形式
  • SEUS PBR形式、などなど

実は👆で例示したファイル名は、Lab PBR形式のフォーマットです。

Lab PBRの形式

👇のサイトがわかりやすかったです

リンク先のとこに書いてあるShader Labというサイトが、公式の仕様を記載してくれてるので、そちらも読んどいた方がいいかも

で、どうやってその追加のテクスチャファイルを作るんだい?

これが一番の難題でした…。

自分が調査しきれた範囲だと、大体👇みたいな感じです。
(他にももっといい方法あるかも)

パターン①自分で手書きする

①-A. 2Dの画像編集ソフトを使って作る

ぱっと思いつくのがこれですが、なかなかにしんどいw
基本はベースのテクスチャファイルの加工でいいんですが、全部手で書くのはきつすぎる…。これは見送り

①-B. BlockBenchで作る

ブロックベンチのプラグインでできました!ただ、Aよりは楽とはいえ、やっぱり手書きの辛さはあるので、テクスチャのドット数が少ない場合とか、全体の材質設定だけ一括でえいやっ!ってする場合とかに使う感じかなぁ

ざっくり手順

※PBR Tools V1.2の情報です。まだBeta扱いっぽいので、今後変わる可能性高

  • ファイル>プラグイン>利用可能>検索窓に「PBR」
  • 「PBR Tools」をインストール
  • 新規モデルを作成
    • 現時点だとまともに動くのはJava Block/Itemでした
    • Generic ModelとかGeckoLibモデルは一部機能使えず
    • この辺は正式版だとなんとかなるといいなー
  • 普通にモデリング
  • View>PBR Previewを有効か
  • テクスチャを作るときに、右端にあるCreate Material Textureを選択
  • 1枚テクスチャが生成されて、そのテクスチャにレイヤが複数定義される
  • 各レイヤのざっくり説明
    • Metalness:反射具合。白に近いほど鏡みたいになる
    • Emmisive:発光具合。白に近いほど光る
    • Roughness:粗さ具合。白に近いほど荒い=光の反射がぼやける
    • Normal:ちょっと説明むずい。ここ参照
    • Height:当該ドットの高さ。白に近いほど高い
    • Ambient Occlusion:ちょっと説明むずい。ここ参照
    • Albedo:色情報。いつも作ってるテクスチャ
  • 一通り付け終えたら保存
  • ツールバー>カスタマイズ>その他でGenerate lab PBR texturesを追加
  • ボタンが出るので、押すと、_nとか_sのファイルを自動生成してくれる

①-C. 3Dのツールを使って作る

こはちょっと時間なくて調べきれず…。なんか色々ありそうな気配でした

パターン②フリーで提供されている素材を使う

今回はこの作戦でいきました。借りたのは↓のテクスチャファイル

ただ、このやり方も中々にしんどい…。

というのも、提供されているテクスチャを、Lab PBRの形式に変換しないといけないのです。

変換方法として考えられるのは

②-A. 画像編集ファイルで頑張る

今回はこの方式で行きました。GIMPを使って、↑のテクスチャファイルをLab PBR形式に従って、各RGBAチャンネルにマージしていく感じ。

もう二度とやらねwwwwって思うほどにはしんどかったです

②-B. Blenderの機能でいい感じに変換する

現実路線はこれかなぁ、と思います。
まだ試せてないんですが、👇の動画がそのものずばりでした。

一回ノードを組んじゃえば、別のテクスチャを作りたい場合も画像の差し替えだけでいけそう

パターン③ベースのテクスチャからツールで自動生成してもらう

ベースのテクスチャだけ作ったら、追加のテクスチャファイルは自動生成してもらう方式です。この手の無料サービスとかツールが最近出てきてるっぽいです。ただ、AIで実現されているものが多く、著作権的にOKなのかちょっと判断つかず…。

この方式で行く場合でも、結局Lab PBR形式では吐いてくれないので、生成した後に②の方法でコンバートが必要っぽいです。

まとめ&ロボ君や敵MOBへの実装について

ゲーム内に実際にPBRテクスチャードなエンティティを作ってみて思ったのは、「リアル路線にもっていきすぎると、ゲームの雰囲気との調和が崩れそう」です。

この辺はマップの雰囲気との兼ね合いになるので、一回サンプルの遺跡都市を作ってみて、その中で色んなテクスチャを試しながら、いい塩梅を探っていこうと思います。

来週からはしばらく建築勢作業かなー。超楽しみw