UE4の勉強記録

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

「Unreal Engine 4.xを使用してRPGを作成する」の足りない部分を作成する 雪山Mapの作成

f:id:kazuhironagai77:20220313224032p:plain

<前文>

<一寸だけUkraineについて

前にも一寸だけ述べましたが、私がアメリカの大学の研究室にいた時の上司が、ユダヤ系のウクライナ人だったので普通の日本人よりはUkraineに詳しいので、この件に関する私の意見をもう一回ここにまとめておきます。

f:id:kazuhironagai77:20220313224059p:plain

この意見と全く同じ事を言っていたアメリカ人のジャーナリストがいたんですが、その人Redditでボコボコにされていました。

こんなアホな事を言っているヤツがいるって感じで「この人、もうジャーナリストとしての仕事は無理でしょう。」って位叩かれていました。

それ以来、この意見と同じ事を言う人は英語圏では見かけなくなってしまったんですが、それでも私は自分の意見が正しいと思っています。

だから本当はこの件に関してはこれ以上書きたくなかったんですが、一個だけどうしても書いておきたい内容があったのでそれを書きます。

<Zelenskyy大統領とPresident for People

今、世界は「Ukraineを救え!」で一致団結してRussia並びにロシア人への非難が凄いですが、最初からこうだった訳じゃないんです。

最初RussiaがUkraineに攻め込んだ時は、中国が香港の暴動を取り締まった時より非難の声が小さかったです。

Zelenskyy大統領が西側諸国に助けを求めた時に、ドイツがヘルメットを50個位送ったのを見て大笑いしていたんです。まあZelenskyy大統領とその側近達に亡命先だけは用意していましたが。

所が、Zelenskyy大統領が「それでもRussiaと戦う。死ぬまでキエフから出ない。俺は逃げれるけど普通のウクライナ人はどうなるんだ。俺は彼らのために死ぬまでここで戦う。」と言って自分で銃持って戦場に出て行ったんです。

これで西欧諸国の空気が一変したんです。

Zelenskyy大統領は単なるComedianじゃなかった。ウクライナ人のために自分の命を賭けて戦う本物のリーダーだったんだ。と西欧諸国は気が付いたんです。それで世界の流れがUkraineを救えに変わったんです。

ここからが私が言いたい事になります。

この時、西洋諸国の人が気が付いたのは「Zelenskyy大統領が真のリーダーだった。」って事だけじゃないんです。自分達の国のPresidentも真のリーダーじゃない事に気が付いたんです。自分達のリーダーは兵役も親の力で免除してもらって、戦争になっても一番安全な場所から人々に命令しています。

これが西洋諸国の人々にとんでもない衝撃を与えたんです。

でもこれってNarutoとか進撃の巨人を見てる日本人や世界の若者にとっては当たり前の事ですよね。アニメや漫画で悪い敵の指導者と味方の良い指導者の違いを表す場面で必ず出て来る場面です。

それが西洋諸国の人達には、初めての経験だったんですよ。

それでここからは私の想像なんですが、Zelenskyy大統領はNarutoとか進撃の巨人を見てて、リーダーは斯くあるべしと思ったんじゃないんでしょうか?

Ukraineから亡命する人達の写真がRedditに載っていたんですが、Vサインしているんです。

私がアメリカにいたほんの数年前まで、私がVサインするとアメリカ人もアメリカに住んでいるヨーロッパ人も飛び上がってびっくりして「それって日本人がするのネットとかでよく見るけど、どういう意味なの?」って聞かれまくりました。

それが今、Ukraineから亡命する人達がカメラに向かって普通にVサインしています。

絶対、Narutoとか進撃の巨人などの日本のアニメみてますよ。彼等。

このZelenskyy大統領のコメントは、RussiaとUkraineの戦局を一変させただけじゃなくて、世界の人々にリーダーとはどうあるべきだったのかの新たな規準を示した、21世紀の分水嶺を築きました。

そのIdeaの核が日本のアニメから来ていると思っているのは単なる私の推測ですが、かなりこの可能性は高いと思っています。

日本人は日本文化の人類に対する貢献をもっと誇りに思うべきです。

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

<本文>

1.今週の予定

  • Niagara: CGHOW氏のTutorialをやる
  • Material :Projectionの勉強の復習
  • Prologueの作成
  • Open Worldの検証
  • World Machineの勉強
  • 他のMapの作成
  • Game DesignポケモンHxHの念能力( 戦闘システムの作成)
  • UE5Lumenの勉強
  • Blenderの勉強

今週も予定としては先週と同じ事をやりますが、内容を吟味する事にします。かなりやる量が多くなってしまって、目的にそぐわない部分の勉強は中止したいです。

まずRPGの作成を終わらせる事を目的にします。

いい加減にこの本と縁を切りたいです。

f:id:kazuhironagai77:20220313224350p:plain

兎に角、完成させるのが目的なのに、RPGの質にこだわり過ぎています。完成した後で直せば良いんですし、UE4C++を敢えて使う必要があるかどうかの検討もすべきです。

2.Niagara: CGHOW氏のTutorialをやる

一応、先週、自分で作成した3d ModelをImportしてEffectの作成をする事が出来ました。

つまりNiagaraの4つRenderingのSprit、Ribbon、Lightに加えてMesh Renderingの使用も出来る様に成ったわけです。

細かい点、例えば(Curl Noize Force Moduleの効果とか)についてはまだ勉強不足な部分はありますが、基礎は大体理解したと言って良いと思います。

Niagaraの勉強は去年の2021-04-26のblogから始まっています。

ほぼ一年、毎週勉強しました。

今までは基礎的な部分を勉強していたので、ガムシャラに勉強してもかなりの成果が出ました。しかしこれからは結果を出すためには、自分で考察して望みの結果が得られているのかどうかを自分の目で検証する必要があります。

そこで、今週は、私が勉強して理解した内容をまとめる事にします。

2.1 勉強して理解した内容

<何故、Effectは光るのか?>

これはNiagaraの勉強を始めてからずっと疑問でした。光っていても明るい場所にいては目立ちませんし、逆に暗い場所ではEffectしか見えません。

この答えを最近、Elden Ringの画面を見て発見しました。(最も私はGameはしないのでYouTubeのゲーム実況の画面を見ただけですが)

画面全体が暗いんです。

これならEffectが光る事で目立つ事が出来ます。

つまりEffectが光る(MaterialがEmissive Colorを使用している場合も含みます。)のは大前提としてGameの世界全体が暗い事が必要だったんです。

何故、こんなに世界が暗いのか?

これは世界を描くための元にしているイメージが西洋画だからだと思います。西洋画は全体的に暗いんです。そして光が点や線として差し込んできます。

これはEurope人が森で暮らしていた事に関連していると言う人もいます。

そう言えば、アメリカでは、映画を見る時は部屋を暗くして観ていました。後、映画館自体が凄い暗かったです。足元が全く見えないんです。まるで森の暗がりの中に居るかの様でした。

私が今、作成しているRPGの世界は別に暗くないです。夜でもそれなりに明るいです。

これは私が潜在的に再現しようとしている世界はアニメの世界で、西洋画の世界じゃなかったからだと思います。更に言えば私の認識する世界も又、西洋人の認識する世界とは違っていたからでしょう。

このアニメの世界におけるEffectが西洋画の世界を再現されたGame内で使用されているEffectと同じ物をそのまま使用したら、明るい場所にいては目立ちませんし、逆に暗い場所ではEffectしか見えない結果になってしまいます。

つまりこれからNiagaraのEffectを勉強して行くに当たってこの日本独自のアニメ的な世界で目立つ仕組みを追加する必要があります。

そのために必要な実装を自分で作成して追加する必要があります。

<Effectの作成の30~60%はMaterialの作成>

これは最初に行ってほしかったです。

かなり長い間、何でMaterialの勉強もしないといけないのか、理解出来なかったです。

やっていく内に、Niagaraの作成においてMaterialの作成の比重が、如何に大きいのかが理解出来ました。Materialの基礎を理解しないでNiagaraというかEffectの作成は出来ません。EffectはMaterialの基礎を理解した後で勉強しましょう。

しかし同時にEffectで多用するMaterialの技法もあるので、Niagaraの勉強にはMaterialの勉強も必要です。

のでNiagaraのTutorialを作成するのなら、その題はStudy of Niagara and MaterialみたいにNiagaraとMaterialを両方勉強しますよ。と言うのが正しいと思います。

何をもってMaterialの基礎と言うのかについての定義をするのは難しいですが、LandscapeでもMaterialは使用しますし、Post ProcessingでもMaterialは使用します。これらに共通する部分を基礎と言ってもいいかもしれませんし、それ以前に単なるMeshに追加するMaterialの生成方法を基礎と言っても良いかもしれません。

Niagaraを使いこなすのに大学レベルの数学は必要か?>

