1.今週の予定
先週は一週間の休みを取りましたが、実際はYouTubeの動画を作成していてあまり休めませんでした。
マイクに向かって喋ったり動画の編集をしたり慣れない事をやったので結構大変でした。
今週から2023年の後半戦になります。
今週からは勉強内容を調整します。
まず勉強した内容をTutorialとしてYouTubeに公表出来るように勉強の内容を変更する事にします。
後、これ以上勉強しても意味がなさそうなのはこの時点で勉強を中止する事にします。
今週も忙しいのでそんな感じの勉強をしていこうと思います。
2.DirectXの勉強
<Olympus Game Engine>
OlympusMonsTutorialsの4番目のTutorialであるC++ DirectX 12 Game Engine - [S01E04] - Settings and Loggers [1]のC++ DirectX 12 Game Engine Episode 4 : Settings and Loggersを実装しました。
更に次の節であるPrint Log Functionを勉強しました。
このTutorialで最も勉強になったのは、複数のProjectを同じSolution内に作成してそれぞれのProjectのClassをそれぞれのProject内で使用する方法について勉強した事です。
このTutorialはその名前の通りGame EngineをDirectX12で作成するもので、DirectX12の勉強だけに集中するものでは無かったです。
Game Engineの作成には役に立ちますがDirectX12を学ぶには最適とは言い難いです。
このTutorialの勉強はPendingします。
<「DirectX 12の魔導書」の勉強>
「3.3 画面色のクリア」の途中まで勉強しました。
この教科書と「Direct3D 12 ゲームグラフィック実践ガイド」の内容は相互に補い合っていて、両方を勉強すると理解が進みます。
内容もDirectX12そのものについての勉強が90%を占めています。
この教科書の勉強は継続する事にします。
<「HLSLシェーダーの魔導書」を勉強する>
「4.1 Lightingなしの3D Model表示」まで勉強しました。
この教科書の内容は、HLSLのShaderの使い方に特化していると言うより、3D Graphicsの基礎を教える内容に特化しています。
3D Graphicsの基礎はOpenGLを勉強した時に一通り理解しているので、この教科書の勉強はPendingします。
<「Direct3D 12 ゲームグラフィック実践ガイド」の勉強>
「2.3.4 Command Listの生成」まで勉強しました。
この教科書の内容は「DirectX 12の魔導書」とほぼ同じです。ただしその説明が違うので、この本でも勉強すると「DirectX 12の魔導書」もより深く理解出来るようになっています。
教科書の難しさも今の自分のLevelに合っています。
この教科書の勉強も続けていきます。
2.2 来週からの勉強内容について
まあ、先週までの予測と同じですが、「DirectX 12の魔導書」と「Direct3D 12 ゲームグラフィック実践ガイド」の勉強のみを続ける事にします。
元々、DirectX12の勉強は何かの成果を求めてやっている訳では無いので、気楽に続けていきます。
「HLSLシェーダーの魔導書」のDeferred Shadingだけは勉強しておきたいので、「DirectX 12の魔導書」と「Direct3D 12 ゲームグラフィック実践ガイド」を最後まで勉強したら「HLSLシェーダーの魔導書」の勉強に戻ります。
その時は「HLSLシェーダーの魔導書」の提供している色々なClass内のCodeも理解出来るようになっているでしょう。その時にDeferred Shadingを勉強します。
3.LandscapeのみのGameを作成する
3.1 今までの勉強内容
以下の島を作成中です。
以下に今までの作業内容をまとめます。
今年の最初のBlogです。
今まではRPGそのものを作成しようとしていたのですが、それだと永遠に終わらない事に気が付きました。
のでLandscapeの部分だけ作成する事にしました。
Gaeaで以下のHeight Mapを作成しました。
UE5にImportして以下のようにMaterialを追加しました。
Materialは単なる色をLayerに使用しています。
Water Body SystemのOcean、LakeそしてRiverを追加しました。
Packagingを試しています。
川が生成されていませんでした。
色々別な方法で川を表現しようとしましたが、駄目でした。
Landscape用のMaterialを作成しています。
Materialに章するためのTextureを選んでいます。
MaterialのParameterの最適値を決定するためにParameterの値を調整しました。
Landのテカリを直しました。
更に手動でLandscapeの凸凹を直しています。
砂浜に足跡が残せるようにDisplacementについて調査しています。
ただし足跡の作成の優先順位は低く以下の様になるはずだと述べていました。
LandscapeとFoliageで配置するStatic MeshのNanite化は既に出来ています。
Runtime Virtual Textureを使用したLandscapeとNaniteの混合は実行しましたが、更に試したい部分があります。
その後で、Virtual Height Field Meshesを使用した足跡の作成を行うべきみたいです。
このBlogでまとめた作業の順序はかなり的を射ていますね。
後で参考にします。
木のFoliageを配置しました。
Naniteも効いています。
LandscapeをNaniteにしたらMaterialが真っ黒になってしまったと書かれています。
この問題は後に解決したはずです。
しかしどうやって解決したのか覚えていないです。
Procedural Foliageのやり方について復習しています。
公式のProcedural Foliage Tool [2]を確認したらUE5.1では以下の様に書かれていました。
UEFNでもProcedural Foliageが使用出来るんですね。
後、このProcedural FoliageはUE5.2のProcedural Content Generation、通称PCGとは全く違う機能です。名前が似ているので混乱しますが、PCGとは全く違う機能です。
Procedural Foliageで小さな岩を配置したのですが、
Landscapeから部分的に浮いてしまいました。のでこの方法は使用しない事にしました。
Runtime Virtual Textureの使用方法を確認しました。
そしてその後でRuntime Virtual Textureを実装しました。
結果です。
何とVirtual Textureを使用した場合、LandscapeのTextureのSizeが以下の様に
1000倍位大きくなってしまっています。
LandscapeのMaterialに作成したParameterであるTexSize Farの値を変更すると
以下に示した様にVirtual Textureによって生成されたLandscapeのMaterialのTextureのSizeとLandscape用のMaterialで使用されているTextureのSizeが一致する事が判明しました。
この結果から2023-03-13のBlogのBugの原因を突き止めました。
そしてC:\Insert Name Here氏のTutorialの助けを借りて
以下の様に完全に直しました。
ただし一番直したい地面とのつなぎ目ははっきり残っています。
この部分を直す秘策があるので後で試してみます。
ここでは以下の2つ事を試していました。
- Landscape全体をFoliageでPaint
- ある地点から見た風景を本物らしくする
まずLandscape全体をFoliageでPaintすると
私のPCがCrashします。
Culling Distanceの値を調整する事で対応しています。
何とWorld Partitionの継ぎ目を移動する時にFPSが落ちて移動が恐ろしく遅くなる事が判明しました。
これはFoliageの岩の数を減らすと
直る事が判明しました。
となるとFoliageで配置出来る岩の数には限りがあるという事でしょうか?
このBlogの結論としては、多分無理。となっていました。
「ある地点から見た風景を本物らしくする」ですが以下の様になっていました。
雰囲気があります。
これを見て思ったんですが本物そっくりにするのと、その風景に雰囲気があるのは全然違う事だという事です。
以下の事について調査しています。
- GPU Crashed Errorについて
- FoliageにおけるStatic Meshの数
- Shader Complexity
更に風景を更に改良していました。
最後にUE5.2におけるWater Systemの確認をしていました。
なんとWater SystemのRiverがPackagingした後でも存在しています。
WindowsEngine.iniのPool Size VRAM Percentageの値を変更してVRAMの使用率の変化を観察しました。
結構下がっているみたいですね。
次にLandscapeの境界を跨ぐときに移動が遅くなる原因を調査しています。
その次にこのProjectをUE5.2 でPackagingした場合、Water SystemのRiverが追加されているのかを確認しています。
最後にLandscapeをNanite化してもLayerを指定する方法があるのかを調査しています。
これはUE5.2で試したら普通に出来ました。
最後にLandscapeのMaterialを調整して
Materialの負担を減らしました。
結構、複雑な事を沢山やっていて何をやったのかを理解するだけでも大変でした。
新しいProjectをUE5.2で作成し直す事にしました。
これはUE5.2 だと
- Packagingした時にWater SystemのRiverが表示される
- LandscapeのNanite化が出来る
の2つのMeritがある事が判明したからです。
以下の地形を作成し直しています。
Water Bodyの湖と川も追加しました。
Landscapeで渓谷を作成してその上をStatic Meshで覆い
洞窟を作成しました。
後、川の色を変える方法を勉強していました。
川を透明にした結果です。
<2023-05-01のBlog>
2023-04-24のBlogの「Gaeaの勉強」で作成したLandscapeを使用する事に変更しました。
以下に示した様にLandscapeの境界でRenderingの差が出ています。
これが直せません。
更にCamera Speedの値がおかしくなってしまいました。
洞窟を作成するためにNumen Brothers氏のTutorialを勉強しています。
LandscapeのMaterialを改良して以下の様にしました。
次に洞窟を作成しています。
Foliageを使用して木を配置しました。
海岸線の凸凹を直しています。
Water System OcceanにFoamするためにNumen Brother氏のTutorialを勉強しています。
Water Body OcceanのParameterであるAffect Landscapeの効果を検証しています。
これは最初から切った状態でLandscapeを作成すべきだと思いました。
後、山頂探索をしています。
山を歩くには山頂に沿って歩くと疲れない。と聞いたのでこのLandscapeでも同じか試しています。
何と、山頂に沿って歩くと今まで到達する事が出来なかった場所にも行ける事が判明しました。
こういうのはGameと言うより実際の登山のSimulationとして面白いと思いました。
Water System OcceanにFoamを作成しました。
結果です。
ただしFoamがオカシイ所も沢山あってそれも示しています。
海岸線を回ってOceanのFoamの形状を確認しています。
今、この感想を述べるとFoamの追加はほとんど意味が無かったです。
ここで初めてGameを制作する事に疑問を抱いています。
はっきり言ってUEのQualityそのままにGameを作成するのは無理です。
どこかで破綻します。
それよりも映像作品としてYouTubeに公開したり、Meta-Verse空間として利用したりする方が現実的な気がします。
川を追加しています。
PackagingのTestをしています。
普通に出来ていました。
撮影場所としての検討をしています。
MetaverseのEvent会場としての検討もしています。
Virtual Textureの追加を検討しています。
海岸の砂浜に足跡を追加する方法を検討しています。
この辺は、優先順位の検討が必要です。
3.2 今までの勉強内容を復習して分かった事
非常に簡単な復習ですが、今まで何をしたのか判明しました。
それでこれから何をすべきなのかも自ずと判明しました。
ただしこれから何をすべきなのかについてですが、それは以下のどれを目的にするのかによって変わってきます。
- 今までのLandscapeの作成を継続して作成する
- 撮影場所としてのLandscapeの作成をする
- GameとしてのLandscapeの作成に転向する
- MetaverseとしてのLandscapeの作成に転向する
のでこれらについて少しだけ解説します。
<今までのLandscapeの作成を継続して作成する>
これは今の作成しているLandscapeの作成の続きをそのまま続けるという事です。
その場合これから以下の実装を行う予定になります。
- Virtual Textureを使用したLandscapeとStatic MeshのMaterialの混合
- 海岸の砂浜に足跡を追加する
しかしこれを継続して最後まで完成したとしても、性能が非常に高いPCだけで動く偏ったGameになります。
Gameとして作成する事にどれだけ利益が上げられるのかどうかが問題です。
会社を作って株式上場出来る程売れるGameが完成するなら継続すべきですが、どうでしょうか?
そういう可能性って全くないと思っています。
<撮影場所としてのLandscapeの作成をする>
こっちは経済的に成功する可能性はかなりあると思っています。
なんせ、YouTubeなどに代表される映像Businessは伸びる一方です。
UE5で作成した本物と区別がつかないCGを発表するだけで世界的にバズる訳です。
Photo-RealisticなLandscapeの作成を継続するなら、Gameを作成するよりこっちに集中すべきです。
ただしこれから実装する内容は大きく変化します。
まず映像作品としてのUE5の使用方法をTutorialで勉強する所から始める事になります。
<GameとしてのLandscapeの作成に転向する>
これはどのPCでも動かせる必要があり、そのためにはPhoto-RealisticなLandscapeは諦める必要があります。
StylizedなLandscapeを作成する必要がありそれを行うためには、また一から作成し直す必要があります。
<MetaverseとしてのLandscapeの作成に転向する>
これはUEFNでLandscapeを作成する事になります。
コンサート会場や神社の作成をして沢山のUserに来てもらうのが目的になります。
これは既にUEFNの勉強でやっています。
3.3 これから何を目指してLandscapeの作成を行うのか?
まず一番成功する可能性が少ないのが、このままGameに使用するためのPhoto RealisticなLandscapeの作成を継続する事です。
Gameとして完成しても経済的に成功する可能性が低いです。更に完成してもこのLandscapeを普通に表示出来るPCは極一部の高性能なPCのみになります。
この方向に進むのは崖に向かって直進しているようなものです。
絶対にやめるべきです。
次に「撮影場所としてのLandscapeの作成をする。」ですが以外と成功する可能性が高い気がしています。
更に今までLandscapeを作成していて培った技術がそのまま使用出来るので、この半年間の努力も無駄にならないです。
まずは映像を作成するためのUE5の使用方法を勉強する事になります。
三番目の方法としてどうしてもGameを作成したいのならStylizedしたLandscapeに変更する事も出来ます。
こっちはあまり検討していません。
一つだけ今分かっているのは、UEFNとの差別化をどうするのかが問題になる事です。
最後の「MetaverseとしてのLandscapeの作成に転向する」ですがこれを採用するとUEFNの勉強と統合出来るので、YouTubeの動画作成にもっと時間を避けるようになります。
今、結論を出すのではなく来週まで考える事にします。
4.Materialの勉強
これはそのまま継続する事にします。
5.Niagaraの勉強
これもそのまま継続します。
6.戦闘システムの続きを作成する
これは一端完成とします。
7.Gaeaの勉強
当然、YouTubeでTutorialを作成するために続けます。
Geologyの勉強も続けます。
8.Houdiniの勉強
これも当然続けます。HoudiniのProceduralな生成でアニメ調のCharacterを生成出来ないのか気になります。
その辺にProceduralな3Dの生成の未来が有る気がします。
9.UEFNの勉強
これも当然続けます。
Mapが完成したらFriendを招待してみんなでそのMapでPlay出来るのか確認します。
10.YouTube動画の作成
今年の残りの半年はこっちに集中します。
Blogの手を抜く訳では無いですが、Blogに費やす割合は今年の前半の半分位にするつもりです。
その代りYouTubeに集中します。
11.まとめ
これからの半年は以下の内容に集中します。
- LandscapeとUEFN
- NiagaraとMaterial
- GaeaとHoudini
- DirectX12
残りはYouTubeの動画の作成に集中します。
12.参照(Reference)
[1] OlympusMonsTutorials. (2021, May 9). C++ DirectX 12 Game Engine - [S01E04] - Settings and Loggers [Video]. YouTube. https://www.youtube.com/watch?v=Q7JKBDNIgvI
[2] Procedural Foliage Tool. (n.d.). https://docs.unrealengine.com/5.1/en-US/procedural-foliage-tool-in-unreal-engine/