【UE4】BPで気合のProcedural Modering
はじめに
Unreal Engine 4 (UE4) Advent Calendar 2017 の2日目です。
今回の内容はあまりオススメできませんが、気になったのでやってみた次第です。
先に参考図書である「Unity Graphics Programming」のリンクを貼っておきます。これをUE4に移植してみた、という内容です。 この本、割りとTwitterで話題になっており、初めて買えるタイミングであった技術書典3に僕も出展してたんですがなんとお隣のブースでした()
実際のサンプルコードはこちらに。
まあこのまま移植しても多々ミスって思うように表示されなかったり、ちょっと手を加えないといけない箇所もあったりして 割りと大変でした。はい。
Procedural Moderingとは
通常のモデリングはDCCツールと呼ばれる Maya, 3ds MAX, Blenderなどを用いて作成することが多いです。 それとは別に計算だけでモデリングすることです。参考図書には
ルールを記述し、自動化された一連の処理の結果、形を得るアプローチのこと
とされています。
応用例としては AirtoneのコレもProcedural Moderingしてマテリアルで演出しているそうです。
https://youtu.be/qssKpo8cHYwより
始める前に
さがしてみると、もんしょさんが先にやっていました。さすが!
もんしょの巣穴blog [UE4] ProceduralMeshComponentを使ってみる
さすがに複雑な計算をBPでやるのは骨が折れるので、ProceduralMeshComponent を使う場合はC++の方がいいと思います。
はい。のでこれをBPでやりました。すると代わりにたすさんの骨が折れました。
折れてるけどたいしたずれじゃないのでしゅじゅちゅなしでいけるとのことです
— たす (@tassjp02) 2017年10月31日
みなさまお気をつけてといいたいところだけど
ほんと酒も入ってないし何もないところで突然一人でこけたので、もはや強制イベントがここにあったくらいの勢いなのでみなさま強制イベントにはお気をつけて……
できたもの
先に完成イメージを見ておきましょう。よっしゃーできた!!と思っても知らない人には正直大したことないものなので 心が強い方が取り組むことをオススメします。
多少見栄えするようにTimelineでしゅるしゅる動かしたりしてますが、特に意味はありません。
こんな感じで頂点があります。
作ってみる
こちらに今回作ったアセットをサンプルとして置いておきます。 詳細な考え方は参考図書を読んで下さい。
とりあえずBaseクラスを作っておきました。BP_ProdeduralMeshBaseとしています。
Debug用にちょっと関数を用意してありますが、あまり頂点数が多いとUE4ごと死にます。気をつけましょう。
基本的にはこのDraw MeshをOverrideして使う感じです。
では板ポリを出して見ましょうか。継承したBP_QuadでDrawMeshをOverrideします。
するとこんなかんじ
わーい!これくらいならお手軽ですね。UVも設定してあげるとチェッカーの模様が出ます。 失敗してる / 設定してないと消えます。
同様にNormal, Tangentも設定できます。
移植時の注意点
だれもやらないとは思いますが、一応。参考図書がUnityなので、座標系、単位が違います。 またいくつかのindexに注意が必要です。(i >= length と i > length とか)
コードを何度も見直しても、間違ってる箇所が見つからない場合は、自分が見落としている可能性があるので 何日か空けて見直すしかありません。それでも思うように出来ない場合は手探りで調査します。(木の後半は手探りでした)
便利ポイント
Procedural Mesh Componentで生成したMeshはStatic Mesh化できます。
ここからCreate Mesh して保存すると、
とアセット化できます。
おわりに
最近どういうわけかUnityとUE4を同時に起動する時間が長くなり、謎の移植芸を身に着けてしまったようです。 動的にモデルを生成したい、モデルアセットはプロジェクトに入れたくない、BPしか使いたくないけどProcedural Moderingはしたい、などといった 特殊な人向けの内容になってしまいました。 最初のPlaneやQuadレベルだとやる意味をあまり感じませんが、木とかできると途端にすげぇ感がでますね(間に合ってよかった)。たぶんSpeedTreeを使ったほうが速い気がしました。
宣伝
UE4の動画教材(日本語)がこれからどんどんUdemyに出てきそうです。 僕のが一番最初に出たライトな感じのやつなので、興味があれば覗いてみてください。 こちらはちゃんと役に立つ系のものです()
ちょうどこの記事を公開する1時間くらいにalweiさんのが公開されたようです。
それとこの動画教材を作ったお話を 第2回UE4何でも勉強会 in 東京 にてLTするのでよければぜひぜひ。
【WinMR】バックパックPC + WinMR でUSB/Bluetoothが繋がらなくなった話
はじめに
こんなのをUE4で作りました
#UE4 + #WindowsMR (#WinMR #Acer) + Infinity Blade で無限に歩けるやつを作った with @Ash_Yin pic.twitter.com/tEGjwfbOwR
— てんちょー (@shop_0761) 2017年11月13日
これ、当初の予定では僕のバックパックPCを使って撮るつもりだったんですが、途中でうんともすんとも言わなくなり 急遽ノートPCを借りてやりました
おはなし
WinMRのせいでバックパックPCが死にかけててかなしみ
— てんちょー (@shop_0761) 2017年11月13日
環境
お外でやりました。PCはこれ。
WinMR の方はAcerのDevelopment Editionです。(コントローラーないやつ) 動画内で使ってるコントローラーはDellのやつです。
OSはこんな感じ。
グラボのドライバ
死兆星が見える
なんとかの拳で見えるアレです。見えると死が近いと言われるやつです。
今日のImmersiveの闇案件は死兆星からのUSB、Bluetoothの全滅事件。
— デコ・シ (@Ash_Yin) 2017年11月13日
撮影するためにいろいろ試行錯誤してる途中で、なぜか注視点が2つ見えました。 片目で見ても2つ見えたので???と思っていたら、今度はオレンジ色になりました。とりあえず動いてるからいいか、と思って続行。
こんな感じで画面上に謎の注視点のようなもの(仮称:死兆星)が出現した少し後に全てが動かなくなった pic.twitter.com/iubTh49yVc
— デコ・シ (@Ash_Yin) 2017年11月13日
電源がつかない
オレンジの注視点が見えた状態で歩きまわっても動画のように歩き回れなかったので、 おかしいなと思いPCごと再起動しようと思いました。なんとかなるでしょ、ぽちーっと電源ボタン長押しで一旦落としました。
今回は iPad Pro 10.5 + Splashtop Wired XDisplay HD で外部モニタとして使ってました。 ので通常のモニタ出力と違い、ちゃんとアプリが表示してくれないと状況がわかりません。 というか、それ以前に電源が入らなくなりました。バッテリーはまだ残っているはず…おや…?
USBが繋がらない
しょうがないので、デコ氏(@Ash_Yin)のおうちにお邪魔してモニタに繋ぎ確認することにしました。 電源に繋いでつくことはつきましたが、USBとBluetoothが反応しない…詰みでは…???
どの段階でUSBが来ないのか、チェックするためにダメ元でBIOS起動を試みるといける…おや!?!? どうしたものか…これ…
原因を調べる
さて、おうちに帰ってきて原因を調べることに。 事前にChrome Remote Desktop が起動時に立ち上がるようにしていたのが救いでした。 おうちに帰ってきてなんとか操作できるように…
Bluetoothどうなってるかなーと見てみると、
これは… pic.twitter.com/ykNLhTL6UC
— てんちょー (@shop_0761) 2017年11月13日
どういうことなのこれ
ドライバ入れ直せばいいかーと思って適当にググってる途中で、 intel usb 3.0 extensible host controller driver が無効になってることに気が付きました。
これ…有効にしてみるか…すると USB ルートハブ(USB 3.0) が現れました。 こいつも有効にするか…と有効にしてみるとUSBもbluetoothも生き返りました。
まとめ
Immersiveなヘッドセット 開発周りであわあわしてるのをよく見ますが、このようにドライバを無効にしてくるケースがありました。
まあしゃーないところはあるので、自己責任ということでお気をつけを…
リモートで操作できる環境を用意しておくことをオススメします…
【UE4】WindowsでiOS用アプリをビルドしてみた【ARKit】
はじめに
ARKitの動作はまだ未確認ですが、win機だけでiOSビルド & 実行が確認できました。 この方法があってるかかなり微妙ですが、一応動作例が多いほうがいいかなということで書いておきます。
【2017/11/10 16:10追記】ARKitの動作も確認したので、下の方に追記します
UE4 + ARKit (Macなし) で動いたー #UE4Study #EpicFriday pic.twitter.com/VrIi4k8GOR
— てんちょー / 筑野(ちくの)えり💕🍱 (@shop_0761) 2017年11月10日
動作環境はUE4.18.0でPCはこんな感じ
iPad Pro 10.5インチ + iOS 11.1(15B93)
Appleにお布施をしてない方はしてくださいね()
なんかよくわからんがとりあえず動いたぞ… どういうことなんだ pic.twitter.com/AFdwhFRqXv
— てんちょー / 筑野(ちくの)えり💕🍱 (@shop_0761) 2017年11月10日
参考サイト
一通り目を通しておくとよいかも。
CEDEC 九州でのモバイルの話
証明書とかプロビジョニングファイルを消す方法
Delete all certificates on PC - iOS Packaging - UE4 AnswerHub
UE4.18 のリリースノート
https://www.unrealengine.com/ja/blog/unreal-engine-4-18-released
ARKitの使い方 ※ UE4.17
https://www.unrealengine.com/ja/blog/getting-started-with-ue4-and-arkit
手順
この通りやればいけます。 (リンクが古くなっていたので修正しています 以後のスクショと異なる可能性があります…) docs.unrealengine.com
がしかし、ここで緑のチェックが出ない…
ので、6. iOS プロビジョニング- プロビジョニングの作成とインポートのとこではエディタからインポートしています。
iPhonePackagerからのプロビジョニングインポートはうまくいかないケースがあるので、エディタ上でやってみてください~https://t.co/LsrBPGpWlo
— おかず (@pafuhana1213) 2017年11月10日
Project Settings → PlatformsのiOSで Import Provision と Import Certificate できます。
さて、よく見ると
悲しみのno valid certificate found pic.twitter.com/9sSUzJgZ8E
— てんちょー / 筑野(ちくの)えり💕🍱 (@shop_0761) 2017年11月10日
と、ダメそうな予感。
一応目的はARKitなので必要な設定をしておきます。とりあえず空のモバイル向けプロジェクトでやるといいでしょう。
プロジェクト自体はリリースノートのサンプルプロジェクトをつかってます https://t.co/MctFNSxbam pic.twitter.com/siyRfnV3fW
— てんちょー / 筑野(ちくの)えり💕🍱 (@shop_0761) 2017年11月10日
ダメ元でiOSビルドしてみると、通ってしまいました(困惑)
どういうことなんだ…いいのかこれは…
実機への転送 【2017/12/21 22:43追記】
なんかググってて見つけたので僕はシュッといけたのを忘れてましたが、 引っかかってる方がいたので参考リンクを貼っておきます
その他
個人的にこういう証明書とか作る時、ファイル名とかほんとにいいのかこれで…みたいな気持ちになるのでメモ程度に書いておこうかと。
最終的に出来たファイル群はこちら。
Apple ID
まずここ。
このDeveloperページから確認できるメールアドレス(多分右上のとことかにある)とTeam Name を使いました。 日本人あるあるな(気がする)姓名逆にすべきかどうかは、ここで登録してるTeamNameを使うと良い気がしました。(僕は逆になってました)
UDID
端末をPCに繋いで、iTunesで見られます。終わり。
App ID Name と Profile Name
適当で大丈夫だと思います。プロジェクト名とかぶらないほうがいいのかも…?
- App ID Name: ARKitTestApp
- Profile Name: ARKit_Profile
にしました。
まとめ
おかずさん(@pafuhana1213)ありがとうございました!!
もうプロビジョニングいやああああああああああああああ
— おかず (@pafuhana1213) 2017年10月4日
ARKit 【2017/11/10 16:10追記】
こちらが参考になります。
リリースノートのサンプルプロジェクトはMacでのリモートビルドが必要なようなので、 こちらにあるサンプルプロジェクトはWin機のみで完結するように修正されています。
スライドにないポイントとしては 「Start in AR」のチェックを入れておきましょう。(VRのときもあった)
あとは忘れがちなAdditional Plist Data ですね。
中身はコレ。
【UE4】UE4 discordで解決した質問まとめ (不定期更新)
はじめに
なんかいきおいでUE4のdiscordのサーバーを立てたりしてみました。
2017/10/19 現在で245人いて、大体50人くらいが常にオンラインくらいっぽい。 気軽に軽めの質問が行き来するquestionチャンネルや、公式ドキュメントの日本語訳が怪しいのを指摘できたりするlocalizationチャンネルなど を用意してみました。
questionチャンネルで解決した質問の中から幾つか抜粋してまとめておこうかと思います。 適当にコメントをコピペしてきてます。
同じアクターにふたつ以上のスケルタルメッシュを置いた場合、メッシュBに対してメッシュAの現在のアニメーションや再生速度を適用する方法 by Sigさん
ひとつのアクターに二人の同じ動きをするキャラクターがいるみたいな感じ
Set MasterPoseComponentノードで、複数のスケルタルメッシュに現在のアニメーションをコピーできる
ので、
服替えたりするぶんにはこの方法が良さそう
だそうです。
Copy Pose from Meshの方がいいです
by cyaoeuさん
4.17でGearVRControllerの使い方 by shiratori1221さん
4.16までコンポーネントが合ったのにいつの間にか消えてた
らしい。それはビビる。
GearVRControllerコンポーネントは、自己管理型のMotionControllerコンポーネントとStaticMeshコンポーネントで置き換える必要があります(メッシュアセットは/ OculusVR / Meshes / GearVRControllerにあります)
とのこと。 by カニパンチさん
You do not have any debugging symbols required to display the callstack for this crash とは by TomTomACESさん
Packagingしたexeを実行したときにクラッシュすると出るやつですね リンク先の通りDebug symbolsを追加してあげればよかったはず
以前までデフォルトで入ってたはずですが、エンジンサイズが大きくなってしまうので任意でインストールできるように変わった気がします
はい。あるある。
Widgetってマクロライブラリが使えない? by Daisuke Ohnuma
MacroLibraryの親クラスがActor以降を継承している場合は使用できませんが Object継承の場合は使用可能です。
UserWidgetの継承関係ですが UUserWidget→UWidget→UVisual→UObjectです。 https://docs.unrealengine.com/latest/INT/API/Runtime/UMG/Blueprint/UUserWidget/index.html
と まめおさんより。
TMapの末尾要素を取得するシンプルな方法って何かありませんか? by まめおさん
TArrayの場合はLastを使うことで末尾からindexを引いた要素が取得できます。 これと同じようにTMapの末尾のValueを取得したいです。
TMap<FString, int> map; auto it = end(map);
alweiさんより。ただし、
std::endは使えないので、TMapBase内で本来はrage-base forをサポートするために定義されたprivateなfriend関数。ただし、ハッシュテーブルで実装されたTMapを末尾要素からアクセスするような理由は本来ないので、コメントの中でもDO NOT USE DIRECTLYになってる。
alweiさんのマルチプレイサンプルは4.14でも動いたけど、4.16(4.17)にするとマッチングしないぽい? by てんちょー
Public Connections と listen オプションの2つを修正
public Connections の数を増やし、Open LevelのOptionsに -listen を追記しましょう。
エンジンを起動したときに、いきなり前回開いたプロジェクトが開くようになっちゃった by プラムさん
ここにチェックが入るとそうなる by alweiさん
ここから外せるけど、UE4.15以降消滅したっぽい by alweiさん
プロジェクトを開いてからOpen Projectでも消せますよ。
と、cyaoeuさんより。
BPの差分をテキストベースで表示するにはどうすればいいですか? by まめおさん
これとかどうでしょ http://unrealengine.hatenablog.com/entry/2014/10/03/232449
フォワードレンダリングにチェックを入れるとマテリアルとかのサムネイルが by shiratori1221さん
Change 3480600 by Yujiang.Wang
Fix for UE-42376
* The bug is caused by post-processing ambient cubemaps not being supported in forward shading currently.
* This fix replaces all the occurences of them in CalcSceneView with a skylight using the cubemap
* If a CalcSceneView is used solely for setting the PP ambient cubemap, it is removed.
#jira UE-42376
html5のビルド by プラムさん
エッジのシャープなモデル(fbx)をインポートした時、自分の環境ではモデリングした通りに表示されるが、他のPCで同じプロジェクトファイルを開くとエッジが丸くなった by ayanさん
インポート設定のノーマルに関する設定とかの問題でしょうか?Compute Normals× Import Normals and Tangents○
とcyaoeuさんより。
こんな感じでちょこちょこ更新できたらよさそう。
【UE4】VSCodeを使ってみる(小ネタ)
はじめに
UE4.18 preview版からVSCodeが使えるようになったそうです。
Core Updates: Visual Studio Code can now be used to write code on Windows, Mac, and Linux. To use it, select “Visual Studio Code” as your preferred IDE from the editor preferences dialog, or add the -vscode argument when generating project files on the command line.
この設定どこだろ、とちょっと迷ったのでメモ程度に。
設定
Editor PreferncesのSource Codeにあります。
これをVSCodeにしてあげるともう使えます。おわり。
試しに作ったMyActorはこんな感じに。
もちろんHot Reloadもいけました。
【Chrome拡張】VALUで後で見るリストを作るやつを作ってみた
はじめに
VALU夏休みらしく、VAのやりとりが出来ない期間にバンバン新着更新されたりして 月曜日は一体どうしたら…みたいな気持ちになったりします。
それにこの感じだと新着が夜中に来て、9時に備えなきゃ…みたいなことに今後なりうるかも、 と思ってパパっと作ってみました。
Chrome拡張自体は初めて作ったけど、意外となんとかなりました。 またストアに公開しても良かったんですが、開発者登録料がかかるしChrome拡張の有料版もあんまり見たことないしで 微妙だなと思ってやめました。野良拡張として配布するので、導入するかどうかは自己責任ということでお願いします。
勝手にVListと呼んでます。
機能紹介
とりあえずこんな感じ。
消す時はこれ。
また、右クリックからも追加できます。
あとはボタンにあるように、登録した人を新規タブで全部開くボタンと、全部消すボタンです。
配布先と導入方法
GitHubにおいておきます
CSSはこちらを使わせて頂いてます。
導入方法はここが参考になるかも。
まとめ
ソースコード一式公開してるので、各自勝手に改造してもらってかまいません。
また応援していただける方はこちらもお願いします。
ビットコインアドレスを貼っておくので、面白いなとか応援したいと思ったらぜひこちらに!
— てんちょー@C92 1日目東こ34b委託 (@shop_0761) 2017年8月2日
3Di3c7jmrvgvioW52GEF1prEkcydyRYbVT pic.twitter.com/duhz3AxKKn