必要です。

Niagaraを使いこなすのには、Materialを自作する必要があり、特にTextureの計算はもろに行列を使用しています。その他の計算、例えばCurl Noize Forceの使用に関しては物理の知識も必要です。

線形代数の基礎すら理解出来ない人が、何故Powerを掛けるのか、Normal Vectorは何故、World Spaceで表されるのかなどを理解する事は不可能です。

ただし日本の受験勉強のような引っかけ問題や娯楽番組でやるクイズのような問題が解ける必要は全くありません。

根本を理解する事が大切です。

私は日本の受験勉強については全く知らなかったんですが、最近、大学入試の問題を解く専門のYouTubeチャンネルを見て、びっくりしました。こんな引っかけ問題や娯楽番組でやるクイズのような問題が解けて何になるのかと思いました。

多分ですが、アメリカ人の優秀な理系の生徒に問題解かせても半分も解けないでしょう。でも彼等は新しいSoftwareを開発する時に、今まで誰も考えた事のない方法を編み出して実現します。

これは物事の根本を理解しているから出来るんです。

先程のPowerの例で言えば、Powerを掛ける事が何故大切なのかは、UEのMaterialでは色を0から1の間で表現しているからPowerを掛けると以下に示した様にContrastが強く出るんです。

f:id:kazuhironagai77:20220313224444p:plain

もしUEのMaterialが色を0から255の間で表していたら、Powerなんで掛けても無駄です。意味ないです。

これが根本を理解すると言う事です。

先程出て来た、引っかけ問題や娯楽番組でやるクイズのような問題はこの根本を理解する事となんの関係もないんです。全く応用が利かない。勿論、日本の大学に入学するためにはそういう勉強も必要でしょうが、それ以上の物を得る事が出来るのか、はなはだ疑問です。

Softwareの作成でも多分なんの役にも立たないでしょう。

学校の教科書を理解する事が最も重要です。そして習った式を自分で応用して使用出来るように成る事が出来れば良いんです。

2.2 光らないEffectの作成について

アニメ的な世界で目立つEffectを作成するためにはどうしたら良いのでしょうか?

<黒くする>

私の個人的な考えですがまず黒だと思います。

アニメ的な世界ではSとVの値がほぼ1です。

f:id:kazuhironagai77:20220313224515p:plain

なのでその反対の白と黒は映えるはずです。しかし白は空が白いので映えません。となるとまず黒くすべきだと思います。

<枠をつける>

日本語で文字を画面に表示する時は、文字に枠を追加して画面の色が被っても読めるようにします。

こう言う奴です。

f:id:kazuhironagai77:20220313224536p:plain

この枠システムをEffectでも採用するのは有りだと思います。

<アニメのEffectをそのまま真似る>

鬼滅の刃とか呪術廻戦などのアニメは戦闘シーンでComputerで作成したようなEffectが使用されています。それを研究して真似るのはどうでしょうか?

今、パラッとネットで見たんですが呪術廻戦のEffectは光っていますね。

でもその周りを黒枠で囲む事で白と黒でEffectを目立たせています。

鬼滅の刃の戦闘Effectはこれは絵なんでしょうか?

良く分かりません。水の波の泡の部分なんかどうやって作成しているのか全然分かりません。

多少は光っていますがやっぱり黒枠と色でEffectを目立たせています。

この辺を見るとやはり基本は黒枠を付ける事みたいです。

2.3 Effectの作成の30~60%はMaterialの作成

これに関しては今までの勉強方法で十分に対応出来ています。

特に新しい対策をする必要はないです。

2.4 Niagaraを使いこなすのに大学レベルの数学力が必要な件について

私は今は一人で制作しているので問題ないですが、分業になった場合どうするんでしょうか?

Designerさんに大学レベルの数学力を要求するのは酷でしょう。

Materialに関しては、Material FunctionにHueなどのDesignerさんが操作出来るParameterを作成する事でカプセル化する事で対応すべきだと思います。

Niagaraでは、Effect単位での操作やModuleのParameterの操作に関してはDesignerさんに任せても良いように作成するのが必要かもしれません。

もしくは一緒に作成するのも手かもしれません。

後、絵を画くのが得意な人は自分で全部作成するのも手かもしれません。

もう一つ疑問なのが、例えばですが、私が今までにないEffectを自作したとします。そのParameterを弄ってDesignerさんが、私の実装したEffectを元に何かを作成したとします。これって著作権は誰に属するんでしょうか?

私は当然、私が作成したEffectなんだから私に属すると思っていますが、Designerさんはどう思うんでしょうか。最後のParameterを弄ったのは俺だから俺の物と思うんでしょうか?

そうなると、私もParameterなんか作成しないでDesignerさんが何も出来ない様にしておくようになると思いますが、こうなるとEffectは全く発展しなくなりますよね。

あ。

アニメ調のEffectがなんであんまり存在しないのかの理由が分かった気がします。

2.5 Fountain に黒枠を付ける

今週は試しと言う事で、Fountain TemplateのSpriteに黒枠を付けてみました。

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

f:id:kazuhironagai77:20220313224646p:plain

まず、Fountain Emitterに使用されているMaterial、Default Sprite Material

f:id:kazuhironagai77:20220313224711p:plain

の実装は以下の様になっています。

f:id:kazuhironagai77:20220313224730p:plain

この実装そのものは簡単な仕組みですが問題はResult Nodeの設定が

f:id:kazuhironagai77:20220313224755p:plain

になっているため、黒を指定するとそこが透明になってしまいます。

のでこの設定を

f:id:kazuhironagai77:20220313224816p:plain

と変更しました。

これで黒色を主力する事が出来ます。

今回は手始めなので、元々あったTextureの

f:id:kazuhironagai77:20220313224835p:plain

を利用して以下の実装にしました。

f:id:kazuhironagai77:20220313224856p:plain

結果です。

f:id:kazuhironagai77:20220313224915p:plain

後ろにアニメ調のIllustrationを配置して見ました。

f:id:kazuhironagai77:20220313224938p:plain

黒くした方が段違いで見やすいです。

Textureを使用するのはCostが高くなるので、Radial Gradient Exponentialノードを使用して

f:id:kazuhironagai77:20220313225000p:plain

以下の様に黒枠を追加してみました。

f:id:kazuhironagai77:20220313225017p:plain

結果です。

f:id:kazuhironagai77:20220313225039p:plain

黒い方が見やすいですね。

中のGradientを取ってみました。

f:id:kazuhironagai77:20220313225105p:plain

こんな感じです。

f:id:kazuhironagai77:20220313225122p:plain

これでLerpノードを使用して色を混ぜる事も出来ます。

f:id:kazuhironagai77:20220313225142p:plain

こんな感じです。

f:id:kazuhironagai77:20220313225207p:plain

拡大すると結構いびつです。

f:id:kazuhironagai77:20220313225235p:plain

サイズを大きくして見ました。

f:id:kazuhironagai77:20220313225256p:plain

芸術的な美しさは兎も角、黒枠を追加した事で見やすくはなりました。

これからはこんな風にCGHOW氏のTutorialをやったらその後で、自分で改良してアニメ調の世界でも目立つEffectを作成していく事にします。

2021-12-20のBlogに白枠を作成する2つの方法が紹介されています。

f:id:kazuhironagai77:20220313225327p:plain

f:id:kazuhironagai77:20220313225337p:plain

まあ、色んなやり方があります。

2.6 公式のDocumentであるNiagara Overview [1] をもう一回、勉強する。

ほぼ一年前の2021-04-26のblogからNiagaraの勉強を始めました。一番最初に勉強したのがこの公式のDocumentであるNiagara Overview [1]です。

一年前の時からどれくらい成長しているのかを感じながらもう一回、勉強してみます。

一番最初の疑問ですが、Niagaraって以下のどんなタイプの人が使えるようになるのかと疑問に思っています。

f:id:kazuhironagai77:20220313225421p:plain

ここまで条件は厳しくないですが、一年間勉強した結果、2+大学レベルの数学の知識が必要という結論になりました。

以下の箇所が意味が良く分からないと述べています。

f:id:kazuhironagai77:20220313225449p:plain

f:id:kazuhironagai77:20220313225458p:plain

それでは読んでみます。

f:id:kazuhironagai77:20220313225517p:plain

の四つが紹介されていました。

こんなの今、見たら当たり前過ぎますが、去年、全くNiagaraを知らない状態で読んだので「何だ!これは?」状態でした。

Emitterの解説を読むと同じEmitter内で別のRenderer Moduleを同時に使用出来るみたいな事が書かれています。これは知りませんでした。

この後、Templateについての解説がありますが、TemplateはTemplateなのでスキップします。

Niagara VFX Workflowです。

うん。全部意味分かりました。

一年前からの成長が実感できて良かったです。

