【Blender】boneが逆回転してしまう現象の私的な調査メモ

というわけで、前に続き Blender に関するお話です!
今回はアニメーション設定時に bone が逆回転してしまう現象について調べてみました!

特に縦横にキャラクターを回転させるアクションを作った際に起こりがちです。
自分のように頭身の低いキャラを使っている場合はモロに響く問題です。

どうやら「Quaternion」が関係してくる話のようです。
何とかならないか調べてみたので、その内容について書いておきます!

※書いている人が数学全然ダメなので、問題ないという保証はありません。
試す際は自己責任で!

逆回転するフレームを修正したフレームで登録する

逆回転する部分を手動で補完し登録することで、「内部的に逆回転しているが描画されない」ようになります。
力技っぽいアプローチですが、Quaternion の回転制限を受けずに修正できます。

shot2ss20161112234715154

実際にやってみるとなかなか大変です。
「10フレームかけて1回転する」アニメーションを直す場合でも、逆回転する度にポーズを修正してキーフレームを登録する必要がある上、手動なので動きもぎこちなくなってしまいます。
とは言え、Quaternion にした状態で180度以上回転させるにはこれしかないようです。

boneのRotationModeを変える

そもそもこの現象は、Quaternion が -1~1 の間しか表現できないため、その最短の補完を行う際に起こるみたいです。
角度でいうと -180~180 ですね。
これ以上に回転を掛けようとしなければ発生しないようですが、キャラクターの回転アクションを180度以内で収めるのは無理があります。

このあたりのお話は Unity の公式マニュアルに書いてあります。
https://docs.unity3d.com/ja/current/Manual/QuaternionAndEulerRotationsInUnity.html
https://docs.unity3d.com/ja/current/Manual/AnimationEulerCurveImport.html

shot2ss20161112235006561

で、Blender の bone はデフォルトの回転モードが Quaternion になっているそうです。
これを Euler に切り替えればOKです。

テスト用に作ったウサギちゃんで試してみます。

20161113_02

20161113_01

上は回転モードが Quaternion、下は Euler で、X軸に220度ほど回転させた際の動きです。
Quaternion では逆回転して戻ってしまいますが、Euler ではしっかり1回転してくれます。

shot2ss20161112235208705

この状態で Unity にインポートした場合、Unity 側で自動的に Quaternion のキーフレームを考慮したモーションに修正してくれるようです。
リサンプリングした結果が厳密ではない場合、「Resample Curves」のチェックを外すと Euler のキーフレームをそのまま使えるようです。

ただし、Euler を使うと「ジンバルロック」という問題が発生するようです。
3方向の特定の軸が重なった場合に2方向にしか自由に動かせなくなる・・・的なものらしいですが、自分もよく分かりませんorz
ぐぐった感じでは、1~2軸のみ動かす場合は Euler でも問題ないようです。
Blender の場合は bone ごとに回転モードを選択できるため、逆回転しうるものだけ Euler にするのも有りかもしれません。

shot2ss20161112235339520

また、回転モードを変えた bone はキーフレームを設定し直す必要があります。
(Rotation だけ黄色くなっていない=キーフレームが設定されていない)
モーション作成中に変えると面倒なので、アニメーション系の作業に取り掛かる前に決めておくのがよさそうです。

まとめ

そんなわけで、Blender で bone が逆回転する現象について調べてみました!
かなり難しい話題なので、また何か分かったら考えてみます。

【Blender】アニメーションデータを別のBlenderファイルにコピーする方法

というわけで、今回は Blender のファイル間コピーに関するお話です!

shot2ss20161029191337676

自作ゲームキャラのモデルを別ファイルで作り直したのですが、アニメーションデータのコピー方法が分かりませんでした。
ぐぐっても「キーフレームのコピー」とかそんな話題が多いですorz
Blenderのアペンド機能でいい感じにできたので、メモしておきます!

shot2ss20161029191406444

