UE4の勉強記録

UE4の勉強の記録です。個人用です。

「Unreal Engine 4.xを使用してRPGを作成する」の足りない部分を作成する Open WorldとPrologueの作成 Part3

f:id:kazuhironagai77:20220227232406p:plain

<前文>

<良い結果の出る勉強方法の探し方>

先々週、ゲーム制作の専門学校に通う人には勉強するのが苦手な人がいると聞いて、勉強するのが苦手な人に対して勉強する事が得意になるために必要な事をAdviseしました。

このAdviceの中で最も大切な事の一つに「良い結果を出す。」がありました。

勉強した事があんまり無い人は、勉強しさえすれば良い結果が出ると思っている人が多いんです。しかしそれは間違っています。

正しい教材や正しい教育をする先生の元で勉強した場合のみに良い結果が出ます。間違った教材で勉強すると全く成果が出なかったり逆に悪い結果が出たりします。やらない方がましなんです。

そこで最も大切になるのが「どうやって正しい教材や正しい教育をする先生を探すのか?」ですが、YouTubeのTutorialに限った話ですが以下にまとめておきます。

  • 英語で作成されている。
  • 再生回数に対する高評価の割合が異常に高い。
  • 短い

の3つです。まず最初の条件として英語で作成されている事です。英語で作成されていると言う事は世界中の人からそのTutorialは見られる訳です。当然チェックも世界基準でされます。間違った事を言っていたら世界中から突っ込まれます。(英語なんで聞いても分かる訳ないだろうと言う人はちょっと待って下さい。後でこういう人向けの対策も述べます。)

次に注意するのは、再生回数に対する高評価の割合です。コメント欄は編集する事が出来ますし、低評価はアンチの人が押すので、そのTutorialそのものの評価に直結しているのかどうか不確かな部分があります。しかし再生回数に対する高評価の割合は違います。まず製作者が編集する事が出来ません。次にアンチの人は再生回数を上げる事は製作者を助ける事になるので何回もそのVideoを見る事はしません。ので再生回数に対する高評価の割合をそのTutorialの評価として使用出来る訳です。

大体、英語圏のTutorialの再生回数に対する高評価の割合の平均は0.1位です。これより高いTutorialはかなり良い場合が多いです。中には0.01位の物も有りますがこれはTutorialとして動画を再生されたのではなく娯楽として再生された場合の動画でしょう。この辺はケースバイケースで判断するしかないです。

最後ですが、短い事です。短くないと見てる方が疲れてしまい学習するどころではなくなってしまいます。

<どうやって英語の教材を理解するのか?>

はい。上の説明を聞いてほとんどの人が英語でTutorialを見ても理解出来る訳ないだろうと思ったと思います。でもこれはYouTubeのTutorialに限った話ですが実は出来るんです。

今からその方法を説明します。

まず学校の英語の成績がそこそこ良かった人は英語は全く聞き取れないけど読む事は出来ます。

その人は以下のCCを押すだけです。

f:id:kazuhironagai77:20220227232449p:plain

すると以下の様に何をしゃべっているのか逐一文字にして表してくれます。

f:id:kazuhironagai77:20220227232506p:plain

これを読むだけです。

これ続けるとListening力も格段に上がります。と言うか頭の中にある英語の発音と実際の英語の発音のズレを脳が認識し始めてくれます。勿論、これだけやってれば英語が何でも聞き取れるようになる程甘くはないですが。

次に所謂F欄大学と呼ばれるレベルの人で英語全然読めないと言う人向けです。

このレベルの人達は、中学レベルの文法は理解している人が結構多く、実は頑張ると結構英文が読めます。特にアメリカでは文章は簡潔、かつ誰が読んでも理解出来るのが正しいと考えられているので、中学校レベルの文法しか知らなくてもアメリカ人が作成した文章は結構読めます。

正し英語の勉強ではないので

  • 英文が理解出来なくても、画面を見て理解出来るならそれで良い。
  • どうしても英文を理解する必要があるなら、あらゆるズルい手を使用して翻訳する。

は常に考えて下さい。

英語が出来る人に限って「この場合は関係副詞だから…」とか文の構成を理解する事に時間を費やしてしまいがちです。そんな事してる暇があるなら英文をDeep Lにぶち込んで取りあえず日本語訳を見た方が速く理解出来ます。特にゲームが得意な人達は今まで誰も考えた事のない効率的な方法を編み出す事に長けています。その能力をここで存分に発揮するんです。

最後に高卒レベルの人向けですが、このレベルの人は努力しても英文を読むための中学校レベルの文法の知識が抜けている人がほとんどで直接英文を解釈するのは諦めましょう。

いや俺は高卒だけと英文はある程度読めると言う人は以下の2つの質問が理解出来るか試してください。

  • 文の動詞がどれだか分かる
  • その動詞が5文型のどのタイプが分かる

この二つが分かる人はまあ、ある程度は英文が読めます。頑張って読むのもありです。そうじゃない人は以下の方法があります。

YouTubeの番組を開くと以下の表示があるはずです。この赤で丸くした部分をクリックして下さい。

f:id:kazuhironagai77:20220227232544p:plain

するとOpen transcriptと言う表示が現れます。日本語は何てなってるのか知りませんが、同じ個所なので推測できるはずです。

これを選択すると以下の表示が現れます。

f:id:kazuhironagai77:20220227232617p:plain

これは先程表示したセリフの字幕を一覧表にして示してくれる機能です。

これをCopyしてDeep Lにそのままぶち込みます。

すると

f:id:kazuhironagai77:20220227232636p:plain

こんな感じで翻訳してくれます。

これ見ればほとんどの英文が何を言っているのか理解出来ます。

この翻訳には必ずDeep Lを使用しましょう。Deep Lの翻訳はGoogleの自動翻訳より2倍位精度が高いです。

しかしGoogleの自動翻訳でも良いと言う人には、歯車をクリックして

f:id:kazuhironagai77:20220227232653p:plain

三番目にあるSubtitles/CC(日本語で何になっているのかは分からないので同じ位置のを選択して下さい)を選択し

f:id:kazuhironagai77:20220227232713p:plain

最後のAuto-translate(自動翻訳)を選択します。

すると翻訳対象の言語が表示されます。

f:id:kazuhironagai77:20220227232733p:plain

これで日本語を選択すると

f:id:kazuhironagai77:20220227232759p:plain

字幕が日本語で表示されます。

これでYouTubeにあるほとんどの英語のTutorialが日本語で読めるようになります。

それでは今週の勉強を始めます。

<本文>

1.今週の予定

今週も先週と同じ内容でやっていきます。

  • Niagara: Particle Attribute Readerの検証
  • Material :Projectionの勉強の復習
  • Prologueの作成
  • Open Worldの検証
  • 他のMapの作成
  • Game DesignポケモンHxHの念能力( 戦闘システムの作成)
  • UE5Lumenの勉強
  • Blenderの勉強

今週も先週と同じ内容でやっていきます。

2.Niagara: Particle Attribute Readerの検証

今週もParticle Attribute Readerの使用方法について検証していきます。

先週は、Particle が一個の場合はParticle Attribute Readerを使用して別のEmitterにあるそのParticleの情報を引き出す事が出来ました。前のEmitterが沢山のParticleを生成してかつそれぞれのParticleの情報をParticle Attribute Readerを使用して引き出す場合はある特別な条件下でしか成功しませんでした。

今週は先週作成したCGHOW氏のParticle Attribute Reader in UE4 Niagara Tutorial | Download Project Files [1]とContent Examplesに2.2 Follow The Leader 1.0のParticle Attribute ReaderのParticle Attribute Readerの使用方法を再検討してParticle Attribute Readerで多数のParticleのそれぞれの情報を引き出す時の条件を明確にします。

2.1 Get Number Particle ノードについて

先週は、自分で作成したEmitter内から、別のEmitterで作成された大量のParticleのそれぞれの情報をParticle Attribute Readerから取ろうとすると全く情報を得る事が出来なかったんですが、何と

f:id:kazuhironagai77:20220227232850p:plain

を以下に示した様にSubtract ノードに変更して1を引くと

f:id:kazuhironagai77:20220227232910p:plain

をすると出来るようになりました。

それで考えたんですが、SubtractノードとOne Minusノードに違い何かなるはずありません。

よく見たら

f:id:kazuhironagai77:20220227232928p:plain

ノードはOutputするNum ParticleはIntであるはずなのにOne Minusノードに接続される時には

f:id:kazuhironagai77:20220227232949p:plain

Niagara Numericと言うタイプになっています。これのせいじゃねえ。と思い、以下のように変更してみました。

f:id:kazuhironagai77:20220227233005p:plain

結果です。

f:id:kazuhironagai77:20220227233428g:plain

あれ、出来てない。

あ。

f:id:kazuhironagai77:20220227233457p:plain

One Minusって1-Aの事でした。

ずっとA-1と勘違いしてました。

こんなケアレスミスをするなんて。

うーん。先週、ちょっと熱っぽくて、これもしかして〇ロナかもと思いながらやってたんですが、熱のせいであってくれ!って感じの恥ずかしいミスです。

ちょっとショックです。

でもこういう恥ずかしい思いをする事も大切ですよね。こうやって人は学んでいくんです。

因みに、以下に示した様に

f:id:kazuhironagai77:20220227233526p:plain

Int32ではなく、Niagara Numericのまま接続しても

