そうだ、ゲームを作ろう

現状や学んだことなど記録するブログ。間違ってたらごめんね

極め本を読んでみた。

f:id:wvigler:20191030065858j:plain

というわけで。

噂に名高いUE4の「極め本」を購入して読んでみました。

章を飛ばさず、読むのにだいたい10日間。1週間で読み終える予定だったんですが、知識の乏しいところになると途端に詰まってしまって結構伸びました。ちなみにAppendixはBまで進んでいます。

 

普段僕は動画でUE4の学習をすることが多いのですが、この本を読んでみて、それだけだとやっぱり虫食い知識になってしまいがちだなあ、と思いました。

今作りたいものに必要でないという理由もあったのですが、特にPhysicsAssetについてはちっとも分からない。作成する時のパラメーターとかが何を意味しているのか分からないし、書いてあることを理解するのに自分でもびっくりするぐらい時間がかかる。

そして22、23章のAI関連。本の中でも言及されていますが、おそらくここが一番この本で挫折しやすいポイントでしょう。やってることは本当に基本的なことのようなので、ジャンル自体が難しいといったところでしょうか。

UE4は学習する範囲が広大すぎて、果たして自分がどのくらいの知識を全体に対して持っているのか、基本的に抑えておくべきところはどこなのか、という点がしばしばよく分からなくなるので、今回この本でどういう範囲の部分が歯抜けになっていたのか知れたのが嬉しかったです。

 

本の作りとしてはとても良くできていると思います。なにしろサンプルゲームの「ペーパーニンジャ」。これが「初学者にゲーム制作を教えるためのサンプル」として非常に考えられていると思います。

あくまで全体を満遍なく学ぶ趣旨の本なのであまりディープなことは載ってません。例えばマテリアルについてCustomExpressionは出てこないし、パーティクルはVectorFieldどころかTypeDataModuleも扱わない(言及はされていますが)。

ただこれは非常にありがたいなと思ったのは巻末(Appendixの最後)にこれからどういうことを学んだらいいか、この本でカバーできなかったところはどういう所なのか、が載っていることですね。

こういうの初学者を対象にした本で標準搭載にならないかなあ…

 

不満点はあまりないのですが、まずはさっき挙げたとおり、あまりディープな内容は載ってないです。不親切なわけではないですが、ディープな内容は個別に調べてください、という本です。

あと第一版が出たのが既に2015年7月。UE4のバージョンの違いによりver4.23現在通用しなくなっている部分がいくつかあります。

qiita.com

まあそこについてはこういうありがたい記事があるので参考にさせてもらいましょう!

(この記事には載ってないんだけど、Appendix内のFireballのエフェクトデータが上手く移行できないのはバージョン違いによるものなのかなあ?)

 

最後に分からないところや曖昧なところに付箋を貼っていったのでその写真を。もしかしたら僕がだいたいどこで詰まったのか分かるかも知れません。

f:id:wvigler:20191030065904j:plain

Twitterを始めました

放置していたむか~~~しのアカウントを復活させることができたので、Twitterを始めました。正確には再開だけど。

 

twitter.com

 

と同時にブログの方のデザインも少し進める。金が掛かるのでProにする気はしばらくないけど、少しずつ見やすいデザインにするために色々やっていけたらなと思ってます。

画像として使っているブラックハートMK-2のような何かはブラハMK-2をモデリングしようとして失敗した何かです。いや静止画から投影して、ここはこうかな?みたいな感じで作ってたら、動画で見返してみたら、あれ?こことここは繋がってんじゃん。→…諦めるか。ということになって最終的に中途半端な出来です。あ、使用ソフトはBlender2.8です。

テクスチャペイントについてもよく分からなかったのでとても拙いことになっているんですが…こっちはまあまあ上手く(カメラアングルで)隠せたかな?

今やればもうちょっとマシなものができるんだよなあ…

 

開発近況としては隕石のチリに隠れることができるようにしようとして、Volumetric Fogを使っているんだけど、動くは動くがなんで動くのかよぐわがんねで…んにゃぴ。

ライティングとか…難しいから放置してたんだよなあ。

Projectile Movementについて

