妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

Blender修行(22) 謎の[F]ボタン、フェイクユーザーの仕組み

「アニメーションを作る前にもう1つ重要な仕組みがあって、それがフェイクユーザー。Blender用語なんだけど、これがないと折角作ったアニメーションが消えてしまうおそれがある」

妹「セーブするボタンなの?」

「そうといえばそうなんだけど、Blenderの初心者向けの解説を見ると、"アニメーションを作ったらすぐ[F]のボタンを押すように。押さないとデータが消える場合があります"……というようなことが書いてある。その説明は間違いではないんだけど、この[F]はアニメーション以外でも出てくる仕組みだから、理屈もわかってた方がいいと思う。つまり、どういう場合にデータが消えるのかという話」

f:id:una_unagi:20160708213810p:plain
f:id:una_unagi:20160708214413p:plain

「とりあえず、WalkとJumpというアニメーションを作った状態。Blenderでは複数のアニメーションを1つのBlendファイル内で管理出来る。ただ1度に選択出来るアニメーションは1つだけ。今はWalkの方を選択してる。Jumpは予備みたいな状態になってる。これはいつでも切り替えられる」

妹「今のところ特に問題はなさそうな」

「ただこの予備のアニメーションというのは、アウトライナーの"全てのシーン"の中に出てこない。使用中のアニメーションが出るだけ」

f:id:una_unagi:20160708214748p:plain

「問題はBlenderがセーブする時の仕組みで、予備のやつは保存しないことになっている。つまり普通に保存すると、次にそれを読み込んだ時にはJumpのデータが消えてることになる」

妹「Jumpの方も選択したらいいのでは?」

「そっちを選択するとWalkの方が予備になってしまう。アーマチュアごとに、1度に1個しかアニメーションは選べない。アーマチュアをコピーして、そっちで予備のアニメーションを使えば、両方とも使用中になるから、保存される」

妹「後でゲームで使うんだから、予備のも保存してくれればいいのに」

「要らないからゴミだと判断するんだよ。容量の無駄だから消す。UE4でも、どこからも参照されてないデータを自動的に消す、ガベージコレクションの仕組みが入ってたけど、あれと同じ」

妹「でもそれ要るやつ……」

「そういうこともあるから、消させない機能というのがある。それがフェイクユーザー。いちいちアーマチュアをコピーしてとかやるの面倒だから、とりあえず[F]を押したら、後で使うかもしれないデータだから、仮のアーマチュアで使用されてることにしとこう、っていう動作になる。わかりやすいように一覧表示でもFの文字が表示される」

妹「フェイクユーザー……偽の利用者? っていうのは、この場合誰のことになるの?」

「使ってる人間とかじゃなく、アーマチュアとかのオブジェクトデータのことをユーザーと言ってる。これはアニメーションだけでなくテクスチャとかもそう。テクスチャのユーザーがマテリアル、マテリアルのユーザーが(3D)メッシュ」

妹「要するに親ってこと?」

「だいたいそんな感じ。ユーザーが0だとそのデータは保存されないのは全部そうだけど、普通はユーザーが1人以上居るから問題ない。ただ複数のアニメーションの場合は絶対のこの問題が起きるから、最初に[F]を押しておくっていう注意書きがある」

f:id:una_unagi:20160708221753p:plain

アウトライナーで"孤立データ"を見ると、ユーザーが居ない、捨てられる寸前のデータがある。何故かスカルプトモードのブラシもここに入っているんだけど。Fが付いてるやつはフェイクユーザーだから消されないし、消したい時はFを消せば自動削除の対象になる」

妹「自動的に削除するんじゃなくて、削除ってした時にだけ消してくれたらいいのに」

「1つのデータを色んなとこで使う場合もあるから、ユーザーがいるうちは消さないっていう、誤削除を防止する仕組みでもあるんだよ。それにフェイクユーザー作ればいいだけだから楽ともいえる。複数のアニメーションを1つのファイルに保存すること自体が出来ないソフトも多いから。そういう場合1つのアニメを時間ごとに区切るとか、別ファイルに保存するとか、フェイクユーザーよりもだいぶ面倒くさいことになる」