f:id:kazuhironagai77:20220227233542p:plain

普通にそれぞれのParticleの情報を得る事が出来ました。

2.2 先週の疑問に対する解答

f:id:kazuhironagai77:20220227233616p:plain

これも今考えると当たり前ですが、先週は全く理解出来なかったです。

上記のCalculate Random Range Integer ノードはParticle Spawn SectionにあるScratch Module内で使用されています。

f:id:kazuhironagai77:20220227233635p:plain

このParticleはEmitter Update SectionのSpawn Burst Instantaneousノード内の設定により

f:id:kazuhironagai77:20220227233654p:plain

一回に50000個生成されます。

f:id:kazuhironagai77:20220227233712p:plain

これで生成されたParticle 一個一個はそれぞれRandomに選ばれた赤い点に向かって動きますが、全体でみれば全部の赤い点が選ばれたのと同じ様な結果になります。

2.3 Particle Attribute Reader in UE4 Niagara Tutorial | Download Project Files [1]をもう一回やる

恐らくですが、Particle Attribute Readerを使用するのに、先週やったような色々な条件の内の幾つかは必要ないはずです。

先週、中々結果が出なかったのは以下に示したParticle Update SectionにあるForceを追加するNodeのForceの設定が弱かったからだと思っています。

f:id:kazuhironagai77:20220227233736p:plain

これらのForceの設定を最初からMaxの値に変更して、もう一度Particle Attribute Reader in UE4 Niagara Tutorial | Download Project Files [1]をやります。

先週は見逃していましたが、Preview画面のShowからEmitter Execution Orderを選択すると

f:id:kazuhironagai77:20220227233758p:plain

以下の部分にEmitterの実行される順番が表示されます。

f:id:kazuhironagai77:20220227233817p:plain

先週と見た目がちょっと違いますが実装方法は一緒です。

f:id:kazuhironagai77:20220227233835p:plain

次にEmitterをDuplicateして赤の点を作成しました。

f:id:kazuhironagai77:20220227233857p:plain

この辺は本筋ではないのでどんどん飛ばしていきます。

とりあえず一個のParticle の情報を得てそのParticleに追随するEmitterの実装が出来ました。

f:id:kazuhironagai77:20220227234005g:plain

以下の部分でParticle Attribute ReaderからParticleのPositionの位置を取るためにGet Vector by Indexノードを使用していますが

f:id:kazuhironagai77:20220227234033p:plain

最初間違えて、Get Vector by IDノードを使用してました。

f:id:kazuhironagai77:20220227234050p:plain

勿論、全然Particleを追いかけてくれなくて結構悩みました。

うーん。

まだまだですね。

それで、ここからが本番です。

別に綺麗なEffectを作成する必要はないのでCurl Noise Force ModuleやVortex Velocity Moduleを消してしまいます。

f:id:kazuhironagai77:20220227234114p:plain

すると以下の様にPoint Attractive Force Moduleの影響で赤い点に青のParticleがひきつけられているのが分かります。

f:id:kazuhironagai77:20220227234134g:plain

これをもっとはっきりさせます。

Attraction Strengthを以下の値にしました。

f:id:kazuhironagai77:20220227234149p:plain

青いParticleが赤いPointに集まっているのが良く分かります。

f:id:kazuhironagai77:20220227234324g:plain

今週は、これで赤い点を増やした場合をテストします。

2.4 複数の赤い点を追いかけるようにする

Particle Attribute Reader in UE4 Niagara Tutorial | Download Project Files [1]では、Particle Spawn Sectionに新しいScratch Moduleを作成して

f:id:kazuhironagai77:20220227234408p:plain

以下の様な実装をします。

f:id:kazuhironagai77:20220227234428p:plain

これでそれぞれの赤い点のParticleのIDを取得して

f:id:kazuhironagai77:20220227234453p:plain

Particle Update SectionのScratch Module内で

f:id:kazuhironagai77:20220227234514p:plain

その取得したIDを使用してそれぞれの赤い点の位置を取得します。

しかしこの方法では以下に示した様に青いParticle は全く赤い点を追いかけませんでした。

f:id:kazuhironagai77:20220227234532p:plain

ここからこのTutorialは色々な事をやって最後にForceの値を大きくしたら青いParticleが全部の赤い点を追いかけるようになりました。

それてそれだけ見ているとどこが間違っていたのか良く分かりません。

のでこの状態から自分で色々な値を弄ってみます。

以下に私の今の状態を示します。

f:id:kazuhironagai77:20220227234626g:plain

実はこの時点でも青のParticleは赤い点に引き寄せられています。よって全く引き寄せられていない事はないです。

<Get ID at Spawn Index ノードについて>

f:id:kazuhironagai77:20220227234701p:plain

これとGet ID by Index ノードの違いが分かりません。

f:id:kazuhironagai77:20220227234722p:plain

調べます。

Content Examplesの2.2 Follow The Leader 1.0のInitialize Followersに

f:id:kazuhironagai77:20220227234819p:plain

Get ID at Spawn Indexノードの解説がありました。

f:id:kazuhironagai77:20220227234837p:plain

こっちの方はFame毎に値が変わったりしないので、このIDを信用しろと言う事ですね。

これ見るとこの実装を完成した時点で、青いParticleは全ての赤い点を追従しそうです。

赤い点を増やして更にPoint Attractive Force ModuleのAttraction Strengthを思いっきり上げてみます。

f:id:kazuhironagai77:20220227234856p:plain

結果です。

f:id:kazuhironagai77:20220227234919g:plain

どうしてこのような形状になるのかは分かりませんが、青いParticleは全ての赤い点に対して追従しています。

つまりこの状態で複数の赤い点を追いかける目標は既に達成出来てる訳です。

2.5もっと簡単なEffectを作成して検討する

以下のEffectを作成しました。

f:id:kazuhironagai77:20220227235006g:plain

赤い点は基本的にはFountain TemplateのSpriteのSpawnする数と大きさを変えただけです。

f:id:kazuhironagai77:20220227235037p:plain

青いSprite群は、赤のEmitterをDuplicateしたものに以下のScratch Moduleを追加して

f:id:kazuhironagai77:20220227235056p:plain

赤いSpriteの位置をParticle Attribute Readerを使用して取得します。

f:id:kazuhironagai77:20220227235113p:plain

更にSphere Location ノードの

f:id:kazuhironagai77:20220227235132p:plain

Sphere Originに先程取得した赤いSpriteの位置を保持しているNew Positionをセットしただけです。

f:id:kazuhironagai77:20220227235153p:plain

これなら改良を加えても私でも理解出来ます。

<赤のSpriteの数を増やす>

2個に増やしました。

f:id:kazuhironagai77:20220227235230g:plain

当然青いSpriteが追従しない赤いSpriteがあります。

これに以下の実装を追加しました。

f:id:kazuhironagai77:20220227235259p:plain

まず以下の部分は単にRandom な数を返してるだけです。

f:id:kazuhironagai77:20220227235312p:plain

赤いSpriteの数が2個なら0か1を返します。

すると

f:id:kazuhironagai77:20220227235325p:plain

のParticle Indexの値に0か1をセットします。

これを青いSprite一個一個に行います。青いSpriteは一秒間に1万個再生されているので

f:id:kazuhironagai77:20220227235342p:plain

5000個ずつそれぞれの赤いSpriteに追従するはずです。

結果です。

f:id:kazuhironagai77:20220227235405g:plain

出来てます。

はあー。

数を増やしてみます。

赤いSpriteのSpawn Rateを2に変更しました。

f:id:kazuhironagai77:20220227235429p:plain

結果です。

f:id:kazuhironagai77:20220227235445g:plain

出来てます。

f:id:kazuhironagai77:20220227235506p:plain

正直、こんだけ出来れば今の時点では十分です。

一応、これでParticle Attribute Readerの使用方法も理解出来た事にします。

2.6 Event とEvent HanderそしてParticle Attribute Readerのまとめ

2022-01-31のBlogから始めたEvent とEvent HanderそしてParticle Attribute Readerの勉強がこれで一区切りつきました。一応全部の使い方を理解しました。Particle Attribute Readerのもっと実践的な使用方法についてはこれから勉強していきます。

3.Material :Projectionの勉強の復習

今週もBen Cloward先生のProjection Seriesの復習をやっていきます。

このSeriesを勉強する事でUEのMaterialへの理解が抜群に深まります。本当にBen Cloward先生には感謝です。

3.1 Tangent Spaceの続き

UE4のVersion 4.26のStatic Meshを開くと以下に示した様にNormal、Tangent、Binormalを表示するToolがあります。

f:id:kazuhironagai77:20220227235549p:plain

こんな感じです。

Normal です。

f:id:kazuhironagai77:20220227235606p:plain

Tangentです。

f:id:kazuhironagai77:20220227235624p:plain

Binormalです。

f:id:kazuhironagai77:20220227235643p:plain

正し、UE5のStatic Meshにはその表示が無くなっています。

と思ったら以下の場所から見る事が出来ました。

f:id:kazuhironagai77:20220227235703p:plain

UE5のnormalです。

f:id:kazuhironagai77:20220227235722p:plain

UE4と同じ緑色です。

Tangentです。

f:id:kazuhironagai77:20220227235745p:plain

これもUE4と同じ赤色です。

Binormalです。

f:id:kazuhironagai77:20220227235806p:plain

青色です。

はい。

