<前文>
前文に書こうと思っていた内容の事実確認がまだ出来てないので、今週の前文は別な話を書く事にします。
私はBiden 大統領が就任した時「アメリカの民主党が本当にやる気があるなら学生ローンの免除をやるはずだが絶対にそれはやらない。だから民主党は国民の信頼をいずれ失う。」と予測しました。
AOC氏が確か言ったと思いますが、学生ローンの免除にかかる費用は、リーマンショックの時に、政府がウォール街の借金の免除した額の僅か10分の1だそうです。
こんなのやろうと思えば何時でも出来ます。さらにこの件に関しては共和党からの妨害も全くないです。
でもやらない。何故なら民主党にとって重要なのはウォール街からの献金で、アメリカ国民なんかどうでも良いからです。
アメリカは日本以上の学歴社会で、貧乏から抜け出すほとんど唯一の手段が大学で勉強して高学歴になる事です。しかし大学に進学する為にはお金が要ります。
はい。
親が貧乏な家に生まれた子はその時点で詰んでいるんです。
アメリカのジョークなのか、本当の話か知りませんが、昔、こんな話を聞いた事があります。
ハーバードの学生が「IQを決定すると思われる遺伝子を特定出来そうで、これが分かったらIQの高くなる遺伝子を持っている子供には医者や弁護士になるための特別な教育を初めから与える事が出来るから、予算くれ。」と言ったんです。そしたら返答が「そんなの遺伝子なんか見なくたって郵便番号を見たら分かるだろう。」って。
これは日本人には何が面白いのか分かりにくいですが、アメリカは収入によって住んでいる場所が全く違うんです。高収入の人達が住む場所は、公共施設も充実しています。更に、アメリカでは朝、車で通勤する訳ですが、向こうはサマータイムがあるので通勤する時って大抵日の出の時間に当たるんです。高級住宅地から出勤すると太陽を背にして車を運転する事になります。運転してても特に何とも思わずそのまま会社に行けます。これが所謂、庶民の住んでいる所から出勤すると、必ず太陽に向かって車を運転する事になります。もうサングラスは絶対必須で、光の中を走ってるんじゃないかって錯覚する位です。もう朝からストレスマックスになります。
中流階級の住んでいる所ですら、高級住宅地と比較するとこんなに差がある訳で、まして貧乏な所に住んでいたら身の安全すら保障されない可能性すらあります。そんな所に生まれた子供は麻薬の売人になるくらいしか選択肢がないのが事実なんです。だから、その子供が弁護士や医者になれるかどうかは、遺伝子なんて調べなくても郵便番号を見たら直ぐに分かる訳です。
そんな訳で、貧乏な家に生まれた子供にとって唯一の現実的に成功する方法は、大学に行って高収入の仕事に着く事なんです。でも大学に行くにはお金が要ります。
そのために彼らは学生ローンを借りて大学に行く訳です。
低所得者層の子供が麻薬の売人になるか大卒のサラリーマンになるかは、その地域の治安や税収に大きく影響します。学生ローンの免除をする事は、ウォール街の借金を免除するより遥かに社会に貢献します。
こんなのは誰が見ても分かり切っています。
所が、最近、私が聞いた話だと、バイデン大統領が、全額ではないですが、学生ローンの免除をやる可能性があるみたいなんです。
今度の選挙の目玉になる政策なので、直前までは秘密になるらしいですが、やるのは間違いないみたいなんです。
はぁー。
と思いましたよ。
これって、私見ですが、UkraineのZelensky大統領のお陰だと思うんです。彼が、自分の命を賭けても自国の国民を守る発言をした時に、大統領はどれくらい国民のために働くべきかの基準が世界的に変わったんです。今回の戦争で。それ見て世界中の民主主義の国のリーダーが焦ったんです。
だからバイデン大統領も背に腹は代えられないので、学生ローンの免除をやる覚悟を決めたんです。
UkraineのZelensky大統領のあの時の発言は、世界の針路を一寸ですが良い方向に向けたと思います。まあ一寸だけですが。
それでは今週の勉強を始めます。
<本文>
1.今週の予定
今週も先週と同じ予定でやって行きます。
- Niagara: CGHOW氏のTutorialをやる
- Materialの勉強
- RPGのStoryの改善
- Open Worldの検証
- Gaeaの勉強
- 雪山のMapの作成
- Game Design:ポケモン+HxHの念能力(戦闘システムの作成)
- Blenderの勉強
World Machineの勉強は止めます。Gaeaの勉強をやる事にします。
2.Niagara: CGHOW氏のTutorialをやる
先週、当分UE5のUpdateはしないと書いていましたが、やっぱりしてしまいました。動くのかどうか心配ですが、今週はそれを試す事にします。
2.1 UE5 Niagara Baker Tutorial [1] を試しにやる
Tutorialを見るとContent Exampleを開いています。
UE5のContent ExampleをDownloadしてTutorialと同じようにNiagaraのMapを調べました。
Niagara_Fluidsを開きます。
早速、Errorの表示が出ています。
まあしょうがないです。
Tutorialではこれの右側を開いていました。
開きます。
私のPCではカクカクでしか動きません。
以下のBakerと言う機能を使用するそうです。
以下の画面が表示されました。
Bakeをすると以下の部分にTextureがセットされるそうです。
試しにBakeしてみました。
以下のTextureが作成され
そのTextureがセットされました。
このReal timeのFluid Simulationは私のPCではSmooth に動かすのはハッキリ言って無理ですね。
今回はBakingに集中して勉強する事にします。
今度は新しいNSを作成して何かを作成するみたいです。
いつものようにFountainを追加したNSを以下の様に変更しました。
結果です。
更にParticle Update SectionにCurl Noise Force Moduleを追加します。
Curl Noise Force Moduleの設定は以下の様になっています。
結果です。
これをBakeするんでしょうか?
楽しみです。
Bakerを開くと以下の様になっています。
Duration Secondが4秒のままですね。
このParticleのLife timeは1秒で、EmitterのDurationは2秒です。
1秒間まるまるParticleが発生しない時間が生ずる気がします。
以下の画面に写っているParticleの位置の調整方法がずっと分からなかったんですが、
CGHOW氏、滅茶苦茶簡単にParticleの位置を微調整しています。
これは適当に色々やったらやり方分かるだろうと、色々試したら分かりました。
Mouseの右クリックを押しながらDrag、とWheelを押しながらDragの2つで位置の調整が大体出来ます。
Bakeします。
やっぱり1秒間何も生成されない部分もBakeされていますね。
Tutorialでも設定を1秒に直してBakeし直していました。
直しました。
おお。素晴らしい。
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を作成しました。
こんなやつです。
Tutorialだと先程、このSub UV Textureを作成したNSを分解して、このSub UVを使用するEffectを作成していますが、折角なのでSub UV Textureを作成したNSはとっておきます。
DuplicateしたNSで作成します。
Render SectionのSprite Renderer ModuleとParticle Spawn SectionのShape Location Moduleの設定を変更しました。
更に、もういらないCurl Noise Force ModuleはDeleteしました。
結果です。
ここでTutorialではBackgroundが明るすぎるとBackgroundを変更しています。
このやり方が知りたかった!
まずWindow からPreview Scene Settingを選択します。
以下のBoxが表示されるので
Environmentの部分の設定を以下の様に変更します。
結果です。
こうやってBackgroundの色を変更していたんですね。
微調整をして以下の様にしました。
Sub UVなのでRender SectionのSprite RendererのSub UVのSub Image Sizeの設定を以下の様にします。
更にParticle Update SectionにSub UV Animation Moduleを追加します。
結果です。
こっから先が早送りで作成しているので追えません。
まあ、ここまでで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]を見て把握しておきます。
これ読むと気体と液体の両方のSimulationをやっていると書かれています。これって非圧縮と圧縮の流体を両方、Runtimeで計算出来るようになったって事なんでしょうか?
このGraphic でRuntime に流体のSimulationが出来るって結構革命的な事だと思うんですが。
次の分を読むと「Collusion、Lightingなどの設定方法についても説明します。」と書かれています。Collusionはまだ理解できますが、Lightingの計算までRuntimeでやってるって事でしょうか?
その下に書かれている4つの原則も興味深いです。
まず最初の原則ですが、全てのSimulationの原理はModuleで組まれていてBlackboxになっている箇所はないそうです。
これは勉強しがいがあります。
私は昔、液体のSimulationをRuntimeに計算する事出来ないかと思い、その手始めに、沢山の球の挙動をRuntimeでSimulateした事がありました。結局、球の挙動を計算する間隔とFrameを作成する間隔を同じにすると球同士が衝突しないで抜けてしまったりして諦めた事があります。
なのでこの辺はとても興味深いです。
次の原則ですが、Gridについて語っています。やっぱりGridを作成してSimulateしているんですね。
以下の警告が表示されています。
これは私のPCのせいなんでしょうか?
多分そうでしょうね。Vertex Shader Layer Supportが無いです。と言っていますね。
<Gas Simulations>
これは今、見たやつです。
一応、動く所まで自分のPCでも追っていきます。
解説版が見えないので抜き出します。
もうNavier-Stokes 方程式の解き方どころか式のParameterですら覚えていません。Densityとか温度とか書かれていますね。確か粘性があったと思いますが、どうやって粘性を定義したのかも忘れてしまいました。
新しいPCを買ったら少しずつ勉強して行きたいと思います。
2Dの方のVFXを開いたらPreviewに何も写っていなかったんですが、上から見たら写っていました。
<Liquid Simulation>
今度は液体のSimulationですね。
特に気になる事は書かれていませんね。
2Dの方のNiagaraを見てみます。
Emitter Spawn SectionにRaster Grid ModuleとかVelocity Grid Moduleとかあります。これでGridを作成しているんでしょうね。
<Explosion>
これ、爆発している部分が光っているんですが、これも計算しているんでしょうか?
NiagaraのModuleを見るとLighting Gridってのがあります。
うーん。早く勉強したい。
<Fire>
これはRenderingさせるとPCが唸りを上げてしかも不完全なRenderingしか出来なかったです。
この辺が限界みたいです。
<Smoke-Lighting>
小さくしたらそれなりに見えるかもと思って、後ろ側に下がって撮影したら以下に示した位のRenderingは出来ました。
解説を読むとLightが使えると書かれています。
以下に示した様にDirectional LightがFluid Lightとして配置されています。
Smokeの陰影を計算しているって事でしょうか?
もしそうなら凄いですね。
<Colored Smoke>
試しにボタンに載ったらPCが凄い音し始めました。怖いので見るだけにしておきます。
<Smoke and Fire -Camera Facing>
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もやっていました。これも見る事にします。
UE5ではIKが標準で備わっているみたいな話を聞きました。
IKに関してはそれぐらいしか知りません。
博物館でも見学する感じで見ていきます。
<IK Goal>
これは上体をIK Rigで動かしているんでしょうか?
全く分からないです。
BPを開くとPositionという変数にTick 関数で値をセットしていました。
Anim Classにセットされているのは
でした。開いて見るとEvent Graphで先程のPositionの値をこのクラスのPositionにパスして
Anim GraphでIK Rig ノードにパスしていました。
どうやらこのIK Rig ノードでIK Rigを操るみたいです。
<Multiple Solver>
こっちはFluid SimulationみたいにPCが唸りを上げる事はないので安心して見れます。
IKの計算方法も何種類もあると言う事何でしょうか?
左端のSpiderのAnim ClassではIK Rig ノードが使用されていました。
中央のBody MoverでもIK Rig ノードが使用されていました。
あれ?
あ、分かりました。
左端のSpiderのIK Rig NodeのParameterにはRig Definition AssetにIK Multiple Solverがセットされていました。
中央のSpiderのIK Rig NodeのParameterにはRig Definition AssetにIK FBIKがセットされていました。
これらを開いて見てみましょう。
むー。何でしょう。
これはAnim BP Classだそうです。
正直、これはどう見たらいいのか分かりません。
あれ、Solverに2つ入っています。
これって左端のSpiderだと勝手に思っていましたが右端のSpiderみたいです。
<Long Bone Chains>
これもSolverの一種なんでしょうか?
このMonsterにセットされているAnim BP Classまで遡って使用されているSolverをチェックしましたが先程のMulti-Solverと同じでした。
以下に示したBoneが特殊なんでしょうか?
良く分かりません。
<Chain Pull Strength>
Anim BP Classに使用されているクラスのIK_HighPullStrengthとIK_LowPullStrengthの
Pull Chain Alphaの値がLowが0とHighが1でした。
<Bone Limits>
こっちはHierarchyに違いがありました。
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>
やっぱりNiagaraと組み合わせる事で、見た目が格段にリアルになります。
<Clustered Voronoi Fracture>
崩れるPieceが表示されている中で一番綺麗だと感じました。
<Applying Velocity>
Chaos Field Systemから一個選ぶとなるこれが一番興味深かったです。
正直どれも凄いですが、これが一番理解出来たと言うのもあります。
以上です。
後、見ててかなり気持ち悪くなりました。自然に画面を見ると視線がどうしても地面を見る位置になります。しかし見たい展示物はそれよりもかなり高い位置に配置されていて視線をあっちこっちに移動する必要が出て来ます。多分それで気持ち悪くなるんです。
3.Materialの勉強
3.1 Post ProcessによるOutlineの作成の続き
先週、Post ProcessによるOutlineを Simple Post Process Outline in Unreal [3]で勉強しました。
ここで作成したMaterialですが4.27だと何も起きません。しかし4.24だと以下に示した様に出来ました。
こんなマイナーな部分の勉強のマイナーな問題は普通なら無視して先に進むんですが、このTutorial、以下に示した様に、となりのPixelの値を取得する方法を使用しているんです。
この実装方法、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でも出来ました。と書かれていました。ので、それから確認します。
軽く見ました。
この作者が自分で言っていますが、何でこれで動くのか分かってはいないそうです。いろんな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の作成方法を調べます。
とっても綺麗な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では右に並ぶもの無しの出来栄えです。
これは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に追加する方法についてです。
2つのやり方について解説していました。そんなに難しそうではないので、ここで実装もします。
先週、作成したMaterialを使用します。
まずBlinn Specularから作成していきます。
Half angleを作成する為にAtmosphere Sun Light VectorとCamera Vectorを足します。とTutorialで説明されていますがHalf Angleって半角の事です。意味が分かりません。
一応、言われた通りに作成しました。
そう言えばMaterialのPreview内での床の表示方法が分からないと先週のBlogに書きましたが、さっきのNiagaraの勉強でそのやり方が分かったので床を表示させてみました。
Preview SettingのShow Floorにチェックを入れるだけです。
Normalizeします。
うーん。良く分からん。
Vectorの公式にこういうのがあるんでしょうか?
先を見て行きます。
Normal VectorとDot Productしました。
結果です。
うーん。分かって来ました。
球のNormal Vectorと前半のゴチャゴチャした計算から作成されたVectorのDot Productの結果が球の上のSpecular lightの位置と強さを表しているんです。
正しこの計算結果は間違ったSpecular lightも生成してしまいます。以下に示した様に影側から球を除くとSpecular light が生成されています。
以下の結果を追加します。
結果です。
影から球をのぞくと
となりました。
これを先週までに作成したToon Shadingと合成します。
色々な合成方法がありますが、取りあえず色を指定する前で合成してみます。
結果です。
あんまりToon Shadingと言う感じはしませんね。
Specular lightが弱いので光をもっと強くします。
結果です。
今度は色付けした後にSpecular lightを混ぜます。
うーん。こっちの方がいいかも。
Specular lightにEdgeを追加します。
Specular lightの計算の最後でRoundしました。
結果です。
断然、こっちの方が良いですね。
うーん。成程。
<Phong >
次のやり方はPhong Methodだそうです。
あ、そう言う事か。
分かりました。
Phone ShadingのSpecular lightを実装するんですね。Blinn Shadingは知らないんですが調べてみます。
Learning OpenGLのAdvanced Lighting [7] に説明がありました。
どうやらBlinn Specular lightはPhongの改良型の様ですね。
このサイトに以下に示した分かり易い図も載っていました。
これは後で読む事にします。
まずPhongのSpecular lightの実装からやって行きます。
PhongのSpecular lightの計算方法ぐらいは今でも覚えてると思いたいですが、覚えていません。
以下の方法で実装しました。
これも後で復習します。
結果です。
Ben先生、Jim Blinn氏についてはかなり親しみを込めて紹介していますが、Phong氏に対してはあんまり興味ないみたいですね。
この後の実装はBlinn Specular lightと同じなので結果だけ示します。
実装です。
結果です。
これだけ見るとBlinnのSpecular lightの方が断然良いですね。
3.4 PhongのSpecular lightとBlinnのSpecular lightの理論を復習する
まずPhongのSpecular lightですがLearning OpenGLのBasic Lighting [8]に分かり易い解説が載っていました。
もうこの解説のままですね。
この部分でLight SourceのNormal Vectorに対しての反射を計算しています。上の図のR Barがこの計算結果と同じになります。
その後、Light SourceのNormal Vectorに対しての反射させたVectorつまりR BarとCamera VectorでDot Productを計算します。
これは” 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 OpenGLのAdvanced Lighting [7]で勉強します。
解説を読むと視線と光のVectorのHalfway Vectorを計算します。そのHalfway VectorとNormal VectorのDot ProductがBlinnのSpecular lightになります。
それでHalfwayのVectorの計算方法ですが以下の式で計算出来るそうです。
うん。これの理屈が分からない。けど今回はここは無視します。
この式と以下の実装はやっている事が全く一緒です。
はい。
絶対値で割るのはNormalizeしてるからです。ので全く同じ事をしています。
この後、Phong と同じ様にDot Productを計算します。
正し、Normal Vectorとです。
UEの実装でも全く同じ事をしています。
はい。理解出来ました。
3.5 Toon Shadingのまとめと感想
これで、Ben Cloward先生のToon Shadingが終わりました。Projectionの時とは違い、ほぼ簡単でした。
Toon ShadingはTextureを利用する方が質が高いものが作成出来そうです。
OutlineはPost Processの勉強がまだ終わっていませんが、本当のOutlineでアニメの線画とはかなり違っている気がします。MMDのモデルをUEにImportしてそれにOutlineを追加した場合、どう見えるのか試してみたいですね。
Specular Lightはまあ、あってもなくてもいい気がします。Tutorialでも言っていましたが瞳のキラキラを作成するのには使えそうです。
4.RPGのStoryの改善
以下のBugを直して行きます。
と言っても今週だけで全部を直すのは無理なので、1,2個ずつ直して行きます。
4.1 宿屋、道具屋、武器屋、神殿のUIの直し
宿屋、道具屋、武器屋、神殿のUIを統一したデザインにします。これらをどう直すのかについて決定する必要があります。
<ボタンの配置について>
「会話」と「出る」は4つ全てのUIにあります。以下の様に上と下に配置する事にします。
武器屋のUIです。
宿屋です。
神殿です。
これ見て思ったんですが、神殿の機能は宿屋と統合しても良い気がしてきました。
宿屋に泊まると自動的にSaveされ、Saveを選択した場合はSaveのみ出来る訳です。
<PlayerのParameterの表示について>
現状、以下の様な表示になっています。
HP 100/100
MP 20/20
と表記すればMHPやMMPは要らないです。
名前、職業、Levelの表記もあると便利だと思います。
こんな感じで作成してみました。
以下の様になりました。
金貨も追加します。
これを全部のUI上で作成するのは面倒なので新しいWidgetで作成してそれを読み込む事にします。
新しいWidget、
を作り、先程作成したParameterの表を丸ごと、Copyします。
Widget内に使用するWidgetの場合、Canvasを使用したままにするとサイズが指定した値を保っていたはずです。
のでこのやり方でやってみます。
ただし私がWidgetの作成方法を勉強したTutorialではWidget内に作成するWidgetでCanvas Panelは絶対に使用しませんでした。のでこのやり方が正しいのかどうかは分かりません。
武器屋のUIにこのParameterのWidgetを追加しました。
結果です。
良いんじゃないでしょうか?
ParameterのWidgetに実際のPlayerの操作するキャラの値を表示する実装を追加しました。
結果です。
出来てそうですね。
所持している金貨も同様にWidgetにします。
以下の様に武器屋のWidgetに追加しました。
実際のPlay中の画面です。
道具屋も同様に直します。
うーん。
まあ、前よりはマシです。
宿屋も直します。
これを
以下の様にしました。
実際の画面です。
神官はもしかしたら無くしてSaveする機能は宿屋と統合するかもしれないので今回は、そのままにしておきます。
4.2 「Start 画面からMap1に移動する時、Map1のLandscapeが完成する前にCharacterが生成して落ちてしまうBug」を直す。
このBugの本当の問題はPackagingした後でどうなるのかです。
現状、対症療法として石をPlayer の操作するキャラが生成される場所に配置しました。
これでいけると思ったんですが、Persistent LevelがSave出来なくなってしまいました。
一端、消します。
あれ。
直りません。
ああ。
新たなBugを生成してしまいました。
<Persistent LevelがSave出来ないBugを直す>
調べたらPersistent Levelだけじゃなくて
もSave出来なくなっています。
これらを直していきます。
一番簡単そうなLevel 2_1を見てみます。
このPlanはLevel 2_1内に配置されていますがPlaneはMap1に属しています。
消してみます。
直りませんね。
正直、今回問題は何処が原因なのか分かりません。
うーん。と悩んで、Task Managerを開いて見たらUE Editorが2個動いていました。
偶によくある。と言う奴で、UEのEditorが裏でもう一個起動していて同じProjectを開けている事があります。これはTask Managerを開いて見ないと分かりません。
PCの下の部分に2個のEditorが表示される事もないです。
何かPCが普段よりうるさいなと思っていたのですが、UE5でFluid Simulationを動かした後だったので、気のせいと思っていました。
もう一回石をMap1に配置しました。
今度は普通にSave出来ました。
5.Open Worldの検証
5.1 先週の検証
先週、Height Mapと実際のLandscapeの関係を以下のように推測しました。
これを確認します。
まずUEのHeight Mapは1009x1009 Pixelにすべき説はどこから来ているのかから検討します。
公式のDocumentであるLandscape Technical Guide [9]によると
お勧めの中に、結構色々なSizeがあります。
試しに1009x1009のImageを作成してそれをImportしてみます。
Importしようとしたら以下の設定が出て来ました。
これってさっきのLandscape Technical Guide [9]の設定と同じですね。
高さのScaleだけ半分にして作成してみます。
出来ました。
サイズを見ると一辺1009mになっています。
今度はScaleのサイズを先週、計算した値に変更して別のLandscapeをImportしてみます。
結果です。
やっぱり一辺が16kmになっています。
一個のComponentのサイズが2㎞になっていました。
先週の予測と全く同じ結果になりました。
しかしこれだけ大きくしても
Levelは一個しかありません。
後、以下に示しましたが、Sky Sphereが白く表示されています。これってどうやって動かすんでしょうか?
Sky Sphereの件は後で考えるとして、今度は1009x1009でScale が100のLandscapeを16枚作成してみます。
以下のCreate Newから作成しました。
Persistent Levelの隣に作成しました。
でもLevel Detailsに何も表示されません。
World Compositionを使用している他のProjectを見たら以下のようにLevelsの隣に別なボタンがありました。
調べたら以下のCheckを最初に入れる必要がありました。
前に作成したSub Levelを消して
を入れました。
以下の方法で出来ました。
LevelsからCreate Newを選択します。
名前を入力しろと出て来ますので1_3としました。
その後で生成された1_3を選択します。
選択すると水色になります。
後は1009x1009のLandscapeを作成するだけです。
先程のHeight Mapを利用して3つのSub Levelを作成してみました。
Streaming Distanceを500mにセットして
テストします。
真ん中の山をうろうろすると
隣のSub Levelの山が読み込まれました。
これ見ると、UE4ではSub Level一個のLandscapeの大きさは1009m^2を想定していたんだなと、感じました。
Map1では、Sub Level一個のLandscapeの大きさは
60mで作成してました。
うーん。
この前DownloadしたA Boy and His KitのSub Level一個に入っているLandscapeの大きさは5㎞でした。
これ位が適切なSub Level内のLandscapeの大きさなんでしょうね。
<先週の復習のまとめ>
徒然なるままに記述していたのでまとまりがなくなってしまったのでここでまとめ直します。
- 先週の予測は全て合っていました。今回実際にLandscapeを作成して確認しました。
- 16㎞^2のOpen Worldを作成する最も適切な方法は1009x1009のHeight Mapを1km^2のLandscapeとしてImportし16x16枚それを作成する事のようです。
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にまとめられていますが、以下に示した様に
Import Tiled Landscape…からImageを選択しています。
しかしその時に選択したImageがpngのFileじゃないんです。
こういうやつです。
その後で、MaterialをセットしてそれぞれのLayerに対してHeight Mapを読み込んでいます。
このやり方で、16km^2のOpen Worldを作成する方法は理解出来たんですが、World Machineを使用してOpen World用のHeight Mapを作成する方法が分かりません。特に上記に出て来たImage Fileの作成方法がです。
これに関してはWorld Machineの有料版を買って自分で作成してみるしかありません。しかしそれだけのお金を掛ける価値があるのかとなると、うーん。となってしまいます。
更にもう2つ、Smart Poly氏が作成したOpen WorldのTutorialがありました。
この辺も見ておく必要がありますね。
6.Gaeaの勉強
まだ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が出来るかどうかが問題みたいです。
となるとPro versionを購入する必要がありますね。大体$200となりますね。
しかしSmart Poly氏の説明だとFree版もかなり良いらしいです。World Machineの無料版は516 x 516までしか作成出来ないみたいな事を言っていました。
となると無料版でも1009x1009のHeight Mapは作成出来るみたいですね。
うーん。
となると一年位は無料版で勉強してみるのが手ですね。
今回作成してるRPGのMapはこの無料版で作成した物に最終的には変更出来る様にしたいですね。
6.2 Gaeaの公式のTutorialを見る
何と、Gaeaの公式のTutorialがYouTube上にある事が分かりました。
最初の一個目を見てみます。
A 6-minute introduction to Gaea [12]です。
軽く見たんですがかなり分かり易いです。実際にやってみる事にします。
<A 6-minute introduction to Gaea [12]を勉強する>
Start Screenですが全然違いますね。
Tutorialのは
となっていますが、私のは
です。
Tutorialの作成した年を見たら2019年でした。それならVersionがかなり前のものになるので仕方ないですね。
TutorialはGraphを選択しました。
私のVersionではどれがそれに当たるのか分かりません。先週、選択したDesert Mountainを開きます。
Tutorialの実装は
だけです。
元々あった実装を消してTutorialと同じ実装を組んでみました。
結果です。
折角作成したのですが、Tutorialもこの実装を消してしまいました。一から作成するそうです。
Slop Noiseを入れます。
結果です。
もう一個Slopを追加します。
こんな結果になりました。
2番目のSlop NoiseノードのParameterの値を変えます。
2つのSlop NoiseノードをCombineノードで繋ぎます。
3つのノードのParameterを調整すると
となりました。
Erosionノードを追加します。
結果です。
Tutorialでは以下の様に川が出来ていますが、私のは単なる平地みたいです。
Tutorialで2Dを表示しています。
同じTool Barは存在しないので先週、習った方法で2D を表示しました。
そしたら3Dの表示が
になってしまいました。
画面を右クリックして以下のBoxを表示して
Flowを表示します。
結果です。
これを利用してColor Textureを作成したりするそうですが、今回のTutorialではまだしないのでこの機能は今は無視して良いそうです。
今度は、少しSand Stonyにするそうです。
Terraceノードを追加します。
しかしどこにあるのか分かりません。
Graph画面を右クリックしたら以下のBoxが表示されました。
TeとタイプしたらTerraceが表示されました。
Tutorial通りに繋ぎました。
結果です。
もう一個Terraceノードを追加します。
Tutorialで、今度はさっき私がやった方法でTerraceノードを追加しました。
恐ろしい位の偶然の一致です。
偶に私、テレパシー能力があるんじゃないのかと思う時があるんですが、今回もそうでした。
Tutorialと同じ方法で追加するのもあれなので、Duplicateしました。
結果です。
更にErosionノードをTerranceノードの後に追加しました。
結果です。
うーん。良く分かりません。
Resolutionを1kにします。
そして出力します。
Erosionを右クリックして以下のBoxを表示し、Mark for Exportを選択します。
TutorialのBuildがないな。と思ったら右端にありました。
Unreal Engine用にResolutionを1009にセットしてBuildしました。Color SpaceがSRGBになっていますが、これの意味はまだ分かりません。
結果です。
うーん。一応、Height Mapらしきものが生成されていますね。
7.雪山のMapの作成
7.1 先程作成したHeight Mapを使用してLandscapeを作成する
Importしました。
Play画面です。
台から飛び降りました。お尻がぴゅーとしましたが無事に着地しました。
先週まで作成していたMaterialをセットします。
Layerを適当に塗り分けます。
結果です。
適当に塗ったので、Dirtと雪が混じっているLayerや崖のLayerが脈絡なく存在しています。
飛び降ります。
うん。いい感じです。
雪玉は多すぎますね。調整します。
草は要らないですね。外します。
こっちの方が良いですね。
代わりにSnow Dirt Blend LayerにDirtを追加しました。
そしてDirtに草を追加します。
結果です。
一寸だけ微調整します。
IceとSnowは2つに分けました。
結果です。
7.2 How to INSTANTLY TEXTURE your landscapes in UE4 - Unreal Engine tutorial [13] を勉強する
崖の部分を自動で選択する方法をまとめます。
まず軽くTutorialを軽くみます。
全然、崖の部分を自動で選択する方法とは関係ないですが、Texture SampleのSampler Sourceの設定をShared: WrapにしないとTextureの数が増えるにつれてCompileしなくなるそうです。
World Aligned Blendノードを使用します。Slop Sharpness に30、Slop Biasに-12をセットします。
これをBase Colorに繋ぎます。
結果です。
うーん。何か違う。
Tutorialのは
こんなのです。
なぜか、Dirtの箇所とかが残っています。
まあ、後で考えます。
Tutorialでは以下の様にBlendしていました。
よし分かりました。
Tutorialだとこの後でAlpha値を使う為の方法を解説するのですが、まずNormal 値でどうなるのか見る事にします。
Snow AのLayerにだけセットしてみました。
結果が分かりにくかったので、全体をSnow Aで塗り直しました。
結果です。
正直、これで十分です。
同じ事をDirt やIceのLayerでやります。
結果です。
Play中の画面です。
うーん。雪がこんこんと降ると言うよりあんまり雪が降らない地域にたまたま降ったって感じですね。
まあ、良い感じなのでこれでOKにします。
7.3 来週以降の予定
以下の効果を追加していく予定です。
Gaeaを使用したLandscapeは今回既にやりましたが、もう少しGaeaを勉強した後で、また新しいLandscapeを作成する事にします。
となると来週やるのは雪が降るEffectの追加ですね。
これで一応、雪山のLandscapeの作成は完成とします。
8.Game Design:ポケモン+HxHの念能力( 戦闘システムの作成)
8.1 対戦相手の召喚するMonsterの調節
を行います。
新しいStageを考えました。
テストします。
Stage 5で負けました。
Game Overした時にどのStageで負けたのか知りたいです。
Game Overの画面にStage名を追加しました。
結果です。
8.2 戦闘を沢山してみる
Gameを遊ばない事にはどのStageまで行けるのか分かりません。何回か遊んでみます。
一回目はStage 7で負けました。
結構、長時間遊べます。
今度はStage 8で負けました。
時間は20分位です。
Dragonの攻撃力が高すぎます。
100下げて200にしました。
何と、3回目はStage10のMonsterを倒す事が出来ました。
存在しないStage 11に突入しました。
時間は30分程度かかりました。
Stage 10を勝利した時の表示がほしいですね。
8.3 Stage 10を勝利した時のPhaseを作成する
以下のWidgetを表示するようにしました。
テストします。
テストしますが、妖精族のMonsterだけで最後まで行ける気はしませんので、以下の亡霊族のMonsterが召喚出来る様にします。
テストします。
なんと、Stage 7で負けてしまいました。
仕方ないのでDragon軍団で戦う事にします。
以下の様にDragonが戦います。
勝ちました。
表示されています。
こんなものでしょうね。
一応、これで最低限の仕組みは完成しました。
8.4 最低限の仕組みで遊んでみてこのGameは面白かったか?または面白くなる可能性があるのか?
一応、最後まで遊んでみたので、このGame Systemの総括をやろうと思います。
<遊んでみて面白かったか?>
それなりに面白かったです。3回ぐらい戦ったら休憩がほしいです。
それ以外はかなり面白かったです。
やっぱり戦闘中に考える必要があるのは楽しいです。
<このまま制作を続けるべきか?>
続けるます。これは続ければ光る気がします。
<問題や課題は?>
誰かにこのGameをPlayしてもらって感想を聞きたいです。
そのためにはPlayの仕方を説明する必要があります。あるいは説明しなくても理解出来るように改良する必要があります。その辺を来週は考えたいと思います。
9.Blenderの勉強
またBlenderの勉強をさぼってしまいました。もう2週間、全く触っていません。
で、その理由を考えたんですが、Blenderの勉強は面白くないんです。
何で楽しくないのか考えたんですが、思い出しました。昔、大学でMayaの使用方法を習った時に、プロのDesignerから私のDesignをバカにされた事があったからです。
2022-02-14のBlogにあった灯籠風のDesignですが上手でしょう。
私、専門はEngineerですが絵を描くのは得意だし、芸術の才っての最初から持っているんです。その時も何で、馬鹿にされたのか全く理解出来なかったです。ただ滅茶苦茶、怒ったのだけは覚えています。
で、同じ事を言ってくるDesignerが必ずこれから出て来るはずなんです。それが脳裏に写ってやる気が無くなるんです。
そうだ。
3d Modelを馬鹿にされたら無視したれ。
どうせDesignerは3d GraphicのProgrammingがどうやって構成されているのか深い所では分かってないでしょう。どっか理解出来ないで詰まるはずです。
3d modelerとしてのキャリアは終りになる訳ですから、そん時に私に失礼な事を言ったDesignerは心底悔いる事になるでしょう。
9.1 先週までの復習
<Selection Method>
紙に書いてPCの画面に貼ってあるヤツの復習です。3d ModelのVertexの選択方法が書かれているヤツです。全部覚えていました。
<2022-02-14のBlogの復習>
全部やりました。結構忘れていました。
<2022-02-21のBlogの復習>
3D Cursorの動かし方は結構、忘れていました。
以下の木を作成しながら復習しました。
こういう風に楽しみながらやって行こうと思います。
<2022-04-03のBlogの復習>
Ctrl+Num+を利用して雪が被ったFoliageを作成しました。
F3のChecker Deselectを試してみました。
Selectされた面は黒くしました。
もう一回、F3のChecker Deselectを試して今度はCtrl + Hで選択された面を消してみました。
前に黒くした面が残っています。毎回、同じ面を選択する訳ではないみたいですね。
<Mesh Editing>
Knife Toolを使用して以下のくぼみを作成しました。
9.2 Blenderで何か作成する
兎に角、Blenderの勉強が楽しくないのが問題です。それで何か作成する事にします。
鳥居を作ってみました。
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]. YouTube. https://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]. YouTube. https://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]. YouTube. https://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