前回良く分からなかったのはModuleの内容でした。

まあこの辺は実際にModuleを使用したり作成したりしないと理解出来ないでしょうね。

次はNiagara Paradigmsを読みます。

Inheritanceの機能はまだ使用した事ないですね。これはこれから勉強する事になるでしょうね。Dynamic Inputsは何回も自作していますし、もうかなり馴染みのモノになっています。Micro Expressionsは何を指しているのか今一良く分かりません。馴染みの機能の事を言っているのかもしれませんし、そうじゃないかもしれません。Eventsは散々勉強したので分からない事はないです。Data Interfaces。これは何を指しているのか分かりません。最後のHoudiniはどうでも良いです。

結構、分からない事もありました。ただ一年前とは比べ物にならない位Niagaraを理解しているのは確かです。

Niagara Overview [1]に関して一つだけ苦言を言いたい部分があります。なんでScreenshotを使用しないんでしょうか?

例えば、Systemの説明をする時に、以下に示した様に

f:id:kazuhironagai77:20220313225537p:plain

一枚SystemのScreenshotを貼り付けるだけで、読者はどこの話をしているのかが理解出来ます。

一年前に読んだとき、何の話をしているのかは分かりましたが、何処の話をしているのかは全然分からなかったです。

3.Material : Projectionの勉強の復習

今週も、Projectionの復習をしていきます。

今週は、Triplanar Projection Improvements - Shader Graph Basics - Episode 29 [2] を勉強します。

前回、作成したTri-planarは上下左右があるTextureには対応していませんでした。今回は上下左右のあるTextureをTri-planarする方法を勉強します。

3.1 2022-01-31Blogの復習

2022-01-31のBlogの復習からやります。

このTutorialは上下左右があるTextureに対応したTri-Planarを作成する方法を教えているですが、最初に上下左右のあるTextureを貼ってどこが逆になっているのかの確認をしていません。

これを途中からやっているので読み直すと少し混乱します。

今回は最初にどこが裏返しになっているのかを検討した上で一個一個の手順をやっていきます。

後、Projectionしているから裏表が逆になっているんだ。と言っている箇所があります。

f:id:kazuhironagai77:20220313225653p:plain

この部分は完全に私の推測で、もう少しこの仮説を裏付ける証拠が欲しかったです。

この辺も今回は深堀します。

この後(1,1,-1)を掛けたりSignノードを使用したりして直しています。

うーん。

手順が複雑過ぎるのにその理論も同時に解明しようとして読んでいて混乱するまとめになってしまっています。

今回は

  • 手順
  • 実装
  • 理論、検証

に分けてまとめてみます。

この後、Material Functionの作成方法についての解説もあります。これについては、今更、勉強する内容ではないので、実装だけする事にします。

3.2 Triplanar Projection Improvements - Shader Graph Basics - Episode 29 [2] を軽く見る

Tutorialを軽く見て内容を確認します。

今回は、前の勉強のように一回見てからどのように学習するのかを決定する必要はありませんが、学習内容の順番の整理などを確認します。

まず、以下に示したTextureを使用してTextureのProjectionが上下左右、裏表が逆になっているのかどうかを確認しています。

f:id:kazuhironagai77:20220313225730p:plain

ここでXY軸が逆になっている事が判明しますが、Tutorialからだと本当に逆なのか良く分かりません。

この後、XY軸が逆なのは

f:id:kazuhironagai77:20220313225748p:plain

XY軸を構成するためのBが逆だからです。と説明されますが、その理由が分かりません。

ここが分かれば、UE以外の軸の場合も自分で直せるようになるはずです。この辺は実装する時に検証します。

今度はProjectionが裏返しになっている箇所を直します。

以下に示した内容は、ここまで詳しくは説明していませんがTutorialでも解説していました。

f:id:kazuhironagai77:20220313225824p:plain

つまりこの解釈で合っています。

このProjectionの裏返しを直す方法を説明しています。ここでSignノードを使用します。

まずSignノードをVertex Normal WSノードに掛けた結果、Negativeになる領域とProjectionが裏返しになる領域が一致している事、ただしX軸だけは逆にPositiveになる領域がProjectionが裏返しになる領域と一致している事を示しています。

これを修正するために、(1,1,-1)をSignノードに掛けます。

f:id:kazuhironagai77:20220313225842p:plain

うーん。

この辺の理屈は前回、勉強した時は抜けていました。

この結果をProjectionしているTextureに書ければそれぞれの軸の裏返しになっている領域が元に戻るはずです。

これをTutorialでは3つの軸を全部、一辺にやっているので見ていて一寸だけ混乱します。

自分で実装する時は、最初は一つの軸だけやる事にします。

そのやり方ですが、

最初にSignノードに (-1,1,1)を掛けた結果をそれぞれの軸に対応させるために分割します。

f:id:kazuhironagai77:20220313225906p:plain

次に裏返しになっている軸は水平軸だけなので垂直軸に影響を及ぼさないようにAppendノードでY軸の値を追加しておきます。

f:id:kazuhironagai77:20220313225929p:plain

当然ですが、Yの値は1を追加します。

f:id:kazuhironagai77:20220313225954p:plain

これでYにはなんの影響も出ないようになりました。

この結果をTextureのProjectionのX軸に対して掛けます。

f:id:kazuhironagai77:20220313230013p:plain

これで裏返しの領域が元に戻ります。

この後はMaterial Functionの作成方法についてなのでその部分の記録はSkipします。

残りはUnityの解説です。

UnityはUnrealとは軸が違うので理論的な方法は同じですが、実際の実装方法は違います。

3.3 Triplanar Projection Improvements - Shader Graph Basics - Episode 29 [2] を実装する

流石に今回はTutorialを全く見ないで再現出来るとは思えませんが出来るだけやってみます。

まず、先週作成したTri-Planar Projectionを再現します。

f:id:kazuhironagai77:20220313230036p:plain

忘れている箇所が何個かありました。

0.01を掛けるのを忘れていて、Absolute World Positionノードで合ってんだっけと調べたりしました。

後、この実装はMaskの位置が先週と違っています。結果が同じになっているので理論的にはどちらでも正しいはずです。

TextureをGridに変更します。

f:id:kazuhironagai77:20220313230051p:plain

まずどの面の向きが間違っているのかの確認をします。

<Top View

Z軸の正の向きです。

f:id:kazuhironagai77:20220313230115p:plain

これを見ると上下左右もProjectionの向きも合っています。

<Bottom View

Z軸の負の軸から見た場合です。

f:id:kazuhironagai77:20220313230142p:plain

まずProjectionが裏返しです。向きは左右が逆ですかね。それとも裏返しを直したら全部合ってるんでしょうか?

良く分かりません。

<Front View

X軸の正から見た図です。

f:id:kazuhironagai77:20220313230209p:plain

上下が逆です。Projectionは正しいです。

<Back View

X軸の負から見た図です。

f:id:kazuhironagai77:20220313230238p:plain

上下が逆で更にProjectionが逆です。

<Right View

Y軸の正から見た場合です。

f:id:kazuhironagai77:20220313230301p:plain

上下が逆でProjectionも逆です。

<Left View

Y軸の負から見た場合です。

f:id:kazuhironagai77:20220313230330p:plain

上下が逆ですがProjectionは正しいです。

まとめます。

f:id:kazuhironagai77:20220313230352p:plain

この結果を見るとTutorialの結果とは全然違っている気がしますが、これを直して行きます。

まずXY軸の上下の逆を直します。

XY軸のTextureのUV軸のV軸はBの値が入ります。

f:id:kazuhironagai77:20220313230412p:plain

のでBの値に-1を掛けます。

f:id:kazuhironagai77:20220313230428p:plain

これでXY軸の上下の逆は直ったはずです。確認します。

<Front View

X軸正から見た状態です。

f:id:kazuhironagai77:20220313230450p:plain

Projectionが逆ですが、上下は正しくなりました。

<Back View

X軸負から見た状態です。

f:id:kazuhironagai77:20220313230511p:plain

Projectionも正しいですし、上下の正しいです。

<Right View

Y軸正から見た状態です。

f:id:kazuhironagai77:20220313230534p:plain

上下も正しいですし、Projectionも正しいです。

<Left View

Y軸負から見た状態です。

f:id:kazuhironagai77:20220313230627p:plain

上下は正しくなりましたが、Projectionが裏返しです。

まとめます。

XY軸の上下の逆は直りました。しかもなんとProjectionの結果が以下の様に変化しました。

f:id:kazuhironagai77:20220313230647p:plain

これは何故なんでしょうか?

うーん。

まだ分からない部分が有りますね。

今度はProjectionの逆を直します。

Signノードの出番です。

何でSignノードをかけるとProjectionの裏返しが直るのか良く分からなかったんですが、やっと分かりました。TextureのU軸沿って裏返しになっているから、U軸に-1を掛けるともとに戻ります。