これを見るとUEではNormal Vectorは緑、Tangentは赤、Binormalは青で表示するのが決まっているようです。

UEでは赤がX軸、緑がY軸、青がZ軸に対応しています。のでこれだけ見るとUEのTangent空間はNormalがY軸と対応しているように見えます。しかし実際のUEのTangent空間はNormalはZ軸に対応しているはずです。そうでなければNormal Mapがあんなに青くなっているはずがないです。

この辺はCoordinate Systemを理解していないと本当に混乱してしまいます。

UEではx軸は赤、Y軸は緑、z軸は青で表します。更にNormal Vectorは緑、Tangentは赤、Binormalは青で表示します。しかしTangent Spaceのz軸はNormalと対応します。

これが正しいはずです。

しかし一個一個のNormal、Tangent、そしてBinormalを見ると以下の様にTangentとBinormalが下向きに伸びているんです。

f:id:kazuhironagai77:20220227235848p:plain

これってTangent Spaceと同じ方向ですよね。

うーん。

後、UnityとUEはNormal MapのY軸の向きが逆と言う話もあります。この時のY軸って高さを表している気がします。

Tangent空間の座標軸についてはもう少し深堀する必要がありそうです。

3.2 Direction Masks - Shader Graph Basics - Episode 27 [2]の前回、勉強内容を復習する

2022-01-17のBlogで勉強していました。

このTutorialでTri-PlanarなProjectionを作成すると思ったらそのための黒いMaskを作成しただけでした。

しかしこのTutorialではほとんど初めて本格的にVertex Normal WS ノードを勉強します。

ここで一個だけ重要な事を述べていました。

以下の様な実装をVertex Normal WSノードとPixel Normal WSノードでします。

f:id:kazuhironagai77:20220227235924p:plain

f:id:kazuhironagai77:20220227235933p:plain

すると

Vertex Normal WSノードを使用した場合は、以下に示した様に

f:id:kazuhironagai77:20220227235955p:plain

Normal Mapの入力が全く反映されませんが、

Pixel Normal WSノードを使用した場合は、以下の様に

f:id:kazuhironagai77:20220228000015p:plain

Normal Mapの入力が反映されます。

これは今考えれば、Vertex Normal WSノードはVertex一個一個が保持するNormal Vectorの値をWorld Coordinateの値に変換して表示しているからです。

そしてそのVertex一個一個が保持するNormal VectorとTangentの値から作成されたTangent Space内に展開されたNormal Mapの値を新しいNormal の値としてWorld Coordinateの値に変換して表示したのが Pixel Normal WSノードです。

この後にMaskのやり方と、Maskで隠せていないBlend部分を更にMaskするための実装方法が紹介されています。いますが何でそのやり方でMask出来るのかについてはあんまり検証していません。

この辺は今週の勉強でしっかり検証します。

3.3 Direction Masks - Shader Graph Basics - Episode 27 [2]を軽く見る

このTutorialの細かい内容は既に忘れてしまったので、実装をする前に一回全部、見直す事にします。

今回はUnityの実装方法もしっかり見ました。

UnityはUEのZ軸がY軸で緑のようです。

以下の図はVertex Normal WS ノードと同じ機能を持つUnityのノードの絶対値を微調整したモノですが

f:id:kazuhironagai77:20220228000043p:plain

緑色が上下に現れていて最初は混乱しました。

大体のLogicと言うかMaskの作成方法の流れが理解出来ました。以下にまとめます。

  1. World CoordinateにおけるObjectNormal Vectorを手に入れる。
  2. Normal Vector-1から1の範囲の値を示しているので色で表示すると0以下が全て黒くなってしまう。ので絶対値で表示するようにする。
  3. Normal Vectorの絶対値を色で表示するとほとんど真っ白になってします。Contrastを強くして白い部分を少なくするためにPowerを掛ける。
  4. Blendされる箇所が黒く表示されているのでその部分を消す。
  5. 4を行うためにまずWorld Coordinate Normal Vectorの絶対値にPowerを掛けたもの(つまり1から3まで実行したモノ)に(1,1,1)を掛けたものを作成する。この掛け算はDot Productを使用する。
  6. 5 で作成したもので3まで作成したモノを割る。すると黒い部分が消える。
  7. これのB成分を抜き出したものがMaskになる。
  8. 先週作成したProjectionと7で作成したモノを掛けると歪んでいる箇所を黒くMaskしたMaterialが作成される。

ここでよく分からない事もまとめておきます。

<World Coordinateに変換したNormal Vectorじゃないと駄目なのか?>

これLocal Coordinateじゃ駄目なんでしょうか?あ

あ、Objectを回転した時にProjectionとずれが生じてしまいますね。

これは駄目でした。

<Blendされている部分が黒くなる理由>

これ良く分かりません。実装する時に検証、考察します。

<(1,1,1)をDot Productで掛けたものがBlend した部分と一致する理由>

これもよく分かりません。実装する時に検証します。

3.4 Direction Masks - Shader Graph Basics - Episode 27 [2] を実装する

それではTutorialをやっていきます。

やっていきますが、やり方はもう分かっているのでTutorialを見ないでやってみます。

まずVertex Normal WSノードをBase Colorに繋げます。

f:id:kazuhironagai77:20220228000141p:plain

下から覗いた時の結果です。

f:id:kazuhironagai77:20220228000204p:plain

Normal Vectorの-1 から0の値を示している箇所が黒くなっています。Negativeな値は全部黒くなってしまうので絶対値で表す事にします。

f:id:kazuhironagai77:20220228000221p:plain

結果です。

f:id:kazuhironagai77:20220228000237p:plain

今度は逆に真っ白過ぎて何だか分からなくなりました。Contrastを付けて白さを消します。

そのためにPowerを掛けます。

何故Powerを掛けるとContrastが強調され白さが消えるのかは、2022-01-17のBlogの以下のGraphを見ると理解出来ます。

f:id:kazuhironagai77:20220228000256p:plain

以下の実装にしました。

f:id:kazuhironagai77:20220228000313p:plain

取りあえず8乗しました。

結果です。

f:id:kazuhironagai77:20220228000327p:plain

この時点でBlendされている箇所は相当黒くなっていますね。

64乗にしたら

f:id:kazuhironagai77:20220228000346p:plain

真っ黒になりました。

あれ。

想像したのと違う。

逆に2乗だとほとんど黒い部分はありません。

f:id:kazuhironagai77:20220228000403p:plain

乗数を増やすと黒い部分が増える理由が分かりました。

以下に示した赤い枠の部分の割合が増えるからです。

f:id:kazuhironagai77:20220228000423p:plain

前節の「Blendされている部分が黒くなる理由」の解答はこれですね。

この黒い部分を消すだめにDot Productを計算します。

f:id:kazuhironagai77:20220228000444p:plain

こんな結果になります。

f:id:kazuhironagai77:20220228000457p:plain

むー。この部分が分からない。

何でこのDot Productで出て来た黒い部分と、Normal に絶対値を掛けてPowerした時に生じる黒い部分が一致するのか?

前節の「(1,1,1)をDot Productで掛けたものがBlend した部分と一致する理由」の疑問の部分です。

かなり考えましたがIdeaが出て来ません。

取りあえず保留します。

先程作成したDot Productの値で割って黒い部分を消します。

f:id:kazuhironagai77:20220228000521p:plain

結果です。

f:id:kazuhironagai77:20220228000536p:plain

びっくりするぐらい黒い部分が消えています。

先程、ほとんど黒くなっていた64乗した場合です。

f:id:kazuhironagai77:20220228000551p:plain

凄い綺麗です。

こんな綺麗になるんですからDot Productで割るのは何らかの数学的な論理で保証されているはずです。

最後にSplit ComponentノードでBの値だけ取り出します。

f:id:kazuhironagai77:20220228000610p:plain

結果です。

f:id:kazuhironagai77:20220228000637p:plain

今度は先週作成したZ軸に歪みのないProjectionを作成します。

f:id:kazuhironagai77:20220228000711p:plain

0.01を掛けるのを忘れて最初以下の様な結果に成って焦りました。

f:id:kazuhironagai77:20220228000724p:plain

0.01を掛けるのはUnreal Unitが1cmだからでしょうね。

下側から覗いた時です。

f:id:kazuhironagai77:20220228000744p:plain

全く歪んでいません。

勿論、Z軸以外から見た時は歪みまくっています。

f:id:kazuhironagai77:20220228000802p:plain

これに先程の実装を掛けます。

f:id:kazuhironagai77:20220228000819p:plain

結果です。

f:id:kazuhironagai77:20220228000835p:plain

歪んでいる箇所に黒いMaskを掛ける事に成功しました。

4.Prologueの作成

4.1 Animationの追加

以下の様に作成してみました。

f:id:kazuhironagai77:20220228000902g:plain

お化けや人魂のTextureのサイズが大きいので小さく作り直します。

f:id:kazuhironagai77:20220228000938p:plain

f:id:kazuhironagai77:20220228000951p:plain

f:id:kazuhironagai77:20220228001007p:plain

f:id:kazuhironagai77:20220228001025p:plain

こんな感じになりました。

f:id:kazuhironagai77:20220228001046p:plain

神様が登場するシーンのAnimationも追加しました。

f:id:kazuhironagai77:20220228001102p:plain

更に銀河鉄道の登場シーンのAnimationも追加しました。

f:id:kazuhironagai77:20220228001123p:plain