どうもProjectile MovementはCollision以外がRootComponentにあると挙動がおかしくなるみたい?

引っかかったのがCapsuleを横倒しにした判定を作りたいと思って、CollisionのRotationまたはLocationをいじるためにDefaultSceneRootを設定している時。なぜか本来Blockされるはずの判定がBlockされなくなった。(Overlapは普通に機能する)

バグ・・・というかそもそもそういう使い方は想定外ですってことなんだろうか?

正直、弾にそんなに凝った判定要るか?ってことなんだろうけど。

一応解決方法としてはProjectile Movementを消した上で

f:id:wvigler:20190930012905p:plain

ProjectileSolved_20190930

こんなふうにBPで代用すれば問題ないと思う。Physicsは自分で設定しましょう。

Destructible Mesh Componentで悩んでみた。追記:破砕時の破片を制御をする方法見つかりました

なんかポチポチいじってたら見付けた。

Destructible Meshに対してCollisionをめり込ませると指向性や破砕する力を制御できる!(笑)

まさかこんなアホみたいな方法で!

以前からなぜか同じBPやDestructible Meshなのに違う破砕の仕方をするオブジェクトが散見されたんですがこういうことだったんですね。(おそらく地面にわずかに埋まっていた)

破砕する瞬間にspawnかけて、Destructibleなオブジェクトに対してだけBlockする透明マテリアルのCollisionを出す。それを短時間で消すとかで色々できそう。

というわけで貧乏人の知恵でした。ちゃんちゃん。

Destructible Mesh Componentで悩んでみた

自前で作っているゲームで手軽に隕石を破砕するようなモーションを作れないかな~?と思いまして

pafuhana1213.hatenablog.com

 

ここを参考にして2~3日うんうん悩んでました。破砕したときの破片について制御できないのか(要はもっと大きく吹き飛ばしたり、指向性を持たせたりしたい)と色々試したり調べたりした結果・・・

 

https://answers.unrealengine.com/questions/82691/most-impulses-and-forces-dont-work-on-destructible.html

 

こんなものを発見。

要はImpulseやforceを用いたような破片の制御にはDepthが必要で、UE4単体ではDepthが2つ(破壊しないか完全に破壊するか)しか用意できないので外部ツールを使用しないと実現できないよってことなのかな?

PhysXLab、Maya、3DS/Maxを使用すれば実現できるみたいだけど、ちょ~っと難易度が高そうだな。価格も高いし。(切実)

ということで今の所はできないってことが分かったのが収穫だったんですが、パラメーターをいじっているうちに分かったことが結構ありました。でもいじる場所が割とあって忘れそうなので、以下メモ。

 

 

◎弾が何発か当たったら破壊する

 

(被弾側Destructible Mesh Editorにおいて)

・Enable Impact Damageをoffにする。(onになっているとPhysicsをsimulateしているCollisionが接触した際にすぐに割れてしまう)

・Damage Thresholdを好きな値に設定する。(これが被弾側の耐久値になる)

・Flags->Accumulate Damageをonにする。(Damageを保存。累積させる設定)

 

(被弾側Blueprintにおいて)

・攻撃側のObject Typeに対してCollision ResponseをBlockにする。

・Collision EnabledをPhysics OnlyかCollision Enabledに。

 

(攻撃側Blueprintにおいて)

・被弾側のObject Typeに対してCollision ResponseをBlockにする。

・Collision EnabledをQuery OnlyかCollision Enabledに。

・こんなふうに繋げる。

f:id:wvigler:20190929002330p:plain

DamageApplyer_BP20190929

Damage Amountは被弾側のDamage Thresholdに対する攻撃力になる。

Impulse DirとImpulse Strengthは正直この場合は設定する意味ないような気がする。(でもImpulse Dirは設定しないとコンパイルが通らない)被弾側のPhysicsをonにすると何発撃ち込んでも崩れない(なぜかそのうち壊れるが)という現象が発生するのでそれと関係あるのかも。

ちなみにApply Radius Damageノードでも全く同じことができます。こっちの場合はHit LocationをHurt Originに繋げます。

 