ちなみに作り直しているのは、本ブログで度々登場する「マリンパ」というウサギっぽいキャラです。
適当に作ったモデルで通していたので、リデザインしてモデリングし直したところです。
ある程度完成したら作り方などを紹介しようと思います!

ボーンのコピー

ボーンに限った話ではありませんが、単なるオブジェクトであれば「Blenderを2つ起動→片方でコピー→片方でペースト」でいけます。
Ctrl+C でコピーして、Ctrl+V で貼り付け・・・なんてこのブログを見ている方ならご存知かと思います!

shot2ss20161029191731003

shot2ss20161029191745003

ただし、マテリアルやテクスチャが付いたオブジェクトをコピペした場合、それらの情報も持ってきてしまいます。
再利用するなり、データブロック削除 (Shift+×クリック) で整理しましょう。
特にオブジェクトやマテリアルの名前が重複して接尾辞 (001とか) が付いてしまっている場合があるので、その手の命名に神経質な人はご注意下さい。

アニメーションデータのコピー

ボーンのコピーは出来ましたが、アニメーションデータはくっ付いてきてくれません。
Blender にはアペンドという機能があり、これを使えば他のblendファイルのデータを持ってこれるようです。
元ファイル側でエクスポート等を行う必要がないので楽々です。

File→Append からインポートしたい.blendファイルを選択します。

shot2ss20161029192226650

.blendファイル内に存在するデータの一覧が出るので、インポートするデータを選択します。
かなりいろいろ選択できるみたいです。

shot2ss20161029192348171

「Action」内にあるアニメーション名を指定することで、キーフレームごとインポートされます。
Shiftキーを押しながら選択することで複数選択も可能なので、一括でのインポートもできます。
選択したデータはオレンジ色になります。

shot2ss20161029192431241

選択したら右上の「Append from Library」を選択します。
ActionEditor でアニメーションがインポートされているか確認しましょう。

shot2ss20161029192829560

問題なさそうです!
インポートしたアニメーションはFボタン (上画像の赤い丸) を押して関連付けておきます。

まとめ

そんなわけで、Blenderファイル間でのデータコピーについて調べてみました!
特にモデルやアニメーションのコピーは多用しそうなので、しっかり覚えておきます。

【Blender】モデリング練習メモ「ペンギン」編

というわけで、久しぶりの Blender モデリング練習です。
今回のお題は「ペンギン」です!

shot2ss20160903183123386

すごくペンギンっぽくないですが、ペンギンです!

「海の仲間たち」というゲームタイトル故、ペンギンは外すことができません。
動物園や水族館で大量のペンギンが泳いだりぼーっとしていたりする姿は微笑ましいですね。
卒業研究として提出したゲームでもペンギンがプレイアブルキャラとなっていたりします。

しかしながら、今回は敵として作成する予定です!
というのも、プレイヤーキャラは既に3キャラで決まっており、アシストキャラとしてもどこか乗れるような体格をしていないためです。
また、ペンギンといえばお腹で滑ってくるイメージもあるので、敵としての攻撃方法も作りやすいです。

ここまでくると一種のタイトル詐欺のようにも思えますが、「敵に洗脳されている」とかそれっぽい理由はいくらでも付けられます。
「スーパーマリオ64」でも、ピンク色のボム兵と黒色のボム兵で敵味方別れていますよね!
つまり気にしなくて良いということです。

モデリング

何もなしで3Dモデルを作るのは難しいです。
というわけで、今回も補助用に(下手な)絵を描いてみました!

penguin3

これを Blender の背景として設定し、頂点を作っていきます。
いつも通り面を2当分して Mirror モディファイアを付与し、下書きに沿って頂点を延ばします。
真ん中を開ける必要があるので、ある程度面を細分化した後に中央をごっそり消してしまい、頂点を繋ぎ合わせました。

shot2ss20160903183532873

エルードや頂点追加&面貼りを使ってそれっぽい形にします。
SubdivisionSurface モディファイアを追加し、更に頂点を動かして調整していきます。

shot2ss20160903183331033