Animationの最中にボタンを押すと変な挙動をする事が分かったので、Animationが終わるまでボタンは押せないようにしました。

f:id:kazuhironagai77:20220228001150p:plain

f:id:kazuhironagai77:20220228001200p:plain

Animationが終わるとボタンが押せるようになります。

f:id:kazuhironagai77:20220228001237p:plain

f:id:kazuhironagai77:20220228001248p:plain

<Prologue感想>

大体完成して分かったんですが、まるでPower Pointの発表です。

もう少し工夫が必要です。

4.2 電車を検証する

このシーンに電車を追加したいです。

f:id:kazuhironagai77:20220228001316p:plain

先週調べた

f:id:kazuhironagai77:20220228001331p:plain

の電車をもう少し調べます。

f:id:kazuhironagai77:20220228001346p:plain

この電車をActorにしてRPGのProjectにMigrate したいです。

がPartsが多すぎてどうやって一つのActorにまとめるのか分かりません。

Partsだけ見てみます。

f:id:kazuhironagai77:20220228001409p:plain

外装を外した状態です。

100個以上のPartsがあります。

うーん。

プラモでも組み立てる気持ちになってBP内に全部のパーツを移動させますか。

f:id:kazuhironagai77:20220228001448p:plain

半分位作成しました。

残りは来週やります。

5.Open Worldの検証

5.1 今までの学習内容とこれから勉強する内容について

Open Worldの検証と他のMapの作成は学習する内容がかなり被るのでここで整理しておく事にします。

今まで以下の内容を勉強しています。

<Open Worldの検証のための勉強>

ここでは次のGameはOpen Worldで作成しようと思っているので、そのための勉強をしています。

<他のMapの作成>

ここでは今作成中のRPGの他のMapの作成を行います。これから作成するMapには雪山、砂漠、そして迷宮があります。

そのために以下の勉強を行っています。

  • 雪山のLandscape用のMaterialの検証
  • 前回Landscapeを作成した時に勉強した内容の復習

お互いに勉強する内容はかなり同じになりますが目的が違います。そこをはっきり認識してやっていきます。

5.2 Layer Blendノードの勉強

先週、Procedural Foliage Toolを勉強して思ったのは、Procedural Foliage Toolの使用方法を理解するためには、先にLayer Blendノードの使用方法を理解する必要があります。

f:id:kazuhironagai77:20220228001557p:plain

一応、Layer Blendノードの使用方法は理解しているつもりですが、しっかり勉強した事はありません。

今週はLayer Blendノードの使用方法をしっかり勉強します。

5.3 Layer BlendのTutorialを探す

まずLayer Blendを勉強するためのTutorialから調べます。

先週、Procedural Foliage Tool でLayer Blendノードを使用して思ったのが「こんなLandscapeのPaintの仕方は知らない。」です。

つまりLandscapeのPaint方法にLayer Blendと言うTechniqueが有るはずです。そしてそのためにLayer Blendノードが開発されているはずです。

その辺をはっきりさせた上でLandscapeのPaint方法でLayer Blendを使用する方法を勉強します。

一番に見つかったのが公式のDocumentであるLandscape Materials [6] です。その前にあるLandscape Edit Layers [7]もLandscapeの仕組みを理解するためには勉強する必要がありそうです。

f:id:kazuhironagai77:20220228001622p:plain

ただこのサイトはLayer Blendノード内のそれぞれのParameterの説明が主でLayer Blendの作成方法やLayer Blendノードの使用方法についての解説ではないです。

YouTubeのTutorialでも検索しましたが

f:id:kazuhironagai77:20220228001639p:plain

Layer Blendのやり方だけ教えているTutorialがありません。

あれ?

ひょっとしてLandscapeをPaintするのには必ずLayer Blendを使用するの。

何かそんな気がしてきました。

良く考えたら普通のLandscapeのPaintの仕方も知らなかったです。

LandscapeのPaintの基本から調べ直します。

公式のDocumentであるLandscape Quick Start Guide [7]を見てみます。

このDocumentはLandscapeの作成方法を全く知らない人が手っ取り速くLandscapeを作成出来る様になるためのTutorialです。ので最も基本的な内容で構成されているはずです。

ここでLandscapeのPaint方法についてどのように教えているのか見てみます。

f:id:kazuhironagai77:20220228001656p:plain

f:id:kazuhironagai77:20220228001702p:plain

思いっきりLayer Blendノードを使用してPaintしています。

この後、YouTubeにあるLandscapeの初心者向けのTutorialも見ましたが全部、Paintする時にLayer Blendノードを使用していました。

はい。

LandscapeをPaintする時には必ずLayer をBlendしながらPaintします。そしてそのPaintをするためにLayer Blendノードを使用します。

うーん。

こんな最初から勘違いしていたのか。

でも今、理解したので良しとします。まあBetter Late Than Neverです。

言い訳になりますが、UEのMaterialの仕組みを本当に理解し始めたのは最近なので、今までLandscapeを勉強した時、MaterialはBlack Box的な扱いでTutorialに書かれている事をそのままやっていました。のでLandscapeのPaintはLayerを作成して行うなんて事は全く頭に残らなかったです。

これはお絵かきソフトと同じ理論と考えたら直ぐに納得出来ます。Layerを重ねる事で絵を描いていく訳です。

基本中の基本ですがこのLandscapeのPaint方法を今週は勉強します。

5.4 Landscape Quick Start Guide [7]のPaint部分を勉強する

Paintだけやるつもりでしたが、Version 4.27のTutorialなのでVersion 4.27のLandscape回りのUIを知るために全部やる事にしました。

<1 - Working with the Landscape Tools

LandscapeはModeから選びます。

f:id:kazuhironagai77:20220228001731p:plain

Modeの位置が変わっています。

でもこういうUIの変化って上辺ですよね。本筋を理解している事が大切で、Landscapeの基本は変わってないですし、本筋さえ理解出来ていればすぐにこういう変化には対応できますし。

<2 - Creating a new Landscape

Landscapeを作成しました。

<3 - Sculpting the Landscape

取りあえずLandscapeを以下のように作成しました。

f:id:kazuhironagai77:20220228001757p:plain

ここでCtrl+1でCameraのViewを固定出来ると書かれていますが、出来ません。これは後で調べる事にします。

後、基本的なToolの使用方法についても解説していましたが、スキップしまいした。必要な時が来たら勉強します。

<4 - Creating Landscape Materials

はい。Landscape用のMaterialを作成します。

うーん。

このInstructionの書き方だとMaterialで使用する以下のTextureは

f:id:kazuhironagai77:20220228001817p:plain

learning projectにあるLandscape Mountains内にあるように思えます。

私もLandscape MountainsをDownloadしました。

実際は、Contents ExamplesのLandscapes内にありました。

f:id:kazuhironagai77:20220228001835p:plain

これ滅茶苦茶不親切です。

初心者がこの説明からこれらのTextureを見つけられる可能性はほぼ0でしょう。

99%の読者がこのStepで挫折しますよ。

Tutorial通りに並べました。

f:id:kazuhironagai77:20220228001852p:plain

ここでやっと今週の勉強の目的であるLayer Blendノードの登場です。

f:id:kazuhironagai77:20220228001909p:plain

以下の様な設定です。

f:id:kazuhironagai77:20220228001942p:plain

Blend TypeがLB Weight Blendは先週使用しましたが、LB Height Blendは良く知りません。

TutorialによるとHeight BlendingはWeight informationと共にTexture SampleのAの値から得たHeightの値も考慮するそうです。

この解説だけでは良く分からないですね。

後で調べます。

Normal MapのLayer Blendです。

f:id:kazuhironagai77:20220228001959p:plain

f:id:kazuhironagai77:20220228002008p:plain

こっちはSnowのBlend TypeがLB Weight Blendになっています。

BaseとNormal でBlend Typeを一致させる必要もないみたいです。

後、先週のTutorialではPreview Weightの値を全部1にセットしていたんですが、

f:id:kazuhironagai77:20220228002030p:plain

これ凄い不自然な気がしていました。

こっちはPreview Weightの値はそれぞれ1,0,0でセットしています。

Tutorialの説明通りに繋げました。

f:id:kazuhironagai77:20220228002048p:plain

<5 - Painting Landscape Materials

Landscapeを選択してLandscape Materialに今作成したMaterialをセットします。

f:id:kazuhironagai77:20220228002109p:plain

するとLandscapeは以下に示した様な真っ黒になります。

f:id:kazuhironagai77:20220228002130p:plain

ここにPaintしていきますが、その前に一個やる事があります。

Landscape Layer Info Objectsを作成します。

Landscape Modeを選択して

f:id:kazuhironagai77:20220228002151p:plain

Paintを選択します。

f:id:kazuhironagai77:20220228002208p:plain

更にLayerのSoilの+を押して以下のboxを表示させて

f:id:kazuhironagai77:20220228002230p:plain

Weight-Blend Layer (normal)を選択します。

全部のLayerで同じ事をします。

これはLayerを作成しているんだと思います。そしてどんなTypeのLayerを作成するのかの選択をしているはずです。

Layerが出来たらLandscapeに色が付きました。

f:id:kazuhironagai77:20220228002301p:plain

3つのLayerで色を塗りました。

f:id:kazuhironagai77:20220228002321p:plain

一応、芸術的な出来はともかくとして、これで完成です。

Layer Blendノードの使用方法も完全に理解出来ました。

<6 - Landscape Tips and Tricks