これで撃ち込んでDamage Amountの値の累計がDamage Thresholdを上回ると破壊されます。またDestructible Mesh EditorでDamage Capを設定すると文字通りキャップを設けることができたりします。ちなみに残りのDamage Thresholdを参照したり制御する方法は(多分デフォルトのBP上では)ありません。

 

◎Destructible Mesh Editor->Damage->Advanced->Max Chunk Speedを設定すると崩れる速度をめちゃくちゃ遅くできる。(早くはできない)

 

◎Debris(破片)の制御

・Destructible Mesh Editor->Hierarchy Depth->Enable Debrisをonにする。

・Destructible Mesh Editor->Hierarchy Depth->Debris Depthを0か1にする。これでDebrisを制御することができる。これから派生するのが以下。

○破壊後に一定時間でDebrisを消去する

・Destructible Mesh Editor->Flags->Debris Timeoutをonにする。

・Debris lifetime minとDebris lifetime maxを好きに設定する。

○破壊後に一定以上元の位置から離れたDebrisを消去する

・Destructible Mesh Editor->Flags->Debris Max Separationをonにする。

・Debris max separation minとDebris max separation maxを好きに設定する。

○破壊後に一定以上Meshの中心から離れたDebrisを消去する(判定は箱型)

・Destructible Mesh Editor->Flags->Use Valid Boundsをonにする。

・Debris Boundsのminとmaxを好きに設定する。

しかしこれValid Boundsは別としてほか2つはminとmaxで設定している割にどっちも一気に消えるんですよね・・・本当にしきい値が機能しているのか不安になる。

 

他のパラメーター値についてはまだなんとも・・・Effectについてはまあ大体想像したとおりなんだろうなとは思うんですが。

 

 

カプコンオープンカンファレンスに行ってきたよ

新宿で行われたカプコンのオープンカンファレンスに行ってきました。

「クジ運悪いからどうせ参加できないだろ。でも申し込むだけタダなんだし」みたいな気持ちで送ったんですが、当選して正直自分が一番びっくりしました。

なのでメールをコピーする段階になってメールの場所が行方不明になっても、「もしかしてあれは夢だったのでは?」とか思ったり。まあちゃんと見つかりましたが。

 

会場は学生ぐらいの若い人が一番多く、ついでゲーム会社さん関係と思われるスーツを着た人もちらほらいらっしゃいました。

 

内容に関しては人によって感じ方は違うと思いますが、僕にとっては「疲れたけど興味深かった。キツかったけど勉強になった」といったところでした。

前日から寝不足だったり、座ってスライドずっと見ていたら首肩がめちゃくちゃ痛くなっちゃったりと身体的なキツさもあったんですが・・・

 

全体的に内容のレベルが本当に高いなと。それでもギリギリ知ってる単語があったり「これはこういうことについて話してるのかなあ?」みたいなことぐらいは分かったり(分からなかったり)しました。

 ただ僕としてはこういうカンファレンスが全部理解できる内容であることは求めていなくて、むしろ分からないからこそやる気になったりできるので、(キツかったけど)いいカンファレンスだったなと思います。

 

----ここから内容備忘録----

○RE ENGINEの開発思想

・他社製エンジン使用のリスク

・環境・人員・手法・技術の確保

 

○開発経緯

・MT Network(これまでの主力、タイトル多数、現在もプラットフォームによっては現役)

           →WorldEngine(MHW、IB)

           →PantaRhei(タイトルはなし)→(一度再始動)→REEngine(RE7、RE2、DMC5)

 ・WorldEngineは特化型。これからはREEngineを主に使っていく

 

○REEngine

・モジュラー構造→Render、Physicsなどの要素をモジュール化してプロジェクトごとにフレキシブルに変更できる。

・高速なイテレーションC#スクリプトの使用。独自のGCなどによりパフォーマンスの問題を解決。従来C++で10分~40分ほど掛かっていたイテレーションが数秒に。

・下位互換性→年度ごとのバージョンを内包しており、いつでも旧バージョンに戻れる。

・UX→スーパーやトップユーザーではなくエンドユーザーに合わせたUXの実装。作業面積の確保や直感的で統一感を出すUXを実装。

 

