
Blender3.1でロボット掃除機描いてみた(これまでのまとめ編)
これまで覚えたことを使って、ルンバモドキを書いてみました。
レンダリングした動画です。
Blender3.1でロボット掃除機を描いてみた#Blender3d #blender #3DCG pic.twitter.com/AqGvLnLhR5
— ((void*)0)💙💛 (@RFR7g9YHJ1m11nY) January 13, 2023
それなりに満足しましたが、出来たものを改めて見るとモデリングもマテリアルも未だまだ甘いですね。質感がうまく出せないなぁ、と最近良く思います。モデリングが甘いからなのか、マテリアルの設定が下手なのか、はたまた両方なのか。
今回は、Blenderで遊び始めて半年くらいで覚えたことや、上手く出来ないなぁ、ということ、これから覚えたいこと、ルンバ作成手記などを徒然なるままに書いてみたいと思います。
覚えたこと
ホットキー
これは重要です。マウスに持ち替えたり、特定の場所をクリックしたりせずに操作が出来るとモタモタせずに済みます。テキストエディタやExcelのショートカットを沢山覚えておくと作業が早くなるのと同じですね。キーボードから手を離したくないので、とても助かります。グリグリするやつもキーボードだけで動かないのかな、と思いますが、3Dを扱うソフトウェアなので半ば諦めています。
私が覚えてよく使っているのは、以下のようなものです。因みに、Windowsでの操作です。
オブジェクトの操作
移動:g
拡大縮小:s
面の押し出し:e
回転:r
メッシュ追加メニュー表示:Shift + a
削除:x
複製:Shift + d
親子関係設定:Ctrl + p(複数選択後)
親子関係解消:Alt + p(対象選択後)
ベベル:Ctrl + b
ループカット:Ctrl + r
全選択:a
オブジェクトの結合:Ctrl + j(複数選択後)
面の差し込み:i(編集モード時)
トグル系の操作
3Dビューポートでのモード変更:Tab(or Ctrl + Tab)
編集モードでの選択モード変更:1,2,3(それぞれ点、辺、面)
サイドバーの表示・表示:n
透過モードのOn/Off:Alt + x
視点変更
正面図(こんな言い方あるの?):テンキー1
立面図:テンキー3
平面図:テンキー7
逆サイド表示:テンキー9
カメラ視点:テンキー0
グリグリする:Alt + 左マウスダウン + マウス移動
アニメーション系
キームレーム挿入:i(選択物によっては、別の効果がある)
アニメーション開始・停止:スペースバー
操作系では、特定の軸に沿って動かしたい、回したい、伸ばしたいというケースが有り、その時は、それぞれのホットキー押下後、軸(x,y,z)を押下すると、赤、緑、青の線が出てきて、その軸に沿った操作が出来ます。回転の場合は、更に度数を数値で入力すると、その角度の分回ってくれます。試してないですけど、移動の時も数値入れたらその分動いてくれるのかしら?
基本的には、デフォルトの設定のままで使っていますが、テンキーがないのと、マウスの中ボタンを無効化しているのとで、以下の様に変更しています。
テンキーを模倣:これでテンキーなしでも視点移動のホットキーが使えます。ただし、これをやると、編集モード時の選択モードのホットキーが無効化されます。重複しているので当然と言えば当然ですが。
3ボタンマウスを再現:3ボタンマウスが無くても、或いは中ボタンを無効化していても、グリグリ出来る設定です。

ホットキーの設定はカスタマイズすれば色々出来るはずですが、あまり特殊なことをやると、PCが変わった時に効率が落ちるので、これは絶対、と言うもの以外はデフォルトの設定でやるのが良いと思っています。
モディファイア
正直、使いこなすほど高度なことは出来ないのですが、以下のものを使う頻度は高いです。正確には参考にしている動画の主が使っている、ということですけど。
配列
ブーリアン
ソリッド化
サブディビジョンサーフェス
UVワープ
パーティクル
エミッション
ヘアー
オブジェクトコンストレイント
これも大したものは使えません。
回転コピー
トラック
パスに追従
マテリアルノード
ノードの世界がイマイチなんです。意図を持って使えるのは、プリンシプルBSDF、画像テクスチャ、カラーバンプくらいでしょうか。それ以外はYouTuberのいいなりです。
ボーン(アーマチュア)
ほとんど使えないと言っても良いような。IKが少し分かる感じですね。
グラフエディタ
アニメーションをつける時に少し使った程度ですが、振動させたりグラグラさせたりするのに良いですね。ノイズとかサインカーブとかロガリズムとか。
これから覚えたいこと
UV展開、マテリアルノード、スカルプトがさっぱりです。スカルプトはさっぱりと言うか、彫刻家のセンスがないので、使えないと思います。まあ、IT屋としては、Pythonスクリプトでゴニョゴニョ出来ると良いな、とは思います。
モデリングの精度を上げて精緻なものを作れれば、と思いますけど、いい加減な性格なので出来るかどうか。
うっかりしてやった失敗
気がついたらメッシュが死ぬほど増産
Shift + dで複製したあとEscでキャンセル、を何度もやっていて、気がついたらメッシュが死ぬほど増えていました…。複製はキャンセルされてなくて、複製後の移動がキャンセルされただけでした。そこまでの作業を全部捨て、一からやりなおしました。複製しても、元のオブジェクトと区別がつかないので、気をつけないとやばいです。
ルンバ制作手記
そういえば、今回はルンバでした。今回のはこれまでの総決算とも言える内容なので、色々書いておきたいと思います。
まず、完成品の外観です。