後はTipが紹介されています。

簡単にまとめておきます。

<<Tips & Tricks>>

Shift + Left Mouse ButtonでPaintを消す事が出来ます。

Alpha Brushを使用する時はRGBの値を変える事でBrushの形を変えれるそうです。これは使った事がないので良く分からないです。

<<World Composition>>

World Compositionについての解説です。

World Compositionを使用する事で非常に巨大なMapを作成する事が出来ると説明しています。

その巨大なMapの具体的な作成方法を知りたいんです。私は!

<<External Creation Tools>>

Mapを作成するための外部のSoftwareが紹介されています。

Procedural なterrainを作成出来る外部Toolとして Houdini、World Machineも紹介されています。更にTerragenと言う名前のSoftでもProcedural なterrainを作成出来るとありました。

後、もっと詳しいLayer Blendノードの解説は公式のDocumentのLandscape Expressions [8] を見て下さいとありました。さっき見つけた公式のDocumentであるLandscape Materials [6]と一緒に後で読む事にします。

5.5 World MachineUser Guide [9]の勉強

まさかLayer Blendノードの勉強にこんなに時間を取られるとは思いませんでした。

今週は

f:id:kazuhironagai77:20220228002404p:plain

を勉強します。

5.6 Render Extents and Project Setup [10]の勉強

Render Extentについて話していますが、どれがRender Extentなのかが分かりません。多分

f:id:kazuhironagai77:20220228002427p:plain

この部分でしょう。

Project SetupからこのRender Extentを作成したり編集したり出来るそうです。更にExplorer Viewからは図を用いてこのRender Extentを編集出来るそうです。

<Project Setup

Project Settingについての解説です。以下にProject Settingを示します。

f:id:kazuhironagai77:20220228002448p:plain

Project Settingってこれの事だったんですね。

ここからRender Extentを作成したり編集したり出来るんでしょうか?

<Scene Selection

Scene Selectionってどれの事を言っているんでしょうか?

以下のScene Setupの事でしょうか?

f:id:kazuhironagai77:20220228002510p:plain

まず説明されていたのが以下のボタンを押すと新しいRender Extentを作成出来るそうです。

f:id:kazuhironagai77:20220228002527p:plain

こいつを押してRender Extentが何なのかを解明します。

以下の条件で作成しました。

f:id:kazuhironagai77:20220228002546p:plain

サイズを20kmにしたので大きなLandscapeが作成されるのでしょうか?

Landscapeが以下のようになりました。

f:id:kazuhironagai77:20220228002606p:plain

以下の部分からMain Extentsを選択する事で元のRender Extentを選択しました。

f:id:kazuhironagai77:20220228002623p:plain

こっちは最初から作成されているLandscapeで大きさは4km平方です。

f:id:kazuhironagai77:20220228002639p:plain

小さく表示されています。

うーん。

これから推測するとRender ExtentとはUEで言う所のLandscapeの事を指している様ですね。

更に編集されないようにRender ExtentをLockする事も出来るそうです。

f:id:kazuhironagai77:20220228002659p:plain

この錠ですね。でもこれをLockすると何が編集出来なくなるのか分かりません。

試しにShape Deviceを繋げてみたらPreview Lockedと表示されました。

f:id:kazuhironagai77:20220228002712p:plain

Lockを解除しましたが、Preview Lockedは消えません。An Update to This device is available。と書かれているのでUpdateすればPreview Lockedは消えそうです。

f:id:kazuhironagai77:20220228002732p:plain

DeviceをUpdateする方法はまだ分かりません。

Render Extentを元のヤツに戻しましたが、Worldは元に戻りません。

f:id:kazuhironagai77:20220228002748p:plain

うーん。Render Extentが何を指しているのか分からなくなって来ました。

まあ、軽くやっていきます。まだ勉強初めて2回目ですので。

<Resolution

これの事でしょうね。

f:id:kazuhironagai77:20220228002811p:plain

無料版は1025×1025 かそれ以下のResolutionしか使用出来ないそうです。

Resolutionを上げるともっと細かいLandscapeが作成出来るみたいです。Low Polyの世界だったら1025×1025でもかなり大きなLandscapeを作れると思うんですが、まだやり方が分かりません。

後、Resolutionの以下の部分の解説がありました。

f:id:kazuhironagai77:20220228002830p:plain

あんまり理解出来なかったですが、UEなら以下にあるUE4 Landscapeを選択すれば良い気がしてます。

f:id:kazuhironagai77:20220228002849p:plain

<Memory Conservation

Memoryなんてそんなに食うのかなと思っていたらその疑問にずばりの解答が有りました。

World Machineは全てのDeviceの計算結果をMemory内に保持しているそうです。こうする事でWorldの編集をする時に大変便利になるそうです。しかしそのせいでMemoryを食う訳です。

成程。

そしてMemory Conservationを入れるとこのMemory内の保持の割合を減らすみたいですね。

そしてMemory Conservationは以下の箇所に有りました。

f:id:kazuhironagai77:20220228002912p:plain

以下の中から選択が出来るようになっていました。

f:id:kazuhironagai77:20220228002927p:plain

これらのそれぞれの特性についても説明されていました。

<World Dimensions

次は以下の部分の解説です。

f:id:kazuhironagai77:20220228002947p:plain

この部分でRender Extentの大きさと形を指定するそうです。

World Dimensions内のOriginの設定についてです。

f:id:kazuhironagai77:20220228003003p:plain

OriginについてですがWorld SpaceにおけるこのRender Extentの中心と書かれています。

うーん。何で(0,0)が中心じゃないんでしょうか?

試しに0,0にしてみました。

f:id:kazuhironagai77:20220228003018p:plain

今度は8km、8kmにしてみます。

f:id:kazuhironagai77:20220228003036p:plain

はい。

分かりました。

LandscapeじゃなくてRender Extentは元々World Spaceでは中心に配置されています。しかしRender Extent自身が点ではないので大きさがあります。そのRender Extent内の中心を決めるのがこのOriginなんです。UEのAssetでいう所のPivot です。

0.0が右上になります。そのRender Extentのサイズの大きさの値をOriginに入れると左下になります。

<Project Setup

f:id:kazuhironagai77:20220228003100p:plain

これについての解説です。

まずは以下の部分です。

f:id:kazuhironagai77:20220228003119p:plain

Project Authorですが製作者の名前を入れる所だそうです。

Project DescriptionはこのProjectについての説明を書いて置く箇所です。

f:id:kazuhironagai77:20220228003135p:plain

Override relative project pathですが、これってDataをSaveするFolderを指定するんでしょうか?

今一良く分かりません。

実際にProjectを作成する時に試してみます。

<Colors

以下の部分の設定ですね。

f:id:kazuhironagai77:20220228003155p:plain

Heightfieldの色の設定をここでするみたいです。HeightfieldはHight Mapの別名みたいです。となるとGrayscaleの意味は分かりますが、Terrain height Shadeは何を指定しているでしょうか?

一番分からない箇所です。

<Dimension Preference

f:id:kazuhironagai77:20220228003216p:plain

UnitはKm しか使わないでしょう多分ですが。

下のProject Elevation Quick ScaleでRender Extentの高さを決定するみたいです。

一寸疲れちゃったので今週のWorld Machineの勉強はここまでにします。

6.他のMapの作成

6.1 雪山のLandscape用のMaterialの検証

先週、これを検討すると決めたのでやります。

f:id:kazuhironagai77:20220228003245p:plain

まずはDistanceの値を変更して、Landscapeがどう変わるのかを調べます。

f:id:kazuhironagai77:20220228003303p:plain

Distanceの値を5から0に変更しました。

f:id:kazuhironagai77:20220228003332p:plain

地面に積もっている雪の量が減りました。

今度はDistanceを50に変更します。

f:id:kazuhironagai77:20220228003354p:plain

雪の量が増えました。

後は何でVertex Normal WSノードと掛けているかです。

f:id:kazuhironagai77:20220228003418p:plain

うーん。分からん。

大体、TessellationでVertexを増やしてしまうんだから元々のVertexのNormalを知ったからってどんな意味があるんでしょう?

うーん。

あれ。

よくよく考えたら普通はどうやってWorld Displacementの値を指定するのかを知らなかった。

f:id:kazuhironagai77:20220228003435p:plain

ひょっとして

公式のDocumentである1.11 - World Displacement [11] を見てみます。

f:id:kazuhironagai77:20220228003450p:plain

はい。World Displacementはこうやって実装するんでした。VertexのNormal Vectorの方向に向かってずれるんでしょうね。

このサイト、かなり重要な情報が2つ書かれていました。

一つ目はWorld DisplacementとWorld Position Offsetの違いです。World Displacement はTessellation verticesに働いて、World Position Offsetは普通のVertexに働くそうです。

でもTessellation verticesの時はNormal MapからのNormalはまだ計算されていなかったのか覚えていません。

もう一つはWorld Displacementで元々の境界以上にVertexを移動させた場合、CullingやShadowにErrorが生じる事があるそうです。これはRenderingは元々の境界で行うからだそうです。

ふーん。でした。

6.2 前回Landscapeを作成した時に勉強した内容の復習

先週、前回のLandscapeの勉強内容を振り返ってLandscapeに関して勉強した内容をまとめました。

f:id:kazuhironagai77:20220228003512p:plain

今、読み直してみると大体合っている気がします。

World Aligned Blendが何なのかは分かりません。