正しこの場合、裏返しになっていない部分には-1を掛けたくないんです。それでSignノードを使用する訳です。

TutorialでやっていたようにSignノードにMaskをしてProjectionが逆である面とSignノードの面を比べると

f:id:kazuhironagai77:20220313230710p:plain

以下の結果になりました。

f:id:kazuhironagai77:20220313230729p:plain

Tutorialと全く同じ結果になりました。

x軸だけ逆ですので、修正するために(-1,1,1)を掛けます。

f:id:kazuhironagai77:20220313230750p:plain

XYZ軸に対応するためにMaskします。

f:id:kazuhironagai77:20220313230809p:plain

TextureのU軸のみに計算するためにAppendでV軸の値に1を指定します。

f:id:kazuhironagai77:20220313230841p:plain

そう言えば、前節でこの部分を一辺にやるから訳わからなくなるって言いました。けどもう全部分かっているのでこのまま行きます。

やっぱり説明しやすいのでX軸だけ先にやります。

f:id:kazuhironagai77:20220313230858p:plain

先程のMask(R)の結果をMask(GB)に掛けました。

その結果、Front View、つまりX軸正から見たTextureの裏返しが直りました。

f:id:kazuhironagai77:20220313230914p:plain

勿論、Back ViewのTextureのProjectionの向きも正しいです。

f:id:kazuhironagai77:20220313230933p:plain

同様にY軸とz軸も直します。

f:id:kazuhironagai77:20220313230950p:plain

結果です。

f:id:kazuhironagai77:20220313231005p:plain

このMaterialのFunction化はProjectionの本質とは別なのでスキップします。

3.5  Triplanar Projection Improvements - Shader Graph Basics - Episode 29 [2] のまとめ

さすがにこの理論を一から構築する事は出来ないです。

例えば、Textureの上下を直す時に(1,1、-1)を掛けていますが、Absolute World Positionに掛けていますが、この時にProjectionの向きも変化しています。この理由が分かりません。

Projectionの向きを直す時は、Textureの向きは変わりません。

このやり方をどうやって思いついたのか全く分かりません。

ここは無難に手順だけ覚えておく事にします。

  • Gird Textureを貼って上下左右、裏表を確認する。
  • まずTextureの上下を直す
  • 次にSignノードを使用してProjectionの向きを直す。

この手順さえ覚えておけば、Textureの上下を直す時にはWorld Position ノードにVectorを掛ければ良いとか、Projectionの向きはU軸の向きを変える事で直せるとかは自分で導き出せる気がします。

4.Prologueの作成

Prologueなんですが折角作成したんですが、使用するの止める事にしました。

f:id:kazuhironagai77:20220313231318p:plain

最初のこの部分で十分にPrologueになっています。

f:id:kazuhironagai77:20220313231337p:plain

そして大変なBugが発見されました。

なんとStart 画面からMap1に移動するとNPCが一人も表示されていません。

f:id:kazuhironagai77:20220313231358p:plain

以下に示した様に、Monsterは生成されています。

f:id:kazuhironagai77:20220313231420p:plain

何故なんでしょう?

Map1から始める時は普通にNPCは生成されます。

f:id:kazuhironagai77:20220313231447p:plain

Plateをおいて確認したところ、この2体のNPCは落ちてしまっていたようです。

f:id:kazuhironagai77:20220313231509p:plain

他のNPCは生成すらされていません。

問題の原因が分かりかけて来ました。

他のNPCはSub Levelから生成しています。Sub level 2_5 を開けてみると以下に示した様にEvent Sunriseが呼ばれるとNPCを生成します。

f:id:kazuhironagai77:20220313231529p:plain

このEventは以下に示した様にPersistent LevelであるMap1から呼ばれるんですが、Start LevelからこのMap1に移動してきた場合、Sub level 2_5 が生成される前にこのSunriseが呼ばれてしますようです。

f:id:kazuhironagai77:20220313231557p:plain

なので以下の様に直しました。

Sub level 2_5 のEvent BeginPlayの時にも

f:id:kazuhironagai77:20220313231613p:plain

NPC Spawnが呼ばれるようにしてNPCが生成されるようにします。

f:id:kazuhironagai77:20220313231632p:plain

正し同じNPCが2回も生成されると困るので、それを確認するBoolean 変数も作成しました。

テストします。

Start 画面からMap1に移動します。

f:id:kazuhironagai77:20220313231653p:plain

今度はNPCが生成されました。

f:id:kazuhironagai77:20220313231712p:plain

夜になったらNPCは消えました。

朝になったらNPCがまた生成しました。

f:id:kazuhironagai77:20220313231734p:plain

残りのNPCも直して行きます。

Level 2_7です。

f:id:kazuhironagai77:20220313231755p:plain

f:id:kazuhironagai77:20220313231808p:plain

テストします。

f:id:kazuhironagai77:20220313231824p:plain

4人程、NPCが生成されていました。

f:id:kazuhironagai77:20220313231845p:plain

生成されたNPCは、当然夜は消えています。

f:id:kazuhironagai77:20220313231908p:plain

朝になったら又生成されました。

他のSub MapのNPCの生成も同様に直します。

f:id:kazuhironagai77:20220313231928p:plain

f:id:kazuhironagai77:20220313231939p:plain

Screenshotは取れませんでしたが他のNPCも生成されていました。

直りました。

来週からはこの世界そのものを直して行きます。

5.Open Worldの検証

5.1 木の生成方法の確認

先週の勉強で、Procedural Foliage Toolで作成するとCollusionが無くなる事が確認出来ました。

f:id:kazuhironagai77:20220313232010p:plain

Open World のような巨大なMapでCollusionのある木の生成方法は、Landscape Grass | 5-Minute Materials [UE4] [3] に解説されていました。

先週のBlogを見直すとこのLandscape Grass | 5-Minute Materials [UE4] [3]で勉強した内容と、公式のDocumentであるProcedural Foliage Tool Quick Start [4]で勉強した内容が分かれて書かれていました。これが頭の中ではゴッチャになっています。先に整理します。

5.2 先週、勉強した内容の整理

分かりました。先週やったのは

の二つです。

Landscape Grass Outputノードは以下に示したノードで

f:id:kazuhironagai77:20220313232119p:plain

このノードで草をProceduralに生やします。

このノードを分かり易く解説しているTutorialがLandscape Grass | 5-Minute Materials [UE4] [3]だったのでLandscape Grass | 5-Minute Materials [UE4] [3]の内容の一部が書かれていたんです。

公式のDocumentであるProcedural Foliage Tool Quick Start [6]は、木をProceduralで生やす方法のTutorialとして勉強しましたが、木をProceduralに生やすのは草をProceduralな方法で生やすやり方でも出来きます。

これは Procedural Foliage Spawnerを使用したProceduralなActorの生成方法と捉えるべきです。

f:id:kazuhironagai77:20220313232147p:plain

もっと単純にProcedural Foliage Spawnerの使用方法についてのTutorialであると考えても良いと思います。

ここで大切なのはProcedural Foliage Spawnerを使用して木をProceduralに生成しても他のProceduralな生成方法と同じようにCollusionを生じる事は出来ないと言う事です。

f:id:kazuhironagai77:20220313232532p:plain

いくらProceduralに生成出来ると言っても衝突しない木を生成する意味はありません。

Procedural Foliage SpawnerはLayerに対応もしていませんので、通常の草をProcedural に生成する方法よりも劣ります。なので勝手に生成される木はCollusion出来ると思っていました。所が出来ない訳で、通常のProceduralな生成と比較すると完全に下位互換です。勉強する価値はないです。

5.3 Landscape Grass | 5-Minute Materials [UE4] [3]を復習する

Landscape Grass | 5-Minute Materials [UE4] [3]のどこでCollusionが発生する木の生成方法について解説していたのか覚えていませんので、もう一回勉強し直します。

このTutorialを作成したPrismaticaDev氏は、今まであんまり参考にしていませんでしたが、内容がかなり実戦向きで、かつ高度な技術を使用しています。しかし説明は簡易で分かり易いです。

大体。5:20位までは通常のProceduralの草の作成方法についての解説をしています。この後で、Collusionのある木をLayer上で生成する方法についての解説をしています。

まず前提としてFoliage Typeに以下のTreeがセットされています。

f:id:kazuhironagai77:20220313232556p:plain

これはFoliageの基本的な作成方法の復習を先にしないといけないかもしれません。通常のFoliageの使用方法を忘れています。

取りあえず先に行きます。

下にPlacementと言う項目がありその中のInclusion Landscape LayersにDirtを追加しています。

f:id:kazuhironagai77:20220313232616p:plain

これでPaintします。

するとDirt Layer上のみにTreeをPaintします。

これだけです。

うーん。