やや歪んでいる気もしますが、とりあえず完成しました。
敵として出ることを想定しているため、やや小柄な体型です。
「これはペンギンなのか」と言われるとそれまでですが・・・腕とか頭はそれっぽくなっている気がします。

攻撃方法は決めていませんが、氷の息を吐いたりでいいんじゃないでしょうか (適当)
あるいはスケート靴で滑って (後述) くるくる回転攻撃とかでも良さそうです。

スカーフ

自作キャラは首元に何かしら付けているものが大半です。
マントやマフラー、ストールなどなど・・・。
純粋な動物としてモデリングしても面白くないこと、二足型キャラクターモデルの形状的に首元が一番いろいろ付けやすい(と感じる)ためです。

shot2ss20160903183643512

これも Cube をエルード、ループカットであれこれして形にしています。
ある程度できたら SubdivisionSurface を追加して調整します。

shot2ss20160903183615784

何かスカーフっぽくないですが、形自体は下書きに近いので良しとします。
布としてのシミュレートは Unity の Cloth コンポーネントで行う予定なので、Blender 側ではモデリングだけにしておきます。

これを機に、主要な敵キャラにお揃いのスカーフを巻くのも一興かもしれません。
こういうのは敵側ではなく味方側がやっていることが大半な気もしますが・・・。

スケート靴

上でも書きましたが、ペンギンはお腹で滑るイメージがあります。
実際のペンギンもお腹で滑ったりしているみたいです。

が、モデルを見た親が「スケート靴にして滑れるようにしなさい」と言い放ちました。
スケート靴を履いているペンギンなんてなかなかいないと思いますが、下半身が寂しかったので取り入れることに。
最早ペンギンとして作った意味が崩壊している気もしますが、自分の開発ではよくあることなので気にしないようにします!

shot2ss20160903183758584

スケート靴をモデリングしてみました。
競技によって形状に微妙な差があるようですが、こだわる部分でもないため一般的なゲームっぽいスケート靴を作っています。

エッジ部分の曲線が曲者・・・かと思いきや、これもSubdivisionSurface であっさり解決。
このモディファイアを知ってから世界が変わったと言っても過言ではありません。
スカルプトモードで形作るなら「Sculptris」等もっといいソフトがあるので、尚更ですね。

shot2ss20160903184053799

元のオブジェクトはこんな感じ。
エルードや頂点移動、ループカットなどを知っていれば簡単にできる形です。

まとめ

そんなわけで、ペンギンのモデリングに挑戦してみました!
愛着が沸くとは言えない出来ですが、昔ほど崩壊したモデリングでもないので、妥協ラインでしょうか。
もっといろいろ作って経験を積んでいきたいですね。

【Blender】モデリング練習メモ 「カンガルー」編

というわけで、Blender のモデリング練習シリーズ第3弾です。
今回のお題は「カンガルー」です!

shot2ss20160601232702749

最もポピュラーな陸上の哺乳類ですね。
ゲーム的にはアシストキャラクターの扱いで、プレイヤーが乗って操作できるような感じにします。
大きな体格でパンチとキックをメインに戦うインファイターです。

専門学校の卒業研究に作ったゲームでは、操作キャラクターとして選択できる1匹でした。

shot2ss20140524211929015

今見ると全然カンガルーに見えなかったりします。
カンガルー最大の特徴の袋があるので何とか・・・といったところでしょうか。
今回はもっと現実のカンガルーに近づけつつ、パンチやキック、ジャンプができる見た目を目指します。
育児嚢も付ける予定なので、性別はメスになりそうです。

モデリング

やる前から分かっていたことですが、カンガルーをモデリングするのは非常に難しいです。
やらないことには始まらないので、下手な自分にめげずに作っていきます。

最も難儀するのは頭~胴体~尻尾に掛けてのバランスです。
これをフィーリングでやるのは無理があったので、さくっとゲーム的なカンガルーを描いてみました!

kangaroo

