Blender初心者がVRChat用の小物を作るまでのメモ

ゲーム

最近、Blenderの勉強を始めました。
理由は「自分で作ったアイテムをVRChatに持ち込みたい」と思ったからです。

最終的には完成までこぎつけたのですが、一筋縄ではいかずにあちこちで足踏みすることになりました。

そこで学習成果を整理するため、Blenderの小物の作り方をまとめてみることにしました。
ただし簡単なメモ書き程度にとどめるつもりですので、詳細を知りたい方は紹介しているリンク先等をご参照ください。

この記事を読んでいただくことで、

  • モデリングの一連の流れ
  • 知っておくべき用語
  • 検索に必要なキーワード

をお伝えできれば幸いです。

Amazonでよく買い物をするあなたへ

Amazonプライム(月額税込み500円)に登録すると……
  • 対象商品のお急ぎ便やお届け日時指定便が無料
  • 10,000本以上の映画やテレビ番組が見放題
  • 1,000冊以上の電子書籍が読み放題
  • 30日間の無料体験あり(無料体験期間中のキャンセルも可能)
\ そのほかの特典もチェック /

一連の流れ

  1. 写真等の資料を用意
  2. パーツごとに分けてハイポリモデルを作成
  3. ハイポリモデルよりひとまわり大きなローポリモデルを作成
  4. ローポリモデルを複製し、Ctrl+Jで結合
  5. 結合したローポリモデルをUV展開
  6. 結合したローポリモデルへハイポリモデルからノーマルマップをベイク
  7. ハイポリモデルにマテリアルを設定し、色を付ける
  8. 結合したローポリモデルへハイポリモデルからテクスチャ(色合い)をベイク
  9. 必要なら、結合したローポリモデルにボーンを設置する
  10. 必要なら、結合したローポリモデルにシェイプキーを設定する
  11. 結合したローポリモデルをfbxで出力
  12. fbxファイルをUnityで読み込み、各種設定をする
  13. Unity Packageとして出力
  14. Unity Packageをアバターのプロジェクトに読み込み、小物を持たせる

自己流ですので、これがベストかは分かりません。
また、必ずしもこの順番で行う必要はありません。

Tips・注意点など

各工程における、コツ・注意点・作業手順・参考資料などをまとめていきます。

資料について

資料画像があるのと無いのとでは、作りやすさが段違いです。
できれば様々な方向から撮った写真を用意してください。

写真の読み込みは、「追加」→「画像」→「参照」から行います。
現在の視点から見た正面に追加されるため、追加する前にテンキーで視点を真正面や真横にしておきましょう。

位置とサイズを調整した後は、コレクションプロパティの「選択可能」を外しておくと、間違えて動かしてしまうことがなくなります。

オブジェクトデータプロパティの「深度」を「前」にしておくと、常に最前面に表示されます。

同じくオブジェクトデータプロパティの「不透明度」にチェックを入れて値を調整すると、半透明にすることができます。

ハイポリモデルの作成

好きなだけディティールにこだわり、ポリゴン数を気にせずに作れば、結果的にハイポリモデルになります。

この段階では、作りやすさを最優先に考えてモデリングをしていけば良いと思います。

オブジェクトはなるべく細かく分けたほうが、修正や色付けがしやすいです。
パーツごと・可動部ごと・色ごとなどに分けて、別々のオブジェクトとしてモデリングしてください。

また、文字が必要な場合は、この段階でテキストオブジェクトとして作っておくとあとが楽です。

モデリング操作については、下の動画がおすすめです。

モデリング中は適宜面の向きを確認してください。
面の向きがそろっていないとベイクが失敗しやすくなります。

追記

先にローポリモデルを作り、それを複製したものにディディールを追加する形でハイポリモデルを作るという手もあります。
そちらのほうが作業時間を短縮できるかもしれません。

ローポリモデルの作成

ハイポリモデルが完成したら、それより一回り大きなローポリモデルを作っていきます。
ハイポリモデルがローポリモデルに覆われるような大きさで作ってください。

大きめに作る理由は、ハイポリモデルとローポリモデルの面が重ならないようにするためです。
面の重なりがあると、ベイク時におかしな模様(影)ができてしまいます。

