Gaming Life

一日24時間、ゲームは10時間

MagicaVoxelで作成したモデルをBlenderでリギングしたい(個人用メモ)

 前回記事でStatic MeshをUE4に持っていく方法は確立できたがボーンを入れてアニメーションを付けるところまではまだできていない。いろいろ実験してみたので今回はそのメモ。

ai-gaminglife.hatenablog.com

QubicleのOptimizationオプションについて

 ボクセルで制作したモデルをplyで書き出してからBlenderでfbxとして書き出すとUVテクスチャがない、頂点、ポリゴン数が莫大に増えるといった問題がある。

 そこで、Qubicleの有料DLC、「Mesh Module」を購入することで自動でUV展開したテクスチャを得ることができ、更にボクセルモデルを自動で最適化し、ポリゴン数を大幅に減らすことができる。

f:id:ai_gaminglife:20180516175718p:plain

 file -> export -> fbx でexport時のオプションを設定できる。最適化に関わるのは "Optimization" のところ。"None"、"Non-Manifold"、"Manifold"の3つの選択肢がある。

 "None" は目に見えない部分の頂点が削除される。これはBlenderの重複頂点を削除でも出来るのでテクスチャを得る以外の目的で使うことはなさそう。

 "Non-Manifold"は最もポリゴン数を減らすことができる。しかし、このオプションは形によって、"not watertight"、水密にならないのが問題。つまり一部の辺が画像のようにつながらなかったりする。一切形を変更しないStaticMeshであればこれでも問題はないが、ボーンを入れてアニメーションさせるSkeletalMeshとして使用するとつながっていない辺が裂かれてしまい問題。

 "Manifold" は "Non-Manifold" より多くのポリゴンを必要とするが、 "Non-Manifold" で問題であった非水密性が解決できる。

 というわけでMagicaVoxelで作成したStaticMesh用のモデルは基本的に "Non-Manifold" 最適化をかければいい。SkeletalMesh用のモデルは "Manifold" を使う…と言いたいところだが話はそんなに単純ではない。詳細は次に。

参考サイト http://minddesk.com/learn/article.php?id=18 http://minddesk.com/learn/article.php?id=30

各手法で作ったモデルをMixamoでリグ付けしてアニメーションさせてみる

 MagicaVoxelで作ったモデルをBlenderでボーンを入れられるようにするには大きく分けて以下の方法が考えられる。

  1. MagicaVoxelでply形式でexport
  2. Magicavoxelでobj形式としてexport
  3. qb形式で書き出した後"Non-Manifold"最適化をかけてfbx or obj形式でexport
  4. qb形式で書き出した後"Manifold"最適化をかけてfbx or obj形式でexport

 1は色を頂点カラーとして保持しているためゲームエンジンで利用するためにUVテクスチャに頂点カラーをベイクしたい。しかし、標準のBlenderではどうしてもズレてしまうのは過去記事を見ていただけるとわかるはず。

 2はパレットカラーをテクスチャとして持っている。しかしできることならUV展開したテクスチャを持ちたい。

 3は前述の通り水密性が保たれておらず、ボーンを入れ変形させると境目で裂けてしまう。

 で本命の4。これが一番良さそうに見えるのだが、ボクセルらしいアニメーションを得られない。四角形で形成されるボクセルモデルを三角ポリゴンに分けているからだ。しかもボクセルで作ったモデルの関節をボーンで無理やり曲げることで明らかに違和感のあるアニメーションになってしまう。

 こんな感じでどの方法もコレといった解決方法にはなっていないがものは試し。ブラウザ上で気軽にリグ付けできるAdobeのサービス、Mixamoを使ってアニメーションさせてみる。(3は試すまでもなくダメなので省略、1は事情により省略)

「Magicavoxelでobj形式としてexport」した場合

「qb形式で書き出した後"Manifold"最適化をかけてfbx or obj形式でexport」

 ぱっと見、「Magicavoxelでobj形式としてexport」が一番それらしい動きになっている。しかしコレではまだ納得できない……

考えられる解決方法

 Twitterで権田支配人(@GONDAman555)さんに教えてもらった方法がQubicleでモデルを分割するというもの。こうすれば違和感ないアニメーションが作れるかも……?しかしBlenderがワカラナイ()のでまだ実際には出来ていない。