絵の上手い下手はさておき、モデリングの補助くらいにはなりそうです。
今まで通り Plane に Mirror モディファイアを付け、伸縮を駆使して形を作ります。

shot2ss20160531232336384

ひとまず完成したのがこちらです!
ボクシンググローブや靴、上着部分は別オブジェクトで、それ以外は全て1つの面から作られています。
所々気になる部分はありますが、概ねカンガルーっぽくなっているのではないでしょうか。

shot2ss20160531232420671

カンガルーの尻尾って結構長かったりします。
胴体部分はエルード→拡大/縮小の繰り返しで何とかなりますが、胴体~尻尾の部分を伸ばしていくのが難しかったです。
多少面が伸びてしまうのを覚悟で「エルード→X軸に回転→移動させて微調整」を繰り返して作っています。

腕は後々アニメーションで動かすので割と適当です。
脚も同様ですが、ぴょんぴょん跳ねるにはやや小さいかもしれません。
WeightPaint を設定する時にまた考え直す予定です。

育児嚢の作成

カンガルーといえばコレという人も多いのではないでしょうか。
「育児嚢」と呼ばれる、子供を育てる袋ですね。

胴体から辺を伸ばして作りたいところですが、丸みのある袋を胴体から伸ばして作るのはかなりきついです。
妥協して UVSphere の上半身を削除したもので代用します。
大きさと位置を整えた後、Solidify モディファイアで少し厚みを付けます。

shot2ss20160531232457839

袋だけあればカンガルーに見えると思いましたが、やっぱり子供が入っていてこそな気もします。
ということで、親カンガルーをそのまま小さくしたものを少し調節して入れてみました。
作り方は超手抜きですが、それっぽい雰囲気にはなった気がします。

ボクシンググローブ

腕に付けるボクシンググローブをモデリングします。
親指があって握っているようなグローブが出来れば良いのですが、そんなテクニックはないので丸いシンプルなもので妥協します。

shot2ss20160531232551519

UVSphere に「Decimate」モディファイアを追加し、「Un-Subdivide」で適度に頂点数を減らします。
腕の形状に合うように頂点移動や拡大・縮小します。
装着部分は Cylinder を切り抜いたものに Solidify モディファイアを掛けて厚みを出します。

何かパッとしない気もしますが、ひとまずボクシンググローブです!

上着部分

そのままカンガルーでは味気ないので、首~胴体にかけて服を着せてみます。
Cylinder をエルードで伸ばしつつ、胴体に合うように拡縮を加えていきます。

shot2ss20160531232734960

形作った後、腕の部分を開けていきます。
Subdivision Surface を適用した状態で、穴を開ける中心となる頂点を削除した後、周りの頂点を移動させて調節します。
面倒なら boolean モディファイアで Cylinder を選択してぶち抜いても綺麗に開けれます。

余談ですが、親から「カンガルーが服着るのって変」とか言われました。
モデリング練習ですが、ゲームキャラの作成も兼ねているので無粋な突っ込みです。
主人公勢からして「マントを付けたウサギ」や「ストールとフード被ったリス」なので尚更ですね。
「ガチ動物」よりは多少人間味がある方が愛着が沸く・・・と自分は考えます。

部分的なマテリアルの設定

こいつは近いうちにアニメーションを入れて Unity へインポートする予定なので、マテリアルの設定もしてみました。
今まで「1つのオブジェクトに複数のマテリアルを設定」のやり方が分かりませんでしたが、プロパティのマテリアルからサクっとできるようです。

shot2ss20160601230758028

マテリアルを設定する面をエディットモードで選択状態にします。
その状態で適用するマテリアルを選択。
予め+ボタンからマテリアルを追加しておくと楽です。

shot2ss20160601230831050

エディットモードの場合、「Assign」「Select」「Deselect」の3つのボタンが表示されます。
Assign ボタンを押すことで、選択中の面に対してマテリアルが適用されます。
Select ボタンを押すとマテリアルが適用されている範囲を選択状態にし、Deselect は逆に選択状態を解除します。