追記
ローポリモデルとハイポリモデルの大きさは同じで問題ありませんでした。
ベイク時に「押し出し」を適当な値(例:0.002)にし、「レイの最大距離」を0(=無制限)にしておけば影は入りませんでした。

ちなみに、簡単に一回り大きな(または小さな)モデルを作りたい場合には、ソリッド化モディファイアが便利です。
「モード」を「複雑」に、「オフセット」を1(一回り大きくする場合。小さくする場合は-1)に、「幅」を小さな値(例:0.001)にして、「フィル」のチェックを外して「適用」してください。
追記おわり

ポリゴン数を減らすには、

  • 曲面(曲線)の頂点数を減らす
  • 見えない面を消す
  • 刻印やくぼみなどを省く

といったことを意識してみてください。
また、「あまり見えない部分は大雑把な形にし、よく目につく部分は作りこむ」といったメリハリをつけるのも有効です。

デシメートモディファイアを使うと自動的にポリゴン数を削減してくれますが、あまりきれいな形になりません。
UV展開もきれいにできなくなるため、面倒でも自分で一から作ることをおすすめします。

こちらも、モデリング中は適宜面の向きを確認してください。

ローポリモデルの結合

UnityやVRChatで扱う場合、なるべくオブジェクトを統合しておいたほうが負荷が少なくなって良い(多分)です。

そのため、ローポリモデルが完成したらCtrl+Jで統合しましょう。
統合すると後戻りができなくなるため、事前にオブジェクトをShift+Dで複製しておき、修正に備えてください。
あと、モディファイアを使用している場合は結合前に適用しておくと良いと思います。

どういう原理かは分かりませんが、Blenderは統合後も分割線を記憶しているようです。
そのため、統合後にLキーを使うと、パーツごとに全選択ができて便利です。

Lキーはつながった面を選択するコマンドでした。
結合後にオブジェクト同士の面が接触した場合、Lキーでは区別できません。
結合前に頂点グループを設定しておいたほうが、オブジェクトごとの選択には便利かもしれません。

UVマップの名前の不一致に注意

オブジェクトの結合前にUV展開をした場合、結合するオブジェクトのUVマップの名称が一致していないと情報が失われます。

結合前に、オブジェクトデータプロパティの「UVマップ」で確認してください。

よくあるのが、片方が「UVマップ」なのにもう片方が「UVMap」になっていて不一致になるケースです。

ローポリモデルのUV展開

統合したローポリモデルに対してUV展開を行います。
作業はUV Editing画面を使ってください。

きれいに展開するためには、適切な場所にシーム(切れ込み)を入れる必要があります。
辺選択モードでシームにしたい辺を選択し、Ctrl+Eから「シームをマーク」を選ぶとシームを指定できます。

シームを入れ終わったらAキーで全選択し、Uキーから「展開」をしてください。
きれいな形にならなかった場合、Uキー→「スマートUV投影」をするとうまくいくことがあります。

すべてのUVを選択した状態で、「UV」→「アイランドを梱包」をすると、パーツごとにUVが整列するはずです。

あとは、ひたすらUVの選択・移動・拡大縮小・回転を繰り返し、UVをきれいに並べていきます。
目立つ部分は大きく、あまり見えない部分や単色の部分は小さくしておくのがおすすめです。

UVがどの面に対応しているのかを調べるには、「UVの選択を同期」をオンにすると良いです。
ただし、UVの移動時にはオフにしておかないと意図しない頂点の移動が起こります(面選択モードにすれば大丈夫です)。

UV同士はあるていど離しておいたほうがきれいにベイクできます。

ノーマルマップのベイク

ノーマルマップとは