おまけ

 現在Qubicleでパーツごとに分割してAutoRigProを使ってリグ付けしようとしている。AutoRigProはBlendファイルをUE4に書き出すのに優れたアドインの一つらしく、コレでうまくいけばUE4上でのリターゲットも容易にできそう。しかし例によってBlenderワカラナイのでドキュメントや解説動画とにらめっこしながら格闘中……

MagicaVoxelで作成した3DモデルをUE4に持っていく方法・完結編(Qubicle使用)

 とうとうMagicaVoxelで制作したモデルをUE4に上手く書き出す方法がわかったのでまとめ。過去記事は以下の通り。

ai-gaminglife.hatenablog.com

ai-gaminglife.hatenablog.com

ai-gaminglife.hatenablog.com

 今回はSteamで販売されている「Qubicle」(1980円)とその追加DLC、「Qubicle Mesh Module」(2480円)を使用する。Qubicleを通して書き出しすることで頂点を減らし更にUV展開したテクスチャも得る事ができます。神ツール!

MagicaVoxelで作成したモデルをQubicleに持っていき調整

f:id:ai_gaminglife:20180516175650p:plain

 今回はMagicaVoxelでこのモデルをUE4に持っていく。Export形式は「qb」。これはQubicle対応の形式らしい。

 続いてQubicleを起動。先程書き出したqbファイルを選択しロード。

f:id:ai_gaminglife:20180516175701p:plain

 Transformから 「Flip Z」を選択してZ軸を反転させる。モデルの中心がずれているので MagicaVoxelでの中心とQubicleエディタ上の座標原点を揃える。

f:id:ai_gaminglife:20180516175710p:plain

 File -> Exportから FBXを選択。下画像の様な設定画面が出るので画像の様に設定する。「Unit Scale Factor」を変更するとモデルの大きさを変えることが出来る。

 これでFBXファイルとして書き出し完了。

f:id:ai_gaminglife:20180516175718p:plain

(必要な場合は)Blenderで調整する

 ボーンを入れる必要があるときなど調整が必要な場合はBlenderを一度通す必要がある。というわけでBlenderを起動。いつものように最初に配置されている立方体を削除し、先程作成したFBXファイルをインポートする。

 シェーディングをマテリアルに変更し、モデル全体に光が当たるようにライトを配置する。

f:id:ai_gaminglife:20180516175725p:plain

 見ての通りテクスチャがボケてしまっている。これはユーザー設定 → システムのミップマップのチェックボックスを外すことで解決する。

f:id:ai_gaminglife:20180516175736j:plain f:id:ai_gaminglife:20180516175745p:plain

 これで問題なくモデルにボーンを入れられるようになった。この辺りはまたいずれブログにまとめる。

 調整が終わったらFBXとしてexport。これでUE4に持っていくまでの調整は終了。

FBXをUE4にインポートする

 FBXをコンテンツブラウザにドラック&ドロップでインポート。特に設定はいじる必要なし。

 これで全ての作業完了…と言いたいところだがモデルを見てみるとテクスチャがボケボケ&色が一部滲んでいる。

f:id:ai_gaminglife:20180516175823p:plain

 これはUE4のテクスチャのデフォルト設定が問題。というわけでテクスチャファイルを開き、以下のように設定する。

  • Comression -> Compression Settingsを 「UserInterface2D」に変更する

  • Level of Detail -> Texture Groupを 「2D Pixels」に変更する

  • Texture -> Filterを 「Nearest」に変更する

 これでMagicaVoxelでの色そのままにモデルをUE4に持っていくことが出来た。

f:id:ai_gaminglife:20180516175836p:plain

 以上、時間は掛かったがほぼ理想通りにボクセルモデルをUE4に持っていくことが出来た。

 

UE4超初心者向けチュートリアルスライド(2)を公開しました

ai-gaminglife.hatenablog.com

 前回は想像以上の方に見ていただけたようでありがとうございます。サークルの第一回集会も個人的には上手くできたと思っているので、第二弾を作成しました。

 今回は

  • プレイヤーの攻撃の簡易実装
  • 敵キャラ、敵AIの実装
  • 敵のスポーン管理

を取り扱っています。二回分やっていただければ、ざっくりとしたUE4の使い方、そしてUE4の良さがわかってもらえると思います。