しかし

f:id:kazuhironagai77:20220228003530p:plain

と書いてある様にかなりの抜けがあります。

今週はもう一回、Landscapeに関してまとめたBlogを読み直して、先週まとめきれなかった部分を継ぎ足します。

6.3 Landscapeに関しての先週の復習のやり直し

2021-03-15Blog

f:id:kazuhironagai77:20220228003549p:plain

この週は、Landscapeの勉強をこれからします。という感じの内容で先週のまとめに抜けはないです。

2021-03-22Blog

大変な量を勉強していて単純にまとめる事は出来ませんが、他のLandscapeの勉強で一応、似た内容は勉強したか今、勉強中です。

Layer BlendやProcedural Foliage Toolのやり方をほとんど初めて勉強して面食らっています。

唯一、他に載っていない情報としてDebugする時に使用出来るLayer の可視化についてがあります。

f:id:kazuhironagai77:20220228003609p:plain

以下の方法で行うそうです。

f:id:kazuhironagai77:20220228003626p:plain

2021-03-28Blog

読み直しましたが、先週のまとめで抜けている箇所は特にないように思えます。

2021-04-04Blog

Distance blendを使用してTextureがタイルの繰り返しのように見えないようにしています。このDistance Blendと言う技術のやり方、全く覚えていません。後で勉強します。

World Aligned Blendについては以下の様にまとめてありました。

f:id:kazuhironagai77:20220228003651p:plain

2021-04-11Blog

特に抜けている情報はないです。

<Landscapeの復習のまとめ>

これでLandscapeの復習が終わりました。大体の内容は理解しました。

6.4 World Compositionの復習

これは来週やります。

7.Game DesignポケモンHxHの念能力( 戦闘システムの作成)

今週は以下の部分の実装を作成します。

f:id:kazuhironagai77:20220228003732p:plain

Playerが操作する魔術師が戦闘で使用する魔法を選択するPhaseです。

7.1 Widgetのデザインを考える

どんな魔法を使用するのかを決定するには、敵味方の召喚されたMonsterの情報が不可欠です。

f:id:kazuhironagai77:20220228003801p:plain

となると上記のようなそれぞれのMonsterの配置図が必要です。

コメントを表示するBoxは必要でしょうか?

多分要らないでしょう。

コメントBoxはなしにします。

決定ボタンは選択が終わるまでは押せないようにするか、それとも決定ボタンを押したら魔法を選択してない状態で次のPhaseに行けるようにするか。ちょっと考え中です。

魔法の選択には、どんな魔法を使用するかの選択と誰に対してその選択した魔法を使用するのかの2つの選択を決定する必要があります。

選択出来る魔法の一覧表とその魔法を使用する対象を選択する一覧表が必要です。

7.2 実際にWidgetを作成してみる

以下の様なデザインにしました。

f:id:kazuhironagai77:20220228003828p:plain

左の茶色のBox内に魔法の名前が入ります。

実装部分は全く作っていませんので、実際の画面は以下の様です。

f:id:kazuhironagai77:20220228003845p:plain

7.3 魔法のタイプの復習

2021-12-20のblogなどでまとめた魔法の種類です。

f:id:kazuhironagai77:20220228003906p:plain

これは今はもう少し整理出来て以下の様に考えています。

<祝福系魔術>

魔法にかかったMonsterが得になるタイプの魔法です。

基本的に味方に使用します。

Monsterを強化、回復するタイプの魔法です。

  • 回復魔法
  • 強化魔法
  • 呪い解除

<呪い系魔術>

魔法にかかったMonsterが不利益を被るタイプの魔法です。

基本的に敵に使用します。

Monsterを弱体化、無力化する魔法です。

  • 攻撃力を弱体化
  • 攻撃出来なくなる
  • 祝福系の魔法の効果を消す

<自然系魔法>

魔法にかかったMonsterが特にも損にもなるタイプの魔法です。

味方に掛ける時は、味方のMonsterの利益になるように、敵に掛ける時は敵のMonsterの不利益になるように使用します。

  • 陣地交換
  • タイプの変化

<幻系魔法>

相手を騙すタイプの魔法です。

  • 分身の術(攻撃が当たる確率が下がる)
  • 嘘のタイプを表示する
  • 嘘のMonsterを表示する
  • 嘘の体力ゲージを示す。

ここまでまとめてある問題に気が付きました。

7.4 ある種の魔法の使用は後攻が不利になる点について

今の戦闘は以下の順番で行っています。

  1. 先攻、後攻を決める
  2. 先攻の魔術師が使用する魔法を決める
  3. 後攻の魔術師が使用する魔法を決める。
  4. 先攻の攻撃
  5. 後攻の攻撃
  6. 1~5を繰り返す。

問題は4と5にあります。先攻は魔法をかけてから攻撃します。のでどんな魔法を使用しても100%望んだ効果を得る事が出来ます。それに対して後攻の場合は呪い系や自然魔法を使用しても相手のMonsterは既に攻撃した後なのであんまり意味ないです。

このため後攻になった時は祝福系の魔法しか使用出来なくなります。

うーん。

でも先攻、後攻は50%の確率で毎ターン変わるので、それでも良い気もしてきました。後攻は祝福系魔法を使用する。のは戦術として有りな気もします。

この辺は作ってから考える事にします。

7.5 取りあえず一番簡単な回復魔法のWidgetだけ作成します。

しました。

f:id:kazuhironagai77:20220228004031p:plain

7.6 回復魔法以外の機能を実装します。

MonsterのParameterを表示出来るようにしました。

f:id:kazuhironagai77:20220228004123p:plain

実装方法はEvent Player Monster Attack やEvent Opponent Monster Attackと一緒です。

f:id:kazuhironagai77:20220228004150p:plain

魔法の対象のMonster Listは魔法を選択するまでは表示されないようにしました。

f:id:kazuhironagai77:20220228004209p:plain

決定ボタンも消しました。

f:id:kazuhironagai77:20220228004230p:plain

回復ボタンを押すとその魔法を使用するMonsterを選択するBoxが表示されるようにしました。

f:id:kazuhironagai77:20220228004254p:plain

その魔法を使用するMonsterを選択すると決定ボタンが表示されるようにしました。

f:id:kazuhironagai77:20220228004320p:plain

7.7 回復魔法が使用出来るようにする

コメントだけ表示出来る様にしました。

f:id:kazuhironagai77:20220228004349p:plain

魔法の種類やMonsterの配置に対応したEnumを作成し

f:id:kazuhironagai77:20220228004642p:plain

f:id:kazuhironagai77:20220228004650p:plain

どの魔法とどのMonsterを選択したかをGame Modeに新しく作成した変数に保持させます。

f:id:kazuhironagai77:20220228004709p:plain

f:id:kazuhironagai77:20220228004717p:plain

Player側のMonsterが攻撃する時に以下の実装で表示させました。

f:id:kazuhironagai77:20220228004733p:plain

文章を分かり易く直しました。

f:id:kazuhironagai77:20220228004749p:plain

回復魔法を使用するとMonsterのHPが300だけ回復するようにしました。

f:id:kazuhironagai77:20220228004803p:plain

テストします。

f:id:kazuhironagai77:20220228004817p:plain

回復魔法を唱えました。

f:id:kazuhironagai77:20220228004836p:plain

右翼にいるMonsterのHPが回復しました。

f:id:kazuhironagai77:20220228004856p:plain

出来たんですが、完成したらやっぱり一寸考えていた戦闘システムのアイデアとは違うものが出来ています。

7.8 理想としていた戦闘システムとは?

理由が分かりました。

私が望んでいた戦闘システムは戦術要素の魔法を使用する事でその戦闘の効果を1.0 から1.2~2.0位に格上げするモノなんです。

この戦闘システムだと戦術要素の魔法を使用する事の効果が良く分かりません。

その理由は対戦相手が何をしてくるか分からないからです。

対戦相手の行動が未知であるので、最適な魔法の選択はPlayer側が魔法を選択する時には存在せず、その結果どんな魔法を選択をしてもその戦術的な効果を1.0 から1.2~2.0位に格上げしたと実感する事は出来ません。

改善案を思い付きました。

ドラゴンクエストのように最初にどんな攻撃をするのかを敵と味方で決めてその後で攻撃のPhaseに入るのではなく、敵の陣形を見て、最適な攻撃をするための魔法を選択し、そのまま攻撃に入ります。その後、敵はこちらの陣形などを見て、敵に取って最適な魔法を選択して、攻撃します。

この順番ならばUserは戦闘時の毎ターン事に最適な攻撃を選択する事が出来き、戦闘中も退屈する事が無くなります。

ので戦闘のPhaseを変更します。

  1. 敵の陣形を見る。
  2. 最適な攻撃をするための魔法を選択する。
  3. そのまま攻撃をする。

一週間、この考えを熟成させる事にします。来週になってもこの考え方が正しいと思うなら作り直す事にします。

8.UE5Lumenの勉強

今週は、UE5のPreview1がReleaseされたのでLumenの勉強はお休みしてUE5のPreview1のReviewをします。

f:id:kazuhironagai77:20220228004939p:plain

これEarly Access 2からUpdateするもんだと思ってUpdateの表示がされるのをずっと待ってました。

まさか別なVersionをDownloadする必要があるとは。

8.1 CGHOW氏のUE5 Preview 1 | What's new in Niagara? [12]を見る

