UE4の勉強記録

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

「Unreal Engine 4.xを使用してRPGを作成する」の足りない部分を作成する RPGのStoryの作成と推敲4

<前文>

<何故か日本で報道されないアメリカの中絶問題>

今、アメリカと言うか英語圏、つまり世界中で最も深刻な話題と言えば、アメリカの日本で言う最高裁判所に当たるSCOTUSが、あらゆる中絶を違憲と見なす判決を下す。と言う情報がLeakされた事件です。

このNews世界中で騒がれていますが、何故か日本では全く聞きません。

そこで、私はこのアメリカの中絶問題、何でそんなに騒がれているのか?なにが問題なのか?などについてここでまとめてみました。

あらゆる中絶を違法と見なす事が、何でそんなに騒がれているのかについてですが、中絶が殺人になります。

罰金とか、違法だけど罰則なしとかじゃなくて殺人罪になります。

更に、あらゆる中絶が対象になるので、レイプされた場合でも中絶出来ません。日本や韓国などの東アジア文化圏ではわりかし聞く経済的な理由で中絶する事など論外です。

妊婦の命に危険がある場合は例外になると言う話も聞いたんですが本当かどうか分かりません。

たしか今年の始めくらいに、テキサス州の妊婦が命に危険があるので特別に中絶を認めてほしいという上告がSCOTUSに却下されたと言うNewsを聞いた事があるので、妊婦の命に危険がある場合も中絶は実際は駄目になると思います。

つまり、アメリカに住んでいたら、例えレイプされた場合でも(そして恐らく妊婦に命の危険がある場合も)妊娠したら、子供産まないと殺人罪になるって事なんです。

レイプされた女性がその時に妊娠した子を産まなくちゃいけないって、そんなの精神崩壊間違いなしでしょう。とかは議題にすら上がっていません。

なんでこのNewsがそんなに騒がれているのか理解出来たと思います。特に女性は。

次に英語圏のメディアが述べているこの事件の何が問題なのかについてまとめます。

まず、ほとんど全てのメディアが述べた点ですが、今回、あらゆる中絶が違憲であると判断したSCOTUS のjusticesの内の4人が、任命される前の議会の聴聞会だか宣誓時に、今までSCOTUSで判断された内容を覆す事は絶対にしないと、宣言しているんです。

SCOTUSは1973年の Roe v. Wadeの判決によって中絶の権利を認めているんです。だからSCOTUS のjusticesの内の4人が中絶が違憲であると言う判決を下したってのは、彼らは聴聞会だか宣誓時に嘘ついていたって事になるんです。

これがメディアが報じた一個目の問題点です。

これが問題だって事は私でも分かります。

SCOTUS のjusticesが嘘ついていたら、誰が裁判の時に本当の事を言う必要があります?誰も宣誓なんか守らなくなります。

2個目の問題点として良く言われているのが、SCOTUSが自分達の解釈を今までの判例を無視して行った事に対してです。今までのJudgesはこれまで下された判例は守っていましたが、この件に関しては過去の判例を全く無視しました。

私、この論点、最初良く理解出来なくて、一個目の問題点とどう違うのか良く分からなかったんですが、一個目はJudgesのモラルについての問題点だったのに対して、これはSCOTUSのこれからの判決はこれまでの判例を全く無視して行うと言う宣言だったんです。

これって法律の専門家でない私は良く知らなかったんですが、今まで合法だったものが一瞬で違法に出来るって意味だったんです。

例えば、ゲイのカップルが結婚して何年も暮らしていたとします。ある日、SCOTUSがゲイの結婚は違憲と判決を下したとします。

するとそのゲイの夫婦はその場で逮捕されたりする訳です。

そういう解説をされるとこの点も問題だと理解出来ました。

3番目の問題点として私が選んだのはこの点です。個人的には物凄くしっくりしました。

ある調査によると右左関係なくアメリカ人であらゆる中絶に反対しているのは20%だけだそうです。で、50%の人はレイプされた場合とか妊婦に生命の危険がある場合は中絶しても良いと考えているらしいです。しかしそういう調査結果が出ているにも関わらず、あらゆる中絶が禁止さるようになった事です。つまりこの件に関してMajorityの意見が無視され、一部の人の意見だけが実行されるようになりました。この一部の人達の意見が特定の宗教団体や特定の宗教の教えに基づいている場合、この政治体系を民主主義(Democracy)に対して神権政治(theocracy)と呼ぶそうです。

つまり、アメリカは実態としては既に民主主義ではなく神権政治に移行してると考えられるようになったと言う事です。

これはかなり考えさせられる意見でした。

こんな感じで結構、世界で大きな問題になっているアメリカの中絶問題について今週はまとめました。

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

<本文>

1.今週の予定

今週も先週と同じ予定でやって行きます。

  • Niagara: CGHOW氏のTutorialをやる
  • Materialの勉強
  • RPGStoryの改善
  • Map1Bugの直し
  • Open Worldの検証
  • Gaeaの勉強
  • 雪山のMapの作成
  • Game DesignポケモンHxHの念能力( 戦闘システムの作成)
  • Blenderの勉強

後2つやりたい事があります。

一つ目は、最近日本語のUEのTutorialをたまに見るのですが中々質の高いTutorialがある事に気が付きました。といっても軽く見るだけで、実際に実装する所までやったわけではないので、実際に試してみたら感想が変わるかもしれません。ので一個か二個試してみたいです。

もう一つは、最近Epic GameのLauncherの表示が変更されてLearningのPageが無くなってしまいました。

Epic Game社の中でUEのLearningに対する取り扱いがどうなっているのか調査したいです。

2.Niagara: CGHOW氏のTutorialをやる

もう今週は、先週解けなかったYin Yang FX in UE5 Niagara Tutorial [1]の回転の問題をやるだけです。

2.1 先週の勉強の整理

先週、あんまりGifをBlogに載せると一カ月に使用出来るDataの範囲を超えてしまうかもと心配してほとんどScreenshotにしたら太極図の回転状態が良く分からない記録になってしまいました。

簡単に説明し直すと、先々週Yin Yang FX in UE5 Niagara Tutorial [1]を見ながら作成した太極図は以下のように原点を外れると、太極図そのものが原点を中心として回転し始めます。

この原因を探ろうと色々やったのですが、結局分からなかったです。

まあ、まだNiagaraを完全に理解する実力が足りなかったって事でしょうがないです。

とあきらめようとしたら、Tutorialの逆の順番で作成した太極図が原点からずれても、太極図を中心にして回転していました。

もう一つ

Playを押すと太極図の回転が止まってしまいました。

この原因も追究します。

2.2 Play画面で回転しない原因を調べる

Particle Update SectionのRot Module の

回転の値を上げると

普通にPlay画面でも太極図は回転しました。

Play画面は大きいのでGifでAnimationを撮影するとまたDataが大きくなってしまうのでScreenshotだけ取りました。

2.3 原点からずらしても太極図の回転が太極図を中心にして行うようにする

とうとう原因を見つけました。

先週、逆な順番に作成した太極図は、Particle Update SectionのRot(scratch Module)の

実装でParticle Positionの値をMultiply Vector with Quaternion Moduleに接続する時に、

上記のPosition ->Vector Moduleを使用しています。

所が先々週作成した、太極図では

が使用されていました。

このModuleをPosition ->Vector Moduleに変更すると

原点を外れても太極図を中心として回転するようになりました。

Position to Vector ノードの実装を見てみると以下の様になっていました。

単にPositionの値をVectorにパスしているだけじゃなくて色々やっています。

全部の実装を理解する事は出来ませんが、Engine.Owner.SystemLocalToWorld ノードとPositionノードを使用している所を見るとここでWorld Spaceに変換していそうです。その後でStatic Switch ノードがあるのでどこかでLocal Spaceにするかworld Space

にするかの設定が出来るのかも知れません。

そのStatic Switch ノードにはEmitter Local Spaceと書かれていますが、Parametersを見ると確かにEmitter Local SpaceというBool型のAttributeがありました。

Position to Vector ノードの実際の実装がどうなっているのかはともかく、Position to Vector ノードとPosition ->Vectorノードが全く違う機能である事は確認出来ました。

因みにTutorialの方ではPosition to Vector ノードが使用されていました。

うーん。

当初の目的は解決出来たのでYin Yang FX in UE5 Niagara Tutorial [1]の検証はここまでとします。

3.日本語のTutorialをやってみる

最近、日本語のUEのTutorialがYouTubeのお勧めに表示されるようになりました。試しに見たらかなり内容がしっかりして驚きました。

ので実際にそのTutorialで勉強してみる事にします。

ただし、今まで日本語の資料やtutorialを避けていたのは理由があります。それは引用(Citation)しているのに許可を取れとか無茶苦茶な事を言ってる輩が日本人の中には結構いる事です。

その辺で問題になりそうになった場合は消します。

今回、勉強するのは以下の2つのUE5のTutorialのChannelです。

https://www.youtube.com/channel/UCJmujNFxZjHU_Rr-k75Tn1w

https://www.youtube.com/channel/UCmg2dfHA5y4eBUw4DNd3tDg/featured

この2つのTutorialは段違いで質が高かったからです。更にこれらの作者はUEにかなり詳しい印象も受けました。

他にも凄い日本語のUEのTutorialがあるかもしれませんが、今回は私の目に留まったこの2つを勉強してみる事にします。

3.1【UE5ゲーム制作】Control Rigを使用して、坂道などの傾斜のある地面でも、足の向きを傾斜に沿わせる方法を解説します【逆引きUE[2]を勉強する

あんまり長いTutorialをやる時間もないですので、UE5のTutorialの中で一番短いのをと思ったらそれがあんまり面白そうじゃないので2番目に短いTutorialであるこれを選びました。

<軽く見る>

前に一回見たんですが、実際に自分で実装する気はなかったので、何を言っていたのか全く覚えていません。もう一回軽く見てどうやって勉強するかの検討をつけます。

途中まで見ましたが、普通にTutorialの指示通りにやれば出来そうなのでそのままやってみます。

<実装してみる>

まず確認ですが、Play画面でThird Personを坂道に立たせてみます。

確かに足が浮いています。

Control Rigの書き換えですが

ABP_Mannyから行っています。

でもPlay画面で動いてるのはQuinnの方です。大丈夫なんでしょうか?

このControl Rig ノードですが、どんな機能なのか全く知りません。知らなくても理解出来るんでしょうか?一寸不安になって来ました。

CR_Mannequin_BasicFootIKをDuplicateしたClassを開き

FootTraceノードの実装を書き換えるそうです。

これって書き換えたら、別なClassで問題とか起きないんでしょうか?

一寸不安になっていたら、この関数ノードはこのクラス内で作成されたものでした。

それなら書き換えても大丈夫ですね。

Tutorialの教え通りに書き換えます。

ここでAim Mathノードの機能とか、FootTraceの実装について色々調べた内容を記録していたんですが、突然Wordが応答不能になって書いた記録が消えてしまいました。

大体思い出しながら書き直すとFootTraceの実装は以下の図の赤線の部分をTranceしている事まで理解出来ました。

そして、このTutorialを前に見た時にこのTranceが何をしているか確か解説していた事を思い出しました。

しかしその場所が見つからないので色々調べたら、別のTutorialでした。

そのTutorialは【UE5ゲーム制作】標準で実装されているControl RigによるFoot IKを解説します [3]でした。

こっちを先に勉強すべきでした。

突然ですが【UE5ゲーム制作】標準で実装されているControl RigによるFoot IKを解説します [3]の勉強に切り替えます。

3.2 UE5ゲーム制作】標準で実装されているControl RigによるFoot IKを解説します [3]の勉強をする

前にこの方の動画を見た時、非常に分かり易くて、日本にもこういうUEのTutorialを作る人が現れたと驚いたんですが「【UE5ゲーム制作】Control Rigを使用して、坂道などの傾斜のある地面でも、足の向きを傾斜に沿わせる方法を解説します【逆引きUE】[2]」はあんまり分かり易く無くて心の中で「あれっ?」と思っていました。

そしたらそのTutorialは「【UE5ゲーム制作】標準で実装されているControl RigによるFoot IKを解説します [3]」の続編だったみたいです。

それなら分かりにくくても当然です。

いきなりFoot IKについてバシッと解説していて笑った。このBlogでは消えてしまいましたが、Foot IKが何なのか結構調べてました。

Foot Tranceノードに指定されているIK_foot_LがIk Foot Boneに指定されている事は理解出来ましたが、

これが何が目的なのか全く分からなかったです。

このTutorialによると、以下のような段差のある場所で立った時でも両足がつくようにするためのものだそうです。

分かり易い!

最初からこっちで勉強すれば良かった。

Tutorialの言っている内容を確認する時にCaptionで確認するのが習慣の私は、今回のTutorialでもCaptionを押して確認したんですが、

Foot IK系が、出会い系って表示されていました。

このクラスのTutorialだと日本語が母語じゃない人も見に来ると思われますが、Captionがこんな滅茶苦茶だと、外国人にはかなり理解が難しくなりますね。

聞くより読む方が簡単なのはどの外国語も同じです。また全く日本語読めなくてもCaptionを表示して全部CopyしてDeep Lに突っ込むと言う手もあります。

しかし読み手やDeep Lがどんなに優秀でも出会い系をFoot IK系に訳す事は出来ないでしょう。

うーん。

この辺はGoogleの音声文字起こし機能が向上するのを期待しましょう。

こっちはABP_Mannyの実装から解説しています。

開くとこうなっていました。

これはUE4でいう所のAnim Classだ。

実際調べて見たらThird Person BPのMeshには

ABP_Mannyではないですがその隣のABP_Quinnがセットされていました。

でも何でAnim ClassにControl Rigノードがあるんでしょう?

うーん。

前のTutorialを見直したら、しっかりAnim ClassであるABP_MannyからControl Rigノードを開いていました。

この辺は全く勉強した事ないので、勉強しても内容が心に引っかかってこないで直ぐに忘れてしまいます。

気にしないで先に行きます。

Foot Traceノードの解説をしています。

分かり易い。このBlogでは消えてしまったんですが、先程、30分位掛けて自分でNodeやBoneを追いかけて理解してました。

この説明聞いたら一発で理解出来ました。

一個だけ気になったのはTranceのEndの位置です。Tutorialの説明を聞いているとStart から50cm下がった位置と言っているように感じますが、実際はRootから50cm下がった位置ですよね。

Play画面でAuto Compileに一番下の選択肢を選ぶと

以下の様にTranceするStart 地点とEnd地点が表示されるそうです。

早速試してみます。

結果です。

表示されているけど何か違う。なんで俺のは男なの?

まあいいです。先へ行きます。

そして以下の二つの変数の値の解説です。

これです。

完璧に理解しました。

この部分の解説、滅茶苦茶、分かり易いです。

以下の様な段差で両足を着くために、足裏のIKからTraceしていたなんで驚きです。

<Step2

Tutorialの解説を聞く前に一寸だけ自分で考えてみます。

Interpolateしてるんですが何をInterpolateするんでしょう?

しかも結果をClampしてます。Get Z Offset Targetの値が例えば30だったとして、それをそのままClampしたら1ですが、それはオカシイでしょう。

分かりません。

Tutorialの解説を聞きます。

分かりました。

いきなりTargetの値にしたらCharacterの足がワープして地面についてしまう訳です。なので足の位置を順々に動かして最後にTargetに定めた位置に到達するようにしているんです。

そして1 Frameか指定された秒かは分かりませんが、一回に動く値は±15な訳です。

でもClampは何に使用されているか分かりませんね。

うーん。でもこんだけ理解出来たら十分です。

<Step3

これも自分で考えてみます。

これはZ Offsetの小さい値をSet Z Offset Pelvis変数にセットしているだけですね。

Over extensionが何なのか分かりませんね。

Tutorialの解説も分かり易く解説されていましたが、解説している内容は上記の私の解釈とほぼ同じ事を言っていました。

<Step4

Step4はModify Transformを使用して指定されているBoneの位置をそれぞれの変数が指定した値だけ移動させています。

最後のPelvisですが、本当にPelvisがセットされていました。

Pelvisって以下の場所です。

ここと足の一番低い場所と同じだと尻もち着いた状態になる気がします。

良く分からないです。

Tutorialの解説を聞いてみます。

分かりました。

Set Z Offset Pelvis変数はPelvisが下げる距離をセットしているんでした。だから最終地点は足とは違う訳です。

<Step5

これは先にTutorialの説明を見てしまいました。

一応、Tutorialの説明で納得しましたが、IK Foot LとFoot Lって同じだと思っていたのでその辺が良く分からないです。

これはUEのAnimationをまだ勉強してないからで、Animationを勉強した後で考える事にします。

3.3 UE5ゲーム制作】標準で実装されているControl RigによるFoot IKを解説します [3]を勉強した感想

中々、勉強になりました。

特にStep 2とStep 4の実装部の機能はこのTutorialの説明が無かったら自分だけでは理解出来なかったです。

説明も分かり易くて、複雑な内容を簡単にしかし正確に説明しているのは驚嘆です。

後、Lerpの発音がしっかりラァープになっていてレープとかリープとか言っていなかったです。結構、英語が堪能な印象を受けました。

英語圏のTutorialと比較してもこれ位しっかりしたTutorialを作成している人は限られている気がします。

Epic MegaGrantsについてはあんまり詳しくないのですが、Tutorialの作成も対象だった気がします。このLevelのTutorialを作成しているのならEpic MegaGrantsを受け取るんじゃないの思いました。勿論、審査が公平に行われたらと言う条件付きですが。

3.4 [UE4 Craft Game Develop VTuber]Kurie Meiku氏のどれかのTutorialを勉強する

もう予定の時間を大幅に過ぎてしまったので、[UE4 Craft Game Develop VTuber]Kurie Meiku氏のTutorialは来週やろうかと思ったんですが、Tutorialにどうしても見たい内容があります。

一つ目がこれです。

日本語の内積にあたる英語はDot Productなんです。でも英和辞典をみるとInner Productになっています。そして英文のInner Productを見ると、Dot ProductとInner Productは違うと解説されているんです。

これ厳密な定義を調べてノイローゼになりました。日本の物理学者もしくは数学者でこの問題を正直にかつ正しく定義している人がいないんです。そんな適当な事しているのかと最後、ブチ切れて終ったのを覚えています。

もう一つどうしても見たいのがこれです。

このやり方全く知りません。

と言うかこの人のTutorial全部、面白そうです。

もう時間が無いので、今週は【UE4/UE5ゲーム制作講座】超基礎編・これを見れば内積(Dot Product)がわかる!(半分) [4]だけ見る事にします。

3.5 UE4/UE5ゲーム制作講座】超基礎編・これを見れば内積(Dot Product)がわかる!(半分) [4]を勉強する

まず内積をDot Productと訳していますね。ここは絶対に深堀しません。

内積の定義と解説の部分を見ました。

完全に理系の人ですね。理系の人の説明って感じでした。

2021-10-03のBlogにまとめてありますが、Dot Productの解説はBen Cloward先生のDot Product Node - Shader Graph Basics - Episode 7 [5]の光源と白板の説明の方が直観的に理解出来て、理系でない人にも分かり易いと個人的には思っています。

うーん。

内積の実装をしています。

説明が一々正確です。

Radianの定義なんて完全に忘れていました。360 Degrees/2 paiが1radianって事なのか。この定義は覚えやすいです。

こういうのパッと説明出来るところが凄いですね。

アメリカの大学にいた時に理系の人の優秀さはその人が円周率をどれだけ覚えているかと比例するという伝説があって、Stock Optionで憶単位の金を稼いだ同級生は円周率を百桁覚えていました。

因みに私は何度やっても3.14までしか覚えられません。

この人、何者?

というかCaptionが全然、日本語拾えないので折角Screenshot取っても円周率を一気に何十桁も読み上げてるシーンだって分からないです。

東〇生なの?

Dot Productが0の所で0になりません。

面白すぎる。

横から見たら重なってなかったです。

あ。

今まで角度の計算が、理論と合わない事が何度も有ったんですが、これでした。すっかり3Dである事忘れていました。

後、内積の計算だと(Cosの計算?)だと判明しない点があるとか、

壁走りに使用出来る

みたいな紹介がありました。

これで内積のTutorialは半分だけ終わりだそうです。

3.6 UE4/UE5ゲーム制作講座】超基礎編・これを見れば内積(Dot Product)がわかる!(半分) [4]を勉強してみて

やっぱりこの人も非凡な才能を持っています。

Dot Productなんて今更、勉強する事ないだろうと思っていたら結構知らない事がありました。

数学はかなり得意だったんですが、この人の数学力は次元が違いそうな気がします。なんてゆうか普通の数学が得意な人が100位の数学戦闘力を持ってるとすると5000位持ってそうな感じです。

でも英語は苦手そうです。

Toleranceの読み方を知らないみたいでしたし。

後、UEのEditorを日本語設定で使用してる人初めて見ました。

とは言ってもVtuberとか作成して面白く教えようとしているのは、視聴者の事を考えていてとても素晴らしいと思います。

実際、見ていてとても楽しかったですし、全然ストレスなく最後まで勉強出来ました。

4.Materialの勉強

今週は、Materialの勉強は軽くしておきます。

4.1 Outlineについて

日本語のTutorialと公式のTutorialはほとんど見ない私ですが、これだけは凄かったので記録に残しておきます。Unreal Engineでイケてるイラストを描くためのノウハウ大放出! | UE4 Manga Anime Illustration Dive Online [6] です。

この中でPPLineDrawing(線画フィルター)が紹介されていましたが、

Outlineの極致だと思いました。

今週は、これ以上勉強する時間はないですが、先週のOutlineの問題点である

もこれを使用したら解決するかもしれません。

忘れないようにここにメモしておきます。

4.2 Toon Shader & Custom Shadow - UE4 Postprocess Tutorial [7]の続き

今週もToon Shader & Custom Shadow - UE4 Postprocess Tutorial [7]の実装をやっていきます。

<Landscape のMaterial

Landscapeはまだ作成していませんがLandscape用のMaterialを先に作成します。

Tutorialから分かる範囲で再現しました。

何点か分からない所があります。

まずLandscape用のMaterialにも拘わらず、TexCoord[0]ノードを使用しています。

解説によると以下の部分はMacro Variationを作成するための実装であると言っています。

でも実際のLandscapeを見るとMacro Variation観察出来ない、

うーん。

僅かにあるかも。

後、使用しているTextureがどんなのが必要なのか不明です。

まあ、Landscape用のMaterialは後で改良するので今はこんな感じでも良いです。

Landscapeを作成してこのMaterialを追加してどんな感じになるか確認します。

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

あ。そうだLayerを使ってみましょう。

LandscapeにLayerが使用出来る事、先週初めて知りました。

ので試してみます。

公式のDocumentであるLandscape Edit Layers [8]にLayerの使用方法が載っていました。

このサイトによればLandscapeを作成する時に以下のEnable Edit LayerにCheckを入れればLandscapeでLayerが使用出来るそうです。

え。

もうLandscape作っちゃったよ。

仕方ない一回消して作り直します。

以下の方法で新しいLayerを追加出来るそうです。

こんな感じに作成しました。

Layerは2層にしました。

LayerのLandscapeです。

デコボコ地面を作成しました。

Layer1のLandscapeです。

山を作成しました。

山を別なLayerで作成したのはScript初心者にありがちな絵の下手な人が描く山(以下の図にある山のような形状)を

Layerを使用するとどれだけ本物らしく出来るのか見るためにです。

結果です。

うーん。

何とも言えない。

少しはマシな気もしますが、World MachineやGaeaでLandscapeの勉強をしたので、単に私のLandscape作成LevelがUpしただけかもしれません。

Post Processを追加します。

線が太すぎます。

微調整が必要です。

以下の様になりました。

Landscapeに先程作成したMaterialをセットしました。

一応、色は砂漠風の色にしました。

結果です。

色々、感想を言う前にMacro Variationが効いていません。

良く見ると僅かに効いていますね。

もう少し強くしましょう。

0.9から0.5に変更しました。

結果です。

LandscapeがTileを貼ったように見えるのを避ける為に使用されているMacro VariationのNoiseがTileを貼ったよう繰り返されています。

でも地面を歩いている時は全然、Tileの感じが出ません。取りあえずはこれで行きます。

やっぱり奥のOutlineが気になります。

もう一回Tutorialを見て奥のOutlineの直し方を確認します。

何と、Multの値を調節して奥にある大量のOutlineを消していました。

うーん。なんでMultで消えるの?

これは後で検証します。

結果です。

かなり良くなりましたね。

この辺とかかなりカクカクしています。

Landscapeの設定で、

100倍に設定しているのでHeight Mapの一Pixelが1mになります。

そのせいでこんなカクカクが生じているのか?

それともLandscapeの作成で使用したErosionの設定に改善の余地があるのか?

それともScalingのZの高さとHeight Mapの高さにずれがあるのか?

X,Yは505cm*100=505mだかz軸は256cm*100=256mだと、そんなにオカシクない気もします。

Foliageもついでに作成しようとしたんですが、思っていたよりかなり複雑なので、来週やる事にします。

今週のMaterialの勉強はここまでとします。

5.RPGStoryの改善

今週は、これまでのやや混乱したStoryを整理して書き直したいです。

5.1 今までの内容をBlog毎に整理する

まずこれからやります。

2022-04-25blog

ここではStoryを1章から9章に分けて作成しています。かなりの大作ですが、今読むと辻褄が合わない部分がかなりあります。

しかし、今読み直しても、話としてはかなり面白いので、話の骨子はこのままで行きたいと思います。

読み直して、結構重要な事を忘れていました。

これです。

それでですね。もう宮沢賢治銀河鉄道の夜からも一端、離れた方が良い気がしています。自分の興味が湧かないんです。これ以上。

切符だってそんなに強烈に人を引き付ける物じゃないですよ。身近な親しみのあるものではありますが。

いや切符は良いかもしれませんが、銀河鉄道が一寸とってつけたような存在になっています。別世界転送装置とか別世界移動門とかにした方が、まだ理解しやすいと思います。それを使用するのに切符が必要になるなら、まだ分かり易くて良いと思います。

別世界移動魔法門とかにしてその門は魔女が管理しています。それぞれの門の格によって管理している魔女の被っている帽子の色が違うようにします。赤い帽子は最高のランクでだれも被っているのを見た事がない。とかにした方が全然分かり易いです。

となると題も「金の切符と赤い帽子の魔女」とか「黄金の切符を探して」とかの方が分かり易いですね。

ただ「ジョバンニと赤い帽子の魔女」と言う題は綺麗です。

第一章については以下のEventを組む必要があります。

このEvent自体は面白いので「序章;武器を手に入れろ」とか「Mission:武器を手に入れろ」で最初のEventにします。

この後に第一章の話が始まるようにします。

5章までの話は今回、全部書き直します。

そのために忘れている事が無いように、全部読み直しました。

2022-05-02のBlog

ここには12使徒の名前が載っていますね。これ後で出てくる果物の名前よりは全然増しな気がします。

第一章のEventをここでは

としています。

先週考えた話とどっちが上でしょうか?

これは後で考えます。

2022-05-09Blog

こっちの話の方が断然面白いです。

後、このGameの裏テーマとして

があります。

これ今の村長の腰巾着が、実は前の村長の忠実な僕で、今の村長に村を追い出されないために、腰巾着をやっているってのも後から分かる訳です。一見道化のようなPlayerを笑わすためのだけに存在しているNPCにもそういうつらい過去や今を生き抜くための知恵みたいなものがある事がこのEventからPlayerに伝わる訳です。

完全にアホとの決別が出来ます。

「登場人物、全部バカ」とか言われないで済みます。

後、登場人物や武器の名前、世界の名前、王国の名前などを決めています。これって結構重要です。

見直したんですが、7つの大罪たちの名前が弱いです。弱いと言うが意外性が無い。

そこで思いついたんですが、実際の12使徒の名前を使ったらどうでしょうか?

今の世界のキリスト教の指導者の奢りっぷりを見てると12使徒の名前を7つの大罪の名前に使用するのは皮肉が効いていて面白いと思います。

それぞれの12使徒の有名な話を調べてそれに類する7つの大罪を選びます。

<<バルトロマイ>>

皮はぎの刑で殉教したそうです。バルトロマイは父親の名前で本当の名前はナタナエルと言う説もあるそうです。

<<アルファイの子ヤコブ>>

特に有名な話はないそうです。

<<アンドレ>>

エスが五千人に食べ物を与える話に出て来るそうです。そこでアンデレはパンと魚を持った少年を連れてきてイエスに紹介し、食べ物が増える奇跡を導く役割を果たしている。そうです。

怠惰 (sloth)の名前にしましょう。怠惰 (sloth)の正体は巨大な魚ですから丁度良いです。

またこの人も漁師だったそうです。

<<ユダ>>

ユダは有名すぎます。こいつは使いません。

<<ペテロ>>

エスが捕まった時、イエスを3度否認した話が有名です。

これは人間味が出ていて良い話です。なのでこの名前も使いません。

<<ヨハネ>>

黙示録を書いた人だそうです。

<<トマス>>

情熱はあるが、イエスの真意を理解せず、少しずれている人物。とかユダの本名とかボロカスに書かれています。かなり正常な批判精神がある人だったみたいです。そりゃ科学的に批判されちゃ奇跡なんて無くなっちゃいますから、批判されまくるでしょう。

この人は12使徒の方の名前に使用しますか。

<<ゼベダイの子ヤコブ>>

同じく12使徒であるヨハネと兄弟だそうです。漁師だったそうです。

<<フィリポ>>

何をした人なのか不明です。

<<マタイ>>

税金を回収する仕事をしていた人だそうです。

マタイの福音書の著者と言われているそうです。

<<タダイ>>

この人は本名がユダで、裏切り者のユダと混同されるのであんまり有名じゃないそうです。

<<熱心党のシモン>>

ほとんど何をした人なのか不明だそうです。

良く聞く福音書とかって12使徒が書いたんだとばっかり思っていましたが、それも調べます。

マルコ・マタイ・ルカ・ヨハネが書いたそうです。

ヨハネとマタイしか12使徒にいないじゃないですか?

マルコとルカについて調べます。

マルコはペテロの通訳をした人だそうです。後パウロの何かをした人らしいです。パウロって12使徒じゃないんですかね。上の12使徒には名前が無いですね。

ルカは医者だったそうです。この人もパウロの何かをやっていたそうです。

いや、聖書ほとんど読んだ事のない私でもパウロは知っていますし、パウロの話は結構好きな話です。

パウロは12使徒じゃないの?

調べたらパウロは13番目の使徒だそうです。

ほー。面白い。

簡単に12使徒について調べましたが、アンドレ以外、奇跡を使って人を騙したみたいな話はないですね。

まあ、名前を使うだけですし、あんまり7つの大罪と関係なくても良いかもしれません。

奇跡と12使徒で調べれば良かったんです。

今度はこっちで調べる事にします。

5.2 伝説の武器の名前

今週、物語を全部書き直そうと思いましたが、7つの大罪の名前すら決まっていませんので無理です。それよりも名前とかそれに関する物を深堀するのが先です。

ので伝説の武器を深堀します。

無限に水が湧く壺が出て来る神話は2つ見つかりました。

北欧神話に出て来る海とつながったコップとロシアの民謡にある水の枯れないひしゃくの話です。

北欧神話なら雷神が出て来るから武器は北欧神話から取る事にします。

12使徒について調べないといけないのに更に北欧神話についても調べないといけないのか。

でも王国の名前はギリシャ神話から取ると決めてしまいました。ギリシャ神話と北欧神話じゃ話しがちょっと被っていますよ。

今週は、ここまでとして一週間また熟成させます。

6.Map1Bugの直し

今週は以下のBugを直します。

  • 転職石を使用出来るのはLevel10になってから。
  • 詩人のセリフを変える
  • NPCが夜になっても消えません。

6.1 転職石を使用出来るのはLevelが10になってから

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

テストします。

テストのために転職石(狩人)の値段を0にしました。

押しても何の反応もありません。

後はLevel10になったら使用出来るかどうかの確認です。

Level 10 に必要な経験値は2500です。

ゴブリンを倒すと2500XPがもらえるようにします。

戦闘しました。

表示がオカシイです。

以下のHPとMPから推測すると

全部の経験値は可算されているみたいです。

この表示がおかしいというか前の表示を消してしまったのは後でタイプライターEffectを追加する時に直します。

転職石(狩人)を弟子Level10の時に使用しました。

無事狩人になれました。

6.2 詩人のセリフを変える

これは、物語が決まるまでどんなセリフを詩人に読ませるのかも決まっていないので今回はやりません。

6.3 NPCが夜になっても消えません

まず夜にしないといけません。Level BPを開いてTime of Dayを30分から1分に変更します。

確認します。

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

ひょっとするとStart 画面からMap1に移動した時だけおきるBugなのかもしれません。

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

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

うーん。

出来てます。

7.Open Worldの検証

先週の続きのVirtual Textureについて勉強します。

先週、勉強したHow to Blend Objects with Your Landscape - UE4 Runtime Virtual Texturing (RVT) Tutorial [9] の実装を行います。

7.1 How to Blend Objects with Your Landscape - UE4 Runtime Virtual Texturing (RVT) Tutorial [9]を実装する

Tutorialは4.26か27を使用しているので、4.27で試してみます。

Rural AustraliaをImportしました。

結構時間が掛かりました。

Example Mapの03に

SM_Log_L_01を配置しました。

結果です。

全く同じと言う訳にはいきませんが、かなりTutorialのSceneと似た感じに出来ました。(以下にTutorialのSceneを示します。)

使用している倒木は全く同じかもしれませんね。

で、Tutorialの例だと倒木と地面がはっきり分かれていてこれはダメだ。と素人にも分かるようになっています。

所が、私が同じと思われるStatic Meshを配置した所、Tutorialの例程はおかしさが目立っていないんです。

一寸だけこのStatic Meshの位置を高くします。

するとTutorialみたいな倒木と地面が全く混じっていないかなりおかしいImageが出来ます。

これは厳密に言えばVirtual Textureとは何の関係もない問題です。

しかもVirtual Textureを使用した後でこの倒木の位置を少しだけ下げています。

Virtual Texture自体は凄いTechnologyですし、Unreal Sensei氏のTutorial自体が抜きんでて凄いのも否定しませんが、この比較はちょっとFairじゃない気がします。

これ、3D Graphics系の論文でも散々見ました。最初に今までの3Dと論文で紹介されている新しい技術を使用した3Dの比較が提示されていて、確かに凄いとなるんですが、良く読むとその論文に書かれている新しい技術がその凄い3Dの凄い所と一致してないかったりします。

Virtual Textureの勉強とは関係ないのでこの話はここまでとしてTutorialの続きを行います。

<Set Up

Project SettingからEnable virtual texture supportにCheckを入れます。

Projectを再起動します。

再起動したら20分位かかりました。

はい。Virtual Textureが使用可能になりました。

この後、さらに20分位Shaderの読み込みにかかりました。

「うーん。新しいPCを買うべき時は既に来ていますね。もう覚悟決めるしかないか!」と思ったらUnreal Sensei氏が「この再起動はかなり時間が掛かります。」と言っていました。Unreal Sensei氏のPCはかなり高品質、最新鋭なはずです。それでもかなり時間が掛かったならPC新しくしての関係ないのか。もう少しこのPCで頑張ろうかな。となりました。

Virtual Textureを2個作成します。

Material & TexturesのRuntime Virtual Textureを選択します。

こんなところにあったのか!名前もRuntime が最初に付くんですね。

Virtual Textureを2個作成しました。

先週、このTutorialを一回勉強しているので既にVirtual Texture作成の流れは掴んでいるので安心して進めます。もし全体の流れが分からない状態でいきなりTutorialを見ながら実装を始めていたら何でVirtual Textureを2個も同時に作成するんだ!ってなっていたと思います。

VT_Heightの方を開きVirtual Texture ContentにWorld Heightをセットします。

今度は、両方のVirtual TextureのSize of the virtual Texture in Tilesの値を8から10に変更します。

うーん。これ何の設定を変更しているんでしょうか?

Tutorialでは解説なしで先に進んでしまっています。

Size of the virtual Texture in Tiles にCursorを乗せると以下の説明が出て来ました。

普通のTextureだとTextureのサイズあります。1024x1024とか512x512とか言うやつです。それのVirtual Texture版みたいですね。

ただTileが何を言っているのかは不明です。一個一個のTileのサイズは256だそうです。と言う事は16個のTileが生成されるんでしょうか?

Virtual TextureにもLandscapeのComponentやSectionの概念みたいなものがあるのかもしれませんね。

次に、Landscapeのどの場所をVirtual TextureでCaptureするのかを指定します。

その為にRuntime Virtual Texture Volumeを使用します。

Level上に配置します。

サイズを変更しますが、変更後のサイズはLandscapeと同じにします。

やり方は、

まずRuntime Virtual Texture VolumeのVirtual TextureにVT_Heightをセットして

Bounds Align Actorのスポイトを選択して

LandscapeをClickします。

自分のProjectのScreenshotを取ろうとしたらスポイトが消えてしましました。のでTutorialから取りました。

するとBound Align ActorにLandscape1がセットされました。

こんなの普通にLandscape1ってタイプしても一緒だろうと、試しにタイプしてみましたら、一緒でした。

そしてSet Boundをクリックします。

結果です。

うーん。Landscape全体と同じサイズにはなっていませんね。

Tutorialもなっていないので多分合っているんでしょう。

Runtime Virtual Texture VolumeをDuplicateして

複製したRuntime Virtual Texture Volume のVirtual TextureにVT_Matをセットします。

<Capturing the Landscape Material

先週は、ちょっと最初混乱しましたが、ここで何をやっているか完全に理解しました。

Landscapeの情報をCaptureしているのは間違いないんですが、ここで行っているのはLandscapeのMaterialの情報をStatic Meshに流しているんです。そのための中継点としてVirtual Textureが存在しているんです。

更に、得たLandscapeの情報はStatic MeshのMaterialにProjectionされる形でBlendされます。のでNormal はWorld Spaceに変換する必要があります。

LandscapeのMaterialを開きます。

かなり本格的なLandscape用のMaterialですね。

Layerだけでこんなにあります。

更にWorld Position Offsetに以下の実装と

Pixel Depth Offsetに以下の実装が追加されています。

この二つは何をやっているのか分かりませんね。

でも今回はMaterialの解読が目的ではないので、この部分はSkipします。

Virtual TextureにLandscapeのMaterialの情報を流すためにRuntime Virtual Texture Outputを追加します。それぞれのInput Valueを以下の様に繋ぎます。

これNormal VectorのTangent SpaceからWorld Spaceへの変換とは別な話ですが、実際にLandscapeで使用されているNormal Vectorはこの後で、

がおこなわれています。

こっちのNormalizeは正規化のNormalizeで法線のNormal Vectorとゴッチャになりやすいですが全く別の意味です。

これしなくてもあんまり結果は変わらないのかもしれませんが、敢えてこの部分を無視した理由は知りたかったです。

さあ、次はNormal Vectorの変換か。と思ったらWorld Heightの値のパスの仕方についてです。

はい。

こういう所をしっかり教えてくれるのがUnreal Sensei氏の良い所です。言われてみればその通りですが、これを自分から思いつくのは結構大変です。

最後に、Normal Vectorの座標をTangent SpaceからWorld Spaceに変換しました。

これでLandscapeのMaterialでの設定は一応完成です。

今度はRuntime Virtual Texture Outputで放出したDataをどのVirtual Textureに送るのかを指定します。

Landscapeを選択し

DetailのDraw Virtual TexturesにVT_HeightとVT_Matをセットします。

これでLandscapeのMaterialの情報をVirtual Textureにパスする所までは完成しました。

今度はVirtual Textureに保持されているLandscape のMaterialの情報をStatic Meshである倒木のMaterialに渡します。

これが倒木のMaterialです。

実装部です。

何だこれ?

一寸だけ読んでみます。

うん。Textureに入っているデータが通常と一寸だけ違っているです。が本筋からずれるのでこれ以上は止めます。

ここにVirtual Textureの情報を持ってきてBlend Material Attributeノードを使用してこのMaterialとBlendします。

当然Blend Material AttributeノードのAには今までのMaterialの値、BにはLandscapeのMaterialの値、AlphaにはLandscapeのHeightの値が入ります。

まずAlphaの値から取得します。

Virtual Texture Sample Parameterノードを作成し名前をVT Heightにします。

以下の実装でこのMaterialを使用しているStatic MeshのそれぞれのPixelの高さを得ます。それに対してLandscapeの高さを引きます。

ところがこの計算方法だと、Static MeshのScaleが変わった時に対応出来ないそうです。

それて以下の計算を足します。

先週のBlog

と書いていますが、今週になってみても意味分かりません。

分からんので続きをやります。

それではParameterをいじってみます。

Virtual Blend Heightが1の時です。

数値を上げます。

うーん。別に普通ですね。

大体、Virtual Blend Heightの値が3で倒木が真っ黒になります。

倒木のZ軸のScaleを2倍にします。

2倍にしても真っ黒のままですね。

Virtual Blend Heightの値を1に戻したら真っ白になりました。

倒木のScaleが変わってもVirtual Blend Heightの値が1の時に0、3の時に全部を示すようになっているみたいですね。

あー分かりました。

以下に簡略化した図を作成しました。

オレンジの部分が倒木です。

赤い点がAbsolute World Positionです。

黒い矢印の長さが以下のSubtractの値です。

Object Boundの値が青の矢印の長さになります。

次の以下の部分の計算で、

以下の赤線で囲った値と同じになります。

ここに以下の赤線で囲った値を引きます。

例えば、Virtual Blend Heightが1の場合は

加えた値と同じだけ引きます。

しかしVirtual Blend Heightが1以上の場合は(例えば1.05の場合)

一寸だけ余計に引く事になります。

つまり、黒い部分が増えるようになります。

この青い線(Object Bounds)とWorld Positionの一点からLandscapeまでの距離を表す黒い線はScaleの変化に同率で変化します。

ので、この計算でScaleの変化を無効化出来るわけです。

ここでVirtual Textureを勉強する時間が無くなってしまいました。

Rural AustraliaをImportしたりCompileしたりした時間が予想外に掛かったからです。全部終わらなかったです。来週続きをやります。

8.Gaeaの勉強

8.1 Gaea Beginner Tutorial Series : Part 1 – Interface [11]の続きを勉強します

今週はTool Boxについて勉強します。

<Tool Box

以下の部分です。

GraphにConstantノードがあります。

この値を別なGraphのノードにPassしたいとします。

ConstantノードのOutputから左Clickしながら線を引っ張ります。

線を引っ張った後で左Clickを放すと以下のBoxが表示されます。

ここからMake Portalを選択します。

すると以下の様になります。

今度は、別なGraphにあるPerlinノードのInput Pinを左Clickしながら引っ張って

線を出して以下のBoxを表示します。

Portalを選択すると先程Outputを作成したConstantノードがあるのでそれを選択します。

すると

となります。

ここのPointは線を引っ張った後にBoxが現れる事で、線を引っ張らないとBoxは現れません。

別な方法として、Nodeを選択した状態でKeyboardのcを押すと以下のBoxが表示されます。

この後、Outputが複数あるNodeの場合も解説していましたが、直観で理解出来る内容なのでここにあえて記述する事はしません。

今度はTool Boxの表示方法についてです。

Tool Boxの右上の三本線マークをクリックしてFullを選択します。

するとTool Boxが上下一杯になりTutorialの表示と同じになります。

こっちの方が断然見やすいです。

9.雪山のMapの作成

先週の足跡の作成の続きでDynamic Footprint System Part 2/2 - Unreal Engine 4 Tutorial [10]を勉強します。

9.1 Dynamic Footprint System Part 2/2 - Unreal Engine 4 Tutorial [10]を勉強する

<Defining the Surfaces

Third Person BPがどのSurfaceに立っているのかを知るための実装です。

Project SettingのPhysicsを表示します。

その中のPhysics SurfacesのSurface Type1 とSurface Type 2にそれぞれGrass, SnowとSetします。

この機能を使用するのは初めてです。

この後、Physics Materialを使用しています。

が、これ使用するの初めてです。

更にTutorialだと地面のMaterialの所で作成しています。

Tutorial内では地面のMaterialはこんな感じで使用されています。

これは同じ様な物を先に作成しておいた方が、良いかもしれませんね。

作ってしまいます。

Materialはその辺にあるのをコピペしました。

これでやって見て駄目ならその時直します。

Physics Materialから新しいClassを2つ作成します。名前はPM_GrassとPM_Snowとしました。

それぞれを開いてSurface typeにGrassとSnowをセットします。

今度は、先程作成した地面用のMaterialを開きます。

Result Nodeを選択するとDetailの欄にPhysical Materialが表示されています。そこに先程作成したPhysics Materialをセットします。

M_FP_GrassにはPM_Grassをセットしました。

M_FP_SnowにはPM_Snowをセットしました。

こんな機能があるなんて初めて知りました。

Physics Materialとその使用方法については後で勉強する事にします。

<Spawning The Footprint

Third Person Character を開きます。

Event Graphの空いている箇所にCustom Event を追加します。名前はTutorialと同じFootprint_Rにします。

Line Trace BY Channelノードを追加します。

このNodeはあんまり使用した記憶はないですが、前の節で勉強した【UE5ゲーム制作】標準で実装されているControl RigによるFoot IKを解説します [3]の知識から、どんな機能なのか推測出来ます。

TraceをStartとEnd内で行い、何かがHitした場合Trueを返します。Out HitはHitしたActorを返すんじゃないでしょうか?

当然、無視するActorもあります。Actors to Ignoreにそれをセットする訳です。その中で特に自分は無視するのが普通なので、それは特別にIgnore Selfがある訳です。

続きです。

Third Person Characterの位置をStart Positionに指定しています。End Positionはそこから100を足しています。

100を引くんじゃないのと思いましたが、Third Person CharacterのMeshを見たら、Pivot Pointが底にセットされていました。底から上に向かってTranceするみたいですね。

次の実装です。

うーん。想像していた通りですが、このやり方だとLandscapeのMaterialのLayer毎の対応は出来なそうです。

それともPhysics MaterialをそれぞれのLayer毎にセットする方法があるんでしょうか?

兎に角、続きをやります。

以下のBooleanを作成してセットします。

Tutorialによるとこのやり方、非常に稚拙に見えますが、後に足跡をSpawnする時に他のやり方と比べてCodeの数が劇的に減るそうです。

そのままCopyしました。

次の実装です。

ここで先週作成したFoot_Rが出て来る訳ですね。

緻密な設計です。

<Spawn Correct Footprint Type

次の実装です。

ここでBPクラスであるFootprint_RからDecal MaterialであるGrass Matを取り出しています。確かにFootprint_RのComponentにはGrass Matがあります。

これが先週言っていた、BPにした方が整理しやすい。というやり方なんでしょうね。

うーん。

取りあえずはTutorialを全部終わらしてからこの辺の実装方法について考えます。

雪の場合も同様に作成します。

同様に左足用を作成します。

<Calling The Event

を開きます。

今度はここのEvent Graphに実装します。

まずThird Person CharacterのReference nodeを作成します。

これはまあ準備体操みたいなもんです。

AnimNotify_FootprintRを呼び、以下の実装を行います。

ふうーん。

これが先週、Animation_Sequence Classで作成したNotifiesを

Eventとして発動する方法なのか。

何回か実装した事はあるかもしれませんが、理論的に理解したのは今回が初めてですね。

Animation_Sequence Classで作成したNotifiesは、Animation BP内でしか受け取る事が出来ないんでしょうね。それて

Animation_Sequence Class のNortifies―>Animation BP―>Third Person Characterと繋げている訳です。

このTutorial、非常に分かり易いですが、中身は結構複雑ですね。

でも理解しました。

AnimNotify_FootprintLの実装も追加しました。

これで完成のはずです。

テストします。

うーん。

足跡は出来ていますが一寸オカシイです。

まず草の上ですが、片足だけ表示されています。

次に雪の上ですが緑色のFootprintがあります。

まずSnowを走っている時の左の足跡が草の上を走った時の足跡になる問題ですがThird Person Characterの以下の赤線で囲った部分の実装が間違っていたので直しました。

結果です。

足跡の色は直りましたが、足跡が右足しかないです。

左足だけFade Start Delayを15秒に遅らせました。

右足の足跡が消えた後も、消えない足跡がありました。

と言う事は左足の足跡は元から出来ていたのに気が付いていなかっただけみたいです。

9.2 Dynamic Footprint System Part 2/2 - Unreal Engine 4 Tutorial [10]を勉強した感想

先週のTutorialも合わせての感想になりますが、非常に分かり易かったです。

きちんと動いていますし、足跡の作り方の理屈が、非常に分かり易かったです。

Matt Aspland氏のTutorialは今まで、あんまり見た事無かったですが、これからは沢山参照する事にします。

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

10.1 先週の勉強の整理

先週、やってた内容がかなりトッ散らかっているので、それを整理します。

まず、以下の点についてこれから改善していくといっています。

  • UI
  • 戦闘場
  • Animation
  • Camera
  • Effect
  • Story

そしてその手始めにUI(Widget)の作成を始めました。

UIの作成で今作成中のRPGは何も考えずに作成してしまったため会話のUIだけで3種類も出来てしまいました。この間違いを二度と起こさないため先に作成に必要なUIを抽出してしまおうと考えました。

しかし普段、Gameをしない私はどんなUIがGameに必要なのか今一分かっていません。

それでこれです。

この一つ一つを見て、どのUIはどんな風に作成するのか勉強していました。

10.2 UIの勉強について

それでこれ見て思ったんですが、UIの勉強はそんな簡単には終わらないと。デザインに関してだけでも最低で一カ月はかかると。

「Game Design:ポケモン+HxHの念能力( 戦闘システムの作成)」は一端お休みして、UIのデザインの勉強に集中した方が良いと思うようになりました。ので今週からUIデザインの勉強を「Game Design:ポケモン+HxHの念能力( 戦闘システムの作成)」の代わりにやる事にします。

11.UI designの勉強

Interface In Game [11]を見ながらUIをDesignしてみます。

最初のCharacterですがInventoryの画面が出て来たり、Characterの選択が出て来たりしていて決まったUIがあるわけではないので無視して次に行きます。

<Credit画面>

GameをClearした時に流れる製作者一覧ですね。

映像が後ろに流れているのが一般的なようです。

大体のGameがExecutive Producerが一番最初に来ています。どんな仕事をする人なんでしょうね。その後にDirectorが来ていますが、DirectorはArt、Sound、Game、Technicalなど色々な種類のDirectorがいますね。

<Dialogue画面>

これは先週、勉強しました。

<Game Over 画面>

Game Overになった時に表示される画面です。Playerが死んだ事を告げるImageと続きを始める為のボタンがあるUIが表示されています。

映像が流れるタイプの結構ありますが、シンプルにPlayerが死んだ事を告げるだけのUIも多いです。

<In Game

これも何をさしているのか不明です。Skipします。

<Inventory画面>

3Dモデルが表示されていてItemや武器を装備するとその3DモデルのImageも変化します。

純粋にInventoryなUIとItemや武器の管理から、地図やSystemの管理まで一括で出来るUIの物も有ります。

Inventory画面はUIの作成の中心になるものだと思われ、ここでUI画面を見ただけでは何が必要なのか全然分かりません。これは後で別枠で勉強する事にします。

<Level選択画面>

単純なLevelの選択というよりStageの選択ですね。地図が開いてどのStageに移動するのか。みたいなのが多かったです。

<Load画面>

Load画面はどれくらいのLoadが終わっているのかを示す読み込みのWidgetと待っている間退屈しない映像がほとんどにありました。Gameの設定を解説する文章があるのは意外と少なかったです。

<Lobby画面>

Lobby画面って何かと思ったらGameが始まる前の待機画面の事でした。今のGameはOnline対戦が主流なので対戦相手が揃うまでLobby画面で待つんですね。

このUIは私には関係ないのでSkipします。

<Map画面>

Map画面はMapを表示する画面の事で色々な個所で使用されています。まずLevel画面です。Level画面で色々な場所を選択する場合、地図でその場所を表しているのが多いです。

後、単純にGame内で地図を見る為の画面である場合も多いですね。

<Menu画面>

Menu画面ってさっきのInventory画面とどう違うのと思ったんですが、一緒のやつもあるし、全然違うUIをMenuとよんでいるのもありますね。

全然違うUIの場合、音の大きさとかControllerの設定なんかを調節するUI画面の事をMenu画面と呼んでいる事が多かったです。

<Overlay画面>

Overlayって何?と思ったら、今ある画面を何かで覆い隠すEffectの事を指すそうです。これはUIではないのでSkipします。

<Progress画面>

Progress画面って何の画面なんでしょう?

Levelが上がったり、MissionをClearして報酬をもらう画面の事でした。

ここで本当に時間が無くなってしまいました。

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

12.Blenderの勉強

今週も復習だけやって終わりにします。時間が無い!

<Selection Method

やりました。

2022-02-14Blogの復習>

やりました。

2022-02-21Blogの復習>

Barrelが上手く行かない時はEdgeが複数生成されています。

2022-02-28Blogの復習>

今週の木です。

2022-04-03Blogの復習>

一応、記録のためにChecker Deselectを使用した図を載せておきます。

残りの内容も全部復習しました。

2022-04-25Blogの復習>

Flattenを選択した時の図です。記録のためにScreenshotを取りました。

選択した面の平均のNormalに対してFlattenした場合です。

軸に対して平行でないです。

13.まとめと感想

「もう一つは、最近Epic GameのLauncherの表示が変更されてLearningのPageが無くなってしまいました。Epic Game社の中でUEのLearningに対する取り扱いがどうなっているのか調査したいです。」これについては今週はやる時間が無くなってしまいました。来週まとめます。

14.参照(Reference

[1] CGHOW. (2022, April 11). Yin Yang FX in UE5 Niagara Tutorial | Download Files [Video]. YouTube. https://www.youtube.com/watch?v=vPzLeEqNPi8

[2] UE Memorandum. (2022, April 17). 【UE5ゲーム制作】Control Rigを使用して、坂道などの傾斜のある地面でも、足の向きを傾斜に沿わせる方法を解説します【逆引きUE】 [Video]. YouTube. https://www.youtube.com/watch?v=zca8dQB-3yg

[3] UE Memorandum. (2022a, April 9). 【UE5ゲーム制作】標準で実装されているControl RigによるFoot IKを解説します [Video]. YouTube. https://www.youtube.com/watch?v=hyJ1pid0Ed0

[4] Kurie, M. [Kurie Meiku]. (2022, April 24). 【UE4/UE5ゲーム制作講座】超基礎編・これを見れば内積(Dot Product)がわかる!(半分) [Video]. YouTube. https://www.youtube.com/watch?v=IBO_V48dYW4

[5] Cloward, B. [Ben Cloward]. (2021, July 22). Dot Product Node - Shader Graph Basics - Episode 7 [Video]. YouTube. https://www.youtube.com/watch?v=sD6y-hUxEck&list=PL78XDi0TS4lEBWa2Hpzg2SRC5njCcKydl&index=8

[6] Epic Game Japan [Unreal Engine JP]. (2022, February 21). Unreal Engineでイケてるイラストを描くためのノウハウ大放出! | UE4 Manga Anime Illustration Dive Online [Video]. YouTube. https://www.youtube.com/watch?v=QuYIkSozV6w

[7] UnrealCG. (2020, June 25). Toon Shader & Custom Shadow - UE4 Postprocess Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=mx_AvrZK3TA

[8] Epic Games. (n.d.). Landscape Edit Layers. Unreal Engine Documentation. Retrieved May 15, 2022, from https://docs.unrealengine.com/4.27/en-US/BuildingWorlds/Landscape/Layers/

[9] Unreal Sensei. (2021, April 23). How to Blend Objects with Your Landscape - UE4 Runtime Virtual Texturing (RVT) Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=xYuIDFzKaF4

[10] Aspland, M. [Matt Aspland]. (2020, December 19). Dynamic Footprint System Part 2/2 - Unreal Engine 4 Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=9HlZ-6aFk1I

[11] Klaus [klaus]. (2022, January 12). Gaea Beginner Tutorial Series : Part 1 - Interface [Video]. YouTubehttps://www.youtube.com/watch?v=H-vTeYYHJPM&list=PLyNtvXvNIFMMHnW1_-hXO3RNPp_Z5CExF&index=1

「Unreal Engine 4.xを使用してRPGを作成する」の足りない部分を作成する RPGのStoryの作成と推敲3

<前文>

<一年で英語がペラペラになる勉強法について>

私は、全く英語が出来ない人、中学レベルの英語ですら理解出来ていない人でも、たった一年で英語がペラペラになる勉強法を知っています。高校生だったら中学英語で落ちこぼれてしまった人でもこの方法で6カ月勉強したら、英語の成績が県で5番以内位になります。

しかし絶対に人に教えません。

何故かと言うとそれは一般の日本人の常識に反する勉強方法だからです。そして日本人全般に言える事ですが、自分達が納得しない方法で成功した人を徹底的に潰してきます。

だからそのやり方を公開したいけど出来ないというのが本当の所です。

で、なんでこんな事を今更書いたのかと言うと、Gameで遊ぶのが趣味な人達は英語が大嫌いな人が多いと聞いたからです。勿論、Gameで遊ぶだけなら英語が嫌いでも一向にかまいませんが、もしGameを自分で制作してみたいとなった時に英語が出来ないと詰むからです。

そこで、たった一年で英語がペラペラになる勉強法そのものは公開しませんがそのやり方のヒントをここに書く事にしました。

そのために、単語帳で単語を覚えるのは時間の無駄である事について解説します。(もうこの時点で、私の話が一般の日本人の常識に大きく反する事が理解出来ると思われます。)

英語と日本語は全く違う言語です。英語の単語と全く同じ意味を表している日本語の単語なんである訳ないんです。

英単語の本当の意味は、英語で書かれた辞書の解説を読むしか理解出来ないんです。本当は。

更に文法の問題もあります。その単語が動詞なのか、名詞なのか、動詞ならどの文型を取れるのか、名詞なら可算なのか不可算なのかとかです。これも単語帳を見ただけでは分かりません。

そしてその単語を使用した例文だって一個や二個じゃ、本当の使い方なんか絶対理解出来ません。

これを簡単に理解出来る例題をここに示します。

  • 私はスシローのラーメンが好きです

これを英訳します。

まずよっぽど英語が出来ない人でない限り、I likeは知っていると思うのでそこはスキップします。

I like Ramen

と書いたとします。でもRamenって可算名詞ですか?不可算名詞ですか?

不可算名詞だったらRamenで良いですが、可算名詞だったら a RamenかRamensにしないといけません。更に不可算名詞だとしても、スシローに何種類ものRamenが有ってそのどれもが好きな場合はどうでしょう?文法上、厳密には正しく無くてもRamensと言うアメリカ人は多そうです。

“スシローの”の“の”はどう訳しましょう。“の”だからofじゃないと単純に言っていいんでしょうか。ドアの鍵は、Key to the door。つまり“の”と言ってもTo の時もあります。スシローはRestaurantです。場所と考えるとAt , On, Inでもよさそうです。どれが正解なんでしょう?

最後のスシローも英語だとSushiroになります。これが a Sushiroなのか The Sushiroにすべきなのか、はたまた単なるSushiroで良いのか?

こういうのを全部理解しておかないと、こんな単純な日本語ですら英語で喋れないんです。

これ、単語帳でセコセコ単語覚えたって出来る様にならないですよ。

はい。

だから単語帳で単語を覚えるのは時間の無駄なんですよ。そんな事をする時間があるなら、○○をしろ。って言いたいですがそれは止めておきます。

これが私の一年で英語がペラペラになる勉強法のヒントです。

因みに私は「私はスシローのラーメンが好きです。」は

I like Ramens at Sushiro.

と言いますね。

勿論、Ramenは不可算名詞ですが、ここは敢えてスシローにある全ての種類のラーメンが好きという面をアピールしてあえてRamensにします。

そして前置詞はat 一択です。

これはレストランのMenuを言う時に「料理名 at レストラン名」と言う言い方が普通だからです。

スシローに関しては実際に存在している個々のスシローを指している訳ではないので不可算名詞でSushiroと書きました。

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

<本文>

1.今週の予定

今週も先週と同じ予定でやって行きます。

  • Niagara: CGHOW氏のTutorialをやる
  • Materialの勉強
  • RPGStoryの改善
  • Map1Bugの直し
  • Open Worldの検証
  • Gaeaの勉強
  • 雪山のMapの作成
  • Game DesignポケモンHxHの念能力( 戦闘システムの作成)
  • Blenderの勉強

2.Niagara: CGHOW氏のTutorialをやる

今週は、先週勉強したYin Yang FX in UE5 Niagara Tutorial [1]の内容で良く理解出来なかった個所の勉強に集中します。

これやらないと何時まで経っても自分でEffect作れない気がしています。CGHOW氏の最近のTutorialは非常に分かり易く、ほとんど考えなくても自分で実装出来るようになっています。それだと勉強にあんまりならないので自分で考えるようにします。

2.1 Yin Yang FX in UE5 Niagara Tutorial [1]を理解する

<どうやってTextureのImageを読み込むのか>

まずはこれからやってみます。

Particle Spawn SectionのTexture Module(Scratch Moduleから作成した)内で以下の様にTextureのImageを読み込んでいます。

これは理解出来ますが、この読み込んだTextureにParticleを添える方法が良く分かりません。

以下の図の赤線で囲った部分Particle Positionの値をSample Texture 2D NodeのUVに繋げています。

これだとPositionの値が0から1である必要がある気がします。

私の勝手なImageだとParticleの生成される場所は以下に示した様な-1と1の間の値だと思います。

所が、TextureのUVは以下の様になっているはずです。

となると一対一の対応しない気がします。

中々臨んだImageを示すParticleが実装出来なくて苦労したんですが、

以下の実装で

以下のImageを表す事が出来ました。

何にそんなに手こずったのかと言うと、

ParticleのPositionにScalingするのを忘れてしまってずっとTextureの形が表現できなかったです。

考えてみればParticle Spawn SectionのShape Location Moduleで

PlaneのSizeを100x100にセットしているんだから1から-1って事はなかったです。

先程実装を見せたScratch ModuleのScaleの値を丁度100分の1にすると

指定したTextureのImageが表示されました。

で、TextureがWrapされていると良く分からんのでWrapを外します。

はい。

Textureの最初の4分の1だけ生成されています。Textureの以下の部分にあたるのはPositionが0から1の値の全体の4分の1の部分だけです。

と言う事はやっぱり

ParticleのPositionは以下のように分布して生成されています。

で問題解決とならないのが一つあってこのShape Location Moduleの

Plane Midpointの値が0.5,0.5にセットされています。

これってOffsetでしょう。Planeの中心とNSの位置を合わせるって事だと理解しています。

と言う事はこれを0,0にセットしたら。

になるって事なんでしょうか?

となるとTextureを全部表す事が出来るって事になりますよね。

試してみます。

なっていた。

Textureが裏返しになっているのは昔OpenGLのTextureに関する記事でTextureが裏返しに貼られる話を読んだ記憶があります。

今回はそこはSkipします。

先週、

をして太極図の位置が移動出来た理由も分かりました。

<MaterialのBlend Modeについて>

これも一応調べておきますか。

公式のDocumentであるMaterial Blend Modes [2]に解説がありました。

読んだら基本的な内容は理解出来ましたが、肝腎の計算方法がわかりません。

恐らく

  • Opaque:後ろの値は無視
  • Translucent:後ろの値と掛け算
  • Additive:後ろの値と足し算

と思われますが、実際の計算方法は分かりませんでした。

Translucentは黒が表現でき、Additiveは黒は透明になる事は覚えておきます。

<太極図の黒い部分の色を変える>

普通、色付きの太極図と言えば黒い部分の色が変化してるはずです。

黒い部分に色をつけるのは色を足して、0と1でClampすれば良いはずです。

やってみます。

先程、作成したTextureを読み込む実装に色を追加する部分を追加します。赤で囲んだ部分がそうです。

Saturate NodeがFloat用しか見つからなかったのでわざわざ0と1でClampしています。

そのClampのMaxとMinの値をConstantで指定使用としたらその方法が分かりません。仕方ないのでMake Float Nodeを使用してMinとMaxの値を指定しました。

計算は合っているはずです。

結果です。

これはParticleの色が白に指定されているからこうなっているだけなはずです。

Particleの色を変えてみます。

Particleの色はParticle Spawn SectionのInitialize Particle Moduleの

Colorで指定しています。

これを黒にしてみます。

結果です。

成程。こうなるのか。

太極図の外側の透明な部分にも色がついてしまっています。

直します。

Alphaの値はTextureのみを使用する事にしました。これで太極図の外側は透明になるはずです。

結果です。

色を変えてみます。

赤くしました。

出来てますね。

こっちが良く縁日とかで見る赤い太極図だと思います。

青くしてみました。

出来てます。

<Vortex Velocity Moduleについて>

Vortexって渦って意味でした。

だから先週のこの疑問は根本的な部分が間違っています。Vortex VelocityをAngular Velocityと同じと思っていたんです。

ここで調べるのはNiagaraのVelocityのModuleにAngular Velocity的なModuleがあるかどうかでした。

それを調べます。

Rotational Velocity Moduleがありますね。

Rotational Velocity Moduleを色々いじったんですが、

Particleは全く動きません。

このModuleは別のModuleと組み合わせて使用するみたいです。

そう言えば、Content ExampleにParticleをCircular motionさせるのが有ったはずです。それの実装を見てみます。

そのものズバリのRotational Velocityが有ったのでこれを見てみます。

これは一つ一つのMeshを回転させるためのModuleみたいです。

こっちはParticleが円の軌道を移動しています。

こっちの実装も見てみます。

このParticle Update SectionにあるRotate Around Point ModuleがParticleにCircular motionさせているみたいです。

結構、複雑な設定ですね。

X Axisって何を指定するんでしょう。X軸以外にないと思いますが?

Set Particle PositionもよくわからんParameterです。

RadiusがあってRotation Centerもあるって事はParticleの初期位置はCircular motionとは関係ないみたいですね。

取りあえず使ってみましょう。

以下の設定で先程のNSに追加しました。

結果です。

でもこれはParticleの位置を指定してしまうので、Particleの初期位置が同じ場所になってしまいます。

これを太極図の回転には使用出来ませんね。

それで先週勉強したTutorialはこのScratch Moduleで回転させる以外の方法が無かった訳ですね。

この実装についてはQuaternion掛けてるだけですので、それで納得です。

<先週作成したParticleを回転させるScratch Moduleの問題>

それで訳わからないのは

実際のLevelに配置した時このNSの位置が

の時は

Previewと同じに回転しますが、以下に示した様にLocationの位置を少しずらした場合

World Spaceの中心に対して回転し始めます。

これを直します。

結果を先に書いてしまいますが、これが原因だと思う事をほとんど試したんですが、駄目でした。

直せませんでした。

これは諦めます。

一応、考えた事だけ以下にまとめておきます。

<原点の値を引く>

まず太極図の回転がNSのLocationによって変化してしまうと言う事は、計算のどこかでWorld Spaceの座標が使用されていると言う事です。

と言う事は

  • 太極図を原点に移動させてWorld Spaceの座標を一端、0にする、
  • 回転、
  • 回転した後に太極図の位置を元に戻す

これをやれば良いはずです。

以下の実装でそれを作成しました。

が結果は何も変わらなかったです。

うーん。

分からん。

<Particle Positionについて調べる>

World Spaceの位置が変わる事によるParticle Positionの影響を一寸だけ調べてみます。

以下に示した様な1点だけに生成されるParticleのNSをFountainから作成します。

中身はこんな感じです。

これのParticle Update Sectionに以下のScratch Moduleを追加します。

指定した値だけX軸に移動します。

Previewの結果です。

X軸上に移動しています。(GifにしてもParticleが右に移動しているだけなのでGifは止めてScreenshotだけ撮影しました。)

これをLevel上に配置します。(0,0,0の位置に配置しました。)

Previewと全く同じです。

NSの場所を移動します。

結果です。

場所を移動しても全く同じ結果になりました。

Particle Spawn SectionにShape Location Moduleを追加してParticle の生成場所にばらつきを与えてみます。

Previewでの結果です。

生成される場所はバラバラになりましたが、それぞれのParticleはScratch Moduleで実装した通りにX軸方向に移動しています。

Level上でも同じです。別にWorld Spaceの原点じゃなくてもX軸に沿って移動しています。

この結果から推測するとParticle PositionはWorld Spaceの位置の変化による影響は全く受けていないですね。

うーん。

となるとQuaternionの計算をしているModuleが怪しい気がして来ました。

<Quaternion Moduleのチェック>

Particle Positionをチェックするために作成したScratch Moduleの実装を以下のように変更しました。これでQuaternion ModuleとWorld Spaceの原点の関係を調べます。

これで以下の様になりました。

これもScreenshotですが、実際はここに写っている全てのParticleがLocal Spaceの原点を中心に回転しています。

Level上に配置します。

原点から外れた位置に配置しました。

普通にLocal Spaceを中心にして回転しています。

???です。

Quaternion Moduleは関係ないみたいですね。

<逆の順番で太極図を作成する>

もうこうなったら逆の順番でここから太極図を作成してみます。どっかで回転が変になるはずです。

Textureを表示するためにParticle Spawn Sectionに新しいScratch Moduleを追加します。

実装ですが、Textureを読み込む部分だけ作成しました。

Previewの結果です。

普通にグルグル回っています。

Level上の結果です。

Local Spaceの原点を中心に回っていますが太極図の形が変形しています。

これってParticle PositionがWorld Spaceの位置を返してる証拠でしょう。

Particle PositionからNSの原点の値を引けば、Particle Positionの値はLocal Spaceでの値と同じになるはずです。

以下の実装でそうなるはずです。

結果です。

如何なる位置にNSを移動しても太極図がずれる事は無くなりました。

勿論、回転も普通にNSの原点を中心にして行われています。

<OnceとKill Particle When Lifetime

もう実行していない機能は、

Emitter Update SectionのEmitter State Moduleの

Loop Behaviorの値をInfiniteからOnceに変えて

Particle Update SectionのParticle State Moduleの

Kill Particle When LifetimeのCheckを外す事ぐらいです。

これもやってみます。

普通にNSの位置で回転しています。

あれ??

<全部比較する>

先週作成した太極図の実装と今作成した太極図の実装で違う所を全部抜き出します。

全部見ましたが、分かりません。

Niagaraの勉強のまとめ>

流石に時間が無くなってしまいました。今週はGive Upします。

後、Play画面にすると太極図が両方とも回転を止めてしまっています。

これも理由が分かりません。

今週のNiagaraの勉強は疲れました。こんなに大変な事になるとは思いませんでした。でも勉強にはなりましたし、自分の今の実力がどの程度なのかも理解出来ました。

3.Materialの勉強

今週もToon Shader & Custom Shadow - UE4 Postprocess Tutorial [3]の続きをやっていきます。また先週やったWorld Aligned Textureノードの勉強の続きもやっていきます。

3.1 Toon Shader & Custom Shadow - UE4 Postprocess Tutorial [3]の勉強の続き

<Characterの影を直す>

これを直します。

Third Person CharacterのMeshのRender Custom Depth PassにCheckを入れます。

元から入っていました。

以下の実装をして

Third Person Characterだけ黒ぬきします。

この部分の実装が実際に何をしているのか良く理解していないので詳しくやっていきます。

Custom Depthだけ見てみます。

真っ白です。

あ。Third Person Characterがいないからだ。とThird Person Characterを配置しても真っ白です。

View ModeからBuffer Visualization を選択してCustom Depthを選択して確認したところ。

以下に示した様にThird Person Characterが浮き彫りになっていました。

Custom Depth が効いてないわけではないみたいです。

今度はScene Depthです。

こっちも結果は真っ白でした。

Buffer VisualizationでScene Depthを選択したら以下のようになりました。

更に実装していきます。

ずっと画面は真っ白だったんですが、最後まで実装したらTutorialと同じ状態になりました。

流石にこれだけだと何も分からん。

色々遊んでみます。

以下に示した様にMask とCeilを外した状態でも

黒ぬきされました。

だったら以下の実装でParameterの数字が幾つの時にThird Person Characterが黒く現れるのかを試してみます。

結果です。

2137で引いた時にThird Person Characterが黒くなりました。

同様の実験をScene Depthでも行ってみます。

まず数字が小さい時は画面は真っ白です。

Parameterの名前をScene Depthに直すのを忘れていました。

数字を大きくすると手前から黒い部分が現れて来ました。

以下の数値でThird Person Characterが見えますね

2000位ですね。

更に数字を大きくします。

Third Person Characterの奥まで真っ黒になりました。

成程。

Custom DepthのThird Person Characterの部分の値は2000前後で、Scene DepthのThird Person Characterの値もまた2000前後です。これを引くからThird Person Characterの部分が0になる訳です。

でもなんで両方のThird Person Characterの部分の値が2000前後なんでしょう。

あ。

Depthだからだ。

Custom DepthもScene Depthもカメラからの距離を示しているだけでした。

正しCustom Depth は選択したObjectに対してのみ距離を表し、Scene Depthは画面に写るっている全てのObjectの距離を表しています。

Custom DepthからScene Depthを引いた場合、Custom Depthで指定されたObjectが0になるのは分かりました。でも分からないのはそれ以外の部分です。例えば空の部分でScene Depthでもかなり大きな値だと思います。それよりもCustom Depthの白い部分の値は大きいんでしょうか?

上記の例だとScene Depthでは大体5500で空意外は黒くなっています。空は

で真っ黒になりました。

一方、Custom Depthの場合、

同じ値では背景は白いままです。

はい。

Custom Depthの白い部分は1とかの値じゃなくてどんでもない大きな値です。少なくとも267000より大きな値です。そしてこれがCustom Depth-Scene DepthでCustom Depthで指定されているObjectを黒く塗れる理由です。

この実装を以下の部分に組み込みます。

結果です。

Textureの影が抜けています。

Characterが動いている時はTextureの影が抜けても良いですが、止まっている時はTextureの影が有った方が良い気がします。

この辺はSpeedの変化でOn Off出来ると良いかもしれません。

Outlineの生成>

2022-04-25のBlog

と書いています。のでじっくりやって行きます。

まずこのNode、Blur Sample Offsetsです。

公式のDocumentを探したんですが見つかりません。

Node、Clickしたら中身が見れました。

単に、Input値に値を掛けているだけでした。

となるとこの後のNodeが重要ですね。

TutorialだとこのTutorialはOutlineのTutorialじゃないんでと、一気に以下の実装を組んでいます。

結果です。

綺麗なOutlineが既に抽出されています。

この実装を、理解するにはSample  Scene Depth ノードが分かれば良いんです。

中身を見ます。

結構複雑に見えますが実際に使用している部分は、以下の部分だけです。

これは要するに、以下に示したScene Depthの画面のあるPixelの値を抜き出しています。

この部分は抜き出したPixelの上下左右のPixelを指しています。

ここで-4 を掛けています。

これ最初何しているのか全く理解出来なかったんですが、下の実装を見たら分かりました。

あるPixelの周りのPixelの値を全部足しているんです。

以下の例で解説します。

真ん中のPixelの値は真っ黒なので0です。その周りのPixelは真っ白なので1です。

この場合、0*(-4)+(1+1+1+1)=4になります。

以下の例の場合は

1*(-4)+(0+0+0+0)=-4になります。

以下の場合は

0*(-4)+(0+0+0+0)=0になります。

以下の場合も

1*(-4)+(1+1+1+1)=0になります。

つまり上下左右のPixelと深度が違う場合は0以外の値になります。深度が同じ時は0になります。

当然、絶対値のみが重要なのでAbs ノードで正の値に変換します。

結果です。

凄い眩しくなっています。値が4倍されているから当然かもしれません。

次の部分の実装です。

この部分は線を濃くしたり太くしたりするお馴染みの計算です。

一応、確認のために検証します。

Multが1の時です。

Multの値を0.01にしました。

結果です。

次はMultの値を大きくしてみます。

結果です。

訳わからん自体になりました。

MultはOutlineの線そのものの抽出に干渉するParameterと言う事ですね。Outlineを太くしたりするのではなくどの深度の部分からOutlineを引くのかについての干渉をしています。

この計算は後でSaturateするのでMultで1より大きい値を掛ける意味はあんまりないはずです。

0から1の間の値を掛けるとなると白の部分の色を灰色側に持ってくるのが役割な気がします。

つまり、白い部分は実際は1ではなく1以上の値の場合もあります。例えばある点の値は100だったとします。0.01を掛けても1です。別な点も白ですが値は1だとします。この点に0.01を掛けると0.01になります。つまり今まで1と100は同じ白で表現されていましたが、0.01を掛けた事でこの二つの点の差がはっきり可視化されたわけです。

次はPowです。

Powは何をするのかもう分かっています。Contrastをはっきりさせます。

以下の条件のような最初からContrastがはっきりしている状態でテストしても明快な効果が出るとは思えません。

以下の様なGrayな感じが出ている状態でテストします。

Powの値を上げれるだけ上げてContrastを付けれるだけ付けてみました。

以下のLerpのAlphaに繋ぎます。

結果です。

値は微調整しました。

Third Person Characterに近づいて見ると分かりますが、本当にOutlineでMannequinの内部の線は一本もありません。

これ先程のCustom Depthの技法を使ってMannequinだけ特別なOutlineの値を追加した方が良い気がします。

この方法は足と地面の間にOutlineが出来ません。

これも修正が必要です。

この辺は後で考える事にします。

3.2 World Aligned Textureノードの実装方法について

今週はWorld Aligned Textureの実装を読んでみます。

Triplanar Projection - Shader Graph Basics - Episode 28 [4]の復習

で、その前にTriplanar Projection - Shader Graph Basics - Episode 28 [4]を復習します。

流石にこれ以前のTutorialまで復習する必要はないと信じたい。が忘れていたらやらざる得ないです。

Triplanar Projection - Shader Graph Basics - Episode 28 [4]の実装です。

以下の部分でMaskを作っています。

こう言う奴です。

以下の部分でTextureのProjectionを行っています。

赤線で囲った部分はMaskがRGなのでZ軸にProjectionを行っています。

3つのProjectionを合成している所です。

Alphaには先程のMaskの計算結果が入ります。

はい。

思い出しました。

<World Aligned Textureノードの実装方法の検証>

まずMaskの方から見て行きます。

Triplanar Projection - Shader Graph Basics - Episode 28 [4]のMaskの場合です。

World Aligned Textureノードは(1,1,1)をDot productしていませんね。Powerもしていません。Powerは確かBlendの幅を調整するParameterだったはずです。

その代り、Cheap Contrastノードが使用されています。

実装をみましたが、良く分かりません。

以下に示したMask(R)のPreviewを見てみます。

結果です。

ええー。

こんな形のMaskをかけるの?

もう一方のMaskもこんな形状です。

はあ、成程。

今度はProjectionの方を見てみます。

World Aligned TextureノードのProjection部分です。

Textureのサイズで割っていますね。

これは前に見たNodeの実装でもやっていました。これUV値を計算する正しい計算方法な気がしてきました。後で検証します。

Triplanar Projection - Shader Graph Basics - Episode 28 [4]のProjectionもTextureのサイズを調整するために計算していますが、これは公式の計算方法を見た後だと、ちょっと適当に見えてしまいます。

World Aligned TextureノードのProjection部分の残りです。

この部分は、微妙にTriplanar Projection - Shader Graph Basics - Episode 28 [4]のProjectionと違っている部分もありますが、理論は全く同じでした。

以上です。

3.3 World Aligned Textureノードの実装を見た感想など

もっと凄い時間がかかるかと思ったら、直ぐに終わりました。これはTriplanar Projection - Shader Graph Basics - Episode 28 [4]を一回復習してTri Planar Projectionの仕組みを理解した後で、World Aligned Textureノードの実装を見たからです。

理論的にはTriplanar Projection - Shader Graph Basics - Episode 28 [4]とWorld Aligned Textureノードの実装は同じでした。しかしMaskの作成方法は全く違っていました。

World Aligned TextureノードではCheap Contrastノードを使用して

のようなMaskをしていました。

Triplanar Projection - Shader Graph Basics - Episode 28 [4]ではもう何度も勉強しましたが、以下の様なMaskをしています。

Cheap Contrastノードの機能についてはまだ理解していませんが、World Aligned TextureノードにはTriplanar Projection - Shader Graph Basics - Episode 28 [4]にあるBlendの幅をControlする機能はないような気がします。

二つ並べて比較もしてみます。

左側のBlend部分が見えるのがWorld Aligned Textureノードです。

Top ViewですがProjectionの向きが違いますね。

Front Viewです。右のBlendがあるのがWorld Aligned Textureノードです。

うーん。

World Aligned Textureノードは以下のようなMaskを使用しているので、

結構荒くProjectionされているのかと思いましたが、この結果を見る限りではTriplanar Projection - Shader Graph Basics - Episode 28 [4]の結果とそんなに差はないみたいですね。

こうやってMaterialの公式のNodeの実装をしっかり見るのはほとんど初めてでしたが、かなり勉強になりました。

4.RPGStoryの改善

今週もStoryの改善をやっていきます。

4.1 Storyの改善

<第一章>

アホとの決別って日本だったら何がピッタシなのかと思っていたんですが分かりました。

同調圧力からの決別ですよ。

「何となく、こうすべきだよね。」からの決別が隠れたThemeにします。

勿論、何となくじゃなくて、理由があるのに逆らって自分勝手な事をするのは論外です。自分だけ特別な情報貰って圧倒的に有利な位置にいるヤツが同調圧力を利用して他人を蹴落とす嫌なヤツの登場も良いかもしれません。Villainとしてですが。

この辺からStoryを膨らませますか。

Playerはまず、最初の村で2つの情報を入手する必要があります。

  • 武器をどうやって手に入れるか
  • 金の切符について

ここで武器については、2022-04-25のBlogで書いた

で行きます。

ここで手に入るのは金の切符じゃなくて赤の切符ですが、この章の最後までPlayerはそれが金の切符だと信じています。

村人Aが探し物をしています。

どうも村長の大切な物を預かったですが無くしてしまったみたいです。

銀河鉄道で隣の世界に行ったときに落としたらしく、村のどこにもありません。隣の世界はMonsterが跋扈して人間が住める所ではありません。

武器を手に入れたPlayerがMonsterを倒せる事を知った村人Aは、Playerに金の切符に関してどの村人も絶対によそ者に教えない情報を教えるから、その落とし物を取って来てほしいとお願いします。

Playerがその落とし物を取ってくると、その村人Aは、こんな話をPlayerに教えます。

前村長の息子が、ある日崖から落ちて、夢を見た。そこで赤い帽子の魔女に会って金の切符を探せ。と言われた。

それで前村長の息子は金の切符を求めて、世界中を旅したりしていたら、その間に前村長は殺されて、中央から送られてきた役人がこの村の村長になった。

その話を聞いた前村長の息子は、この村に戻って来たが、時すでに遅く、この村から追放された。

その前村長の息子は隣の世界の山に隠れて暮らしているから会って話を聞いてみろ。

で山を登ると洞穴があってそこに前村長の息子がいます。そこで、Playerは赤の切符を貰う訳です。

今まで、役に立たなかった不思議な地図に赤い切符を使うと赤い銀河鉄道が現れて、誰も言った事がない世界に移動する事が出来ました。

ここまで書いて先週のBlogで以下のような話を既に作成していました。

これは来週考えます。

<第二章>

第二章は先週の話でほとんど完成しています。このままで良いでしょう。

<第三章>

王国ですので、どんな王国にするか考えます。

緑が生い茂る豊かな王国にします。

そして7つの大罪の一人がここで登場します。どんなキャラにしましょうか?

こういうのを自分で考えるからつまらないキャラになるんです。ワンピースの七武海のキャラをそのまま貰ってしまいましょう。

少なくとも王様、捕らわれの姫の二人は立つキャラである必要があります。

後、7つの大罪の一人が何でこの姫をさらってこの王国を脅しているのかについての理由も必要です。

伝説の剣で攻撃されない限り、死ぬ事はないわけですから、特別な目的がない限り、捕らわれの姫を殺して、力尽くでこの王国を奪う事も出来るはずです。

こんな設定はどうでしょうか?

7つの大罪が悪魔軍団から祝福された超人的な能力を持つ人間であるように、天使から祝福された7賢者もこの世のどこかにいます。

その7賢者の居場所を知っているのがこの国の王様で、それを7つの大罪は聞きだそうとしています。そのために王様の娘を誘拐して脅しています。

7つの大罪はネーミングが強いですが、7賢者は弱いですね。やっぱり12使徒に戻します。

いやもっとダイレクトに7つの大罪の一人が狙っているのは金の切符にしましょう。

王様とその娘の姫は、代々王家に伝わる秘密が有ってその中に金の切符に関する秘密があるそうなんです。

姫が監禁されている塔に忍び込んだPlayerは捕らわれの姫から7つの大罪の一人を倒すためには伝説の剣が必要であると聞きます。

それを王様に伝えると王様はPlayerに12使徒の一人が○○にいるので彼に伝説の剣のありかを聞いて来てほしいと頼まれます。

苦労のすえ、12使徒の一人に会う事が出来たPlayerは12使徒の一人から伝説の剣は既に、7つの大罪の一人によって破壊されてしまった事を聞きます。

そして、12使徒の一人はPlayerが不思議な地図を使える事を知ると代わりに黄色の切符をPlayerに渡します。

<第四章>

ここは前回までの設定で十分な気がしています。

12使徒を探す旅は既にしてしまったので、何か別な試練が必要ですね。

こういうのはどうでしょうか?

伝説の剣は、雷神剣と呼ばれていて、天にかざすと敵に雷を落とします。最初の7つの大罪は戦闘になるとドラゴンに変身して空を飛び回り、攻撃が当たらなくなります。ので雷神剣で雷で攻撃する必要があります。

ここに登場する2番目の7つの大罪は、Phenixに変身して攻撃します。全身が炎に包まれているため雷があまり聞きません。更に常にダメージが回復していきます。

彼を倒すためには、無限に水が湧き出る節制の壺で攻撃する必要があります。

その壺を探すのがPlayerの役目です。

その壺は最初の村の隣の世界の沼にあります。

<第五章>

ここは、実際は7つの大罪の一人を倒した後の方が主になりますね。第四章ではPlayerは直接は7つの大罪と戦いませんが、ここではPlayerが直接、7つの大罪を倒します。

倒した後にどうやって、この青の世界が、黄の世界の1000年後の世界だと分かるようにするのかが問題です。

Playerと王女の結婚式を行う事にしましょう。

そこで、代々王家に伝わる秘密をPlayerが王様と王女から聞く事になります。

そこには、黄の世界でPlayerが体験した話が、千年前の事として語らえていました。

更に、魔法についても話が膨らんできました。雷神剣や節制の壺は返さなければなりません。返した後で、雷撃の魔法や水の魔法が使えるようにしましょう。そうすればEffectも使い回し出来ます。

4.2 名称の整理

色々な登場人物や色々な伝説の武器が出て来て、混乱しています。ここで整理する事にします。

<7つの大罪>

7つの大罪からは2人出て来ます。一人はドラゴンに、もうひとりは火の鳥に変身して戦う狂猛な戦士です。

名前と担当する罪をここで決めてしまいましょう。

名前は何から取りますか?

虫からとりますか?

ムカデ、クモ、サソリ、蛾、蜂、毒蛇、カエルはどうでしょう。

7つの罪のSymbolは傲慢 (pride)、強欲 (greed)、嫉妬 (envy)、憤怒  (wrath)、色欲 (lust)、暴食 (gluttony)、怠惰 (sloth)とします。

<<毒蛇>>

最初の7つの大罪です。変身するとドラゴンになります。青の世界にいます。罪は傲慢 (pride)にします。

<<サソリ>>

当然、黄の世界にいます。変身すると火の鳥になります。強欲 (greed)を担当します。

<<カエル>>

最初の村の隣の世界にある沼地にいます。変身すると巨大な魚になりますが、今回は戦いません。怠惰 (sloth)を担当しています。

悪魔の王から節制の壺を預けられていますが、使徒に騙されてPlayerに渡してしまいます。

<12使徒

天使から祝福を受けた特別な人間です。行く先々でPlayerを助けます。

名前はそれっぽいとこから取る事にします。

実際の12使徒の名前は使用しません。

果物の名前とか、どうでしょう。

アメリカでもっとも人気の果物を12個選びました。

bananas 、apples 、strawberries 、grapes 、oranges 、watermelon 、blueberries 、lemons 、peaches 、avocados 、pineapple 、cherries です。

日本語だと、バナナ、リンゴ、イチゴ、ブドウ、オレンジ、スイカ、ブルーベリー、レモン、桃、アボカド、パイナップル、そしてサクランボになります。

因みに英語だとスイカは果物に入ります。

イカは野菜じゃないの?と聞いたら、英語の定義では何でも種が中にある実は果物になるそうです。

キュウリやトマトも果物だそうです。

<<バナナ>>

最初の村の隣の世界の山に隠れています。最初にPlayerが会った時は、前村長の息子としか紹介されません。節制の壺を探すためにもう一度、この世界を訪れた時に12使徒の一人である事が分かります。

<<リンゴ>>

青の世界にいます。Playerに雷神剣はもう破壊されてこの世にない事を告げ、代わりに黄色の切符をPlayerに与えます。その後、王様を助けるために青の王国へ行きます。

<<イチゴ、ブドウ、オレンジ>>

黄の世界にいます。砂漠の国の王様を助けるために摂政をしています。

<<スイカ>>

赤の世界にいます。赤の世界のたった一人の住人です。

<世界の名前>

最初の村は、最初の村の隣の世界、とか分かりにくいです。

名前を決めます。

<<小さな世界>>

最初の世界は村が一個あるだけなので小さな世界にします。

<<普通の世界>>

最初の村からWarpで着く次の世界です。山と平地、沼地があり、山には12使徒のバナナが住んでいます。沼には7つの大罪のカエルが住んでいます。特徴がないので普通の世界とします。

<<赤の世界>>

赤の世界は、青の世界の千年後の世界です。人類は滅んでしまって悪魔に使えるMonsterが跋扈する恐ろしい世界です。

<<青の世界>>

青の世界は、小さな世界を大きくした様な自然が豊かな大きな世界です。もっとも自然が豊かな場所に、今回の舞台となる王国があります。

<<黄色の世界>>

黄色の世界は、砂漠の世界です。小さな王国があり、勇敢な王様と三人の12使徒によって運営されています。

<王国や村の名前>

王国や村の名前を決めてしまいます。

ギリシャ神話の神の名前にしますか。

ゼウス,ヘラ,アレス,アフロディテヘファイストス,ヘルメス,デメテル,ポセイドン,アテナ,アポロン,アルテミス,ディオニュソスなどがあるそうです。

有名なのはゼウス,ヘルメス,ポセイドン,アテナ,アポロンですかね。

<最初の村>

一番最初にPlayerが行く村です。

アポロン王国>

青の世界にある王国で、今回の舞台になる国です。

<ゼウス王国>

黄色の世界にある、砂漠の中の国です。

<伝説の武器の名前>

伝説の武器は2個しか出て来ません。

<<雷神剣>>

雷を敵に落とします。空を飛んでいるドラゴンを攻撃出来るほとんど唯一の武器です。

<<節制の壺>>

空から滝のような水を落とします。雷の聞かない火の鳥に有効な武器です。半面、降ってくるのは単なる水なのでドラゴンには効きません。

4.3 Storyのまとめ

最初からStoryを作っておけば良かったです。今からだとかなり直しが必要になります。でもこのStoryなら面白いですね。完成したら売れる事は間違いないでしょう。

5.Map1Bugの直し

今週は以下の2つのBugを直します。

  • 戦闘すると職業が弟子に戻ってしまう
  • 戦闘中の画面でLevelを表示

5.1  戦闘すると職業が弟子に戻ってしまう

Game Mode BP内のEvent Begin Playで強制的に職業と所持金を指定していました。

その部分を外しました。

テストします。

職業を狩人にして戦闘しました。

戦闘が終わって元の場所に戻って来ました。

狩人のままになりました。

5.2  戦闘中の画面でLevelを表示

Player Character Combat Panel widgetを開いて

Textを追加しLVと記入しておきます。

実際に表示する文字は、以下の実装で指定します。

更に、Combat UIの

Player Character Combat Panel widgetを表示する所のサイズや位置を調節してLVが綺麗に表示出来る様にしました。

結果です。

Combat UIはほとんど初めて作成したWidgetなので、今見ると直したい個所が沢山あります。

例えばTextのBackground ImageですがWrapしてBoarderで追加すればBoarder内にBackground Imageを追加出来るのですが、それをやっていません。

更に、Player Statusですが、味方が一人しかいないGameでPlayerのCharacterのStatusを表すWidget、Player Character Combat Panelを敢えて別に作成しています。

これは教科書にそう書かれていたからですが、この教科書では味方も敵も複数だったのです。

このGameを作成する時に、味方も敵も一人に限定したので、PlayerのCharacterのStatusを表すWidget、Player Character Combat Panelを敢えて別に作成するのは、適切な方法ではなくなってしまったわけです。

これらも後で直します。

5.3 Map1のMonsterが跋扈する場所に柵を追加する

Monsterが跋扈している場所に柵とか何もないのはオカシイです。

柵を追加しました。

Play画面です。

反対側のMonsterが跋扈する場所にも柵を追加しました。

Play画面です。

それなりに良いのではないでしょうか。

敢えて言うと地面にデコボコ感がもう少し欲しいです。後、地面から草が生えていて石がまばらに存在しているともっと良いかもしれません。

この辺はLandscapeの勉強で直して行きます。

6.Open Worldの検証

6.1 先週までの作業の確認

その第一弾としてLandmassを使用して山を生成するTutorialを勉強しました。

そして以下の事を今週試したいと述べていました。

後、この機能BPでやっているんです。と言う事はそのBPをみると実装方法が分かるんでしょうか?

これも試してみます。

Make An Open World Map in 20 Mins | Unreal Engine 5 [5]に関して言えば、先週は全部やると言っていましたが、

Landmassの部分をやるだけで十分な気がしています。

そこだけやります。

6.2 Landmassについての検証

Make An Open World Map in 20 Mins | Unreal Engine 5 [5]をすこしだけやる。>

そうだ。思い出しました。

Smart Poly氏のLandmassのTutorialとMR3D-DevのTutorialはLandmassの値の調整する順番が全く違っていて、Smart Poly氏のやり方の方が実践的な気がしたんです。それで今週は、Smart Poly氏のLandmassのTutorialを勉強する事にしたんです。

以下にMake An Open World Map in 20 Mins | Unreal Engine 5 [5]のやり方を示します。

先週の以下の部分の続きから行います。

Geometryを変化する前にFalloffのCap ShapeにCheckをいれて三角を平らにします。

その後でGeometryを変形します。

こんな感じです。

Curl Noizeを変更します。

結果です。

Terracingの調節をします。

これは平らな地面を少しだけゆがめるのが目的だそうです。

結果です。

良く分かりません。

Terracingの本来の意味も知りません。

調べます。

Googleで検索したら以下の解説が出て来ました。

農業のために元々の地形を改良する事をTerracingと呼ぶみたいです。

TerracingのAlphaの値を増やすと、平らな部分が増えるそうです。

あ、やっと意味がわかりました。

Displacementの値を変更します。

結果です。

Terracingで平らになった場所が少しだけデコボコになりました。

最後に島の崖の角度を調節します。

FalloffのFalloff Angleで調節します。

崖をなだらかにしてみました。

この後、Tutorialでは海の追加の仕方を解説していますが、この辺はまたの機会に勉強します。

これでLandmassを使用してのLandscapeが完成しました。

<Landmassで作成したLandscapeのHeight MapをExportしてみる>

取りあえず、以下の方法でHeight MapをExportしてみました。

結果です。

うーん。駄目みたいです。

<LandmassのBPの実装をみる>

custombrush_landmassを検索しましたが見つかりません。UE5でUE4における

がどこにあるのか分かりません。

調べたらこの右上のSettingの中にあるそうです。

ありました。

Plug-inの中の以下の場所に

がありその中に

CustomBursh_Landmassがありました。

中を見てみます。

Event Graphです。

うーん。今回はパス。

でもこれを理解出来れば、山だけじゃなくて色々な地形を生成するBPが作成出来る訳です。

勉強する価値がある箇所ではあります。

ここに紹介されている5つのBPを勉強したらどうやってLandmass用のBPを作成すべきなのかを理解出来そうではあります。

でも今回のLandmassの勉強はこの位にしておきます。

6.3 Virtual Textureについての勉強

先週、GDi4Kの紹介の部分で

と述べましたが、気になってVirtual Textureがどんな技術なのか一寸だけ調べました。そしたらこれは絶対勉強しとかないといけないものでした。

のでVirtual Textureの勉強をします。

何故かUnreal SenseiのHow to Blend Objects with Your Landscape - UE4 Runtime Virtual Texturing (RVT) Tutorial [6] がお勧めで一番最初に出て来たのでこれで勉強します。

6.4 How to Blend Objects with Your Landscape - UE4 Runtime Virtual Texturing (RVT) Tutorial [6]を軽くみる

Virtual Textureが何であるかを簡単に言うと、以下の様な不自然なLandscapeとStatic meshのつなぎ目が

以下の様にStatic meshの一部がLandscapeのMaterialをProjectしたものとBlendして

はっきりしなくなるものでした。

Tutorialが長い(32分)もあるので今週は、内容だけまとめて実際に試すのは来週にします。

<Set Up

Set UpではどうやってこのEnvironmentを作成したかの説明がされています。

以下のFreeのEnvironmentを使用したそうです。

まずVirtual Textureを使用するためにはProject SettingのEnable virtual Texture SupportにCheckを入れます。

今気が付いたんですが、このTutorial、UE4を使用していますね。

Runtime Virtual Texture Classを以下の場所から選択して

新しいクラスを2個作成します。VT_HeightとVT_Matとそれぞれ名付けます。

VT_Heightの方を開き、以下に示したVirtual Texture ContentにWorld Heightをセットします。

こんな風にです。

今度はVT_HeightとVT_Mat、両方を開きSizeを10に変更します。

今度はこのVirtual Textureを適応する範囲をLevel上で指定します。

Runtime Virtual Texture Volumeを

Level上に配置します。

UEが自動でRuntime Virtual Texture Volumeの範囲を指定する事も出来ると説明していますが、具体的な方法が説明されなかったです。後でするんでしょうか?

Runtime Virtual Texture VolumeのVirtual TextureにVT_Heightを指定します。

ここで、UEが自動でRuntime Virtual Texture Volumeの範囲を指定する方法が説明されました。

自動とは言っても結構複雑です。

まずRuntime Virtual Texture VolumeのBound Align Actorのスポイトを選択します。

そしてLandscapeを選択します。

そしてSet BoundsのSet BoundsをClickします。

するとLandscape全体がRuntime Virtual Texture Volumeの境界内になります。

今度は、VT_Mat 用のRuntime Virtual Texture Volumeを作成します。前に作成したRuntime Virtual Texture VolumeをDuplicateして

Virtual TextureにVT_Matをセットします。

これでSet upは終わりだそうです。

<Capturing the Landscape Material

今度は、UEに何をCaptureするのかを教えるそうです。

今一、何を言っているのか分かりません。がやっている内に分かるでしょう。やって行きます。

Landscapeに使用されているMaterialを開きました。

Landscape用のMaterialの実装を変更する必要があるみたいですね。

Runtime Virtual Texture Output ノードを追加しました。

それぞれの値をMaterialからパスします。

World Height に関しては以下の方法でパスします。

しかしこれではNormal mapがTangent Spaceのままパスされてしまっています。

Transform Vectorノードを追加してそこを直します。

Normal Mapの座標がどのSpaceの物なのか、Ben Cloward先生のNormal MapのTri Planar Projectionで散々勉強したので、ここでいきなりNormal Mapの座標をTangent SpaceからWorld Spaceに変更しないといけないと言われても直ぐに理解出来ますが、Ben Cloward先生のNormal MapのTri Planar Projectionを勉強する前だったら、何を言っているのか訳わからんかったでしょうね。

次に、作成した2つのVirtual TextureがこのLandscape用のMaterialのDataを受け取れるようにします。

Landscapeを選択してDraw in Virtual Textures にVT_HeightとVT_Matを追加します。

以下の倒木にVirtual Textureを適応します。

まず、倒木に使用されているMaterialを開きます。

Blend Material Attributesノードを使用して

このMaterialとVirtual TextureをBlendします。

<Add Height Information

まずAlphaの値から計算します。

当然、Blendする割合はLandscapeの高さによって変わって来ます。

よってまずLandscapeの高さの情報を得る必要があります。

Runtime Virtual Texture Sample Parameterノードを選択します。

名前をVT_Heightにします。

後でこのNodeにVT_Heightをセットするみたいですね。

World Positionの値からVT_HeightのWorld Heightの値を引きます。

これは単純にこの倒木の地面からの高さを計算しているだけですね。

World Positionは倒木に貼ってあるMaterialのそれぞれのPixelの位置を返すはずなので、Pixel毎の高さが計算されるはずです。

Level上に配置されているStatic MeshのScaleはバラバラなのでそれを考慮する必要があります。

以下の計算を追加します。

これを追加する事で何で倒木の大きさを無視できるのか分かりません。

来週、実装する時に確認します。

今度はObject BoundのZ軸の値にInputされた値を掛けています。Inputされた値は、Virtual Blend Heightと名付けられています。

その結果を最初のAddの結果から引いています。

この部分は実装する時に考えます。

恐らくこれでObjectの高さに対してのBlendする割合みたいなのを計算しているんだと思います。

Falloffの計算を追加します。

ここだけは理解出来ますね。Blendしている割合の幅を大きくしたり短くしてる訳です。

最後にSaturateします。

この部分の実装だけつないでParameterをいじるとどう変わるのかについて解説しています。

これも来週、実装した時に確認します。この結果と先程の計算の実装があればどうしてこの計算でこのような事が出来るのか理解出来るはずです。来週がんばります。

最後にこの計算結果をAlphaに繋ぎます。

<Add Material Information

今度はLandscapeのMaterialの情報を得るための実装を追加します。

Height の情報を得た時と同じようにRuntime Virtual Texture Sample Parameterノードを追加します。

以下のように実装して

このNodeはParameterなのでMaterial内から使用するVirtual Textureをセットします。

するとこんな結果になります。

テカテカすぎます。Roughnessの値がないからだそうです。

Runtime Virtual Texture Sample ParameterノードのVirtual Texture ContentにBase Color、Normal、Roughness、Specularを選択します。

結果です。

テカテカが無くなりました。

しかし今度は以下の赤線で囲った部分のProjectionが変です。

これはTutorialによるとNormal Mapが正しく適応されていないからだそうです。

それを直します。

何と、Material側のNormal MapをWorld Spaceに変換するそうです。この理屈は良く分かりません。これも来週、検討します。

以下の方法で変換しました。

そしてVirtual Textureの計算結果をA、Materialの計算結果をB、Virtual TextureのHeightの結果をAlphaに繋ぎます。

更に、その後でNormal Mapの座標軸をWorld SpaceからTangent Spaceに戻します。

あるいはResult Nodeの以下の部分のCheckを外しても同様の事が出来るそうです。

結果です。

うーん。

この計算方法に文句はないですが、これが以下の部分の歪みを消してるのかどうかは分からんですね。

この歪みはNormal MapがWorld SpaceだからじゃなくてTri Planer Projectionから生じる歪みでしょう。

Ben Cloward 先生のNormal MapのTri Planar Projectionを使用しないとこの歪みは消えないと思います。

ここは来週よく確認しましょう。

<Remove Texture Stretching

と思ったらここから以下のTextureのStretchを取るそうです。

うん。やっぱしTextureがStretchされています。

まずTutorialの説明を理解しましょう。

以下の実装を追加しています。

この結果にOne minusしたモノを

Alphaに繋いでいます。

その結果、

結果です。

確かにTextureのStretchが無くなっています。

うーん。

以下の部分の計算が何を計算しているのか。

これも来週検討します。

この後は、この実装をMaterial Function化してどのStatic MeshのMaterialにも簡単に実装出来るようにするための説明になりますのでここまでて一端中止します。

ここまでの実装を来週やります。

今週、訳わからん計算をしている箇所は、来週じっくり検討する事にします。

7.Gaeaの勉強

7.1 Gaea Beginner Tutorial Series : Part 1 – Interface [7]の続きを勉強します。

先週はNode Settingについて勉強したので、今週はPropertiesについて勉強します。

<Properties

MountainのPropertiesを示しています。

三本線をClickすると以下の機能が使用出来ます。

<<Reset Node to Defaults>>

Reset Node to DefaultsでDefaultの設定に戻ります。

<<Toggle Auto Apply>>

次のToggle Auto Applyは

のような複雑な計算をするnode専用です。

これらの複雑な計算をするNodeはPropertiesの値を変えても直ぐに変化せず以下のApply Changesボタンを押して初めてPropertiesの変化が適応されます。

正しApply Changeのとなりになる錠のボタンを押すと、Propertiesの値を変えると直ぐに変化が適応されます。

この状態をToggleするのが

です。

<<Revert node>>

NodeをClickして選択してPropertiesを色々弄って変更したとします。

その結果、弄る前の方が良かった。となった時に、NodeをClickする前の状態に戻すのがこのRevert nodeです。

これはNodeをClickする前の状態に戻すのであってDefault値に戻すのではありません。

<<Barの操作方法について>>

数字の部分をClickして値を直接入力したり、Barを弄って値を上下させる事は知っています。

しかしBarを右Clickすると以下ののButton群が表示されて細かい操作が出来る事は知らなかったです。

CursorをButtonに重ねるとそのButtonの機能についての説明が表示されます。

表示される値は常に整数ですが、実際の値は小数点である場合があります。

上記の例だと、実際の値は44.6かもしれませんし45.2かもしれません。

8.雪山のMapの作成

今週は、足跡のEffectを作成します。

Substance Designerを使用しないでも作成出来るMatt Aspland氏のDynamic Footprint System Part 1/2 - Unreal Engine 4 Tutorial [8] を勉強します。

8.1 Dynamic Footprint System Part 1/2 - Unreal Engine 4 Tutorial [8]を勉強する

いきなり実装から始めます。先週、軽く動画を見たのでいきなり初めても多分、大丈夫でしょう。

<Creating The Materials

まずFootprintのImageをTutorialで指定している箇所からDownloadしました。

JpegをUEにImportしたのは初めてですが、普通に出来ました。

Textureを開いてChroma Key TextureにCheckを入れます。

更に、Chroma Key ColorにFootprintの背景の色をセットします。

するとFootprintのImageの背景が透明になりました。

ふーん。

こういう機能があるんですね。初めて知りました。

こういうのがTutorialで勉強する醍醐味ですね。人から学ばなかったら絶対にこんな機能がある事、気が付かないです。

これらのTextureからMaterialを作成します。

草の上の足跡を作成するためのMaterialなのでFootprintLG_MとFootprintRG_Mと名付けました。

Materialを開き、Result Nodeを選択します。

Material DomainにDeferred Decal、Blend ModeにTranslucentをセットします。

Deferred Decalを使うのはほとんど初めてです。

まだUnreal Engineを触って間もない頃、「マテリアルデザイン入門」を読んだときに一回位作成しただけです。その時はMaterialが何なのか全く理解していなかったので、あんまり勉強にならなかった記憶があります。

今、「マテリアルデザイン入門」のDecalの箇所を軽く読み返しましたが、特に理解出来ない所はなかったです。

ので、このままやって行きます。

Materialの実装は以下のようです。

両足分のMaterialを作成します。

更に雪用の足跡のためのMaterialも作成します。

単に色を変えただけでした。今は真っ白にしていますが灰色が良いかもしれません。その辺は後で調整します。

これでMaterialの作成は終わりです。

<Creating the Decals

まずActor Classから新しいClassを作成します。名前はFootprint_Rとします。

中を開いてDecalを追加します。

追加したDecalを以下の設定で回転させます。

Xの値はこのTextureに対応した値で、特に一般性はないそうです。Yは必ず-90にしないと駄目だそうです。

この辺の値の設定はDecalを使用する人には常識っぽいですね。

更に、Decal Materialに先程作成したMaterialをセットします。

次にFade Start Delayに5.0をセットします。

これはこのDecalが消え始めるのに5.0秒かかると言う事みたいです。

Fade Durationも5.0にセットします。

これは完全に消えるのに更に5.0秒かかると言う意味でしょうか。

そういう意味にも見えますし違う様にも見えます。

後で確認します。

次に新しい変数を追加します。タイプはMaterialです。

Default値にはFootprintRG_Mをセットします。

同様に雪のMaterial用の変数も作成します。

やり方は草の場合と一緒です。

同様のやり方で左の足跡用のActorを作成します。

<<Where to Spawn Footprints>>

今度はThird Person Characterに先程作成したActorを追加します。

まずPlaneを追加します。

名前をFoot_Lと変更して、Parent SocketにMeshのfoot_lをセットします。

これ、当然ですがFoot_LはMeshの子でないと出来ません。

以下の様に配置しました。

このPlaneは位置の習得に使用するのが目的なので中心が左足の中心に来るように設置します。

Planeのサイズは使用しないそうです。

同様のやり方で右足用のPlaneも作成します。

これらのPlaneはCollusionがあっては困るので以下の設定部分を変更します。

Generate Overlap EventsのCheckは外します。

Can Character Step Up OnはNoにセットします。

当然、Collision PresetsはNo Collisionにします。

今度は影の設定です。

勿論、影が有ったら困ります。Cast ShadowのOffにします。

最後にHidden in GameにCheckを入れます。

これでこのPlaneはPlayerから存在が知られる事は無くなりました。

<<When to Spawn Footprints>>

ここはAnimationを使う所ですね。Animationはほとんど勉強した事がないので、理解出来るか不安です。

TutorialではThird Person Runでやり方を説明するそうです。

このThird Personが走っているAnimationにNotifyを追加するそうです。

右足が地面に着いた所でNotifyを追加しました。

最終的には今作成中のRPGの雪山Mapで使用する予定なのでRPGと同じ4.24で作成しています。

ので画面自体がTutorialと少し違っています。

以下のが私の画面です。

こっちがTutorialの画面です。

しかしやっている事は同じはずです。そう信じて先に進みます。

反対の足の分のセットもしました。

これでPart1は終わりでした。

Part 2は来週やります。

Dynamic Footprint System Part 2/2 - Unreal Engine 4 Tutorial [9]はここにありました。何故か、お勧めで出て来ませんでした。来週、Tutorialを探すので手間取るのは嫌なので、一応ここに記録しておきます。

8.2 Dynamic Footprint System Part 1/2 - Unreal Engine 4 Tutorial [8]を勉強した感想

Matt Aspland氏のTutorialで勉強するのは2回目ですが、どっちのTutorialも分かり易かったです。

今週の勉強は特に分からない所は無かったです。Animationの設定部分は何をやっているのかあんまり理解出来ませんでしたが、一応、Tutorialと同じに出来たはずです。Animationは後でしっかり勉強します。

このTutorialに対する評価は来週、Part 2 をやった後じゃないと、分からないですね。その時に改めて評価します。

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

今週はこれから、改善したい点について検証します。

9.1 改善したい点について

<UI

まずUIですね。

もう一寸、中世のヨーロッパ感のあるUIにしたいです。

<戦闘場>

次に戦闘場をもっと文化を感じる物にしたいです。古代ローマのコロシアムでも良いですし、遊戯王カードのバトルシステムみたいな感じでも良いです。

<Animation

Monsterの攻撃にAnimationを追加します。

それぞれのMonsterが攻撃する時はAnimationが流れるようにします。

<Camera

Cameraが適所に配置されてMonsterが攻撃する時は、そのカメラが攻撃しているMonsterを写すようにします。

<音>

現状、音が全くないです。効果音を追加します。

更にBackground Musicも欲しいです。

<Effect

Monsterが攻撃する時は、Niagaraで派手なEffectを追加したいです。

<Story

若干の物語性も追加したいです。

<空>

空が殺風景過ぎます。雲を追加して嵐とまでは行かないにしても、今の殺風景な空は変更します。

<Main Menuの作成>

UIとも被っていますが、Main MenuがないとGameの始めが分かりません。

この位ですかね。

それぞれについてもう少し検証していきます。

9.2 UIについての検証

UIは統一した物を最初に作成しておかないと後で訳わからなくなります。

何を作成しないといけないのかをまず整理しておきます。

確かUIをまとめたサイトが有ったはずです。

それから調べます。

結構ありました。

Googleの一番上に出て来たサイトが見やすいのでこのサイトを見ながら、必要なUIを調べます。

Interface In Game [10]と言うサイトです。

このサイトのScreen shotの所にElementsというUIをタイプ毎に分類したコーナーがあります。

これを見ればどんなUIを作成する必要があるのか大体想像付きます。

<<Start Screen>>

まずStart Screenです。

以下の様な感じでStart Screenが紹介されています。

結構、見て驚いた事を記録しておきます。

  • Start ScreenにはStart ボタンしかないのがほとんどでした。Menu画面へはどう行くんでしょうか?
  • 映像で始まるのがほとんど
  • 絵と文字でどんなGameなのか一目瞭然。

Start Screenを見た第一印象は、やっぱりUIはDesignerの牙城だ。です。

UIのProgrammingは簡単ですし、少し勉強すればProgrammingの技量で差をつけるのは難しいでしょう。その点、Designは無限に差を付けられます。

<<Dialogue>>

セリフや、会話を表すUIですが、ナレーションは別のUIを作成すべきなのでしょうか?

今作成中のRPGはこのDialogueを最初に考えなかったので、Dialogue用のUIが3つも存在しています。

  • 店で買い物をする時のUI
  • NPCとの会話をする時のUI
  • 戦闘中のUI

です。

こういう失敗は避けたいです。

DialogueのUIの種類は沢山ありましたが、ほとんどの例で以下の3つの要素がありました。

  • セリフを表示するBox
  • そのセリフを言っている人物の名前を表示しているBox
  • その人物のイラスト

こんな感じです。

吹き出し型もありました。

現在の戦闘中のUIは以下の様になっています。

このDialogueの部分を上記のDialogueの特徴を追加して作成してみます。

あれ対戦相手の攻撃時のUIは前のままでした。

こっちを先に直します。

9.3 対戦相手の攻撃時のUIを直す

出来ました。

実際のPlay画面です。

まあ、良いでしょう。

9.4 UIについてのまとめ

UIは今週終わらせてしまおうと思ったんですが、とんでもない量を勉強しないといけない事が分かりました。のでしばらくUIの作成をする事にします。

来週はこのミニゲームを完成するために必要なUIを決定します。

そしてそれぞれのUIをどう作るべきかをInterface In Game [10]を参考にして検証します。

10.Blenderの勉強

今週も復習だけやって終わりにします。時間が無い!

Selection Method

全部復習しました。

2022-02-14Blogの復習>

複数の面を選択してIを押すと面全体に対してInsectするはずですが、今回はそれぞれの面に対してInsetしました。Iを2回押した時も、それぞれの面に対してInsetしました。

それ以外は普通に出来ました。

2022-02-21Blogの復習>

今回はBarrelが上手く行きました。

Pointは4つのEdgeを同時に選択する事でした。

後は、それなりには出来ました。

2022-02-28Blogの復習>

今週作成した木です。

中々上手くなってきています。

2022-04-03Blogの復習>

作成した木で色々試してみました。

Loop CutやKnifeも試しました。

2022-04-25Blogの復習>

Flattenは普通に出来るようになりました。

S+Y+0で平らにしました。

見やすいように色付けしました。

選択した面の平均のNormal に対してFlattenした場合です。S + Zを押した後に0を押して平らにしました。

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

11.まとめと感想

やりたい事はいっぱいありますが、時間とエネルギーが足りません。必要なものと成果の高い物を選択してそこをやるしかありません。

12.参照(Reference

[1] CGHOW. (2022, April 11). Yin Yang FX in UE5 Niagara Tutorial | Download Files [Video]. YouTube. https://www.youtube.com/watch?v=vPzLeEqNPi8

[2] Epic Games. (n.d.). Material Blend Modes. Unreal Engine Documentation. Retrieved May 8, 2022, from https://docs.unrealengine.com/5.0/en-US/material-blend-modes-in-unreal-engine/

[3] UnrealCG. (2020, June 25). Toon Shader & Custom Shadow - UE4 Postprocess Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=mx_AvrZK3TA

[4] Cloward, B. [Ben Cloward]. (2021b, December 23). Triplanar Projection - Shader Graph Basics - Episode 28 [Video]. YouTube. https://www.youtube.com/watch?v=sjpszGetM40&list=PL78XDi0TS4lEBWa2Hpzg2SRC5njCcKydl&index=28

[5] Smart Poly. (2022, April 21). Make An Open World Map in 20 Mins | Unreal Engine 5 [Video]. YouTube. https://www.youtube.com/watch?v=RCENB-s5POA

[6] Unreal Sensei. (2021, April 23). How to Blend Objects with Your Landscape - UE4 Runtime Virtual Texturing (RVT) Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=xYuIDFzKaF4

[7] Klaus [klaus]. (2022, January 12). Gaea Beginner Tutorial Series : Part 1 - Interface [Video]. YouTube. https://www.youtube.com/watch?v=H-vTeYYHJPM&list=PLyNtvXvNIFMMHnW1_-hXO3RNPp_Z5CExF&index=1

[8] Aspland, M. [Matt Aspland]. (2020, December 18). Dynamic Footprint System Part 1/2 - Unreal Engine 4 Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=VJstjFMVbZw

[9] Aspland, M. [Matt Aspland]. (2020, December 19). Dynamic Footprint System Part 2/2 - Unreal Engine 4 Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=9HlZ-6aFk1I

[10] Jarolimek, M., Sodermanns, M., Kraj, N., Sheldon-Hicks, D., Vasquez, E., Jr, Robinson, S., Murray, H., Santo, A. L., & Game, I. I. (2022, April 10). Interface In Game | Collection of video games UI | Screenshots and videos. Interface In Game. Retrieved May 8, 2022, from https://interfaceingame.com/

「Unreal Engine 4.xを使用してRPGを作成する」の足りない部分を作成する RPGのStoryの作成と推敲 2

<前文>

<世界はどうなるのか?>

残念ながらRussiaのUkraineへの侵略はRussiaの勝利で終わる可能性が出て来ました。

そしてRussiaが勝利した時、侵略したもん勝ちを世界が認めた訳で、中国が台湾への侵攻をしない理由も無くなります。中国が台湾に侵攻するのも時間の問題でしょう。

何で中国が台湾に侵略するんだ。と怒る人もいるかもしれませんが、中国からすれば台湾企業の持つ最先端の半導体の製造技術をタダで手に入れられる訳で侵攻する価値は十分あります。

韓国がこれから中国やロシア、日本やアメリカと渡り合う為には核兵器が必要だけど、絶対にアメリカが開発させてくれないので、北朝鮮に開発させて、統一朝鮮に戻った時に、アジアにおける核保有の大国として存在しようとするのと一緒です。台湾に開発させて中国に取り組む訳です。

そして私が危惧しているのはその時にRussiaが北海道に侵略する事です。

これは私の100%想像ですがRussiaとUSには何か日本に関しての密約みたいなものがある気がします。その中にRussiaに対しては北海道を侵略した場合に限り日米安保の発動はしない。みたいな取り決めがあるような気がしています。何か北海道にだけ米軍基地がなくて三沢という本土の最北端にあえて基地があるのがオカシイく感じるんです。

で、Russiaが北海道に侵略した時に、日本って国は色んな意味で崩壊すると思うんです。

戦後日本は、アホになる事で庶民は幸せを手に入れられると言う幻想によって成り立っています。大ヒットしたマンガの主人公はおバカさんばかりです。真剣に自分の人生を考えてこのままじゃ駄目だ。何て考えるマンガやドラマそしてゲームの主人公は一人もいません。というかそう言う事を考えないでボっとしていると絶対ありえないLuckyが起きて成功したりする話ばっかしです。

これは、日本の支配階級が彼らの犯した戦争犯罪を日本人自らによって裁かれるのを恐れた結果、日本人に対してバカでいる事を望んだ結果だったのですが、その洗脳にあえて乗る事が日本の庶民にとっては正解だったってのもあります。

こういう戦後日本を支配した幻想も崩壊すると思います。

そして日本が崩壊した時に最も重要となる技術が2つあると私は思っています。それは英語とProgrammingです。英語も大学受験のテストが出来ると言うのでは無く、聞き取れる、喋れる、書ける。と言った実践的な英語です。Programmingはまあ何でも出来れば良いと思います。

何故、この二つの技術が最も大切になるかというと、この2つの技術は個人の能力と直結しているからと社会の変化に影響されにくいからです。

数学がどんなに出来る人がいてもその人個人で何かが達成出来るのかと言うと結構考えさせられると思います。電気や機械なども同じです。どんなに個人が凄くでもその人単独で出来る事は限られています。巨大な組織の歯車として役に立つしか無くなります。そしてその組織の中に一個でも壊れたパーツがあったらその壊れたパーツのせいで成果は0になってしまいます。

法律や会計などの文系の専門職は、個人の能力だけで出来ますが、社会が混乱期に突入したら法律や会計なんて誰も守らなくなる可能性は高いです。戦後の混乱期に誰も法律守らなかったのと一緒です。

英語とProgrammingはかなりの部分が個人の能力だけで出来るんです。その人が優秀だったら良い比率が他の専門職に比べてかなり高いです。しかも社会が混乱しても影響は少ないです。社会が混乱したからと言ってその社会を構成する人達の話す言語まで変化する事はないでしょう。Programming 言語だって同じです。むしろ社会が混乱している方が新しい発展が生まれないのでProgramming言語なんて安定するかもしれません。

なので、その時に備えて英語とProgrammingは全ての日本人がある程度は勉強していた方が良い気がしています。

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

<本文>

1.今週の予定

今週も先週と同じ予定でやって行きます。

  • Niagara: CGHOW氏のTutorialをやる
  • Materialの勉強
  • RPGStoryの改善
  • Map1Bugの直し
  • Open Worldの検証
  • Gaeaの勉強
  • 雪山のMapの作成
  • Game DesignポケモンHxHの念能力( 戦闘システムの作成)
  • Blenderの勉強

2.Niagara: CGHOW氏のTutorialをやる

今週は特にやりたい事が思いつかないので、先週の続きでUE5のNiagaraに慣れる意味でYin Yang FX in UE5 Niagara Tutorial [1]をやる事にします。

2.1 Yin Yang FX in UE5 Niagara Tutorial [1] を軽く見る

思ったよりも複雑でした。Scratch Moduleを使用しています。

以下にTutorialの内容をまとめます。

<Textureの作成>

普通の太極図ですが

Alphaが以下のような設定になっています。

うーん。

良く考えたらこれって普通ですね。

Niagaraの作成>

今回は、Materialを作成する前にNiagara Systemを作成しています。いつもの通りにFountain Emitterを追加します。

更に要らないModuleを消して以下の様にしました。

うーん。

良く考えたらこれって普通ですね。

Niagaraの作成>

今回は、Materialを作成する前にNiagara Systemを作成しています。いつもの通りにFountain Emitterを追加します。

更に要らないModuleを消して以下の様にしました。

ここまでは全く一緒です。

次にParticle Spawn SectionのShape Location Moduleの

Shape Primitive にBox/Planeをセットします。

するとShape Location Moduleの表示がSphereからBox/Planeに変化します。

これカッコイイですね。

見やすくて便利であるだけじゃなくて、何か中二病をくすぐられる格好良さがあります。

今度はPropertiesから

Sim Targetの設定をGPUに変更します。

更にLocal Spaceにチェックを入れます。

このLocal SpaceにCheckを入れるのと入れないのの違いって好きな場所にEffectを生成出来るって理解しているんですが、まだ確認していません。

この確認をする事にします。

この後、Particle Spawn SectionのInitial Particle Moduleの値を微調整して以下の様にします。

これに太極図のTextureを使って太極の形に切り抜きます。

<Scratch Pad Moduleの実装>

Particle Update SectionにScratch Pad Moduleを追加します。

Scratch Pad Moduleを開いてTextureの形にParticleを切り抜く実装を作成します。

まず切り抜く形を示すTextureを読み込むためにMap Get ModuleにInput New Texture Sampleを追加します。

名前をTSに変更します。

そう言えば先週のTutorialの勉強でこれと全く同じ事をしていましたね。

でも先週はEmitter Update SectionにTSしています。

うーん。

こういう基本をしっかり理解して覚えて行かないと、沢山勉強したけど何も身に付かない事態になってしまいますね。

先週の勉強でも、毛糸の質感を出したEffectの作成出来ました。終。ではなくて、その中で「Scratch Pad Module内で望みのTextureを読み込む技術を学びました。」とまとめるべきでした。

これをしないと永遠に自分でEffectを自作する事が出来なくなってしまいます。

当然、Sample Texture 2D Moduleに繋げます。

結果をParticleのColorに繋げています。

これUV値を指定していないので全部のParticleがUV値が(0,0)の値の色になるだけじゃないんでしょうか?

と思ったらしっかり次の工程でMap GetにUVの値を指定するためにInput New Positionを追加しました。

更にサイズが幾つになるのかの指定が必要とInput Scaleを追加してその値を掛けていました。

TutorialではこれはTilingと一緒と言っています。

何もかけなくても1倍になる気はします。そして1倍さえ出来れば問題ない気もしています。ここは実際に実装を作成した時に確認します。

今回はEmitter Update SectionでTextureをセットするのではなく直接Scratch Module内でTextureをセットしています。

これだとParticleをUpdateするたびに新しいTextureをセットし直している事になるのか?

良く分かりませんね。

New Positionでは無くてPositionでした。変えました。

サイズを0.005にセットして1倍の大きさで表示します。

結果です。

位置がずれています。Offsetを使用して位置を修正します。

まずOffsetを実装します。

Offsetに0.5をセットします。

結果です。

Textureに太極図をセットします。

結果です。

黒い部分が消えています。

TutorialによるとRender SectionのSprite Renderer Moduleで使用しているmaterialがAdditiveにセットされているからだそうです。

ので新しいMaterialを作成します。

<Materialの作成>

以下の様に設定しました。

Blend ModeにセットされていたOpaqueがAdditiveな計算をしていたんでしょうか?

そんな気がします。

Translucentだと掛け算になるんでしょうか?

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

うーん。この辺は実際にRender SectionのSprite Renderer Moduleで使用されていたmaterialを見ないと何故、Textureの黒が見えないのかは分かりませんね。実装する時に確認します。

<Scratch Pad Moduleの実装の続き>

新しく作成したMaterialをRender SectionのSprite Renderer ModuleのMaterialにセットします。

結果です。

Emitter Update SectionのSpawn Rate ModuleのSpawn Rateの値を増やします。

結果です。

太極図になりました。

ただし、Particle Spawn Sectionのinitialize Particle ModuleのColorの値を変化させても

色は変わりません。

これを直すためにMap GetにParticle Colorを追加してその値を掛ける事にします。

白い部分は掛けた色になり、黒い部分は黒いままです。

結果です。

うーん。黒い部分はずっと黒いのは何か納得いかないです。

<太極図を回転させる>

Particle Update SectionにVortex Velocity Moduleを追加します。

全く回転しません。

これを直します。

Emitter Update SectionのSpawn Rate ModuleをSpawn Burst Instantaneous Moduleと交換します。

そしてEmitter Update SectionのEmitter State Moduleの

Loop BehaviorをOnceに変更して

Particle Update SectionのParticle State Moduleの

Kill Particle When Lifetime Has ElapsedのCheckを外します。

そしてこれをRotateさせます。

そのためのまた別のScratch Pad Moduleを作成します。

<Scratch Pad Module 二個目>

Map GetにInput New Positionを追加します。

このNew PositionとPositionの違いが分かりません。それぞれのParticle の位置はPositionが管理してるはずです。New Positionは何を管理してるんでしょう?

これも実装する時に確認します。

次にNew PositionからPosition to Vectorノードを使用してVectorに変換しています。

Positionは厳密に言えばVectorじゃないから、Vectorと計算する時にはVectorに変換しないといけないのでしょうか?

無理やりPositionとVectorを掛けたらとうなるんでしょうか?

これも後で試してみます。

Map GetノードにFloatタイプのInput、X,Y,Zを追加します。その値を以下に示した様にEuler to Quaternionノードに追加します。

そのEuler to QuaternionノードとPosition to Vectorノードの結果をMultiply Vector with Quaternionノードに追加します。

うーん。

成程。これで回転させる訳ですか。

最後にここで計算した値をPositionにパスするなら納得ですが、どうなんでしょう。

続きを見て行きます。

やっぱりそうでした。しかもVectorからPositionに変換して値をパスしています。

この厳密さは嫌いじゃないです。

大学の研究室に最初に入った時にVectorクラスとPositionクラスを別々に作成したら中身が全く同じで、他の人は同じクラスでPositionとVectorを扱うのかそれとも別なクラスで扱っているのか聞きまくった記憶が蘇りました。

New Positionは間違いでPositionが正しいと直していました。

これで分からない箇所は無くなりました。

ここで学んだ新しいTechniqueはそれぞれのParticleを回転させたいならQuaternion関連のノードを使用しろと言う事です。

太極図を回転させたいのでXにMultiply Floatを追加してそのAにTimeをセットします。

このDynamic Inputの設定も覚えるPointの一つですね。

時間に沿ってModuleの設定値を変化させたいときはTimeをセットする。と覚えておく事にします。

結果です。

回転はしていますが、滅茶苦茶になってしまいました。

この原因はTextureのLocationが違うからだそうです。

これを直すにはTexture Node(一番最初に作成したScratch Moduleの事です。)をParticle Spawn Sectionに移します。

結果です。

綺麗に回転しています。

<キラキラを追加>

まずEmitterをDuplicateします。

色々微調整しただけです。

その結果、

となりました。

<Levelに配置してみる>

このEffectをLevel上に配置してみます。

まず回転が速過ぎるのでそれを調節します。

次に太極図以外の場所に透明なParticleが生成されています。

これを消す事にします。

Particle Spawn SectionのTexture Module(一番最初に作成したScratch Module)を開き、Sample Texture 2DノードにBreak Vector 4ノードを繋げてW(alpha)の値を取り出します。

Map Set Moduleに新しく作成したParameter Particle MyAlphaにパスします。

そしてParticle Spawn SectionにKill Particle Moduleを追加します。

そしてKill Particle Moduleの設定を以下の様にします。

If(w ==0)

{

 Kill Particle

}

と言う意味ですね。

Set Bool by Float Comparisonは始めて見ました。

正直、この辺の設定はNiagaraに慣れないと望んだ実装を作成するのは難しいですね。コードを自分で書いちゃった方が簡単な気もします。

2.2 Yin Yang FX in UE5 Niagara Tutorial [1] を実装する

それでは自分で実装してみます。

<Textureの作成>

これって全く普通の太極図ですのでその辺から取って来ます。

出来ました。

サイズを150x150 Pixelで作成したのでかなり荒いです。でもそれでも大丈夫だと思います。

Alphaの値です。

TutorialのTextureは穴が開いていますが、空いてない方が正しい太極図だと思うんでこっちでやって行きます。

Niagara Systemの作成>

要らないModuleを消します。

ここまではいつもの手順です。

Particle Spawn SectionのShape Location Moduleを

以下の設定に変更します。

GPUにしたりSpawn Rateを増やしたりしました。

ここでPropertiesのLocal について調べてます。

まずLocalにCheckを入れないでLevel上に配置してみます。

別に原点以外にも配置出来ますね。

うーん。Localにセットしないのとどう違うんだろうか?

お、分かりました。

Local にチェックを入れないと以下のようになります。

入れた場合はこうなります。

LocalにCheckが入っているとNiagara Systemそのものが移動した時に全部のParticleが一緒に移動してくれます。Checkが無い場合は既に生成されたParticleはその場に残ってしまいます。

分かってしまえば簡単ですね。

細かい設定をTutorial通りにしました。

<一個目のScratch Pad Moduleの実装>

Tutorial通りに作成しました。

Scaleに0.005をセットします。

結果です。

はい。Tutorialと全く同じ形になりました。

ここでTutorialではScratch ModuleであるTextureにOffsetを追加していますが、

Particle Spawn SectionのShape Location Moduleの

Plane Midpointの値を0,0に変更しても同じ結果になると思います。

ので試してみます。

結果です。

やっぱり出来ましたね。

今度は黒い部分を表示するためにMaterialを作成します。

<Materialの作成>

MaterialですがSpriteの元のMaterialの設定をまず見ましょう。

Blend Modeですがなんと

でした。

まさかそのものズバリのAdditiveがあるとは。OpaqueがAdditiveの計算をすると思っていました。Opaqueの計算方法が知りたいですね。Opaqueは全くBlendしないのかもしれませんね。

Materialを実装しました。

Radial Gradient Exponentialノードについては過去のBlogで散々勉強したので今回は無視します。

Render SectionのSprite Renderer ModuleのMaterialにこのMaterialをセットします。

結果です。

良い感じで出来て来ました。

Particle 数を増やしました。

何か私のはまぶしいです。

今度は色付けですね。

前節でまとめた通りに実装しました。

結果です。

むー。

色はついていますが明るすぎますね。

単純にParticle Spawn SectionのInitialize Particle ModuleのColorの値を暗い青に変更しました。

もうこれで良いです。

<太極図を回転させる>

まずTutorialではParticle Update SectionでVortex Velocity Moduleを使用しても太極図が回転しない事を示してますが、これって今作成したScratch ModuleがParticle Update Sectionにあるからな気がします。

一寸だけ試してみます。

Particle Update SectionにVortex Velocity Moduleをセットしてみます。

当然、先程作成したScratch ModuleであるTextureはParticle Spawn Sectionに移します。

回転しませんでした。

うーん。

これはあれだ。

Spawn RateでParticleが生成されてParticleが死んだりするからだ。

Emitter Update SectionのSpawn Rate Moduleを消して、Spawn Burst Instantaneous Modulを追加し、Emitter State ModuleのLoop Behavior をOnceに変更し、Particle Update SectionのParticle State ModuleのKill Particle When Lifetime Has ElapsedのCheckを外します。

結果です。

ほら。回転しています。

原点がずれていますね。

色々値を弄ったんですが望み角度で回転してくれません。

一端諦めてTutorial通りにやります。

回転用のScratch Moduleを追加します。

以下に実装を示します。

結果です。

これは原点の位置をずらす必要があります。

となると

結局この部分の設定をTutorial通りにする必要がありますね。

直しました。

結局、Scratch Moduleにoffsetを追加する必要がありました。

結果です。

一応回転はしていますね。

この条件でVortex Velocity Moduleを使用したら上手く回転すると思うんでもう一回試してみます。

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

結果です。

うーん。

これ見るとVortex Velocity Moduleは回転だけじゃない力が加わっていますね。

Vortex Velocity Moduleの実装は、後で考える事にして取りあえず今回のTutorialを最後までやる事にします。

<キラキラを追加>

追加しました。

前節ではDuplicateしたEmitterの設定を微調整しただけと書きましたが一個だけ新しい事をしていました。

それはScale Sprite Size Moduleの使用です。

こんな設定にしました。

Uniform Scale FactorにSineを使用しています。後は適当にTutorialを真似ました。

これはParticle のサイズをFlame毎に変形するModuleですね。

<Levelに配置してみる>

色々微調整して以下の様になりました。

が、原点でしかこの回転をしません。

この問題は自分で解決する事にします。後で検討します。

<太極図の外側に生成されている透明なParticleを消す>

もうTutorial通りに作成しました。

結果です。

消えていますね。

2.3 Yin Yang FX in UE5 Niagara Tutorial [1] のまとめ

今週のTutorialは思ったより難しかったです。来週、分からなかった事を検証します。

分からなかった事は、

  • Vortex Velocity Moduleの機能と実装について
  • 何故Effectを原点に置いたときだけ綺麗に回転するのか?

の2点です。

3.Materialの勉強

今週からUnreal CG 氏のToon Shader & Custom Shadow - UE4 Postprocess Tutorial [2]の実装をやって行きます。

どのVersionで実装するかですが、出来れば今作成しているRPGで使用したいので4.24にします。

後、Ben Cloward氏がUV の移動に関するTutorialを上げています。これは勉強しておきたいです。

もし時間が足りなかったらBlenderの勉強をなしにしてこっちをやります。

3.1 Toon Shader & Custom Shadow - UE4 Postprocess Tutorial [2]の実装

今週は影の部分を実装します。

まずPost Processに使用するMaterialを作成します。

当然、Post Processに使用するMaterialなのでMaterial DomainをPost Processに変更します。

これの違いが分かりません。

公式サイトのPost Process Materials [3] に以下の解説がありました。

ただDeferred Shadingの工程が良く分かっていないのでこの解説を読んでもピンと来ません。

調べたけどDeferred Shadingの工程をまとめた資料は見つかりませんでした。

どうやってこのBlendable Locationの値を選択してるのか、結局分からないじゃん。と思ったらUnreal CG氏がこのTutorial内で解説していました。Particle SystemにPost Processが作用して欲しい時にBefore Translucencyにするそうです。

はい。

しかし他の値を選択する時の条件は分かりません。

分からん所にいつまでも時間掛けていてもしょうがないです。

次に行きます。

次はこのMaterialをPost Processにセットします。

Tutorialでは既にPost ProcessがLevel上に配置されていました。

私の作成したLevelにはPost Processがないので

自分で配置しました。

そのPost Processに先程のMaterialをセットしました。

結果です。

次にLevel上に配置されているObjectに使用されているMaterialの解説をしています。

これも作ってしまいます。

ほぼそっくりに出来ました。

試しにLevel上に配置したStatic Meshに使用してみました。

まあ。こんなもんですか?

次にやっと今週の目的の影の作成になります。

まず先に実装を示します。

結果です。

それでは実装の内容を検証していきます。

これはRenderingされたImageをそのまま保持しているScene Textureだったはずです。

はい。

このImageに対してDesaturationします。

結果です。

凄い精密な白黒写真みたいになりました。

今度はScene TextureのBaseColorです。

こっちはin G Bufferと書かれています。Post Process Input 0はG Bufferに書かれていないんでしょうか?

こんなImageでした。

単なる白黒ですね。

このImageに対してDesaturationします。

結果です。

うーん。なにも変わっていませんね。

Input 0の結果をBase Colorで割ります。

結果です。

む。

これ影が無いです。ちょっとオカシイですね。正確な計算結果が表示されていない気がします。

Level上で確認したら影はありました。

以下の実装部は単なるIf節なので検証はスキップします。

今度はShadow以外の部分の色を元に戻します。

実装部です。最後のLerpのAlpha部分に先程までの実装部の計算結果が繋がっています。

結果です。

良い感じです。

実装部の検証をします。

まずは以下の部分からです。

これの良く分からない部分はLerpのAlphaの値が1にセットされている事です。

全部Bの値、つまりBase Colorになってしまうんでは。と言う事です。

確認します。

LerpのImageです。

Base ColorのImageです。

同じですね。

でもそれよりも大切な事に気が付きました。影が無いです。

次の実装部分ですが以下の様になっています。

これ0を掛けているので真っ黒になるだけですね。

その次の実装です。

Alphaには先程抽出した影がはいっています。値は0です。つまりAの値を返します。それ以外の部分は白です。つまりBの値を返します。Bには先程のBase Colorの値が入っています。

つまり影の部分は真っ黒、それ以外はBase Colorの色になるわけです。

うーん。納得しました。

当然ですが、Shadow Colorの値を黒から灰色にすれば影が薄くなります。

Toon Shaderの完成です。

一応、今週の予定はここまでだったんですが、影にTextureのImageを表示する所までやりたいので続きをやります。

<空の作成>

Parameter Nodeを表示する時にいつもConstant ノードを表示してそこからParameter Nodeにしていたんですが、もっと簡単な方法がないか調べたらありました。

これは覚えておく事にします。

空だけ抽出します。

まず実装部から作成します。

一体どうやってと思いますが、カメラからの距離が思いっきり遠い部分が空だ。という事が分かっていれば出来ます。

Scene Depth ノードを使用します。

公式のDocumentであるDepth Material Expressions [3]のScene Depthの項には以下の解説がされています。

ふーん。

画面に写っているのはPixelの部分だけなのであえてScene Depthを使用する必要もない気がしますが、何らかのメリットがあるんでしょうね。

結果です。

Distanceの値を3000にセットしたら以下のようになりました。

Distanceの値をもっと上げます。200000.0にしました。

はい。空だけ抽出出来ました。

空を黒く、それ以外を白くしたいので以下の様な実装に変更しました。

一応、結果も示しておきます。

この空の部分にPost Process Input 0、それ以外の部分に先程までの実装の値を表示させます。

Post Process Input 0をそのままつないだらErrorになってしまいました。Float4がFloat3に繋がっているみたいなMessageが表示されていました。のでMaskノードを追加しています。

そう言えば先週、このMask ノードは要らないんじゃないのか。と言いましたが要りました。

結果です。

<影にTextureを追加>

まず以下の実装を作成します。

ああ。World Aligned Textureノードがあったわ。

これの使い方を勉強しないといけなかったわ。

取りあえず、Pattern Size が100の時の結果です。

床は平らなので真っ黒になるか真っ白になるかしかないみたいですね。

影の部分にこのTextureを反映させるために以下のような繋ぎをします。

LerpのAlphaに先程の実装の値が来ています。

結果です。

やっぱり地面の影の部分にはTextureが投影されていませんね。

ここが間違っていました。

World Aligned TextureノードのXYZ TextureのR Valueをパスする必要がありました。

さっきのはXY TextureのR Valueをパスしていました。

結果です。

イイ感じです。

微調整しました。

実際のPlay画面です。

先週、付けた雪のEffectが発動していますね。

Third Person BPの影は抜いた方が良いですね。

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

3.2 UV Rotation - Shader Graph Basics - Episode 42 [6]を勉強する

軽く全部見ましたが、そんなに沢山勉強しないといけない感じではなさそうです。後半の木を揺らす実装はかなり実用性が高そうです。

兎に角やって行きます。

まずこのTutorialで実装する内容は以下のNodeと全く同じ機能なので実装そのものには価値はないそうです。

それそうだけとその理論を学ぶのが大切なんじゃね。と常々思っていますが、Ben Cloward先生も同じ様な事を言っています。

最初の実装です。

これは特に勉強する箇所はないですね。

2021-10-25のBlogで全く同じ内容について勉強しています。その辺のBlogでほとんど掘りつくしています。

Time ノードに変更してTextureを回転させています。

特に新しい技術と言う訳でもないで結果はスキップします。

後半は、ちょっと新しい実装があります。

まず回転ですが少しだけ違う回転をやります。

まずVector Length ノードを使用してTexCoord[0]のそれぞれの位置がどれくらい回転の中心から離れているかを計算します。

こういうの見るたびにどうやってこういう計算を思いついてくるのか不思議になります。

その結果をOne Minusした値をTimeに掛けます。

こうする事で回転の中心に近づくほど早く回転するようになります。

今度は木を揺らす回転を作成します。

Tutorialでは以下に示した木のTextureを使用していますが、似たようなTextureを探すのは面倒なのでGridのTextureで試します。

実装は以下のようにやっています。

まあ、Sineの式から考えればこれでゆらゆら揺れるのは当然ですね。

Graphを作ってて流石にこれは要らなかったなと思いましたが、作ってしまったので載せておきます。

3.3 World Aligned Textureノードについての勉強

World Aligned Textureノードは初めて使用したノードで機能をよく理解していません。のでここで勉強します。

Ben 先生のWorld-Aligned Textures - UE4 Materials 101 - Episode 22 [6] を見たらTri Planar Projection をやるNodeだと言っていました。

え。

今まで散々勉強したTri Planar ProjectionをするNodeだったようです。

それじゃTri Planar Projectionと比較してみましょう。

向かって右側がBen 先生のTutorialを見て作成したImproved Tri Planar Projectionです。向かって左側のはWorld Aligned Textureノードを使用したMaterialを使用しています。

World Aligned Textureノードを使用したMaterialの実装は以下に示します。

もうパッと見で分かりますが、World Aligned Textureノードの方はTextureの向きを直していません。裏返っています。

Blendの幅が大きいですね。

Blendの幅は以下に示した値を変化させる事で変化させられます。

World Aligned TextureノードはBlendの幅は調節出来ないのでしょうか?

World Aligned TextureノードをClickしたらなんと、実装が見れました。

これは来週、実際に読んでみる事にします。

4.RPGStoryの改善

Storyの改善ですが以下の手順でやって行く事にします。

まず全体のStoryを改善していきます。辻褄の合わない部分を直したり、登場人物の整理をしたりします。その際に前の2022-01-10のBlogで検証した隠れたThemeについての検証も追加します。

次に第一章のStoryを推敲します。

最後にその時に感じた大切な事、例えば隠れたThemeを深堀します。

4.1 全体のStoryの改善

今週は先週決めた内容に大きな矛盾がないかとかの確認をMainにやる事にします。

後、先週考えた

これらのCharacterをどう物語に組み込むのかについても考えましょう。

<第一章>

先週決めた第一章の内容は以下のようになっています。

まずゲームの世界を月想界、それぞれのMapの世界を星屑世界と名付けました。となると太陽界も欲しいですね。戦闘用のMapを太陽界と呼ぶ事にしますか。

天使や悪魔は太陽界の住人で、限定的にしか月想界の住人である人間との関係を持つ事が出来ません。

と言う事にします。

戦闘用のMapに配置されている石像達は悪魔に封印された天使と言う事にしましょう。

ここは第一章なんで、このGameの隠れたThemeをバッチリと示す必要があります。このGameの隠れたThemeをここで決めてしまいましょう。

このGameの隠れたThemeはアホでいる事が特であるという幻想との決別です。

今の世相にあっているでしょう。

アホとの決別ってアメリカだったら凄く簡単でキリスト教徒特有の洗脳からの開放をThemeにすれば良いんですが、日本は結構難しいですね。

<第二章>

これ読むと一章の最後で赤い切符を手に入れていますね。これ分かり易くて良いです。

それぞれの章の最後で新しい切符が手に入る事にします。

<第三章>

ここから本当のStoryが始まります。

先週は話を簡単にするためにドラゴンと呼びましたがここに7つの大罪をぶち込みましょう。太陽界の悪魔軍団から悪の祝福を受けた7人の人間です。彼の祝福は伝説の剣以外では傷つけられない体です。

賢者は12使徒の一人にしましょう。

12使徒は伝説の剣がこの世にない事を告げる代わりに、黄色の切符をPlayerに渡す所でこの章は終わりになります。

<第四章>

ここから新しい切符を得る話が無くなってしまいます。その代り伝説の剣を借りれるようにしたのでまあそれは良いでしょう。

七つの大罪の一人をこの章で倒す事にしましょう。

王様が与える試練は七つの大罪の一人の弱点を知っている12使徒を探す事にします。

<第五章>

ここは前半部分の最大の山場です。どうやって7つの大罪の一人を倒すのかについての掘り下げが必要ですね。

後は問題ないですね。

今回のゲームで制作するのはここまでとしましょう。

4.2 第一章の推敲

ゲームの世界を月想界、それぞれのMapの世界を星屑世界と呼ぶのは最初の村の住人の誰かに説明させましょう。

以下の情報は村人に会話させれば良いです。

第一章の話は以下のようになっています。

この後にもう一回Questを挟みましょう。

村長の娘が病気になってしまいます。

その病気を治す薬を持っているのは隣の世界に住む偏屈な老人だけです。その老人が住む世界は恐ろしいMonsterが生息していて普通の人が近づく事は出来ません。

Playerが操作するCharacterがMonsterを倒せる事を知った村長は、その薬を取って来てもらうようにPlayerにお願いします。

はい。

薬を取って来たPlayerは村長から赤い切符を貰います。

4.3 今週の深堀

12使徒は諸説あるそうです。レオナルド・ダ・ヴィンチによる「最後の晩餐」では

  1. バルトロマイ(ナタナエル)
  2. アルファイの子ヤコブ
  3. アンデレ
  4. ユダ
  5. シモン・ペトロ
  6. ヨハネ
  7. トマス
  8. ゼベダイの子ヤコブ
  9. フィリポ
  10. マタイ
  11. タダイ
  12. 熱心党のシモン

だそうです。

7大天使は

  1. ミカエル、
  2. ガブリエル、
  3. ラファエル、
  4. ウリエル

はほぼ共通で残りは本によって別々だそうです。

  1. ラグエル
  2. ゼラキエル
  3. ゼラキエル

7大悪魔は日本語のしっかりした資料がみつかりませんでした。英語で見つかったのは以下の様になっていました。

  1. Lucifer: pride.
  2. Mammon: greed.
  3. Asmodeus: lust.
  4. Leviathan: envy.
  5. Beelzebub: gluttony.
  6. Satan: wrath.
  7. Belphegor: sloth.

7大悪魔と7つの大罪は繋がっているんですね。

12使徒は全く聞いた事がない名前なので、7大天使と対応させる使徒にして7大賢者の方が分かり易いですね。

5.Map1Bugの直し

2022-04-11のBlogに載っていたMap1のBugの直しの続きをやって行きます。

  • 武器を装備した状態で戦闘中に死んで、復活した時に攻撃力がオカシイBug
  • 金貨0枚で買える道具や武器を直す

5.1 先週のBugが直っているかの確認

先週直したBugはPCを起動してから初めてProjectを起動した時だけ起きるBugなので、先週は本当に直っているのか確認しませんでした。

今、確認します。

直っていました。

5.2 武器を装備した状態で戦闘中に死んで、復活した時に攻撃力がオカシイBugを直す

<Bugの確認>

戦闘前の攻撃力です。

攻撃力10の武器を装備しています。

一回戦闘で負けて、復活しました。

武器を装備しているにも関わらず、攻撃力が武器なしの状態になっています。

<原因の解明>

以下のWidgetから調べていきます。

「もう一度始める」ボタンを押したらどうなるのかの確認をします。

それぞれのNodeが何をやっているのかを確認します。

最初の2つのNodeはLoadingに関するものなのでここでは無視します。

次のOpen LevelですがMap1にセットされています。

これではMap1以外の戦闘で死んだときもMap1に戻ってしまいます。

このBugは後で直します。

Map1のBPを見ます。

Event BeginPlayの実装を見て行きます。

こんな変数がありました。Map Name Before Battleです。

先程、発見されたバグはこの変数を使用すれば一発で直りますね。

ここでPlayerの操作するCharacterのParameterは何も弄っていませんでした。

Third Person Character BPをみます。

以下の実装を見て思い出して来ました。Game Instanceの変数であるMy Your Heroの変数であるATKがplayer の操作するCharacterの攻撃力を管理しています。

こいつです。

U Game Characterクラスを見るとInt型の変数、ATKがありました。

思い出してきました。この変数の管理の仕方だと武器を装備した時の攻撃力をそのままここのATKに足すために色々面倒な事が起きたんです。

それでThird Person Character BPの方で新しい変数、Soldier Base ATKを作成したんです。

原因らしき所を発見しました。

戦闘に敗北した場合、以下のコードが実行されます。

ここでPlayerの操作するCharacterのDataが全部消されています。

でもそうすると武器や防具はなんで残っているんでしょうか?

あ。分かった。武器や防具は

別な所で管理しているからだ。

原因が分かりましたね。

これは思った以上に深い問題なので節を新しくして検証します。

5.3 武器を装備した状態で戦闘中に死んで、復活した時に攻撃力がオカシイBugを直す その2:どう直すか?

一番簡単な直し方は以下の実装部分でPrepareReset()を呼ばない事です。

しかし、今更UE4C++のコードを変更するのか。という気持ちがしています。

最低でもこの1年間はUE4C++のコードは触っていません。今、MaterialやらNiagaraやらLandscapeやらの新しい事を勉強している時に更にUE4C++のコードの管理まで始めたら頭がパンクしてしまいます。

もうこのGameに関してはUE4C++のコードは触らない方向で行きたいです。

で考えた方法ですが、以下のGame Over画面の「もう一度始める」ボタンを消してしまうのはどうでしょうか?

イキナリ消してしまうのは、後で問題が起きた時に解決出来なくなる可能性が出て来るので押しても反応しないようにします。

これで行きます。これならこの部分を変更したために別な問題が発生した場合も直ぐ元に戻せます。

5.4 Game Over Widgetの「もう一度始める」ボタンを押せなくさせる

Game Over WidgetのBehaviorの設定を以下の様に変更しました。

結果です。

「もう一度始める」ボタンは押せなくなっています。更に半透明になっている事で押しても無駄な感じも出ています。

因みに落下によって死亡した場合は「もう一度始める」ボタンは最初から表示されていませんでした。

これで一応直った事にします。

5.5 金貨0枚で買える道具や武器を直す

こんなのまだあったのか。と思いましたが一応確認します。

転職石が金貨0枚で買えます。

木の盾も金貨0枚で買えます。

Data TableのItemsのDataを書き換えます。

以下の様な値段にしました。

Data TableのWeaponsのDataも書き換えます。

値段は適当に付けました。

テストPlayをして行くうちに適切な武器の値段は判明するでしょう。

確認します。

直っています。

今週のBugの直しは以上です。

6.Open Worldの検証

6.1 先週までの勉強の確認

Open World の勉強は何が目的だったのか直ぐ忘れてしまうので確認が大切になります。

もともとWorld Compositionを使用して16km^2のLandscapeの作成方法を知りたかったんです。そして先週までの勉強で一応、その作成方法は分かりました。

ただしそのためにはThird PartyのSoftwareで1009x1009のHeight Mapを16x16枚作成する必要があります。

色々検討した結果、Third PartyのSoftware の中でGaeaが総合的に優れているとなりました。ので別枠でGaeaの勉強をする事にしました。

もし有料版のみでしか1009x1009のHeight Mapを16x16枚作成出来ない場合はGaeaを購入する事にします。

後、最適な高さの設定はまだ良く分かっていません。あまりHeight Mapの高さを高く設定するとLandscapeにBlockみたいな形状の部分が生成されるらしいです。こういう事はLandscapeの勉強というよりはGaeaの勉強内で解決していきたいと思っています。

と言う訳で。一応、UE4でWorld Compositionを使用してOpen Worldを作成する方法の勉強は一端終わりにします。

今週からUE5でWorld Partitionを使用して16km^2のLandscapeの作成をする場合について検証する事にします。

6.2 Landscape関連の優秀なTutorial製作者を整理する

UEのTutorialの製作者の中には本当に凄い人がいまして、その人たちのTutorialには大変有益な情報に溢れています。UEのLandscapeのTutorialの製作者にはそういう凄い人達が数名いまして、一寸整理しておかないと訳分からなくなってしまいます。

ここで整理する事にします。

Smart Poly

まずはSmart Poly氏です。

今気が付きましたEpic 社のMega Grants貰っているんですね。この質のTutorialを提供出来るんですから納得です。

Smart Poly氏はHeight Mapの生成にThird PartyのソフトであるWorld Machineを使用しています。

ただし彼のTutorial、声が小さくて聞こえない事があります。

まあ字幕を表示して読めば良いだけですが。

Klaus

Klaus氏です。

Klaus氏はGaeaを使用していてGaeaのTutorialもいっぱいあります。

Height Mapのサイズと生成されるLandscapeのサイズの関係について、ずっと分からなかったんですが彼のTutorialを見てたら一発で理解出来ました。

Klaus氏はインド系なんでしょうか?何かインドっぽいアクセントがあります。

Unreal Sensei

Unreal Sensei氏です。

当然といえば当然ですが、兎に角凄いです。

彼も若いですが大学教授かも。と思われるぐらいの知性を感じます。勿論、UEに関する知識も凄いです。

更に言うと説明が上手い。出来ない人に分かるように説明出来るんです。

Tilingを消す技術を学びたかったら、彼のTutorialは絶対勉強すべきです。

ここに上げている人達のTutorialを見てもTilingが消えていない人は結構います。そういう意味でもUnreal Sensei氏のTutorialは頭3つ位抜けています。

ただしHeight MapはWorld Machineを使って作成してね。で終わりでLandscapeを作成するためのThird PartyのSoftの使用方法については全く解説していません。

GDi4K

実は彼のTutorialはまだ一個しか見た事なくて実際にやってみた事はないんです。

彼のTutorialはVirtual Textureを使用していて、そのVirtual Textureが何なのか分からん私は結構二の足を踏んでしまっています。

でもこの中に並べても何ら遜色のないTutorialですのでここに載せておきます。

彼もインド系なんでしょうか?

PrismaticaDev

彼はLandscape専門と言う訳ではないんですが、何かこの情報が欲しいけどこんなマイナーな事、まとめている人いないよね。っていう情報がよく彼のTutorial内にあります。

Procedural Foliage Toolで生成されたMeshはCollisionがありません。Collisionが必要な木などを生成する時は、Foliageから手動でPaintする必要があります。がこの事を明確に述べてその直し方を非常に分かり易い形でまとめていたTutorialはこの人だけでした。ので一応ここに載せておきます。

後、これはLandscapeとは関係ありませんが、Dither Temporal AA ノードについて調べていた時もこのTutorialでかなり理解が進んだのを覚えています。ので他の分野のTutorialも質が高いのは間違いないです。

彼は一言で言うとゆる系なんです。

Klaus氏、Unreal Sensei氏そしてGDi4K氏は「大学教授です。」って紹介されても、何の違和感もないです。全身から知性というオーラが溢れています。彼からはそういうオーラが全く感じられない。

UEの知識は凄いし技術も凄い。でも彼はそういうオーラを全く発しません。

多分ですが、彼自身がそこに価値を置いていないんでしょうね。

それで見ている方も油断してしまって彼のTutorialの質の高さを見逃してしまいがちになります。

因みに、Smart Poly氏からは学生のうちに自作のソフトが売れまくって何十億って額を既に稼いでしまったタイプと同じ感じがします。

私の経験の範囲ですがGoogleとかAmazonに就職が決まったヤツは自分から自慢しますが、自作のソフトが売れまくって億万長者になったヤツは絶対、自分から言う事は無かったです。のであんまり周りにいる気がしないんですが、ある教授が教えてくれたんですが一学年に一人位の割合で、学生のうちに億万長者になってる子がいるそうです。

マテリアルデザイン入門>

最後に一応、日本語の本も入れておこうと思います。

Landscapeだけの教科書ではないですが、Tileを消す方法(Unreal Senseiが紹介した4つ技術の内の一つとほぼ同じ)が紹介されている事。Tangent空間の座標が紹介されてた唯一の資料だった事。を考慮してこの中に入れても遜色ないと思いました。

6.3 Make An Open World Map in 20 Mins | Unreal Engine 5 [7]を勉強する

Smart Poly氏が挙げたTutorialでUE5 で何か不思議な方法でLandscapeのDesignをしているのがありました。

これちょっと興味深いんで勉強する事にします。

今まで無料でHeight Mapとか公開していたんですが、これからはPatreonのMemberだけに公開するそうです。

おめ。Mega Grant貰って金持ってるだろ!何でそんな金にがめついん。

しかも他のTutorialの人は$5とかでやってるのに$25とか取ってるし。

Landscapeを作成します。

設定はDefault値のままです。

Createを押す前にEnable Edit LayersのCheckを入れる必要があるそうです。

今回はWorld Machineで作成したDataをImportするんじゃなくてLandscapeをUE5上で自作するみたいですね。

そして非常に興味深いのがWorld Machineで作成したみたいにUE5上でLandscapeのDesignをしている事です。

うーん。でもこれだけ見るとUE4と変わらんような。

と思ったら以下に示したBlueprintを使用するそうです。

Blueprintってあのいつも使用しているBPですか?

次にBlueprint BrushにCustom Brush Landmassをセットします。

あれ

私のにはそれは無いですね。

Tutorialだと以下の様に表示されています。

うーん。

調べたらCreate QUICK Landscapes with Landmass Blueprint Brushes in UE 4.26 [8]でLandmassの使用法を教えているみたいです。

こっちは4.26ですがこっちの方が分かり易そう。

ちょっとみたらPluginを入れろと有りました。

UE5はLandmassは標準装備何でしょう?と思いつつ一応、Pluginを開いたら思いっきりありました。

CheckしてProjectを再起動します。

今度はCustom Brush Landmassが表示されています。

はい。

MR3D-DevのCreate QUICK Landscapes with Landmass Blueprint Brushes in UE 4.26 [8]で勉強する事にします。

と思ったらこっちはこっちでComment欄に字が小さくて読めないと書かれていました。

まあ、いいや両方を見ながら勉強する事にします。

4.26のProjectを起動してLandmassのPluginを追加しました。

そしてLandscapeを作成します。

成程。これは読めない。

同じ設定にしました。

Tutorialによるとこの設定がLandmassを綺麗に表示するそうです。

ここでもBlueprint Blushをセットしています。

私のは3つしか表示されないんですがTutorialの説明だとLandmassとMaterial Onlyしか使用しないそうなのでこのまま行きます。

Custom Brush Landmassを選択してLandscapeをClickしたら以下の様なPyramidが生成されました。

Tutorialと同じ結果です。

更に以下の様なActorが生成されました。

これもTutorialと同じです。

今度は出来そうです。

Spline Pointを移動させたり増やしたりして以下の山を作成しました。

でもほとんど平らで、あんまり山って感じはないです。

この平らを直すそうです。

Select Modeに戻ってLandscape_CustomBrush_Landmass_Cを選択します。

画面の字が小っちゃくて見えないです。

Curl Noizeの所で値を変化させます。

結果です。

いや凄すぎでしょう。

山の形状をもっとソフトにしたい時はBlur Sizeの値を増やすそうです。

結果です。

はあー。凄い。

今度はDisplacementです。

数字を弄ったら以下の様になりました。

一見すると凄い感じがしますが、Tutorialによると

Meshが崩壊する原因になるそうです。

この辺がUE5ではどれくらい改善されているのかが見られる訳ですね。

良く見るとDisplacementは山のふもとが凹むので変です。使う事は無いと思います。

Duplicateの仕方とかやりました。

それは出来たんですが私のLandmass、Tutorialと比べてかなり大きい事に気が付きました。

さらに上下に凄い曲がっていました。

作り直すのも面倒なので続きは来週やる事にします。

残りは両方のTutorialを見るだけにします。

Create QUICK Landscapes with Landmass Blueprint Brushes in UE 4.26 [8]のまとめ>

こっちはこの後、Custom Brush Material Onlyの使い方と、LandscapeにLayerのあるMaterialを指定した時、Custom Brush Land Massにも同様のLayerが使用され、そのLayerを色々管理出来る事が解説されていました。

Make An Open World Map in 20 Mins | Unreal Engine 5 [7]のまとめ>

こっちはWater Systemを追加して完全な島を作成しています。字も大きいので見やすいです。

Custom Brush Material Onlyは使用しませんでした。

来週はこっちで勉強します。

<まとめと感想>

途中からほとんどTutorialを見るだけで終わってしまったんですが、それなりに理解出来ました。別に一個ずつやる必要はないかもしれません。

でもこの機能、まだ実験中なんですよね。それで思ったんですが、これで作成したMapをHeight MapとしてExportした場合、Landmassの部分はどうなるんでしょう。普通にHeight Mapに残るのなら、そのHeight MapをImportすればそのまま製品版にも使用出来るんじゃないんでしょうか?

来週はそれを試してみます。

後、やっぱりSmart Poly氏の方が分かり易くまとめています。分かり易いだけじゃなくて綺麗なLandscapeを作成するためにはこの機能をこの順番で使用する必要がある。って解説をしています。凄く実践的なんです。

更にMR3D-DevのTutorialをもっと見たら、Gameじゃなくて映像関連の動画の作成をUEを使用して作成するのが専門のようでした。これ自体は別に悪い事じゃないですが、今の私の目的とは違います。

うーん。しかたない。

もう少しだけSmart Poly氏のTutorialを勉強しますか。

7.Gaeaの勉強

公式のTutorialは先週の後は、Snow Mountainなどの具体的なTerrainの作成方法を教えています。これはこれで大事ですが、私は出来るだけ早くGaeaで作成したGeometryをExportしてUEで使用したいので、Klaus氏のこっちのTutorialを先にやる事にします。

それで思い出したのですがこのTutorialのPart1、Interfaceの勉強がまだ途中でした。

Interfaceの使い方なんてのは一回の勉強では直ぐに忘れてしまうもんですが、Blogにまとめておくと直ぐに見直せるので直ぐに見直せます。

新しい事を学ぶのにはYouTubeのVideoの方が断然速いです。まさに「百聞は一見にしかず。」で見て理解するのは読んで理解するのに比較して100倍位優れています。しかし覚えた事を復習したり、一寸だけ忘れてしまった部分を思い出すには文章で読んだ方が分かり易いです。

ので非常に面倒ですがInterfaceの部分はBlog内にまとめ直す必要があります。

ので今週はそれをやります。

7.1 Gaea Beginner Tutorial Series : Part 1 – Interface [9]を勉強する

<Node Graph

Node Graphって何の事かと思ったら以下に示したNodeを実装するBoxの事でした。

Tutorialだと以下の実装がされているので一応、追加しました。

右上のButtonについてです。

まず+ですが、

新しいGraphを追加します。

右Clickで名前の変更とか出来ます。

うーん。それは分かりますが、Graphが2つあったらどうなるんでしょう。そこが全く分かりません。

NodeのPropertiesは右ClickでAccess出来ます。

TutorialだとNode Graphの右側に以下の様なToolが表示されていてNodeのPropertiesをここでも管理出来ると解説していますが

私のにはその表示がないです。

多分Versionが違うからでしょう。気にせず先へ進みます。

<Node Setting

<<Refresh>>

Refreshボタンについてです。

Nodeを選択した状態で押すとそのNodeだけRefreshします。

Nodeを選択しない状態で押すと全部のNodeがRefreshします。

だそうです。

<<Show as>>

DefaultはそのNodeのあるべき姿を示す。と解説していますが分かったような分からないような説明です。

あ。

分かりました。Show asの設定はTerrainとMaskしかないんです。DefaultはそのNodeによってTerrainかMaskのどちらかを選択するだけです。

例えばMountain Nodeは

Defaultでは以下の様なImageを示します。

Terrainも全く同じImageを示します。

Maskは以下の様なImageを示します。

はい。Mountain nodeではDefault値はTerrainにセットされている訳です。

<<Bypass>>

この機能は理解するのに手間取りましたが面白い機能です。

以下の実装を用いてBypassの機能を解説します。

StratifyノードのImageを見ます。

こんな感じです。

それで誰でも思うと思うんですが、Wizard Nodeが無かったらどう変化するんでしょう。

それをWizard Nodeを外さないで実装出来るのがBypassだそうです。

Wizard NodeにBypassをセットします。

結果です。

あんまり変化していませんね。

まあでもこういう機能だそうです。

<<Pin>>

PinをつけたNodeのImageをずっと表示します。

Pinを2つのNodeにつけたらどっちのNodeが表示されるのか試したら、Pinをつけられるのは全てのNodeの内の一個だけでした。

<<Pin as Underlay>>

これはSet Mapなどの色をTerrainに追加するNodeがある時に使用します。

Set Mapが色を追加するTerrainをあるNodeのTerrainに指定する時にこれを使用します。

以下の例ではStratify NodeのTerrainにSat Mapで色を追加しています。

<<Mark for Export>>

当然、これでセットされたNodeの値がExportされます。

試しにStratifyノードにMark for Exportをセットします。

Build画面に行くとStratifyが表示されています。

<<All>>

以下に示したAllについてです。

Mark for ExportがセットされたNodeによって色々なDataをExport出来ます。

例えばWizard Nodeだと4つOutputがありますので

Allにも4つのDataが表示されます。

<<Mark as favorite>>

これは使い方だけ記録しておきます。

と思ったら

の表示の仕方がわかりません。

調べたら分かりました。

公式のDocumentであるNode Management [10]に載っていました。

以下のButtonを押すと表示されます。

こんな感じです。

FavoriteとしてCheckしたNodeはここに表示されるようになります。

ここでそのNodeを選択すると一気にそのNodeまで飛んでくれます。

<<Bake>>

Bakeは以下の箇所からも設定出来ます。

一応、説明を聞いたんですがBakeそのものが何をしているのか分かりません。

こっちも公式のDocumentで調べて見ます。Baking and Caching [11]に説明されていました。

つまり、一回だけ凄い精密なResolutionで計算してその計算結果を保持しておく。って事ですね。

その後のNodeはその計算結果を使用して行くわけです。

試しに選択したら以下の様にBakeしたDataをSaveする場所を聞いて来ました。

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

<<Move selected nodes>>

まずこの選択をするためにはNodeを選択する必要があります。

Nodeを選択すると以下の様に使用出来る様になります。

試しにGraph(1)に移動させてみます。

選択していたNodeがGraph (1)に移動しました。

これは実装が複雑に成り過ぎた時に整理しやすくするための機能なんでしょうか?

<<Collapse>>

これは以下に示したようにNodeの表示を小さくします。

小さいだけじゃなくて可愛いですね。

<<Get Name From Parent>>

Wizard Nodeに使用しました。

Wizard Nodeの名前がWizardからMountain_Wizardに変わりました。

こんなの一回やれば分かるじゃん!何をあえて勉強する必要があるんだ。と思って試しにこのNodeの名前を元に戻そうとしたら、何をやっても戻りません。それで色々弄ったらGaeaがCrashしました。

よくよく考えればRenameから名前を戻せば良かったです。

まだ自分で自由に動かせる程の理解はしていませんね。

<<Note>>

NoteはNoteですね。

Noteに書いた内容はそのNodeを選択すると左下に表示されます。

TutorialではCursorをNodeに合わせるとNoteの内容が表示されるとありましたが、

私のには出てこないですね。

これもVersionの違いのせいでしょう。

<<Delete>>

あれ、

Replace NodeとBakeは?

Replace NodeはNodeを別なNodeに交換する機能ですね。多分ですが。

試しにReplace Node を使用してMountain NodeをPerlin Nodeに変更してみました。

出来ました。

Bakeはさっきやりました。

DeleteはそのNodeを消すだけでしょう。Perlin Nodeでやってみます。

消えました。

<<Copy Setting とPaste Setting>>

これは同じNode内でしか出来ません。

TutorialでやったようにMountain Nodeを2個用意してやります。

それぞれのMountain Nodeの設定が違っています。左のMountain Nodeの設定を右のMountain Nodeに写したい時に、左のNodeでCopy Settingを選択して右のNodeでPaste Settingをします。

最初、この機能を聞いたときはすげえー。と思いましたが良く考えたらDuplicateすれば良いんじゃない。とも思いました。

<<Preset>>

これは先程の設定を保存しておく機能だそうです。

試しに適当な設定でSaveしてみます。

今のMountain Nodeを消して新しいMountain Nodeを入れました。

有りました。

My first Presetを選択します。

設定がMy first Presetの時と同じになりました。

<<Show Graph Toolbar>>

これにCheckを入れると

が表示されます。

先に言ってほしかった。これは。

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

8.雪山のMapの作成

2022-04-18のBlogで雪山のMapには以下のEffectを追加したいと書いています。

最初の2つは既に実装しました。残りの3つはどうやって実装するのか分かりません。今週はそれらを調べる事にします。

8.1 足跡のEffectの追加

まず足跡ですが、World Displacementを使用するのは間違いないでしょう。まず移動に合わせて足跡を残すようなEffectを作成してそれにWorld Displacementの機能で地面に足跡にそって歪みを作成するんです。最後にそのEffectをPlayerの操作するCharacterに付けて完成です。

自分で一から作成したら3カ月位かかるので大変です。

Tutorialを探して見ます。

3つ程見つかりました。それぞれ軽く見てみましょう。

Footprint System - [UE4 Tutorial] [12] を見る>

Unreal CG氏のTutorialでした。

綺麗な足跡が出来てます。

何とDecalを使用しています。

Decalはそろそろ勉強すべき時ですね。

うーん。Substance Designerを使用するそうです。

Substance DesignerではBase Color用のImageとNormal Map用のImageを作成しています。

これ位ならSubstance Designerを使用しなくても作成出来そうですね。

Animation Sequenceの所からNotificationを追加していますがこの辺のやり方は全く分かりません。

Tutorial通りにやってしまうか、しっかりAnimation Sequenceの所を勉強するのか?

ちょっと悩みます。

足跡がOverlapした時の対処法も追加していますね。

ぱっと見た限りでは作成出来そうです。

Dynamic Footprint System Part 1/2 - Unreal Engine 4 Tutorial [13] を見る>

Matt Aspland氏は初めて聞く名前です。念のために調べてみたら今まで3回、Matt Aspland氏のTutorialで勉強していました。

この人のTutorialで何を勉強したんだろうと調べたらWorld Compositionについてでした。

全部その時のやつです。

これはPart 1でPart 2が検索に現れていませんが、検索したらありました。

今回はPart 1だけ見てみます。

まず気になるTextureですがこっちはNormal Mapは使用しないみたいです。以下のTextureを使用していました。

こっちでもDecalを使用しています。

どうやら足跡の作成にDecalを使用するのは常識みたいです。やっぱりTutorialを最初に見て良かった。全然検討違いの方向で実装しようとする所でした。

やっぱりNormal Mapは使用していませんね。

こっちは直接足に生成しています。Animation Sequenceは使用していません。

こっちのやり方の方が私には簡単かもしれません。

と思ったらこっちもAnimation Sequenceを使用していました。

残りは2nd Partでやるそうです。

ぱっと見た感想ですが、実装は出来そうです。やっぱりAnimation Sequenceの所が理解出来るのかですね。

Footprints In Snow - Unreal Engine 4 Tutorial [14]を見る>

こっちもMatt Aspland氏のTutorialですがこっちは雪の足跡とそのものズバリな題なので見る事にしました。

話を聞いていたらこっちの方が古いTutorialで前のTutorialはこれの改良版だそうです。ので見るのは止めました。

<足跡の作成に関する感想とまとめ>

DecalとAnimation Sequenceを使用しているのは分かりましたが、VFXは使用しないんですね。後、World Displacementで雪が潰れて平らになる表現とかもないですね。

今回はTutorial通りに作成します。次回作はここで習った足跡の実装方法を参考にして自分流の足跡を作成します。

8.2 天気を曇りにする

これ、UEで雲がどうやって作成されているのか全く知りません。その辺も調べます。

色々、見たんですがほとんどのTutorialは雲は作成するんですが、雪が降っている日のどんよりとした曇りの日の空は作成していません。

やっと見つけたのがこのTutorialです、

Ue4 Tutorials - Deathscyp Factory S03E07 - Simple cloudy sky Material in Ue4 [15]では以下に示した様な空が作成されています。

ただしこの人はYouTubeにある別のTutorialをかなり参考にしたそうです。参考にしたTutorialも載っていました。

空を曇りにするためにまずこのTutorialとこの人が参考にしたTutorialを勉強する事にします。

8.3 風のEffectの追加

風のEffectは今までDownloadした雪や氷のEffectの付属のEffectとして沢山あるはずです。それらを見てそのまま使用する事にします。

探したんですが見つかりませんでした。

UE4 - Tutorial - Stylised Wind Particles (Cascade) [16]みたいなを作成したかったんですが。

このTutorialを元に自作するしかないですね。

8.4 雪山のEffectについてのまとめ

雪山の作成では、以下に示した3つの事について作成する必要があります。

  • 足跡のEffect
  • 天気を曇りにする
  • 風のEffect

今週の調査の結果、これらのEffectは作成出来そうな事がわかりました。

これが終わったら今度は砂漠の作成に入ります。

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

今週は何を直しましょうか?

9.1 Play中のScreenの黒い部分を無くす

そう言えばCameraが変な挙動をしています。

CameraからのAspectが一定で画面のAspectが変更するとScreenに黒い部分が発生します。

その理由はLevel上に配置したCamera Actorから映像を得ているからと考えられます。

この配置したCamera Actorで撮影した映像はPlay画面のAspectを変更しても映像のAspectは一定に保っています。

付属のCamera で撮影した場合は、ScreenのAspectに合わせて勝手に映像のAspectの補正をしてくれました。

今はCamera Actorの設定から以下の部分の値を調整する事で無理やり映像のAspectを補正しています。

このやり方はこのAspectだけの設定でPlay画面のAspectがこの設定から変更された場合は対応してくれません。

これについて調べます。

すぐ分かりました。

Camera ActorのParameterにあるConstrain Aspect RatioのCheckを外せば良かったです。

結果です。

どんなにScreenの比率を変えても画面が黒くなったりする事は無くなりました。

直りました。

こんなに簡単に直せるとは思っていませんでした。

今週はこれだけです。

10.Blenderの勉強

今週は復習だけやります。

<Selection Method

出来ました。

2022-02-14Blogの復習>

全部やりました。何個か怪しいのはありましたがほとんどは覚えていました。

2022-02-21Blogの復習>

Bevelはあんまり興味のない機能ではありますが、流石にここまで何回も繰り返してテストしていると、Bevelを効果的に使う場所とか知りたくなります。

ほとんど覚えていました。

2022-02-28Blogの復習>

今週の木はかなり独創的な出来でした。

2022-04-03Blogの復習>

KnifeやCutの使い方はかなり理解して来ました。

やっぱりこういうToolの使い方を覚えるには時間が必要です。

2022-04-25Blogの復習>

結構、悩みました。

望んだ結果が出ない場合がありましたが、あんまり根を積めないでやって行こうと思います。

11.まとめと感想

段々、Game制作に必要なUEの技術の幅が分かって来ました。

雪国の世界の作成を考えます。すると

  • 雪のLandscape
  • 雪が降るEffect
  • 雪が積もった岩や木、
  • 雪の上を歩いた足跡のEffect

など必要になります。これらはどこからどこまで自作するのかはその人の自由なんですが、最初から全部、パックになっているAssetを買っても良い訳です。

そこまではひどく無くても

  • 雪のLandscape用のMaterialは付属のMaterialをそのまま使用する。
  • 雪が積もった岩を表現するためのProjectionを利用したMaterialの作成はどこかのTutorialが紹介してくれた方法をそのまま使用する。

とかは全然ありだと思います。

多分、大きなGame 会社でも市販のGameの90%はそういう今まである技術で作成しているはずです。

ただしメガヒットするためにどうしても残り10%の部分で、今までの技術では出来なかったbreakthroughが必要になって、その部分は一から作成するようになると思われます。

その10%の部分のProgrammingを担当する人に私はなりたかったんです。

それがこの数年間、残りの90%の部分の勉強に費やしていました。

まあ。それも良いでしょう。こうなったら全部、勉強してしまいます。その上で今までの技術では出来なかったbreakthroughも自分でやる事にします。

ただBen Cloward先生がそのTutorialで言っていたのですが、先生がGame会社で働いていた時は、Art Directorがどうしてもここは直さないとGameとして売れない。何とかならないかと直談判して来たそうです。そういうArtの専門家が制作中の作品を見て、商業芸術の観点から、この部分は今までの技術で作成したのでは駄目だ。Breakthroughが必要だ。と言ってくれる訳です。そういう人は私にはいませんので、どこをbreakthroughするとMega Hitするのかを分かる人を見つける必要はありますね。将来的にはですが。

12.参照(Reference

[1] CGHOW. (2022, April 11). Yin Yang FX in UE5 Niagara Tutorial | Download Files [Video]. YouTube. https://www.youtube.com/watch?v=vPzLeEqNPi8

[2] UnrealCG. (2020, June 25). Toon Shader & Custom Shadow - UE4 Postprocess Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=mx_AvrZK3TA

[3] Epic Games. (n.d.-b). Post Process Materials. Unreal Engine Documentation. Retrieved May 1, 2022, from https://docs.unrealengine.com/4.27/en-US/RenderingAndGraphics/PostProcessEffects/PostProcessMaterials/

[4] Epic Games. (n.d.-a). Depth Material Expressions. Depth Material Expressions. Retrieved May 1, 2022, from https://docs.unrealengine.com/5.0/en-US/depth-material-expressions-in-unreal-engine/#scenedepth

[5] Cloward, B. [Ben Cloward]. (2022, April 14). UV Rotation - Shader Graph Basics - Episode 42 [Video]. YouTube. https://www.youtube.com/watch?v=q62CdbKNdJQ

[6] Cloward, B. [Ben Cloward]. (2020, April 16). World-Aligned Textures - UE4 Materials 101 - Episode 22 [Video]. YouTube. https://www.youtube.com/watch?v=pXOknekvmwE

[7] Smart Poly. (2022, April 21). Make An Open World Map in 20 Mins | Unreal Engine 5 [Video]. YouTube. https://www.youtube.com/watch?v=RCENB-s5POA

[8] MR3D-Dev. (2021, January 11). Create QUICK Landscapes with Landmass Blueprint Brushes in UE 4.26 [Video]. YouTube. https://www.youtube.com/watch?v=GK3KAevUy8E

[9] Klaus [klaus]. (2022, January 12). Gaea Beginner Tutorial Series : Part 1 - Interface [Video]. YouTube. https://www.youtube.com/watch?v=H-vTeYYHJPM&list=PLyNtvXvNIFMMHnW1_-hXO3RNPp_Z5CExF&index=1

[10] quadspinner Gaea. (n.d.). Convenience Features - Gaea Documentation - QuadSpinner. Gaea User’s Guide. Retrieved May 1, 2022, from https://docs.quadspinner.com/Guide/Graph/Conveniences.html

[11] quadspinner. (n.d.). Baking and Caching - Gaea Documentation - QuadSpinner. Gaea User’s Guide. Retrieved May 1, 2022, from https://docs.quadspinner.com/Guide/Using-Gaea/Cache.html

[12] UnrealCG. (2017, December 26). Footprint System - [UE4 Tutorial] [Video]. YouTube. https://www.youtube.com/watch?v=bNfRgGOfq1k

[13] Aspland, M. [Matt Aspland]. (2020, December 18). Dynamic Footprint System Part 1/2 - Unreal Engine 4 Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=VJstjFMVbZw

[14] Aspland, M. [Matt Aspland]. (2020a, December 11). Footprints In Snow - Unreal Engine 4 Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=8AZWZ1xaA78

[15] Casual Gamers. (2019, January 15). Ue4 Tutorials - Deathscyp Factory S03E07 - Simple cloudy sky Material in Ue4 [Video]. YouTube. https://www.youtube.com/watch?v=uD6DbQyy-tk

[16] Ashford, D. [Dean Ashford]. (2020, July 4). UE4 - Tutorial - Stylised Wind Particles (Cascade) [Video]. YouTube. https://www.youtube.com/watch?v=6HHHAcaiQkI

「Unreal Engine 4.xを使用してRPGを作成する」の足りない部分を作成する RPGのStoryの作成と推敲

<前文>

<Attack on Pearl HarborとRussian Invasion of Ukraine

私はアメリカ人から直接言われた事はないんですが、日系人の友達からよく聞かされたのが、他のアメリカ人から日系人は「日本の真珠湾攻撃がとても卑怯な攻撃である。」といじめられるんだそうです。日本人の感覚では分かりにくいかもしれませんが、アメリカではアメリカ国籍を持っていても日本人は日本人という扱いなんです。もう4世に成る人でも日系人は日本人として扱われていました。白人のアメリカ人に日本人は卑怯である。と言っていじめられるらしいんですが、その根拠が何故か日本の真珠湾攻撃なんです。

私は、その話を聞くたびに不思議に思って、戦争に卑怯も糞もないだろう。と思って聞き返すんですが、私の主張に日系人の友達の方が逆に納得してしまったんです。

私の主張は以下の様なものです。

戦争は紳士同士のスポーツの試合じゃない。悪い国が攻めて来る事を想定する事は絶対に必要である。そういう悪い国が攻めて来る時に「今から攻撃します。」何て言う訳ないです。悪い国が何時、攻めて来ても大丈夫なように警戒しておくのは防衛の基本なはずです。

それを怠ったのはアメリカ軍の方です。だから恥じるのはアメリカ軍の方である。

Meerkatの群れだって常に見張りを立てて狐の敵襲に備えているのに、それを怠ったアメリカ軍の方が悪い。と

それにどう反論してくるのかと思ったらその日系人の友達は完全に納得してしまいました。

そして後日、その日系人の友達から、他のアメリカ人に真珠湾攻撃の話を出された時に、私の主張と同じ事を言ったら、一瞬で黙って別の話題に変わったと。報告されました。

その時、その日系人の友達が凄く嬉しそう報告してくるのを聞いて、そんな深刻な話だったのかとびっくりしたのを覚えています。

この話を、今思い出しているのは、アメリカ政府はRussiaのUkraineへの侵略を予測出来ていなかったんじゃないのかと思ったからです。

それを感じたのは左派のMediaが一斉にRussiaのPutin 大統領が気が狂ったと報道した時でした。

RussiaのPutin 大統領が気が狂ったからと言って今のRussiaのUkraineへの侵略が止まる訳ではありませんし、一体何の意味があってそう主張するのかと思ったら、RussiaのUkraineへの侵略を予測出来ていなかった言い訳だったんです。

がっかりしました。

アメリカ人は戦争を、ボクシングかなんかの格闘技の試合の延長線上に考えているんです。ゴングが鳴ったら試合が始まってゴングがもう一回なったら終りと。でも戦争はそうじゃないです。ズルしたって勝った方が正しいんです。

アメリカ人はその事をすっかり忘れてしまっているんです。

更に言えば、今、アメリカでは、アメリカが直接Ukraineに参戦しなければ第三次世界大戦にはならない。というコンセンサスが出来つつあります。でもこれって幻想ですよ。

アメリカが直接Ukraineに参戦したら、第三次世界大戦になる。」は真ですが、それが「アメリカが直接Ukraineに参戦しなければ、第三次世界大戦にならない。」が正しい事を保証するものにはなりません。「この戦争を無視しているといずれ第三次世界大戦になる。」も真であるなら、さっさと参戦した方が、結果的に少ない被害で大戦を終わらせる事が出来るかもしれません。

Russiaと中国の経済圏が今年中に確立されたら、来年は中国が台湾に侵攻してくるかもしれません。その時までにRussiaがUkraineの戦争に勝利していたら、北海道にRussiaが攻めて来る可能性は十分にあります。そしてアメリカはその事を予測する事は出来ないと思います。

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

<本文>

1.今週の予定

今週も先週と同じ予定でやって行きます。

  • Niagara: CGHOW氏のTutorialをやる
  • Materialの勉強
  • RPGStoryの改善
  • Map1Bugの直し
  • Open Worldの検証
  • Gaeaの勉強
  • 雪山のMapの作成
  • Game DesignポケモンHxHの念能力(戦闘システムの作成)
  • Blenderの勉強

2.Niagara: CGHOW氏のTutorialをやる

2.1 Wool Fabric in UE5 Niagara Tutorial | Download Files [1]を勉強する

今週はWool Fabric in UE5 Niagara Tutorial | Download Files [1]を勉強する事にしました。

新しいUE5に慣れておきたいからUE5のTutorialから選びました。

こんなやつです。本物そっくりの質感ですね。

Niagara SystemにFountainを追加して、要らないModuleを消します。

いつもやっているやつです。

Emitter Update SectionのSpawn Rateを消してSpawn Particles in Grid Moduleを追加します。

Errorが出ていますね。

Fix Issueを押すとParticle Spawn SectionにGrid Location Moduleが生成されErrorが消えました。

うーん。すっかりこのModuleの存在を忘れていました。

調べたら2021-11-222021-11-29のBlogにこのModuleの記録がありました。

このTutorialを勉強してて始めてSpawn Particles in Grid Moduleを使用したんでした。思いだして来ました。

Blogを読み直して見たんですが「試してみたらきちんと動きました。」以上の事は書かれていませんでした。

Spawn Particles in Grid ModuleとGrid Location Moduleの値を弄って以下の様にしました。

げっ。

Sprite Renderer Moduleを消してMesh Moduleを使用しています。

一回、軽く全部見たのですがこの部分見逃していました。

以下のStatic MeshをMesh Moduleに使用しています。

Blenderで作ってみます。

3d Modelの大きさが分かりませんね。

取りあえず以下のモデルを作成しました。

UE5にImportしたら以下の様になりました。

取りあえずこれで試してみます。

Render sectionのMeshに先程Importしたのをセットします。

結果です。

なんだこれ?

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

色々微調整したら以下の様になったのでこれで行きます。

何度もParticle を生成する必要はないのでParticle Update Sectionの

Kill Particle When Lifetime Has ElapsedのCheckを外しました。

これで生成されたParticleはずっと存在する事になります。

更に

Emitter Update SectionのEmitter Stateの

Loop Behaviorの設定をOnceに変更します。

これでParticleは最初の一回しか生成されなくなります。

Timelineを開始してPreview で確認します。

結果です。

全く変化しません。出来ています。

Materialを作成します。

Normal 用のTextureですがある中で一番マシそうなのを選択しました。

どれが良いよのか全く分かりません。

Previewでは以下のように表示されました。

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

こういう線が出て来るのが良いみたいですね。

レンガのNormal Mapを利用して

以下の様にしました。

真ん中の部分が変ですね。

UV Mapについて何も考えていませんでした。UV Mapが以下の様になっています。

真ん中が無いです。

うーん。これでやってみて駄目だったらMeshのUVを直します。

取りあえずはこのままやります。

以下の実装となりました。

Flatten Normal ノードは初めて使用します。

Normal を逆向きにするみたいです。

このノードを解説しているDocumentが見つからないです。でもClickしたら中身がみれました。

Lerpノードのalphaにマイナスの値を入れるってどういう事何でしょうか?

想像ですがExtrapolateしそうですね。

Alphaの値が0の時はAの値、1の時はBの値になり、その間の値の時はAとBの間の値になります。

その線を外挿してAlphaが-2の値を求めてそうですね。

テストしてみます。

以下の実装を組みました。

結果です。Unlitで表示しています。

色を調べたら255,0,0でした。

見事に外挿していました。

因みに、Alphaが-1の時は224、0,0でした。

うーん。Linearなら191位になるはずですが。

0.25,0,0の色を測ったら、136、0.5,0,0の色を測ったら186でした。この値を使用してAlphaが-1の時の外挿を計算したら236でした。うーん。こっちの値は近いですね。sRGBが使用されているんでしょうか?

この問題は後で考える事にします。

Render SectionのMesh Renderer Moduleの

Explicit Matに今作成したMaterialをセットします。

結果です。

何か繊維っぽいですね。

色をつけます。

Particle Spawn SectionのInitialize Particle Moduleの

Color Modeの設定を以下の様にします。

結果です。

色が薄いです。

値を以下の様に変更しました。

結果です。

折角、ここまで調整したのに色はTextureから取る事にするそうです。

Color Modeの値を元に戻しました。

Emitter Update SectionにSet Parameter Moduleを追加します。

Set Parameter Moduleの設定から+を押して

Texture Sampleを追加します。

このParameterの名前をTSにしました。

以下のTextureをセットしました。

このTextureはないので作成します。

どの位のサイズが適当なんでしょうか?

一瞬だけ画面にこのTextureのParameterが写っていました。

1024x1024で作成されているみたいですね。同じサイズで作成する事にします。

出来ました。

設定を確認します。

Formatが違いますね。

Compression SettingをVector Displacement に変更したらFormatもB8G8R8A8になりました。

このCompression のSettingはどんな影響があるんでしょうか?

絶対にこの値にセットしないといけないのか、した方が良いだけなのか?全然分からないので後で調べます。

Emitter Update SectionのSet Parameter Module(Set Emitter TS Module)の

TextureにこのTextureをセットします。

Particle Spawn SectionにScratch Moduleを追加して

Scratch Moduleの実装を作成します。

まずMap Get ModeにTexture Sampleを追加します。

Name SpaceをInputからEmitterに変えます。

更に 名前をTSに変更します。

これで先程、Emitter Update Section内で作成したTexture SampleタイプのParameter、TSのDataが獲得出来るようになりました。

う。

そうなのか?

納得出来る様な出来ないような。

Texture SampleからTexture 2Dの値をGetします。

UV Inputを作成するためにSample Texture 2DノードのUV pinをMap Getノードの+に繋ぎます。

最後にSample Texture 2Dノードの値をMap SetのParticle Colorにパスします。

Applyを押したらErrorになりました。

CPU内ではSample Texture 2Dノードは使用出来ないよ。と

嘘でしょう。とTutorialを見直したら、

いつの間にかGPUにセットされています。

Emitter のPropertiesの

Sim TargetにGPU をセットして

GPUに直しました。

Errorが消えました。

結果です。

色が単一な理由ですが、先程作成したScratch ModuleのUV値が

常に0,0だから、Textureの0.0の位置の値だけとってくる訳です。

これを以下の様に変更します。

うーん。

UV値って0から1だと思っていたんですが。Textureの端が0でその反対側の端が1だと。この計算だと1以上になりそうですが。

あ、分かりました。

Exec IndexがNormalizedされているから最後に生成されるParticleの番号が1になるんです。つまり100個のParticleが生成されるとしたら、Exec Indexは0.01、0.02…0.98、0.99、1.00になるはずです。(もしかしたら0.00から0.99かもしれませんがそこはここでは重要ではないです。)

はい。解決しました。

Yの値も同様にセットしました。

結果です。

かなりいい感じです。

Textureは何でも良いらしいです。

これを試してみます。

結果です。

うーん。良い。

キャラの顔だったらどうでしょう。

キャラの顔が縫い込まれた感じが出来るんでしょうか?

あれ。

出来ませんね。

うーん。良く分かりません。Exec Indexの番号がTextureの並びとは違うのかもしれませんね。

色々試しましたが以下の図が最も毛糸らしいです。これで続きを作成します。

今度は毛糸の毛の部分を作成します。

以下の様にSub UVを作成しました。

Materialも作成します。

Textureの糸の線が細すぎたかもしれません。

Previewに何も表示されません。

取りあえずこれで試してみます。

EmitterをDuplicateします。

Duplicateした方のEmitterに毛糸を生成させます。

まずRender SectionのMesh Renderer Moduleを消してSprite Renderer Moduleを追加します。

Tutorial通りの設定をしたのですが何も表示されません。

Textureの線を太くしてみます。

今度はMaterialのPreviewでも確認出来ました。

Niagara Systemでも全部、同じ形、同じ向きですが確認出来ました。

微調整しました。

良い感じです。

次にParticle Spawn SectionにSub UV Animation Moduleを追加します。

以下の様に設定しました。

Tutorialだと以下の様に0から23にセットしていますが、何故なんでしょう?

間違いの気がしますね。

結果です。

毛糸のくずが飛び出しているのが確認出来ます。

母親が何時も編み物をしているのでこのEffectを試しに見せたら、固いと言っていました。

うーん。

まだまだですね。

3.Materialの勉強

今週からUnreal CG 氏のToon Shader & Custom Shadow - UE4 Postprocess Tutorial [2]を集中して勉強する事にします。このPost Processのやり方を覚えれば、今のRPGの印象を一辺に変化させるToon Shadingのやり方が理解が出来ます。絶対に役に立つはずです。

前にこのTutorialを勉強した時は、Materialの理解も浅かったし、このTutorialがそんなに高度な内容を含んでいるとは思っていなかったので軽くやって終わりにしてしまいました。

今回は、4回位に分けてきっちりやって行こうと思います。

3.1 Toon Shader & Custom Shadow - UE4 Postprocess Tutorial [2]を軽く見る

これですよ。これを改良したら未来が開けますよ。

このPost ProcessのEffectは色んな機能が付いていてToon ShadingとOutlineだけじゃないんです。

それも前回、勉強した時に面倒になってしまった要因です。このTutorialで解説されている全部の機能について以下にまとめます。

<影>

以下に示した様に影のPatternを変える事が出来ます。

影の色を変える事も出来ます。

これって凄い使える機能な気がします。

よく中世風ファンタジーのマンガで影を以下のイラストのように線で表すじゃないですか。これを作れると思うんです。

<Outlineについて>

色を自由に変更出来るそうです。

当然、サイズも変更できます。

Outlineを太くするとアメコミ調ですね。

<Distance Color

Distance Colorが何を指しているのか今一分かっていないんですが、以下の様に遠くの景色の色が変化します。

<Blend

当然、何かの色を混ぜているんですが、変化が良く分からなかったです。

<Post Processに使用するMaterialの作成方法>

Post Processを選択したあとBefore Translucencyにセットします。

影の作成のために以下の実装を行います。

うーん。

Post Processでは兎に角、Scene Textureノードを使用するんですね。

このScene TextureってDeferred Shadingで作成したそれぞれのG-bufferを表示しているんだと思うんです。とするとTranslucencyを実行するTiming との関係なんかも知りたいですね。公式のDocumentの何処かにはこのRenderingの流れを説明している表がありそうです。今度探してみます。

結果です。

うーん。この時点で凄いです。

ただしこの方法で、影を抜くためには反射する物体があると駄目だそうです。Unreal CG氏はこのPost Processを使用する時は、Normal Mapを使用している物体ですら置かないそうです。

次にParameterのBlendを作成します。以下の赤で囲った部分の実装を追加しました。

先程、Blendは何をやっているのか良く分からないと述べましたが、リアルなRenderingとG Buffer上のTexture化されたImageの混合割合を決めていたんですね。

ただこのMask Nodeが何で必要なのかが分かりません。この点は後で自分で実装する時に確認します。

以下の方法で影に色をつけます。

<Static Meshに使用しているMaterialの作成方法>

一応、Static Meshに使用されているMaterialの実装も記録しておきます。

確かにNormal Mapも使用していませんね。

<空の作成>

先程、作成されたMaterialをPost Processに使用すると以下の様になります。

空が真っ暗です。これを直します。

まず以下の実装をします。

Scene DepthはカメラからRayを飛ばしてカメラに写っている物体がどれくらい遠くにあるかを測るNodeだったと思います。

それを距離で割ってSaturateする訳です。

Distanceの値を物凄く大きな値とすると空が白く、それ以外が黒くなると言う訳みたいです。

やっぱりTutorialでもDistanceに大きな値を入れて、空だけ白くしていました。

実際に実装する時は以下の様にしていました。

理論は一緒ですが、こっちの方が白黒はっきりするんでしょうか?

LerpのAには以下に示したScene Texture Post Process Input 0ノードにMask(RGB)した値が使用されていました。

Scene Texture Post Process Input 0ノードにMask(RGB)をすると何が変わるんでしょうか?これは実際に作成する時に確認します。

結果です。

空が現れました。

<影にTextureを追加する方法>

まず以下の実装を作成します。

World Aligned Textureノードを使用しています。

これの使用方法は忘れてしまいました。

Blogを見直したら忘れたと言うよりまだ勉強してないNodeでした。2022-03-07のBlogを見直すと

と書かれていました。World Aligned Textureノードに関しては後で勉強します。

この結果にMask(r)ノードを追加してResult Nodeにつなげると以下の様になります。

この模様を影だけに適用出来る様にします。

以下の実装を追加します。

この部分は良く分からいです。後で考えます。

結果です。

うーん。凄い。

<Characterの影を直す>

Characterの影を見ると以下の様に2つの影が交差したようになってしまっています。これを直します。

まずCharacter BPを開いてMeshを選択して

Render Custom Depth Passを探します。

Render Custom Depth PassにCheckを入れます。

これはCustom Depth を使用するためのCheckですね。

Post ProcessのMaterialに戻ります。

以下の実装を追加します。

この実装が何をやっているのか正直全く分かりません。後で検討します。

これをResult Nodeに繋げると以下の様になります。

あー。Characterの部分だけ抜き出しているんですね。

そして以下の部分に繋げます。

これだと影のPatternの影響が無くなる訳ですね。

結果です。

はい。無くなっています。

うーん。ここは影の形は欲しいですね。まあ今はこの事は考える時ではないですが。

<Outlineの生成>

やっとOutlineの話に来ました。このTutorial、こんなに内容が濃かったんですね。

ここは実装方法をまとめるだけにしておきます。

それぞれのNodeの機能やOutlineの作成方法の理論については実装しながら、もしくは実装した後で勉強する事にします。

この実装を以下のLerpのAlphaに繋げます。

結果です。

奥の方がOutlineが重なって真っ黒になっています。

これを直すのに何かの新しい実装を追加するのかと思いましたが、以下のParameterを弄っているだけで

以下の様になりました。

うーん。単純に凄いです。

<Landscape のMaterial

以下にLandscapeのMaterialの実装を示します。

あんまりしっかり読んではいませんがそんなに難しい箇所はないと思います。

砂粒みたいな点々が所々にあった気がしますが、それはこの中では実装されていないみたいですね。

後、忘れていましたがResult Nodeの設定でFully RoughにCheckを入れます。

<Foliageに使用されているStatic MeshのMaterial

Foliageに使用されているStatic Meshの

Materialの実装についてです。

Simple Grass Windノードは使用した事がないですね。

これも後で自分で実装する時に確認します。

こんなPreviewになっています。

うーん。

このタイプのMaterialはまだ実装した事ないですね。この辺もまだまだ沢山勉強する必要がありますね。

<Rim Glow Effect

今度はRim Glow Effectを追加するそうです。

実装部を以下に示します(赤線で囲った部分がそうです)。

下半分は空を抽出するのに使用した実装と同じです。

これです。

これでRimだけ光るんでしょうか?

良く分かりません。

結果です。

何も変化していません。

Rimを光らせるためには更にもう一工夫が必要です。

それは以下に示した様にSaturate ノードの後にPowerノードを足す事です。

結果です。

変わっていません。

Unreal CG氏、ここで実装方法に間違いがあった。直しますと言って、以下の実装にかえてしまいました。

でもこの実装だとRimが光るんじゃなくて、空の部分の色が変わるだけじゃないんでしょうか?

結果です。

やっぱり空の色が変わっています。

いや、空の色だけじゃなくて遠くのStatic MeshやLandscapeの色も変わっていますね。

うーん。

これも実装する時に何でこうなるのか確認します。

<Beef Saturation Effect

まず以下の実装を作成します。

これをResult Nodeに繋ぐと以下の様になります。

おお、凄い。

これを以下に示した方法で繋ぎます。Lerp ノードのAlphaに繋がっています。

結果です。

すっごい綺麗です。

3.2 Toon Shader & Custom Shadow - UE4 Postprocess Tutorial [2]の勉強方法について

来週からToon Shader & Custom Shadow - UE4 Postprocess Tutorial [2]の勉強を始めますが、思っていた以上に盛り沢山な内容です。

最初は取りあえず全部実装する所から始めます。

それで知らないNodeの機能を調べます。

World Aligned Textureノードに関してはBen Cloward先生のTutorialであるWorld-Aligned Textures - UE4 Materials 101 - Episode 22 [3]で解説されています。これで勉強します。

Scene Textureを組み合わせて色々な影絵を作成しています。

これによって画面上のある部分だけにPost ProcessのEffectを掛ける事が出来る訳でPost Processの肝な気がします。

この辺はしっかり理解したいと思います。

Post Process以外のMaterialに関する勉強もやります。この中で最も知らない実装は重複しますが、World Aligned Textureノードです。

Outlineに関しても別枠で勉強します。

まとめると

  • 取りあえず実装する
  • 知らないNodeの機能を調べてまとめる
  • Scene Textureを組み合わせて作成する影絵のやり方を勉強する
  • Post Process以外で使用されているMaterialの実装についても勉強する
  • Outlineの作成方法について勉強する

となりました。

うーん。

こんなの4回位の勉強じゃ終わらないですね。8回位必要そうです。

4.RPGStoryの改善

元々、この章はRPGのStoryを作成、検証するためのものでした。それがなぜかMap1のBugを直すための章になっていました。今週からはこの章ではStoryを考えて、別な章でBugを直す事にします。

4.1 Storyについての考察と検証の続き

Spy x Familyの第2話はどう直すべきだったのか>

この話は来週の前文にでも書こうと思った話題なんですが、面白い話とは何かを考察するのに絶好の手掛かりなのでここに載せる事にします。

Spy x Familyの第一話は、世界中で話題になって評価で言えば10点満点で30点位の怪物級の出来だとの評判でした。

第2話もかなりの高評価でした。が、私はかなり不満な点がありました。それは偽装結婚の理由にリアル感がないからです。普通のOLが偽装結婚なんか絶対しない訳で、どうしてヨルが偽装結婚しなくちゃいけないのかが良く分からんかったです。

しかもロイドは疑うのが仕事のSpyです。偽装結婚を承諾するOLがオカシイと疑わないのが凄い不自然に見えます。

又、ヨルはアーニャが孤児である事は知っているんですかね。アーニャが孤児でしかもロイドが最近引き取った事を知ったらヨルもロイドを疑うと思うんです。

その点第一話の孤児院のシーンは、一瞬で「あっ。この孤児院はやべーとこだ。一般常識は通じねーとこだわ。」と感じさせて、子供を犬猫のように書類一枚で引き取ってもリアル感がそこなわれる事は無かったです。その後で、実はアーニャが超能力者でした。とぶっこまれても「ふーん。」でお終いでした。

この一話の爽快感から推測すると「普通のOLが実は殺し屋でした。」とぶっこんでから、更に「偽装結婚しないといけなくなりました。」とやるから不自然に感じたと思うんです。だって人を殺しても捕まらない人が偽装結婚しないといけない理由って、普通じゃ考えらないです。

ので、普通のOLですが偽装結婚しないといけなくなりました。としてから実は殺し屋もやっています。にすれば第一話の爽快感のまま進めた気がします。

ただし世界的に言って偽装結婚ってのは国籍を手に入れるためにやるんです。これって結構重い話になってしまいますよね。

だから国籍無い事を隠して公務員で働いていたけど同僚が国籍がない事がばれて逮捕された。自分が逮捕されないで公務員を続ける為には偽装結婚するしかない。みたいなお話が最初にあったらリアル感が失われなかった気がしますが、それがこの作品に合うかどうか別問題で、そこは私には分かりません。

RPGのStoryはどうやって作成すべきなのか?>

大ヒット作品の考察は簡単なんですが、私のRPGを面白くするStoryについて考えるのは簡単じゃないんです。最初からつまらない。毛糸のEffectを見せた母親に、金の切符を探すなんてつまらない。徳川埋蔵金を探す話に変えた方が良いと言われてしまいました。

頭に来ましたが、正直に言うとそっちの方が面白いなとも思ってしまいました。

2022-01-10のBlogからStoryについての検証を始めました。そして2022-01-17のBlogでおばあちゃんの家に行く話を考えたんですが、完成したら全く面白くないので削る事にしたんです。三カ月も無駄にしてしまいました。作る前は、これ以上面白い話はないと思っていたのに、実際にGameに追加したら全然ダメでした。

何で駄目なのかって考えたんですが、分かりました。大ヒット作品の話って誰にとっても興味深いんです。所が、金の切符を探す話は誰も興味がない話なんです。

宮沢賢治銀河鉄道の夜の結末を変える話はそこそこ興味深いですが、そっから深堀出来なかったです。

例えば、銀河鉄道の夜の主人公の名前はジョバンニですが、これの英語名はGiovanniです。これってjojoの第5部の主人公の名前、Giovannaと一字違いなんです。荒木先生は東北出身ですし、宮沢賢治銀河鉄道の夜の主人公とJojoの主人公を引っかけて描いている可能性はかなりあると思います。こうやって深堀出来ればもう少し展開が開けたかもしれませんが、無理でした。

深堀出来なかった私のPrologueは、宮沢賢治銀河鉄道の夜の結末を変える話が主じゃなくて、宮沢賢治銀河鉄道の夜の結末に怒った少年が主になってしまったんです。

それで興味が無くなってしまったんです。

本の結末に癇癪起こす少年の話は全く興味を引かないですよね。これが文学少年が考えに考えてやっぱり宮沢賢治銀河鉄道の夜の結末は変えるべきだ。となったんだったらまだ話が違ったかもしれません。

更にあのPrologueと今のRPGの接点がないんです。

今のRPGは中世ヨーロッパ風の世界観で作成されています。それと神社は全く合わないです。銀河鉄道の夜に出て来る、ジョバンニとかカムパネルラって洗礼名なんです。彼らはキリスト教徒だったんです。別にカッコイイからその名前を使っていた訳ではなかったんです。その辺から深堀出来たら、今のRPGの中世ヨーロッパ風の世界観とつながったかもしれません。

そこまで掘れないので諦めたんです。

しかし名作とRPGを組み合わせるアイデアは使えると思います。アーサー王の聖杯を探す話とRPGを組み合わせる話はまだ活けるかもしれません。

Spy x familyの話だったらもっと色々出て来ますが、私のRPGについてはもう何も出て来ません。

これは私自身が私のRPGのStoryに興味が出ないからです。

Spy x familyが面白いのは魅力的な3人のキャラがいるからです。この3人のキャラが人を集めます。

分かりました。

7つの大罪を出しましょう。それぞれの大罪を背負ったキャラを作ります。これで少しは私のRPGに興味が出るはずです。

7大天使も出しましょう。これもそれぞれのキャラが魅力的なはずです。

12使徒も出しましょう。これも面白くなるはずです。

悪魔の軍団も出しましょう。

はい。決めました。

この世界は天使と悪魔が別次元で戦争でしています。悪魔の手下の人間で悪魔から超人的な力を授かった7人がいます。彼らは7つの大罪と呼ばれていて世界中で破壊の限りを尽くしています。ただし天使から特別な力を授かった12使徒と呼ばれる12人の人達もいます。

町では天使軍は悪魔の軍団に大敗をきっして何人かの大天使が捕虜になったと言う噂が流れています。

Playerが操作するキャラはこの世界を旅して金の切符を探します。

これなら少しは興味が出て来るかもしれません。

5.Map1Bugの直し

今週は以下の2つを直して行きます。

  • 宿屋の主人が落ちて消えている
  • 武器の隠し場所の前にいる老人のセリフを作成

それではやって行きます。

5.1 宿屋の主人が落ちて消えている

宿屋の主人をSub Levelの3_5に移しました。

これでLandscapeが生成される前に宿屋の主人が生成される事はないはずです。

5.2 武器の隠し場所の前にいる老人のセリフを作成

このセリフを直す前に、RPGの物語の根幹を確認する必要があります。

先程の「4.2 Storyについての考察と検証の続き」で一寸だけ検証しましたが、物語の内容が決まっていないとこのEventが面白いのかどうかも変わって来ます。

まずこのEventは、最初の村についた主人公が、武器を買うお金が無くて薬草を集めて道具屋に売るバイトを始める事から始まります。

そのまま薬草を集めても良いですが、この老人と会話すると、老人のいる場所からこの山を登ると武器の隠し場所に到着する事が出来き、わざわざ薬草を集めなくても武器が手に入ります。

つまり

  1. Monsterと戦うには、武器が必要
  2. 武器を買うお金を集める必要がある
  3. 村の周りに生えている薬草を集めて道具屋に売ってお金を貯める。(必要な努力:100
  4. 村の周りに生えている薬草を集めていると山のふもとに佇む老人を発見する。
  5. 老人がここから山に登ると武器が隠してある場所にいける。と教えてくれる。(必要な努力:1

の流れがあります。

勿論、3の薬草をひたすら集めて武器屋で武器を買う事も可能で脳筋な人でも最終的には武器が手に入る仕組みになる予定です。

このEventが面白いかどうか、本筋のStoryから外れていないかについての検討を先にする必要があります。

「4.RPGのStoryの改善」で来週まとめようと思っていた内容ですが、先にここでやってしまいます。

5.3 Storyの確認

このRPGの大まかなStoryは以下の様に考えています。

<Prologue

Playerは最初、赤い帽子の魔女に金の切符を探して欲しいと頼まれます。

<第一章>

承諾すると月想界に送られます。その月想界は神話の時代に神と悪魔の戦争で次元が破壊され、幾つもの小さな星屑世界で構成される壊れた世界です。Playerは最初、全世界が100m^2しかない小さな星屑世界に飛ばされます。ここでPlayerは

  • 別の星屑世界に移動するためには銀河鉄道に乗る必要がある事
  • 銀河鉄道に乗る為には切符が必要である事
  • 切符の種類によって行ける場所が違う事
  • 金の切符は誰も見た事が無い事
  • Monsterに捕まると幻想界に連れて行かれ、そこでそのMonsterと戦う事になる。
  • Monsterと戦闘になった場合、勝てれば星屑世界に戻ってこれるが負けた場合は死ぬ事

などを学びます。

<第二章>

地図と赤い切符を手に入れたPlayerは別な星屑世界に移動出来るようになります。

大変、荒涼として世界で人はほとんどいません。Monsterが徘徊しているだけです。

老人がいるので話しかけると、

  • 100年ぶりに人にあったと言います。
  • Player以外はこの星屑世界に来れない事を伝えます

などを知ります。Playerは何も存在しない荒廃したこの星屑世界を赤い世界と呼ぶ事にします。

<第三章>

金の切符の手掛かりは全くありません。

青い切符を手に入れたPlayerはある王国につきます。その王国では、王女がドラゴンに誘拐されてしまい王様や民が途方に暮れていました。今まで沢山の勇者がそのドラゴンに挑みましたが傷をつける事すら出来ませんでした。

噂では、伝説の剣があればその悪魔に傷をつける事が出来ると。

Playerは伝説の剣のありかを知る賢者を探します。

やっと賢者を見つけたPlayerは賢者から伝説の剣は悪魔に破壊されて既にこの世に存在しない事を聞かされます。

第四章

黄色の切符を手に入れたPlayerは地図から砂漠の世界に移動します。

何とその世界にある砂漠の国の王は破壊されたと言われていた伝説の剣を持っていました。

Playerはその王様が与える試練をクリアする事でその伝説の剣を借りる事に成功します。

<第五章>

伝説の剣を持って青い世界に返って来たPlayerはドラゴンを倒して王女を救助する事に成功します。

お礼にその王女は、この王国に伝わる秘密の木をPlayerに与えます。この木は砂漠でも育つ事が出来き、あっという間に砂漠を緑の大地に変えてくれる力を持っています。

Playerは砂漠の国の王様に伝説の剣を返しに行くついでに、砂漠の王様にこの木をプレゼントします。

そこで、ある事からPlayerはこの砂漠の世界が青の世界の千年前の世界だと気が付きます。

何と、Playerは地図を使ってワープすると場所だけでなく時間も超えていたんです。

それでは何もない赤い世界は。

赤い世界にワープしてその世界にいる老人と話すと何と、青い世界の千年後の世界だと言う事が分かりました。千年後には人類は全て滅んでしまってたんです。

その老人の話を聞くと千年前にある事件が起きて、その時に人類はとんでもない愚かな選択をしてしまったそうです。それが引き金となって人類は滅んだと言っていました。

第六章

その老人は千年前の事件について語ります。

ドラゴンに守られた小国がありました。

悪魔は何とかしてその国を滅ぼそうとしていたのですが、ドラゴンが強くていつも失敗していました。そこで悪魔は一計を案じて伝説の剣を盗みます。その剣をある人間に渡して、あのドラゴンは人間を守っているふりをして人間を苦しめているのだ。と洗脳します。そして周りの国をそそのかしてまたその国に戦争を仕掛けます。

そしてその小国の王様にドラゴンを差し出せば戦争は停止してやると言い放ちます。

戦争に負けそうになっていたその小国の王様は結局ドラゴンを差し出してしまいます。

ドラゴンが処刑されそうになっているとドラゴンを助けようとする人達と戦争になります。ドラゴンをもう少しで助けられそうな時、伝説の剣を持った人間が現れてそのドラゴンを殺してしました。

ドラゴンが死んだ後、ドラゴンを助けようとした人達も全員殺されました。

そしてドラゴンが守っていた小国もその後、滅ぼされました。

その後、更に戦争次ぐ戦争で沢山の国が滅ぼされました。

もう悪魔に逆らえる国や人はいなくなりました。

そして人類はその老人を残して全滅しました。

その老人は千年かけて銅の切符を作ったと。言ってそれをPlayerに託しチリとなって消えます。

第七章

同じ事件が現在進行中で青の世界に起こっています。

Playerはこのままではドラゴンを助ける事は出来ないと悟り、赤の世界の老人から貰った銅の切符を使用して天使の国へ行きます。そこで天使の助けを求めますが、天使は悪魔との戦争につかれて誰も手伝ってくれようとしません。

たった一人の天使だけが同意して青の世界にやって来てくれます。

そこで赤の世界の老人が語ったのと同じ様に、ドラゴンを処刑しようとして戦争が起きます。

Playerが連れて来た天使のおかげで善戦しますが、ある事が原因で天使は封印されてしまいます。

そして伝説の剣を持った人間が現れドラゴンを殺してしまいます。

この世界でも同じ事が起きてしまったのです。

<第八章>

封印から解かれた天使はまだ望みがあると言います。

その天使は今から銀の切符を作成すると言います。銀の切符は死者の国へ行く事が出来るそうです。そこで死んだドラゴンに会って生き返らせる事が出来るそうです。

でも銀の切符を作成するのは千年後になるといいます。

そして必ず1000年後までに完成させるので、1000年後に取りに来てといいます。

Playerは赤の切符を使用して千年後の世界へいきます。

赤の世界にいるとそこには天使がいてPlayerに銀の切符を渡します。

<第九章>

青の世界に戻って来たPlayerは銀の切符を使用して死者の世界へ行きます。

そこでドラゴンにあってドラゴンを生き返らせます。

今度はドラゴンは苦戦はしたものの何とか悪魔を倒す事に成功します。

Epilogue

悪魔を倒した後、Playerは赤の切符で千年後の世界へ行きます。すると、まばゆいばかりの黄金郷が現れ、沢山の人々が幸せに暮らしていました。神殿内の黄金のドラゴンの像をPlayerが眺めていると巫女が現れ、千年前の言い伝えにより、貴方に渡すものがあると言います。

受け取りに行くとそこには金の切符が入っていました。

<まとめ>

こんな感じのストーリーを考えています。

本読むのが趣味だった私はちょっと本気だすと結構、簡単に物語を作れてしまいます。ここから推敲したり、辻褄を合わせたり、ゲーム制作において難しい部分のストーリーを変更したりする予定です。

5.4 RPGの名前

RPGの名前は「ジョパンニと赤い帽子の魔女」と名付けましたがピンと来ません。大体この物語で赤い帽子の魔女は最初と最後しか出て来ません。主人公の名前がジョパンニである理由も弱いです。「金の切符」とかの方が分かり易い気がします。

RPGの名前は「金の切符」としましょうか。

. Open Worldの検証

6.1 先週のまとめの確認

先週は色々ゴチャゴチャ書いたせいで訳わからなくなっている部分が多々あるので、それをここで整理し直します。

Open Worldは最終的にはUE5でWorld Partitionを使用して作成します。

しかしその準備段階として16km^2位のWorld Compositionを使用したOpen Worldを作成します。

この16km^2のOpen Worldの作成において先週までの勉強で分かった事をまとめ直します。

<Sub Levelの大きさ>

Sub LevelのLandscapeの大きさは1009m^2が最適のようです。ので16km^2のOpen Worldを作成するならheight mapを16x16枚作成するのが最適です。

更にHeight Mapの大きさは1009x1009 pixelが最適なようです。

<Height MapのImportの方法>

Height MapはSub Level毎にImportする事が出来ます。

そのやり方はEnable World Compositionにチェックを入れて

LevelsのCreate Newを選択します。

名前を入力した後で、1009x1009のLandscapeを作成します。

以上でSub Levelを作成する事が出来ました。

このやり方はSmart Poly氏がそのTutorialで紹介していたやり方とは違いますので最適なやり方ではないとは思います。

しかしSmart Poly氏のOpen Worldを作成するやり方は、

Height mapではない何かを一番最初にImportしていてそれが何なのか、Height Mapしかない場合はどうすれば良いのかについては全く分かりません。

6.2 How To Make A Multi-Biome Open World Map - Unreal Engine 4 [Part 1] [3]を見る

こんなTutorialがあるの先週まで気が付きませんでした。これを見てみます。

まずRaw 16 fileで出力しているのが何なのかが分かりました。

何とこれらがHeight Mapでした。

え。それならその後に出力している.pngのFileは?

何と、それらはTexture Mapと言ってMaterialのLayerを指定するTextureでした。

Layerの指定ってTextureからも出来るんですね。初めて知りました。

World Machineの設定についてもかなり詳しくしていました。

今聞くとそれなりに理解出来ますね。

一つのTileの大きさを8km^2としてPixelのサイズは2017x2017です。

その大きさをUE4の中で再現するためには

800000cm ÷2017 = 397.2

つまりSizeを約400にセットする必要があります。しかしSmart Poly氏は100のままでImportしていますね。

これだとUE4内でのサイズは4分の1になってしまうと思われますがどうなんでしょう?

Landscapeのサイズが書かれていました。

64の4分の1だと16、88を4で割ると22です。18と言う数字はHeight Mapが8枚じゃなくて9枚だとぴったしです。

後でImport したSub Levelを表示していますが横のタイルを数えると9枚になっていました。

Landscape用のMaterialの作成の部分は特に学ぶ事がないのでSkipしました。

結構理解出来ていますね。

7.Gaeaの勉強

7.1 Gaeaの最新版について

Klaus氏が以下の発言をしていましたが、これって有料版の事何でしょうか?

もし無料版でもTileが作成できるのならすぐにでも作成したいです。

後、先程のTextureを使用してLayerを指定する方法ですが、Gaeaでそれをどう作成するのか知りたいです。

Klaus氏のWhat's New In Gaea 1.3.1 Bleeding Edge Version? Build Truly Large WORLDS With 4 trillion pixels! [5]をみたら以下の部分でTileの数やResolutionのサイズを調べていました。

TutorialでやっているようにTiled Build(Preview)を選びます。

その下のResolutionとNumber of Tilesで確認します。

無料版でもResolutionを2048にしたり、Number of Tilesを1以外したり出来ますね。

うーん。何か出来そう。

でもそれ以上の部分はまだ良く分かりません。

やっぱり地道にTutorialを勉強して行きましょう。

7.2 A 9-minute introduction to color production in Gaea [6]を勉強する

軽く全部見ました。

このTutorialは先週作成したTerrainにどうやってTextureで色を付けるのかについてのTutorialのようです。

付けた色をExport出来るのかどうかが知りたかったんですがそれの解説は無かったです。

軽くやっておきます。

<MaskとData Mapを作成する>

Colorを着ける為には、まずMask とData Mapを作成する必要があるそうです。

Slop ノードを追加しました。

何でSlopノードと思いましたが、以下に示した様にSlopノードはDataの中にあるのでData Mapの一種なんでしょう。

結果です。

あれ、2Dになってしまいました。

Slopの設定を以下の様にしました。

Slopがきつい所だけ選択するみたいですね。

結果です。

これ見ると黒い所が、Slopがきつくない所のようですね。

次にSat Mapノードを接続しました。

Sat Mapノードは数百のGradientの色を保持していてその色をSlopに追加します。

結果です。

Maskした部分だけ色付けするのかと思ったんですが違うみたいです。

TutorialでViewの表示を3Dに戻す方法について解説していました。

Erosionノードを右ClickしてPin For Colorを選択します。

所が私のにはそれが無いです。

試しに色々選択したらPin As Underlayを選択したら3D になりました。

更にもう一個Sat Mapノードを追加しました。

どうせなんで、全然違う色を選択しました。

今度はMixerノードを追加しています。

このノードもありません。代わりにCombine ノードを追加してみました。

Parameterを見る限りではCombineノードはMixノードの進化版に見えます。

結果です。

あんまり綺麗な色ではありませんが、2つの色が混ざっているのは分かります。

今度はErosionノードにsoilノードを追加しました。

結果です。

こっちも同じようにSat Mapsノードを追加しました。

分かり易い色を選びました。

今度はMaskノードを使用して2つのSat MapsノードをMixします。

Tutorialでは以下の様にErosionノードからMaskノード、Blurノードに繋げてMixerノードに繋がっています。

しかし私のVersionのMaskノードはPrimitiveでErosionノードの出力をInputする事は出来ません。

うーん。別にErosionノードに接続しなくても出来たみたいです。

Maskの設定は以下の様にしました。

これならMaskの部分で色が変わっているのかどうか直ぐに分かるでしょう。

結果です。

どうみてもMaskが聞いています。

更に全部、Combineしてみました。

結果です。

適当な色を選択した割にはそれなりに見れる色になっています。

さすがGaeaです。

この後もTutorialでは微調整を色々していますが、色塗りの基本は理解出来ましたのでここで終了します。

どうもこの色を色々な方法で混ぜるのはphoto shopにある方法と同じらしく、Photo Shopでそういう加工に慣れている人にはとても馴染みの作業みたいです。

まあ、慌てずゆっくり勉強していきます。

8.雪山のMapの作成

8.1 雪山LandscapeのExport

先週までで一応雪山のLandscapeが完成したのでRPGのProjectにExportします。

で、Epic Game Launcherを起動させようとしたら開かない。

こんなのUE4を使い始めてもう数年になりますが初めてです。

PCを再起動しても駄目。

これはMalwareにでも感染してしまったのか?と焦りました。

一応、Epic Game Launcher does not openで検索したらTask ManagerからLauncherを消してもう一回開いてみる。と書かれていたのでそれを試しました。

今度は開きました。

あー。良かった。

こういう予想外の事態って原因が実は大したこと無かったとしても結構焦ります。

こういう大したことないけど焦る事って記録しておくの凄い重要だと思いますが結構書かない人が多いですよね。

うーん。

今週は、Exportは止めておきます。予想外の事態が起きた時に対応する気力がないかもしれない気がします。

代わりに、雪のEffectを追加します。

8.2 雪のEffectの追加

前に作成した雪のEffectが見つかりません。

やっと見つけたらNiagara_Studyと言う名前のProject内で作成していました。しかもこのProjectのVersion、4.26で、多分そのまま4.24のProjectにExportすると動かないです。

でもCascadeなのでひょっとすると動くかもしれません。

試してみます。

駄目でした。

仕方ないですね。4.24で作り直します。

2021-08-09のBlogとそのBlogに載っているDean Ashford氏のUE4 - Tutorial - Snow Particle System [7]、更には前の実装を参考にして作成します。

まずEffect用のMaterialを作成します。

前作成したやつの丸コピーです。

2021-08-09のBlogを読むと

と書かれていてました。がこの部分の実装の検討は当時はやらなかったと思います。

来週やる事にします。

今度はCascadeを作成します。

最初にこのMaterialを使用したEmitterを作成します。

実装の逐一の細かいやり方は2021-08-09のBlogと同じです。

結果です。

次のEmitterを作成します。

このEmitter用のMaterialをSnow_Mから作成します。

次はSnow FlakeのEmitterを作成します。

Snow Flake用のMaterialを作成します。

前に作成した実装から丸コピーしました。

結果です。

Emitterを作成してそのEmitterにこのMaterialをセットします。

Emitterは前の二つのEmitterをDuplicateしただけでした。

最後にこのSnow FlakeのUnlit版のEmitterを作成します。

これで完成です。

Level上に降らしてみました。

8.3 雪のEffectをThird Personに追加する

この雪のEffectはキャラの周りだけ降ってくれれば良いので、Third Person BPに追加します。

結果です。

想像の10倍位降っています。

Characterが走ると雪がこちらに向かってきます。

雪はLandscape全体に降らせる設定にしてCharacterの周りだけRenderingsするようにする方法も出来そうです。

こっちのやり方も知りたいですね。

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

9.1 直す箇所を調べる

最も直さなければならない部分が分かりません。兎に角、もう何回か遊んで直す箇所を調べます。

Monsterを召喚するPhaseです。

始めてみるPlayerはここで何をすべきが良く分かりません。セットするBoxがどれなのかも不明です。

戦闘中の画面です。

どのMonsterが左翼、中央、右翼側に展開されているのかが不明です。また対戦相手のどのMonsterと戦うのかも不明です。

召喚されたMonsterが棒立ちなのでAnimationを入れて欲しいです。

Stage 2です。

Stage 2が始まる前に一個Phaseが欲しいですね。戦闘の結果とかの表示が欲しいです。

競技場が凄い寂しいです。

後、空に何か欲しいです。

9.2 Monsterを召喚するWidgetを直す

以下のWidgetを見やすいように改良します。

以下の様に変更しました。

こんな感じです。

決定ボタンは3つの壺がMonsterで満たされた時に表示されるべきです。がそれは来週直します。

9.3 戦闘画面を直す

戦闘画面に表示されるMonsterの表はどれが右翼、中央、左翼なのか分かりません。

直します。

PlayerのTurnの場合のみ直して見ました。

見やすくなっていますが、もう少しデザインが良くならんかと思いました。

一寸デザインを考えます。

結果です。

前よりはマシですかね。

これからはこんな感じで改善させていきます。

10.Blenderの勉強

また復習からやっていきます。

10.1 復習

<Selection Method

大体は覚えていました。AltかAlt + Ctrlを押しながらやるとどれかは正解しますね。

2022-02-14Blogの復習>

こっからは覚えてるかどうかより一通り復習する感じでやっていきます。続けていればいつか必ず覚えられますから。

全部復習しました。

まあ流石にほとんど覚えていました。

2022-02-21Blogの復習>

全部やりました。それなりに覚えていました。

2022-02-28Blogの復習>

木を作りました。

段々、3dの造形に慣れて来ました。

上記の3D は一分の向きからだけでなく

色々な方向から見てもそれなりに見える形に作成されています。

2022-04-03Blogの復習>

雪が被っている葉を作成しました。

Ctrl + hで選択した面がHide出来るはずですが、以下の表示が現れて出来ません。

Tutorialを見直したらCtrl + hじゃなくて単なるhでした。

今度は出来ました。

Loop Cutで斜めにカットされたEdgeをまっすぐに直す方法も試してみました。

Knifeも試しました。

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

今度は石を作成するそうです。

<Subdivision Surface Modifier

まずObject Modeに戻ります。そしてObjectを選択した状態でctrl + 2を押します。

Cubeが球に変化しました。

これはSubdivision Surface Modifier が追加されたからです。

スパナの所を見ると

確かに追加されていました。

Objectを選択した状態でctrl + 2だったのでSubdivisionの数が2ですが1~5のどれでも選択出来るそうです。

試しにctrl + 5をやってみました。

Tutorialの言っている通りに出来ました。

Tutorialではこの後Applyボタンを押していますが私のModifierにはそのボタンがありません。

下向きの所にApplyがありました。それを選択したら以下の様に丸いままですが

Modifierは消えました。

このまま行きます。

今度はSubdivisionの値を4にしました。

Vertexを選択してO keyを押してその後でgを押して移動させるとCircleが現れそのCircle内のVertexが動きます。

<Decimate Modifier

今度はObject Modeに切り替えてからこの石を選択してModifier Decimateを追加します。

DecimateのRatioの値を下げると石のMesh数が減ってまたLow Polyに戻ります。

<Flatten

Edit Modeに戻した後、Faceを選択して

F3を押してFlattenとタイプします。

あれ、ないです。

調べたらWhat happened to “Mesh > Flatten” in 2.92 [9]で全く同じ質問をしている人がいました。

回答がこれでした。

他の回答もあったのですが、これが一番分かり易そうだったのでこれをやってみます。

EditからPreferenceを開いてAdd-onsに行きMesh: LoopToolsを選択しました。

すると右Clickで現れるbox内にLoopToolsが追加されます。そこからFlattenを選択します。

結果です。

平らになりました。

何度か試したら以下の様になりました。

<Scalingを使用したFlatten

先程と同じように選択します。

S + Y でScalingをすると

これでもFlattenが出来ます。ただしこのやり方では地面に対してまっすぐになってしまいます。

Commaを押してNormalを選択すると

選択した面のNormalの平均値に対してScalingするようになります。

以下に示した様にScalingの矢印がGlobalな軸に対して斜めになっています。

これでS + YでScalingします。

結果です。

実際はS+Yした後、少し曲がっていたのでS+Zもしました。

まあでも地面に対して斜めのままFlattenする事が出来ました。

Tutorialの説明ではS + Zを押した後に0を入れるとFlattenになるとありました。これは来週試します。

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

11.まとめと感想

今週は、RPGの最も重要な要素であるStoryにかなり入り込む事が出来ました。粗削りですがこれからもっと良くなっていくと思います。Storyが長すぎるなら今回のGameは3章まででもいいかもしれません。

12.参照(Reference

[1] CGHOW. (2022, April 10). Wool Fabric in UE5 Niagara Tutorial | Download Files [Video]. YouTube. https://www.youtube.com/watch?v=wT7y9J49mQs

[2] Unreal CG. (2020, June 25). Toon Shader & Custom Shadow - UE4 Postprocess Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=mx_AvrZK3TA

[3] Cloward, B. [Ben Cloward]. (2020, April 16). World-Aligned Textures - UE4 Materials 101 - Episode 22 [Video]. YouTube. https://www.youtube.com/watch?v=pXOknekvmwE

[4] Smart Poly. (2020, July 2). How To Make A Multi-Biome Open World Map - Unreal Engine 4 [Part 1] [Video]. YouTube. https://www.youtube.com/watch?v=3VDT9Ov62SQ

[5] Klaus [klaus]. (2022, April 20). What’s New In Gaea 1.3.1 Bleeding Edge Version? Build Truly Large WORLDS With 4 trillion pixels! [Video]. YouTube. https://www.youtube.com/watch?v=_7nodFIIjNE

[6] quadspinner. (2019, March 1). A 9-minute introduction to color production in Gaea [Video]. YouTube. https://www.youtube.com/watch?v=4AFDXxYlQMg&list=PLEimej2Avz9mW2zc2tQMxJ9GNw_q28SDD&index=2

[7] Ashford, D. [Dean Ashford]. (2017, January 18). UE4 - Tutorial - Snow Particle System [Video]. YouTube. https://www.youtube.com/watch?v=sw1HAmAnYFQ

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

[9] Michaelws, M. (n.d.). What happened to “Mesh > Flatten” in 2.92. Blender Artists Community. Retrieved April 24, 2022, from https://blenderartists.org/t/what-happened-to-mesh-flatten-in-2-92/1289673

 

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

f:id:kazuhironagai77:20220417214323p:plain

<前文>

前文に書こうと思っていた内容の事実確認がまだ出来てないので、今週の前文は別な話を書く事にします。

私はBiden 大統領が就任した時「アメリカの民主党が本当にやる気があるなら学生ローンの免除をやるはずだが絶対にそれはやらない。だから民主党は国民の信頼をいずれ失う。」と予測しました。

AOC氏が確か言ったと思いますが、学生ローンの免除にかかる費用は、リーマンショックの時に、政府がウォール街の借金の免除した額の僅か10分の1だそうです。

こんなのやろうと思えば何時でも出来ます。さらにこの件に関しては共和党からの妨害も全くないです。

でもやらない。何故なら民主党にとって重要なのはウォール街からの献金で、アメリカ国民なんかどうでも良いからです。

アメリカは日本以上の学歴社会で、貧乏から抜け出すほとんど唯一の手段が大学で勉強して高学歴になる事です。しかし大学に進学する為にはお金が要ります。

はい。

親が貧乏な家に生まれた子はその時点で詰んでいるんです。

アメリカのジョークなのか、本当の話か知りませんが、昔、こんな話を聞いた事があります。

ハーバードの学生が「IQを決定すると思われる遺伝子を特定出来そうで、これが分かったらIQの高くなる遺伝子を持っている子供には医者や弁護士になるための特別な教育を初めから与える事が出来るから、予算くれ。」と言ったんです。そしたら返答が「そんなの遺伝子なんか見なくたって郵便番号を見たら分かるだろう。」って。

これは日本人には何が面白いのか分かりにくいですが、アメリカは収入によって住んでいる場所が全く違うんです。高収入の人達が住む場所は、公共施設も充実しています。更に、アメリカでは朝、車で通勤する訳ですが、向こうはサマータイムがあるので通勤する時って大抵日の出の時間に当たるんです。高級住宅地から出勤すると太陽を背にして車を運転する事になります。運転してても特に何とも思わずそのまま会社に行けます。これが所謂、庶民の住んでいる所から出勤すると、必ず太陽に向かって車を運転する事になります。もうサングラスは絶対必須で、光の中を走ってるんじゃないかって錯覚する位です。もう朝からストレスマックスになります。

中流階級の住んでいる所ですら、高級住宅地と比較するとこんなに差がある訳で、まして貧乏な所に住んでいたら身の安全すら保障されない可能性すらあります。そんな所に生まれた子供は麻薬の売人になるくらいしか選択肢がないのが事実なんです。だから、その子供が弁護士や医者になれるかどうかは、遺伝子なんて調べなくても郵便番号を見たら直ぐに分かる訳です。

そんな訳で、貧乏な家に生まれた子供にとって唯一の現実的に成功する方法は、大学に行って高収入の仕事に着く事なんです。でも大学に行くにはお金が要ります。

そのために彼らは学生ローンを借りて大学に行く訳です。

低所得者層の子供が麻薬の売人になるか大卒のサラリーマンになるかは、その地域の治安や税収に大きく影響します。学生ローンの免除をする事は、ウォール街の借金を免除するより遥かに社会に貢献します。

こんなのは誰が見ても分かり切っています。

しかしアメリカの民主党はやらないんです。

所が、最近、私が聞いた話だと、バイデン大統領が、全額ではないですが、学生ローンの免除をやる可能性があるみたいなんです。

今度の選挙の目玉になる政策なので、直前までは秘密になるらしいですが、やるのは間違いないみたいなんです。

はぁー。

と思いましたよ。

これって、私見ですが、UkraineのZelensky大統領のお陰だと思うんです。彼が、自分の命を賭けても自国の国民を守る発言をした時に、大統領はどれくらい国民のために働くべきかの基準が世界的に変わったんです。今回の戦争で。それ見て世界中の民主主義の国のリーダーが焦ったんです。

だからバイデン大統領も背に腹は代えられないので、学生ローンの免除をやる覚悟を決めたんです。

UkraineのZelensky大統領のあの時の発言は、世界の針路を一寸ですが良い方向に向けたと思います。まあ一寸だけですが。

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

<本文>

1.今週の予定

今週も先週と同じ予定でやって行きます。

  • Niagara: CGHOW氏のTutorialをやる
  • Materialの勉強
  • RPGStoryの改善
  • Open Worldの検証
  • Gaeaの勉強
  • 雪山のMapの作成
  • Game DesignポケモンHxHの念能力(戦闘システムの作成)
  • Blenderの勉強

World Machineの勉強は止めます。Gaeaの勉強をやる事にします。

2Niagara: CGHOW氏のTutorialをやる

先週、当分UE5のUpdateはしないと書いていましたが、やっぱりしてしまいました。動くのかどうか心配ですが、今週はそれを試す事にします。

2.1 UE5 Niagara Baker Tutorial [1] を試しにやる

Tutorialを見るとContent Exampleを開いています。

f:id:kazuhironagai77:20220417214439p:plain

UE5のContent ExampleをDownloadしてTutorialと同じようにNiagaraのMapを調べました。

f:id:kazuhironagai77:20220417214457p:plain

Niagara_Fluidsを開きます。

早速、Errorの表示が出ています。

f:id:kazuhironagai77:20220417214514p:plain

まあしょうがないです。

Tutorialではこれの右側を開いていました。

f:id:kazuhironagai77:20220417214535p:plain

開きます。

私のPCではカクカクでしか動きません。

f:id:kazuhironagai77:20220417214600p:plain

以下のBakerと言う機能を使用するそうです。

f:id:kazuhironagai77:20220417214618p:plain

以下の画面が表示されました。

f:id:kazuhironagai77:20220417214636p:plain

Bakeをすると以下の部分にTextureがセットされるそうです。

f:id:kazuhironagai77:20220417214654p:plain

試しにBakeしてみました。

以下のTextureが作成され

f:id:kazuhironagai77:20220417214712p:plain

そのTextureがセットされました。

f:id:kazuhironagai77:20220417214730p:plain

このReal timeのFluid Simulationは私のPCではSmooth に動かすのはハッキリ言って無理ですね。

今回はBakingに集中して勉強する事にします。

今度は新しいNSを作成して何かを作成するみたいです。

いつものようにFountainを追加したNSを以下の様に変更しました。

f:id:kazuhironagai77:20220417214755p:plain

結果です。

f:id:kazuhironagai77:20220417214814p:plain

更にParticle Update SectionにCurl Noise Force Moduleを追加します。

f:id:kazuhironagai77:20220417214837p:plain

Curl Noise Force Moduleの設定は以下の様になっています。

f:id:kazuhironagai77:20220417214853p:plain

結果です。

f:id:kazuhironagai77:20220417215157g:plain

これをBakeするんでしょうか?

楽しみです。

Bakerを開くと以下の様になっています。

f:id:kazuhironagai77:20220417215231p:plain

Duration Secondが4秒のままですね。

このParticleのLife timeは1秒で、EmitterのDurationは2秒です。

1秒間まるまるParticleが発生しない時間が生ずる気がします。

以下の画面に写っているParticleの位置の調整方法がずっと分からなかったんですが、

f:id:kazuhironagai77:20220417215252p:plain

CGHOW氏、滅茶苦茶簡単にParticleの位置を微調整しています。

f:id:kazuhironagai77:20220417215315p:plain

これは適当に色々やったらやり方分かるだろうと、色々試したら分かりました。

Mouseの右クリックを押しながらDrag、とWheelを押しながらDragの2つで位置の調整が大体出来ます。

Bakeします。

f:id:kazuhironagai77:20220417215333p:plain

やっぱり1秒間何も生成されない部分もBakeされていますね。

Tutorialでも設定を1秒に直してBakeし直していました。

直しました。

f:id:kazuhironagai77:20220417215356p:plain

おお。素晴らしい。

Bakeそのものは私のPCでも出来ますね。Real TimeのFluidのSimulationが無理なだけみたいですね。

このReal TimeのSimulationがどの程度のGPUならSmoothに動くのか知りたいですね。次に買うPCのGPUには3060から3080の間を考えています。3060でも十分動くのか、もしくは3080 tiでもやっぱりカクカクしたりするのか?その辺を知りたいです。

Real TimeのFluidのSimulationってFrame Per Second毎にParticleの位置を計算しているんでしょうか?

もしそうなら実際に表示されるFrameが32 FPSだったとしてもGPU内では180 FPSで計算しないとParticle同士の衝突が計算出来ないとかあると思うんです。ので結構重い計算している気がします。3080 tiでもやっぱりカクカクしたりするなら3060で良いです。逆に3060でも全くカクつかないならやっぱり3060でも良いです。3060Tiを買ったら、3070位からカクつなかったとなったら凄いShockです。

それは兎も角として、今作成したSub UVを使用してEffectを作成します。

まず今作成したSub UVを使用して、以下に示したMaterialを作成しました。

f:id:kazuhironagai77:20220417215428p:plain

こんなやつです。

f:id:kazuhironagai77:20220417215445p:plain

Tutorialだと先程、このSub UV Textureを作成したNSを分解して、このSub UVを使用するEffectを作成していますが、折角なのでSub UV Textureを作成したNSはとっておきます。

f:id:kazuhironagai77:20220417215511p:plain

DuplicateしたNSで作成します。

Render SectionのSprite Renderer ModuleとParticle Spawn SectionのShape Location Moduleの設定を変更しました。

更に、もういらないCurl Noise Force ModuleはDeleteしました。

f:id:kazuhironagai77:20220417215529p:plain

結果です。

f:id:kazuhironagai77:20220417215646p:plain

ここでTutorialではBackgroundが明るすぎるとBackgroundを変更しています。

このやり方が知りたかった!

まずWindow からPreview Scene Settingを選択します。

f:id:kazuhironagai77:20220417220331p:plain

以下のBoxが表示されるので

f:id:kazuhironagai77:20220417220402p:plain

Environmentの部分の設定を以下の様に変更します。

f:id:kazuhironagai77:20220417220420p:plain

結果です。

f:id:kazuhironagai77:20220417220436p:plain

こうやってBackgroundの色を変更していたんですね。

微調整をして以下の様にしました。

f:id:kazuhironagai77:20220417220455p:plain

Sub UVなのでRender SectionのSprite RendererのSub UVのSub Image Sizeの設定を以下の様にします。

f:id:kazuhironagai77:20220417220512p:plain

更にParticle Update SectionにSub UV Animation Moduleを追加します。

f:id:kazuhironagai77:20220417220530p:plain

結果です。

f:id:kazuhironagai77:20220417220551p:plain

こっから先が早送りで作成しているので追えません。

f:id:kazuhironagai77:20220417220608p:plain

まあ、ここまででSub UVの作成方法とそのSub UVを使用したVFXの作成方法は分かりましたので十分です。

ここまでとします。

2.2 UE5 Content Example | Niagara Fluids | Chaos Destruction [2] を見ながらNiagara Fluidsを勉強する

私のPCでは残念ながらFluid Simulationが上手く動かない事が分かったので、Content ExampleにどんなFluid Simulationがあるのか、CGHOW氏の UE5 Content Example | Niagara Fluids | Chaos Destruction [2]を見て把握しておきます。

f:id:kazuhironagai77:20220417220633p:plain

これ読むと気体と液体の両方のSimulationをやっていると書かれています。これって非圧縮と圧縮の流体を両方、Runtimeで計算出来るようになったって事なんでしょうか?

このGraphic でRuntime に流体のSimulationが出来るって結構革命的な事だと思うんですが。

次の分を読むと「Collusion、Lightingなどの設定方法についても説明します。」と書かれています。Collusionはまだ理解できますが、Lightingの計算までRuntimeでやってるって事でしょうか?

その下に書かれている4つの原則も興味深いです。

まず最初の原則ですが、全てのSimulationの原理はModuleで組まれていてBlackboxになっている箇所はないそうです。

これは勉強しがいがあります。

私は昔、液体のSimulationをRuntimeに計算する事出来ないかと思い、その手始めに、沢山の球の挙動をRuntimeでSimulateした事がありました。結局、球の挙動を計算する間隔とFrameを作成する間隔を同じにすると球同士が衝突しないで抜けてしまったりして諦めた事があります。

なのでこの辺はとても興味深いです。

次の原則ですが、Gridについて語っています。やっぱりGridを作成してSimulateしているんですね。

以下の警告が表示されています。

f:id:kazuhironagai77:20220417220653p:plain

これは私のPCのせいなんでしょうか?

多分そうでしょうね。Vertex Shader Layer Supportが無いです。と言っていますね。

<Gas Simulations

これは今、見たやつです。

一応、動く所まで自分のPCでも追っていきます。

f:id:kazuhironagai77:20220417220715p:plain

解説版が見えないので抜き出します。

f:id:kazuhironagai77:20220417220740p:plain

もうNavier-Stokes 方程式の解き方どころか式のParameterですら覚えていません。Densityとか温度とか書かれていますね。確か粘性があったと思いますが、どうやって粘性を定義したのかも忘れてしまいました。

新しいPCを買ったら少しずつ勉強して行きたいと思います。

2Dの方のVFXを開いたらPreviewに何も写っていなかったんですが、上から見たら写っていました。

f:id:kazuhironagai77:20220417220757p:plain

<Liquid Simulation

f:id:kazuhironagai77:20220417220822p:plain

今度は液体のSimulationですね。

f:id:kazuhironagai77:20220417220843p:plain

特に気になる事は書かれていませんね。

2Dの方のNiagaraを見てみます。

f:id:kazuhironagai77:20220417220913p:plain

Emitter Spawn SectionにRaster Grid ModuleとかVelocity Grid Moduleとかあります。これでGridを作成しているんでしょうね。

<Explosion

f:id:kazuhironagai77:20220417220935p:plain

f:id:kazuhironagai77:20220417220954p:plain

これ、爆発している部分が光っているんですが、これも計算しているんでしょうか?

f:id:kazuhironagai77:20220417221019p:plain

NiagaraのModuleを見るとLighting Gridってのがあります。

うーん。早く勉強したい。

<Fire

f:id:kazuhironagai77:20220417221044p:plain

これはRenderingさせるとPCが唸りを上げてしかも不完全なRenderingしか出来なかったです。

この辺が限界みたいです。

<Smoke-Lighting

小さくしたらそれなりに見えるかもと思って、後ろ側に下がって撮影したら以下に示した位のRenderingは出来ました。

f:id:kazuhironagai77:20220417221108p:plain

f:id:kazuhironagai77:20220417221120p:plain

解説を読むとLightが使えると書かれています。

以下に示した様にDirectional LightがFluid Lightとして配置されています。

f:id:kazuhironagai77:20220417221138p:plain

Smokeの陰影を計算しているって事でしょうか?

もしそうなら凄いですね。

<Colored Smoke

f:id:kazuhironagai77:20220417221204p:plain

f:id:kazuhironagai77:20220417221223p:plain

試しにボタンに載ったらPCが凄い音し始めました。怖いので見るだけにしておきます。

<Smoke and Fire -Camera Facing

f:id:kazuhironagai77:20220417221250p:plain

PCがへんな音し始めて止まらなくなったのでここで中止します。

来週、続きをやるかもしれませんしやらないかもしれません。

2.3 UE5 Content Example | Niagara Fluids | Chaos Destruction [2] を見ながらIK Rigを勉強する

 UE5 Content Example | Niagara Fluids | Chaos Destruction [2]はFluid SimulationのReviewだけじゃなくて、IK RigのReviewもやっていました。これも見る事にします。

f:id:kazuhironagai77:20220417221319p:plain

UE5ではIKが標準で備わっているみたいな話を聞きました。

IKに関してはそれぐらいしか知りません。

博物館でも見学する感じで見ていきます。

<IK Goal

f:id:kazuhironagai77:20220417221346p:plain

これは上体をIK Rigで動かしているんでしょうか?

全く分からないです。

BPを開くとPositionという変数にTick 関数で値をセットしていました。

f:id:kazuhironagai77:20220417221408p:plain

Anim Classにセットされているのは

f:id:kazuhironagai77:20220417221429p:plain

でした。開いて見るとEvent Graphで先程のPositionの値をこのクラスのPositionにパスして

f:id:kazuhironagai77:20220417221454p:plain

Anim GraphでIK Rig ノードにパスしていました。

f:id:kazuhironagai77:20220417221524p:plain

どうやらこのIK Rig ノードでIK Rigを操るみたいです。

<Multiple Solver

こっちはFluid SimulationみたいにPCが唸りを上げる事はないので安心して見れます。

f:id:kazuhironagai77:20220417221548p:plain

IKの計算方法も何種類もあると言う事何でしょうか?

左端のSpiderのAnim ClassではIK Rig ノードが使用されていました。

f:id:kazuhironagai77:20220417221623p:plain

中央のBody MoverでもIK Rig ノードが使用されていました。

f:id:kazuhironagai77:20220417221641p:plain

あれ?

あ、分かりました。

左端のSpiderのIK Rig NodeのParameterにはRig Definition AssetにIK Multiple Solverがセットされていました。

f:id:kazuhironagai77:20220417221658p:plain

中央のSpiderのIK Rig NodeのParameterにはRig Definition AssetにIK  FBIKがセットされていました。

f:id:kazuhironagai77:20220417221714p:plain

これらを開いて見てみましょう。

f:id:kazuhironagai77:20220417221733p:plain

むー。何でしょう。

これはAnim BP Classだそうです。

正直、これはどう見たらいいのか分かりません。

あれ、Solverに2つ入っています。

f:id:kazuhironagai77:20220417221751p:plain

これって左端のSpiderだと勝手に思っていましたが右端のSpiderみたいです。

<Long Bone Chains

f:id:kazuhironagai77:20220417221813p:plain

これもSolverの一種なんでしょうか?

このMonsterにセットされているAnim BP Classまで遡って使用されているSolverをチェックしましたが先程のMulti-Solverと同じでした。

f:id:kazuhironagai77:20220417221836p:plain

以下に示したBoneが特殊なんでしょうか?

f:id:kazuhironagai77:20220417221852p:plain

良く分かりません。

<Chain Pull Strength

f:id:kazuhironagai77:20220417221917p:plain

Anim BP Classに使用されているクラスのIK_HighPullStrengthとIK_LowPullStrengthの

f:id:kazuhironagai77:20220417221942p:plain

Pull Chain Alphaの値がLowが0とHighが1でした。

f:id:kazuhironagai77:20220417222004p:plain

<Bone Limits

f:id:kazuhironagai77:20220417222025p:plain

こっちはHierarchyに違いがありました。

f:id:kazuhironagai77:20220417222058p:plain

Bone一つずつにIKがセットされています。

Fluid Simulation程ではないですがこっちも結構PCがうるさくなって来ました。

この辺で止めておきます。

2.4 UE5 Content Example | Niagara Fluids | Chaos Destruction [2] を見ながらChaos Destructionを勉強する

Destructionに関しては全く勉強していないので全く知りません。

全部のSampleを見るだけ見ました。Fluid Simulationほどじゃないですが、PCが凄い音しています。今のPCで長時間、これらのSampleを見たくはないです。

パッと見で面白そうなSampleを記しておきます。

Niagara

f:id:kazuhironagai77:20220417222125p:plain

やっぱりNiagaraと組み合わせる事で、見た目が格段にリアルになります。

<Clustered Voronoi Fracture

f:id:kazuhironagai77:20220417222157p:plain

崩れるPieceが表示されている中で一番綺麗だと感じました。

<Applying Velocity

f:id:kazuhironagai77:20220417222219p:plain

Chaos Field Systemから一個選ぶとなるこれが一番興味深かったです。

正直どれも凄いですが、これが一番理解出来たと言うのもあります。

以上です。

後、見ててかなり気持ち悪くなりました。自然に画面を見ると視線がどうしても地面を見る位置になります。しかし見たい展示物はそれよりもかなり高い位置に配置されていて視線をあっちこっちに移動する必要が出て来ます。多分それで気持ち悪くなるんです。

3Materialの勉強

3.1 Post ProcessによるOutlineの作成の続き

先週、Post ProcessによるOutlineを Simple Post Process Outline in Unreal [3]で勉強しました。

ここで作成したMaterialですが4.27だと何も起きません。しかし4.24だと以下に示した様に出来ました。

f:id:kazuhironagai77:20220417222312p:plain

こんなマイナーな部分の勉強のマイナーな問題は普通なら無視して先に進むんですが、このTutorial、以下に示した様に、となりのPixelの値を取得する方法を使用しているんです。

f:id:kazuhironagai77:20220417222329p:plain

この実装方法、Sobel Operatorと言うらしいですが、絶対に出来る様になりたい事の一つなんです。

のでこの辺の勉強を最初にやる事にします。

3.2 Unreal Engine City Building Game - Mouse Cursor, Click Object In-World and Highlight Material - EP 3 [4] を軽くみる

 Simple Post Process Outline in Unreal [3]のコメント欄にUnreal Engine City Building Game - Mouse Cursor, Click Object In-World and Highlight Material - EP 3 [4]でほとんど同じ事をしているが、そのやり方は4.27でも出来ました。と書かれていました。ので、それから確認します。

f:id:kazuhironagai77:20220417222401p:plain

軽く見ました。

この作者が自分で言っていますが、何でこれで動くのか分かってはいないそうです。いろんなTutorialでこのやり方でやっていてそれをそのまま覚えたと言っています。

実装方法は結構複雑で見ただけでは理解出来ませんでした。

このTutorialを基準にOutlineの作成方法を勉強するのは危険な気がします。

Unreal CG氏は説明が足りない時が多々ありますが、本人にとっては当たり前過ぎて説明しないだけで本人は何をやっているのかは理解しています。この人は違います。

Unreal CG氏のOutlineの作成方法も先にチェックすべきな気がします。

Toon Shader & Custom Shadow - UE4 Postprocess Tutorial [5]>

Unreal CG氏のOutlineのTutorialであるToon Shader & Custom Shadow - UE4 Postprocess Tutorial [5]におけるOutlineの作成方法を調べます。

f:id:kazuhironagai77:20220417222452p:plain

とっても綺麗なOutlineが出来ています。

ただしこのTutorial、MainはToon Shaderの方でOutlineについては20分30秒位から24分10秒の間でしか作成していません。

Unreal CG氏もこれまでのTutorialで何回も色々な方法でOutlineを作成して来たので、今回のやり方を凄く詳しく解説する事はしないと言っています。

思い出してきました。

数年前、Unreal CG氏のTutorialで色々勉強したんですが、その時はまだMaterialやVFXの基礎が全くない状態だったので、あんまり身に付かなかったんです。

<作戦を変更します>

元々、今回、敢えてPost Processの部分を復習しようと思ったのは、UEのMaterial内でSobel Operatorのやり方を覚えたかったからです。

その前にこの何週間の目標としてToon Shadingの基礎を理解すると言うのがあります。

更にUnreal CG氏のToon Shader & Custom Shadow - UE4 Postprocess Tutorial [5]はToon Shadingでは右に並ぶもの無しの出来栄えです。

f:id:kazuhironagai77:20220417222529p:plain

これはToon Shadingの最後の仕上げとしては必ず勉強したいです。しかし今見ても、かなり難しい内容なので、これを今直ぐやるのは無謀な気もします。

UEのMaterial内でSobel Operatorのやり方は今回は諦めます。

そして今週はBen Cloward先生のToon ShadingのTutorialの最後のやつであるToon Shader Specular Highlights - Shader Graph Basics - Episode 40 [6] を勉強します。これを勉強した後に又考える事にします。

3.3 Toon Shader Specular Highlights - Shader Graph Basics - Episode 40 [6] を軽く見る

今週は題の通りにSpecular lightをToon Shadingに追加する方法についてです。

f:id:kazuhironagai77:20220417222549p:plain

2つのやり方について解説していました。そんなに難しそうではないので、ここで実装もします。

先週、作成したMaterialを使用します。

f:id:kazuhironagai77:20220417222607p:plain

まずBlinn Specularから作成していきます。

Half angleを作成する為にAtmosphere Sun Light VectorとCamera Vectorを足します。とTutorialで説明されていますがHalf Angleって半角の事です。意味が分かりません。

一応、言われた通りに作成しました。

f:id:kazuhironagai77:20220417222623p:plain

そう言えばMaterialのPreview内での床の表示方法が分からないと先週のBlogに書きましたが、さっきのNiagaraの勉強でそのやり方が分かったので床を表示させてみました。

f:id:kazuhironagai77:20220417222642p:plain

Preview SettingのShow Floorにチェックを入れるだけです。

f:id:kazuhironagai77:20220417223020p:plain

Normalizeします。

f:id:kazuhironagai77:20220417223039p:plain

うーん。良く分からん。

Vectorの公式にこういうのがあるんでしょうか?

先を見て行きます。

f:id:kazuhironagai77:20220417223103p:plain

Normal VectorとDot Productしました。

結果です。

f:id:kazuhironagai77:20220417223120p:plain

うーん。分かって来ました。

球のNormal Vectorと前半のゴチャゴチャした計算から作成されたVectorのDot Productの結果が球の上のSpecular lightの位置と強さを表しているんです。

正しこの計算結果は間違ったSpecular lightも生成してしまいます。以下に示した様に影側から球を除くとSpecular light が生成されています。

f:id:kazuhironagai77:20220417223140p:plain

以下の結果を追加します。

f:id:kazuhironagai77:20220417223202p:plain

結果です。

f:id:kazuhironagai77:20220417223218p:plain

影から球をのぞくと

f:id:kazuhironagai77:20220417223236p:plain

となりました。

これを先週までに作成したToon Shadingと合成します。

色々な合成方法がありますが、取りあえず色を指定する前で合成してみます。

f:id:kazuhironagai77:20220417223313p:plain

結果です。

f:id:kazuhironagai77:20220417223429p:plain

あんまりToon Shadingと言う感じはしませんね。

Specular lightが弱いので光をもっと強くします。

f:id:kazuhironagai77:20220417223447p:plain

結果です。

f:id:kazuhironagai77:20220417223503p:plain

今度は色付けした後にSpecular lightを混ぜます。

f:id:kazuhironagai77:20220417223528p:plain

うーん。こっちの方がいいかも。

Specular lightにEdgeを追加します。

f:id:kazuhironagai77:20220417223716p:plain

Specular lightの計算の最後でRoundしました。

結果です。

f:id:kazuhironagai77:20220417223739p:plain

断然、こっちの方が良いですね。

うーん。成程。

<Phong

次のやり方はPhong Methodだそうです。

あ、そう言う事か。

分かりました。

Phone ShadingのSpecular lightを実装するんですね。Blinn Shadingは知らないんですが調べてみます。

Learning OpenGLAdvanced Lighting [7] に説明がありました。

f:id:kazuhironagai77:20220417223856p:plain

どうやらBlinn Specular lightはPhongの改良型の様ですね。

このサイトに以下に示した分かり易い図も載っていました。

f:id:kazuhironagai77:20220417223915p:plain

これは後で読む事にします。

まずPhongのSpecular lightの実装からやって行きます。

PhongのSpecular lightの計算方法ぐらいは今でも覚えてると思いたいですが、覚えていません。

以下の方法で実装しました。

f:id:kazuhironagai77:20220417223945p:plain

これも後で復習します。

結果です。

f:id:kazuhironagai77:20220417223957p:plain

Ben先生、Jim Blinn氏についてはかなり親しみを込めて紹介していますが、Phong氏に対してはあんまり興味ないみたいですね。

この後の実装はBlinn Specular lightと同じなので結果だけ示します。

実装です。

f:id:kazuhironagai77:20220417224627p:plain

結果です。

f:id:kazuhironagai77:20220417224733p:plain

これだけ見るとBlinnのSpecular lightの方が断然良いですね。

3.4 PhongのSpecular lightとBlinnのSpecular lightの理論を復習する

まずPhongのSpecular lightですがLearning OpenGLBasic Lighting [8]に分かり易い解説が載っていました。

f:id:kazuhironagai77:20220417224803p:plain

もうこの解説のままですね。

f:id:kazuhironagai77:20220417224825p:plain

この部分でLight SourceのNormal Vectorに対しての反射を計算しています。上の図のR Barがこの計算結果と同じになります。

その後、Light SourceのNormal Vectorに対しての反射させたVectorつまりR BarとCamera VectorでDot Productを計算します。

f:id:kazuhironagai77:20220417224845p:plain

これは” the angular distance between this reflection vector and the view direction”の部分を計算しているだけですね。最初何でDot Productが角度と関係しているのかと思ったんですが、Dot Productの性質を角度から解説していただけでした。

OpenGLの説明を読んだらSpecular Lightの理論や計算の仕方も簡単に理解出来ます。

やっぱりUEのMaterialも理論をしっかり教えるべきだと思います。そうしたらUEでMaterialを勉強する人も何をしているのかの根本が理解出来ると思うんです。

BlinnのSpecular lightの理論をLearning OpenGLAdvanced Lighting [7]で勉強します。

f:id:kazuhironagai77:20220417224906p:plain

解説を読むと視線と光のVectorのHalfway Vectorを計算します。そのHalfway VectorとNormal VectorのDot ProductがBlinnのSpecular lightになります。

それでHalfwayのVectorの計算方法ですが以下の式で計算出来るそうです。

f:id:kazuhironagai77:20220417224943p:plain

うん。これの理屈が分からない。けど今回はここは無視します。

この式と以下の実装はやっている事が全く一緒です。

f:id:kazuhironagai77:20220417225000p:plain

はい。

絶対値で割るのはNormalizeしてるからです。ので全く同じ事をしています。

この後、Phong と同じ様にDot Productを計算します。

正し、Normal Vectorとです。

f:id:kazuhironagai77:20220417225023p:plain

UEの実装でも全く同じ事をしています。

はい。理解出来ました。

3.5 Toon Shadingのまとめと感想

これで、Ben Cloward先生のToon Shadingが終わりました。Projectionの時とは違い、ほぼ簡単でした。

Toon ShadingはTextureを利用する方が質が高いものが作成出来そうです。

OutlineはPost Processの勉強がまだ終わっていませんが、本当のOutlineでアニメの線画とはかなり違っている気がします。MMDのモデルをUEにImportしてそれにOutlineを追加した場合、どう見えるのか試してみたいですね。

Specular Lightはまあ、あってもなくてもいい気がします。Tutorialでも言っていましたが瞳のキラキラを作成するのには使えそうです。

4RPGStoryの改善

以下のBugを直して行きます。

f:id:kazuhironagai77:20220417225055p:plain

と言っても今週だけで全部を直すのは無理なので、1,2個ずつ直して行きます。

4.1 宿屋、道具屋、武器屋、神殿のUIの直し

宿屋、道具屋、武器屋、神殿のUIを統一したデザインにします。これらをどう直すのかについて決定する必要があります。

<ボタンの配置について>

「会話」と「出る」は4つ全てのUIにあります。以下の様に上と下に配置する事にします。

f:id:kazuhironagai77:20220417225124p:plain

武器屋のUIです。

f:id:kazuhironagai77:20220417225206p:plain

宿屋です。

f:id:kazuhironagai77:20220417225614p:plain

神殿です。

f:id:kazuhironagai77:20220417225638p:plain

これ見て思ったんですが、神殿の機能は宿屋と統合しても良い気がしてきました。

宿屋に泊まると自動的にSaveされ、Saveを選択した場合はSaveのみ出来る訳です。

<PlayerのParameterの表示について>

現状、以下の様な表示になっています。

f:id:kazuhironagai77:20220417225704p:plain

HP 100/100

MP 20/20

と表記すればMHPやMMPは要らないです。

名前、職業、Levelの表記もあると便利だと思います。

こんな感じで作成してみました。

f:id:kazuhironagai77:20220417225722p:plain

以下の様になりました。

f:id:kazuhironagai77:20220417225739p:plain

金貨も追加します。

f:id:kazuhironagai77:20220417225807p:plain

これを全部のUI上で作成するのは面倒なので新しいWidgetで作成してそれを読み込む事にします。

新しいWidget

f:id:kazuhironagai77:20220417225826p:plain

を作り、先程作成したParameterの表を丸ごと、Copyします。

f:id:kazuhironagai77:20220417225844p:plain

f:id:kazuhironagai77:20220417225904p:plain

Widget内に使用するWidgetの場合、Canvasを使用したままにするとサイズが指定した値を保っていたはずです。

のでこのやり方でやってみます。

ただし私がWidgetの作成方法を勉強したTutorialではWidget内に作成するWidgetCanvas Panelは絶対に使用しませんでした。のでこのやり方が正しいのかどうかは分かりません。

武器屋のUIにこのParameterのWidgetを追加しました。

f:id:kazuhironagai77:20220417225924p:plain

結果です。

f:id:kazuhironagai77:20220417225946p:plain

良いんじゃないでしょうか?

ParameterのWidgetに実際のPlayerの操作するキャラの値を表示する実装を追加しました。

f:id:kazuhironagai77:20220417230007p:plain

結果です。

f:id:kazuhironagai77:20220417230021p:plain

出来てそうですね。

所持している金貨も同様にWidgetにします。

f:id:kazuhironagai77:20220417230044p:plain

f:id:kazuhironagai77:20220417230056p:plain

f:id:kazuhironagai77:20220417230108p:plain

以下の様に武器屋のWidgetに追加しました。

f:id:kazuhironagai77:20220417230124p:plain

実際のPlay中の画面です。

f:id:kazuhironagai77:20220417230151p:plain

道具屋も同様に直します。

f:id:kazuhironagai77:20220417230211p:plain

うーん。

まあ、前よりはマシです。

宿屋も直します。

これを

f:id:kazuhironagai77:20220417230242p:plain

以下の様にしました。

f:id:kazuhironagai77:20220417230303p:plain

実際の画面です。

f:id:kazuhironagai77:20220417230323p:plain

神官はもしかしたら無くしてSaveする機能は宿屋と統合するかもしれないので今回は、そのままにしておきます。

4.2 「Start 画面からMap1に移動する時、Map1のLandscapeが完成する前にCharacterが生成して落ちてしまうBug」を直す。

このBugの本当の問題はPackagingした後でどうなるのかです。

f:id:kazuhironagai77:20220417230354p:plain

現状、対症療法として石をPlayer の操作するキャラが生成される場所に配置しました。

f:id:kazuhironagai77:20220417230414p:plain

これでいけると思ったんですが、Persistent LevelがSave出来なくなってしまいました。

f:id:kazuhironagai77:20220417230436p:plain

一端、消します。

あれ。

直りません。

ああ。

新たなBugを生成してしまいました。

<Persistent LevelがSave出来ないBugを直す>

調べたらPersistent Levelだけじゃなくて

f:id:kazuhironagai77:20220417230544p:plain

もSave出来なくなっています。

これらを直していきます。

一番簡単そうなLevel 2_1を見てみます。

f:id:kazuhironagai77:20220417230605p:plain

このPlanはLevel 2_1内に配置されていますがPlaneはMap1に属しています。

f:id:kazuhironagai77:20220417230622p:plain

消してみます。

直りませんね。

正直、今回問題は何処が原因なのか分かりません。

うーん。と悩んで、Task Managerを開いて見たらUE Editorが2個動いていました。

偶によくある。と言う奴で、UEのEditorが裏でもう一個起動していて同じProjectを開けている事があります。これはTask Managerを開いて見ないと分かりません。

PCの下の部分に2個のEditorが表示される事もないです。

f:id:kazuhironagai77:20220417230642p:plain

何かPCが普段よりうるさいなと思っていたのですが、UE5でFluid Simulationを動かした後だったので、気のせいと思っていました。

もう一回石をMap1に配置しました。

f:id:kazuhironagai77:20220417230659p:plain

今度は普通にSave出来ました。

f:id:kazuhironagai77:20220417230714p:plain

5Open Worldの検証

5.1 先週の検証

先週、Height Mapと実際のLandscapeの関係を以下のように推測しました。

f:id:kazuhironagai77:20220417230744p:plain

これを確認します。

まずUEのHeight Mapは1009x1009 Pixelにすべき説はどこから来ているのかから検討します。

公式のDocumentであるLandscape Technical Guide [9]によると

f:id:kazuhironagai77:20220417230802p:plain

お勧めの中に、結構色々なSizeがあります。

試しに1009x1009のImageを作成してそれをImportしてみます。

f:id:kazuhironagai77:20220417230828p:plain

Importしようとしたら以下の設定が出て来ました。

f:id:kazuhironagai77:20220417230916p:plain

これってさっきのLandscape Technical Guide [9]の設定と同じですね。

f:id:kazuhironagai77:20220417230932p:plain

高さのScaleだけ半分にして作成してみます。

f:id:kazuhironagai77:20220417230951p:plain

出来ました。

f:id:kazuhironagai77:20220417231008p:plain

サイズを見ると一辺1009mになっています。

f:id:kazuhironagai77:20220417231045p:plain

今度はScaleのサイズを先週、計算した値に変更して別のLandscapeをImportしてみます。

f:id:kazuhironagai77:20220417231103p:plain

結果です。

f:id:kazuhironagai77:20220417231121p:plain

やっぱり一辺が16kmになっています。

一個のComponentのサイズが2㎞になっていました。

f:id:kazuhironagai77:20220417231140p:plain

先週の予測と全く同じ結果になりました。

しかしこれだけ大きくしても

f:id:kazuhironagai77:20220417231228p:plain

Levelは一個しかありません。

後、以下に示しましたが、Sky Sphereが白く表示されています。これってどうやって動かすんでしょうか?

f:id:kazuhironagai77:20220417231252p:plain

Sky Sphereの件は後で考えるとして、今度は1009x1009でScale が100のLandscapeを16枚作成してみます。

以下のCreate Newから作成しました。

f:id:kazuhironagai77:20220417231314p:plain

Persistent Levelの隣に作成しました。

f:id:kazuhironagai77:20220417231408p:plain

でもLevel Detailsに何も表示されません。

f:id:kazuhironagai77:20220417231428p:plain

World Compositionを使用している他のProjectを見たら以下のようにLevelsの隣に別なボタンがありました。

f:id:kazuhironagai77:20220417231500p:plain

調べたら以下のCheckを最初に入れる必要がありました。

f:id:kazuhironagai77:20220417231517p:plain

前に作成したSub Levelを消して

f:id:kazuhironagai77:20220417231534p:plain

を入れました。

以下の方法で出来ました。

LevelsからCreate Newを選択します。

f:id:kazuhironagai77:20220417231551p:plain

名前を入力しろと出て来ますので1_3としました。

その後で生成された1_3を選択します。

f:id:kazuhironagai77:20220417231616p:plain

選択すると水色になります。

後は1009x1009のLandscapeを作成するだけです。

先程のHeight Mapを利用して3つのSub Levelを作成してみました。

f:id:kazuhironagai77:20220417231644p:plain

Streaming Distanceを500mにセットして

f:id:kazuhironagai77:20220417231715p:plain

テストします。

真ん中の山をうろうろすると

f:id:kazuhironagai77:20220417231732p:plain

隣のSub Levelの山が読み込まれました。

f:id:kazuhironagai77:20220417231755p:plain

これ見ると、UE4ではSub Level一個のLandscapeの大きさは1009m^2を想定していたんだなと、感じました。

Map1では、Sub Level一個のLandscapeの大きさは

f:id:kazuhironagai77:20220417231822p:plain

60mで作成してました。

うーん。

この前DownloadしたA Boy and His KitのSub Level一個に入っているLandscapeの大きさは5㎞でした。

f:id:kazuhironagai77:20220417231843p:plain

これ位が適切なSub Level内のLandscapeの大きさなんでしょうね。

<先週の復習のまとめ>

徒然なるままに記述していたのでまとまりがなくなってしまったのでここでまとめ直します。

  • 先週の予測は全て合っていました。今回実際にLandscapeを作成して確認しました。
  • 16㎞^2Open Worldを作成する最も適切な方法は1009x1009Height Map1km^2LandscapeとしてImport16x16枚それを作成する事のようです

5.2 色々な確認事項

<UE5とWorld Partition

Open Worldの勉強は次のRPGの作成のためです。次のRPGはUE5で作成するのであんまりWorld Compositionの勉強を頑張る必要はないです。どこまで勉強するのか決めておく必要があります。

ただWorld Compositionの勉強をしていて思ったのは、World PartitionはWorld Compositionの進化形でWorld Compositionで勉強した内容はあまり無駄にならない気もしています。

この辺は慌てて損する事のないようにしたいです。

<Smart Poly氏のTutorial

2つ記録しておきたい事があります。

一目は、Smart Poly氏がHow To Make A Massive Open World Map In Unreal Engine 4 [10]で、どうやって沢山のSub LevelとそのSub Levelに属しているLandscapeを作成したかについてです。

2022-02-06のBlogにまとめられていますが、以下に示した様に

f:id:kazuhironagai77:20220417231944p:plain

Import Tiled Landscape…からImageを選択しています。

しかしその時に選択したImageがpngのFileじゃないんです。

f:id:kazuhironagai77:20220417232007p:plain

こういうやつです。

その後で、MaterialをセットしてそれぞれのLayerに対してHeight Mapを読み込んでいます。

このやり方で、16km^2のOpen Worldを作成する方法は理解出来たんですが、World Machineを使用してOpen World用のHeight Mapを作成する方法が分かりません。特に上記に出て来たImage Fileの作成方法がです。

これに関してはWorld Machineの有料版を買って自分で作成してみるしかありません。しかしそれだけのお金を掛ける価値があるのかとなると、うーん。となってしまいます。

更にもう2つ、Smart Poly氏が作成したOpen WorldのTutorialがありました。

f:id:kazuhironagai77:20220417232104p:plain

この辺も見ておく必要がありますね。

6Gaeaの勉強

まだ2回目の勉強ですが、知りたい事が沢山出て来ました。

その中で最も知りたいのはUnrealでOpen Worldを作成するためには1009x1009のHeight Mapを沢山生成する必要があります。それがGaeaの無料版で出来るのかです。もし出来ないのなら有料版を購入するしかないですがその場合、World Machineの有料版を購入した場合と比較してどっちが有利なのか?です。

こんな都合の良い質問の回答が直ぐに分かる訳ないと思っていたらSmart Poly氏のTutorial、Gaea To Unreal Engine 5 | Next-Gen Terrain? [11]にそのものズバリの回答がありました。

6.1 Gaea To Unreal Engine 5 | Next-Gen Terrain? [11]を見る

Smart Poly氏の解説によると以下の図のTiled Build Resolutionが出来るかどうかが問題みたいです。

f:id:kazuhironagai77:20220417232154p:plain

となるとPro versionを購入する必要がありますね。大体$200となりますね。

しかしSmart Poly氏の説明だとFree版もかなり良いらしいです。World Machineの無料版は516 x 516までしか作成出来ないみたいな事を言っていました。

f:id:kazuhironagai77:20220417232217p:plain

となると無料版でも1009x1009のHeight Mapは作成出来るみたいですね。

うーん。

となると一年位は無料版で勉強してみるのが手ですね。

今回作成してるRPGのMapはこの無料版で作成した物に最終的には変更出来る様にしたいですね。

6.2 Gaeaの公式のTutorialを見る

何と、Gaeaの公式のTutorialがYouTube上にある事が分かりました。

f:id:kazuhironagai77:20220417232247p:plain

最初の一個目を見てみます。

A 6-minute introduction to Gaea [12]です。

軽く見たんですがかなり分かり易いです。実際にやってみる事にします。

A 6-minute introduction to Gaea [12]を勉強する>

Start Screenですが全然違いますね。

Tutorialのは

f:id:kazuhironagai77:20220417232309p:plain

となっていますが、私のは

f:id:kazuhironagai77:20220417232326p:plain

です。

Tutorialの作成した年を見たら2019年でした。それならVersionがかなり前のものになるので仕方ないですね。

TutorialはGraphを選択しました。

私のVersionではどれがそれに当たるのか分かりません。先週、選択したDesert Mountainを開きます。

f:id:kazuhironagai77:20220417232345p:plain

f:id:kazuhironagai77:20220417232354p:plain

Tutorialの実装は

f:id:kazuhironagai77:20220417232407p:plain

だけです。

元々あった実装を消してTutorialと同じ実装を組んでみました。

f:id:kazuhironagai77:20220417232450p:plain

結果です。

f:id:kazuhironagai77:20220417232519p:plain

折角作成したのですが、Tutorialもこの実装を消してしまいました。一から作成するそうです。

Slop Noiseを入れます。

f:id:kazuhironagai77:20220417232610p:plain

結果です。

f:id:kazuhironagai77:20220417232627p:plain

もう一個Slopを追加します。

f:id:kazuhironagai77:20220417232644p:plain

こんな結果になりました。

f:id:kazuhironagai77:20220417232726p:plain

2番目のSlop NoiseノードのParameterの値を変えます。

f:id:kazuhironagai77:20220417232746p:plain

2つのSlop NoiseノードをCombineノードで繋ぎます。

f:id:kazuhironagai77:20220417232806p:plain

3つのノードのParameterを調整すると

f:id:kazuhironagai77:20220417232823p:plain

となりました。

Erosionノードを追加します。

f:id:kazuhironagai77:20220417233608p:plain

結果です。

f:id:kazuhironagai77:20220417233632p:plain

Tutorialでは以下の様に川が出来ていますが、私のは単なる平地みたいです。

f:id:kazuhironagai77:20220417233657p:plain

Tutorialで2Dを表示しています。

同じTool Barは存在しないので先週、習った方法で2D を表示しました。

f:id:kazuhironagai77:20220417233715p:plain

そしたら3Dの表示が

f:id:kazuhironagai77:20220417233731p:plain

になってしまいました。

画面を右クリックして以下のBoxを表示して

f:id:kazuhironagai77:20220417233819p:plain

Flowを表示します。

結果です。

f:id:kazuhironagai77:20220417234040p:plain

これを利用してColor Textureを作成したりするそうですが、今回のTutorialではまだしないのでこの機能は今は無視して良いそうです。

今度は、少しSand Stonyにするそうです。

Terraceノードを追加します。

しかしどこにあるのか分かりません。

Graph画面を右クリックしたら以下のBoxが表示されました。

f:id:kazuhironagai77:20220417234101p:plain

TeとタイプしたらTerraceが表示されました。

Tutorial通りに繋ぎました。

f:id:kazuhironagai77:20220417234118p:plain

結果です。

f:id:kazuhironagai77:20220417234134p:plain

もう一個Terraceノードを追加します。

Tutorialで、今度はさっき私がやった方法でTerraceノードを追加しました。

f:id:kazuhironagai77:20220417234203p:plain

恐ろしい位の偶然の一致です。

偶に私、テレパシー能力があるんじゃないのかと思う時があるんですが、今回もそうでした。

Tutorialと同じ方法で追加するのもあれなので、Duplicateしました。

f:id:kazuhironagai77:20220417234222p:plain

結果です。

f:id:kazuhironagai77:20220417234239p:plain

更にErosionノードをTerranceノードの後に追加しました。

f:id:kazuhironagai77:20220417234257p:plain

結果です。

f:id:kazuhironagai77:20220417234315p:plain

うーん。良く分かりません。

Resolutionを1kにします。

f:id:kazuhironagai77:20220417234339p:plain

そして出力します。

Erosionを右クリックして以下のBoxを表示し、Mark for Exportを選択します。

f:id:kazuhironagai77:20220417234354p:plain

TutorialのBuildがないな。と思ったら右端にありました。

f:id:kazuhironagai77:20220417234415p:plain

Unreal Engine用にResolutionを1009にセットしてBuildしました。Color SpaceがSRGBになっていますが、これの意味はまだ分かりません。

結果です。

f:id:kazuhironagai77:20220417234435p:plain

うーん。一応、Height Mapらしきものが生成されていますね。

7.雪山のMapの作成

7.1 先程作成したHeight Mapを使用してLandscapeを作成する

Importしました。

f:id:kazuhironagai77:20220417234509p:plain

Play画面です。

f:id:kazuhironagai77:20220417234527p:plain

台から飛び降りました。お尻がぴゅーとしましたが無事に着地しました。

f:id:kazuhironagai77:20220417234545p:plain

先週まで作成していたMaterialをセットします。

f:id:kazuhironagai77:20220417234602p:plain

Layerを適当に塗り分けます。

f:id:kazuhironagai77:20220417234621p:plain

結果です。

f:id:kazuhironagai77:20220417234706p:plain

適当に塗ったので、Dirtと雪が混じっているLayerや崖のLayerが脈絡なく存在しています。

飛び降ります。

f:id:kazuhironagai77:20220417234727p:plain

うん。いい感じです。

f:id:kazuhironagai77:20220417234749p:plain

雪玉は多すぎますね。調整します。

f:id:kazuhironagai77:20220417234813p:plain

草は要らないですね。外します。

f:id:kazuhironagai77:20220417234947p:plain

こっちの方が良いですね。

代わりにSnow Dirt Blend LayerにDirtを追加しました。

f:id:kazuhironagai77:20220417235007p:plain

f:id:kazuhironagai77:20220417235013p:plain

そしてDirtに草を追加します。

f:id:kazuhironagai77:20220417235039p:plain

結果です。

f:id:kazuhironagai77:20220417235059p:plain

一寸だけ微調整します。

f:id:kazuhironagai77:20220417235115p:plain

IceとSnowは2つに分けました。

結果です。

f:id:kazuhironagai77:20220417235134p:plain

7.2 How to INSTANTLY TEXTURE your landscapes in UE4 - Unreal Engine tutorial [13] を勉強する

崖の部分を自動で選択する方法をまとめます。

まず軽くTutorialを軽くみます。

全然、崖の部分を自動で選択する方法とは関係ないですが、Texture SampleのSampler Sourceの設定をShared: WrapにしないとTextureの数が増えるにつれてCompileしなくなるそうです。

f:id:kazuhironagai77:20220417235203p:plain

World Aligned Blendノードを使用します。Slop Sharpness に30、Slop Biasに-12をセットします。

これをBase Colorに繋ぎます。

f:id:kazuhironagai77:20220417235220p:plain

結果です。

f:id:kazuhironagai77:20220417235237p:plain

うーん。何か違う。

Tutorialのは

f:id:kazuhironagai77:20220417235256p:plain

こんなのです。

なぜか、Dirtの箇所とかが残っています。

f:id:kazuhironagai77:20220417235320p:plain

まあ、後で考えます。

Tutorialでは以下の様にBlendしていました。

f:id:kazuhironagai77:20220417235345p:plain

よし分かりました。

Tutorialだとこの後でAlpha値を使う為の方法を解説するのですが、まずNormal 値でどうなるのか見る事にします。

Snow AのLayerにだけセットしてみました。

f:id:kazuhironagai77:20220417235403p:plain

結果が分かりにくかったので、全体をSnow Aで塗り直しました。

結果です。

f:id:kazuhironagai77:20220417235422p:plain

正直、これで十分です。

同じ事をDirt やIceのLayerでやります。

f:id:kazuhironagai77:20220417235446p:plain

結果です。

f:id:kazuhironagai77:20220417235504p:plain

Play中の画面です。

f:id:kazuhironagai77:20220417235525p:plain

うーん。雪がこんこんと降ると言うよりあんまり雪が降らない地域にたまたま降ったって感じですね。

f:id:kazuhironagai77:20220417235547p:plain

まあ、良い感じなのでこれでOKにします。

7.3 来週以降の予定

以下の効果を追加していく予定です。

f:id:kazuhironagai77:20220417235612p:plain

Gaeaを使用したLandscapeは今回既にやりましたが、もう少しGaeaを勉強した後で、また新しいLandscapeを作成する事にします。

となると来週やるのは雪が降るEffectの追加ですね。

これで一応、雪山のLandscapeの作成は完成とします。

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

8.1 対戦相手の召喚するMonsterの調節

f:id:kazuhironagai77:20220417235718p:plain

を行います。

新しいStageを考えました。

f:id:kazuhironagai77:20220417235733p:plain

テストします。

f:id:kazuhironagai77:20220417235755p:plain

Stage 5で負けました。

Game Overした時にどのStageで負けたのか知りたいです。

Game Overの画面にStage名を追加しました。

f:id:kazuhironagai77:20220417235922p:plain

結果です。

f:id:kazuhironagai77:20220417235936p:plain

8.2 戦闘を沢山してみる

Gameを遊ばない事にはどのStageまで行けるのか分かりません。何回か遊んでみます。

一回目はStage 7で負けました。

f:id:kazuhironagai77:20220418000004p:plain

結構、長時間遊べます。

今度はStage 8で負けました。

f:id:kazuhironagai77:20220418000026p:plain

時間は20分位です。

Dragonの攻撃力が高すぎます。

f:id:kazuhironagai77:20220418000131p:plain

100下げて200にしました。

何と、3回目はStage10のMonsterを倒す事が出来ました。

f:id:kazuhironagai77:20220418000150p:plain

存在しないStage 11に突入しました。

時間は30分程度かかりました。

Stage 10を勝利した時の表示がほしいですね。

8.3 Stage 10を勝利した時のPhaseを作成する

以下のWidgetを表示するようにしました。

f:id:kazuhironagai77:20220418000219p:plain

f:id:kazuhironagai77:20220418000230p:plain

テストします。

テストしますが、妖精族のMonsterだけで最後まで行ける気はしませんので、以下の亡霊族のMonsterが召喚出来る様にします。

f:id:kazuhironagai77:20220418000327p:plain

テストします。

なんと、Stage 7で負けてしまいました。

仕方ないのでDragon軍団で戦う事にします。

f:id:kazuhironagai77:20220418000354p:plain

以下の様にDragonが戦います。

f:id:kazuhironagai77:20220418000413p:plain

勝ちました。

f:id:kazuhironagai77:20220418000432p:plain

表示されています。

こんなものでしょうね。

一応、これで最低限の仕組みは完成しました。

8.4 最低限の仕組みで遊んでみてこのGameは面白かったか?または面白くなる可能性があるのか?

一応、最後まで遊んでみたので、このGame Systemの総括をやろうと思います。

<遊んでみて面白かったか?>

それなりに面白かったです。3回ぐらい戦ったら休憩がほしいです。

それ以外はかなり面白かったです。

やっぱり戦闘中に考える必要があるのは楽しいです。

<このまま制作を続けるべきか?>

続けるます。これは続ければ光る気がします。

<問題や課題は?>

誰かにこのGameをPlayしてもらって感想を聞きたいです。

そのためにはPlayの仕方を説明する必要があります。あるいは説明しなくても理解出来るように改良する必要があります。その辺を来週は考えたいと思います。

9Blenderの勉強

またBlenderの勉強をさぼってしまいました。もう2週間、全く触っていません。

で、その理由を考えたんですが、Blenderの勉強は面白くないんです。

何で楽しくないのか考えたんですが、思い出しました。昔、大学でMayaの使用方法を習った時に、プロのDesignerから私のDesignをバカにされた事があったからです。

2022-02-14のBlogにあった灯籠風のDesignですが上手でしょう。

f:id:kazuhironagai77:20220418000525p:plain

f:id:kazuhironagai77:20220418000537p:plain

私、専門はEngineerですが絵を描くのは得意だし、芸術の才っての最初から持っているんです。その時も何で、馬鹿にされたのか全く理解出来なかったです。ただ滅茶苦茶、怒ったのだけは覚えています。

で、同じ事を言ってくるDesignerが必ずこれから出て来るはずなんです。それが脳裏に写ってやる気が無くなるんです。

そうだ。

3d Modelを馬鹿にされたら無視したれ。

どうせDesignerは3d GraphicのProgrammingがどうやって構成されているのか深い所では分かってないでしょう。どっか理解出来ないで詰まるはずです。

3d modelerとしてのキャリアは終りになる訳ですから、そん時に私に失礼な事を言ったDesignerは心底悔いる事になるでしょう。

9.1 先週までの復習

<Selection Method

紙に書いてPCの画面に貼ってあるヤツの復習です。3d ModelのVertexの選択方法が書かれているヤツです。全部覚えていました。

2022-02-14Blogの復習

全部やりました。結構忘れていました。

2022-02-21のBlogの復習>

3D Cursorの動かし方は結構、忘れていました。

以下の木を作成しながら復習しました。

f:id:kazuhironagai77:20220418000629p:plain

こういう風に楽しみながらやって行こうと思います。

2022-04-03のBlogの復習>

Ctrl+Num+を利用して雪が被ったFoliageを作成しました。

f:id:kazuhironagai77:20220418000650p:plain

F3のChecker Deselectを試してみました。

f:id:kazuhironagai77:20220418000707p:plain

Selectされた面は黒くしました。

もう一回、F3のChecker Deselectを試して今度はCtrl + Hで選択された面を消してみました。

f:id:kazuhironagai77:20220418000727p:plain

前に黒くした面が残っています。毎回、同じ面を選択する訳ではないみたいですね。

<Mesh Editing

Knife Toolを使用して以下のくぼみを作成しました。

f:id:kazuhironagai77:20220418000750p:plain

9.2 Blenderで何か作成する

兎に角、Blenderの勉強が楽しくないのが問題です。それで何か作成する事にします。

f:id:kazuhironagai77:20220418000813p:plain

鳥居を作ってみました。

10.まとめと感想

今週は、Blogの量がいつもより少ないですがやった量はいつもと同じ位あるはずです。なんでBlogの量が少ないんですかね。

11.参照(Reference

[1] CGHOW. (2022, April 7). UE5 Niagara Baker Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=bCx-kQdgulA

[2] CGHOW. (2022a, April 6). UE5 Content Example | Niagara Fluids | Chaos Destruction [Video]. YouTube. https://www.youtube.com/watch?v=TgYtTbHHoMs

[3] wizvanmeter. (2019, June 3). Simple Post Process Outline in Unreal [Video]. YouTubehttps://www.youtube.com/watch?v=YVTcH6da32Y

[4] The Game Dev Channel. (2021, January 19). Unreal Engine City Building Game - Mouse Cursor, Click Object In-World and Highlight Material - EP 3 [Video]. YouTube. https://www.youtube.com/watch?v=KakLXqpwnjo

[5] Unreal CG. (2020, June 25). Toon Shader & Custom Shadow - UE4 Postprocess Tutorial [Video]. YouTubehttps://www.youtube.com/watch?v=mx_AvrZK3TA

[6] Cloward, B. [Ben Cloward]. (2022, March 31). Toon Shader Specular Highlights - Shader Graph Basics - Episode 40 [Video]. YouTube. https://www.youtube.com/watch?v=B56z6st6U8E

[7] LearnOpenGL. (n.d.). LearnOpenGL - Advanced Lighting. Retrieved April 17, 2022, from https://learnopengl.com/Advanced-Lighting/Advanced-Lighting

[8] LearnOpenGL. (n.d.). LearnOpenGL - Basic Lighting. Retrieved April 17, 2022, from https://learnopengl.com/Lighting/Basic-Lighting

[9] Epic Games. (n.d.). Landscape Technical Guide. Unreal Engine Documentation. Retrieved April 17, 2022, from https://docs.unrealengine.com/4.27/en-US/BuildingWorlds/Landscape/TechnicalGuide/

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

[11] Smart Poly. (2021, August 10). Gaea To Unreal Engine 5 | Next-Gen Terrain? [Video]. YouTube. https://www.youtube.com/watch?v=lLYE4_wxJzE

[12] quadspinner. (2019, February 26). A 6-minute introduction to Gaea [Video]. YouTube. https://www.youtube.com/watch?v=1A1xXfTlKqM&list=PLEimej2Avz9mW2zc2tQMxJ9GNw_q28SDD&index=1

[13] Unreal Sensei. (2020, August 7). How to INSTANTLY TEXTURE your landscapes in UE4 - Unreal Engine tutorial [Video]. YouTube. https://www.youtube.com/watch?v=mP8eHwVEA0o

 

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

f:id:kazuhironagai77:20220410220008p:plain

<前文>

Apple vs. Epic Gamesの続き>

このサイトの情報によるとEUApple製品に第三者が作成したアプリをInstall出来ないのが違法になると書かれています。

f:id:kazuhironagai77:20220410220043p:plain

これって滅茶苦茶大きなNewsだと思うんですが、あんまり報道されていませんね。

前にあったApple vs. Epic Gamesの裁判で一見するとEpic Gamesが大勝利したかのように見えたんですが、実はそれが間違いでAppleが大勝利していた可能性が高い。と言う記事を昔紹介しましたが、今回のこのNewsは完全にAppleの敗北、Epic Gamesの大勝利というか個人のアプリ開発者や中小のネット企業にとっての大勝利だと思います。

この問題が起きてからアメリカの独占禁止法について少しだけ詳しくなったんですが、アメリカでは独占しているだけでは違法じゃないそうです。例えば島があってそこに住んでいる人達は仕事に行くのに島に一個しかない橋を渡るとします。その橋はある会社の持ち物だとします。独占していますよね。

でもこれは違法じゃないんだそうです。

ただし、その会社が島でMilkを売る会社も持っていて、ある島の住人がMilkをその島で売ろうとしたらその人には橋を使わせない。とした時に初めて独占禁止法に違反するらしいんです。

で、先程の話に戻りますが、I-Phoneは携帯電話ですのでこの例の橋、Milkを売ろうとする人は、Epic Gamesにぴったり対応している気がします。

しかし前の判決では、Apple製品とアプリの関係は、任天堂のSwitchやSonyPlayStationとGameの関係と同じと解釈されました。

任天堂のSwitchやSonyPlayStationはGameを売るのが専門ですので、どんなGameを販売するのを彼らが勝手に決めたとしても独占禁止法には違反しません。更にどんな条件でそのGameの儲けを分けるかについても同じです。Appleのアプリもそれと同じと判断されたわけです。

それでApple vs. Epic Gamesの裁判は法律の玄人が見るとAppleの大勝利に見えた訳です。しかしその裁判の後で、EUが全く同じ内容でAppleを訴えているという話がありました。

それっきりこの話は聞かなくなってしまったんですが、いきなりこのNewsです。

EUApple相手に裁判で勝てないと見て新しい法律を制定して対応する事にしたんでしょうか?

Provisionallyと書かれていますが、どの程度Provisionally何でしょうか?

もっと詳しい話が知りたいです。

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

<本文>

1.今週の予定

今週も先週と同じ予定でやって行きます。

  • Niagara: CGHOW氏のTutorialをやる
  • Materialの勉強
  • RPGStoryの改善
  • Open Worldの検証
  • World Machineの勉強
  • 雪山のMapの作成
  • Game DesignポケモンHxHの念能力(戦闘システムの作成)
  • Blenderの勉強

2Niagara: CGHOW氏のTutorialをやる

先週、勉強したAOE ICE in UE4 Niagara Tutorial | Download Files [1]の続きをやろうと思ったんですが、以下のMeshの作り方がまだ分かりません。

f:id:kazuhironagai77:20220410220134p:plain

ので別なTutorialを勉強します。

2.1 Wavy Trails in UE5 Niagara Tutorial | Download Files [2] を勉強する

代わりにこれを勉強する事にしました。

f:id:kazuhironagai77:20220410220159p:plain

軽く途中まで見ましたが、Event を使用したりして思ったより複雑でした。でも全体で14分程度のTutorialなので今週だけで全部出来そうなのでこれにします。

Wavyな形状を作成する方法は沢山ありますが今回はSine Curveを使用して作成するそうです。

Fountainを追加したNSから要らないModuleを外して以下の状態にしました。

f:id:kazuhironagai77:20220410220220p:plain

いつもはUE5 Early Accessを使用していたんですが、TutorialでPreviewを使用してるので、今週はPreviewを使用して実装する事にします。

Preview版は以下に示した様に幾つかのModuleがまとまって一つになっています。更にそのModuleが非常にカッコイイです。

f:id:kazuhironagai77:20220410220244p:plain

結果です。

f:id:kazuhironagai77:20220410220302p:plain

Particle Spawn SectionのInitialize Particle ModuleのMass ModeをUnset にセットしました。

f:id:kazuhironagai77:20220410220318p:plain

f:id:kazuhironagai77:20220410220327p:plain

この個所の値は今まで弄った事がないですね。

f:id:kazuhironagai77:20220410220346p:plain

解説を見るとUnsetにしてもParticleの重さが無くなるわけじゃなさそうです。1と言うのは1gの事なんでしょうか?

更にSizeもUniformに変更しました。

f:id:kazuhironagai77:20220410220410p:plain

更にParticle Spawn SectionのAdd Velocity Moduleの

f:id:kazuhironagai77:20220410220428p:plain

Velocityに

f:id:kazuhironagai77:20220410220449p:plain

Make VectorにMake Vectorをセットして以下の様にX,Y,ZにそれぞれDynamic Inputなどをセット出来る様にします。

f:id:kazuhironagai77:20220410220508p:plain

以下のSuggestionを見るとここにセット出来る物の総称をDynamic Inputと呼ぶのではなくてその中の一部をDynamic Inputと呼ぶみたいです。

f:id:kazuhironagai77:20220410220531p:plain

でも全部を含めた名称が分からないのでここはDynamic Inputを全部の総称として呼ぶ事にします。

今週のNiagaraの勉強はこういう基礎的な部分に注目してやる事にします。

Zの値を100にしました。

f:id:kazuhironagai77:20220410220548p:plain

当然、結果は同じになります。

f:id:kazuhironagai77:20220410220605p:plain

今度はXにSineを追加します。

f:id:kazuhironagai77:20220410220620p:plain

結果です。

f:id:kazuhironagai77:20220410220635p:plain

おお、波打っています。

でもTutorialによるとこの方法だと波の幅が時間と共に横に広がってしまっています。

確かに言われてみると上に行くにつれて波の幅が大きくなっています。

ので別な方法を使用します。

VelocityにRotate Vectorをセットします。

f:id:kazuhironagai77:20220410220656p:plain

更に、Rotation RateにMultiply Floatをセットして

f:id:kazuhironagai77:20220410220711p:plain

AにSine、BにDelta Timeをセットします。

更にPitchの値を100、

f:id:kazuhironagai77:20220410220726p:plain

SineのScaleの値を10.0 にします。

f:id:kazuhironagai77:20220410220744p:plain

すると以下の様な結果になりました。

f:id:kazuhironagai77:20220410220803p:plain

このやり方でも時間が経つと波の幅が横に広がってしまいます。

Velocityを弄るから駄目になるみたいです。

今度はParticleの位置を変更する事にします。

ParametersからParticle Positionを選択して

f:id:kazuhironagai77:20220410220823p:plain

Particle Update Sectionにセットします。

f:id:kazuhironagai77:20220410220842p:plain

Positionを見ると以下の様にSimulation Positionがセットされています。

f:id:kazuhironagai77:20220410220900p:plain

そこにAdd Vector to Positionをセットします。

f:id:kazuhironagai77:20220410220939p:plain

更にこのVectorにParticle Positionをセットします。

f:id:kazuhironagai77:20220410220956p:plain

これで従来のParticle、Positionの位置に追加の値をセットする事が出来るようになりました。

先程やったようにPositionをMake Vectorで3つの値に分割しようとすると

f:id:kazuhironagai77:20220410221014p:plain

Make Vectorがありません。

f:id:kazuhironagai77:20220410221053p:plain

これはTutorialによるとPositionが既にVectorだからだそうです。

なのでここはConvert Vector to Positionを選択してその後でMake Vectorをセットします。

f:id:kazuhironagai77:20220410221110p:plain

細かいですが、知らないとX、Y、Zの値に分割出来ないですね。

ここでやっと、xにSineをセットします。

f:id:kazuhironagai77:20220410221146p:plain

その結果です。

f:id:kazuhironagai77:20220410221204p:plain

今度は、時間の経過によって波の幅が横に広がる事は無くなりました。

次に、全部のParticleが同じ位置から生成されているのでそこを直します。

Particle Spawn SectionにあるShape Location Moduleを開きます。

f:id:kazuhironagai77:20220410221229p:plain

以下の様にセットします。

f:id:kazuhironagai77:20220410221313p:plain

結果です。

f:id:kazuhironagai77:20220410221331p:plain

ただしこの状態だと全てのParticleが全く同じ動きをします。

それぞれのParticleのSpeedをRandom化します。

Particle Update SectionのSet: Particle Positionの

f:id:kazuhironagai77:20220410221351p:plain

Periodに

f:id:kazuhironagai77:20220410221405p:plain

Random Range Floatをセットします。Random Range Floatの値は以下に示したものを使用します。

f:id:kazuhironagai77:20220410221426p:plain

結果です。

f:id:kazuhironagai77:20220410221446p:plain

横への振幅がそれぞれのSproutでバラバラになりました。

このParticleを頭にします。そして別なEmitterでTrailを作成します。

EmitterをDuplicateしました。最初のEmitterをSource、DuplicateしたEmitterをTrailとしました。

f:id:kazuhironagai77:20220410221505p:plain

次にSource EmitterのSpriteを見えなくするために、Particle Spawn SectionのInitialize Particle Moduleの

f:id:kazuhironagai77:20220410221524p:plain

Uniform Spritの値を0にします。

f:id:kazuhironagai77:20220410221549p:plain

これでSpriteが見えなくなります。

Source Emitterの以下のButtonを押してIsolateすると

f:id:kazuhironagai77:20220410221605p:plain

以下に示した様に、確かにSource EmitterのSpriteが見えなくなっていました。

f:id:kazuhironagai77:20220410221654p:plain

次にTrail Emitterの要らないModuleを消します。

以下に示した様に消しました。

f:id:kazuhironagai77:20220410221731p:plain

どうやらSource EmitterのSpriteの情報をParticle Attribute Readerを使用してTrail EmitterにPassするみたいです。

何故なら次の手順でSource EmitterをGPU使用に変更しているからです。

Source EmitterのPropertiesの設定を

f:id:kazuhironagai77:20220410221812p:plain

GPUに変更します。

f:id:kazuhironagai77:20220410221829p:plain

当然、受け手であるTrail EmitterのPropertiesもGPUに変更します。

f:id:kazuhironagai77:20220410221845p:plain

Particle Attribute Readerのやり方は忘れてしまいました。

ちょっとだけ復習します。

検索したら2022-02-28 のBlog2022-02-21のBlogでParticle Attribute Readerを勉強しています。

軽く読み直したら思い出しました。

2022-02-21のBlogで以下のようにまとめていますが、これが最も分かり易い説明です。

f:id:kazuhironagai77:20220410221905p:plain

これ自体は簡単なんですが、Source Emitterで大量のParticleを発生した時にそれぞれのParticleの情報を得ようとすると途端に複雑になります。その正しいやり方を2022-02-28 のBlogで検証しています。

こんだけ理解してれば十分でしょう。

続きをやります。

Trail EmitterのEmitter Update SectionにSpawn Particle from Other Emitter Moduleを追加します。

f:id:kazuhironagai77:20220410221920p:plain

Spawn Particle from Other Emitter Moduleを使うのか!

Particle Attribute Readerが実装されているModuleのはずです。実際に使用した事はまだないです。

Spawn Particle from Other Emitter Moduleの設定は以下の様になっていました。

f:id:kazuhironagai77:20220410221935p:plain

取りあえずSpawn Particle from Other Emitter ModuleのEmitter NameにSourceをセットします。

f:id:kazuhironagai77:20220410221955p:plain

まだErrorがあります。

そのErrorの下にAttribute Readerがあり、Particle Attribute Readerがセットされています。

Fix Issueを押します。

Particle Spawn SectionにSample Particle from Other Emitter Moduleが追加され、Errorの表示が消えました。

f:id:kazuhironagai77:20220410222042p:plain

Previewも以下の様になっています。

f:id:kazuhironagai77:20220410222107p:plain

一寸だけSample Particle from Other Emitter Moduleの実装を見てみます。

f:id:kazuhironagai77:20220410222125p:plain

むむむ。

これは結構複雑ですね。最初のCommentの所だけ見てみます。

f:id:kazuhironagai77:20220410222147p:plain

この部分はSourceで生成されたParticleのうちの一つを選んでいるようです。前に勉強した時はRandomに生成したParticleから一つを選ぶ方法だけ実装しましたが、ここにはSequentialにParticleを選ぶ方法も実装されています。

最後にClampしている理由は分かりませんね。この実装だったらClampしなくてもMaxの値は超えない気がします。まあ実際に計算した訳ではないので間違っているかもしれませんが。

これらの実装については後で検証する事にします。

今度はEmitter Update SectionのSpawn Particle from Other Emitterの設定を変更します。

f:id:kazuhironagai77:20220410222217p:plain

まずSpawn Rateを10倍の100にします。

f:id:kazuhironagai77:20220410222235p:plain

結果です。

f:id:kazuhironagai77:20220410222259p:plain

まぶしすぎます。

Particle Spawn SectionのInitialize Particle Moduleの設定を

f:id:kazuhironagai77:20220410222316p:plain

以下の様に変更します。

f:id:kazuhironagai77:20220410222333p:plain

結果です。

f:id:kazuhironagai77:20220410222355p:plain

かなり良い感じです。

ここでCGHOW氏、やっぱり参照にしているVFXではRibbonを使用しているのでRibbonに変更すると発言します。

はい?

更に、Spawn Particle from Other Emitter ModuleはRibbonにも対応していますが、GPURibbon に対応してないのと、Particle Attribute ReaderをRibbonで使用した時に何か問題が発生してそれが解決出来なかったのでEvent、Event Handlerで実装する事にするそうです。

えー。

今までやったのほぼやり直しじゃないですか。

まあ、勉強ですので、やり直すのは結構大切ですが。

でも、Ribbonの場合の様にCPUを使用する事を強制された場合、Event とParticle Attribute Readerのどちらかが有利なのかは興味がありますね。これを研究、検証したらそれだけで一本の記事になりますし。

Emitterの設定をParticle Attribute Readerを使用する前に戻します。

f:id:kazuhironagai77:20220410222413p:plain

今度はEventとEvent Handlerを追加します。

Source EmitterのParticle Update SectionにGenerate Location Event Moduleを追加します。

f:id:kazuhironagai77:20220410222434p:plain

次にTrail EmitterにEvent Handlerを追加します。

f:id:kazuhironagai77:20220410222453p:plain

Event Handler Properties ModuleのSourceにEvent Locationをセットします。

f:id:kazuhironagai77:20220410222519p:plain

と思ったらSourceにEvent Locationが表示されません。

SourceのEventを直します。

Source EmitterのParticle Update SectionにあるGenerate Location Event Moduleの位置をSolve Forces and Velocityの上に移動します。

f:id:kazuhironagai77:20220410222539p:plain

すると以下に示した様にErrorが3つも発生します。

f:id:kazuhironagai77:20220410222614p:plain

直します。

まずParticle Update SectionのGenerate Location Event Moduleの設定

f:id:kazuhironagai77:20220410222635p:plain

に表示されているFix Issueを押します。

f:id:kazuhironagai77:20220410222652p:plain

更にPropertiesの

f:id:kazuhironagai77:20220410222709p:plain

Required Persistent IDsにCheckを入れます。

f:id:kazuhironagai77:20220410222726p:plain

はい。以下に示した様にErrorが綺麗に直りました。

f:id:kazuhironagai77:20220410222744p:plain

この結果、Trail EmitterのEvent Handler SectionのEvent Handler Properties Moduleの

f:id:kazuhironagai77:20220410222821p:plain

SourceにLocation Eventが表示されるようになりました。

f:id:kazuhironagai77:20220410222838p:plain

当然、Location Eventを選択します。

f:id:kazuhironagai77:20220410222857p:plain

更にExecution ModeはSpawned Particleを選択します。

f:id:kazuhironagai77:20220410222916p:plain

これはTrail EmitterでRibbonを生成するのでSource EmitterのParticle が生成した時に一回だけ付けるだけで十分だからです。

Event Handler SectionにReceive Location Event Moduleをセットします。

f:id:kazuhironagai77:20220410222933p:plain

結果です。

f:id:kazuhironagai77:20220410223000p:plain

あれ。Tutorialだと

f:id:kazuhironagai77:20220410223019p:plain

となっているんですが。

あ。Trail Emitterの

f:id:kazuhironagai77:20220410223049p:plain

のSpawn Numberに1をセットする必要もありました。

f:id:kazuhironagai77:20220410223107p:plain

対象となるSource Emitter内でSpawn したParticleに対して、Trail Emitter内で何個のParticleを生成するのかを指定しているのがこれです。Default値が0個になっていました。

結果です。

f:id:kazuhironagai77:20220410223130p:plain

うん。出来ていますね。

今度はRibbon Renderer Moduleを作成します。

Trail EmitterのRender SectionのSprite Renderer Moduleを消してRibbon RendererのModuleを追加します。

f:id:kazuhironagai77:20220410223148p:plain

Ribbon Rendererで使用するMaterialを作成します。

f:id:kazuhironagai77:20220410223211p:plain

M_Ribbonと名付けました。

f:id:kazuhironagai77:20220410223228p:plain

まずResult Nodeの設定を以下の様にします。

f:id:kazuhironagai77:20220410223249p:plain

半透明のMaterialを作成する時の鉄板のやり方ですね。

結果、Result Nodeが以下の様になりました。

f:id:kazuhironagai77:20220410223310p:plain

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

f:id:kazuhironagai77:20220410223334p:plain

結果です。

f:id:kazuhironagai77:20220410223348p:plain

うーん。

もう少し消えるまで長い方が良い気がします。

PowerのExpの値を0.5にしてみました。

f:id:kazuhironagai77:20220410223423p:plain

こっちの方が断然良いですね。

後、MaskでRを指定していますが、これが良く分かりません。今回のRibbonは縦に伸びるんだからGを指定すべきな気がします。

この辺の値の設定は、最初はTutorial通りにやって上手くいかなかったら直す事にします。

Trail EmitterのRender SectionのRibbon Renderer ModuleのMaterialに今作成したMaterialをセットします。

f:id:kazuhironagai77:20220410223445p:plain

結果です。

f:id:kazuhironagai77:20220410223501p:plain

はい。出来ています。

先程、Materialの所で述べた以下の意見ですが、

f:id:kazuhironagai77:20220410223519p:plain

どうもRibbonの設定でR側に伸びるようになっているみたいですね。

一寸だけ確認してみます。

MaterialのMaskの値をGに変更してみました。

f:id:kazuhironagai77:20220410223532p:plain

やっぱりそうですね。GだとRibbonの横方向に透明になっています。

一個勉強になりました。

今度はRibbonに色をつけます。

以下の様にRibbonが画面の下にある時は青、上にある時は緑に色付けします。

f:id:kazuhironagai77:20220410223551p:plain

Particle Update SectionにColor Moduleを追加します。

f:id:kazuhironagai77:20220410223608p:plain

Color Moduleの設定は以下の様になっています。

f:id:kazuhironagai77:20220410223642p:plain

ColorにColor from Curveをセットします。

以下の様になりました。

f:id:kazuhironagai77:20220410223700p:plain

このCurveの右上の図を右クリックして赤をセットします。

f:id:kazuhironagai77:20220410223718p:plain

すると

f:id:kazuhironagai77:20220410223737p:plain

一個、一個のRibbonで色が変化してしまいます。

のでColorにLerp を使用します。

f:id:kazuhironagai77:20220410223755p:plain

Lerpの設定は以下の様になっています。

f:id:kazuhironagai77:20220410223816p:plain

以下の様に設定します。

f:id:kazuhironagai77:20220410223834p:plain

Lerp FactorにNormalized Distance Rangeを使用して、End PointにParticle のPositionをセットします。最後にDistanceに166をセットします。

この部分の実装は、本当に理解しようとすると結構、考える必要があるんですが、今回は、こうやると以下の様に全体で色が変わる設定が出来る事だけ覚えておきます。

後に、Ribbon全体で色を変化させたい時に勉強し直します。

結果です。

f:id:kazuhironagai77:20220410223855p:plain

むむむ。

色の変化は望んだ通りになっていますが、Tutorialの結果と微妙に違います。

f:id:kazuhironagai77:20220410223919p:plain

Distanceの値を大きくすると

f:id:kazuhironagai77:20220410223932p:plain

f:id:kazuhironagai77:20220410223943p:plain

Ribbonのない粒々みたなのが少なくなります。

良く分からないので、このままやっていきます。

上記のようにセットしましたが実際はParticle PositionのZの値だけにセットしたいわけです。その為の設定をします。

まず

f:id:kazuhironagai77:20220410224004p:plain

に、Convert Vector to Positionを適用します。

f:id:kazuhironagai77:20220410224023p:plain

以下に示した様になるのでMake Vectorを適用します。

f:id:kazuhironagai77:20220410224040p:plain

以下の様になります。

f:id:kazuhironagai77:20220410224059p:plain

これでZに好きなDynamic Inputを追加出来る様になりました。

そのZにMake Float from Vectorをセットします。

f:id:kazuhironagai77:20220410224115p:plain

その結果、以下の設定が使用出来るようになりました。

f:id:kazuhironagai77:20220410224138p:plain

ChannelをZにセットして

f:id:kazuhironagai77:20220410224212p:plain

上記のVectorにConvert vector to Positionを適応します。

すると以下の様な設定に変化します。

f:id:kazuhironagai77:20220410224230p:plain

そこにParticle Positionをセットします。

f:id:kazuhironagai77:20220410224251p:plain

結果です。

f:id:kazuhironagai77:20220410224330p:plain

出来てます。出来ていますが、上記の実装が実際に何をやっているのか全然分かりません。来週、この部分の実装については検証する事にします。

色をReferenceと同じにします。

f:id:kazuhironagai77:20220410224349p:plain

結果です。

f:id:kazuhironagai77:20220410224409p:plain

色が全体的に薄いです。

Tutorialの例は

f:id:kazuhironagai77:20220410224436p:plain

こんな感じです。

でもTutorialの場合も後ろが真っ黒だから色が濃いだけかもしれません。

残りは微調整なのでスキップします。

今週はここまでとして残りは来週、やる事にします。

3Materialの勉強

今週もToon Shadingの勉強をやっていきます。今週はBen Cloward先生のToon Shader Ink Outlines - Shader Graph Basics - Episode 39 [2]を勉強します。

3.1 Toon Shader Ink Outlines - Shader Graph Basics - Episode 39 [2]を軽く見

先週の以下の部分の訂正から始まっていました。

f:id:kazuhironagai77:20220410224507p:plain

Atmosphere Sun Light Vectorと言うNodeを使用するとUEでもDirectional Lightの方向を得る事が出来るそうです。

f:id:kazuhironagai77:20220410224539p:plain

所が、このNodeが見つかりません。

Preview 版のUE5を開いたらありました。

f:id:kazuhironagai77:20220410224559p:plain

Projectから開くと必ずearly access版になるので何げにearly access版ばかり使用していましたが、これからはPreview 版のUE5を使用する事にします。

Outlineの作り方ですが、Shaderから作成する方法、Blenderを使って3d Modelから作成する方法と、最後にReferenceだけですが、Post Processを使用して作成する方法の3つが紹介されていました。

ふーん。

結構、Toon Shadingが誕生した当時のOutlineを作成する苦悩が感じられました。

3.2 Toon Shader Ink Outlines - Shader Graph Basics - Episode 39 [2]を勉強する

兎に角、やってから色々考えましょう。

先週、作成したToon ShaderのMaterialをTutorialと同じ実装に戻します。

f:id:kazuhironagai77:20220410224626p:plain

結果です。

f:id:kazuhironagai77:20220410224638p:plain

TutorialのPreviewは以下に示した通り、Atmosphere Sun Light Vector Nodeを使用した結果、影に沿ってToon Shadingが出来ているのが分かります。

f:id:kazuhironagai77:20220410224710p:plain

私のPreviewSphereが空中で浮いているので影がどこにあるのか分かりません。

これPreview内の球の位置を移動出来るって事でしょうか?

うーん。出来るにしてもやり方が分かりません。

Level上に配置して確認します。

f:id:kazuhironagai77:20220410224729p:plain

うーん。

逆じゃない。

光が当たっている方が色が濃くなっています。

Atmosphere Sun Light Vectorノードに-1を掛けてみました。

f:id:kazuhironagai77:20220410224804p:plain

結果です。

f:id:kazuhironagai77:20220410224822p:plain

あら。凄い良いですね。

これから3つの方法でOut Lineを作成していきます。

以下に実装方法を示します。

f:id:kazuhironagai77:20220410224851p:plain

うーん。成程。

この実装方法の理屈はもう散々勉強したやつです。

結果です。

f:id:kazuhironagai77:20220410224908p:plain

Level上に配置した結果です。

f:id:kazuhironagai77:20220410224923p:plain

いい!

凄く良いです。

線を太くしてみました。

f:id:kazuhironagai77:20220410224948p:plain

うーん。線は球の上は太くて、球の下の方は細くなってほしいですね。

後、影にも線が欲しいです。

後、Tutorialによるとこの方法が通用するのは球のような丸いObjectだけで、Cubeのような平面があるObjectだと

f:id:kazuhironagai77:20220410225013p:plain

のようになってしまいます。

うーん。これは実用性0かもしれませんね。

それで次のやり方になります。

次のやり方はBlenderを使用してやるそうです。

ひゃー。

Blender勉強し始めて良かったです。

以下に示したような結果になるみたいです。

f:id:kazuhironagai77:20220410225035p:plain

Tutorialはここから始まるんですが、

f:id:kazuhironagai77:20220410225057p:plain

私のMonkeyはカクカクです。

f:id:kazuhironagai77:20220410225115p:plain

Tutorialの画面を見るとスパナが写っています。

f:id:kazuhironagai77:20220410225135p:plain

何らかのModifierを使用してSmoothにしているはずです。

ObjectをSmoothにしなくてもこの方法でOutlineが作成出来るかもしれませんが、出来ればTutorialと同じ形にしたいです。

そのものズバリ、SmoothというModifierがありました。

f:id:kazuhironagai77:20220410225150p:plain

結果です。

f:id:kazuhironagai77:20220410225211p:plain

うーん。

全く同じです。

Smoothの値を弄ってみます。

SmoothのFactorを弄ってみました。

f:id:kazuhironagai77:20220410225234p:plain

結果です。

f:id:kazuhironagai77:20220410225251p:plain

これは違う。

このModifierは外します。

良く見たらTutorialにどのModifierを使用しているのか写っていました。

f:id:kazuhironagai77:20220410225310p:plain

Sub Division Surfaceを使用しました。

結果です。

f:id:kazuhironagai77:20220410225326p:plain

まだ、TutorialのMonkeyとは違いますが、まあ、これ位なら何とかなりそうです。

これでやってみます。

まず、MonkeyをDuplicateします。

f:id:kazuhironagai77:20220410225354p:plain

同じ位置にしているので3D のImageは変わっていません。

f:id:kazuhironagai77:20220410225412p:plain

Modelingに移ります。

f:id:kazuhironagai77:20220410225429p:plain

表示が以下に示した様な状態に変化しました。

f:id:kazuhironagai77:20220410225443p:plain

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

f:id:kazuhironagai77:20220410225505p:plain

これは全選択しているだけだと思います。

試しに全部のVertexを選択してみました。

f:id:kazuhironagai77:20220410225522p:plain

ほぼ同じですね。

ここで、FaceからExtrude Faces Along Normalsを選択します。

f:id:kazuhironagai77:20220410225542p:plain

Mouseを動かして、DuplicateしたObjectを少しだけ元のObjectより大きくします。

f:id:kazuhironagai77:20220410225601p:plain

この少しだけ大きくしたObjectのFaceを以下に示した方法でFlipします。

f:id:kazuhironagai77:20220410225630p:plain

しました。

結果です。

f:id:kazuhironagai77:20220410225656p:plain

うーん。Flipされているのか良く分かりません。

Layoutに戻るとOutlineが出来ていると言っていますが出来てません。

f:id:kazuhironagai77:20220410225713p:plain

あ。

以下の所でBackface Cullingを選択しないとOutlineは表示されないとありました。

f:id:kazuhironagai77:20220410225732p:plain

結果です。

f:id:kazuhironagai77:20220410225756p:plain

されています。

この後、TutorialではDuplicateしたObjectにMaterialを追加しています。

BlenderでMaterialを追加した事はないのですが、やってみます。

以下のTool からMaterialを選択します。

f:id:kazuhironagai77:20220410225813p:plain

こんな設定になっています。

f:id:kazuhironagai77:20220410225830p:plain

+Newを押します。

f:id:kazuhironagai77:20220410225902p:plain

Materialが追加されました。

Viewport Displayを開き

f:id:kazuhironagai77:20220410225920p:plain

Colorを黒に指定します。

f:id:kazuhironagai77:20220410225937p:plain

結果です。

f:id:kazuhironagai77:20220410225955p:plain

うーん。目の周りとかの線がほしい所に、黒線が出てないですね。

このような2つのGeometryが別々のMaterialを持っているObjectをどうやってUEにImportするのかとか、分からない事はまだ沢山ありますが、一応Tutorialで教えている範囲の内容は理解出来ました。

最後はPost Processを使用したOutlineの作成方法です。

これはReferenceだけ紹介されていました。

f:id:kazuhironagai77:20220410230014p:plain

Post ProcessによるOutlineの作成についても勉強します。

まずReference にあるTutorialを軽く見てみます。

3.3 Post ProcessによるOutlineの作成の勉強 その1(ReferenceにあるTutorialを軽く見る)

Toon Shader Ink Outlines - Shader Graph Basics - Episode 39 [2]で紹介されていたPost ProcessによるOutlineの作成方法についてのTutorialを見ていきます。

この一年間の勉強でMaterialについてかなり理解して来ました。

同時にMaterialを使用しないと作成出来ないVFX、Landscapeについても深いLevelで理解出来るようになりました。

最後にMaterialを使用する技術としてPost Processがありますが、これの勉強はほとんどしてないです。後にPost Processを勉強する時に優れたTutorialを今の内に探しておきたいです。

そういう観点からも、これらのTutorialを見てみます。

Simple Post Process Outline in Unreal [4]

5分程度の短いTutorialですが、声が小さい事を除けば大変分かり易かったです。

ただこれ以外のTutorialは作成していないので、Post Processの勉強には使用出来ないですね。

Multi-Colored Outlines - ( UE4 Tutorial) [5]

誰のTutorialかと思ったら、Unreal CGさんのTutorialでした。このTutorial自体はやった事はないですが、Unreal CGさんが作成した他のOutlineのTutorialは何個か作成した事があるはずです。

f:id:kazuhironagai77:20220410230050p:plain

最初の5分位見ましたが、長いです。30分位あります。これは今週、勉強するのは無理ですね。

イスのOutlineが凄いです。更に以下に示した様にOutlineに線を追加したり出来ます。

f:id:kazuhironagai77:20220410230108p:plain

Toon Shader & Custom Shadow - UE4 Postprocess Tutorial [6]

これもUnreal CGさんのTutorialでした。

f:id:kazuhironagai77:20220410230131p:plain

凄い綺麗です。

こっちも30分あります。

3.4 Simple Post Process Outline in Unreal [4] をやる

まず、Materialから作成します。

Result NodeのMaterial DomainsにPost Processをセットします。

f:id:kazuhironagai77:20220410230151p:plain

結果です。

f:id:kazuhironagai77:20220410230208p:plain

凄いですな。

Emissive Color以外全部消えました。

Scene Texture ノードを追加して

f:id:kazuhironagai77:20220410230225p:plain

Scene Texture IdをPost Process Input 0にセットします。

f:id:kazuhironagai77:20220410230242p:plain

結果です。

f:id:kazuhironagai77:20220410230258p:plain

以下のように実装して

f:id:kazuhironagai77:20220410230318p:plain

Levelに戻り、

f:id:kazuhironagai77:20220410230337p:plain

Global Post Process Volumeの

f:id:kazuhironagai77:20220410230357p:plain

のPost Process Materialにセットします。

f:id:kazuhironagai77:20220410230413p:plain

次にView Mode にBuffer VisualizationのOverviewを選択します。

f:id:kazuhironagai77:20220410230432p:plain

結果です。

f:id:kazuhironagai77:20220410230506p:plain

この中で使うのがScene DepthとCustom Depthだそうです。

Scene Depthです。

f:id:kazuhironagai77:20220410230525p:plain

Custom Depthです。

f:id:kazuhironagai77:20220410230538p:plain

Custom Depthは何も写っていません。

以下の項目にチェックをいれたActorだけ写るそうです。

f:id:kazuhironagai77:20220410230600p:plain

試しにTableのRender Custom Depth PassにCheckを入れてみます。

f:id:kazuhironagai77:20220410230616p:plain

おお。Tableだけ灰色で表示されています。

もう一つ、Custom Stencilがあります。

これを見る為には、Project settingのRenderingにあるPost ProcessingのCustom Depth-Stencil PassにEnabled with Stencilを選択する必要があります。

f:id:kazuhironagai77:20220410230636p:plain

そしてCustom Depth Stencil Valueに0以外の数字をセットします。

試しに1にしました。

f:id:kazuhironagai77:20220410230653p:plain

結果です。

f:id:kazuhironagai77:20220410230709p:plain

そして又、Materialに戻ります。

f:id:kazuhironagai77:20220410230728p:plain

これです。この機能をずっと探していたんです。

以下に示した実装で実現しました。

f:id:kazuhironagai77:20220410230745p:plain

うーん。

これが隣のPixelの値を得る方法だそうです。

f:id:kazuhironagai77:20220410230759p:plain

てっきりそういうNodeがあるんかと思っていたんですが違いました。

取りあえず結果がみたいので、残りの実装も追加しました。

f:id:kazuhironagai77:20220410230813p:plain

結果です。

f:id:kazuhironagai77:20220410230829p:plain

あれ。

変化がないです。

Tutorialだと以下の様になっています。

f:id:kazuhironagai77:20220410230851p:plain

良く分からないのでComment欄に同じ問題で困っている人がいないか探したらありました。

f:id:kazuhironagai77:20220410230907p:plain

作者の回答もありました。

f:id:kazuhironagai77:20220410230920p:plain

作者の提供しているMaterialをCopyしてテストしてみます。

f:id:kazuhironagai77:20220410230934p:plain

結果です。

f:id:kazuhironagai77:20220410230954p:plain

何も変わりませんね。

うーん。

この質問をした人は別なTutorialを試したら出来たみたいですね。

f:id:kazuhironagai77:20220410231011p:plain

4.24でもう一回試してみます。

f:id:kazuhironagai77:20220410231026p:plain

うーん。出来ました。

今週はここまでにして来週考える事にします。

4RPGStoryの改善

4.1 先週の直しの続き

<Start MenuのSkipの続き>

Start 画面は取りあえずはこのままでいいです。

<宿屋の直し>

宿屋で会話ボタンを押すと神殿にいる神官との会話になってしまいます。

f:id:kazuhironagai77:20220410231335p:plain

これを直します。

調べたら会話ボタンを押すと、神殿で神官と話した時に表示されるWidgetが表示されるようにセットされていました。

f:id:kazuhironagai77:20220410231355p:plain

宿屋の主人との会話を表示するWidgetに直しました。

f:id:kazuhironagai77:20220410231412p:plain

直りました。

会話の内容は後で全体の流れを見ながら直します。

次にSoldierの表示を直します。

f:id:kazuhironagai77:20220410231433p:plain

直しました。

f:id:kazuhironagai77:20220410231452p:plain

取りあえず名前を表示する事にします。

テストします。

f:id:kazuhironagai77:20220410231508p:plain

このWidgetは他にも改善すべき個所があります。それは他のUIとのDesignが少しだけ違うと言う事です。

宿屋、道具屋、武器屋、神殿のWidgetは統一すべきです。本当はNPC、戦闘画面、Itemを拾う、警告などすべてのWidgetのデザインを最初に統一すべきでした。

こういうのはやってみないと分からないです。

このUEの勉強の最終目標としては、Turn制RPGをUEを使用して作成するための最適な手順を全部まとめる事があります。それが決まれば、何を勉強すべきなのかも決まって来ます。

今までの勉強でもわかっている事はかなりあります。

まず、Gameの作成は化学工学でいう所のUnit Operationと同じ仕組みで行うのが最適である。と言う事です。このUnit OperationはGameを構成する要素をそれぞれ作成すると言う意味です。そしてその要素とは

  • Levelの作成、
  • 戦闘システムの作成、
  • VFXの作成、
  • そしてWidgetなどのUIの作成

などが上げられます。

これらはかなりの部分でDesign力が必要とされますが、基本的にはProgrammingの延長線上にある技術で、CSの基礎が出来ている人なら頑張るだけで作成出来る部分です。

もう一つはStoryの作成で、この部分は未知な部分が多いです。

一つ分かっているのは、Storyのテーマには、表と裏があり、裏のテーマは表立っては語れないタブーが設定されていると言う事です。

この辺をしっかりまとめないと単なるおふざけになり、遊ぶに値しないゴミになってしまいます。

このUnit Operation法によるUEを使用して作成するTurn制RPGの手順が完成すれば、作成人数やGameのVolumeにもよりますが、半年から一年でTurn制RPGが完成出来るようになるはずです。更に言えば、今全体の何%が完成しているのかも常に分かるので計画をキッチリ立てる事が出来るようになります。

この辺を最終目標にして今のRPGを作成しています。

<宿屋、道具屋、武器屋、神殿のUIの比較>

今週は直しませんが、どのUIがどんな内容を表示しているのかの比較だけは行っておきます。

道具屋です。

f:id:kazuhironagai77:20220410231541p:plain

武器屋です。

f:id:kazuhironagai77:20220410231600p:plain

道具屋とほとんど同じに見えますが、買い物、売り物と表示されていたり、Buttonの位置が違っていたりしています。

宿屋です。

f:id:kazuhironagai77:20220410231620p:plain

こっちは左側にPlayerの操作するキャラの最低限の情報が表示されていて、前の二つより分かり易いです。

神殿です。

f:id:kazuhironagai77:20220410231640p:plain

こっちも道具屋や武器屋よりは分かり易いです。

だたしNPCのUIと比べると

f:id:kazuhironagai77:20220410231700p:plain

うーん。一概にどっちが良いとは言えませんね。

<戦闘後にお金が貰えるようにする>

これも後で考えるようにします。現在、薬草が大量に貰えるので、それを売ればお金になります。

後は、もうBugはないはずです。

4.2 新たなBug出しをする

新たなBug出しをします。

Start 画面からMap1に移動する時

f:id:kazuhironagai77:20220410231730p:plain

一度もMap1をLoadしていない状態で移動すると、Playerの操作するキャラがLandscapeが生成されるより速く落下して死んでしまいます。

これはPackingした後でどうなるのか調べる必要があります。

しかもその場合、宿屋の主人は落ちて消えています。

f:id:kazuhironagai77:20220410231752p:plain

普段の場合。

f:id:kazuhironagai77:20220410231808p:plain

武器の隠し場所の前にいる老人のセリフを作成する必要があります。

f:id:kazuhironagai77:20220410231827p:plain

現在のParameterです。

f:id:kazuhironagai77:20220410231848p:plain

短剣(小)を装備しました。

f:id:kazuhironagai77:20220410231903p:plain

攻撃値が50になりました。

戦闘に負けました。

f:id:kazuhironagai77:20220410231921p:plain

「もう一度始める」を押します。

武器は装備していますが、

f:id:kazuhironagai77:20220410231940p:plain

攻撃値が40になっています。

f:id:kazuhironagai77:20220410232000p:plain

しかも武器を外すと攻撃値が30 になってしまいました。

f:id:kazuhironagai77:20220410232022p:plain

ここはBugの宝庫かもしれません。

もう少し調べる事にします。

金貨0枚で買える道具や武器が大量にあります。

f:id:kazuhironagai77:20220410232038p:plain

職業を狩人にして弓矢を装備してMonsterと戦いました。

Game Overになって「もう一度始める」を押して復活すると

f:id:kazuhironagai77:20220410232055p:plain

弓矢は持っていますが、職業が弟子に戻ってしまいました。

f:id:kazuhironagai77:20220410232112p:plain

転職石を使用出来るのはLevelが10になってからの方が面白い気がしますね。

詩人のセリフはこのゲームとは何の関係もありません。

f:id:kazuhironagai77:20220410232131p:plain

それよりも異世界から来た人は夜眠らないとかの話の方が面白いかと思います。

戦士としてMonsterと戦闘になりましたが、戦闘画面では弟子に戻ってしまいました。

f:id:kazuhironagai77:20220410232148p:plain

戦闘から戻って来ても弟子のままです。

f:id:kazuhironagai77:20220410232208p:plain

f:id:kazuhironagai77:20220410232220p:plain

戦闘中の画面でLevelを表示してほしいです。

f:id:kazuhironagai77:20220410232238p:plain

NPCが夜になっても消えません。

f:id:kazuhironagai77:20220410232258p:plain

封印された石像のボタンがDefaultのままです。

f:id:kazuhironagai77:20220410232319p:plain

道具を使用した時にCommentが表示されないため、本当に道具を使用したのかどうかが分かりにくいです。

f:id:kazuhironagai77:20220410232339p:plain

後、道具は何個持てるのかについての制限も必要です。

銀河鉄道の駅員がGrey manのままでした。

f:id:kazuhironagai77:20220410232356p:plain

宿屋に泊まろうとしたら又、宿屋の主人が消えています。

f:id:kazuhironagai77:20220410232414p:plain

ポーズ画面に地図がまだ残っています。

f:id:kazuhironagai77:20220410232430p:plain

この機能をどうするのか決める必要があります。

Monsterは全部倒してしまったのでやる事がないです。

f:id:kazuhironagai77:20220410232446p:plain

Monsterが復活するようにします。

Save 出来る神官もいません。

これも追加します。

4.3 来週直すBugの整理

以下のBugなどを直します。

  • 宿屋、道具屋、武器屋、神殿のUI
  • Start 画面からMap1に移動する時、Map1Landscapeが完成する前にCharacterが生成して落ちてしまうBug
  • 宿屋の主人は落ちて消えている
  • 武器の隠し場所の前にいる老人のセリフを作成
  • 武器を装備した状態で戦闘中に死んで、復活した時に攻撃力がオカシイBug
  • 金貨0枚で買える道具や武器を直す
  • 戦闘すると職業が弟子に戻ってします
  • 戦闘中の画面でLevelを表示
  • 転職石を使用出来るのはLevel10になってから。
  • 詩人のセリフを変える
  • NPCが夜になっても消えません。
  • 封印された石像のボタンがDefaultのまま
  • 道具を使用した時にCommentが表示されないため、本当に道具を使用したのかどうかが分かりにくい
  • 道具は何個持てるのかについての制限
  • 銀河鉄道の駅員がGrey manのまま
  • ポーズ画面の地図をどうするのか?
  • Monsterが復活するようにする
  • Save 出来る神官を追加

取りあえずこれから直して行きます。

5Open Worldの検証

Open Worldの勉強は色々な方面に散らかってしまって最初にやりたい事が分からなくなってしまう可能性が高いので、以下のまとめは常に載せて置く事にします。

f:id:kazuhironagai77:20220410232526p:plain

後、熱くなってすっかり忘れてしまったんですが、UE5になったらWorld Partitionがありますので、World Compositionの勉強はそこそこにしておくべきと言う事も付け足しておきます。

ただ、私のPCではUE5がしっかりと動く可能性は低いので、ずっとUE4使う可能性も結構あります。その辺は適切に対応したいと考えています。

更に、毎週やる事が結構変わる可能性が高いので、常に先週のまとめからやる事にします。

5.1 先週のまとめ

先週やったのはWorld Compositionの復習と、Smart Poly氏のTutorialの復習です。

World Compositionに関しては、2021-09-26のBlogから2021-11-22のBlogまでにまとめられているWorld Compositionの勉強内容について復習しました。

この内容を簡単に書くと「World Composition And Basic Level Streaming - Unreal Engine 4 Tutorial [7]を勉強しました。」に尽きます。

今週はこのWorld Composition And Basic Level Streaming - Unreal Engine 4 Tutorial [7]を勉強します。

Smart Poly氏のTutorialに関してはHow To Make A Massive Open World Map In Unreal Engine 4 [8]を復習しました。先週はWorld Machineで生成されたHeight Map をどうやってUE4にImportしたのがについて注目して復習しました。

このTutorialではWorld CompositionそのものをHeight Mapから作成していてそのやり方自体が、初めて見るものだったんですが、結局の所、World Machineで生成されたHeight MapとそれをImportしたUE4が生成するLandscapeの大きさの関係が良く分からなかったです。

で来週も引き続き検討するとして終わっています。

5.2 Unreal Engine 5 : How to Create a MASSIVE Open World Landscape (100 km2 map) - UE5 Tutorial [9]を勉強する

何でいきなり、話が変わっているのかと言うと偶然、YouTubeのお勧め動画でUnreal Engine 5 : How to Create a MASSIVE Open World Landscape (100 km2 map) - UE5 Tutorial [9]が出て来たんですが、このTutorial、100 kmのLandscapeを作成しています。

f:id:kazuhironagai77:20220410232636p:plain

作者はKlaus氏で初めて聞く名前です。

結構質の高いTutorialのようで、勉強しておく必要がありそうです。このやり方で100 kmのLandscapeの作成方法が分かったらそれで良い気がしてきました。

ただし、このTutorial、UE5を使用しています。

うーん。

今、作成しているGameは4.24を使用していますが、このGameが完成したら次のGameはUE5で作成する事になると思います。次のGameはOpen Worldで作成したいので今、色々と調べている訳です。そう言う訳で、別にUE4にこだわる必要は元々なかったわけで、これで勉強します。

今週はそんなにしっかり勉強する時間もないので、軽く見て感想を述べる程度にします。

このTutorialは以下の章立てで構成されています。

  • Mountain
  • Base Shape and Erosion
  • Texture and Mask
  • Water Mask vs. Unreal Water System
  • Export Setting
  • Non-Distractive Terrain Size
  • Landscape Tiles in UE5?
  • How to Avoid Landscape Artifacts?
  • Importing Single Height Map vs. Tiles
  • Unlimited Imports of Paint Layer Mask
  • Fixing Remaining Shape Edge
  • Creating 10,000 km^2 Map
  • Texturing

最後から二番目の章にある一万キロ平方のOpen Worldの作成方法って何でしょう。見間違いかと思い何度も見直しましたが、そう書かれています。本当なら凄いですね。

それではTutorialを見て行きます。

<Mountain

まずHeight Mapの作成ですが、このTutorialではGaeaを使用しています。

うーん。World Machineじゃないの?

一寸だけ調べたら、Height Map作成に使用するThird PartyのSoftware であるWorld Creator、World Machine、Gaea、Gaia、そしてHoudiniは一長一短がありどれがダントツで優れているとは言えないみたいです。

私にとって最も重要である無料版に関すると、World MachineやHoudiniと違ってGaeaの無料版は商業利用して良いみたいです。

これは勉強する価値があるかもしれませんね。

後、どのサイトでも学び易さ一位はWorld Creatorでした。質問すると必ず回答してくれるそうです。

最初に100 km^2のLandscapeを作成して最後に10,000km^2のLandscapeを作成する方法を教えるそうです。

こっから、Gaeaを使用してどんどんLandscape用のHeight Mapを作成していっています。

所が、Gaeaの使い方が全く分からない私は何を言っているのか全く分かりませんので残りのGaeaのTutorialの部分はSkipします。

Importing Single Height Map vs. Tiles

ここでLandscapeのサイズとImportするHeight MapのResolutionの関係について解説していました。

このTutorialの例ではImportするHeight MapのResolutionのサイズは1009x1009です。

f:id:kazuhironagai77:20220410232718p:plain

そしてUEのDefaultでは1m/Pixelにセットされています。

以下のScaleで100にセットされているのがそうです。

f:id:kazuhironagai77:20220410232734p:plain

これってUnreal Unit、通称UUが1cmに指定されている事を考えると当然でした。

しかし我々は10 km^2がほしいので1,000,000/1009 = 991.080278をScaleにセットします。

f:id:kazuhironagai77:20220410232754p:plain

おお。これが知りたかった!

高さは以下の様に計算します。

このTutorialで使用しているHeight Mapの高さは800mかつUEのDefaultの高さは512なので、80,000/512 = 156.25となります。

f:id:kazuhironagai77:20220410232816p:plain

正直、これだけ分かれば十分です。

Creating 10,000 km^2 Map

10,000 km^2のLandscapeの作成ですが、先程のScaleの所の計算で10kmの所を10,000kmに変更するだけでした。勿論、Gaeaの方では10,000kmのHeight Mapを作成するのに色々やっていましたが。

5.3 Smart Poly氏のHow To Make A Massive Open World Map In Unreal Engine 4 [8]を見直す

Height MapをImportする時に

f:id:kazuhironagai77:20220410232843p:plain

Landscape ScaleがDefault値である100になっています。

と言う事はResolutionが1009x1009のHeight Mapが7x7あるので7063x7063となり、約7km^2になるはずです。

f:id:kazuhironagai77:20220410232902p:plain

なっていますね。

ここのScaleの値をWorld Machineの56 kmと同じ設定にするには5,600,000/7063 = 792.864222002をXとYに代入すれば良かったんです。

うーん。完全に理解しました。

でもこのScaleの値を変更するとComponentとかの値はどうなってしまうんでしょうか?単純にSectionの数が増えるんじゃなくてSection内の升目の大きさが1mから大きくなる気がします。Sizeが100にセットされているからSection内の升目の大きさが100cmになっている気がします。

つまりImportするHeight Mapの大きさに結局は依存しているんじゃないでしょうか?

後、Sub LevelはImportするHeight Mapの数に依存しているみたいですね。

f:id:kazuhironagai77:20220410232919p:plain

7x7で構成されています。

5.4 「16 km^2」のOpen Worldを作成するために

今回の勉強ではLandscapeの大きさの設定に対してかなりの知見が得られました。

それはUE側でLandscapeの大きさを指定しているのがScaleである事が分かった事です。Default値が100であるため1mになります(UU=1cm)。つまり1pixel = 1mに還元されます。

従来のHeight MapのResolutionである1009x1009を使用した場合、約1km^2のLandscapeになるはずです。

このUE側のScaleの設定を1,600,000/1009 = 1585.728444に変更すれば1009x1009のHeight MapをImportした場合16 km^2のLandscapeが出来るはずです。

ただし、このやり方ではSectionを構成する升目が単に大きくなる気がします。

ので従来のLandscapeのQualityを保ちつつ16 km^2のLandscapeを作成するためには1009x1009の16倍のResolution、16144 x 16144のHeight Mapを作成する必要があるかもしれません。

もしくは1009x1009のResolutionのLandscapeを16 x 16枚作成するかです。

来週は、今週得た知見を実際にUEでテストして確認してみます。

6World Machineの勉強

なんと先程、勉強したKlaus氏がGaeaのTutorialも作成してくれてました。

f:id:kazuhironagai77:20220410232952p:plain

今週はWorld Machineの勉強は中止してこのGaeaのTutorialの一番最初のやつを見る事にします。

6.1 Gaea Beginner Tutorial Series : Part 1 – Interface [10] を見る

軽く全部見ましたが、この回のTutorialはGaeaのToolの名前や使い方の解説でした。

でも、このTutorialだけだと本当にGaeaが使用出来る様になるのかちょっと不安ですね。

説明に緩急がないんです。ちょっと聞き逃すと何を言っているのか分からなくなります。理解する為には、自分でGaeaを開いてTutorialの解説通りに一個ずつ弄る必要がありそうです。

公式のSiteにもTutorialやUser Guideがありました。

f:id:kazuhironagai77:20220410233020p:plain

これだけ参考資料があれば最悪、このTutorialが何を言っているのか分からなくてもGaeaの勉強に困る事はなさそうです。

GaeaのFree VersionをInstallする事にします。

f:id:kazuhironagai77:20220410233048p:plain

これでもう一回、勉強する事にします。

6.2 Gaea Beginner Tutorial Series : Part 1 – Interface [10] を勉強する

TutorialはBeta版を使用するのでそれをDownloadしろ。って言ってました。

もう製品版の方をDownloadしちゃいましたよ。私がDownloadしたのは1.3.0で

f:id:kazuhironagai77:20220410233111p:plain

TutorialのBeta版は1.3.8でした。

まあ何とかなるでしょう。

最初は以下の部分についての解説ですね。

f:id:kazuhironagai77:20220410233133p:plain

右端の以下の部分に最近使用したFileが表示されるそうです。

f:id:kazuhironagai77:20220410233147p:plain

初めて開いたので私のは何も表示されていません。

次はTemplateの解説です。

Landscapeの中にも以下に示した様な沢山のTemplateがあります。

f:id:kazuhironagai77:20220410233204p:plain

MountainからDesert Mountainを選択しました。

以下のImageが表示されました。

f:id:kazuhironagai77:20220410233220p:plain

こっちがTutorialのImageです。

f:id:kazuhironagai77:20220410233244p:plain

全然違うじゃないですか。

まあ。Versionが違うからかもしれません。

右側にある2D ボタンを押すと以下のImageが表示されました。

f:id:kazuhironagai77:20220410233259p:plain

大体、TutorialのImageと同じになりました。

2Dの下にある以下のToolはHeight Mapの表示だそうです。

f:id:kazuhironagai77:20220410233315p:plain

試してみます。

f:id:kazuhironagai77:20220410233327p:plain

ほとんど真っ暗です。

その下にある以下のボタンを押すとHeight Mapが見えやすくなるそうです。

f:id:kazuhironagai77:20220410233345p:plain

押しました。

f:id:kazuhironagai77:20220410233358p:plain

はい。今度は分かり易いです。

今度は上に配置してある部分の解説です。

f:id:kazuhironagai77:20220410233417p:plain

最初の0.5kはPreviewのResolutionだそうです。

f:id:kazuhironagai77:20220410233430p:plain

Preview画面の操作方法についてです。

f:id:kazuhironagai77:20220410233445p:plain

MouseのWheelで近づけたり遠ざけたり出来ます。

これをやるためにはPreview画面を選択する必要があります。

Alt + Left Clickで回転出来ます。

f:id:kazuhironagai77:20220410233503p:plain

Spaceを押すとTerrainが原点に戻って来ます。

今度はPreferenceについてです。

以下の場所から選択します。

f:id:kazuhironagai77:20220410233522p:plain

あ。思い出しました。最初にこのTutorialを見た時、なんで良く分からなくなったのかを。

飛ぶんです。上部のToolについての解説をしていたと思ったら、Preview の操作方法についてになったりして。

今度はPreferenceについてです。

f:id:kazuhironagai77:20220410233540p:plain

この辺は時間が有るとき弄ってみます。

今度はPreviewの右下にある以下に示した3つのボタンについてです。

f:id:kazuhironagai77:20220410233557p:plain

最初の井形みたいなやつですが、

f:id:kazuhironagai77:20220410233613p:plain

押すと以下に示した様なチェスの盤のような模様が表示されます。

f:id:kazuhironagai77:20220410233656p:plain

これが有ると具体的に何の役に立つのかは分かりません。

次のボタンは

f:id:kazuhironagai77:20220410233900p:plain

以下の印を表示します。

f:id:kazuhironagai77:20220410233916p:plain

Terrainを回転させるとどっちが前なのかが分からなくなってしまいますが、この印のオレンジがそれを示してくれます。

最後のボタンは

f:id:kazuhironagai77:20220410233935p:plain

Gridを表示します。

Previewの右上にある以下に示したボタンはPreviewの視点を変えます。

下のボタンを選択した場合、First Person Viewになります。

f:id:kazuhironagai77:20220410233948p:plain

はい。

こういう単純な勉強は集中力が続きません。残りは来週勉強する事にします。

7.雪山のMapの作成

今週は崖の部分のMaterialの作成をします。

7.1 How to INSTANTLY TEXTURE your landscapes in UE4 - Unreal Engine tutorial [11] を勉強する

やり方を忘れてしまったのでHow to INSTANTLY TEXTURE your landscapes in UE4 - Unreal Engine tutorial [11]をもう一回見ます。

全部、見て分かったんですが、最初に崖のLayerを作成する必要がありました。

そっちからやります。

7.2 崖のMaterialのLayerを作成する

取りあえず使用していないRoof LayerにCliff用のTextureを追加してみました。

f:id:kazuhironagai77:20220410234020p:plain

これでテストしてみます。

結果です。

f:id:kazuhironagai77:20220410234056p:plain

なんじゃこれは。と言う位むごいです。

調べたら理由が分かりました。

Material FunctionでTextureが上手くPass出来ていなんです。

仕方ないので新しいMaterial Functionを作成して

f:id:kazuhironagai77:20220410234119p:plain

その中でCliff用のTextureをセットしました。

f:id:kazuhironagai77:20220410234135p:plain

結果です。

f:id:kazuhironagai77:20220410234159p:plain

今度はそれなりに上手く出来ました。

崖の部分です。

f:id:kazuhironagai77:20220410234224p:plain

やっぱり崖は粗さが目立ちます。

これはMaterialのせいではなくLandscapeを生成した時に許容範囲以上の高さを要求したからです。Gaeaで新しいLandscapeを作成するように成ったらこの問題は自然に解消されると思われます。

別に角度が急な場合は崖になる実装をしなくても自分で塗れば良い気がしてきました。

7.3 Layerを調整する

先週、考えた通り、

f:id:kazuhironagai77:20220410234247p:plain

Layerを変更します。

  • 雪のLayer
  • 氷のLayer
  • 雪と土のLayer
  • 崖(岩)のLayer

の4つを作成する事にします。

氷のLayerを作成しました。

f:id:kazuhironagai77:20220410234312p:plain

もっと青くしたいですね。

左半分が氷のLayerで右半分が雪のLayerです。

f:id:kazuhironagai77:20220410234341p:plain

イイ感じです。

f:id:kazuhironagai77:20220410234402p:plain

Landscapeを直したいですね。

7.4 Foliageを追加する

Procedural Foliage Toolを使用してFoliageを追加したいと考えています。

Winter Forest Setに付属のStatic Meshの中で以下の物のどれかを使用したいと思っています。

f:id:kazuhironagai77:20220410234432p:plain

とりあえずLandscape Grass Typeを作成します。名前はGT_Snowにしました。

f:id:kazuhironagai77:20220410234452p:plain

上記の雪玉をセットしました。

f:id:kazuhironagai77:20220410234525p:plain

Landscape Grass Output nodeにGT_SnowをセットしLandscape Layer Sample nodeに試しにIceにセットしてみます。

f:id:kazuhironagai77:20220410234548p:plain

結果です。

f:id:kazuhironagai77:20220410234606p:plain

これは雪玉の量が多すぎます。

Landscape Grass TypeであるGT_SnowのGrass Densityの値を半分にしました。

f:id:kazuhironagai77:20220410235206p:plain

結果です。

f:id:kazuhironagai77:20220410235227p:plain

他のMeshも追加してみます。

f:id:kazuhironagai77:20220410235255p:plain

結果です。

f:id:kazuhironagai77:20220410235314p:plain

今度は草を追加しました。

f:id:kazuhironagai77:20220410235335p:plain

結果です。

f:id:kazuhironagai77:20220410235414p:plain

うーん。こんなもんでしょうか?

取りあえず今週はここまでとします。

f:id:kazuhironagai77:20220410235439p:plain

7.5 雪山のLandscapeについてのまとめと来週以降の予定

今週やらなかったHow to INSTANTLY TEXTURE your landscapes in UE4 - Unreal Engine tutorial [11]に解説されているLandscapeの角度によって崖のMaterialを自動で配置する方法は、今週は使用しませんでしたが来週、実装だけはするつもりです。

更に、Ice LayerにPlayer が操作するキャラが衝突する木を配置します。

これは2022-03-14のBlogにそのやり方がまとめられています。

段々、Landscapeの作成方法が理解出来て来ると、Landscapeそのものの質に不満が出て来ました。

これは来週とかの直ぐではないですがLandscapeも作成し直したいと思います。そして今度はGaeaを使用して作成してみようと思います。本当はWorld Machineを使用したいんですがWorld Machineの無料版は商業利用は禁止されているはずなのでGaeaにします。

Landscapeの大きさも1009x1009を16枚位で作成したいです。一辺4枚で約4km^2にしたいです。

更に追加したい要素が何個かあります。

一つは雪が降るEffectの追加です。

2021-08-09のBlogで雪のEffectを作成していました。

f:id:kazuhironagai77:20220410235517p:plain

しかもこれcascadeで作成していました。これをそのまま使用する事にします。

もう一つが足跡の作成です。

雪の上を歩く時に足跡を付けたいです。これはやり方が分かりません。来週調べる事にします。

後、空一杯に雲を配置したいです。これもやり方が分かりません。

そして風のEffectの追加ですね。木の葉なんかを飛ばしたいです。

やりたい事は一杯ありますが時間は限られていますので出来るだけとなりますが一応、以下にこれから追加したい内容を追加しておきます。

  • Gaeaを使用したLandscapeの作り直し
  • 雪が降るEffectの追加
  • 足跡のEffectの追加
  • 雪が降っているので天気を曇りにする
  • 風のEffectの追加

これらの事について調査しながらやって行こうと思います。

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

8.1 交換魔法の実装の続き

今週は、先週やる時間がなくて出来なかった、交換魔法を使用した時に召喚されているMonsterの3D Modelそのものの位置の交換を実装します。

取りあえず今のMonsterの位置を確認します。

Game Mode BPに作成したPlayer Use Magic関数内で

f:id:kazuhironagai77:20220410235559p:plain

交換魔法を使用した所でMonster BPの位置を確認します。

f:id:kazuhironagai77:20220410235618p:plain

結果です。

f:id:kazuhironagai77:20220410235640p:plain

配置されるTarget Pointsの位置を確認すると

f:id:kazuhironagai77:20220410235700p:plain

中央は

f:id:kazuhironagai77:20220410235719p:plain

右側は

f:id:kazuhironagai77:20220410235736p:plain

となっています。

これを直します。

取りあえず、先程Print Stringを追加した場所で、Player側の中央に配置されているMonsterと右側に配置されているMonsterの位置が正しい場所に移動するようにします。

f:id:kazuhironagai77:20220410235757p:plain

これだと一瞬ですが全く同じ位置に二つのMonsterが存在する事になるので、出来ない気もしますが、取りあえず試してみます。

最初の配置です。

f:id:kazuhironagai77:20220410235816p:plain

交換魔法を選択します。

f:id:kazuhironagai77:20220410235837p:plain

結果です。

f:id:kazuhironagai77:20220410235856p:plain

一瞬で交換しました。

出来ていますね。

8.2 GameをPlayして確認する

自分で遊んでみる。

何と2回戦で負けてしまいました。

f:id:kazuhironagai77:20220410235924p:plain

交換する位置が決まっているので交換しても意味がない時があります。

もう一回、Playしてみました。

f:id:kazuhironagai77:20220410235955p:plain

今度はStage 5か6まで行きました。

亡霊族の攻撃力が300もあるのでジャンケンに負けるとダメージが600になりどうやっても勝てません。

亡霊族の攻撃力を200に変更します。

これでもう一回Playしてみます。

今度はStage 10まで来る事が出来ました。

f:id:kazuhironagai77:20220411000017p:plain

明らかに後半のStageの方が簡単です。

このMonsterの配置ではどうやっても勝てません。

f:id:kazuhironagai77:20220411000038p:plain

まあ、良いでしょう。

f:id:kazuhironagai77:20220411000106p:plain

案の定、負けました。

8.3 GameをPlayしてみて分かった事

今回、一応、最低限の形が出来たGameの戦闘をPlayしてみて色々な事が分かって来ました。

<戦闘中に考える事で、逆転出来るHxHの面白さが備わっているか?>

かなり備わっています。

以下の例で説明します。

これはStage 1の戦闘です。対戦相手が召喚したMonsterは妖精族ですのでPlayerが召喚したMonsterと同程度の強さです。普通に戦っても負ける事はないですが、それでも色々戦術を考える必要があります。

f:id:kazuhironagai77:20220411000323p:plain

まず、配置されたMonsterのタイプを比較します。

Player側の左翼のMonsterのタイプはグーです。対戦相手の右翼のMonsterのタイプはパーです。Playerの左翼側のMonsterは2倍のダメージを受ける事になります。

Player側の中央のMonsterのタイプはチョキです。対戦相手の中央のMonsterのタイプもチョキです。引き分けですのでどちらのMonsterも通常のDamageを受けるだけです。

最後のPlayer側の右翼のMonsterのタイプはパーです。対戦相手の左翼のMonsterのタイプはグーです。対戦相手の左翼側のMonsterは2倍のダメージを受ける事になります。

ここでMonsterは勝手に一回目の戦闘を始めてしまいます。

その結果、Playerの左翼側のMonsterは200のDamage、それ以外のMonsterは100のDamageを受けました。同様に対戦相手のMonsterも左翼側が200のダメージ、それ以外のMonsterは100のダメージを受けています。

これらの結果から相手のMonsterの攻撃力は全て100である事が分かりました。

f:id:kazuhironagai77:20220411000349p:plain

ここでPlayerが次の戦闘に使用する魔法の選択をします。

対戦相手のMonsterの攻撃でこちらのMonsterが死ぬのは4ターン後です。その間に対戦相手のMonsterの一体を倒してしまえばこちらの勝ちです。こちらの右翼側のMonsterに攻撃力2倍の魔法をかけ続ければ2ターン後に対戦相手の左翼側のMonsterを倒せる事が予測出来ます。

はい。

このように戦闘中に色々な戦術を考える必要が生じます。

HxHと同じ位面白いかと言われるとうーん。となりますが、それなりには面白いです。

<PokemonのようなMonsterを集める面白さは失われていないか?>

亡霊族のMonsterが出て来ると、配置によっては物凄く考えないと勝てない、あるいは絶対勝てなくなります。つまりMonsterを集める必要が出て来ます。これらからMonsterを集める必要も出て来ます。のでPokemonのようなMonsterを集める面白さもあると考えられます。

このMonsterを集める行為と戦闘を別にする事は決まっていますが、どうやって集めるかはまた別に考えます。本当はここにMinimal Pairによる発音テストを入れて3回正解するとMonsterをGetするChallengeが出来るようにするつもりだったんですが、発音の整理が中座しているのでどうするか考えています。

<来週の予定>

戦って分かったんですが、後半のStageの方が後半のStageよりも簡単です。これをまず直します。

9Blenderの勉強

Blenderの先生であるImphenzia氏がUE5のRelease版を初めて触ってみると言う動画を上げていたので、今週はそれを見る事にします。Experienced Unity Developer tries Unreal Engine 5 for the first time [12]です。

私は、まだUE5はUpdateしていません。

CGHOW氏がUE5の最新版がReleaseされた時に直ぐにUpdate したらUE5が全く起動しなくなってました。それ見てビビッています。UnInstallしてからInstallすると動くと言う噂も聞いたんですが、ちょっと様子見してからやる事にします。私のPCは一寸古いので、UE5が動かない可能性はかなりありますから。今のVersionである程度動いているだけでもマシなくらいです。

今作成しているRPGが完成するまではUEは4.24でずっとやるつもりなので、まあ気長に勉強する事にします。

Imphenzia氏、UEでどうやってView 画面内を移動出来るのか分からず、Blenderと同じkeyを押しています。私の逆です。失礼かもしれませんが見てて笑ってしまいました。

Volumetric Cloud を弄って雲の位置?を変化させていました。

f:id:kazuhironagai77:20220411000431p:plain

うーん。勉強になる。

Imphenzia氏、今度はActorを配置しようとしてますが、Shift + Aとか押してます。

f:id:kazuhironagai77:20220411000446p:plain

お、面白すぎる。でもこういう事を書くのは失礼ですのでもう止めます。

Imphenzia氏、凄すぎます。一瞬で以下のモデルを作成してUEにImportしました。

f:id:kazuhironagai77:20220411000508p:plain

Importする時のComment欄が凄すぎます。こんなにUEに詳しい人がいるのかってくらい的確な解説を追加しています。

やっぱりUEを動かせる人達は3D Modelを作れる人と仲良くなりたいんですね。

Imphenzia氏がUEの単位を聞いたら、20人くらいが即答でUU = 1cmって回答してました。

うーん。

私がUUが1cmって知ったのはつい最近なのに…

計、一時間位見ましたが、もう時間がなくなってしまったので残りは暇なときに見る事にします。

以上です。

10.まとめと感想

今週の進捗は普通でした。勉強しないといけない箇所が結構はっきりしてきました。

焦ってもどうにもなりませんのでゆっくり、自分のペースでやっていきます。

11.参照(Reference

[1] CGHOW. (2021, October 26). AOE ICE in UE4 Niagara Tutorial | Download Files [Video]. YouTube. https://www.youtube.com/watch?v=s37hilxvd_8

[2] CGHOW. (2022, March 28). Wavy Trails in UE5 Niagara Tutorial | Download Files [Video]. YouTube. https://www.youtube.com/watch?v=tJaHr98vA04

[3] Cloward, B. [Ben Cloward]. (2022, March 24). Toon Shader Ink Outlines - Shader Graph Basics - Episode 39 [Video]. YouTube. https://www.youtube.com/watch?v=IaHl5hKnjq4

[4] wizvanmeter. (2019, June 3). Simple Post Process Outline in Unreal [Video]. YouTube. https://www.youtube.com/watch?v=YVTcH6da32Y

[5] Unreal CG. (2019, December 17). Multi-Colored Outlines - (UE4 Tutorial) [Video]. YouTube. https://www.youtube.com/watch?v=1XqXvVFN5i4

[6] Unreal CG. (2020, June 25). Toon Shader & Custom Shadow - UE4 Postprocess Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=mx_AvrZK3TA

[7] Aspland, M. [Matt Aspland]. (2021, February 2). World Composition And Basic Level Streaming - Unreal Engine 4 Tutorial [Video]. YouTubehttps://www.youtube.com/watch?v=xeJz26M2xn4

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

[9] Klaus. (2022b, March 24). Unreal Engine 5 : How to Create a MASSIVE Open World Landscape (100 km2 map) - UE5 Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=JNNizdQ4JvY

[10] Klaus. (2022a, January 12). Gaea Beginner Tutorial Series : Part 1 - Interface [Video]. YouTube. https://www.youtube.com/watch?v=H-vTeYYHJPM&list=PLyNtvXvNIFMMHnW1_-hXO3RNPp_Z5CExF&index=1

[11] Unreal Sensei. (2020, August 7). How to INSTANTLY TEXTURE your landscapes in UE4 - Unreal Engine tutorial [Video]. YouTube. https://www.youtube.com/watch?v=mP8eHwVEA0o

[12] Imphenzia. (2022, April 7). Experienced Unity Developer tries Unreal Engine 5 for the first time [Video]. YouTube. https://www.youtube.com/watch?v=Liqt9_9NLYQ

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

f:id:kazuhironagai77:20220403211922p:plain

<前文>

(先週、用事があって前文だけ前の週に書いておきました。2週間前は結構ホットなネタだったんですが、今はどうなんでしょう?もう常識になってしまったんでしょうか?)

アメリカ右派とロシア支持>

私は、アメリカ生活が長かったので政治的な思想は左派寄りなんですが日本に返ってくるとかなり右寄りになります。人間活動は住んでいる環境に影響受けるのは当然ですが、Minorityとしてアメリカで生活している時は、左派が何でも正しく思えて、日本で日本人として暮らしていると途端に右翼的な考えが正しく思えてきます。

そう言う訳で、政治思想ってやつはどんなに強く信条しているように見えても、それは所詮鏡に写った幻想と認識しています。環境が変わったら直ぐに変化するものなんです。

それでも一つだけ言えるのはFOX NEWSに代表されるアメリカ右派の考え方は間違っていると言う事です。

彼らの考え方に共通なのは中途半端な知識(特に科学法則)に基づいて評価、計画、実行するんです。

それは彼等の受けた教育が大学中退レベルで止まっているせいです。彼らの大学中退レベルの知識で評価、計画、実行したらそれりゃ必ず失敗します。その失敗から学ぶのならその先があるんですが、失敗すると彼らは必ず、有色人種をAffinity Actionで入れないといけないのでそれで計画通りの質を確保する事が出来ないので失敗した。と彼らに都合の良い言い訳を信じてその先を学ぼうとはしません。

それで同じ事を繰り返してずっと失敗し続けます。

しかしYouTubeなんかを見る層の90%の教育レベルは大学中退と同程度なので、FOX NEWSに代表されるアメリカ右派の考え方は物凄く受けが良いんです。彼らの想像上の世界では、FOX NEWSに代表されるアメリカ右派の唱える理想への実現方法は、何回失敗を繰り返しても単なる妄想ではなく実現可能かつ理想への最適手段に見えます。

そう言う訳で、FOX NEWSに代表されるアメリカ右派の考え方は常に間違っていますが、決して無くならないです。

そのFOX NEWSが今、猛烈にPushしているのがロシア支持です。

私は基本的に「FOX NEWSに代表されるアメリカ右派の考え方は常に間違えである。」と考えているので、FOX NEWSを見る事は無いです。ので彼らがどんな主張をしているのか最近まで全く知らなかったんですが、とんでもなくロシアを支持しているんです。

彼らの主張をまとめると以下の様になります。

  • アメリカとロシアが戦争したら第三次世界大戦になる。
  • 今の時点で既にアメリカ政府はウクライナに武器を供給している。これはロシアから見れば、アメリカがロシアに宣戦布告しているのと同じである。
  • バイデンの息子はウクライナ政府から違法な献金や旨みのあるBusinessを請け負っている。
  • バイデンは自分の息子の利権を守るために、いずれロシアとの戦争にアメリカ人の若者の命を差し出すはず。
  • 我々、アメリカ人は若者の命をバイデンのウクライナにおける利権を守るための戦いから守るため、更にアメリカがロシアと第三次世界大戦にならないために絶対にロシアの見方に立って行動すべき。もしくはこの戦争は無視して絶対に関わらないでいるべき。

となっています。

これ読むと、何で私が、高卒レベルと言わずに敢えて大学中退レベルといっているのが分かると思います。兎に角、一見するだけでは正しく見えるんです。

もしこれが、産油国と言っても過言ではないTexas州の電気の供給すら出来ずに大寒波が襲ってきてるときに大停電を起こして州民を凍死寸前まで追い込んでおいて自分たちだけはMexicoに逃げ込んだり、Pro Lifeと言って中絶を完全に禁止しておきながら孤児の面倒は全く見ない、アメリカ右派の精神的な支柱であるFOX NEWSが言っていなかったらある程度は信じたかもしれません。

普段、左派よりのNewsやRedditしか見ない私は、アメリカの言論界に、ウクライナ、ロシア戦争に対して左派と全く正反対の意見が右派から出て来ている事を知りませんでした。恐らく、大多数の日本人も知らないと思います。

私は彼らの意見は常に間違っていると思っていますが、FOX NEWSに代表されるアメリカ右派の考え方を信じる人達はアメリカ国内に40~50%はいるでしょう。

つまり40~50%のアメリカ人は実はロシア側を支持しているんです。

こういう事を知っておく事は日本人としても大切です。

と言う事で今週は、ロシアを支持する右派アメリカ人たちの紹介をしました。

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

<本文>

1.今週の予定

今週も以下の内容をやっていきます。

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

2.Niagara: CGHOW氏のTutorialをやる

2.1 先週までの復習

一週間、お休みしたら何が目的なのか忘れてしまいした。

2022-03-14のBlogを見直したら、一年間Niagaraを勉強して来たので、これからはCGHOW氏のTutorialを勉強した後で、更にアニメ風のEffectに自分で改良してみる。とみたいな感想が書かれていました。

先々週は、試しにCoinのEffectのCoinの部分をアニメ風に改造してみたんですが、かなり上手くいかない。

その理由に以下の問題点が出て来ました。

  • 黒枠、もしくは線画の作成が上手く出来ない
  • Toon Shadingを被せると、地味になる。

これらは、Materialの問題なのでMaterialで解決する事になりました。

<単純なToon Shadingだけではアニメ調にならない>

先々週のBlogを読み直していてToon Shadingに関して一個記録するのを忘れていた内容がありました。それをここにまとめておきます。

f:id:kazuhironagai77:20220403212049p:plain

SaturationとValueがほぼ1となると選択出来る色がかなり限られます。

Coinの色を単純にToon調にすると

f:id:kazuhironagai77:20220403212108p:plain

SaturationとValueは1からは程遠い値になります。

これがアニメ調に見えない原因です。

2.2 CGHOW氏のTutorialの何かをやる

一寸、目を離したら、CGHOW氏のUE5 Previewを使用したTutorial、とんでも無く増えていました。

f:id:kazuhironagai77:20220403212137p:plain

うーん。

一寸私のPCでUE5 Previewを使用してGPU全開でParticleを生成するEffectを作成するのは不安ですね。

一寸、前のTutorialでIceを作成しているEffectがありました。

f:id:kazuhironagai77:20220403212157p:plain

あ。

今。思い出したんですが、元々、VFXの勉強の目的で魔法を表現すると言うのがありました。すっかり忘れていました。

探したら見つかりました。

2021-08-02のBlogで以下の様なまとめがありました。

f:id:kazuhironagai77:20220403212212p:plain

これはこれで後でまとめ直す必要がありますね。

今、簡単に見直すと、砂以外のEffectの(今のGame業界で規準となっている)作成方法はそれなりには分かりますね。

でもこの辺をまとめ直すのも大切ですね。

決めました。

今週は、AOE ICE in UE4 Niagara Tutorial | Download Files [1]を勉強します。

2.3 AOE ICE in UE4 Niagara Tutorial | Download Files [1]を軽く見る

一回、軽く見ましたが結構複雑でした。

うーん。

全部、今週だけでやるのは無理でしょうね。以下に示したIce Pillarだけ作成する事にします。

f:id:kazuhironagai77:20220403212236p:plain

作成方法を以下に簡単にまとめます。

<Static Mesh

Static Meshの作成部分です。

f:id:kazuhironagai77:20220403212300p:plain

このTutorialだと作成方法の説明はないです。

うーん。

正直、どうやってこの歪みを作成してるのか分かりません。

円柱を元に、Vertexを追加してそのVertexを少しだけ移動させると出来るのかもしれません。そんな感じで作成しています。

<Material

以下に使用しているMaterialの実装を示します。

f:id:kazuhironagai77:20220403212325p:plain

この部分はTutorialでかなり詳しい解説がされているのでそれを勉強しながら作成します。

Niagaraの設定>

Niagaraの設定についてです。

f:id:kazuhironagai77:20220403212347p:plain

かなり急ぎ足で解説しています。

うーん。

説明している全部のModuleを追うのは難しいかもしれません。

出来るだけ頑張って再現します。

2.4 AOE ICE in UE4 Niagara Tutorial | Download Files [1]を実装する

<Ice Pillarの3D Modelを作成する>

Blenderで以下の様なStatic Meshを作成しました。

f:id:kazuhironagai77:20220403212410p:plain

うーん。

でも上から見ると

f:id:kazuhironagai77:20220403212435p:plain

円柱の上面が一枚のMeshになっています。

これをそれぞれのVertex毎にEdgeで結んでMeshを分割したいんです。

色々調べたら出来ました。

f:id:kazuhironagai77:20220403212457p:plain

うーん。でも何か違う。

最終的に以下の様になりました。

f:id:kazuhironagai77:20220403212515p:plain

うーん。

やっている内に三角形と四角形のMeshが生成したんですが、どっかで3d Modelを作成する時はMeshは全部四角形にする必要があるって聞いた事があります。

ただTessellationの段階でVertexが構成する三角形が自動で生成されるはずで、その辺の関連性がどうなっているのか分からないです。

UE5にImportしました。

f:id:kazuhironagai77:20220403212535p:plain

これを使用してやってみます。

<Materialの実装>

そっくりに作成しました。

f:id:kazuhironagai77:20220403212610p:plain

Tutorialの解説に従って実装を見てみます。

Fresnelノードの実装です。

f:id:kazuhironagai77:20220403212630p:plain

FresnelノードのPreviewです。

f:id:kazuhironagai77:20220403212648p:plain

これかなり綺麗ですね。

次は以下の部分です。

f:id:kazuhironagai77:20220403212709p:plain

結果です。

f:id:kazuhironagai77:20220403212725p:plain

Tutorialの結果とは一寸だけ違いますね。

f:id:kazuhironagai77:20220403212745p:plain

Dynamic ParameterのOffsetの値を下げてみました。

f:id:kazuhironagai77:20220403212812p:plain

結果です。

f:id:kazuhironagai77:20220403212830p:plain

うーん。

完璧に一致はしませんでしたが、何とかなりそうですね。

このままやって行きます。

更に200で割ります。

f:id:kazuhironagai77:20220403212847p:plain

結果です。

f:id:kazuhironagai77:20220403212905p:plain

Tutorialによると200で割る事でFade感を出すそうです。

確かに下に示したTutorialのPreviewに表示されているのはFade感があります。

f:id:kazuhironagai77:20220403212923p:plain

私のは無いですね。もっと大きな値で割る事にします。

試しに1000で割ってみました。

f:id:kazuhironagai77:20220403212942p:plain

その後、Smooth Stepノードに繋げています。

f:id:kazuhironagai77:20220403212959p:plain

結果です。

f:id:kazuhironagai77:20220403213017p:plain

あれ。

Fadeが無くなってしまいました。

Smooth Step ノードのMaxの値を上げてみました。

f:id:kazuhironagai77:20220403213036p:plain

結果です。

f:id:kazuhironagai77:20220403213054p:plain

戻りましたね。

Niagaraの作成>

大体Tutorial通りの作成で出来たんですが、Scale Mesh Sizeノードを使用するとMeshが消えてしまいます。

f:id:kazuhironagai77:20220403213122p:plain

中の実装を見ると

f:id:kazuhironagai77:20220403213139p:plain

値が0になる可能性があるのはInput のInitial Mesh Scaleだけです。

Initial Mesh ScaleにPassする値を、

f:id:kazuhironagai77:20220403213153p:plain

から

f:id:kazuhironagai77:20220403213210p:plain

に変えてみました。

結果です。

f:id:kazuhironagai77:20220403213243g:plain

出来ました。

f:id:kazuhironagai77:20220403213321p:plain

うーん。

氷っぽいと言えば氷ですが、うーん。

<Scale Mesh Sizeノードを使用するとMeshが消える理由>

Scale Mesh Sizeノードを使用するとMeshが消える理由が分かりました。

Particle Spawn SectionのInitial Mesh Particle Moduleの

f:id:kazuhironagai77:20220403213346p:plain

Mesh Scale Modeをセットするのを忘れていました。

以下の様にセットしたら

f:id:kazuhironagai77:20220403213409p:plain

Particle Update SectionのScale Mesh Size Moduleの

f:id:kazuhironagai77:20220403213426p:plain

Initial Mesh ScaleにScaleがセットされた状態でも

f:id:kazuhironagai77:20220403213442p:plain

Meshが表示されるようになりました。

f:id:kazuhironagai77:20220403213500p:plain

今週のNiagaraの勉強はここまでとします。

3.Material : Projectionの勉強の復習

3.1 先週の仮説の確認

先週、以下の仮説を思い付きました。

Signノード>

f:id:kazuhironagai77:20220403213531p:plain

<-1>

f:id:kazuhironagai77:20220403213552p:plain

<Vertex Normalを掛ける>

f:id:kazuhironagai77:20220403213614p:plain

が、確認する時間がなかったので今回それをやります。

もしこれらの仮説が正しいなら、Textureの向きを直すのに別にTutorial通りのやり方をする必要もなくなります。

逆に言えば、Tutorial通りのやり方をしている人は本当の意味でProjectionしたTextureの操作を理解していない。と言えるでしょうから時間をかけて検討する価値は十分あります。

3.2 ProjectionしたTextureに-1を掛ける

一番、単純なTextureに-1を掛ける場合から検討します。

f:id:kazuhironagai77:20220403213641p:plain

Improved Tri-Planar Projectionを使用して実験します。

f:id:kazuhironagai77:20220403213701p:plain

f:id:kazuhironagai77:20220403213712p:plain

Improved Tri-Planar ProjectionはTextureにGridを使用しているので上下左右裏表がはっきり分かるからです。

Z軸にProjectionしているTextureに、以下の様に-1を掛けました。

f:id:kazuhironagai77:20220403213728p:plain

結果です。

Top Viewです。

f:id:kazuhironagai77:20220403213746p:plain

f:id:kazuhironagai77:20220403213801p:plain

となりました。

あー。

そりゃそうだ。

Textureの色を構成しているRGBは0から1までの値なので-1を掛けたら0以下になるだけでした。

-1から1までの値で構成されているNormal Mapでやらないと駄目だったんです。

先週、作成したNormal MapのProjectionをResult ノードのBase Colorに繋ぎ直しました。

f:id:kazuhironagai77:20220403213820p:plain

f:id:kazuhironagai77:20220403213836p:plain

これを使って試験します。

Z軸にProjectionしたTextureのZの値に-1を掛けます。

f:id:kazuhironagai77:20220403213853p:plain

予想が正しければ、以下の図が

f:id:kazuhironagai77:20220403213911p:plain

となるはずです。

f:id:kazuhironagai77:20220403213927p:plain

結果です。

Top Viewです。

f:id:kazuhironagai77:20220403213945p:plain

f:id:kazuhironagai77:20220403214002p:plain

となりました。

予測通りです。

Bottom Viewです。

f:id:kazuhironagai77:20220403214020p:plain

f:id:kazuhironagai77:20220403214040p:plain

になっています。

これも合っています。

当然ですが他の軸のTextureの向きは全く変化していません。一応、確認しました。

今度はX軸、Front ViewとBack Viewに-1を掛けてみます。

何もしていない状態のFront Viewです。

f:id:kazuhironagai77:20220403214057p:plain

当然ですが、赤いです。変化が見やすいので-1はX軸に対して掛けます。

f:id:kazuhironagai77:20220403214117p:plain

f:id:kazuhironagai77:20220403214135p:plain

になるはずです。

結果です。

Front viewです。

f:id:kazuhironagai77:20220403214156p:plain

X軸が逆になっています。

Back Viewです。

f:id:kazuhironagai77:20220403214222p:plain

これも逆になっています。

予測の通りです。

他の面も確認しましたが、他の部分の変化は全くありません。

これらの実験から、Tri-Planar ProjectionでNormal MapをTextureとして使用した場合、それぞれのProjectionのTextureのRGBのどれかに-1を掛けるとそのRGBが示している軸の向きを反対にする機能がある事が確認出来ました。

3.3 ProjectionしたTextureSign(以下の式)を掛ける

以下に示した実装を掛けます。

f:id:kazuhironagai77:20220403214248p:plain

先週の仮説によれば、この実装を掛けると軸の負の部分だけ逆になるはずです。

f:id:kazuhironagai77:20220403214304p:plain

先週のこの説明は正確性少し足りないので補足します。

負の軸だけ逆にする実装は実際には以下のものになります。

f:id:kazuhironagai77:20220403214325p:plain

先週の実装はX軸のProjectionだけは向きが逆だったので-1を掛けています。のでその部分が正確ではないです。

更に、どのProjectionに対しても負のX軸の向きだけを変えたい場合は、Rの値を掛けます。この事をしっかり述べていなかったです。

3.2で-1を以下の場所に掛けた時、

f:id:kazuhironagai77:20220403214352p:plain

という結果になりました。

f:id:kazuhironagai77:20220403214409p:plain

と言う事は、上記の実装の計算結果が正の部分は1、負の部分が-1であるならば、

f:id:kazuhironagai77:20220403214428p:plain

となって仮説が正しい事が証明出来ます。

それでは実装の計算を見てみましょう。

f:id:kazuhironagai77:20220403214448p:plain

まずSignノードが繋がっています。

以下に示した様にSignノードの機能は全ての値を1か-1に変換します。

f:id:kazuhironagai77:20220403214504p:plain

と言う事は可視化した時に黒い部分は-1、それ以外の色は1と言う事になります。

以下の実装でX軸の結果を可視化します。

f:id:kazuhironagai77:20220403214523p:plain

尚、結果を分かり易くするために1の代わりに0を掛けています。

結果です。

f:id:kazuhironagai77:20220403214541p:plain

見事にX軸の正が1、負が-1になっています。

今度は、Y軸の結果を可視化します。

f:id:kazuhironagai77:20220403214602p:plain

見事にY軸の正が1、負が-1になっています。

良く考えたら負の値が-1であるかどうかは不明ですね。0かもしれませんし。

以下の方法で確認します。

f:id:kazuhironagai77:20220403214622p:plain

X軸の負が-1なら0.5になっているはずです。

f:id:kazuhironagai77:20220403214642p:plain

X軸の正の値は1.5ですが1以上は同じ値なので、左側の半分の赤さならX軸の負は0.5 であると言えるはずです。

つまり以下に示したこの部分の計算は

f:id:kazuhironagai77:20220403214705p:plain

Projectionした軸の正に1、負に-1を掛けているだけでした。

その結果、以下に示した様に例えばZ軸にProjectionしたNormalのZ軸にこの実装を掛けると

f:id:kazuhironagai77:20220403214723p:plain

以下の結果になります。

f:id:kazuhironagai77:20220403214739p:plain

これも仮説の通りでした。

3.4 ProjectionしたTextureにVertex Normal WSノードを掛けたり足したりする

f:id:kazuhironagai77:20220403214807p:plain

Vertex Normal WSノードを掛けた軸の負の値だけが反転します。

f:id:kazuhironagai77:20220403214823p:plain

これはある条件でした試していないので、確認も必要です。

そこからやって行きます。

X軸にProjectionした場合にX軸にVertex Normal WSノードを掛けた時は

f:id:kazuhironagai77:20220403214845p:plain

となります。

では、以下に示した様にX軸にProjectionした場合にY軸にVertex Normal WSノードを掛けた時はどうなるんでしょうか?

f:id:kazuhironagai77:20220403214905p:plain

試してみます。

f:id:kazuhironagai77:20220403214924p:plain

f:id:kazuhironagai77:20220403214941p:plain

となりました。

うーん。

良く分かりません。

3番目の計算方法は良く分かりません。

これは保留する事にします。

3.4 1と2のみを使ってTri-PlanarのNormal MapのProjectionを作成してみる

1と2の技術のみを使用して先週作成したTri-PlanarのNormal MapのProjectionを作成してみます。

まず上下左右のあるTexture用のTri-PlanarのProjectionを作成しました。

f:id:kazuhironagai77:20220403215005p:plain

Textureは既にNormal Mapに変更してあります。

まず軸の向きだけ直しました。

f:id:kazuhironagai77:20220403215019p:plain

結果です。

f:id:kazuhironagai77:20220403215041p:plain

今度はそれぞれの軸に対してのProjectionの向きの間違いを直して行きます。

この時点でぞれぞれの軸に対してProjectionしたNormal Mapの向きは以下の様になっているはずです。

f:id:kazuhironagai77:20220403215057p:plain

確認しました。

この結果と同じでした。

ここから私独自のやり方でNormal Mapの向きを直します。

まず-1を掛けます。

x軸のyとz、Y軸のzに-1を掛けます。

すると以下の結果になるはずです。

f:id:kazuhironagai77:20220403215114p:plain

実装しました。

f:id:kazuhironagai77:20220403215131p:plain

結果です。

f:id:kazuhironagai77:20220403215147p:plain

表にしました。

f:id:kazuhironagai77:20220403215205p:plain

はい。

予想と同じ結果になりました。

次に、以下にSignノードを使用した実装によって軸の負だけ逆なTextureを直します。

f:id:kazuhironagai77:20220403215222p:plain

試しにX軸だけやってみます。

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

f:id:kazuhironagai77:20220403215239p:plain

Front Viewです。

f:id:kazuhironagai77:20220403215603p:plain

全部合っています。

Back Viewです。

f:id:kazuhironagai77:20220403215619p:plain

これも全部合っていますね。

Y軸、z軸も同様に直しました。

f:id:kazuhironagai77:20220403215639p:plain

Y軸の負から見た図です。Left Viewに当たります。

f:id:kazuhironagai77:20220403215657p:plain

合っています。

Z軸の負から見た図です。Bottom Viewに当たります。

f:id:kazuhironagai77:20220403215712p:plain

合っています。

うーん。出来たみたいですが確認します。

View ModeをWorld Normalにセットします。

f:id:kazuhironagai77:20220403215729p:plain

結果です。

f:id:kazuhironagai77:20220403215746p:plain

むむむ。

全部のProjectionの向きは合っていました。

しかし私の作成したNormal MapのProjectionは境界がはっきり見えています。

Tutorialのやり方だとどの向きから見ても正しいNormal Mapになっています。

以下にTutorial通りに作成したNormal Map用のTri-PlanarのProjectionとの比較を示しておきます。

f:id:kazuhironagai77:20220403215806p:plain

おお。

やっぱり、今回理解出来なかった最後の式にもっと大きな秘密が有りそうです。

TutorialのTop Viewを見ると

f:id:kazuhironagai77:20220403215830p:plain

左上は青の部分が多く

f:id:kazuhironagai77:20220403215851p:plain

右下の部分が青の部分が小さくなっています。

f:id:kazuhironagai77:20220403215914p:plain

うーん。

まだまだ奥が深いですね。

しかしもうそろそろProjectionの勉強は終わりにして次の勉強を始めます。

3.5 Tri-PlanarのProjectionを勉強してみて

今週はTri-PlanarのProjectionを総括するつもりだったですが、逆にまだまだ分からない要素が沢山ある事が逆に判明しました。のでまとめるのは止めておきます。今回のProjectionの勉強はここまでとしますが、また自分のMaterialに関する理解のLevelが上がった時にもう一回Challengeする事にします。

4.Materialの勉強:Toon Shading

今週は特別に更