また、今回はalweiさんのこちらの記事をかなり参考にさせていただいております。毎度有益な記事を書いていただき本当にありがとうございます!

unrealengine.hatenablog.com    例によりSlideshare版は画質劣化が認められますので見づらい場合はこちらでスライドをダウンロードしておいて下さい。

https://drive.google.com/open?id=1m2l15N1dPxDpPCwRrfQgeM0aOjsg_94X

UE4超初心者向けチュートリアルスライド(1)を公開しました

 大学でゲーム制作サークルを立ち上げた(唐突)。その最初の集会用にUE4超初心者向けチュートリアルスライドを制作しました。そこそこ有用なものだと自負しているのでこちらのブログにも公開します。

 なお、下記のzipファイルをダウンロードする前提で話が進むので、先にこのファイルをDLしてからチュートリアルに取り組んでください。(容量が大きすぎて警告が出るようですが無視して下さい)

 誤字脱字は多めに見て下さい……。

(追記) slideshareに上げたスライドの画像がかなり劣化しているようです。恐らくpptxの容量が大きすぎて劣化が起きているのだと思われます。zipファイルにpptxファイルを含めているので、見づらい方はそちらを見て下さい。

(訂正) スライド中でParagonアセットのことを1200万ドル稼ぎ出したアセット、と紹介していますが、正しくは1200万ドル相当の開発費をかけたアセット、でした。完全にこちらの勘違いです。申し訳ありません。

(追記2 2018/04/25)  一部変更を加えてスライド、zipファイルを再アップしました。どうも画質劣化はSlideshareの仕様のようです。非常に見づらいので、実際にやってみる方はzipファイルの中に含まれているpptxファイルを参照して下さい。

(追記3 2018/04/28) 更に誤字脱字を修正してSlideshare版のみ再アップしました。

https://drive.google.com/open?id=1mgs5w6d9MT3pIcWE4A2OG4PkpQQ1hCWd

UE4の乱数生成BPの実装を見てみる(1)(Random integer in range)

 なんとなくUE4Minecraftのようなランダム地形生成アルゴリズムを実装してみたい、という気持ちになり、最近乱数について調べている。その中で、UE4の乱数生成はどうやっているのか見ておく必要があるだろう、ということでエンジンソースを時間を見つけて読んでいる。個人的なメモ程度の情報しかないが、暫くシリーズとして乱数生成の実装を見て、将来的にパーリンノイズやらよく使われるノイズ関数の実装、最終的には地形生成アルゴリズムを作っていきたいと思う。

 第一回はRandom integer in rangeについて。


  • UKismetMathLibrayにブループリントのMathLibraryの実装が載っている (UE_4.18\Engine\Source\Runtime\Engine\Classes\Kismet)

  • int32 RandomIntegerInRange(int32 Min, int32 Max){ return FMath::RandRange(Min,Max);}

 ブループリント本体。

  • int32 RandRange(Min,Max)
    {
    const int32 Range = (Max - Min) + 1;
    return Min + RandHelper(Range);
    }

  • int32 RandHelper(int32 A)
    {
    return A>0 ? Min(TruncToInt(FRand() * A), A-1) : 0;
    }

  • float FRand() {retrun Rand() / (float)RAND_MAX;}
    (UE_4.18\Engine\Source\Runtime\Core\Public\GenericPlatform\GenericPlatformMath.h)

コメント:Returns a random float between 0 and 1, inclusive.

  • int32 Rand() {return rand();}

コメント:Returns a random interger between 0 and Rand_Max,inclusive

  • int32 TruncToInt(float F){ return (int32)F;}

 なんとstd::rand()を使って乱数生成していることが判明。以前の記事でも触れたがstd::rand()は生成範囲が狭く、線形合同法と呼ばれるあまりよろしくない乱数生成アルゴリズムを採用しており、このせいで、乱数の周期があまり長くないという問題がある。より良い地形生成をしようと思ったらUE4標準の乱数生成ライブラリに頼らず、MT法などを使った乱数生成アルゴリズムを自前で書いたほうが良さそう……。

 ちなみに以前書いた乱数についての研究記事は以下。

ai-gaminglife.hatenablog.com

ai-gaminglife.hatenablog.com

 次回はfloat乱数を見てみようと思う。