ボディ上部とバンパー
最初に手を付けたのは、ボディ上部のシルバーの部分です。シリンダーをゴニョゴニョして。覚えた面の差し込み、面の押し出し、ベベルを使って。その後、一回り大きいシリンダーを作って、外側の黒いバンパー部分。ここまでをもう少し精緻にやれば結果が変わっていたのかも知れませんが、まあ割と適当です。
ブラシ
そのあと、3本ブラシが出ている所です。ここは割りと時間がかかりました。

緑の所は、UV球をちょん切る▶頭頂部を切り取るくらいです。問題はブラシの部分です。根元はキューブを加工。先の方はパーティクルヘアーです。最初は円を作って、そいつから髪を生やそうと思っていたのですが、思わぬ方向に生えてしまい、どうしても直せず、UV球の北極圏あたりだけを切り取ってからパーティクルヘアーではやしました。
円で失敗したときのイメージです。

色々と調べていると、パーティクルヘアーの向きは、法線(ノーマル)の向きと関係がありそうです。以下がビューポートオーバーレイで表示した法線です。法線の向きを変えれば良いんだろう、と思って色々と試してみたんですが、変え方が分かりません。メッシュの「法線を回転」というメニューが有ったのでやってみたんですが、結果変わらずでした。考え方を変えまして、UV球の頭頂部に毛を生やす作戦に変更して成功しました。幾何学的に言うと、元の図形を変えずに法線を変えるなど出来るはずがないので、そもそも円から図のX軸方向に毛を生やすなど出来ないのでしょう。

UV球の頭頂部に毛を生やしたあとは、それを配列で並べて3X3の頭頂部を根元に埋め込みます。配列の所でも落とし穴に勝手にハマりました。
頭頂部に毛を生やして配列を適用したんですが、増えた方の頭頂部に毛が生えないんです。こんな感じ。

これは、モディファイアの順序とパーティクルの設定に問題があるためとのこと。今の状態だと、パーティクルシステムが上、その下に配列があります。順序に意味があるなんて聞いてないぞ、と思いながら素直にやります。

理屈が良くわかってないのですが、この上下を入れ替えて、かつ、パーティクルの「モディファイアスタック使用」をOnにすると、上手く行きます。上下を入れ替えるのは、それぞれのモディファイアの右上のところのブツブツしてる所をつかむと出来ます。
「モディファイアスタック」という言葉から察するに、モディファイアはスタック(後入れ先出し)として認識されているってことなんかな、と思いましたが、それがどういうことか分からず、真相は闇の中です。ともあれ、上手く行ったイメージはこんな感じです。

配列と言うと、一つ疑問があります。多次元配列って出来ないの?ってことです。タネになるオブジェクトを、特定の軸だけではなくて、他の2軸方向にも伸ばせないのかなぁ、といつも思っていますが、設定画面見る限りそんな感じのがないので、いつも一つの軸に伸ばしたあと、一旦モディファイアを適用して、別の軸に伸ばしています。以下のようなことが、タネオブジェクトと3軸の配列で実現出来ないかなぁ、という意味です。まあ、なくても代替手段はあるので、一旦は良いですけど。

ブラシの最後は、緑のとこの真ん中に見える六角形の穴です。単に使ってみたかった、という理由ですが、ボルトというメッシュがあるので、それをはめ込んでみました。これを使うにはアドオンが要ります。


ここまで作って、緑のオブジェクトを親にして、三本のブラシとナットを子供として設定します。ブラシがいい感じに出来たので気分を良くして、今度は緑のローラー二本に突入しました。
ローラー
ローラーが正確な部品名かどうかは分からないのですが、以下の部分です。ねじれてますね。どうすっかな、と考えた挙げ句、円柱の真ん中をループカットして回転させれば良いんじゃね?と思いつきました。