PrismaticaDev氏がそう言っているんだから、これ以外のCollusionのある木を生成する方法はないんでしょうね。

5.4 Foliageのやり方を復習する

Foliageのやり方、覚えていません。これの復習をします。

Tutorialを探します。基本的な内容なので沢山あるでしょう。

まず見つかったのが公式のDocumentであるFoliage Tool [5] です。

f:id:kazuhironagai77:20220313232640p:plain

ざっと見ましたが、結構、量が多いです。

今回は、使用するのに必要な最低限だけ分かれば良いんです。

他のTutorialも調べます。

YouTubeで検索したら以下のTutorialが出て来ました。

f:id:kazuhironagai77:20220313232659p:plain

Ryan Scott 氏のPaint Foliage in 5 Minutes - FREE Assets! [UE4] [6] を見てみます。

f:id:kazuhironagai77:20220313232715p:plain

何せ5分で勉強出来るそうなので、これぐらいの勉強量で基礎を確認したいです。

うーん。凄い早口で普通にしゃべったら10分位の内容です。

他の動画も見ましたが、Landscape用のFoliageのTutorialではないです。

Unreal Engine 5 FOLIAGE Tutorial [7] はUE5を使用していますがLandscape用のFoliageのTutorialですね。

f:id:kazuhironagai77:20220313232735p:plain

これComment欄が面白いです。

f:id:kazuhironagai77:20220313232753p:plain

何で、Foliage Spawner を敢えて使用しているんでしょうか?

あとFoliageのスペルが間違っています。

カナダ人のYouTuberの人もこんな単語の発音の仕方しらないって言ってましたし、Foliageって一般的な単語じゃないんでしょうか?

Ryan Scott 氏のPaint Foliage in 5 Minutes - FREE Assets! [UE4] [6]で勉強する事にします。

5.5 Paint Foliage in 5 Minutes - FREE Assets! [UE4] [6]を勉強する

ここでFoliageに使用するModelがタダでもらえると有ったのでただなら貰ってしまえと、開いたら

f:id:kazuhironagai77:20220313232817p:plain

以下の様にEmail Addressを登録しろって出て来ました。

f:id:kazuhironagai77:20220313232834p:plain

これただじゃねーだろ!

はい。この部分は無視して先に行きます。

木は

f:id:kazuhironagai77:20220313232851p:plain

f:id:kazuhironagai77:20220313232908p:plain

から使用する事にします。

f:id:kazuhironagai77:20220313232927p:plain

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

f:id:kazuhironagai77:20220313232958p:plain

これにFoliageを追加します。

たまたま使用しているProjectのVersionが4.24だったので以下の様な古い作りになっています。FoliageのAdd Foliage Typeに木を追加します。

f:id:kazuhironagai77:20220313233018p:plain

TutorialだとShift + 選択でTreeを選択した後で、チェックを外してFoliageに使用したい木だけ選択出来ると言っていますが

f:id:kazuhironagai77:20220313233058p:plain

出来ません。

f:id:kazuhironagai77:20220313233117p:plain

単位Ctrlを押しながらFoliageに使用したい木を選択すれば良いんじゃないと試したら出来ました。

あれ。

このTutorial結構やばいかも。

これでPaint出来るのかと試したら出来ましたが

f:id:kazuhironagai77:20220313233149p:plain

PCが唸り始めました。

Paint Densityのサイズを0.01に変更しました。

f:id:kazuhironagai77:20220313233208p:plain

これ位が丁度良いです。

f:id:kazuhironagai77:20220313233244p:plain

何とCollusionしません!

f:id:kazuhironagai77:20220313233305p:plain

うーん。

この後、以下の部分のParameterの説明に入りますがこの部分が見つかりません。

f:id:kazuhironagai77:20220313233326p:plain

はい。このTutorialで勉強するのは中止します。

別なTutorialで探したら分かりました。

まずFoliageに追加したStatic Meshを選択します。

f:id:kazuhironagai77:20220313233350p:plain

すると選択したMeshの名前が表示されます。その名前のある列の右端にある三角が2個並んだ印をクリックします。

f:id:kazuhironagai77:20220313233407p:plain

以下の様にDetailが表示されるようになります。

こんなの説明なしだと訳わからないです。

この設定の中にあるCollusion Presetsの値をBlock Allにすると

f:id:kazuhironagai77:20220313233434p:plain

Collusionするようになりました。

f:id:kazuhironagai77:20220313233523p:plain

Foliageで生成した木の消し方が分かりません。

4.27だとEraserボタンがあるみたいですが。4.24にはありません。

正しいやり方かどうかは分かりませんが、これで選択して

f:id:kazuhironagai77:20220313233549p:plain

Delete で消せます。

以下の条件でもう一回Paintしました。

f:id:kazuhironagai77:20220313233604p:plain

こんな感じです。

f:id:kazuhironagai77:20220313233919p:plain

Cull DistanceのMaxは5000にセットしてあります。

f:id:kazuhironagai77:20220313233942p:plain

1 Unreal Unitが1㎝だとすると50mになります。これ位ならばあまりPCにも負担がかからないみたいです。

後は、以下に示したParameterの内重要な機能を理解すればOKですね。

f:id:kazuhironagai77:20220313234006p:plain

うーん。仕方ない。もう一回、Paint Foliage in 5 Minutes - FREE Assets! [UE4] [6]を勉強しますか。

f:id:kazuhironagai77:20220313234025p:plain

1000 Unreal Unitつまり10m内に何個のFoliageを作成するかを指定しています。

ウーン。これ一回勉強した記憶があります。

探したら2021-03-28のBlogで勉強していました。

f:id:kazuhironagai77:20220313234044p:plain

これ読んだらかなり勉強していますね。

Parameterの続きを勉強します。

Scalingです。

f:id:kazuhironagai77:20220313234116p:plain

この値を変更するたけで同じStatic Meshから生成した木が全く違く見えます。

f:id:kazuhironagai77:20220313234136p:plain

うーん。かなり良いですね。

f:id:kazuhironagai77:20220313234156p:plain

これは木の場合は切るべきでしょうね。地面が斜めでも上に向かって伸びていますから。

Checkを切ったら崖から生えている木が上を向いて伸びるようになりました。

f:id:kazuhironagai77:20220313234213p:plain

Ground Slope Angleです。

f:id:kazuhironagai77:20220313234234p:plain

Landscapeの角度がこの間の時だけ木が生えます。

Shift +ClickでPaintするとFoliageが消せるとありましたが、消せません。この4.24ではこの機能はまだないみたいです。

これ位理解しておけば十分でしょう。

5.6 Layerに木をFoliageする

それでは実際のLayerに木をFoliageしてみましょう。

LayerのあるLandscape 用のMaterialを作成しました。

f:id:kazuhironagai77:20220313234259p:plain

Landscapeにセットします。

f:id:kazuhironagai77:20220313234319p:plain

LandscapeのPaintに行って

f:id:kazuhironagai77:20220313234341p:plain

それぞれのLayerを作成します。

f:id:kazuhironagai77:20220313234400p:plain

こんな感じでPaintしました。

f:id:kazuhironagai77:20220313234420p:plain

GrassのLayerに木を生やしてみます。

以下の条件でPaintします。

f:id:kazuhironagai77:20220313234443p:plain

以下に示した様に緑色の部分にしか木がPaint出来ません。

f:id:kazuhironagai77:20220313234527p:plain

この方法で生成した木はcollusionする事が出来るはずです。

f:id:kazuhironagai77:20220313234547p:plain

うーん。

出来ましたね。

6.World MachineUser Guide [8]の勉強

今週もWorld Machineの勉強もしていきます。

6.1 先週までの復習

2022-02-21BlogのWorld Machineの勉強内容を読み直しました。

まあ、大体は覚えています。

6.2 Terrain Views [9] の勉強

Terrainの発音記号はtəˈreɪnでTrainの発音記号はtreɪnです。

Schwa音が有るかないかの違いしかありません。これはSchwa音のMinimal Pairに丁度良いと思って聞いたら、TerrainのSchwa音は一般的なSchwa音ではなく、日本語のぅの音、つまりTぅRainと聞こえます。

このように同じ発音記号なのに私には全く違う音に聞こえるので発音のMinimal Pairのアプリを作るのは今一寸だけ中断しています。

<Left Side View

これの事です。

f:id:kazuhironagai77:20220313234637p:plain

これ先週勉強したじゃん。と思いましたが、何か違う事があるんでしょうか?

F4 Keyを押すとこのLeft Side Viewを消したり出したり出来るそうです。

試しにF4 Keyを押したら消えました。

f:id:kazuhironagai77:20220313234656p:plain

もう一回F4 Keyを押したら元に戻りました。

f:id:kazuhironagai77:20220313234714p:plain

以下の部分ですが現状、選択されたrender extentの名前が表示されます。右端の三角を押すと別のRender Extentが選択されます。