shot2ss20160601232702748

現時点で Unity へインポートするとこんな感じになります。
ちょっと色が濃いのと、思った以上に縦長な体格が気になるところです。
とりあえずアニメーションを入れて雰囲気を見てから修正する予定です。

まとめ

そんなわけで、今回はカンガルーのモデリングに挑戦してみました!
今までの練習で作ったモデルの中では上出来な方かと思われます。
やや現実のカンガルーに近い気がするので、もっとゲームのカンガルーっぽくしていくつもりです。

Blender 関係のサイトのモデルを見ると非常に上手で、自分の作成物だけやけに低クオリティな気もします。
まあそのうち上手くなる・・・と信じたいです。

【Blender】モデリング練習メモ 「ハリモグラ」編

というわけで、前回に続いて Blender の練習編です!
今回のお題は「ハリモグラ」です!

shot2ss20160526220329267

何故ハリモグラかと言えば、敵キャラクターとして手頃な性質を持つからです。
舌を伸ばして獲物をとったり、丸まるとウニのような可愛らしい見た目になったりします。
ローリングアタックとかできれば完璧ですね!

モデリング

「ハリモグラ」の画像をぐぐってもリアリティあふれるものばかりで、モデリングの参考にするには難易度が高いです。
イラストもいくつかあったので、いろいろな画像を参考にしながらイマジネーションで作ります。
前回同様、1つの面から伸ばしていく方法でやります。

shot2ss20160526220302754

妥協しつつ出来上がったのがこちら!
パッと見の出来は(自分の中では)まあまあですが、ハリモグラかと言われると微妙かも・・・。
どちらかと言うと「トゲの生えた犬」みたいなことになっています。
まあ敵キャラクターにするつもりなので、モデルとして破錠していなければ問題ないはず・・・。

ゲーム的な問題として、これをアニメーションさせるのはとても難しそうです。
この体格でどうやって丸まればいいのか・・・。
割と強引に bone を動かして、気合で丸めるしかなさそうですorz
あるいは前転するような感じでゴロンッとさせればそれっぽくは見える・・・かも。

背中のトゲの作成

ハリモグラの特徴と言えばやはりこれです!

shot2ss20160526215917842

背中に大量にあるトゲ!
「ハリ」モグラだけに、びっしり敷き詰めてアピールします。

これは Blender の Duplicate という機能を使って作っています。
あるオブジェクトを、別のオブジェクトの頂点や面に沿って複製できるものです。

やり方は下記サイトで紹介されております。
http://cg.xyamu.net/Blender/entry200.html

shot2ss20160525230552641

ただし、Duplicate はオブジェクト全体に適用されてしまいます。
特定の面に限定する方法が分からなかったので、範囲選択後に Pキー→Selection でオブジェクトを分割します。
これで特定の部分だけ別オブジェクトに出来るので、こちらに Duplicate を適用します。
分割したオブジェクトを動かしてしまうと、後で再結合するのが非常に難しくなるので動かさないことをオススメします。

shot2ss20160525223828800

個人的に躓いた点として、Duplicate を有効にした際、綺麗に面に沿ったトゲが生成されませんでした。
トゲとなる Cone の形を縦長にしすぎていたようです。
最初は Cone に何も変形を加えずに Duplicate を有効化し、後々で Cone を拡縮・回転させた方が上手くいきます。
その際、一方向に拡大しすぎると上の画像のようにバランスが悪いトゲが出てしまうので気を付けます。

ハリを Ctrl+Shift+A で実体化した後、分離した背中のオブジェクトを再結合します。
本体と背中を複数選択し、Ctrl+J で結合できます。
オブジェクトの堺目に不自然な線ができてしまう場合、エディットモードで全選択後、Ctrl+V→RemoveDoubles を実行します。

まとめ

そんなわけで、ハリモグラをモデリングしてみました!
オブジェクトの形作りは出来るようになってきている感じです。
とりあえず出来の良さは考えず、いろいろなものを作って慣れることを主眼に置いてやります。