ベイクの手順

  1. UV Editingで「画像」→「新規」でベイク先となるテクスチャを作る(大きさは基本的にデフォルト値で問題ない。独自の値を指定する場合は2の累乗にすること)
  2. 結合したローポリモデルに新規マテリアルを割り当て
  3. Shadingにて、2で作ったマテリアルを開き、Shit+A→「テクスチャ」→「画像テクスチャ」を追加し、1で作成した画像を選択する
  4. Shadingにて、3で追加した画像テクスチャを選択状態にする(ノードをつなげる必要はない)
  5. Layoutにて、Ctrlを押しながらベイクしたいハイポリモデルを全て選び、最後に結合したローポリモデルを選択する
  6. 5で選択したオブジェクト以外は全てレンダリングを無効にする
  7. レンダープロパティでレンダーエンジンをCyclesにし、ベイクタイプをノーマルに、選択物→アクティブにチェック、押し出しに適当な値(0.005mなど)を指定し、「ベイク」をクリック
  8. ベイク結果がUV Editingに表示されるので、「画像」→「名前を付けて保存」
  9. Shadingにて、画像テクスチャのノードをつなげて出来栄えを確認(間に「ノーマルマップ」ノードをかませること)
Blenderのベイクを完全に理解する | 3DCG school
Blenderの上達には、上手なテクスチャ作りが欠かせません。どんなにいいメッシュを作っても、テクスチャがイマイチだと、モデルのリアリティは損なわれます。今回はテクスチャ作りで多用されるベイク機能について解説します。

トラブルシューティング

エラーが出ていないのになにもベイクされない

ベイク元オブジェクトのレンダリングが無効になっているのかも。

変な模様(影)ができる
  • オブジェクト面が重なっていないか確認
  • 辺の周辺に影ができる場合、ベイク元とベイク先にスムーズシェードをかけてみる
  • 面の向きを確認
きれいにベイクできない

押し出しの距離を変更して試してみてください。

Tips

ベイク元のオブジェクトにノーマルマップが適用されている場合、ベイク先にも反映されます。

例えば、ベイク元のハイポリモデルに布地のノーマルマップを適用している場合、ベイク先のローポリモデルにはハイポリの凹凸+布地の凹凸が焼き付けられます。

つまり、ローポリモデルから見るとノーマルマップを重ね掛けしているような効果を得られます。

ハイポリモデルの色付け

適当なマテリアルを割り当てて色を付けていきます。
色ごとにオブジェクトを分けていると、この作業がやりやすいです。

マテリアルの作り方はこちらの動画を参考にしてください。

ただし、メタリックの値は0のままにしておいてください。
そうしないと、次の工程のベイク結果が真っ黒になります。

メタリックを設定してもベイクがうまくいく場合がありました。
上手くいく場合といかない場合の条件の違いは不明です。

色をテクスチャにベイク

基本的に、手順はノーマルマップのベイクの時と同じです。

こちらのサイトが非常に参考になります。