CGHOW氏のNew Levelは以下のようになっていますが、

f:id:kazuhironagai77:20220228005002p:plain

私のはこんな感じです。

f:id:kazuhironagai77:20220228005018p:plain

うーん。

これは私のPCではUE5は動かないのかもしれませんね。

新しいProjectを作り直してみたら今度は表示されました。

f:id:kazuhironagai77:20220228005036p:plain

Niagara Systemを見て行きます。

Fountain を選択して追加します。

f:id:kazuhironagai77:20220228005056p:plain

CGHOW氏によるとNSのIconが変わっているそうです。

f:id:kazuhironagai77:20220228005116p:plain

Systemの方はPropertiesが最初にあるけど後は同じだそうです。

f:id:kazuhironagai77:20220228005133p:plain

ふーん。です。

今度はEmitterです。

f:id:kazuhironagai77:20220228005200p:plain

こっちもPropertiesが最初に来てるそうです。

Propertiesにある+を押すと以下のBoxが表示されます。

f:id:kazuhironagai77:20220228005232p:plain

Event Handlerが。

Event Handlerがここに移されたみたいです。

でもEvent Handlerを作成したらいつもの場所に現れました。

f:id:kazuhironagai77:20220228005246p:plain

次にEmitter Summaryをみます。

f:id:kazuhironagai77:20220228005301p:plain

これはModuleなんでしょうか?

Parameterが何もないです。

f:id:kazuhironagai77:20220228005317p:plain

後で使い方を教えてくれるそうです。

幾つかのModuleには以下に示した様にEmitterからどんな設定をしているのかが分かるようになりました。

f:id:kazuhironagai77:20220228005335p:plain

Particle Spawn SectionにあったSpriteの生成箇所を指定するModuleが全部Shape Location Moduleに集約されました。

f:id:kazuhironagai77:20220228005349p:plain

VelocityはAdd Velocity Moduleに集約されています。

下に示した赤丸の部分を押すとEmitterが縮小しました。

f:id:kazuhironagai77:20220228005416p:plain

はあ。普段はこの大きさで管理するわけですか。

Emitter Summaryの使い方の説明がありました。以下に簡単にまとめます。

例えば、Gravity Force ModuleのParameterであるGravityをEmitter Summaryに追加したいとします。

Gravity上にCursorを置いた状態でMouseの右クリックをして以下のBoxを表示します。

f:id:kazuhironagai77:20220228005435p:plain

そしてShow in Emitter Summaryを選択します。

するとEmitter Summary内にGravityが表示されるようになります。

f:id:kazuhironagai77:20220228005452p:plain

うおー。凄い!

Rendererの種類ですが

f:id:kazuhironagai77:20220228005509p:plain

Geometry Cache Rendererが新しく追加されました。

そう言えば、LumenがあればEmissive Light でもGlobal illuminationが追加されるようになるんでしょう。だったらここにあるLight Rendererの長所って何かあるんでしょうか?

後はあんまり変わってはいないそうです。

うーん。良く分かりました。

8.2 Smart Poly氏のUnreal Engine 5 | Preview 1 (NEW FEATURES) [13] を見る

今度はSmart Poly氏の解説を見てみます。

NiagaraについてのUpdateはかなり理解出来ましたが、Open Worldについての新しい機能についても知りたいです。Smart Poly氏のReviewならその辺の解説が聞けそうです。

UE5におけるOpen Worldの最大の大きさですが、私が理解した範囲では、Origin Rebasingと言う技術を使う事でPlayerが操作するキャラの周り20kmが常にRenderingされるようになり、そうするとほぼ無限の大きさのOpen Worldが作れるみたいです。

f:id:kazuhironagai77:20220228005537p:plain

ふーん。です。

後、Quixel Bridgeから一瞬でAssetをLevel上に配置出来るようになったそうです。

f:id:kazuhironagai77:20220228005552p:plain

以下に示したScreenshotでは一瞬でQuixel にある3D assetをLevel上に配置していました。

f:id:kazuhironagai77:20220228005610p:plain

自分でも試してみたんですが「Loginしろ!」って出て来たので途中で止めました。

やっぱり気になるのでやります。

以下の屋根をLevel上にDrag and Dropしてみました。

f:id:kazuhironagai77:20220228005625p:plain

出来ました。

f:id:kazuhironagai77:20220228005642p:plain

凄い。

9.Blenderの勉強

9.1 先々週までの復習

出来なかったモノ、やり方を忘れたモノだけ記録しておきます。

<選択した面にXYZ軸を表示する方法>

f:id:kazuhironagai77:20220228005710p:plain

Shift + spaceでMoveを選択でした。

<Extrudeで以下のBoxを表示する方法>

f:id:kazuhironagai77:20220228005734p:plain

<Insetで隣り合う面を選択した後でそれぞれ独立したInsetを作成する方法>

以下に示した様な隣り合う面を選択してInsetを行うと

f:id:kazuhironagai77:20220228005801p:plain

こうなります。

f:id:kazuhironagai77:20220228005816p:plain

これを以下に示した様なInsetを作成する方法です。

f:id:kazuhironagai77:20220228005841p:plain

Iを2回押します。

9.2 先週の復習

<Proportional Editing

以下に示した様なCircleを表示させるやり方です。

f:id:kazuhironagai77:20220228005903p:plain

KeyboardのOを押します。

すると以下のToolが選択されます。

f:id:kazuhironagai77:20220228005920p:plain

その後にVertexを選択しかつGを押すとCircleが表示されます。

f:id:kazuhironagai77:20220228005938p:plain

となりのToolを選択する事で変化のタイプを変更する事も出来るそうです。

Bevel

Bevelって何?

全く覚えていません。

f:id:kazuhironagai77:20220228010001p:plain

だそうです。

f:id:kazuhironagai77:20220228010019p:plain

出来ました。

<Shrink とFlatting

Alt + Sです。

以下に示した違いがあります。

f:id:kazuhironagai77:20220228010042p:plain

<3D Cursorを動かす>

これは覚えていたかった。

グギギィです。

f:id:kazuhironagai77:20220228010111p:plain

<面の中央に3D Cursorを置くには?>

面を選択した後に

f:id:kazuhironagai77:20220228010132p:plain

だそうです。

これで復習は終わりです。

やっぱり先週勉強した内容はかなり忘れています。復習は大事です。

9.3 Imphenzia氏のLearn Low Poly Modeling in Blender 2.9 / 2.8 [14]の続きを勉強する

Ico-sphereのMeshの数を変更する>

f:id:kazuhironagai77:20220228010203p:plain

これ、Ico-sphereを作成した直後しか出来ません。

Ico-sphereを作成した直後は画面の左下に以下に示した表示が現れます。

f:id:kazuhironagai77:20220228010220p:plain

これをClickして以下のBoxを表示させます。

そのSubdivisionsの値を変更します。

f:id:kazuhironagai77:20220228010244p:plain

Subdivisionの値を4にしました。

f:id:kazuhironagai77:20220228010301p:plain

< 3D Cursorを中心に移動させる方法>

f:id:kazuhironagai77:20220228010325p:plain

Shift + Cでした。

<木を作る>

Tutorialとは大分違いますが、Steamの部分を作成しました。

f:id:kazuhironagai77:20220228010347p:plain

<<枝の先に葉をつける>>

枝の先の面に3d Cursorを置きます。

f:id:kazuhironagai77:20220228010423p:plain

これのやり方忘れた。

と見直したら、面を選択した後に、Shift + Sで

f:id:kazuhironagai77:20220228010439p:plain

を表示してCursor to Selectedを選択でした。

はい。

出来ました。

と思ったらTutorialではShift +右クリックで3d Cursorの位置を自由に移動させていました。

なにそれ。初めて知りました。下に一応まとめておきます。

<3d Cursorの位置を自由に移動>

Shift +右クリック

<>

Ico-sphereを追加しました。

f:id:kazuhironagai77:20220228010504p:plain

追加したMeshの選択を外すともう2度とそのMesh全体を選択する事が出来なくなります。

f:id:kazuhironagai77:20220228010523p:plain

はい。

<Mesh全体を一発で選択する方法>

3d cursorじゃなくて普通のCursorを選択したいMeshの上に重ねて、KeyboardのL Keyを押します。

f:id:kazuhironagai77:20220228010543p:plain

すっげー。楽です。

Tutorialの解説によるとLはCursorに重なっているMeshのVertexにLinkしている面を全部選択するそうです。

f:id:kazuhironagai77:20220228010602p:plain

葉として生成したIco-sphereと枝やSteamを作成したcubeの面は繋がっていないので、葉を作成したIco-sphereだけ選択出来る訳です。

もうこれだけ覚えただけでも今日Blenderの勉強した甲斐がありました。凄い役に立ちます。

<葉をDuplicateする>

Shift + Dです。

f:id:kazuhironagai77:20220228010628p:plain

もう一個増やしました。

f:id:kazuhironagai77:20220228010644p:plain

<複数のGeometryを選択する方法>

f:id:kazuhironagai77:20220228010709p:plain

単にLで次々に選択していくだけです。

<Proportionalを使用して選択したVertexのある葉の形状だけを変化させる方法>

Vertexを選択してOを押し、Gを押すとCircleが現れます。

f:id:kazuhironagai77:20220228010735p:plain

この方法で葉の形を変えると木や他の葉の形まで変わってしまします。これを選択したVertexがあるGeometryだけ変形させたいです。