f:id:kazuhironagai77:20220313234732p:plain

Render Extentの作成方法を忘れてしまいました。確認します。

以下のボタンを押してProject Settingを開きます。

f:id:kazuhironagai77:20220313234751p:plain

Project Settingの以下の場所にあるNew Extentを押します。

f:id:kazuhironagai77:20220313234808p:plain

これで新しいRender Extentが作成されました。

以下に示した様に先程の三角が黒くなっています。

f:id:kazuhironagai77:20220313234829p:plain

三角を押すと先程、新しく作成したRender Extentが選択されます。

f:id:kazuhironagai77:20220313234848p:plain

Tutorialでは次に2D、3Dについて解説しています。

以下のボタンの事でしょうね。

f:id:kazuhironagai77:20220313234910p:plain

Reset to top (plan) viewを選択します。

f:id:kazuhironagai77:20220313234930p:plain

Reset to Perspective Viewを選択してPreviewのイメージを元に戻します。

f:id:kazuhironagai77:20220313234955p:plain

以下の部分は何を指しているのか分かりません。有料版の機能かもしれません。

f:id:kazuhironagai77:20220313235012p:plain

Water Levelに関しては似たような機能がありました。

Sea Levelです。

f:id:kazuhironagai77:20220313235035p:plain

でもこの辺は先週、勉強した気がしますが。

後、Tutorialに載っている画面が全然違います。もしかすると今回優良版のLeft Side Viewを説明しているのかもしれません。

<3D View

3D Viewについてです。

以下のボタンを押すかF8で3D Viewを見る事が出来ます。

f:id:kazuhironagai77:20220313235101p:plain

こんなヤツです。

f:id:kazuhironagai77:20220313235117p:plain

この3D Viewには以下のToolが存在します。

f:id:kazuhironagai77:20220313235140p:plain

Tutorialで紹介されているToolとは絵が違いますね。

f:id:kazuhironagai77:20220313235156p:plain

Orbit、Free、A|Bは同じですね。

一個ずつ機能を調べていきます。

<<Configure Camera>>

f:id:kazuhironagai77:20220313235214p:plain

これはPreviewにあるCameraと同じ機能でした。

2Dにしたり戻したりします。

f:id:kazuhironagai77:20220313235235p:plain

ウーン。その他のToolを試したんですが機能していません。

これは有料版しか使えないみたいです。

んなあー。

これはWorld Machineの勉強も終わりに近づいて来たのかもしれません。

f:id:kazuhironagai77:20220313235252p:plain

f:id:kazuhironagai77:20220313235310p:plain

だけはセット出来ました。

f:id:kazuhironagai77:20220313235332p:plain

<2D View

何これ?

f:id:kazuhironagai77:20220313235356p:plain

Shadowが全くないんですが。

f:id:kazuhironagai77:20220313235415p:plain

TutorialのImageは綺麗なShadowが付いています。

<Layout View

はい。以下の機能がまるまる抜けています。

f:id:kazuhironagai77:20220313235438p:plain

まあ、無い物はショウガナイです。

次に行きます。

<Overview Mode

これはどれの事を言っているのか不明です。

<Render Extent Mode

あ、分かりました。これは先程のLayout ViewにあるModeの解説でした。

一応、読んでおきます。

Explorer View

これは無料版でも、少しだけCommandらしきものが使用出来るみたいです。

f:id:kazuhironagai77:20220313235511p:plain

ただ有料版とは全然違いますね。

f:id:kazuhironagai77:20220313235528p:plain

うーん。

せめてこの部分の使用方法と

f:id:kazuhironagai77:20220313235546p:plain

この部分の使用方法は理解したいです。

f:id:kazuhironagai77:20220313235604p:plain

この辺の解説は載ってないですね。

どっか別な所で習えると信じて今週のWorld Machineの勉強は終わりにします。

7.他のMapの作成

今週は、雪山用のMaterialにMacro Variationを追加します。

7.1 How to HIDE Texture REPETITION in Unreal Engine - UE4 Tutorial [10]を勉強する

Macro Variationと言うか、タイル感を無くすための一般的な技術全般を忘れてしまいました。そのへんから復習します。Unreal Sensei氏のHow to HIDE Texture REPETITION in Unreal Engine - UE4 Tutorial [10]で復習します。

タイル感の事をTexture Repetitionと表現していました。こっちの言い方の方がプロ感がありますので、これからはタイル感の事をTexture Repetitionと言うようにします。

このTutorialを見たらそのTexture Repetitionを消すためにやっている事はMacro Varianceだけじゃなかったです。簡単にまとめると

  • SeamlessTextureを選ぶ
  • Macro Variation を使用する
  • Distance Blendを使用する
  • 複数のTextureを混ぜてMaterialに変化をつける

をやっています。

結構複雑でした。

以下にそれぞれの内容をまとめます。

<SeamlessなTextureを選ぶ>

SeamlessなTextureを使用しないと何をしてもTexture Repetitionは無くならない事。その為にはMega ScanにあるTextureを使用する事が述べられていました。この辺の内容は覚えています。

今回は、Winter Forest Setで提供されているTextureを使用します。

f:id:kazuhironagai77:20220313235647p:plain

後、Layerの作成方法がSnow MountainのMaterialとは微妙に違います。

f:id:kazuhironagai77:20220313235715p:plain

これも直します。

<Macro Variation を使用する>

Macro Variationに使用するTextureをStarter KitにあるGoldのサンプルから取ってきています。

f:id:kazuhironagai77:20220313235739p:plain

そのまま使用します。

これと三番目のDistance Blendがゴッチャになっていました。

<Distance Blendを使用する>

これはCameraからの距離によってTextureのサイズを変更する機能です。

f:id:kazuhironagai77:20220313235757p:plain

以下のようにCameraからの距離によってTextureのサイズを変更しています。

f:id:kazuhironagai77:20220313235813p:plain

遠い距離用のTextureと近い距離用のTextureを作成してそれをLerpノードで混合します。

f:id:kazuhironagai77:20220313235827p:plain

勿論、LerpノードのAlphaの値はDistance Blendです。

f:id:kazuhironagai77:20220313235844p:plain

Lerpで混ぜてたんですね。

約一年間、Materialの勉強を続けましたが、こういう部分の理解力が段違いです。

やっぱりMaterialの基礎が理解出来ないとLandscapeの作成も出来ないと言う事ですね。

そう言えば「unreal engine 4 マテリアルデザイン入門」にもDistance Blendに関する技術が載っていました。それも読み直す事にします。

こっちではDistance Blend ノードは使用しないでCamera Position ノードとWorld Positionノードから距離を計算していました。がやっている事は同じです。一年前と理解の度合いが全く違います。

それよりもUE4のDemoであるA Boy and His Kiteの

f:id:kazuhironagai77:20220313235903p:plain

Landscapeのサイズが約260平方Kmと紹介されていました。

これは後で確認しますが、こんな巨大なOpen Worldを作成出来るんでしょうか?

<複数のTextureを混ぜてMaterialに変化をつける>

Perlin Noizeを使用してTextureをBlendしています。

f:id:kazuhironagai77:20220313235923p:plain

Perlin NoiseをBlend Material AttributeノードのAlphaに接続しています。当然ですがBlend Material AttributeノードのAとBにはBlendするTextureを接続します。

その後でLayer Blendに接続しています。

f:id:kazuhironagai77:20220313235943p:plain

更にPerlin NoiseのNoiseの量とContrastをControlするために以下の実装を足しています。

f:id:kazuhironagai77:20220313235957p:plain

掛け算する値を変更すると

f:id:kazuhironagai77:20220314000016p:plain

f:id:kazuhironagai77:20220314000051p:plain

となります。

これはDirtの部分の割合が増えています。

それに対して、PowerのExpの値を増やすと

f:id:kazuhironagai77:20220314000117p:plain

荒れ地の部分と緑の部分の境界がよりはっきり見えるようになります。

正し、このままだと荒れ地の部分がピンク色に変化してしまいます。

これはPowerした後でMaxの値が1を超えた事によって発生しています。

Clampを追加して最大値を1に戻します。

f:id:kazuhironagai77:20220314000137p:plain

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

f:id:kazuhironagai77:20220314000156p:plain

この理論と技術は理解しましたが、どうやって雪山にこの技術を適応すればいいんでしょうか?

実際の雪山って雪と荒れ地がBlendしているでしょうか?

7.2 雪山用のMaterialを作成する

Unreal Sensei氏のHow to HIDE Texture REPETITION in Unreal Engine - UE4 Tutorial [10]でやったやり方で雪山用のMaterialを作成します。

<SeamlessなTextureを使用する>

TextureはWinter Forest Setで提供されているTextureをそのまま使用します。

正しMaterialのLayer Blend ノードの接続方法を以下の様な形に変更します。