Substance Painter2018で塗りつぶしレイヤを使うと色がにじむ問題(検証用モデル配布有り)

 最近はぷちコンが終わりUE4のモチベが下がっているのでC++と3D周りのソフトの勉強をしている。(ぷちコンの感想はいずれ上げます)

 で、Blenderでつくったモデルを下の画像のように適当にシーム付けしてUV展開、それをFBXとして書き出してSubstance Painterでマテリアル作ってUE4にもっていこうとしていた。そこで嫌な問題にぶち当たってしまった。

f:id:ai_gaminglife:20180407165447p:plain

 (モデルの完成度はさておき)塗りつぶしレイヤを用意し、Polygon Fill -> UV Chunk FillでUV島単位でブラックマスク画像を作成し塗り分ける。SPは塗りつぶしレイヤでざっと塗り、細かい汚しなどを3Dペイントしていくという使い方をしていくものだととあるサイトで学んだのでそのようにしたのだがここで問題発生。

f:id:ai_gaminglife:20180407165504p:plain

 一件何の問題もなく塗り分け出来ている用に見えるが、拡大して見てみると非常に分かりづらいのだが、一部が黒くにじんでいる。

f:id:ai_gaminglife:20180407165516p:plain

 流石にわかり辛いのでもう少しわかりやすくにじみが出ているモデルを。

f:id:ai_gaminglife:20180407165529p:plain f:id:ai_gaminglife:20180407165541p:plain

 拡大してみると下の画像のように端の部分でわずかながらオレンジ色に滲んでいる。どうやら隣接するUV島の色が隣に滲んでいる様子。

 ぶっちゃけ注意して見ないと気づかないレベルなので無視して作業を進めても良いのだが一度気づいてしまった以上無視できない性分なので他にやるべきことがあるのに暫くコレばかり調べてしまっている。Twitterで色々な方に話を聞いてみたがSP2018ver固有の問題と言った話も飛び出しぶっちゃけ自分には手に負えない。

 というわけで、ブログ冒頭で例として見せた緑色の大砲のようなモデルを公開します。もし原因がわかったら教えていただけると助かります。

 リンク(https://1drv.ms/f/s!AgAyqT_F2n2a60kx43LPxmCjkwK-)

 自分なりに考えた原因は

 3つ目なら泣く。

 

学生向け・Substance Desinger、Substance Painter事始め(1)

 2018年現在、私は大学生なのですが、今更言うまでもなく、学生は教育向けという名目で様々なサービス、ソフト、ハードを破格の価格で手に入れることが出来ます。

 PBRマテリアルを作成できるSubstance Painter、プロシージャルなテクスチャを作成できるSubstance Desingerの開発元として知られるAllegorithmic社も学生向けサービスを展開しており、なんと学生であれば上述のSubstanceソフト等を無償で使用できます(商用利用不可)。私も学生証を手元のスマホで撮影し、それをAllegorithmic社に送ると数分で学生ライセンスを得ることが出来ました。本当に審査しているのだろ(ry

 Substance DesignerもSubstance Painterも現在多くの有名タイトルに採用されており、UE4との連携も容易に出来ます。ツールに頼りきるのは本当の実力にならず良くないですがSubstanceについては十分学ぶ価値があると思います。どちらのソフトも基本的な操作は有志が公開しているチュートリアル動画を見て勉強できますが、細かい仕組みはそれだけでカバー出来ません。

 「Substance Share」 というAllegorithmic社が公式で運営しているコミュニティサイトを利用すればSDについては多くのことを学べます。有志が作成したハイクオリティなマテリアルをダウンロード出来、その中身を見ることができるからです。無償でSDを手にしている学生ユーザーでもDLまでできる優しい仕様。

 こちらのサイトでDLしたレンガのマテリアルを参考にした結果、まだ使い慣れていない私でも以下のようなマテリアルを作成することが出来ました。

 Substance Designerは使いこなすとエフェクト用のテクスチャ等多くの事に使えます。プロが使うソフトを制限なしに無償で使い倒せるのは非常に稀なので、学生でCG、ゲーム制作に興味のある方は是非DLしてみて下さい。

(追記)ブログでのしっくりくる文体が定まらない…暫く口語調だったり文語調だったりコロコロすると思います…