以下のBoxを開いてConnected OnlyにCheckします。

f:id:kazuhironagai77:20220228010804p:plain

選択したVertexとConnectしている部分だけProportionalに変形しています。

f:id:kazuhironagai77:20220228010822p:plain

更にTutorialにある通りRotateやRandomも試しました。

f:id:kazuhironagai77:20220228010842p:plain

個人的にはRotateやRandomは最後の締めで使用するには良いかもしれませんが、最初の内に使用するとGeometry全体が不健全に歪む気がします。

<Selection Method

<<Loop Selection>>

面を選択している事を確認します。

f:id:kazuhironagai77:20220228010905p:plain

そしてAlt を押したまま、選択したいEdge上にCursorをおいて、左Clickします。

f:id:kazuhironagai77:20220228010922p:plain

そのEdgeを囲む全ての面が選択されます。

これ、立方体の一辺を選択した時にどの面が選択されるのかは良く分かるんですが、Ico-sphereの一辺を選択した場合はどの面が選択されるんでしょうか?

f:id:kazuhironagai77:20220228010939p:plain

選択されませんね。

分かりました。LoopしてそのEdgeまで戻って来るんです。そしてのLoop上にある全ての面を選択するんです。この機能は。

はい。

理解しました。

<<Circleを表示してそのCircle内の面を選択する>>

KeyboardのC keyを押してCircleを表示させます。

f:id:kazuhironagai77:20220228011001p:plain

左ClickをするとCircle内の面を全て選択します。

横から見ると

f:id:kazuhironagai77:20220228011021p:plain

Circleで選択出来るのはGeometryの表面の面だけで裏にある面は選択されていませんね。

うーん。

3Dの物体の選択に使用するのにはあんまり使い勝手は良くない気がします。

選択した後で、Enterを押す事でその面を選択したまま別の動作をApply出来るそうです。

f:id:kazuhironagai77:20220228011040p:plain

Circleで選択した面にExtrudeを掛けてみました。

結構、良い感じです。

<<Ring Select>>

Edge ModeではRing Selectが出来ます。

Alt + Ctrlを押してEdgeを選択します。

f:id:kazuhironagai77:20220228011105p:plain

先程のLoopのEdge版でしょうか?

と思ったらEdgeにもLoopがあるそうです。

<<EdgeのLoop>>

Altを押しながらEdgeを選択します。

f:id:kazuhironagai77:20220228011125p:plain

選択したEdgeの縦方向にあるEdgeが選択されています。Loopはしていませんね。

<<Shortest Pathの選択方法>>

2つのEdgeを結ぶ最も短いEdgeを選択します。

まず一個だけEdgeを選択します。

f:id:kazuhironagai77:20220228011147p:plain

更にもう一方のEdgeをCtrlを押しながら選択します。

f:id:kazuhironagai77:20220228011202p:plain

するとその二つを結ぶ最短距離のEdgeが選択されます。

まだEdgeに関しては良く分からないです。やり方だけ覚えておきます。

<<Box Select>>

これはVertex Modeで使用します。

KeyboardのBを押すだけです。

Bを押すと以下の様な破線が現れます。

f:id:kazuhironagai77:20220228011225p:plain

破線が現れると、右クリックで以下の様なBoxが作成出来ます。

f:id:kazuhironagai77:20220228011247p:plain

Box内のVerticesが全部選択されます。

f:id:kazuhironagai77:20220228011316p:plain

このやり方は後ろ側は選択出来ないんですね。

f:id:kazuhironagai77:20220228011340p:plain

何かCircleと似ています。

<<Box内にある全部のVerticesを選択する方法>>

Alt +ZでX ray状態にします。

f:id:kazuhironagai77:20220228011406p:plain

GeForceの画面が出て来ていくらやってもX Rayになりません。

Googleったら以下のToolからもX Ray Modeに変更出来るそうです。

f:id:kazuhironagai77:20220228011426p:plain

なりました。

f:id:kazuhironagai77:20220228011445p:plain

これで先程のBoxをすると後ろのVerticesも全部選択出来ます。

f:id:kazuhironagai77:20220228011502p:plain

X ray Modeのまま、Circleで選択してみました。

f:id:kazuhironagai77:20220228011521p:plain

後ろにあるVerticesもしっかり選択しています。

<Lasso Select

Ctrl + 右Clickです。

Screenshotが撮りづらいのでTutorialから取りました。

f:id:kazuhironagai77:20220228011547p:plain

Lasso Selectって何の事かと思ったらこれの事でした。

先週から10分間分のTutorialを勉強したので今週はここまでにします。

10.まとめと感想

今週は、短くまとめようとしたんですが、記録しておくべき必要な個所まで削ってしまった気がします。

単に短くして必要な情報まで削ってしまった気がします。

例えば電車のBPを作成する所ですが、全部のPartsをBP内にPasteしたらStatic Meshが100個出来たんですが、その一個一個が空白でどのStatic Meshを指定するのか不明になっちゃったんです。それで試しに一個だけPartsをCopyしてBP内にPasteしたら今度は上手く行ったんです。

それで100個のPartsを一個ずつCopyしてPasteする作業をやる必要が出て来たんです。これはもっと効率的なやり方があるかもしれませんが、それを見つける努力をするよりも100個位なら何も考えないでCopyしてPasteした方が速く終わると考えて力技で始めたんです。この話を端折って、100個のstatic Meshを一個ずつCopyしている所だけ記録しても後から読んだら何をしているのか全く不明です。

今週は、そういう大切な要を端折ってしまった箇所か何個もありました。

短くまとめられればそれの方が後から読みたい個所を探すのが楽にはなりますが、大切な個所を削って短くする位なら、ダラダラしていても長い方が良い気がします。検索すれば長くても簡単に調べたい話題の箇所は見つけられます。

更に今回のLandscapeの復習でみたように、前に勉強した時はLayer Blendノードの使用方法は良く理解していなかったんですが、Layer Blendの作成方法の手順を細かく記録しておいたお陰で、今読み直して、これはLayer Blendを作成しているんだ、とかこれはProcedural Foliage ToolやWorld Displacementの使用方法を記録していたんだ。とか理解する事が出来ました。

だらだら書いている事は価値があるんです。

今週は短くしようとするあまり、必要な情報ま削ってしまって記録する内容の質が下がってしまいました。

11.参照(Reference

[1] CGHOW. (2021, March 4). Particle Attribute Reader in UE4 Niagara Tutorial | Download Project Files [Video]. YouTube. https://www.youtube.com/watch?v=ZCkfBBHhPxg

[2] Cloward, B. [Ben Cloward]. (2021, December 16). Direction Masks - Shader Graph Basics - Episode 27 [Video]. YouTube. https://www.youtube.com/watch?v=HKSIxFnsHuk&list=PL78XDi0TS4lEBWa2Hpzg2SRC5njCcKydl&index=27

[3] Epic Games. (n.d.-e). Open World Tools. Unreal Engine Documentation. Retrieved February 27, 2022, from https://docs.unrealengine.com/4.27/en-US/BuildingWorlds/OpenWorldTools/

[4] World Machine Software LLC. (n.d.). User’s Guide – World Machine Help. World Machine User’s Guide. Retrieved February 27, 2022, from https://help.world-machine.com/topics/manual/

[5] Smart Poly. (2020, May 19). How To Make A Massive Open World Map In Unreal Engine 4 [Video]. YouTube. https://www.youtube.com/watch?v=HQUC0Gejmo4

[6] Epic Games. (n.d.-c). Landscape Materials. Unreal Engine Documentation. Retrieved February 27, 2022, from https://docs.unrealengine.com/4.27/en-US/BuildingWorlds/Landscape/Materials/

[7] Epic Games. (n.d.-d). Landscape Quick Start Guide. Unreal Engine Documentation. Retrieved February 27, 2022, from https://docs.unrealengine.com/4.27/en-US/BuildingWorlds/Landscape/QuickStart/

[8] Epic Games. (n.d.-b). Landscape Expressions. Unreal Engine Documentation. Retrieved February 27, 2022, from https://docs.unrealengine.com/4.27/en-US/RenderingAndGraphics/Materials/ExpressionReference/Landscape/

[9] World Machine Software LLC. (n.d.-b). User’s Guide – World Machine Help. World Machine User’s Guide. Retrieved February 27, 2022, from https://help.world-machine.com/topics/manual/

[10] World Machine Software LLC. (n.d.-a). 3. Render Extents and Project Setup. Render Extents and Project Setup. Retrieved February 27, 2022, from https://help.world-machine.com/topic/render-extents-and-project-setup/

[11] Epic Games. (n.d.-a). 1.11 - World Displacement. Unreal Engine Documentation. Retrieved February 27, 2022, from https://docs.unrealengine.com/4.27/en-US/Resources/ContentExamples/MaterialNodes/1_11/

[12] CGHOW. (2022, February 23). UE5 Preview 1 | What’s new in Niagara? [Video]. YouTube. https://www.youtube.com/watch?v=vX_HK1wrKC8

[13] Smart Poly. (2022, February 23). Unreal Engine 5 | Preview 1 (NEW FEATURES) [Video]. YouTube. https://www.youtube.com/watch?v=U4hua-Y7qjY

[14] Imphenzia. (2020, June 25). Learn Low Poly Modeling in Blender 2.9 / 2.8 [Video]. YouTube. https://www.youtube.com/watch?v=1jHUY3qoBu8