ねじるだけなら、こんな感じにできます。

実際は凹凸があります。凹凸どうしよう?凸凹つけてそれからねじろう、という方針にしてやってみました。すると・・・。

上のとこが飛び出してるわけです。これは今でもどうするのが簡単だったのかわかりません。このあと私がしたことと言えば、上下の飛び出してる頂点を選択して、fで蓋をして回る、という作業です。

隙間がある!仕方ない、全部蓋をするしかねぇ。

ということで、ローラーが出来上がりました。今考えると、トゲトゲローラーが出来たあと、キューブをくっつけてブーリアンでちょん切れば良かったのかな、などと思いますが、もっとスマートな方法があるはずです。

いま、ブーリアンの方法でやってみたら一応出来ました。

車輪
若干わかりにくいんですが、凹凸があるんです。これをどうするか。

シリンダーを作って面を交互に選択して押し出し?
こんな感じですね。「法線に沿って面を押し出し」というやつでやります。

今から考えると、ループカットしてから押し出すのではなく、押し出してから、複製して回転して統合、ってやれば良かったのだと思います。よく見ると、押し出してるだけで横から見ると凸凹してないですね。何か変だと思っていました。本当に作りたかったのは以下のような形です。

前方の球
これは単なるUV球です。完全に手を抜きました。本体が動くに連れてここも転がせば良かったんでしょうが、気力がなくて省略です。
ブラシとローラーを収める凹み
ここは、凹みの形のオブジェクトを作ってブーリアンで重ねました。が今見ると、何かおかしいですね。ブーリアンモディファイアを設定するオブジェクトが逆だったのかも知れません。凹まされる方に設定してみたらこんな感じになりました。こっちが正しい。

ブラシなどの回転
背面の部品はほぼ出来たので、それぞれの位置に移動して、背面を親に設定します。これで本体が動くとみんな一緒についてくるようになりました。
ブラシ、ローラー、車輪は回転させたいですよね。ここからはアニメーションの世界です。みんな一緒なので、車輪もどきで話しをします。
エンプティ(十字)を追加して、車輪に回転をコピーというオブジェクトコンストレイントを設定します。ターゲットをエンプティにして、座標軸のトグルボタンをX軸(赤い軸)のみにします。

エンプティを選択した状態で、タイムラインの1の位置で、iを押してキーフレームを挿入し、タイムライン上少し離れたフレームまで移動して、回転Xの値を360度にします。もう一度キーフレームを挿入します。下のひし形の所をクリックすれば挿入できます。

さて動かすぞ、ということで、スペースバーを打つと、車輪が回ったのですが、でんでん太鼓のようにZ軸に沿って回転を始めました。エンプティはX軸に沿って回転しているのに、です。

これは車輪の回転がおかしくなってるんですね。下のYの所が90になっています。車輪を追加してY軸に沿って回転させたので当然です。で、これをリセットする方法があります。

車輪を選択した状態で、Ctrl + aを押下すると、「位置」「回転」「スケール」などの選択肢が現れます。ここで、「回転」を選択すると、現在の回転角度でリセットされて、以下のように角度が全部0になります。aなんでリセットではなくて、applyなのかな。

この状態でアニメーションすると、今度は思った向きに回ってくれました。同じ様なことをブラシ、ローラーに設定します。
取り敢えず、全部ブンブン回るようになりました。
本体の動き
ボディは円に沿って動かします。結果から見ると、こんなことする必要は無かったのかも知れませんが、動く方向が常に前方であるようにしたかったんですね。
ボディとエンプティに親子関係を設定して、エンプティを円に沿って動かします。エンプティに「パスに追従」コンストレイントを追加して、ターゲットをベジエ円にした上で、カーブに従う、をOnにします。

カメラ
最後にカメラでルンバを追っかけます。カメラを選択した状態で、「トラック」コンストレイントを追加し、ターゲットをルンバに設定します。

今回は、せっかく作った背面(下面)も写したかったので、カメラを上下に動かして、下からのアングルも撮れるようにします。フレーム1でカメラの選択してキーフレームを打ち、半周したところで、カメラの位置をZ軸の負の方向まで移動して、もう一度キーフレームを打ちます。

フロア
床がなければこれで良かったのですが、床の上を走らせたので、カメラが下に来るとルンバが見えなくなります。そこで、ルンバが半周したところで、丁度アルファが0になるように床のマテリアルにキーフレームを打って、無事解決です。
今回は、思ったより色々覚えたんだな、ということを改めて感じたので、色々書いてみました。
今回も楽しかった。
では。