【Blender】レンダリングの質感(マテリアル)をテクスチャにベイクする – XR-Hub
以前の記事でノーマルマップというテクスチャの作成手順についてご紹介しました。よろしければそちらの記事もご覧いただけると幸いです。 Blender・Unityを用いたノーマルマップ(法線マップ...

特に、「放射マテリアルを使用する」の項目は必読です。
とても便利なテクニックです。

また、こちらのサイトも参考にしてください。

Blenderのベイクを完全に理解する | 3DCG school
Blenderの上達には、上手なテクスチャ作りが欠かせません。どんなにいいメッシュを作っても、テクスチャがイマイチだと、モデルのリアリティは損なわれます。今回はテクスチャ作りで多用されるベイク機能について解説します。

トラブルシューティング

ベイク結果が真っ黒になる

マテリアルの「メタリック」の値が0以外になっていないでしょうか。

ベイク結果が暗い
  • ライトがまんべんなく当たっているか確認
  • 前述のサイトの「放射マテリアルを使用する」の項目を試す
  • ライト(の役割をするオブジェクト)のレンダリングが有効になっているか確認
  • 余計なオブジェクトのレンダリングが有効になっていないか確認
  • 押し出しの距離を変更する
  • どうしてもオブジェクトによる影ができる場合、ハイポリモデルのパーツごとにベイクし、画像編集ソフトで結果をつなぎ合わせるという手もあります

ボーンの設置

基本的な操作については、例えば以下のサイトが詳しいです。

VRMファイル(VRoid)にボーン付きのパーツを追加する - Qiita
はじめに 以前、VRMに雰囲気を合わせてカスタマイズするという記事を書いた。その関連で今回はボーンが入ったアクセサリーなどのパーツをVRoidにフィットするように作る手順をまとめてみた。その他、作成上の注意点についてもその都度言...

そもそもボーンとは?を理解するには、以下のサイトをご覧ください。

Blenderのアーマチュア、ボーン、リグを理解する | 3DCG考え中
(約 13,000文字の記事です。) リグとボーンの違いを一言で説明できますか?私は勘違いしていました(笑)スキニングの意味で「リグ入れ」と言っていました。恥ずかしい……。 今まで何となく使っていた用語を正しく理解して表現するための基礎知識

Tips・注意点

Rootボーンを設置する

Unityで使いたい場合、各アーマチュアの直下にRootという名前のボーンが必要みたいです(私自身は未検証)。

Rootボーンは、そのアーマチュアに属するすべてのボーンの親になっていなければなりません。

あとからRootボーンを追加したい場合は、ボーンを選択して編集モードに入り、Rootボーン直下に入るボーンを選択→「ボーンプロパティ」の「ペアレント」にRootを設定→「接続」にチェック(不要かも?)してください。

BlenderでUnity向けにFBXをエクスポート:アーマチュア(ボーン)編 | SOU·COLLE
イラストレーション/デザイン/3DCG/ゲーム開発のお話

上のサイトではRootボーンをほかのボーンに接続していません。
また、Rootボーンを水平か垂直にせよと述べています。
しかし、私はRootボーンをほかのボーンと同じように接続し、位置を変更していますが、今のところ不具合はありません。

なお、上のサイトにある「プライマリボーン軸/セカンダリボーン軸の設定」もしていません。

頂点グループは必ず確認

各ボーンが影響を与える頂点は、ボーンと同名の頂点グループで管理されています。

頂点グループの内容によってかなり動きが変わってくるので、ウェイトペイントをする前に確認してください。

特に、絶対に動かしたくない頂点はCtrl+Gから削除しておきましょう。

ウェイトペイントはグラデーションがおすすめ

ウェイトペイントをする際は、グラデーション(Altキー)を使うときれいに塗りやすいです。

既製品を参考にして設定する

設置するボーンの数やウェイトペイントの具合などは、既製品のfbxファイルをBlenderで開いて確認してみると理解が早くなります。

ありがたいことにBoothには無料のVRChat向けアクセサリーがたくさんありますので、それらをダウンロードして参考にしてみてください。

シェイプキーの設定

シェイプキーの設定をする前に座標系の変換を済ませてください(FBXファイルの出力を参照)。

また、別のオブジェクトに属する頂点を同時に動かすことはできないみたいなので、必要に応じて事前に結合しておいてください。

FBXファイルの出力

  1. オブジェクトのサイズを調整(修正に備えて事前に複製しておくことを推奨)
  2. 全トランスフォームを適用
  3. メッシュオブジェクトの「オブジェクトプロパティ」→「関係」→「ペアレント」からアーマチュアを削除
  4. オブジェクトモードにて、原点を基準にX軸で90度回転(この時点でシェイプキーが無い場合)
  5. 編集モードにて、原点を基準にX軸で-90度回転(この時点でシェイプキーが無い場合)
  6. 出力したいオブジェクト・アーマチュアを選択
  7. 下図のように設定して出力

3~5については、詳しくは下のサイトをご覧ください。

BlenderとUnityの座標系の違いを治す|KitanoMinami|note
何番煎じが分からない説明になると思いますが、出来るだけシンプル簡単かつピンポイントにお伝えします。 座標系の話 blender座標系とunity座標系は上方向と奥方向が違います。X軸も反転です。 (もっというとblenderはOpenGLとも違います。) 分かりやすく図示すると下記図のようなトランスフォームとな...

Unityで使う場合、上記のように座標変換をしてやらないと回転軸がおかしくなったりします。

【Blender 入門】《第3回》エクスポート、Unity上のマテリアル設定!|日本刀をモデリングしてみよう! – XR-Hub
第1回では大まかな日本刀のモデリング、第2回ではマテリアル設定・モデリングの仕上げを行いました。先にご覧いただけると幸いです。 【Blender 入門】《第1回》柄、鍔、刃を作成!|日本刀を...
FBX をエクスポートする方法 [Blender/Unity] – Site-Builder.wiki

出力時にはテクスチャを埋め込まず、あとで手動でUnityのプロジェクトフォルダに入れてやっても良いです。

追記

選択したオブジェクトが非表示の場合、うまく出力されないことがある気がします(要検証)。

Unityで読み込む

  1. fbxファイルをAssetsフォルダ以下の適当な場所に入れる
  2. fbxファイルのInspectorのMaterialsで、Extract TexturesとExtract Materialsをする
  3. マテリアルの設定をする
  4. ボーンの設定をする
Standard Shader - Unity マニュアル
Unity の Standard Shader は、包括的な機能を持つビルトインシェーダーです。Standard Shader は、石、木、ガラス、プラスチック、金属など「現実世界」のオブジェクトをレンダリングするのに使用され、広範囲のシェーダータイプや組み合わせをサポートします。その機能は、マテリアルエディターの多様...
【VRChat】PhysBoneの設定方法・Componentについて
PhysBoneとColliderの2つの設定要素について解説しました。 この記事を見る事でパラメーターについて詳しく知ることができます。 PhysBoneを1から設定したい方はご覧ください。

テクスチャについて

たまにうまく取り出せないことがあります(特にノーマルマップ)。
その場合は、手動でプロジェクトフォルダに入れてマテリアルに設定してください。

テクスチャのInspecterにいろいろな項目がありますが、とりあえずMax Sizeを必要最低限の大きさにしてやれば負荷を減らせて良いと思います(多分)。

ノーマルマップのTexture TypeはNormal mapに変更してください。

変更後はApplyを押すと適用されます。

マテリアルの設定について

こちらのツールで確認しながら調整するのが便利です。

Lightbox Viewer - hai-vr - BOOTH
Lightbox Viewerは、異なる照明条件下でのシェーダマテリアル設定の変化を同時に可視化することができます。 V1.0.1: UI Text は、Play モードが入力されていなくても、最初のアクティベーションの後、メッシュの上にレンダリングされません。 V1.0.2: Play modeの修正 Unityの実...

PhysBoneの設定について

PhysBoneについては以下のサイトで詳しく説明されています。

【VRChat】PhysBoneの設定方法・Componentについて
PhysBoneとColliderの2つの設定要素について解説しました。 この記事を見る事でパラメーターについて詳しく知ることができます。 PhysBoneを1から設定したい方はご覧ください。
【VRChat】PhysBoneを1から自力で設定する方法
PhysBoneを1から自力で設定する方法を解説。髪やスカートや服のおすすめ設定が載ってます。 VRoidやBlenderでの自作アバターを使う方はこちらを見ながら設定してください。

Unityで設定後にPlayボタンを押し、Sceneでオブジェクトを動かすと揺れ具合を確認できます。

こちらについても、Boothで配布されているアクセサリーの設定を見ると大変参考になります。

どうしても表示されない面がある場合

ネットの情報を頼りにUnityの設定をいじっても、どうしても一部の面が表示されないことがありました(Blender上では表示されていました)。
力技ですが、私はBlenderで当該面を削除してから張りなおすことで解決しました。

Unity Packageを出力

HierarchyからProjectにドラッグアンドドロップするとPrefabが作られます。
このPrefabをExportしてください。

Export時にはfbxファイル・テクスチャ・マテリアルだけを含めればOKです。

おわりに

ここまでお読みいただきありがとうございました。

最初は難しく感じるかもしれませんが、そのうち慣れるのでご安心ください。

Blenderのトラブルシューティングについては、こちらの記事も併せてご覧ください。

Blenderの入門にはこちらの本がおすすめです。

基本的なことが一通り紹介されているので、ぜひ手元に置いておいてください。

Amazonでよく買い物をするあなたへ

Amazonプライム(月額税込み500円)に登録すると……
  • 対象商品のお急ぎ便やお届け日時指定便が無料
  • 10,000本以上の映画やテレビ番組が見放題
  • 1,000冊以上の電子書籍が読み放題
  • 30日間の無料体験あり(無料体験期間中のキャンセルも可能)
\ そのほかの特典もチェック /

ゲーム
\気に入ったらシェアしてください/
ジョー・ヒタギをフォローする
よろず便利帖

コメント

タイトルとURLをコピーしました