f:id:kazuhironagai77:20220314000233p:plain

このノードの名前が分からない。

f:id:kazuhironagai77:20220314000252p:plain

調べたらMake Material Attributes ノードだそうです。

f:id:kazuhironagai77:20220314000306p:plain

以下の様に4つのLayerをBlendしました。

f:id:kazuhironagai77:20220314000327p:plain

Snow AのLayerです。

f:id:kazuhironagai77:20220314000345p:plain

良く分からないのがSpecularにBase Colorの値を付けている事です。

Result ノードのShading Modelの設定がSubsurfaceと関係あるんでしょうか?

f:id:kazuhironagai77:20220314000407p:plain

これと同じ物を更に3つも作成するとSpaghetti化が凄いので、Material Functionを作成する事にします。

f:id:kazuhironagai77:20220314000427p:plain

f:id:kazuhironagai77:20220314000442p:plain

以下の様にMaterial Functionを使用しました。

f:id:kazuhironagai77:20220314000501p:plain

次はSnow B Layerを作成します。

Snow B LayerはTexture以外はSnow A Layerと同じかもしれないのでその辺も確認します。全く同じだった場合、Material FunctionはSnow A Layerのをそのまま使用すべきなのかそれとも別なMaterial Functionを作成すべきなのか?

その辺は完成してから考えます。

出来ました。

f:id:kazuhironagai77:20220314000517p:plain

ほぼ、じゃなくて完全にTexture以外は一致しています。

以下に示した様にMaterial Functionを2個並べてParameterのTextureだけ変更しようとしたんですが、

f:id:kazuhironagai77:20220314000537p:plain

f:id:kazuhironagai77:20220314000547p:plain

それは出来ないみたいです。

もう少しMaterial Functionに詳しくなったら入力するParameterの指定方法も分かるかもしれませんが。

調べたら分かりました。

Function Inputノードでした。

f:id:kazuhironagai77:20220314000613p:plain

Textureを全部Input出来るようにしました。

f:id:kazuhironagai77:20220314000630p:plain

これでSnow B LayerはTextureを入力すれば良いだけになりました。

f:id:kazuhironagai77:20220314000652p:plain

以下の様な実装になりました。

f:id:kazuhironagai77:20220314000710p:plain

今度はDirtを作成します。

f:id:kazuhironagai77:20220314000726p:plain

こっちはSnowの実装とは微妙に違いますね。

別なMaterial Functionを作成します。

f:id:kazuhironagai77:20220314000743p:plain

出来ました。

以下の様になりました。

f:id:kazuhironagai77:20220314000804p:plain

結構すっきりしています。

最後のRootsを作成します。

f:id:kazuhironagai77:20220314000841p:plain

使用しているTexture以外は先程のDirtの実装と全く同じでした。

先程作成したMaterial Functionを改良してTextureをInput出来るようにします。

f:id:kazuhironagai77:20220314000859p:plain

以下の様になりました。

f:id:kazuhironagai77:20220314000915p:plain

一個、最初に作成したMaterial Functionに間違いがあったので直しました。

このMaterialから作成したInstanceをLandscapeにセットすると以下の様になりました。

f:id:kazuhironagai77:20220314000932p:plain

Dirtの部分ですが、これがTexture Repetitionが凄いです。

f:id:kazuhironagai77:20220314000958p:plain

よく考えたらMega Scanを利用すればこれ以外にもっと良い雪山用のMaterialがあるはずで、それも考えるべきでした。

今週は、このMaterialにHow to HIDE Texture REPETITION in Unreal Engine - UE4 Tutorial [10]の技術を追加してTexture Repetitionが取れるのかどうかを検証します。

<Macro Variation を使用する>

Macro Variationを追加しました。

f:id:kazuhironagai77:20220314001034p:plain

結果です。

無しの場合です。

f:id:kazuhironagai77:20220314001058p:plain

有りの場合です。

f:id:kazuhironagai77:20220314001121p:plain

全く違いが分かりません。

雪の上なら微妙な違いが分かります。

有りです。

f:id:kazuhironagai77:20220314001143p:plain

なしです。

f:id:kazuhironagai77:20220314001203p:plain

Dirtのヤツは黒いから灰色の汚れがついても全く分からないんです。

Dirt のTextureは変える事にします。

Landscape4のDirtで使用していたDirtに変更しました。

f:id:kazuhironagai77:20220314001222p:plain

取りあえずBaseだけ変更しました。

f:id:kazuhironagai77:20220314001243p:plain

前よりはマシです。

Normal とRoughnessも交換しました。

f:id:kazuhironagai77:20220314001315p:plain

Texture Repetitionは変わらないですね。

それよりも大きな問題があります。

f:id:kazuhironagai77:20220314001337p:plain

Macro Variationの変化を見ようと遠くからLandscapeをみたら、Macro Variationどころではない四角、模様がそこら中についています。

更に、場所によっては以下のような訳わからん状態になっています。

f:id:kazuhironagai77:20220314001404p:plain

Materialを一端外してみると、元々のLandscapeに同じ模様があります。

f:id:kazuhironagai77:20220314001425p:plain

Build Light Onlyをしたら直りました。

f:id:kazuhironagai77:20220314001444p:plain

うーん。

もう一回、Macro Variationの確認をします。

Macro Variation有りです。

f:id:kazuhironagai77:20220314001515p:plain

Macro Variation無しです。

f:id:kazuhironagai77:20220314001533p:plain

これは違いが良く分かります。

Dirtの部分も見てみましょう。

Macro Variation有りです。

f:id:kazuhironagai77:20220314001551p:plain

Macro Variation無しです。

f:id:kazuhironagai77:20220314001609p:plain

これは全然違いますね。

上の絵は不自然さをギリギリ感じませんが下の絵はかなり不自然に見えます。

実際のPlay画面でも

Macro Variation有りと

f:id:kazuhironagai77:20220314001627p:plain

Macro Variation無しで

f:id:kazuhironagai77:20220314001647p:plain

全然、違います。

今週はここまでとします。

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

Stage 1、Stage 2を作成します。

8.1 Stage 1を実装する

Playerは妖精族だけ使用できます。対戦相手は、妖精族2体に亡霊族一体を使用します。

以下の様なData Tableを作成して

f:id:kazuhironagai77:20220314001716p:plain

Stageが1の場合は上記のMonsterだけが召喚出来るようにしました。

f:id:kazuhironagai77:20220314001808p:plain

以下の様になりました。

f:id:kazuhironagai77:20220314001826p:plain

今度は対戦相手のMonsterの召喚です。

以下の様に実装しました。

f:id:kazuhironagai77:20220314001843p:plain

中央のMonsterだけ亡霊族が召喚されます。左右のMonsterは妖精族が召喚されます。

テストします。

f:id:kazuhironagai77:20220314001859p:plain

想定通りのMonsterが召喚されました。

この後、何回もPlayしましたが問題なく実行出来ました。

8.2 Stage 2を実装する

Stage1の戦闘に勝利したらStage 2の戦闘に移動します。

色々なParameterを全部、整理し直すのは大変なので、一端、別なLevelを読み込ませて、その後で、Combat Levelを読み直す事にします。

f:id:kazuhironagai77:20220314002019p:plain

新しく読まれるLevelには何も実装しません。

f:id:kazuhironagai77:20220314002037p:plain

Game ModeのEvent BeginPlayでLevel名を調べてCombat Levelじゃない時は、直ぐにCombat Levelを読み込む事にしました。

f:id:kazuhironagai77:20220314002055p:plain

テストします。

2回目の戦闘が始まったら、画面が灰色になってしまいました。

f:id:kazuhironagai77:20220314002112p:plain

このBugを直します。

この原因はカメラの位置を指定していないからだと思います。

カメラをLevel上に配置して

f:id:kazuhironagai77:20220314002134p:plain

そのカメラからの映像を写すようにしました。

f:id:kazuhironagai77:20220314002154p:plain

直ったんですが、今度は映像のサイズが変わってしまいました。

f:id:kazuhironagai77:20220314002246p:plain

うーん。正直、Cameraの事は勉強した事ないです。

Widgetのサイズは以下になっていて

f:id:kazuhironagai77:20220314002307p:plain

16/7は1.7777で、CameraのAspect Ratioが1.777なので

f:id:kazuhironagai77:20220314002330p:plain

ぴったしになる気がしますが、

Aspect Ratioを1.82にしたらぴったしになりました。

f:id:kazuhironagai77:20220314002352p:plain

良く分かりませんが、Stage 2を作成します。

Playerが召喚出来るMonsterはStage 1と同じにします。

f:id:kazuhironagai77:20220314002410p:plain

対戦相手のMonsterは中央以外のMonsterが亡霊族になるようにしました。

つまり絶対勝てません。