○プロシージャルモデリング(ここらへんから分からない要素が増えてくる)

・Houdiniとの連携強化→Houdiniから.hdaでモデルをREEngineへ送り、更にREEngine側の変更をHoudiniに?

・取り込み等によるモデルのコリジョン品質の低下(鋭角化、すり抜けなど)をどう食い止めるか→SOPでは問題がある。正射影ベクトルでキレイにコリジョン同士を繋げることができた。

・QuadTreeTextureによるメモリコスト削減。

・LightProbeの配置自動化とアルゴリズム

 

○アニメーション

・モジュラー式リギングによるイテレーション高速化

・組み技リターゲット

→主人公達の体格の違いから、組み付いた際に同じアニメーションを使用しても同じ場所を掴まない。

→それぞれの主人公に沿ったアニメーションを用意すると工数がとてつもない

→四肢は組み付き側と組み付かれ側にそれぞれ専用ジョイントを用意し、位置補正をかけ、2BoneIKで動作させる。

→噛みつきは腰を落として補正。(順序を最初にしないと四肢が動いてしまう)

→自動化して「1/主人公数」の工数になる

→武器による攻撃なども補正をかけた動きで主人公側をある程度「狙う」ように動く。

・階段や坂を登るときのIK使用→Fullbody_IK→オートでバランスを取るように動こうとする。

 

 ○リアルタイムグラフィクス(もう後半は何が何やら・・・)

・揺れもの→Chain→尻尾などは先に行くに従って制限角を段々と広げる

・パーティクル→CPUからGPUになったことで多くの制約から開放された(万能ではない)

・正直ここらへん情報量多すぎる・・・フェイスをエミッターにしたり、輝度に応じてエフェクトに補正をかけるシステム(detone)だったりだとか

・工夫に工夫を重ねてる感じで、いやVFXやらライティングって大変なんですねえ・・・サンプルがDMC5だからってのもあるだろうけど。

 

最後の方は疲れもあり頭がボーッとしていたので記憶違いや認識違いが結構あるかも。

でも動画になるらしいのでそこでもう一回確認すればいいか。

 

 今回当選しなかった人たちもいるし、何よりとても参考になるカンファレンスなので次回開催もちろんしてほしい、と感じています。専門性の高い話は疲れるけど、凄い世界が見れたという経験に圧倒される機会は貴重ですね。

パフォーマンスもとても大事だけど、自動化によるイテレーションを確保することの重要性だったり(すぐ青天井化する)、それでもグラフィクスなんかはここまで妥協しないんだなあ、と。

 

無料で(←重要!)こんな企画をしてくれたカプコンさん本当にありがとうございました!みんなも送ろう!アンケート!

 

UE4 「Materials - Understanding the Production Workflow」修了

UE4 Online LearningでMaterials - Understanding the Production Workflowを修了しました。

UE4のマテリアルの発展的な使い方についての講座。

マテリアルの機能そのものに関しては

 

・Intro to Materials

https://www.youtube.com/watch?v=lngF4VVNER4&list=PLZlv_N0_O1gbQjgY0nDwZNYe_N8IcYWS-

 

と Online Learning の

・Materials - Exploring Essential Concepts

・Materials - Understanding the Production Workflow

である程度使えるようにはなったのかなと。

多分まだ色々あるんだろうな、とは思いますが。

 

個人的には講師の人の独特の英語が辛かったです。

発音もそうだけど文章の作り方も独特のクセがあるというか・・・

分からなくなって日本語で見る→やっぱりよく分からない、のコンボも割とあるし。

 

エディタそのものの機能はとりあえず分かったんだけど、個々のExpressionについての詳しい資料が欲しいですね。

ドキュメントにも難しい専門用語でさらっと書かれていたりするから、全然分からない。結局、適切な場面で使ってみたら「凄い!こんなことできるの!?」なノードだったりしたりして。

あとDomain等のDetailsの設定とか・・・こうしてみるとまだ分からない箇所は一杯あるんだな。

 

とりあえず今現在のバッジ状況

 

f:id:wvigler:20190917180323p:plain

Badges20190917

 

いくつか100%にならない講座があったりはします。原因は分かりません。