ちかげのひとりごと

ちかげのひとりごと

建築勢向けのmod解説、mod開発のメモ書きなど。

【Minecraft】レンダリングの方法を雑解説

先日、MineExporteR 0.2.0 betaを公開しました。 マイクラの建築をBlender等にインポートできる形式に変換できるmodですが、私のTLを見てると
レンダリングしてみたいけど、Blenderよくわからないから、、、」
といった人が結構見られたので、簡単にですがレンダリングする上でのノウハウなどを公開しようと思います。
参考にしてもらえれば幸いです。

事前準備

ダウンロードするもの

MineExporteR ダウンロード
出力用のmod本体です。Forge mod形式ですので、他のmodと同じようにmodsフォルダーに入れてください。

マテリアル変換用スクリプト リンク
Blenderにインポートしたあとに使用します。コピペでも良いのでダウンロードする必要は無いです

Blender ダウンロード
レンダリング用ソフトです。3ds MaxやMaya、Cinema4D等でも同じような事ができますが、有料のため今回はBlenderで説明します。

エクスポート

まずは建築をエクスポートしてみましょう。 今回はRiccoさん(twitter)の建築をレンダリングしてみます。 マイクラでエクスポートしたい建築のあるワールドに入り、範囲選択をします。

出力したい建築の端と端で /mexp pos1 /mexp pos2 と入力してください。
入力すると、このように範囲が見えます。

建築が範囲にあることを確認したら、 /mexp export と入力すると、出力が開始されます。
問題なく出力されると環境フォルダにMineExporteRという名前のフォルダが生成されるはずです。

MineExporteRフォルダの中身

Blenderへインポート

Blenderを開き、新規ファイルを作ります。

デフォルトのキューブとライトを削除して、出力したワールドを読み込みます。
ファイル→インポート→Wavefront(.obj) をクリックして、出力されたフォルダにあるexport.objを選択し、OBJをインポートをクリックします。

すると先程出力した建築が読み込まれます。しかし、このままだと真っ暗なのでマテリアル(テクスチャ画像や質感を指定するもの)を割り当てていきます。

Scriptingタブに切り替え、新規ボタンをクリックします。
するとエディタが開くので、先程のスクリプトをコピペしてください。

横の再生ボタンみたいなボタンを押すと、スクリプトが実行されます。
これでマテリアルが設定されました。あとは自由に照明やカメラを配置して撮影しましょう。

アドバイス、コツ等

レンダーエンジンについて

シーンを開いて「レンダーエンジン」をCyclesに設定しましょう。デフォルトではEeveeが選択されていますが、これはリアルタイム用エンジンでアニメーションを撮影するときによく使用されます。スクショ用ではないのでCyclesにしましょう。外部GPUがある方はデバイスGPU演算にすると高速化されます。

テクスチャがチラチラするとき

Z-Fightingという現象です
カメラやビューの「範囲の開始」を大きくすると改善されます(1mとか)

光源ブロックを光らせたいとき

ShadingタブでTabキーを押してオブジェクトモードから編集モードに変えたあと、変更したいテクスチャをクリックします プリンシプルBSDFの放射、放射の強さが光源設定です。
放射で色を設定し、放射の強さで光具合を調整できます。
また、画像テクスチャのカラーから放射ノードに繋ぐと、テクスチャの色がそのまま光源の色になります。

大気テクスチャについて

環境テクスチャや大気テクスチャを設定すると、簡単に空や太陽の設定ができます。 Shadingタブのモードをオブジェクトからワールドに設定し、テクスチャ→大気テクスチャを選択します。 カラーを背景ノードに繋げると大気テクスチャが適用されます

レンダリング

F12を押すとレンダリングが始まります 時間がかかるので完了するまで待ちましょう

最初はノイズだらけですが、次第にきれいになります

レンダリングが終了したあと、いろいろ編集して完成したのが下のものになります

もちろんここで説明したことはBlenderの初歩的な部分だけで、マテリアル設定やHDRI、コンポジットなど突き詰めればいくらでも調整できます。
この記事で興味を持ってもらえた方は、どんどん自分で情報を集めて沼にハマってみましょう!!
それでは、良いレンダリングライフをお過ごしください!

FAWEをcocricotの追加ブロックに対応させました

f:id:chikage125:20211123064901j:plain
ここにあるすべてのブロックがコピーできるようになります
FAWE(FastAsyncWorldEdit)、便利ですよね。
通常のWorldEditに比べてサーバーへの負荷が少なく、追加機能も多いFAWEですが、cocricotなどのJEID/NEIDを前提とするmodを使おうとすると問題が起きます。
それが
一部のブロックがコピペやstackできない

正確には内部IDが4096を超えるとFAWE側で認識しなくなります。コクリだと内装ブロックや新しめのアップデートで追加されたブロックがそれに当たりますね。