f:id:kazuhironagai77:20220314002429p:plain

テストします。

f:id:kazuhironagai77:20220314002445p:plain

敵のMonsterです。

f:id:kazuhironagai77:20220314002507p:plain

当然、負けました。

f:id:kazuhironagai77:20220314002529p:plain

一応、Stage 1とStage 2は完成したのでここで終わりにします。

一週間どんなMonsterと戦うのが面白いのか考えます。

9.UE5Lumenの勉強

流石に量が多すぎるので、Lumenの勉強は一端、休止にします。この後で、やっぱりWorld Machineの勉強は止めるは!となった時はLumenの勉強をやる事にします。

10.Blenderの勉強

先週は、あんまりにも復習する内容が増えすぎて復習だけで終わってしまいました。一週間かけて復習した内容、特に以下に示したSection Selectionの内容を覚える予定でしたがすっかり忘れてしまっていました。

f:id:kazuhironagai77:20220314002604p:plain

もう、全部覚えるのは無理です。

あんまり自分にPressureを与え過ぎて、Blenderを触るのが嫌いになったら本末転倒です。軽くやる事にします。

今週は、Imphenzia氏のLearn Low Poly Modeling in Blender 2.9 / 2.8 [11]の続きを勉強します。前回、33分位までやったので今週は43分まで勉強します。その後で、まだやる気があるなら復習をします。

10.1 Learn Low Poly Modeling in Blender 2.9 / 2.8 [11]を勉強する

<Grow とShrink

やっぱり復習しないと元になっている木の3d Modelの作成方法すら分からなくて続きが出来ません。残念ですが復習から始めます。

f:id:kazuhironagai77:20220314002643p:plain

3D CursorをFaceの中心に合わせる方法が分からないのと、CursorにCircleが表示されているがそれがどうして表示されているのかも、どうやったら消せるのかも分からない。

やっぱり一週間に一回程度しか触らないと、操作の方法は忘れてしまいます。

そう言えば、毎日触っているキーボードは、K とかWとかの個々のAlphabetの位置なんかとっくの昔に忘れてしまいましたが、指が勝手にその位置を指してくれます。質より量が大切なんでしょうね。

10.2 2022-02-14Blogの復習

仕方ありません。復習からやります。

Shift + Spaceで

f:id:kazuhironagai77:20220314002705p:plain

を表示してMoveを選択すると

f:id:kazuhironagai77:20220314002722p:plain

選択したFaceに上記のような座標軸が表示されます。

これは一回選択したら消えるはずなのに消えません。その理由が分かりました。

以下の部分で通常は矢印が選択されていますが、Shift + Spaceで表示したBoxからMoveを選択すると、以下に示した様に十字の矢印が選択されます。

f:id:kazuhironagai77:20220314002742p:plain

これが選択され続けている限り、以下の方法を取らなくても座標軸は表示され続けます。

f:id:kazuhironagai77:20220314002805p:plain

<Individual Originの選択方法>

Individual OriginはPivot Pointを表示させてそこから選択します。Individual Originを選択する事で、複数の面を選択した場合のScalingが以下の様な変化をします。

f:id:kazuhironagai77:20220314002827p:plain

毎回、このやり方を忘れて毎週覚え直していましたが、何故か今週は覚えていました。

Period Keyを押すだけです。

<色々なExtrude

Alt + Eで色々なExtrudeを選択出来ます。

f:id:kazuhironagai77:20220314002850p:plain

何故か、これは忘れてしまいました。

後、Ctrl + 右クリックでExtrudeする方法も忘れていました。

後は大体、覚えていました。

10.3 2022-02-21blogの復習

Bevelは要らないと思います。これ使い道がないです。こいつは覚えない事にします。

<Shrink とFlatting

こっちは結構、重要な技術な気がします。まあ小技の部類かもしれませんが。

<3D Cursorの動かし方について>

これをほぼ完全に忘れてしまっています。きっちり復習します。

<<3D Cursorの動かし方>>

Shift + 右Clickです。

後、今日気が付いたんですが、以下のマークを選択しても出来ます。

f:id:kazuhironagai77:20220314002924p:plain

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

Shift+Sで以下の表示がされます。

f:id:kazuhironagai77:20220314002946p:plain

この中からCursor to Selectedを選択します。

この中で大切なのは、Cursor to Selectedです。以外と3D Cursorを無意識に弄って変な場所にセットしてしまう事があります。

10.4 2022-02-28Blogを復習する

木の葉をDuplicateする方法です。

Shift + Dでした。

f:id:kazuhironagai77:20220314003008p:plain

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

こんなの全く覚えていません。

f:id:kazuhironagai77:20220314003031p:plain

ここからSelection Methodに入ります。

以下の奴です。

f:id:kazuhironagai77:20220314003051p:plain

<Loop Selection

Alt を押した状態で、面を選択して左クリックでした。

f:id:kazuhironagai77:20220314003113p:plain

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

Ctrl + CでCircleを表示させます。そのCircleで面を選択して左Clickでした。

f:id:kazuhironagai77:20220314003136p:plain

今日の最初に何故か表示されていた白い丸とは形が違いますね。

f:id:kazuhironagai77:20220314003155p:plain

Vertexを選択した後で、Oを押してGを押して現れる丸とも違いますし、何なんでしょうか?

<Ring Select

Edge Modeを選択した後で、Alt + Ctrlを押したままEdgeを選択します。

f:id:kazuhironagai77:20220314003221p:plain

<EdgeのLoop

Altを押しながらEdgeを選択だそうです。

f:id:kazuhironagai77:20220314003246p:plain

全く覚えていません。

<Shortest Pathの選択>

これも全く覚えていません。

f:id:kazuhironagai77:20220314003310p:plain

<Box Select

Bを押すだけなんですが覚えていませんでした。

Boxを使用した選択をやった事はおぼえていますが、それをどうやったのかは全く覚えていません。

<X 線状態>

これだけは覚えていました。

f:id:kazuhironagai77:20220314003338p:plain

をClickします。

<Lasso Select

Ctrl + 右Clickだそうです。

全く覚えていません。

うーん。

10.5 Selection methodを覚える

以下のMethodを覚えないと先へ進めません

f:id:kazuhironagai77:20220314003403p:plain

ただ、人間って要らないものは忘れるように出来ています。そういう意味ではこの中の技術は覚える必要がない物なのかもしれません。

今の私から見ても

  • Loop Selection
  • Ring Selection
  • Loop Selection (Edge)

等は、実際には使わなそうな気がします。

  • Circleを表示して面を選択
  • Shortest Pathの選択
  • Box を表示して面を選択
  • X Rayに変換
  • Lassoを表示して面を選択

この5つを紙に書いて毎日、見直す事にします。

これで、何とか来週までに覚える事にします。

今週もBlenderの勉強は復習で終わってしまいました。

11.まとめと感想

今週はこれまでです。

12.参照文献(Reference

[1] Epic Games. (n.d.-b). Niagara Overview. Unreal Engine Documentation. Retrieved March 13, 2022, from https://docs.unrealengine.com/4.27/en-US/RenderingAndGraphics/Niagara/Overview/

[2] Cloward, B. [Ben Cloward]. (2022, January 13). Triplanar Projection Improvements - Shader Graph Basics - Episode 29 [Video]. YouTube. https://www.youtube.com/watch?v=tsE7Tqlv8DQ&list=PL78XDi0TS4lEBWa2Hpzg2SRC5njCcKydl&index=30

[3] PrismaticaDev. (2021, June 4). Landscape Grass | 5-Minute Materials [UE4] [Video]. YouTube. https://www.youtube.com/watch?v=uUOcs20Dkcc

[4] Epic Games. (n.d.-c). Procedural Foliage Tool Quick Start. Unreal Engine Documentation. Retrieved March 13, 2022, from https://docs.unrealengine.com/4.27/en-US/BuildingWorlds/OpenWorldTools/ProceduralFoliage/QuickStart/

[5] Epic Games. (n.d.-a). Foliage Tool. Unreal Engine Documentation. Retrieved March 13, 2022, from https://docs.unrealengine.com/4.27/en-US/BuildingWorlds/Foliage/

[6] Scott, R. [Ryan Scott]. (2021, January 30). Paint Foliage in 5 Minutes - FREE Assets! [UE4] [Video]. YouTube. https://www.youtube.com/watch?v=mdWbKhjANvw

[7] Buvesa Game Development. (2021, August 3). Unreal Engine 5 FOLIAGE Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=bmLYFpAJejo

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

[9] World Machine Software LLC. (n.d.-a). 4. Terrain Views. World Machine User’s Guide. Retrieved March 13, 2022, from https://help.world-machine.com/topic/terrain-views/

[10] Unreal Sensei. (2020a, August 7). How to HIDE Texture REPETITION in Unreal Engine - UE4 Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=yCRzOdo4b68

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