なのでFAWEのソースを改変して、4096以上のIDでもコピーできるようにしました。 以下ダウンロードリンクと利用上の注意点です。(私の他の改変modを使ってくださっている方にはいつものやつです)

注意点
  • 公式のFAWEではないので、バグ報告を開発者(IntellectualSites様)に報告するのは控えてください。
  • コピーペースト、setなど基本的な機能が正常に動くことを目的に作成しています。すべての機能が正常に動く保証はありません。
  • このmodを共有する際はこの記事のリンクを共有するようにし、ダウンロードリンクをそのまま貼り付けることは控えて下さい。
  • このmodを使用したことによるワールド破損等については責任を負いません。必ず定期的なバックアップを取るようにしてください。
  • ダウンロード

    cocricotの窓枠コピペバグの修正パッチを作りました

    cocricotの一部の窓枠や屋根をコピー/ペーストした際に、上下が反転するバグを修正するパッチです。 通常のmodと同じように、modsフォルダにjarファイルを配置することで動作します。 f:id:chikage125:20211022005625p:plain

    注意点
  • cocricotのソースコードは一切使用していないため、modの2次配布には当たらないと考えていますが、きぃこ様より配布停止の指示があるか、cocricot側で修正のアップデートがあった際にはダウンロードリンクを即時に閉鎖します。
  • このパッチはcocricot公式のものではありません。公式(きぃこ様)へのバグ報告はこのパッチを抜いても発生することを確認してから行ってください。
  • このmodを共有する際は、このサイトのリンクを貼るようにし、ダウンロードリンクを直接共有することは控えてください
  • ダウンロード

    【FAWE】ミニチュリやコクリでもFAWEのrotate/flip、できます

    WorldEditで建築していると、大きな建物を左右反転したり回転したくなることってありませんか?

    追加ブロックでない普通のバニラブロックは回転してもきちんと向きが変わってくれますが、cocricotやMiniaTuria等追加ブロックのあるmodを使っていると、うまく反転や回転できないことがほとんど、、、

    こんな感じになっちゃいます

    追加ブロックだからと諦めてた人が大半だったと思いますが、実はあるmodを使えば追加ブロックでも回転や反転の対応ができるんです!
    そのmodの名前は
    ForgeUtils 開発元github
    聞いたことのない人がほとんどだと思います。
    このmodはFastAsyncWorldEdit、通称FAWEの開発者さんが作成した、FAWE用のブロックデータ出力modです 。

    実はFAWEにはバニラブロック以外のブロックも回転させる機能があるんですが、ブロック一つ一つに対して向きなどのデータを入力してあげないといけません。
    その入力作業を肩代わりしてくれるのがこのmodです。ですが、途中で開発が中断してしまったのかブロックIDがうまく出力されなかったりして不具合も多いです。
    なので私がコードを改変してある程度正常に動くようにしました。以下のリンクからダウンロードできます。

    ダウンロード

    ▼更新履歴(クリックして展開)

    v1.4 (2023-10-15)
    ・MiniaTuriaの窓枠が正常に移動されない不具合を修正
    
    v1.3 (2021-08-28)
    ・cocricotの窓枠が正常に移動されない不具合を修正
    ・MiniaTuriaのふとい縦棒が正常に移動されない不具合を修正
    
    v1.2 (2021-08-28)
    ・初公開

    注意点
  • for MiniaTuriaとcocricot環境での動作を想定しています(conquestや路地裏は未確認です)
  • 公式のForgeUtilsではないので、バグ報告を開発者(EngineHub様)に報告するのは控えてください。
  • 無印WEでは動きません、必ずFAWEを使ってください
  • 本家のForgeUtilsにはブロックだけでなくアイテムの出力機能もありますが、これはブロック出力のみの対応になります。アイテムを出力させようとすると落ちます
  • 自鯖環境(spongeForgeなど)向けです。普通のワールドでは正常に動作しない可能性があります。
  • 絶対に外部に公開する鯖では使用しないでください。悪意のある攻撃者が任意のコードを実行できる機能を有しています。(ローカル環境であれば問題はありません)
  • 使い方
    ダウンロードしたmodをmodsフォルダに入れ、サーバー起動ファイル(run.batなどのバッチファイル)を編集します

    起動ファイル一例
    java と書いてある部分の次に -Denginehub.dumpblocks=true と入力してください(ハイフンも忘れずに)
    そうしたらあとは起動するだけで自動的にextrablocks.jsonというファイルが生成されるはずです。
    この辺に生成されます
    これを config\FastAsyncWorldEdit\extrablocks.json に移動させたら、サーバーを再起動してください。

    以上で作業は終了です。正常に回転ができるか確認してみてください。作業後、ForgeUtilsは削除しても問題ないです

    回転できる!!

    もし正常に回転、反転できないブロックを見つけたら、ちかげ(@chik4ge)にこっそり教えて下さい。

    現在わかっている不具合
    MiniaTuria
    ・斜めドア全種 → MiniaTuriaの仕様で、向きによるダメージ値の変化がないため対応は不可能になります。

    【1.12.2】追加ブロックがあってもワールド間でコピペできる!便利MOD紹介

    「試作ワールドで建築したけど、メインのワールドにも持って行きたい…」
    「昔作ってたワールドのデータから建築を移動させたい…」
    なんてこと、ありませんか?
    いくら一度作ったからといって、別のワールドでもう一度作り直すのは面倒ですよね。同じワールドの中ならWorldEditの/copy/pasteを使えばできますが、別のワールドだから、、と諦めていた方もいるかもしれません。
    今回は、ワールド間で建築物のコピーペーストができる機能を2つ紹介します、それぞれ長所と短所があるので自分の用途に合わせて使ってみてください

    WorldEdit(FAWE) を使う

    modをダウンロードする(worldedit)
    modをダウンロードする(FAWE)
    先程同じワールドなら/copy/paste が使えると言いましたが、/schemコマンドを使えばワールド間をまたいでコピペができます。

    コピーしたい建築を選択して/copyしたあと、/schem save <名前>と入力します

    その後、別ワールドに移動して/schem load <名前>と入力します
    これでクリップボードに建築がコピーされるので、いつもどおり/pasteするだけです。

    本当は細かい設定がありますが、今回は割愛します。詳しく知りたい方は公式サイト(英語)を見てみてください。

    この方法の特徴

    • 建築勢ならだいたいWEが入ってるので追加のMOD導入が不要
    • FAWEなら大規模な建築でも動作が軽い
    • modで追加されたブロック(cocricotやconquest)には基本的に非対応

    litematicaを使う

    modをダウンロードする(litematica)
    modをダウンロードする(前提mod MaLiLib)
    名前からもなんとなくわかるように、liteloader用modです
    このmodの特徴はなんと言ってもペースト前にプレビューで設置後のブロックが半透明に見えることです。これにより設置ミスなどが大幅に減ります。
    このmodは項目が多く、色んな設定ができますが今回は最短でコピペする方法だけを紹介します

    前準備 キー設定
    メニュー(デフォルトだとM+C)→Litematica Configs→Hotkeys からexecuteOperationの項目を探し、好きなキーに設定してください。このキーは最後に使うので、忘れないようにしてください。
    ついでにメニューのデフォルトキーがミニマップと競合するので、別のキーに設定することをおすすめします。

    範囲を選択する
    棒を手に持ち、左下にMode [1/9]: Area selection と書かれていることを確認する(違ったらctrl+スクロールで出るまで回してください)
    コピーしたい建築の端と端を右クリック、左クリックして範囲を指定する f:id:chikage125:20210428224617p:plain

    範囲を保存する
    メニューを開いてArea Editor→ Save Schematicを押す
    f:id:chikage125:20210428224621p:plain

    貼り付ける位置を決める
    移動させたいワールドに移って棒を手に持ち、Mode [5/9]: Paste Schematic in world と書かれていることを確認する(違ったらctrl+スクロールで出るまで回してください)
    建築を貼り付けたい場所にクリックすると画像のようにプレビューが出るはずです f:id:chikage125:20210428224631p:plain

    貼り付ける
    画面を戻して、executeOperationに設定したキーを押すと建築が貼り付けられます。 f:id:chikage125:20210428224636p:plain

    この方法の特徴

    • 貼り付け前にプレビューが見られるので事故りにくい
    • modで追加されたブロックでも正常に貼り付けられる
    • 初期設定の状態で、サーバーで実行すると相当な負荷がかかる(シングルなら問題ない)

    このmodを使うときにはひとつだけ注意点があり、 シェーダーは使えません。必ずOFF(内部シェーダーでもだめ)にしてから操作を行いましょう。

    今回は最短ルートだけを紹介しましたが、設定次第では貼り付けるときの原点やプレビューの表示方法、たくさんのキー設定(貼り付け位置や選択範囲をスクロールで動かせる等)を弄れるので、気になった方は有志の方が投稿しているチュートリアル動画(英語)も覗いてみてください。

    【cocricot】チャンク抜けを修正するmodを作りました

    タイトルの通りです。
    cocricot等一部のmodpackでまれに発生するチャンク抜け(画像のような現象)の原因を特定し、修正するmodを作成しました。

    f:id:chikage125:20210322202033p:plain
    こういうやつです

    JustEnoughIDsを改変して作成したので、サーバーやminecraftの環境にあるJEIDを入れ替える形で導入してください。

    注意点
    ・公式のJEIDではないので、バグ報告を開発者(DimensionalDevelopment様)に報告するのは控えてください。
    ・公式のJEIDで発生せず、このJEIDを入れた場合のみ起こるバグは私のtwitterに報告してもらえるとありがたいです。
    ・このJEIDを入れて、100%チャンク抜けが起こらない保証はできません。継続的なバックアップを強く推奨します。
    ・このmodを共有する際はこの記事のリンクを共有するようにし、ダウンロードリンクをそのまま貼り付けることは控えて下さい。

    ダウンロード
    JustEnoughIDs-1.0.3-FixChunkSaving.jar
    ※ダウンロードできない場合は私のtwitterにお知らせください。

    変更履歴
    2021-3-23 公開

    以下は技術的な話になります。興味のある方だけどうぞ。
    cocricot公開から主に内装建築勢の方を困らせてきたチャンク抜け問題でしたが、結論から言うとcocricotのバグではなく、1.12.2のForgeで特定の条件を満たすブロック追加modを入れたときのみに発生するminecraft自体のバグでした。

    minecraftでは、16*256*16の範囲のチャンクでワールドを管理しているのは有名な話ですが、実は1チャンクの中にも16*16*16の範囲の更に小さい単位で保存されています。(今回はこれをサブチャンクと呼ぶことにします)

    minecraftのブロック保存のシステムとして、1.12.2ではサブチャンク内に存在するブロックの種類の数によって保存方法が変わります。具体的には、
    16種類以下 → 線形保存
    17種類以上256種類以下 → ハッシュ保存
    257種類以上 → レジストリ準拠保存
    となります。線形とハッシュ保存については今回は関係ないので解説しません。

    ブロックの種類が257種類以上になったときの保存方法であるレジストリ準拠保存ですが、ざっくりいうとブロックの情報を(ID << 4)+damageのインデックスで紐付ける方式になります。したがって、インデックスに入りうる最大の値は (レジストリ内の最大ID+1)*16 となるはずです。ですが、最大値をレジストリのblockstate(柵や階段の形を変えるやつ)の数をもとに登録しているため、本来登録されるべき最大値との間に差異が生まれてしまいます。

    ここに、一つのIDにおけるblockstateが少ないブロックを大量に追加すると、レジストリ準拠保存になったときに最大値を超えてしまうブロックがあり、それを置くとエラーが発生し、チャンクが抜けてしまうことになります。

    そこでJustEnoughIDsを使ってその部分の処理を正しく記述したものが今回のmodになります。本当は単体のmodで実装したかったのですが、私の技術力が足りず数日格闘した結果諦めることにしました。。w
    あとこれはminecraft自体のバグになるので、本来であればForgeにプルリクを送るべきですが、おそらく修正が反映されるより自前でmod作ったほうが早いと思ったのでこの形での公開としました。プルリクは後日送っておきます

    なにか質問があればtwitterやコメントで聞いていただければ、私のできる範囲でお答えします。

    【FAWE】splineブラシで曲面を造形しよう

    今回はsplineブラシの解説です

    spilneブラシを使えば、手置きでは難しい曲面を簡単に作れます。

    使い方

    spilneブラシの使い方の前に、splineと相性がいいcurveコマンドの説明をします。 curveコマンドを使うためには、範囲選択をcuboidからconvexに変更します。
    範囲選択については下の記事で詳しく解説しているので、興味があれば覗いてみてください
    chikage.hatenablog.jp
    convexモードで端から順に選択し、//curve [ブロック]と入力します
    すると、選択した点を順に通るようになめらかな曲線が生成されます。 f:id:chikage125:20210109004623p:plain

    f:id:chikage125:20210109004627p:plain

    では、本題のsplineブラシの使い方に移ります。
    まず、//curveで2本の曲線を引きます。この曲線が作りたい曲面の両端になります f:id:chikage125:20210109010400p:plain
    それからブラシを付与したいアイテムを手に持って、/br spline [ブロック] [大きさ]と入力します。
    大きさは曲面を生成する曲線を探す範囲になるので、できるだけ大きな値を入力してください。1000以上にしても動作に影響はありません。
    ツールを指定したら、2つの曲線の両端を左クリックします。このとき、3本以上の曲線があっても大丈夫ですが、必ず同じ方向の両端を指定するように気をつけてください。そうしないと、捻れたり曲線全部が繋がりません。

    f:id:chikage125:20210109011118p:plain
    うまく選択できなかった例

    正しく設定できると、以下のような曲面が生成されます。 f:id:chikage125:20210109011342p:plain このままだとすこし汚いので、曲面をなめらかにしていきます
    このとき、普通に/br blendballなどを使うと曲面が壊れてしまうので、/mask 0で空気のみをマスクしてから使うようにしましょう f:id:chikage125:20210109012045p:plain ブラシでなめらかにしたあと、手作業で不自然な点を修正すると画像のようになります

    これらのことを応用すると、こんな事もできます f:id:chikage125:20210109050548j:plain